/*
* Copyright (c) 2015 Zhang Hai <Dreaming.in.Code.ZH@Gmail.com>
* All Rights Reserved.
*/
package me.zhanghai.android.douya.account.ui;
import android.accounts.Account;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import me.zhanghai.android.douya.R;
import me.zhanghai.android.douya.account.util.AccountUtils;
import me.zhanghai.android.douya.ui.SimpleDialogFragment;
public class SelectAccountActivity extends AppCompatActivity
implements SimpleDialogFragment.ListenerProvider {
private static final String KEY_PREFIX = SelectAccountActivity.class.getName() + '.';
private static final String EXTRA_ON_SELECTED_INTENT = KEY_PREFIX + "on_selected_intent";
private SimpleDialogFragment.Listener mDialogListener;
public static Intent makeIntent(Intent onSelectedIntent, Context context) {
return new Intent(context, SelectAccountActivity.class)
.putExtra(SelectAccountActivity.EXTRA_ON_SELECTED_INTENT, onSelectedIntent);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// FIXME: Account list might change; don't use SimpleDialogFragment.
final Account[] accounts = AccountUtils.getAccounts();
int numAccounts = accounts.length;
String[] accountNames = new String[numAccounts];
for (int i = 0; i < numAccounts; ++i) {
accountNames[i] = accounts[i].name;
}
mDialogListener = new SimpleDialogFragment.Listener() {
@Override
public void onSingleChoiceItemClicked(int requestCode, int index) {
AccountUtils.setActiveAccount(accounts[index]);
// Calling finish() before startActivity() makes it work when the Intent is a
// launcher one.
finish();
Intent onSelectedIntent = getIntent().getParcelableExtra(EXTRA_ON_SELECTED_INTENT);
startActivity(onSelectedIntent);
}
@Override
public void onNegativeButtonClicked(int requestCode) {
onCancel(requestCode);
}
@Override
public void onCancel(int requestCode) {
finish();
}
};
if (savedInstanceState == null) {
SimpleDialogFragment.makeSingleChoice(R.string.auth_select_account, accountNames, -1,
this)
.show(this);
}
}
@Override
public SimpleDialogFragment.Listener getDialogListener() {
return mDialogListener;
}
}