Loading src/com/android/settings/Utils.java +10 −0 Original line number Diff line number Diff line Loading @@ -979,4 +979,14 @@ public final class Utils extends com.android.settingslib.Utils { return packageManager.getDefaultActivityIcon(); } } /** Returns true if the current package is installed & enabled. */ public static boolean isPackageEnabled(Context context, String packageName) { try { return context.getPackageManager().getApplicationInfo(packageName, 0).enabled; } catch (Exception e) { Log.e(TAG, "Error while retrieving application info for package " + packageName, e); } return false; } } src/com/android/settings/search/SearchFeatureProvider.java +9 −0 Original line number Diff line number Diff line Loading @@ -25,9 +25,11 @@ import android.content.Context; import android.content.Intent; import android.provider.Settings; import android.view.View; import android.view.ViewGroup; import android.widget.Toolbar; import com.android.internal.logging.nano.MetricsProto; import com.android.settings.Utils; import com.android.settings.overlay.FeatureFactory; import com.android.settingslib.search.SearchIndexableResources; Loading Loading @@ -64,6 +66,13 @@ public interface SearchFeatureProvider { if (activity == null || toolbar == null) { return; } if (!Utils.isPackageEnabled(activity, getSettingsIntelligencePkgName())) { final ViewGroup parent = (ViewGroup)toolbar.getParent(); if (parent != null) { parent.setVisibility(View.GONE); } return; } // Please forgive me for what I am about to do. // // Need to make the navigation icon non-clickable so that the entire card is clickable Loading src/com/android/settings/search/actionbar/SearchMenuController.java +7 −3 Original line number Diff line number Diff line Loading @@ -56,9 +56,15 @@ public class SearchMenuController implements LifecycleObserver, OnCreateOptionsM @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { final Context context = mHost.getContext(); final String SettingsIntelligencePkgName = FeatureFactory.getFactory(context) .getSearchFeatureProvider().getSettingsIntelligencePkgName(); if (!Utils.isDeviceProvisioned(mHost.getContext())) { return; } if (!Utils.isPackageEnabled(mHost.getContext(), SettingsIntelligencePkgName)) { return; } if (menu == null) { return; } Loading @@ -72,10 +78,8 @@ public class SearchMenuController implements LifecycleObserver, OnCreateOptionsM searchItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); searchItem.setOnMenuItemClickListener(target -> { final Context context = mHost.getContext(); final Intent intent = SearchFeatureProvider.SEARCH_UI_INTENT; intent.setPackage(FeatureFactory.getFactory(mHost.getContext()) .getSearchFeatureProvider().getSettingsIntelligencePkgName()); intent.setPackage(SettingsIntelligencePkgName); FeatureFactory.getFactory(context).getMetricsFeatureProvider() .action(context, MetricsProto.MetricsEvent.ACTION_SEARCH_RESULTS); mHost.startActivityForResult(intent, 0 /* requestCode */); Loading tests/robotests/src/com/android/settings/SettingsActivityTest.java +4 −0 Original line number Diff line number Diff line Loading @@ -38,6 +38,7 @@ import androidx.fragment.app.FragmentTransaction; import com.android.settings.core.OnActivityResultListener; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.shadow.ShadowUtils; import org.junit.Before; import org.junit.Test; Loading @@ -46,6 +47,7 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.Robolectric; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import java.util.ArrayList; import java.util.List; Loading @@ -69,6 +71,7 @@ public class SettingsActivityTest { } @Test @Config(shadows = ShadowUtils.class) public void onCreate_deviceNotProvisioned_shouldDisableSearch() { Global.putInt(mContext.getContentResolver(), Global.DEVICE_PROVISIONED, 0); final SettingsActivity activity = Robolectric.buildActivity(SettingsActivity.class) Loading @@ -80,6 +83,7 @@ public class SettingsActivityTest { } @Test @Config(shadows = ShadowUtils.class) public void onCreate_deviceProvisioned_shouldEnableSearch() { Global.putInt(mContext.getContentResolver(), Global.DEVICE_PROVISIONED, 1); final SettingsActivity activity = Robolectric.buildActivity(SettingsActivity.class) Loading tests/robotests/src/com/android/settings/UtilsTest.java +24 −0 Original line number Diff line number Diff line Loading @@ -93,6 +93,7 @@ public class UtilsTest { when(mContext.getSystemService(WifiManager.class)).thenReturn(wifiManager); when(mContext.getSystemService(Context.CONNECTIVITY_SERVICE)) .thenReturn(connectivityManager); when(mContext.getPackageManager()).thenReturn(mPackageManager); } @Test Loading Loading @@ -200,4 +201,27 @@ public class UtilsTest { verify(mPackageManager).getApplicationInfoAsUser(eq(PACKAGE_NAME), anyInt(), eq(USER_ID)); verify(mIconDrawableFactory).getBadgedIcon(mApplicationInfo, USER_ID); } @Test public void isPackageEnabled_appEnabled_returnTrue() throws PackageManager.NameNotFoundException{ mApplicationInfo.enabled = true; when(mPackageManager.getApplicationInfo(PACKAGE_NAME, 0)).thenReturn(mApplicationInfo); assertThat(Utils.isPackageEnabled(mContext, PACKAGE_NAME)).isTrue(); } @Test public void isPackageEnabled_appDisabled_returnTrue() throws PackageManager.NameNotFoundException{ mApplicationInfo.enabled = false; when(mPackageManager.getApplicationInfo(PACKAGE_NAME, 0)).thenReturn(mApplicationInfo); assertThat(Utils.isPackageEnabled(mContext, PACKAGE_NAME)).isFalse(); } @Test public void isPackageEnabled_noApp_returnFalse() { assertThat(Utils.isPackageEnabled(mContext, PACKAGE_NAME)).isFalse(); } } Loading
src/com/android/settings/Utils.java +10 −0 Original line number Diff line number Diff line Loading @@ -979,4 +979,14 @@ public final class Utils extends com.android.settingslib.Utils { return packageManager.getDefaultActivityIcon(); } } /** Returns true if the current package is installed & enabled. */ public static boolean isPackageEnabled(Context context, String packageName) { try { return context.getPackageManager().getApplicationInfo(packageName, 0).enabled; } catch (Exception e) { Log.e(TAG, "Error while retrieving application info for package " + packageName, e); } return false; } }
src/com/android/settings/search/SearchFeatureProvider.java +9 −0 Original line number Diff line number Diff line Loading @@ -25,9 +25,11 @@ import android.content.Context; import android.content.Intent; import android.provider.Settings; import android.view.View; import android.view.ViewGroup; import android.widget.Toolbar; import com.android.internal.logging.nano.MetricsProto; import com.android.settings.Utils; import com.android.settings.overlay.FeatureFactory; import com.android.settingslib.search.SearchIndexableResources; Loading Loading @@ -64,6 +66,13 @@ public interface SearchFeatureProvider { if (activity == null || toolbar == null) { return; } if (!Utils.isPackageEnabled(activity, getSettingsIntelligencePkgName())) { final ViewGroup parent = (ViewGroup)toolbar.getParent(); if (parent != null) { parent.setVisibility(View.GONE); } return; } // Please forgive me for what I am about to do. // // Need to make the navigation icon non-clickable so that the entire card is clickable Loading
src/com/android/settings/search/actionbar/SearchMenuController.java +7 −3 Original line number Diff line number Diff line Loading @@ -56,9 +56,15 @@ public class SearchMenuController implements LifecycleObserver, OnCreateOptionsM @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { final Context context = mHost.getContext(); final String SettingsIntelligencePkgName = FeatureFactory.getFactory(context) .getSearchFeatureProvider().getSettingsIntelligencePkgName(); if (!Utils.isDeviceProvisioned(mHost.getContext())) { return; } if (!Utils.isPackageEnabled(mHost.getContext(), SettingsIntelligencePkgName)) { return; } if (menu == null) { return; } Loading @@ -72,10 +78,8 @@ public class SearchMenuController implements LifecycleObserver, OnCreateOptionsM searchItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); searchItem.setOnMenuItemClickListener(target -> { final Context context = mHost.getContext(); final Intent intent = SearchFeatureProvider.SEARCH_UI_INTENT; intent.setPackage(FeatureFactory.getFactory(mHost.getContext()) .getSearchFeatureProvider().getSettingsIntelligencePkgName()); intent.setPackage(SettingsIntelligencePkgName); FeatureFactory.getFactory(context).getMetricsFeatureProvider() .action(context, MetricsProto.MetricsEvent.ACTION_SEARCH_RESULTS); mHost.startActivityForResult(intent, 0 /* requestCode */); Loading
tests/robotests/src/com/android/settings/SettingsActivityTest.java +4 −0 Original line number Diff line number Diff line Loading @@ -38,6 +38,7 @@ import androidx.fragment.app.FragmentTransaction; import com.android.settings.core.OnActivityResultListener; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.shadow.ShadowUtils; import org.junit.Before; import org.junit.Test; Loading @@ -46,6 +47,7 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.Robolectric; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import java.util.ArrayList; import java.util.List; Loading @@ -69,6 +71,7 @@ public class SettingsActivityTest { } @Test @Config(shadows = ShadowUtils.class) public void onCreate_deviceNotProvisioned_shouldDisableSearch() { Global.putInt(mContext.getContentResolver(), Global.DEVICE_PROVISIONED, 0); final SettingsActivity activity = Robolectric.buildActivity(SettingsActivity.class) Loading @@ -80,6 +83,7 @@ public class SettingsActivityTest { } @Test @Config(shadows = ShadowUtils.class) public void onCreate_deviceProvisioned_shouldEnableSearch() { Global.putInt(mContext.getContentResolver(), Global.DEVICE_PROVISIONED, 1); final SettingsActivity activity = Robolectric.buildActivity(SettingsActivity.class) Loading
tests/robotests/src/com/android/settings/UtilsTest.java +24 −0 Original line number Diff line number Diff line Loading @@ -93,6 +93,7 @@ public class UtilsTest { when(mContext.getSystemService(WifiManager.class)).thenReturn(wifiManager); when(mContext.getSystemService(Context.CONNECTIVITY_SERVICE)) .thenReturn(connectivityManager); when(mContext.getPackageManager()).thenReturn(mPackageManager); } @Test Loading Loading @@ -200,4 +201,27 @@ public class UtilsTest { verify(mPackageManager).getApplicationInfoAsUser(eq(PACKAGE_NAME), anyInt(), eq(USER_ID)); verify(mIconDrawableFactory).getBadgedIcon(mApplicationInfo, USER_ID); } @Test public void isPackageEnabled_appEnabled_returnTrue() throws PackageManager.NameNotFoundException{ mApplicationInfo.enabled = true; when(mPackageManager.getApplicationInfo(PACKAGE_NAME, 0)).thenReturn(mApplicationInfo); assertThat(Utils.isPackageEnabled(mContext, PACKAGE_NAME)).isTrue(); } @Test public void isPackageEnabled_appDisabled_returnTrue() throws PackageManager.NameNotFoundException{ mApplicationInfo.enabled = false; when(mPackageManager.getApplicationInfo(PACKAGE_NAME, 0)).thenReturn(mApplicationInfo); assertThat(Utils.isPackageEnabled(mContext, PACKAGE_NAME)).isFalse(); } @Test public void isPackageEnabled_noApp_returnFalse() { assertThat(Utils.isPackageEnabled(mContext, PACKAGE_NAME)).isFalse(); } }