package com.distantfuture.videos.activities;
import android.accounts.AccountManager;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import com.distantfuture.videos.misc.AppUtils;
import com.distantfuture.videos.misc.Auth;
import com.distantfuture.videos.misc.DUtils;
import com.distantfuture.videos.services.ListServiceRequest;
import com.distantfuture.videos.services.SubscriptionsServiceRequest;
import com.distantfuture.videos.services.YouTubeService;
import com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential;
public class AuthActivity extends Activity {
private static final String REQUEST_AUTHORIZATION_REQUEST_PARAM = "com.distantfuture.utubetv.Request.param";
private static final String REQUEST_AUTHORIZATION_INTENT_PARAM = "com.distantfuture.utubetv.Intent.param";
private static final int INTENT_REQUEST_AUTHORIZATION = 3;
private static final int INTENT_REQUEST_ACCOUNT_PICKER = 2;
private GoogleAccountCredential credential;
public static void show(Context context, Intent authIntent, Bundle requestBundle) {
Intent intent = new Intent(context, AuthActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // need this to start activity from service
if (authIntent != null)
intent.putExtra(AuthActivity.REQUEST_AUTHORIZATION_INTENT_PARAM, authIntent);
intent.putExtra(AuthActivity.REQUEST_AUTHORIZATION_REQUEST_PARAM, requestBundle);
context.startActivity(intent);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
credential = Auth.getCredentials(this, true);
String accountName = credential.getSelectedAccountName();
if (accountName == null) {
chooseAccount();
} else {
showAuthIntent();
}
}
private void showAuthIntent() {
Intent authIntent = getIntent().getParcelableExtra(REQUEST_AUTHORIZATION_INTENT_PARAM);
if (authIntent != null) {
DUtils.log("Request auth received - executing the intent");
startActivityForResult(authIntent, INTENT_REQUEST_AUTHORIZATION);
} else
doLastStep();
}
private void doLastStep() {
ListServiceRequest listServiceRequest = ListServiceRequest.fromBundle(getIntent().getBundleExtra(REQUEST_AUTHORIZATION_REQUEST_PARAM));
if (listServiceRequest != null) {
// forcing a refresh since it is flagged as received in the service to avoid double attempts at a request
YouTubeService.startListRequest(this, listServiceRequest, true);
} else {
SubscriptionsServiceRequest subscriptionsServiceRequest = SubscriptionsServiceRequest.fromBundle(getIntent().getBundleExtra(REQUEST_AUTHORIZATION_REQUEST_PARAM));
if (subscriptionsServiceRequest != null) {
YouTubeService.startSubscriptionRequest(this, subscriptionsServiceRequest);
}
}
finish();
}
private void chooseAccount() {
startActivityForResult(credential.newChooseAccountIntent(), INTENT_REQUEST_ACCOUNT_PICKER);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case INTENT_REQUEST_AUTHORIZATION:
if (resultCode != Activity.RESULT_OK) {
chooseAccount();
} else {
doLastStep();
}
break;
case INTENT_REQUEST_ACCOUNT_PICKER:
String accountName = null;
if (resultCode == Activity.RESULT_OK && data != null && data.getExtras() != null) {
accountName = data.getExtras().getString(AccountManager.KEY_ACCOUNT_NAME);
}
// save to preferences, listen to the pref change to get notified on change
if (accountName != null) {
AppUtils.instance(this).setAccountName(accountName);
credential.setSelectedAccountName(accountName);
showAuthIntent();
} else
finish(); // user hit cancel or back button
}
super.onActivityResult(requestCode, resultCode, data);
}
}