OSDN Git Service

Close searchActivity doesn't go back to previous activity
authorRaff Tsai <rafftsai@google.com>
Wed, 29 Aug 2018 15:22:12 +0000 (23:22 +0800)
committerRaff Tsai <rafftsai@google.com>
Wed, 29 Aug 2018 15:31:42 +0000 (23:31 +0800)
When requestCode is 0, we will not finish activity.

Change-Id: Ib630951739031b05c83efe189875a4a41c8e51ec
Fixes: 113372155
Test: make RunSettingsRoboTests ROBOTEST_FILTER="com.android.settings.password"

src/com/android/settings/password/ChooseLockGeneric.java
src/com/android/settings/search/SearchFeatureProvider.java
tests/robotests/src/com/android/settings/password/ChooseLockGenericTest.java

index 21d1490..6edacda 100644 (file)
@@ -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();
index bce6911..6744a7b 100644 (file)
@@ -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);
         });
     }
 }
index b8aaeb8..9eaf217 100644 (file)
 
 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());
-
-        final ChooseLockGenericFragment fragment = spy(new ChooseLockGenericFragment());
-        when(fragment.getActivity()).thenReturn(activity);
-        when(fragment.getArguments()).thenReturn(Bundle.EMPTY);
-
-        fragment.onCreate(Bundle.EMPTY);
-        verify(activity).finish();
+        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);
+
+        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();
+    }
 }