From e01a9b6039c66473b1ce198f1df3cfd4ac86f91d Mon Sep 17 00:00:00 2001 From: Jason Chiu Date: Tue, 4 Jul 2023 17:13:51 +0800 Subject: [PATCH] Do not finish activity when the input account doesn't exist This is to avoid the caller getting the existing account list because the prompt respond reveals that the input account does not exist. Bug: 249981091 Test: robotest Change-Id: I4bb8ecead8233780443b1cd1a8780983b7e4d5de --- .../accounts/ChooseAccountPreferenceController.java | 11 +++++++++-- .../ChooseAccountPreferenceControllerTest.java | 2 +- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/com/android/settings/accounts/ChooseAccountPreferenceController.java b/src/com/android/settings/accounts/ChooseAccountPreferenceController.java index a217f017f99..3d05963a6b0 100644 --- a/src/com/android/settings/accounts/ChooseAccountPreferenceController.java +++ b/src/com/android/settings/accounts/ChooseAccountPreferenceController.java @@ -50,6 +50,7 @@ import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.StringJoiner; /** * An extra {@link UserHandle} can be specified in the intent as {@link EXTRA_USER}, if the user for @@ -189,7 +190,7 @@ public class ChooseAccountPreferenceController extends BasePreferenceController mScreen.addPreference(p); } } else { - if (Log.isLoggable(TAG, Log.VERBOSE)) { + if (mAuthorities != null && Log.isLoggable(TAG, Log.VERBOSE)) { final StringBuilder auths = new StringBuilder(); for (String a : mAuthorities) { auths.append(a); @@ -197,8 +198,14 @@ public class ChooseAccountPreferenceController extends BasePreferenceController } Log.v(TAG, "No providers found for authorities: " + auths); } + if (mAccountTypesFilter != null) { + final StringJoiner types = new StringJoiner(", ", "", ""); + mAccountTypesFilter.forEach(types::add); + Log.w(TAG, "No providers found for account types: " + types); + } mActivity.setResult(RESULT_CANCELED); - mActivity.finish(); + // Do not finish activity to avoid the caller getting the existing account list because + // the prompt respond reveals that the input account does not exist. } } diff --git a/tests/robotests/src/com/android/settings/accounts/ChooseAccountPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accounts/ChooseAccountPreferenceControllerTest.java index 1f457da51e9..5c4af0d78cb 100644 --- a/tests/robotests/src/com/android/settings/accounts/ChooseAccountPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/accounts/ChooseAccountPreferenceControllerTest.java @@ -173,7 +173,7 @@ public class ChooseAccountPreferenceControllerTest { mActivity); mController.displayPreference(mPreferenceScreen); - assertThat(mActivity.isFinishing()).isTrue(); + assertThat(mActivity.isFinishing()).isFalse(); assertThat(mPreferenceScreen.getPreferenceCount()).isEqualTo(0); }