diff --git a/src/com/android/settings/accounts/AccountDetailDashboardFragment.java b/src/com/android/settings/accounts/AccountDetailDashboardFragment.java index 801a20b3f89..65959b41e43 100644 --- a/src/com/android/settings/accounts/AccountDetailDashboardFragment.java +++ b/src/com/android/settings/accounts/AccountDetailDashboardFragment.java @@ -76,7 +76,7 @@ public class AccountDetailDashboardFragment extends DashboardFragment { } } mAccountSynController.init(mAccount, userHandle); - mRemoveAccountController.setAccount(mAccount); + mRemoveAccountController.init(mAccount, userHandle); } @Override diff --git a/src/com/android/settings/accounts/RemoveAccountPreferenceController.java b/src/com/android/settings/accounts/RemoveAccountPreferenceController.java index c8dbe4cceeb..f331144a591 100644 --- a/src/com/android/settings/accounts/RemoveAccountPreferenceController.java +++ b/src/com/android/settings/accounts/RemoveAccountPreferenceController.java @@ -27,8 +27,10 @@ import android.app.Dialog; import android.app.Fragment; import android.content.Context; import android.content.DialogInterface; +import android.content.Intent; import android.os.Bundle; import android.os.Process; +import android.os.UserHandle; import android.support.v7.preference.PreferenceScreen; import android.view.View; import android.view.View.OnClickListener; @@ -49,6 +51,7 @@ public class RemoveAccountPreferenceController extends PreferenceController private Account mAccount; private Fragment mParentFragment; + private UserHandle mUserHandle; public RemoveAccountPreferenceController(Context context, Fragment parent) { super(context); @@ -76,11 +79,12 @@ public class RemoveAccountPreferenceController extends PreferenceController @Override public void onClick(View v) { - ConfirmRemoveAccountDialog.show(mParentFragment, mAccount); + ConfirmRemoveAccountDialog.show(mParentFragment, mAccount, mUserHandle); } - public void setAccount(Account account) { + public void init(Account account, UserHandle userHandle) { mAccount = account; + mUserHandle = userHandle; } /** @@ -88,27 +92,37 @@ public class RemoveAccountPreferenceController extends PreferenceController */ public static class ConfirmRemoveAccountDialog extends InstrumentedDialogFragment implements DialogInterface.OnClickListener { - private static final String SAVE_ACCOUNT = "account"; + private static final String KEY_ACCOUNT = "account"; private static final String REMOVE_ACCOUNT_DIALOG = "confirmRemoveAccount"; private Account mAccount; + private UserHandle mUserHandle; - public static ConfirmRemoveAccountDialog show(Fragment parent, Account account) { + public static ConfirmRemoveAccountDialog show( + Fragment parent, Account account, UserHandle userHandle) { if (!parent.isAdded()) { return null; } final ConfirmRemoveAccountDialog dialog = new ConfirmRemoveAccountDialog(); - dialog.mAccount = account; + Bundle bundle = new Bundle(); + bundle.putParcelable(KEY_ACCOUNT, account); + bundle.putParcelable(Intent.EXTRA_USER, userHandle); + dialog.setArguments(bundle); dialog.setTargetFragment(parent, 0); dialog.show(parent.getFragmentManager(), REMOVE_ACCOUNT_DIALOG); return dialog; } + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + final Bundle arguments = getArguments(); + mAccount = arguments.getParcelable(KEY_ACCOUNT); + mUserHandle = arguments.getParcelable(Intent.EXTRA_USER); + } + @Override public Dialog onCreateDialog(Bundle savedInstanceState) { final Context context = getActivity(); - if (savedInstanceState != null) { - mAccount = (Account) savedInstanceState.getParcelable(SAVE_ACCOUNT); - } return new AlertDialog.Builder(context) .setTitle(R.string.really_remove_account_title) .setMessage(R.string.really_remove_account_message) @@ -117,12 +131,6 @@ public class RemoveAccountPreferenceController extends PreferenceController .create(); } - @Override - public void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - outState.putParcelable(SAVE_ACCOUNT, mAccount); - } - @Override public int getMetricsCategory() { return MetricsProto.MetricsEvent.DIALOG_ACCOUNT_SYNC_REMOVE; @@ -159,7 +167,7 @@ public class RemoveAccountPreferenceController extends PreferenceController activity.finish(); } } - }, null, Process.myUserHandle()); + }, null, mUserHandle); } } diff --git a/tests/robotests/src/com/android/settings/accounts/RemoveAccountPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accounts/RemoveAccountPreferenceControllerTest.java index 50f3ac688fb..033465b2b90 100644 --- a/tests/robotests/src/com/android/settings/accounts/RemoveAccountPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/accounts/RemoveAccountPreferenceControllerTest.java @@ -23,6 +23,7 @@ import android.app.Activity; import android.app.FragmentManager; import android.app.FragmentTransaction; import android.content.Context; +import android.os.Bundle; import android.os.Handler; import android.os.UserHandle; import android.support.v7.preference.PreferenceScreen; @@ -127,11 +128,13 @@ public class RemoveAccountPreferenceControllerTest { when(mFragment.getActivity()).thenReturn(activity); Account account = new Account("Account11", "com.acct1"); + UserHandle userHandle = new UserHandle(10); RemoveAccountPreferenceController.ConfirmRemoveAccountDialog dialog = - RemoveAccountPreferenceController.ConfirmRemoveAccountDialog.show(mFragment, account); - + RemoveAccountPreferenceController.ConfirmRemoveAccountDialog.show( + mFragment, account, userHandle); + dialog.onCreate(new Bundle()); dialog.onClick(null, 0); verify(mAccountManager).removeAccountAsUser(eq(account), any(Activity.class), - any(AccountManagerCallback.class), any(Handler.class), any(UserHandle.class)); + any(AccountManagerCallback.class), any(Handler.class), eq(userHandle)); } } \ No newline at end of file