Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4778a9af authored by Raff Tsai's avatar Raff Tsai
Browse files

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"
parent c21f4a51
Loading
Loading
Loading
Loading
+11 −4
Original line number Diff line number Diff line
@@ -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();
+2 −1
Original line number Diff line number Diff line
@@ -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);
        });
    }
}
+75 −17
Original line number Diff line number Diff line
@@ -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,6 +50,20 @@ 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(),
@@ -52,28 +73,65 @@ public class ChooseLockGenericTest {
    @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();
    }
}