Fix app link open mode UI

The app link open mode UI misrepresented some states; notably, it
was representing the 'ask' state as the 'always use this app' state.
This had the effect of implicitly pushing the app into 'always'
accidentally, as a consequence of setting the UI to that initial
state, then re-evaluating on exit against the true state.

Bug: 32810168
Test: run cts -m CtsOsHostTestCases
Test: manual
Change-Id: Ifb9d7ad0140fae5fa75a4b78b01301b196a48d10
This commit is contained in:
Christopher Tate
2018-10-29 16:58:33 -07:00
committed by Chris Tate
parent 985d85e8c1
commit e30a1833f7

View File

@@ -124,6 +124,8 @@ public class AppLaunchSettings extends AppInfoWithHeader implements OnClickListe
// * always // * always
// * ask // * ask
// * never // * never
//
// Make sure to update linkStateToIndex() if this presentation order is changed.
mAppLinkState.setEntries(new CharSequence[] { mAppLinkState.setEntries(new CharSequence[] {
getString(R.string.app_link_open_always), getString(R.string.app_link_open_always),
getString(R.string.app_link_open_ask), getString(R.string.app_link_open_ask),
@@ -141,10 +143,7 @@ public class AppLaunchSettings extends AppInfoWithHeader implements OnClickListe
// purposes of the UI (and does the right thing around pending domain // purposes of the UI (and does the right thing around pending domain
// verifications that might arrive after the user chooses 'ask' in this UI). // verifications that might arrive after the user chooses 'ask' in this UI).
final int state = mPm.getIntentVerificationStatusAsUser(mPackageName, UserHandle.myUserId()); final int state = mPm.getIntentVerificationStatusAsUser(mPackageName, UserHandle.myUserId());
mAppLinkState.setValue( mAppLinkState.setValueIndex(linkStateToIndex(state));
Integer.toString((state == INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED)
? INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS_ASK
: state));
// Set the callback only after setting the initial selected item // Set the callback only after setting the initial selected item
mAppLinkState.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { mAppLinkState.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@@ -157,6 +156,17 @@ public class AppLaunchSettings extends AppInfoWithHeader implements OnClickListe
} }
} }
private int linkStateToIndex(final int state) {
switch (state) {
case INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS:
return 0; // Always
case INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER:
return 2; // Never
default:
return 1; // Ask
}
}
private boolean updateAppLinkState(final int newState) { private boolean updateAppLinkState(final int newState) {
if (mIsBrowser) { if (mIsBrowser) {
// We shouldn't get into this state, but if we do make sure // We shouldn't get into this state, but if we do make sure