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

Commit 76cf0dbd authored by Narayan Kamath's avatar Narayan Kamath Committed by Android (Google) Code Review
Browse files

Merge "Hide AppButtonsPreferenceController for system modules." into qt-dev

parents 089d85f3 67d149ae
Loading
Loading
Loading
Loading
+9 −2
Original line number Diff line number Diff line
@@ -160,8 +160,7 @@ public class AppButtonsPreferenceController extends BasePreferenceController imp
    @Override
    public int getAvailabilityStatus() {
        // TODO(b/37313605): Re-enable once this controller supports instant apps
        return mAppEntry != null && !AppUtils.isInstant(mAppEntry.info)
                ? AVAILABLE : DISABLED_FOR_USER;
        return isInstantApp() || isSystemModule() ? DISABLED_FOR_USER : AVAILABLE;
    }

    @Override
@@ -685,6 +684,14 @@ public class AppButtonsPreferenceController extends BasePreferenceController imp
        }
    }

    private boolean isInstantApp() {
        return mAppEntry != null && AppUtils.isInstant(mAppEntry.info);
    }

    private boolean isSystemModule() {
        return mAppEntry != null && AppUtils.isSystemModule(mContext, mAppEntry.info.packageName);
    }

    /**
     * Changes the status of disable/enable for a package
     */
+46 −7
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@ import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.RemoteException;
import android.os.UserManager;
import android.util.ArraySet;
import android.view.View;

import com.android.settings.R;
@@ -58,6 +59,8 @@ import com.android.settingslib.applications.instantapps.InstantAppDataProvider;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.widget.ActionButtonsPreference;

import java.util.Set;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -67,6 +70,10 @@ import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.mockito.stubbing.Answer;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
import org.robolectric.annotation.Implementation;
import org.robolectric.annotation.Implements;
import org.robolectric.annotation.Resetter;
import org.robolectric.util.ReflectionHelpers;

@RunWith(RobolectricTestRunner.class)
@@ -149,6 +156,11 @@ public class AppButtonsPreferenceControllerTest {
        doAnswer(callable).when(mFragment).startActivityForResult(captor.capture(), anyInt());
    }

    @After
    public void tearDown() {
        ShadowAppUtils.reset();
    }

    @Test
    public void retrieveAppEntry_hasAppEntry_notNull()
            throws PackageManager.NameNotFoundException {
@@ -212,15 +224,9 @@ public class AppButtonsPreferenceControllerTest {
    }

    @Test
    @Config(shadows = ShadowAppUtils.class)
    public void isAvailable_nonInstantApp() {
        mController.mAppEntry = mAppEntry;
        ReflectionHelpers.setStaticField(AppUtils.class, "sInstantAppDataProvider",
                new InstantAppDataProvider() {
                    @Override
                    public boolean isInstantApp(ApplicationInfo info) {
                        return false;
                    }
                });
        assertThat(mController.isAvailable()).isTrue();
    }

@@ -436,6 +442,14 @@ public class AppButtonsPreferenceControllerTest {
        // Should not crash in this method
    }

    @Test
    @Config(shadows = ShadowAppUtils.class)
    public void getAvailabilityStatus_systemModule() {
        ShadowAppUtils.addHiddenModule(mController.mPackageName);
        assertThat(mController.getAvailabilityStatus()).isEqualTo(
                AppButtonsPreferenceController.DISABLED_FOR_USER);
    }

    /**
     * The test fragment which implements
     * {@link ButtonActionDialogFragment.AppButtonsDialogListener}
@@ -477,4 +491,29 @@ public class AppButtonsPreferenceControllerTest {
                priority,
                false /* isStatic */);
    }

    @Implements(AppUtils.class)
    public static class ShadowAppUtils {

        public static Set<String> sSystemModules = new ArraySet<>();

        @Resetter
        public static void reset() {
            sSystemModules.clear();
        }

        public static void addHiddenModule(String pkg) {
            sSystemModules.add(pkg);
        }

        @Implementation
        protected static boolean isInstant(ApplicationInfo info) {
            return false;
        }

        @Implementation
        protected static boolean isSystemModule(Context context, String packageName) {
            return sSystemModules.contains(packageName);
        }
    }
}