From 250b9bee685de8f4060dd410f0894c22de1909cf Mon Sep 17 00:00:00 2001 From: Jim Miller Date: Fri, 5 Sep 2014 18:48:18 -0700 Subject: [PATCH] Fix problem where rotating the device doesn't launch TrustAgent pref This fixes a bug where the TrustAgent intent was being lost when the device configurtion changes. It used to depend on a view that gets recreated. Instead, we persist the actual launch intent which works across activity restarts. Fixes bug 17040470 Change-Id: Ia1c93867254cfdc27683a767cf41fe74dbb97db0 --- src/com/android/settings/SecuritySettings.java | 34 +++++++++++++++++--------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/src/com/android/settings/SecuritySettings.java b/src/com/android/settings/SecuritySettings.java index 7798937f62..46a3c8e3b4 100644 --- a/src/com/android/settings/SecuritySettings.java +++ b/src/com/android/settings/SecuritySettings.java @@ -63,6 +63,7 @@ import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT; */ public class SecuritySettings extends SettingsPreferenceFragment implements OnPreferenceChangeListener, DialogInterface.OnClickListener, Indexable { + private static final String TRUST_AGENT_CLICK_INTENT = "trust_agent_click_intent"; static final String TAG = "SecuritySettings"; private static final Intent TRUST_AGENT_INTENT = new Intent(TrustAgentService.SERVICE_INTERFACE); @@ -127,7 +128,7 @@ public class SecuritySettings extends SettingsPreferenceFragment private boolean mIsPrimary; - private Preference mClickedTrustAgentPreference; + private Intent mTrustAgentClickIntent; @Override public void onCreate(Bundle savedInstanceState) { @@ -138,6 +139,11 @@ public class SecuritySettings extends SettingsPreferenceFragment mDPM = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE); mChooseLockSettingsHelper = new ChooseLockSettingsHelper(getActivity()); + + if (savedInstanceState != null + && savedInstanceState.containsKey(TRUST_AGENT_CLICK_INTENT)) { + mTrustAgentClickIntent = savedInstanceState.getParcelable(TRUST_AGENT_CLICK_INTENT); + } } private static int getResIdForLockUnlockScreen(Context context, @@ -505,6 +511,14 @@ public class SecuritySettings extends SettingsPreferenceFragment } @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + if (mTrustAgentClickIntent != null) { + outState.putParcelable(TRUST_AGENT_CLICK_INTENT, mTrustAgentClickIntent); + } + } + + @Override public void onResume() { super.onResume(); @@ -554,12 +568,12 @@ public class SecuritySettings extends SettingsPreferenceFragment } else if (KEY_TRUST_AGENT.equals(key)) { ChooseLockSettingsHelper helper = new ChooseLockSettingsHelper(this.getActivity(), this); - mClickedTrustAgentPreference = preference; + mTrustAgentClickIntent = preference.getIntent(); if (!helper.launchConfirmationActivity(CHANGE_TRUST_AGENT_SETTINGS, null, null) && - preference.getIntent() != null) { + mTrustAgentClickIntent != null) { // If this returns false, it means no password confirmation is required. - startActivity(preference.getIntent()); - mClickedTrustAgentPreference = null; + startActivity(mTrustAgentClickIntent); + mTrustAgentClickIntent = null; } } else { // If we didn't handle it, let preferences handle it. @@ -587,13 +601,11 @@ public class SecuritySettings extends SettingsPreferenceFragment // because mBiometricWeakLiveliness could be null return; } else if (requestCode == CHANGE_TRUST_AGENT_SETTINGS && resultCode == Activity.RESULT_OK) { - if (mClickedTrustAgentPreference != null) { - Intent intent = mClickedTrustAgentPreference.getIntent(); - if (intent != null) { - startActivity(intent); - } - mClickedTrustAgentPreference = null; + if (mTrustAgentClickIntent != null) { + startActivity(mTrustAgentClickIntent); + mTrustAgentClickIntent = null; } + return; } createPreferenceHierarchy(); } -- 2.11.0