package com.ianhanniballake.contractiontimer.data;
import android.annotation.TargetApi;
import android.content.Intent;
import android.content.IntentSender;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
import android.view.WindowManager;
import android.widget.Toast;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GoogleApiAvailability;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.drive.Drive;
import com.google.firebase.analytics.FirebaseAnalytics;
import com.google.firebase.crash.FirebaseCrash;
import com.ianhanniballake.contractiontimer.R;
/**
* Abstract activity which handles authentication and connection to Google Drive via the Drive.API
*/
public abstract class AbstractDriveApiActivity extends FragmentActivity
implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {
private static final String TAG = AbstractDriveApiActivity.class.getSimpleName();
private static final int REQUEST_CODE_CONNECT = 1;
protected GoogleApiClient mGoogleApiClient;
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_drive);
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi(Drive.API)
.addScope(Drive.SCOPE_FILE)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
}
@Override
protected void onStart() {
super.onStart();
mGoogleApiClient.connect();
}
@Override
protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode != RESULT_OK) {
finish();
return;
}
if (requestCode == REQUEST_CODE_CONNECT) {
mGoogleApiClient.connect();
}
}
@Override
public void onConnected(@Nullable final Bundle bundle) {
FirebaseAnalytics.getInstance(this).logEvent(FirebaseAnalytics.Event.LOGIN, null);
}
@Override
public void onConnectionSuspended(final int cause) {
finish();
}
@Override
public void onConnectionFailed(@NonNull final ConnectionResult result) {
if (result.hasResolution()) {
try {
result.startResolutionForResult(this, REQUEST_CODE_CONNECT);
} catch (IntentSender.SendIntentException e) {
Toast.makeText(this, getString(R.string.drive_error_connect, e.getLocalizedMessage()),
Toast.LENGTH_LONG).show();
FirebaseCrash.report(e);
}
} else if (!isFinishing() &&
(Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1 || !isDestroyedAlready())) {
try {
GoogleApiAvailability.getInstance().getErrorDialog(this, result.getErrorCode(), 0).show();
} catch (WindowManager.BadTokenException e) {
Log.e(TAG, "Error showing error dialog", e);
FirebaseCrash.log("Error showing error dialog");
FirebaseCrash.report(e);
}
}
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
public boolean isDestroyedAlready() {
return isDestroyed();
}
}