Commit 3ff7a4e6 authored by Friedrich Horschig's avatar Friedrich Horschig Committed by Commit Bot

[PwdCheckAndroid] Save referrer in instance state

Although every password settings fragment should be launched using
PasswordManagerHelper#showPasswordSettings() which requires a referrer,
some clients crashed because the bundle seems to be missing regardless.

A possible reason is that the fragment wasn't started but just
recreated without a bundle. To cover these cases, store the referrer
in the savedInstanceState and reuse it on creation.

Bug: 1112628
Change-Id: I93805c2d93bae35c5dd0b6647626db87cc7db275
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2335444Reviewed-by: default avatarIoana Pandele <ioanap@chromium.org>
Commit-Queue: Friedrich [CET] <fhorschig@chromium.org>
Cr-Commit-Position: refs/heads/master@{#794599}
parent 5a7052a0
......@@ -148,11 +148,7 @@ public class PasswordSettings
setHasOptionsMenu(true); // Password Export might be optional but Search is always present.
Bundle extras = getArguments();
assert extras.containsKey(PasswordManagerHelper.MANAGE_PASSWORDS_REFERRER)
: "PasswordSettings must be launched with a manage-passwords-referrer fragment"
+ "argument, but none was provided.";
mManagePasswordsReferrer = extras.getInt(PasswordManagerHelper.MANAGE_PASSWORDS_REFERRER);
mManagePasswordsReferrer = getReferrerFromInstanceStateOrLaunchBundle(savedInstanceState);
if (savedInstanceState == null) return;
......@@ -162,6 +158,20 @@ public class PasswordSettings
}
}
private @ManagePasswordsReferrer int getReferrerFromInstanceStateOrLaunchBundle(
Bundle savedInstanceState) {
if (savedInstanceState != null
&& savedInstanceState.containsKey(
PasswordManagerHelper.MANAGE_PASSWORDS_REFERRER)) {
return savedInstanceState.getInt(PasswordManagerHelper.MANAGE_PASSWORDS_REFERRER);
}
Bundle extras = getArguments();
assert extras.containsKey(PasswordManagerHelper.MANAGE_PASSWORDS_REFERRER)
: "PasswordSettings must be launched with a manage-passwords-referrer fragment"
+ "argument, but none was provided.";
return extras.getInt(PasswordManagerHelper.MANAGE_PASSWORDS_REFERRER);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
......@@ -417,6 +427,7 @@ public class PasswordSettings
if (mSearchQuery != null) {
outState.putString(SAVED_STATE_SEARCH_QUERY, mSearchQuery);
}
outState.putInt(PasswordManagerHelper.MANAGE_PASSWORDS_REFERRER, mManagePasswordsReferrer);
}
@Override
......
......@@ -34,12 +34,19 @@ public class PasswordCheckFragmentView extends PreferenceFragmentCompat {
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
getActivity().setTitle(R.string.passwords_check_title);
setPreferenceScreen(getPreferenceManager().createPreferenceScreen(getStyledContext()));
mPasswordCheckReferrer = getReferrerFromInstanceStateOrLaunchBundle(savedInstanceState);
}
private @PasswordCheckReferrer int getReferrerFromInstanceStateOrLaunchBundle(
Bundle savedInstanceState) {
if (savedInstanceState != null && savedInstanceState.containsKey(PASSWORD_CHECK_REFERRER)) {
return savedInstanceState.getInt(PASSWORD_CHECK_REFERRER);
}
Bundle extras = getArguments();
assert extras.containsKey(PASSWORD_CHECK_REFERRER)
: "PasswordCheckFragmentView"
+ "must be launched with a password-check-referrer fragment argument, but none was"
+ "provided.";
mPasswordCheckReferrer = extras.getInt(PASSWORD_CHECK_REFERRER);
: "PasswordCheckFragmentView must be launched with a password-check-referrer fragment "
+ "argument, but none was provided.";
return extras.getInt(PASSWORD_CHECK_REFERRER);
}
@Override
......@@ -53,6 +60,11 @@ public class PasswordCheckFragmentView extends PreferenceFragmentCompat {
mComponentDelegate.destroy();
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(PASSWORD_CHECK_REFERRER, mPasswordCheckReferrer);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment