summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAmith Yamasani <yamasani@google.com>2012-09-26 17:57:15 -0700
committerAmith Yamasani <yamasani@google.com>2012-09-26 18:02:54 -0700
commiteb71f2689785bd43560afb04f8b2281c3f67f695 (patch)
tree8135c7a71290ab7d66e49dd4c0ecc3542145ab5f /src
parent6f2ca5bc71d9afc531b60762b8676cacdb96fcaa (diff)
downloadpackages_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.java72
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();
+ }
+ }
+ };
}