Created
May 1, 2019 19:45
-
-
Save kkemple/5f50fbb7dd04d1b2e3710eced441d1f9 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.example.nycworkshopexample; | |
import android.support.v7.app.AppCompatActivity; | |
import android.os.Bundle; | |
import android.util.Log; | |
import android.widget.TextView; | |
import com.amazonaws.amplify.generated.graphql.CreateTodoMutation; | |
import com.amazonaws.amplify.generated.graphql.ListTodosQuery; | |
import com.amazonaws.amplify.generated.graphql.OnCreateTodoSubscription; | |
import com.amazonaws.mobile.client.AWSMobileClient; | |
import com.amazonaws.mobile.client.Callback; | |
import com.amazonaws.mobile.client.SignInUIOptions; | |
import com.amazonaws.mobile.client.UserStateDetails; | |
import com.amazonaws.mobile.config.AWSConfiguration; | |
import com.amazonaws.mobileconnectors.appsync.AWSAppSyncClient; | |
import com.amazonaws.mobileconnectors.appsync.AppSyncSubscriptionCall; | |
import com.amazonaws.mobileconnectors.appsync.fetcher.AppSyncResponseFetchers; | |
import com.amazonaws.mobileconnectors.appsync.sigv4.CognitoUserPoolsAuthProvider; | |
import com.apollographql.apollo.GraphQLCall; | |
import com.apollographql.apollo.api.Response; | |
import com.apollographql.apollo.exception.ApolloException; | |
import com.example.nycworkshopexample.R; | |
import javax.annotation.Nonnull; | |
import type.CreateTodoInput; | |
public class MainActivity extends AppCompatActivity { | |
// tag for logs | |
private static final String TAG = "MainActivity"; | |
// instance of mobile client | |
private final AWSMobileClient CLIENT = AWSMobileClient.getInstance(); | |
private AWSAppSyncClient mAWSAppSyncClient; | |
// used for subscriptions | |
private AppSyncSubscriptionCall subscriptionWatcher; | |
// query, mutation, and subscription methods and callbacks | |
public void query(){ | |
mAWSAppSyncClient.query(ListTodosQuery.builder().build()) | |
.responseFetcher(AppSyncResponseFetchers.CACHE_AND_NETWORK) | |
.enqueue(todosCallback); | |
} | |
private GraphQLCall.Callback<ListTodosQuery.Data> todosCallback = new GraphQLCall.Callback<ListTodosQuery.Data>() { | |
@Override | |
public void onResponse(@Nonnull Response<ListTodosQuery.Data> response) { | |
Log.i("API", response.data().listTodos().items().toString()); | |
} | |
@Override | |
public void onFailure(@Nonnull ApolloException e) { | |
Log.e("ERROR", e.toString()); | |
} | |
}; | |
public void mutation(){ | |
CreateTodoInput createTodoInput = CreateTodoInput.builder() | |
.name("Use AppSync") | |
.description("Realtime and Offline") | |
.build(); | |
mAWSAppSyncClient.mutate(CreateTodoMutation.builder().input(createTodoInput).build()) | |
.enqueue(mutationCallback); | |
} | |
private GraphQLCall.Callback<CreateTodoMutation.Data> mutationCallback = new GraphQLCall.Callback<CreateTodoMutation.Data>() { | |
@Override | |
public void onResponse(@Nonnull Response<CreateTodoMutation.Data> response) { | |
Log.i("API", "Added Todo - " + response.data().toString()); | |
} | |
@Override | |
public void onFailure(@Nonnull ApolloException e) { | |
Log.e("Error", e.toString()); | |
} | |
}; | |
private void subscribe(){ | |
OnCreateTodoSubscription subscription = OnCreateTodoSubscription.builder().build(); | |
subscriptionWatcher = mAWSAppSyncClient.subscribe(subscription); | |
subscriptionWatcher.execute(subCallback); | |
} | |
private AppSyncSubscriptionCall.Callback subCallback = new AppSyncSubscriptionCall.Callback() { | |
@Override | |
public void onResponse(@Nonnull Response response) { | |
Log.i("API SUBSCRIPTION", response.data().toString()); | |
} | |
@Override | |
public void onFailure(@Nonnull ApolloException e) { | |
Log.e("API SUBSCRIPTION", e.toString()); | |
} | |
@Override | |
public void onCompleted() { | |
Log.i("API SUBSCRIPTION", "Subscription completed"); | |
} | |
}; | |
// launches auth UI | |
protected void showSignIn() { | |
CLIENT.showSignIn( | |
this, | |
SignInUIOptions.builder() | |
.nextActivity(MainActivity.class) | |
.build(), | |
new Callback<UserStateDetails>() { | |
@Override | |
public void onResult(UserStateDetails result) { | |
Log.d(TAG, "onResult: " + result.getUserState()); | |
switch (result.getUserState()) { | |
case SIGNED_IN: | |
Log.i("INIT", "logged in!"); | |
// create AppSync client | |
mAWSAppSyncClient = AWSAppSyncClient.builder() | |
.context(getApplicationContext()) | |
.awsConfiguration(new AWSConfiguration(getApplicationContext())) | |
// add our user pool provider | |
.cognitoUserPoolsAuthProvider(new CognitoUserPoolsAuthProvider() { | |
@Override | |
public String getLatestAuthToken() { | |
try { | |
return CLIENT.getTokens().getIdToken().getTokenString(); | |
} catch (Exception e){ | |
Log.e("APPSYNC_ERROR", e.getLocalizedMessage()); | |
return e.getLocalizedMessage(); | |
} | |
} | |
}).build(); | |
break; | |
case SIGNED_OUT: | |
Log.i(TAG, "onResult: User did not choose to sign-in"); | |
break; | |
default: | |
AWSMobileClient.getInstance().signOut(); | |
break; | |
} | |
} | |
@Override | |
public void onError(Exception e) { | |
Log.e(TAG, "onError: ", e); | |
} | |
} | |
); | |
} | |
@Override | |
protected void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.activity_main); | |
CLIENT.initialize(getApplicationContext(), new Callback<UserStateDetails>() { | |
@Override | |
public void onResult(UserStateDetails userStateDetails) { | |
switch (userStateDetails.getUserState()) { | |
case SIGNED_IN: | |
Log.d(TAG, "user signed in: " + userStateDetails.getUserState()); | |
break; | |
case SIGNED_OUT: | |
showSignIn(); | |
break; | |
default: | |
CLIENT.signOut(); | |
break; | |
} | |
} | |
@Override | |
public void onError(Exception e) { | |
Log.e("INIT", "Initialization error.", e); | |
} | |
}); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment