Hide search box if it is called in initial setup wizard

- 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
This commit is contained in:
Raff Tsai
2019-10-18 09:57:49 +08:00
parent f28a690ad9
commit c898775914
12 changed files with 62 additions and 68 deletions

View File

@@ -49,6 +49,7 @@ import com.android.settingslib.RestrictedLockUtilsInternal;
import com.google.android.setupcompat.template.FooterBarMixin; import com.google.android.setupcompat.template.FooterBarMixin;
import com.google.android.setupcompat.template.FooterButton; import com.google.android.setupcompat.template.FooterButton;
import com.google.android.setupcompat.template.FooterButton.ButtonType; import com.google.android.setupcompat.template.FooterButton.ButtonType;
import com.google.android.setupcompat.util.WizardManagerHelper;
import com.google.android.setupdesign.GlifLayout; import com.google.android.setupdesign.GlifLayout;
/** /**
@@ -86,7 +87,7 @@ public class MasterClearConfirm extends InstrumentedFragment {
getActivity().getSystemService(Context.OEM_LOCK_SERVICE); getActivity().getSystemService(Context.OEM_LOCK_SERVICE);
if (pdbManager != null && !oemLockManager.isOemUnlockAllowed() && 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 // 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 // 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. // provisioned, in which case the persistent data block will be preserved.

View File

@@ -276,7 +276,7 @@ public class SettingsActivity extends SettingsBaseActivity
launchSettingFragment(initialFragmentName, intent); launchSettingFragment(initialFragmentName, intent);
} }
final boolean deviceProvisioned = Utils.isDeviceProvisioned(this); final boolean deviceProvisioned = WizardManagerHelper.isDeviceProvisioned(this);
final ActionBar actionBar = getActionBar(); final ActionBar actionBar = getActionBar();
if (actionBar != null) { if (actionBar != null) {

View File

@@ -73,7 +73,6 @@ import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.Data; import android.provider.ContactsContract.Data;
import android.provider.ContactsContract.Profile; import android.provider.ContactsContract.Profile;
import android.provider.ContactsContract.RawContacts; import android.provider.ContactsContract.RawContacts;
import android.provider.Settings;
import android.telephony.SubscriptionManager; import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager; import android.telephony.TelephonyManager;
import android.text.Spannable; 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, public static boolean startQuietModeDialogIfNecessary(Context context, UserManager um,
int userId) { int userId) {
if (um.isQuietModeEnabled(UserHandle.of(userId))) { if (um.isQuietModeEnabled(UserHandle.of(userId))) {

View File

@@ -53,6 +53,8 @@ import com.android.settingslib.development.DevelopmentSettingsEnabler;
import com.android.settingslib.development.SystemPropPoker; import com.android.settingslib.development.SystemPropPoker;
import com.android.settingslib.search.SearchIndexable; import com.android.settingslib.search.SearchIndexable;
import com.google.android.setupcompat.util.WizardManagerHelper;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -166,7 +168,7 @@ public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFra
super.onActivityCreated(icicle); super.onActivityCreated(icicle);
// Apply page-level restrictions // Apply page-level restrictions
setIfOnlyAvailableForAdmins(true); 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 // 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 // restricts it, or if the device has not been provisioned
mIsAvailable = false; mIsAvailable = false;

View File

@@ -46,6 +46,8 @@ import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnStart; import com.android.settingslib.core.lifecycle.events.OnStart;
import com.android.settingslib.development.DevelopmentSettingsEnabler; import com.android.settingslib.development.DevelopmentSettingsEnabler;
import com.google.android.setupcompat.util.WizardManagerHelper;
public class BuildNumberPreferenceController extends BasePreferenceController implements public class BuildNumberPreferenceController extends BasePreferenceController implements
LifecycleObserver, OnStart { LifecycleObserver, OnStart {
@@ -131,7 +133,7 @@ public class BuildNumberPreferenceController extends BasePreferenceController im
} }
// Don't enable developer options until device has been provisioned // Don't enable developer options until device has been provisioned
if (!Utils.isDeviceProvisioned(mContext)) { if (!WizardManagerHelper.isDeviceProvisioned(mContext)) {
mMetricsFeatureProvider.action( mMetricsFeatureProvider.action(
mContext, SettingsEnums.ACTION_SETTINGS_BUILD_NUMBER_PREF); mContext, SettingsEnums.ACTION_SETTINGS_BUILD_NUMBER_PREF);
return false; return false;

View File

@@ -36,12 +36,8 @@ import android.app.admin.DevicePolicyManager.PasswordComplexity;
import android.app.settings.SettingsEnums; import android.app.settings.SettingsEnums;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.pm.UserInfo;
import android.hardware.face.Face;
import android.hardware.face.FaceManager; import android.hardware.face.FaceManager;
import android.hardware.fingerprint.Fingerprint;
import android.hardware.fingerprint.FingerprintManager; import android.hardware.fingerprint.FingerprintManager;
import android.hardware.fingerprint.FingerprintManager.RemovalCallback;
import android.os.Bundle; import android.os.Bundle;
import android.os.UserHandle; import android.os.UserHandle;
import android.os.UserManager; import android.os.UserManager;
@@ -76,7 +72,7 @@ import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
import com.android.settingslib.RestrictedLockUtilsInternal; import com.android.settingslib.RestrictedLockUtilsInternal;
import com.android.settingslib.RestrictedPreference; import com.android.settingslib.RestrictedPreference;
import java.util.List; import com.google.android.setupcompat.util.WizardManagerHelper;
public class ChooseLockGeneric extends SettingsActivity { public class ChooseLockGeneric extends SettingsActivity {
public static final String CONFIRM_CREDENTIALS = "confirm_credentials"; public static final String CONFIRM_CREDENTIALS = "confirm_credentials";
@@ -188,7 +184,8 @@ public class ChooseLockGeneric extends SettingsActivity {
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
final Activity activity = getActivity(); 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"); Log.i(TAG, "Refusing to start because device is not provisioned");
activity.finish(); activity.finish();
return; return;

View File

@@ -32,16 +32,16 @@ import android.app.admin.DevicePolicyManager.PasswordComplexity;
import android.app.admin.PasswordMetrics; import android.app.admin.PasswordMetrics;
import android.app.settings.SettingsEnums; import android.app.settings.SettingsEnums;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.os.IBinder; import android.os.IBinder;
import android.util.Log; import android.util.Log;
import com.android.settings.Utils;
import com.android.settings.overlay.FeatureFactory; import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.google.android.setupcompat.util.WizardManagerHelper;
import java.util.List; import java.util.List;
/** /**
@@ -110,7 +110,7 @@ public class SetNewPasswordActivity extends Activity implements SetNewPasswordCo
@Override @Override
public void launchChooseLock(Bundle chooseLockFingerprintExtras) { 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) Intent intent = isInSetupWizard ? new Intent(this, SetupChooseLockGeneric.class)
: new Intent(this, ChooseLockGeneric.class); : new Intent(this, ChooseLockGeneric.class);
intent.setAction(mNewPasswordAction); intent.setAction(mNewPasswordAction);

View File

@@ -34,6 +34,8 @@ import com.android.settings.Utils;
import com.android.settings.overlay.FeatureFactory; import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.search.SearchIndexableResources; import com.android.settingslib.search.SearchIndexableResources;
import com.google.android.setupcompat.util.WizardManagerHelper;
/** /**
* FeatureProvider for Settings Search * FeatureProvider for Settings Search
*/ */
@@ -67,8 +69,9 @@ public interface SearchFeatureProvider {
return; return;
} }
if (!Utils.isDeviceProvisioned(activity) || if (!WizardManagerHelper.isDeviceProvisioned(activity)
!Utils.isPackageEnabled(activity, getSettingsIntelligencePkgName(activity))) { || !Utils.isPackageEnabled(activity, getSettingsIntelligencePkgName(activity))
|| WizardManagerHelper.isAnySetupWizard(activity.getIntent())) {
final ViewGroup parent = (ViewGroup) toolbar.getParent(); final ViewGroup parent = (ViewGroup) toolbar.getParent();
if (parent != null) { if (parent != null) {
parent.setVisibility(View.GONE); parent.setVisibility(View.GONE);

View File

@@ -17,8 +17,8 @@
package com.android.settings.search.actionbar; package com.android.settings.search.actionbar;
import android.annotation.NonNull; import android.annotation.NonNull;
import android.app.Activity;
import android.app.settings.SettingsEnums; import android.app.settings.SettingsEnums;
import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.os.Bundle; 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.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnCreateOptionsMenu; import com.android.settingslib.core.lifecycle.events.OnCreateOptionsMenu;
import com.google.android.setupcompat.util.WizardManagerHelper;
public class SearchMenuController implements LifecycleObserver, OnCreateOptionsMenu { public class SearchMenuController implements LifecycleObserver, OnCreateOptionsMenu {
public static final String NEED_SEARCH_ICON_IN_ACTION_BAR = "need_search_icon_in_action_bar"; 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 @Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
final Context context = mHost.getContext(); final Activity activity = mHost.getActivity();
final String SettingsIntelligencePkgName = context.getString( final String SettingsIntelligencePkgName = activity.getString(
R.string.config_settingsintelligence_package_name); R.string.config_settingsintelligence_package_name);
if (!Utils.isDeviceProvisioned(mHost.getContext())) { if (!WizardManagerHelper.isDeviceProvisioned(activity)
|| WizardManagerHelper.isAnySetupWizard(activity.getIntent())) {
return; return;
} }
if (!Utils.isPackageEnabled(mHost.getContext(), SettingsIntelligencePkgName)) { if (!Utils.isPackageEnabled(activity, SettingsIntelligencePkgName)) {
return; return;
} }
if (menu == null) { if (menu == null) {
@@ -83,17 +86,17 @@ public class SearchMenuController implements LifecycleObserver, OnCreateOptionsM
searchItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); searchItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
searchItem.setOnMenuItemClickListener(target -> { searchItem.setOnMenuItemClickListener(target -> {
final Intent intent = FeatureFactory.getFactory(context) final Intent intent = FeatureFactory.getFactory(activity)
.getSearchFeatureProvider() .getSearchFeatureProvider()
.buildSearchIntent(context, mPageId); .buildSearchIntent(activity, mPageId);
if (context.getPackageManager().queryIntentActivities(intent, if (activity.getPackageManager().queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY).isEmpty()) { PackageManager.MATCH_DEFAULT_ONLY).isEmpty()) {
return true; return true;
} }
FeatureFactory.getFactory(context).getMetricsFeatureProvider() FeatureFactory.getFactory(activity).getMetricsFeatureProvider()
.action(context, SettingsEnums.ACTION_SEARCH_RESULTS); .action(activity, SettingsEnums.ACTION_SEARCH_RESULTS);
mHost.startActivityForResult(intent, SearchFeatureProvider.REQUEST_CODE); mHost.startActivityForResult(intent, SearchFeatureProvider.REQUEST_CODE);
return true; return true;
}); });

View File

@@ -74,6 +74,8 @@ import com.android.settingslib.RestrictedPreference;
import com.android.settingslib.drawable.CircleFramedDrawable; import com.android.settingslib.drawable.CircleFramedDrawable;
import com.android.settingslib.search.SearchIndexable; import com.android.settingslib.search.SearchIndexable;
import com.google.android.setupcompat.util.WizardManagerHelper;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.util.ArrayList; import java.util.ArrayList;
@@ -224,7 +226,7 @@ public class UserSettings extends SettingsPreferenceFragment
super.onCreate(icicle); super.onCreate(icicle);
addPreferencesFromResource(R.xml.user_settings); addPreferencesFromResource(R.xml.user_settings);
final Activity activity = getActivity(); final Activity activity = getActivity();
if (!Utils.isDeviceProvisioned(activity)) { if (!WizardManagerHelper.isDeviceProvisioned(activity)) {
activity.finish(); activity.finish();
return; return;
} }
@@ -977,7 +979,8 @@ public class UserSettings extends SettingsPreferenceFragment
private void updateAddUser(Context context) { private void updateAddUser(Context context) {
if ((mUserCaps.mCanAddUser || mUserCaps.mDisallowAddUserSetByAdmin) if ((mUserCaps.mCanAddUser || mUserCaps.mDisallowAddUserSetByAdmin)
&& Utils.isDeviceProvisioned(context) && mUserCaps.mUserSwitcherEnabled) { && WizardManagerHelper.isDeviceProvisioned(context)
&& mUserCaps.mUserSwitcherEnabled) {
mAddUser.setVisible(true); mAddUser.setVisible(true);
final boolean moreUsers = mUserManager.canAddMoreUsers(); final boolean moreUsers = mUserManager.canAddMoreUsers();
mAddUser.setEnabled(moreUsers && !mAddingUser && mUserManager.canSwitchUsers()); mAddUser.setEnabled(moreUsers && !mAddingUser && mUserManager.canSwitchUsers());

View File

@@ -6,6 +6,8 @@ com.android.settings.accessibility.ToggleScreenMagnificationPreferenceFragmentFo
com.android.settings.accessibility.ToggleScreenReaderPreferenceFragmentForSetupWizard com.android.settings.accessibility.ToggleScreenReaderPreferenceFragmentForSetupWizard
com.android.settings.accessibility.ToggleSelectToSpeakPreferenceFragmentForSetupWizard com.android.settings.accessibility.ToggleSelectToSpeakPreferenceFragmentForSetupWizard
com.android.settings.accounts.AccountDetailDashboardFragment com.android.settings.accounts.AccountDetailDashboardFragment
com.android.settings.accounts.AccountPersonalDashboardFragment
com.android.settings.accounts.AccountWorkProfileDashboardFragment
com.android.settings.accounts.AccountSyncSettings com.android.settings.accounts.AccountSyncSettings
com.android.settings.accounts.ChooseAccountFragment com.android.settings.accounts.ChooseAccountFragment
com.android.settings.applications.appinfo.AppInfoDashboardFragment com.android.settings.applications.appinfo.AppInfoDashboardFragment

View File

@@ -17,29 +17,33 @@
package com.android.settings.search.actionbar; package com.android.settings.search.actionbar;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyZeroInteractions; import static org.mockito.Mockito.verifyZeroInteractions;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import android.app.settings.SettingsEnums; import android.app.settings.SettingsEnums;
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 android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import androidx.fragment.app.FragmentActivity;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.core.InstrumentedFragment; import com.android.settings.core.InstrumentedFragment;
import com.android.settings.core.InstrumentedPreferenceFragment;
import com.android.settings.testutils.shadow.ShadowUtils; import com.android.settings.testutils.shadow.ShadowUtils;
import com.google.android.setupcompat.util.WizardManagerHelper;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config; import org.robolectric.annotation.Config;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
@@ -48,40 +52,27 @@ public class SearchMenuControllerTest {
@Mock @Mock
private Menu mMenu; private Menu mMenu;
private TestPreferenceFragment mPreferenceHost;
private InstrumentedFragment mHost; private InstrumentedFragment mHost;
private Context mContext; private FragmentActivity mActivity;
@Before @Before
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mContext = RuntimeEnvironment.application; mActivity = Robolectric.buildActivity(FragmentActivity.class).get();
mHost = new InstrumentedFragment() { mHost = spy(new InstrumentedFragment() {
@Override
public Context getContext() {
return mContext;
}
@Override @Override
public int getMetricsCategory() { public int getMetricsCategory() {
return SettingsEnums.TESTING; return SettingsEnums.TESTING;
} }
}; });
mPreferenceHost = new TestPreferenceFragment(); Global.putInt(mActivity.getContentResolver(), Global.DEVICE_PROVISIONED, 1);
Global.putInt(mContext.getContentResolver(), Global.DEVICE_PROVISIONED, 1);
when(mHost.getActivity()).thenReturn(mActivity);
when(mMenu.add(Menu.NONE, Menu.NONE, 0 /* order */, R.string.search_menu)) when(mMenu.add(Menu.NONE, Menu.NONE, 0 /* order */, R.string.search_menu))
.thenReturn(mock(MenuItem.class)); .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 @Test
public void init_observableFragment_shouldAddMenu() { public void init_observableFragment_shouldAddMenu() {
SearchMenuController.init(mHost); SearchMenuController.init(mHost);
@@ -103,26 +94,22 @@ public class SearchMenuControllerTest {
@Test @Test
public void init_deviceNotProvisioned_shouldNotAddMenu() { public void init_deviceNotProvisioned_shouldNotAddMenu() {
Global.putInt(mContext.getContentResolver(), Global.DEVICE_PROVISIONED, 0); Global.putInt(mActivity.getContentResolver(), Global.DEVICE_PROVISIONED, 0);
SearchMenuController.init(mHost); SearchMenuController.init(mHost);
mHost.getSettingsLifecycle().onCreateOptionsMenu(mMenu, null /* inflater */); mHost.getSettingsLifecycle().onCreateOptionsMenu(mMenu, null /* inflater */);
verifyZeroInteractions(mMenu); verifyZeroInteractions(mMenu);
} }
private static class TestPreferenceFragment extends InstrumentedPreferenceFragment { @Test
@Override public void init_startFromSetupWizard_shouldNotAddMenu() {
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { final Intent intent = new Intent();
} intent.putExtra(WizardManagerHelper.EXTRA_IS_SETUP_FLOW, true);
mActivity.setIntent(intent);
SearchMenuController.init(mHost);
@Override mHost.getSettingsLifecycle().onCreateOptionsMenu(mMenu, null /* inflater */);
public Context getContext() {
return RuntimeEnvironment.application;
}
@Override verifyZeroInteractions(mMenu);
public int getMetricsCategory() {
return SettingsEnums.TESTING;
}
} }
} }