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

Commit 70609fad authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix Settings crash after disabling Settings Suggestion"

parents 98ce7a1a 2928cd4c
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -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;
    }
}
+9 −0
Original line number Diff line number Diff line
@@ -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;

@@ -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
+7 −3
Original line number Diff line number Diff line
@@ -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;
        }
@@ -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 */);
+4 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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)
@@ -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)
+24 −0
Original line number Diff line number Diff line
@@ -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
@@ -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