diff options
author | Amith Yamasani <yamasani@google.com> | 2012-09-26 17:57:15 -0700 |
---|---|---|
committer | Amith Yamasani <yamasani@google.com> | 2012-09-26 18:02:54 -0700 |
commit | eb71f2689785bd43560afb04f8b2281c3f67f695 (patch) | |
tree | 8135c7a71290ab7d66e49dd4c0ecc3542145ab5f /src | |
parent | 6f2ca5bc71d9afc531b60762b8676cacdb96fcaa (diff) | |
download | packages_apps_settings-eb71f2689785bd43560afb04f8b2281c3f67f695.zip packages_apps_settings-eb71f2689785bd43560afb04f8b2281c3f67f695.tar.gz packages_apps_settings-eb71f2689785bd43560afb04f8b2281c3f67f695.tar.bz2 |
Show warning dialog in a multiuser system when adding a new account.
Bug: 7207092
Change-Id: I95ac107dbc867490dd2e492291501fd3630d267c
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/settings/accounts/AddAccountSettings.java | 72 |
1 files changed, 67 insertions, 5 deletions
diff --git a/src/com/android/settings/accounts/AddAccountSettings.java b/src/com/android/settings/accounts/AddAccountSettings.java index 382481e..c5f2a9b 100644 --- a/src/com/android/settings/accounts/AddAccountSettings.java +++ b/src/com/android/settings/accounts/AddAccountSettings.java @@ -22,16 +22,25 @@ import android.accounts.AccountManagerFuture; import android.accounts.AuthenticatorException; import android.accounts.OperationCanceledException; import android.app.Activity; +import android.app.AlertDialog; +import android.app.Dialog; import android.app.PendingIntent; +import android.content.DialogInterface; +import android.content.DialogInterface.OnClickListener; +import android.content.DialogInterface.OnDismissListener; import android.content.Intent; import android.os.Bundle; import android.util.Log; +import com.android.settings.Utils; +import com.android.settings.R; + import java.io.IOException; /** * Entry point Actiivty for account setup. Works as follows - * + * 0) If it is a multi-user system with multiple users, it shows a warning dialog first. + * If the user accepts this warning, it moves on to step 1. * 1) When the other Activities launch this Activity, it launches {@link ChooseAccountActivity} * without showing anything. * 2) After receiving an account type from ChooseAccountActivity, this Activity launches the @@ -56,6 +65,7 @@ public class AddAccountSettings extends Activity { * application. */ private static final String KEY_CALLER_IDENTITY = "pendingIntent"; + private static final String KEY_SHOWED_WARNING = "showedWarning"; private static final String TAG = "AccountSettings"; @@ -63,6 +73,8 @@ public class AddAccountSettings extends Activity { private static final int CHOOSE_ACCOUNT_REQUEST = 1; + private static final int DLG_MULTIUSER_WARNING = 1; + private PendingIntent mPendingIntent; private AccountManagerCallback<Bundle> mCallback = new AccountManagerCallback<Bundle>() { @@ -90,21 +102,57 @@ public class AddAccountSettings extends Activity { }; private boolean mAddAccountCalled = false; + private boolean mShowedMultiuserWarning; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState != null) { + mShowedMultiuserWarning = savedInstanceState.getBoolean(KEY_SHOWED_WARNING); mAddAccountCalled = savedInstanceState.getBoolean(KEY_ADD_CALLED); if (Log.isLoggable(TAG, Log.VERBOSE)) Log.v(TAG, "restored"); } - if (mAddAccountCalled) { - // We already called add account - maybe the callback was lost. - finish(); - return; + if (!Utils.hasMultipleUsers(this)) { + mShowedMultiuserWarning = true; } + + // Show the multiuser warning dialog first. If that was already shown and accepted, + // then show the account type chooser. + if (!mShowedMultiuserWarning) { + showMultiuserWarning(); + } else { + if (mAddAccountCalled) { + // We already called add account - maybe the callback was lost. + finish(); + return; + } + showChooseAccount(); + } + } + + private void showMultiuserWarning() { + showDialog(DLG_MULTIUSER_WARNING); + } + + public Dialog onCreateDialog(int dlgId) { + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setMessage(R.string.add_account_shared_system_warning); + builder.setPositiveButton(android.R.string.ok, mDialogClickListener); + builder.setNegativeButton(android.R.string.cancel, mDialogClickListener); + builder.setOnDismissListener(new OnDismissListener() { + public void onDismiss(DialogInterface di) { + if (!mShowedMultiuserWarning) { + setResult(RESULT_CANCELED); + finish(); + } + } + }); + return builder.create(); + } + + private void showChooseAccount() { final String[] authorities = getIntent().getStringArrayExtra(AccountPreferenceBase.AUTHORITIES_FILTER_KEY); final String[] accountTypes = @@ -137,6 +185,7 @@ public class AddAccountSettings extends Activity { protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putBoolean(KEY_ADD_CALLED, mAddAccountCalled); + outState.putBoolean(KEY_SHOWED_WARNING, mShowedMultiuserWarning); if (Log.isLoggable(TAG, Log.VERBOSE)) Log.v(TAG, "saved"); } @@ -154,4 +203,17 @@ public class AddAccountSettings extends Activity { null /* handler */); mAddAccountCalled = true; } + + private OnClickListener mDialogClickListener = new OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + if (which == Dialog.BUTTON_POSITIVE) { + mShowedMultiuserWarning = true; + showChooseAccount(); + } else if (which == Dialog.BUTTON_NEGATIVE) { + setResult(RESULT_CANCELED); + finish(); + } + } + }; } |