OSDN Git Service

Hide search box if it is called in initial setup wizard
authorRaff Tsai <rafftsai@google.com>
Fri, 18 Oct 2019 01:57:49 +0000 (09:57 +0800)
committerRaff Tsai <rafftsai@google.com>
Fri, 18 Oct 2019 02:08:38 +0000 (02:08 +0000)
- Search box is hidden if user set intent extra isSetupFlow true

Fixes: 135717823
Test: search box is hidden in the following command
adb shell am start -a android.settings.SETTINGS --ez isSetupFlow true

Change-Id: Ia3d955c9390d6b0eef9391b9b35b6a483eb63d26

12 files changed:
src/com/android/settings/MasterClearConfirm.java
src/com/android/settings/SettingsActivity.java
src/com/android/settings/Utils.java
src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
src/com/android/settings/deviceinfo/BuildNumberPreferenceController.java
src/com/android/settings/password/ChooseLockGeneric.java
src/com/android/settings/password/SetNewPasswordActivity.java
src/com/android/settings/search/SearchFeatureProvider.java
src/com/android/settings/search/actionbar/SearchMenuController.java
src/com/android/settings/users/UserSettings.java
tests/robotests/assets/grandfather_not_implementing_index_provider
tests/robotests/src/com/android/settings/search/actionbar/SearchMenuControllerTest.java

index a8c4341..679f18f 100644 (file)
@@ -49,6 +49,7 @@ import com.android.settingslib.RestrictedLockUtilsInternal;
 import com.google.android.setupcompat.template.FooterBarMixin;
 import com.google.android.setupcompat.template.FooterButton;
 import com.google.android.setupcompat.template.FooterButton.ButtonType;
