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"
This commit is contained in:
Raff Tsai
2018-08-29 23:22:12 +08:00
parent c21f4a512a
commit 4778a9afbd
3 changed files with 87 additions and 21 deletions

View File

@@ -63,6 +63,7 @@ import com.android.settings.Utils;
import com.android.settings.biometrics.BiometricEnrollBase; import com.android.settings.biometrics.BiometricEnrollBase;
import com.android.settings.biometrics.fingerprint.FingerprintEnrollFindSensor; import com.android.settings.biometrics.fingerprint.FingerprintEnrollFindSensor;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment; import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
import com.android.settings.search.SearchFeatureProvider;
import com.android.settingslib.RestrictedLockUtils; import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
import com.android.settingslib.RestrictedPreference; import com.android.settingslib.RestrictedPreference;
@@ -132,10 +133,14 @@ public class ChooseLockGeneric extends SettingsActivity {
@VisibleForTesting @VisibleForTesting
static final int CONFIRM_EXISTING_REQUEST = 100; static final int CONFIRM_EXISTING_REQUEST = 100;
private static final int ENABLE_ENCRYPTION_REQUEST = 101; @VisibleForTesting
private static final int CHOOSE_LOCK_REQUEST = 102; static final int ENABLE_ENCRYPTION_REQUEST = 101;
private static final int CHOOSE_LOCK_BEFORE_FINGERPRINT_REQUEST = 103; @VisibleForTesting
private static final int SKIP_FINGERPRINT_REQUEST = 104; 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 ChooseLockSettingsHelper mChooseLockSettingsHelper;
private DevicePolicyManager mDPM; private DevicePolicyManager mDPM;
@@ -401,6 +406,8 @@ public class ChooseLockGeneric extends SettingsActivity {
resultCode == RESULT_FINISHED ? RESULT_OK : resultCode, data); resultCode == RESULT_FINISHED ? RESULT_OK : resultCode, data);
finish(); finish();
} }
} else if (requestCode == SearchFeatureProvider.REQUEST_CODE) {
return;
} else { } else {
getActivity().setResult(Activity.RESULT_CANCELED); getActivity().setResult(Activity.RESULT_CANCELED);
finish(); finish();

View File

@@ -32,6 +32,7 @@ import com.android.settingslib.search.SearchIndexableResources;
public interface SearchFeatureProvider { public interface SearchFeatureProvider {
Intent SEARCH_UI_INTENT = new Intent("com.android.settings.action.SETTINGS_SEARCH"); 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. * Ensures the caller has necessary privilege to launch search result page.
@@ -65,7 +66,7 @@ public interface SearchFeatureProvider {
FeatureFactory.getFactory( FeatureFactory.getFactory(
activity.getApplicationContext()).getSlicesFeatureProvider() activity.getApplicationContext()).getSlicesFeatureProvider()
.indexSliceDataAsync(activity.getApplicationContext()); .indexSliceDataAsync(activity.getApplicationContext());
activity.startActivityForResult(intent, 0 /* requestCode */); activity.startActivityForResult(intent, REQUEST_CODE);
}); });
} }
} }

View File

@@ -16,25 +16,32 @@
package com.android.settings.password; package com.android.settings.password;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy; import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import android.app.Activity; import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.provider.Settings.Global; import android.provider.Settings.Global;
import androidx.fragment.app.FragmentActivity; 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.password.ChooseLockGeneric.ChooseLockGenericFragment;
import com.android.settings.search.SearchFeatureProvider;
import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.testutils.shadow.SettingsShadowResources; import com.android.settings.testutils.shadow.SettingsShadowResources;
import org.junit.After; import org.junit.After;
import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.robolectric.RuntimeEnvironment; import org.robolectric.RuntimeEnvironment;
@@ -43,6 +50,20 @@ import org.robolectric.annotation.Config;
@RunWith(SettingsRobolectricTestRunner.class) @RunWith(SettingsRobolectricTestRunner.class)
public class ChooseLockGenericTest { 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 @After
public void tearDown() { public void tearDown() {
Global.putInt(RuntimeEnvironment.application.getContentResolver(), Global.putInt(RuntimeEnvironment.application.getContentResolver(),
@@ -52,28 +73,65 @@ public class ChooseLockGenericTest {
@Test @Test
@Config(shadows = SettingsShadowResources.SettingsShadowTheme.class) @Config(shadows = SettingsShadowResources.SettingsShadowTheme.class)
public void onCreate_deviceNotProvisioned_shouldFinishActivity() { public void onCreate_deviceNotProvisioned_shouldFinishActivity() {
final Context context = RuntimeEnvironment.application; Global.putInt(mContext.getContentResolver(), Global.DEVICE_PROVISIONED, 0);
Global.putInt(context.getContentResolver(), Global.DEVICE_PROVISIONED, 0); when(mActivity.getContentResolver()).thenReturn(mContext.getContentResolver());
final FragmentActivity activity = mock(FragmentActivity.class); when(mActivity.getTheme()).thenReturn(mContext.getTheme());
when(activity.getContentResolver()).thenReturn(context.getContentResolver()); when(mFragment.getArguments()).thenReturn(Bundle.EMPTY);
when(activity.getTheme()).thenReturn(context.getTheme());
final ChooseLockGenericFragment fragment = spy(new ChooseLockGenericFragment()); mFragment.onCreate(Bundle.EMPTY);
when(fragment.getActivity()).thenReturn(activity); verify(mActivity).finish();
when(fragment.getArguments()).thenReturn(Bundle.EMPTY);
fragment.onCreate(Bundle.EMPTY);
verify(activity).finish();
} }
@Test @Test
public void onActivityResult_nullIntentData_shouldNotCrash() { public void onActivityResult_nullIntentData_shouldNotCrash() {
ChooseLockGenericFragment fragment = spy(new ChooseLockGenericFragment()); doNothing().when(mFragment).updatePreferencesOrFinish(anyBoolean());
doNothing().when(fragment).updatePreferencesOrFinish(anyBoolean());
fragment.onActivityResult( mFragment.onActivityResult(
fragment.CONFIRM_EXISTING_REQUEST, Activity.RESULT_OK, null /* data */); ChooseLockGenericFragment.CONFIRM_EXISTING_REQUEST, Activity.RESULT_OK,
null /* data */);
// no crash // 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();
}
} }