package com.orisider.gdfs.ui.activity;
import android.accounts.Account;
import android.accounts.AccountManager;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import com.orisider.gdfs.R;
import com.orisider.gdfs.model.AccessToken;
import com.orisider.gdfs.ui.event.GDFSDialogCanceledEvent;
import com.orisider.gdfs.ui.event.GDFSItemSelectedEvent;
import com.orisider.gdfs.ui.fragment.diag.AccountChooseFragment;
import com.orisider.gdfs.ui.fragment.diag.LoadingFragment;
import com.orisider.gdfs.util.Constant;
import com.orisider.gdfs.util.Util;
import roboguice.activity.RoboFragmentActivity;
import roboguice.event.Observes;
public class GetAccountActivity extends RoboFragmentActivity {
private AccountManager accountManager;
private Account[] accounts;
Handler handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
accountManager = AccountManager.get(this);
accounts = accountManager.getAccountsByType("com.google");
if (handler == null) {
handler = new Handler();
}
if (accounts == null || accounts.length == 0) {
Util.showToast(R.string.warn_no_goog_account);
} else if (accounts.length == 1) {
processAccountSelected(accounts[0]);
} else {
AccountChooseFragment.newInstance(getAccountNames(accounts)).show(
getSupportFragmentManager(), Constant.FRAG_TAG_DIALOG);
}
}
private String[] getAccountNames(Account[] accounts) {
String[] names = new String[accounts.length];
for (int i = 0; i < accounts.length; i++) {
names[i] = accounts[i].name;
}
return names;
}
private void processAccountSelected(Account account) {
if (account != null) {
new LoadingFragment().show(getSupportFragmentManager(), Constant.FRAG_TAG_DIALOG);
Util.getAccountToken(accountManager, account, this, handler, new Util.AccessTokenCallback() {
@Override
public void onTokenGetSuccess(AccessToken token) {
dismissLoading();
setResult(Activity.RESULT_OK, new Intent().putExtra(Constant.BUNDLE_KEY_ACCESS_TOKEN, token));
finish();
}
private void dismissLoading() {
getSupportFragmentManager().beginTransaction().remove(
getSupportFragmentManager().findFragmentByTag(Constant.FRAG_TAG_DIALOG)).commit();
}
@Override
public void onTokenGetFailed(Throwable e) {
Util.showToast(R.string.warn_token_get_fail);
setResult(Activity.RESULT_CANCELED);
finish();
}
});
}
}
@SuppressWarnings("UnusedDeclaration")
private void onItemSelected(@Observes GDFSItemSelectedEvent e) {
processAccountSelected(accounts[Integer.parseInt(e.selectedValue)]);
}
@SuppressWarnings("UnusedDeclaration")
private void onDialogCanceled(@Observes GDFSDialogCanceledEvent e) {
finish();
}
}