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

Commit 770f4abf authored by Doris Ling's avatar Doris Ling
Browse files

Disable changing lock when device is not provisioned.

When the device is not yet provisioned and settings is launched:
- disable the entry point for changing device lock
- remove the search panel from settings home page
- remove the search menu

Bug: 110034419
Test: make RunSettingsRoboTests
Change-Id: Ieb7eb0e8699229ec0824ccc19d7b958ac44965a2
Merged-In: Ieb7eb0e8699229ec0824ccc19d7b958ac44965a2
parent 0a8de9d7
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -291,8 +291,10 @@ public class SettingsActivity extends SettingsDrawerActivity
            launchSettingFragment(initialFragmentName, isSubSettings, intent);
        }

        final boolean deviceProvisioned = Utils.isDeviceProvisioned(this);
        if (mIsShowingDashboard) {
            findViewById(R.id.search_bar).setVisibility(View.VISIBLE);
            findViewById(R.id.search_bar).setVisibility(
                    deviceProvisioned ? View.VISIBLE : View.INVISIBLE);
            findViewById(R.id.action_bar).setVisibility(View.GONE);
            final Toolbar toolbar = findViewById(R.id.search_action_bar);
            FeatureFactory.getFactory(this).getSearchFeatureProvider()
@@ -311,7 +313,6 @@ public class SettingsActivity extends SettingsDrawerActivity

        ActionBar actionBar = getActionBar();
        if (actionBar != null) {
            boolean deviceProvisioned = Utils.isDeviceProvisioned(this);
            actionBar.setDisplayHomeAsUpEnabled(deviceProvisioned);
            actionBar.setHomeButtonEnabled(deviceProvisioned);
            actionBar.setDisplayShowTitleEnabled(!mIsShowingDashboard);
+9 −0
Original line number Diff line number Diff line
@@ -164,6 +164,11 @@ public class ChooseLockGeneric extends SettingsActivity {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            final Activity activity = getActivity();
            if (!Utils.isDeviceProvisioned(activity) && !canRunBeforeDeviceProvisioned()) {
                activity.finish();
                return;
            }

            String chooseLockAction = getActivity().getIntent().getAction();
            mFingerprintManager = Utils.getFingerprintManagerOrNull(getActivity());
@@ -249,6 +254,10 @@ public class ChooseLockGeneric extends SettingsActivity {
            addHeaderView();
        }

        protected boolean canRunBeforeDeviceProvisioned() {
            return false;
        }

        protected void addHeaderView() {
            if (mForFingerprint) {
                setHeaderView(R.layout.choose_lock_generic_fingerprint_header);
+5 −0
Original line number Diff line number Diff line
@@ -129,6 +129,11 @@ public class SetupChooseLockGeneric extends ChooseLockGeneric {
            return layout.onCreateRecyclerView(inflater, parent, savedInstanceState);
        }

        @Override
        protected boolean canRunBeforeDeviceProvisioned() {
            return true;
        }

        /***
         * Disables preferences that are less secure than required quality and shows only secure
         * screen lock options here.
+4 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import android.view.MenuInflater;
import android.view.MenuItem;

import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.search.SearchFeatureProvider;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
@@ -52,6 +53,9 @@ public class SearchMenuController implements LifecycleObserver, OnCreateOptionsM

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        if (!Utils.isDeviceProvisioned(mHost.getContext())) {
            return;
        }
        if (menu == null) {
            return;
        }
+40 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.settings;

import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.nullable;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Mockito.doReturn;
@@ -27,17 +28,25 @@ import static org.mockito.Mockito.when;
import android.app.ActivityManager;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.provider.Settings.Global;
import android.view.View;

import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.testutils.shadow.SettingsShadowResources;
import com.android.settings.testutils.shadow.SettingsShadowResourcesImpl;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.Robolectric;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;

@RunWith(SettingsRobolectricTestRunner.class)
public class SettingsActivityTest {
@@ -49,15 +58,46 @@ public class SettingsActivityTest {
    @Mock
    private Bitmap mBitmap;
    private SettingsActivity mActivity;
    private Context mContext;

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);

        mContext = RuntimeEnvironment.application;
        mActivity = spy(new SettingsActivity());
        doReturn(mBitmap).when(mActivity).getBitmapFromXmlResource(anyInt());
    }

    @Test
    @Config(shadows = {
        SettingsShadowResourcesImpl.class,
        SettingsShadowResources.SettingsShadowTheme.class,
    })
    public void onCreate_deviceNotProvisioned_shouldDisableSearch() {
        Global.putInt(mContext.getContentResolver(), Global.DEVICE_PROVISIONED, 0);
        final Intent intent = new Intent(mContext, Settings.class);
        final SettingsActivity activity =
            Robolectric.buildActivity(SettingsActivity.class, intent).create(Bundle.EMPTY).get();

        assertThat(activity.findViewById(R.id.search_bar).getVisibility())
            .isEqualTo(View.INVISIBLE);
    }

    @Test
    @Config(shadows = {
        SettingsShadowResourcesImpl.class,
        SettingsShadowResources.SettingsShadowTheme.class,
    })
    public void onCreate_deviceProvisioned_shouldEnableSearch() {
        Global.putInt(mContext.getContentResolver(), Global.DEVICE_PROVISIONED, 1);
        final Intent intent = new Intent(mContext, Settings.class);
        final SettingsActivity activity =
            Robolectric.buildActivity(SettingsActivity.class, intent).create(Bundle.EMPTY).get();

        assertThat(activity.findViewById(R.id.search_bar).getVisibility()).isEqualTo(View.VISIBLE);
    }

    @Test
    public void launchSettingFragment_nullExtraShowFragment_shouldNotCrash() {
        when(mActivity.getFragmentManager()).thenReturn(mFragmentManager);
Loading