+import com.google.android.setupcompat.util.WizardManagerHelper;
 import com.google.android.setupdesign.GlifLayout;
 
 /**
@@ -86,7 +87,7 @@ public class MasterClearConfirm extends InstrumentedFragment {
                     getActivity().getSystemService(Context.OEM_LOCK_SERVICE);
 
             if (pdbManager != null && !oemLockManager.isOemUnlockAllowed() &&
-                    Utils.isDeviceProvisioned(getActivity())) {
+                    WizardManagerHelper.isDeviceProvisioned(getActivity())) {
                 // if OEM unlock is allowed, the persistent data block will be wiped during FR
                 // process. If disabled, it will be wiped here, unless the device is still being
                 // provisioned, in which case the persistent data block will be preserved.
index 4d813d5..b489bc4 100644 (file)
@@ -276,7 +276,7 @@ public class SettingsActivity extends SettingsBaseActivity
             launchSettingFragment(initialFragmentName, intent);
         }
 
-        final boolean deviceProvisioned = Utils.isDeviceProvisioned(this);
+        final boolean deviceProvisioned = WizardManagerHelper.isDeviceProvisioned(this);
 
         final ActionBar actionBar = getActionBar();
         if (actionBar != null) {
index 75db3e1..aef0ac8 100644 (file)
@@ -73,7 +73,6 @@ import android.provider.ContactsContract.Contacts;
 import android.provider.ContactsContract.Data;
 import android.provider.ContactsContract.Profile;
 import android.provider.ContactsContract.RawContacts;
-import android.provider.Settings;
 import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
 import android.text.Spannable;
@@ -729,11 +728,6 @@ public final class Utils extends com.android.settingslib.Utils {
         }
     }
 
-    public static boolean isDeviceProvisioned(Context context) {
-        return Settings.Global.getInt(context.getContentResolver(),
-                Settings.Global.DEVICE_PROVISIONED, 0) != 0;
-    }
-
     public static boolean startQuietModeDialogIfNecessary(Context context, UserManager um,
             int userId) {
         if (um.isQuietModeEnabled(UserHandle.of(userId))) {
index 52a5cd9..8e8a82d 100644 (file)
@@ -53,6 +53,8 @@ import com.android.settingslib.development.DevelopmentSettingsEnabler;
 import com.android.settingslib.development.SystemPropPoker;
 import com.android.settingslib.search.SearchIndexable;
 
+import com.google.android.setupcompat.util.WizardManagerHelper;
+
 import java.util.ArrayList;
 import java.util.List;
 
@@ -166,7 +168,7 @@ public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFra
         super.onActivityCreated(icicle);
         // Apply page-level restrictions
         setIfOnlyAvailableForAdmins(true);
-        if (isUiRestricted() || !Utils.isDeviceProvisioned(getActivity())) {
+        if (isUiRestricted() || !WizardManagerHelper.isDeviceProvisioned(getActivity())) {
             // Block access to developer options if the user is not the owner, if user policy
             // restricts it, or if the device has not been provisioned
             mIsAvailable = false;
index dd522bf..40e34c0 100644 (file)
@@ -46,6 +46,8 @@ import com.android.settingslib.core.lifecycle.LifecycleObserver;
 import com.android.settingslib.core.lifecycle.events.OnStart;
 import com.android.settingslib.development.DevelopmentSettingsEnabler;
 
+import com.google.android.setupcompat.util.WizardManagerHelper;
+
 public class BuildNumberPreferenceController extends BasePreferenceController implements
         LifecycleObserver, OnStart {
 
@@ -131,7 +133,7 @@ public class BuildNumberPreferenceController extends BasePreferenceController im
         }
 
         // Don't enable developer options until device has been provisioned
-        if (!Utils.isDeviceProvisioned(mContext)) {
+        if (!WizardManagerHelper.isDeviceProvisioned(mContext)) {
             mMetricsFeatureProvider.action(
                     mContext, SettingsEnums.ACTION_SETTINGS_BUILD_NUMBER_PREF);
             return false;
index a2885d6..6809f35 100644 (file)
@@ -36,12 +36,8 @@ import android.app.admin.DevicePolicyManager.PasswordComplexity;
 import android.app.settings.SettingsEnums;
 import android.content.Context;
 import android.content.Intent;
-import android.content.pm.UserInfo;
-import android.hardware.face.Face;
 import android.hardware.face.FaceManager;
-import android.hardware.fingerprint.Fingerprint;
 import android.hardware.fingerprint.FingerprintManager;
-import android.hardware.fingerprint.FingerprintManager.RemovalCallback;
 import android.os.Bundle;
 import android.os.UserHandle;
 import android.os.UserManager;
@@ -76,7 +72,7 @@ import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
 import com.android.settingslib.RestrictedLockUtilsInternal;
 import com.android.settingslib.RestrictedPreference;
 
-import java.util.List;
+import com.google.android.setupcompat.util.WizardManagerHelper;
 
 public class ChooseLockGeneric extends SettingsActivity {
     public static final String CONFIRM_CREDENTIALS = "confirm_credentials";
@@ -188,7 +184,8 @@ public class ChooseLockGeneric extends SettingsActivity {
         public void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             final Activity activity = getActivity();
-            if (!Utils.isDeviceProvisioned(activity) && !canRunBeforeDeviceProvisioned()) {
+            if (!WizardManagerHelper.isDeviceProvisioned(activity)
+                    && !canRunBeforeDeviceProvisioned()) {
                 Log.i(TAG, "Refusing to start because device is not provisioned");
                 activity.finish();
                 return;
index 055e5be..4bffbf5 100644 (file)
@@ -32,16 +32,16 @@ import android.app.admin.DevicePolicyManager.PasswordComplexity;
 import android.app.admin.PasswordMetrics;
 import android.app.settings.SettingsEnums;
 import android.content.ComponentName;
-import android.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
 import android.os.IBinder;
 import android.util.Log;
 
-import com.android.settings.Utils;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
 
+import com.google.android.setupcompat.util.WizardManagerHelper;
+
 import java.util.List;
 
 /**
@@ -110,7 +110,7 @@ public class SetNewPasswordActivity extends Activity implements SetNewPasswordCo
 
     @Override
     public void launchChooseLock(Bundle chooseLockFingerprintExtras) {
-        final boolean isInSetupWizard = !Utils.isDeviceProvisioned(this);
+        final boolean isInSetupWizard = !WizardManagerHelper.isDeviceProvisioned(this);
         Intent intent = isInSetupWizard ? new Intent(this, SetupChooseLockGeneric.class)
                 : new Intent(this, ChooseLockGeneric.class);
         intent.setAction(mNewPasswordAction);
index 896f6e5..20d4e7c 100644 (file)
@@ -34,6 +34,8 @@ import com.android.settings.Utils;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settingslib.search.SearchIndexableResources;
 
+import com.google.android.setupcompat.util.WizardManagerHelper;
+
 /**
  * FeatureProvider for Settings Search
  */
@@ -67,8 +69,9 @@ public interface SearchFeatureProvider {
             return;
         }
 
-        if (!Utils.isDeviceProvisioned(activity) ||
-                !Utils.isPackageEnabled(activity, getSettingsIntelligencePkgName(activity))) {
+        if (!WizardManagerHelper.isDeviceProvisioned(activity)
+                || !Utils.isPackageEnabled(activity, getSettingsIntelligencePkgName(activity))
+                || WizardManagerHelper.isAnySetupWizard(activity.getIntent())) {
             final ViewGroup parent = (ViewGroup) toolbar.getParent();
             if (parent != null) {
                 parent.setVisibility(View.GONE);
index 25d0d30..0243c09 100644 (file)
@@ -17,8 +17,8 @@
 package com.android.settings.search.actionbar;
 
 import android.annotation.NonNull;
+import android.app.Activity;
 import android.app.settings.SettingsEnums;
-import android.content.Context;
 import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.os.Bundle;
@@ -37,6 +37,8 @@ import com.android.settings.search.SearchFeatureProvider;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
 import com.android.settingslib.core.lifecycle.events.OnCreateOptionsMenu;
 
+import com.google.android.setupcompat.util.WizardManagerHelper;
+
 public class SearchMenuController implements LifecycleObserver, OnCreateOptionsMenu {
 
     public static final String NEED_SEARCH_ICON_IN_ACTION_BAR = "need_search_icon_in_action_bar";
@@ -61,13 +63,14 @@ public class SearchMenuController implements LifecycleObserver, OnCreateOptionsM
 
     @Override
     public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
-        final Context context = mHost.getContext();
-        final String SettingsIntelligencePkgName = context.getString(
+        final Activity activity = mHost.getActivity();
+        final String SettingsIntelligencePkgName = activity.getString(
                 R.string.config_settingsintelligence_package_name);
-        if (!Utils.isDeviceProvisioned(mHost.getContext())) {
+        if (!WizardManagerHelper.isDeviceProvisioned(activity)
+                || WizardManagerHelper.isAnySetupWizard(activity.getIntent())) {
             return;
         }
-        if (!Utils.isPackageEnabled(mHost.getContext(), SettingsIntelligencePkgName)) {
+        if (!Utils.isPackageEnabled(activity, SettingsIntelligencePkgName)) {
             return;
         }
         if (menu == null) {
@@ -83,17 +86,17 @@ public class SearchMenuController implements LifecycleObserver, OnCreateOptionsM
         searchItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
 
         searchItem.setOnMenuItemClickListener(target -> {
-            final Intent intent = FeatureFactory.getFactory(context)
+            final Intent intent = FeatureFactory.getFactory(activity)
                     .getSearchFeatureProvider()
-                    .buildSearchIntent(context, mPageId);
+                    .buildSearchIntent(activity, mPageId);
 
-            if (context.getPackageManager().queryIntentActivities(intent,
+            if (activity.getPackageManager().queryIntentActivities(intent,
                     PackageManager.MATCH_DEFAULT_ONLY).isEmpty()) {
                 return true;
             }
 
-            FeatureFactory.getFactory(context).getMetricsFeatureProvider()
-                    .action(context, SettingsEnums.ACTION_SEARCH_RESULTS);
+            FeatureFactory.getFactory(activity).getMetricsFeatureProvider()
+                    .action(activity, SettingsEnums.ACTION_SEARCH_RESULTS);
             mHost.startActivityForResult(intent, SearchFeatureProvider.REQUEST_CODE);
             return true;
         });
index 5ad68fe..7a9f026 100644 (file)
@@ -74,6 +74,8 @@ import com.android.settingslib.RestrictedPreference;
 import com.android.settingslib.drawable.CircleFramedDrawable;
 import com.android.settingslib.search.SearchIndexable;
 
+import com.google.android.setupcompat.util.WizardManagerHelper;
+
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
@@ -224,7 +226,7 @@ public class UserSettings extends SettingsPreferenceFragment
         super.onCreate(icicle);
         addPreferencesFromResource(R.xml.user_settings);
         final Activity activity = getActivity();
-        if (!Utils.isDeviceProvisioned(activity)) {
+        if (!WizardManagerHelper.isDeviceProvisioned(activity)) {
             activity.finish();
             return;
         }
@@ -977,7 +979,8 @@ public class UserSettings extends SettingsPreferenceFragment
 
     private void updateAddUser(Context context) {
         if ((mUserCaps.mCanAddUser || mUserCaps.mDisallowAddUserSetByAdmin)
-                && Utils.isDeviceProvisioned(context) && mUserCaps.mUserSwitcherEnabled) {
+                && WizardManagerHelper.isDeviceProvisioned(context)
+                && mUserCaps.mUserSwitcherEnabled) {
             mAddUser.setVisible(true);
             final boolean moreUsers = mUserManager.canAddMoreUsers();
             mAddUser.setEnabled(moreUsers && !mAddingUser && mUserManager.canSwitchUsers());
index 20c1792..d0f02d3 100644 (file)
@@ -6,6 +6,8 @@ com.android.settings.accessibility.ToggleScreenMagnificationPreferenceFragmentFo
 com.android.settings.accessibility.ToggleScreenReaderPreferenceFragmentForSetupWizard
 com.android.settings.accessibility.ToggleSelectToSpeakPreferenceFragmentForSetupWizard
 com.android.settings.accounts.AccountDetailDashboardFragment
+com.android.settings.accounts.AccountPersonalDashboardFragment
+com.android.settings.accounts.AccountWorkProfileDashboardFragment
 com.android.settings.accounts.AccountSyncSettings
 com.android.settings.accounts.ChooseAccountFragment
 com.android.settings.applications.appinfo.AppInfoDashboardFragment
index 3063912..e2b896a 100644 (file)
 package com.android.settings.search.actionbar;
 
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.verifyZeroInteractions;
 import static org.mockito.Mockito.when;
 
 import android.app.settings.SettingsEnums;
-import android.content.Context;
+import android.content.Intent;
 import android.os.Bundle;
 import android.provider.Settings.Global;
 import android.view.Menu;
 import android.view.MenuItem;
 
+import androidx.fragment.app.FragmentActivity;
+
 import com.android.settings.R;
 import com.android.settings.core.InstrumentedFragment;
-import com.android.settings.core.InstrumentedPreferenceFragment;
 import com.android.settings.testutils.shadow.ShadowUtils;
 
+import com.google.android.setupcompat.util.WizardManagerHelper;
+
 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.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
 import org.robolectric.annotation.Config;
 
 @RunWith(RobolectricTestRunner.class)
@@ -48,41 +52,28 @@ public class SearchMenuControllerTest {
 
     @Mock
     private Menu mMenu;
-    private TestPreferenceFragment mPreferenceHost;
     private InstrumentedFragment mHost;
-    private Context mContext;
+    private FragmentActivity mActivity;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
-        mContext = RuntimeEnvironment.application;
-        mHost = new InstrumentedFragment() {
-            @Override
-            public Context getContext() {
-                return mContext;
-            }
+        mActivity = Robolectric.buildActivity(FragmentActivity.class).get();
+        mHost = spy(new InstrumentedFragment() {
 
             @Override
             public int getMetricsCategory() {
                 return SettingsEnums.TESTING;
             }
-        };
-        mPreferenceHost = new TestPreferenceFragment();
-        Global.putInt(mContext.getContentResolver(), Global.DEVICE_PROVISIONED, 1);
+        });
+        Global.putInt(mActivity.getContentResolver(), Global.DEVICE_PROVISIONED, 1);
 
+        when(mHost.getActivity()).thenReturn(mActivity);
         when(mMenu.add(Menu.NONE, Menu.NONE, 0 /* order */, R.string.search_menu))
                 .thenReturn(mock(MenuItem.class));
     }
 
     @Test
-    public void init_prefFragment_shouldAddMenu() {
-        SearchMenuController.init(mPreferenceHost);
-        mPreferenceHost.getSettingsLifecycle().onCreateOptionsMenu(mMenu, null /* inflater */);
-
-        verify(mMenu).add(Menu.NONE, Menu.NONE, 0 /* order */, R.string.search_menu);
-    }
-
-    @Test
     public void init_observableFragment_shouldAddMenu() {
         SearchMenuController.init(mHost);
         mHost.getSettingsLifecycle().onCreateOptionsMenu(mMenu, null /* inflater */);
@@ -103,26 +94,22 @@ public class SearchMenuControllerTest {
 
     @Test
     public void init_deviceNotProvisioned_shouldNotAddMenu() {
-        Global.putInt(mContext.getContentResolver(), Global.DEVICE_PROVISIONED, 0);
+        Global.putInt(mActivity.getContentResolver(), Global.DEVICE_PROVISIONED, 0);
         SearchMenuController.init(mHost);
         mHost.getSettingsLifecycle().onCreateOptionsMenu(mMenu, null /* inflater */);
 
         verifyZeroInteractions(mMenu);
     }
 
-    private static class TestPreferenceFragment extends InstrumentedPreferenceFragment {
-        @Override
-        public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
-        }
+    @Test
+    public void init_startFromSetupWizard_shouldNotAddMenu() {
+        final Intent intent = new Intent();
+        intent.putExtra(WizardManagerHelper.EXTRA_IS_SETUP_FLOW, true);
+        mActivity.setIntent(intent);
+        SearchMenuController.init(mHost);
 
-        @Override
-        public Context getContext() {
-            return RuntimeEnvironment.application;
-        }
+        mHost.getSettingsLifecycle().onCreateOptionsMenu(mMenu, null /* inflater */);
 
-        @Override
-        public int getMetricsCategory() {
-            return SettingsEnums.TESTING;
-        }
+        verifyZeroInteractions(mMenu);
     }
 }