Skip to content

Instantly share code, notes, and snippets.

@jamesonwilliams
Last active February 28, 2020 22:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jamesonwilliams/032bfaa23020a04b4b5561bc85b33f00 to your computer and use it in GitHub Desktop.
Save jamesonwilliams/032bfaa23020a04b4b5561bc85b33f00 to your computer and use it in GitHub Desktop.
Simple DataStore Consumer App

Sample App Consuming Maven Local

app/src/main/java/com/amplifyframework/dsconsumer/MainActivity.java:

package com.amplifyframework.dsconsumer;

import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import com.amplifyframework.AmplifyException;
import com.amplifyframework.core.Amplify;
import com.amplifyframework.core.model.Model;
import com.amplifyframework.core.model.ModelProvider;
import com.amplifyframework.core.model.annotations.ModelConfig;
import com.amplifyframework.core.model.annotations.ModelField;
import com.amplifyframework.datastore.AWSDataStorePlugin;
import com.amplifyframework.util.Immutable;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;

public final class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        appendLine("Configuring Amplify...");
        SimpleProvider modelProvider = new SimpleProvider("v1", KoolModel.class);
        try {
            Amplify.addPlugin(AWSDataStorePlugin.forModels(modelProvider));
            Amplify.configure(getApplicationContext());
        } catch (AmplifyException configurationFailure) {
            appendLine(Log.getStackTraceString(configurationFailure));
        }
    }

    @Override
    public void onStart() {
        super.onStart();
        Amplify.DataStore.save(new KoolModel(),
            save -> appendLine("Saved a model: " + save),
            failure -> appendLine(Log.getStackTraceString(failure))
        );
    }

    private void appendLine(CharSequence text) {
        runOnUiThread(() -> {
            TextView textView = findViewById(R.id.text_view);
            textView.append(text);
            textView.append("\n");
        });
    }

    /**
     * A simple Amplify model.
     */
    @ModelConfig
    private static final class KoolModel implements Model {
        @ModelField(targetType = "ID", isRequired = true)
        private final String id;

        KoolModel() {
            this.id = UUID.randomUUID().toString();
        }

        @Override
        public String getId() {
            return id;
        }

        @Override
        public String toString() {
            return "KoolModel{" +
                "id='" + id + '\'' +
                '}';
        }

        @Override
        public boolean equals(Object thatObject) {
            if (this == thatObject) {
                return true;
            }
            if (thatObject == null || getClass() != thatObject.getClass()) {
                return false;
            }

            KoolModel koolModel = (KoolModel) thatObject;

            return id.equals(koolModel.id);
        }

        @Override
        public int hashCode() {
            return id.hashCode();
        }
    }

    private static final class SimpleProvider implements ModelProvider {
        private final String version;
        private final Set<Class<? extends Model>> classes;

        @SafeVarargs
        SimpleProvider(@NonNull String version, @NonNull Class<? extends Model> ... classes) {
            this.classes = Immutable.of(new HashSet<>(Arrays.asList(classes)));
            this.version = version;
        }

        @Override
        public Set<Class<? extends Model>> models() {
            return classes;
        }

        @Override
        public String version() {
            return version;
        }
    }
}

Root ./build.gradle

buildscript {
    repositories {
        mavenLocal()
        google()
        jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.6.0'
    }
}

allprojects {
    repositories {
        mavenLocal()
        google()
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

app/build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.2"

    defaultConfig {
        applicationId "com.amplifyframework.dsconsumer"
        minSdkVersion 15
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility = 1.8
        targetCompatibility = 1.8
    }
}

dependencies {
    implementation 'com.amplifyframework:core:0.9.0'
    implementation 'com.amplifyframework:aws-api:0.9.0'
    implementation 'com.amplifyframework:aws-datastore:0.9.0'
    implementation 'com.amplifyframework:rxbindings:0.9.0'

    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'

    testImplementation 'junit:junit:4.13'

    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}

app/src/main/res/raw/amplifyconfiguration.json

{
  "dataStore": {}
}

Amplify Android Library Notes

./gradlew build publishToMavenLocal
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment