From 4778a9afbd1b6f7f8344ed016374b2a71385db3f Mon Sep 17 00:00:00 2001 From: Raff Tsai Date: Wed, 29 Aug 2018 23:22:12 +0800 Subject: [PATCH] Close searchActivity doesn't go back to previous activity When requestCode is 0, we will not finish activity. Change-Id: Ib630951739031b05c83efe189875a4a41c8e51ec Fixes: 113372155 Test: make RunSettingsRoboTests ROBOTEST_FILTER="com.android.settings.password" --- .../settings/password/ChooseLockGeneric.java | 15 +++- .../search/SearchFeatureProvider.java | 3 +- .../password/ChooseLockGenericTest.java | 90 +++++++++++++++---- 3 files changed, 87 insertions(+), 21 deletions(-) diff --git a/src/com/android/settings/password/ChooseLockGeneric.java b/src/com/android/settings/password/ChooseLockGeneric.java index 21d14905213..6edacda5522 100644 --- a/src/com/android/settings/password/ChooseLockGeneric.java +++ b/src/com/android/settings/password/ChooseLockGeneric.java @@ -63,6 +63,7 @@ import com.android.settings.Utils; import com.android.settings.biometrics.BiometricEnrollBase; import com.android.settings.biometrics.fingerprint.FingerprintEnrollFindSensor; import com.android.settings.core.instrumentation.InstrumentedDialogFragment; +import com.android.settings.search.SearchFeatureProvider; import com.android.settingslib.RestrictedLockUtils; import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; import com.android.settingslib.RestrictedPreference; @@ -132,10 +133,14 @@ public class ChooseLockGeneric extends SettingsActivity { @VisibleForTesting static final int CONFIRM_EXISTING_REQUEST = 100; - private static final int ENABLE_ENCRYPTION_REQUEST = 101; - private static final int CHOOSE_LOCK_REQUEST = 102; - private static final int CHOOSE_LOCK_BEFORE_FINGERPRINT_REQUEST = 103; - private static final int SKIP_FINGERPRINT_REQUEST = 104; + @VisibleForTesting + static final int ENABLE_ENCRYPTION_REQUEST = 101; + @VisibleForTesting + static final int CHOOSE_LOCK_REQUEST = 102; + @VisibleForTesting + static final int CHOOSE_LOCK_BEFORE_FINGERPRINT_REQUEST = 103; + @VisibleForTesting + static final int SKIP_FINGERPRINT_REQUEST = 104; private ChooseLockSettingsHelper mChooseLockSettingsHelper; private DevicePolicyManager mDPM; @@ -401,6 +406,8 @@ public class ChooseLockGeneric extends SettingsActivity { resultCode == RESULT_FINISHED ? RESULT_OK : resultCode, data); finish(); } + } else if (requestCode == SearchFeatureProvider.REQUEST_CODE) { + return; } else { getActivity().setResult(Activity.RESULT_CANCELED); finish(); diff --git a/src/com/android/settings/search/SearchFeatureProvider.java b/src/com/android/settings/search/SearchFeatureProvider.java index bce6911ca50..6744a7b72ff 100644 --- a/src/com/android/settings/search/SearchFeatureProvider.java +++ b/src/com/android/settings/search/SearchFeatureProvider.java @@ -32,6 +32,7 @@ import com.android.settingslib.search.SearchIndexableResources; public interface SearchFeatureProvider { Intent SEARCH_UI_INTENT = new Intent("com.android.settings.action.SETTINGS_SEARCH"); + int REQUEST_CODE = 0; /** * Ensures the caller has necessary privilege to launch search result page. @@ -65,7 +66,7 @@ public interface SearchFeatureProvider { FeatureFactory.getFactory( activity.getApplicationContext()).getSlicesFeatureProvider() .indexSliceDataAsync(activity.getApplicationContext()); - activity.startActivityForResult(intent, 0 /* requestCode */); + activity.startActivityForResult(intent, REQUEST_CODE); }); } } diff --git a/tests/robotests/src/com/android/settings/password/ChooseLockGenericTest.java b/tests/robotests/src/com/android/settings/password/ChooseLockGenericTest.java index b8aaeb80382..9eaf217a4f7 100644 --- a/tests/robotests/src/com/android/settings/password/ChooseLockGenericTest.java +++ b/tests/robotests/src/com/android/settings/password/ChooseLockGenericTest.java @@ -16,25 +16,32 @@ package com.android.settings.password; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.app.Activity; import android.content.Context; +import android.content.Intent; import android.os.Bundle; import android.provider.Settings.Global; import androidx.fragment.app.FragmentActivity; +import androidx.fragment.app.FragmentManager; +import com.android.settings.biometrics.BiometricEnrollBase; import com.android.settings.password.ChooseLockGeneric.ChooseLockGenericFragment; +import com.android.settings.search.SearchFeatureProvider; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.shadow.SettingsShadowResources; import org.junit.After; +import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RuntimeEnvironment; @@ -43,37 +50,88 @@ import org.robolectric.annotation.Config; @RunWith(SettingsRobolectricTestRunner.class) public class ChooseLockGenericTest { + private Context mContext; + private ChooseLockGenericFragment mFragment; + private FragmentActivity mActivity; + + @Before + public void setUp() { + mContext = RuntimeEnvironment.application; + mFragment = spy(new ChooseLockGenericFragment()); + mActivity = mock(FragmentActivity.class); + when(mFragment.getActivity()).thenReturn(mActivity); + when(mFragment.getFragmentManager()).thenReturn(mock(FragmentManager.class)); + doNothing().when(mFragment).startActivity(any(Intent.class)); + } + @After public void tearDown() { Global.putInt(RuntimeEnvironment.application.getContentResolver(), - Global.DEVICE_PROVISIONED, 1); + Global.DEVICE_PROVISIONED, 1); } @Test @Config(shadows = SettingsShadowResources.SettingsShadowTheme.class) public void onCreate_deviceNotProvisioned_shouldFinishActivity() { - final Context context = RuntimeEnvironment.application; - Global.putInt(context.getContentResolver(), Global.DEVICE_PROVISIONED, 0); - final FragmentActivity activity = mock(FragmentActivity.class); - when(activity.getContentResolver()).thenReturn(context.getContentResolver()); - when(activity.getTheme()).thenReturn(context.getTheme()); + Global.putInt(mContext.getContentResolver(), Global.DEVICE_PROVISIONED, 0); + when(mActivity.getContentResolver()).thenReturn(mContext.getContentResolver()); + when(mActivity.getTheme()).thenReturn(mContext.getTheme()); + when(mFragment.getArguments()).thenReturn(Bundle.EMPTY); - final ChooseLockGenericFragment fragment = spy(new ChooseLockGenericFragment()); - when(fragment.getActivity()).thenReturn(activity); - when(fragment.getArguments()).thenReturn(Bundle.EMPTY); - - fragment.onCreate(Bundle.EMPTY); - verify(activity).finish(); + mFragment.onCreate(Bundle.EMPTY); + verify(mActivity).finish(); } @Test public void onActivityResult_nullIntentData_shouldNotCrash() { - ChooseLockGenericFragment fragment = spy(new ChooseLockGenericFragment()); - doNothing().when(fragment).updatePreferencesOrFinish(anyBoolean()); + doNothing().when(mFragment).updatePreferencesOrFinish(anyBoolean()); - fragment.onActivityResult( - fragment.CONFIRM_EXISTING_REQUEST, Activity.RESULT_OK, null /* data */); + mFragment.onActivityResult( + ChooseLockGenericFragment.CONFIRM_EXISTING_REQUEST, Activity.RESULT_OK, + null /* data */); // no crash } + @Test + public void onActivityResult_requestcode0_shouldNotFinish() { + mFragment.onActivityResult( + SearchFeatureProvider.REQUEST_CODE, Activity.RESULT_OK, null /* data */); + + verify(mFragment, never()).finish(); + } + + @Test + public void onActivityResult_requestcode101_shouldFinish() { + mFragment.onActivityResult( + ChooseLockGenericFragment.ENABLE_ENCRYPTION_REQUEST, Activity.RESULT_OK, + null /* data */); + + verify(mFragment).finish(); + } + + @Test + public void onActivityResult_requestcode102_shouldFinish() { + mFragment.onActivityResult( + ChooseLockGenericFragment.CHOOSE_LOCK_REQUEST, Activity.RESULT_OK, null /* data */); + + verify(mFragment).finish(); + } + + @Test + public void onActivityResult_requestcode103_shouldFinish() { + mFragment.onActivityResult( + ChooseLockGenericFragment.CHOOSE_LOCK_BEFORE_FINGERPRINT_REQUEST, + BiometricEnrollBase.RESULT_FINISHED, null /* data */); + + verify(mFragment).finish(); + } + + @Test + public void onActivityResult_requestcode104_shouldFinish() { + mFragment.onActivityResult( + ChooseLockGenericFragment.SKIP_FINGERPRINT_REQUEST, Activity.RESULT_OK, + null /* data */); + + verify(mFragment).finish(); + } }