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

Commit cfbbbf33 authored by Ivan Chiang's avatar Ivan Chiang
Browse files

Check system flag to instead of check apk's path

Check whether the flag includes ApplicationInfo.FLAG_SYSTEM or not to
decide should we apply the overlay package.

Change-Id: I4cff840326755b296854873d883059cb48217026
Fix: 135261884
Test: manual. factory reset the device
parent 3c615a95
Loading
Loading
Loading
Loading
+4 −11
Original line number Diff line number Diff line
@@ -22,7 +22,6 @@ import android.content.om.OverlayManager;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.os.AsyncTask;
import android.os.Environment;
import android.os.UserHandle;
import android.util.Log;

@@ -76,9 +75,9 @@ public class ThemeOverlayManager {
    }

    /**
     * Return the OverlayInfo which is provided by the docsUI overlay package located product,
     * system or vendor. We assume there should only one docsUI overlay package because priority
     * not work for non-static overlay, so vendor should put only one docsUI overlay package.
     * Return the OverlayInfo which is provided by the docsUI overlay package pre-installed in
     * device. We assume there should only one docsUI overlay package because priority not work
     * for non-static overlay, so vendor should put only one docsUI overlay package.
     *
     * @param pm the PackageManager
     */
@@ -87,13 +86,7 @@ public class ThemeOverlayManager {
        for (OverlayInfo info : getOverlayInfo()) {
            try {
                final ApplicationInfo ai = pm.getApplicationInfo(info.getPackageName(), 0);
                // Since isProduct(), isVendor() and isSystemApp() functions in ApplicationInfo are
                // hidden. The best way to avoid unknown sideload APKs is filter path by string
                // comparison.
                final String sourceDir = ai.sourceDir;
                if (sourceDir.startsWith(Environment.getProductDirectory().getAbsolutePath())
                        || sourceDir.startsWith(Environment.getVendorDirectory().getAbsolutePath())
                        || sourceDir.startsWith(Environment.getRootDirectory().getAbsolutePath())) {
                if ((ai.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
                    return info;
                }
            } catch (PackageManager.NameNotFoundException e) {
+1 −32
Original line number Diff line number Diff line
@@ -195,38 +195,7 @@ public class ThemeOverlayManagerTest {
                getEnabledTargetPackageId());

        ApplicationInfo ai = mock(ApplicationInfo.class);
        String path = "/system/overlay/DocumentUIOverlay/DocumentUIOverlay.apk";
        ai.sourceDir = path;
        when(mPackageManager.getApplicationInfo(getOverlayPackageId(), 0)).thenReturn(ai);

        assertThat(mThemeOverlayManager.getValidOverlay(mPackageManager)).isEqualTo(
                mOverlayManager.getOverlayInfosForTarget(getEnabledTargetPackageId(),
                        mUserHandle).iterator().next());
    }

    @Test
    public void testGetValidOverlay_vendor_valid() throws Exception {
        mThemeOverlayManager = new ThemeOverlayManager(mOverlayManager,
                getEnabledTargetPackageId());

        ApplicationInfo ai = mock(ApplicationInfo.class);
        String path = "/vendor/overlay/DocumentUIOverlay/DocumentUIOverlay.apk";
        ai.sourceDir = path;
        when(mPackageManager.getApplicationInfo(getOverlayPackageId(), 0)).thenReturn(ai);

        assertThat(mThemeOverlayManager.getValidOverlay(mPackageManager)).isEqualTo(
                mOverlayManager.getOverlayInfosForTarget(getEnabledTargetPackageId(),
                        mUserHandle).iterator().next());
    }

    @Test
    public void testGetValidOverlay_product_valid() throws Exception {
        mThemeOverlayManager = new ThemeOverlayManager(mOverlayManager,
                getEnabledTargetPackageId());

        ApplicationInfo ai = mock(ApplicationInfo.class);
        String path = "/product/overlay/DocumentUIOverlay/DocumentUIOverlay.apk";
        ai.sourceDir = path;
        ai.flags |= ApplicationInfo.FLAG_SYSTEM;
        when(mPackageManager.getApplicationInfo(getOverlayPackageId(), 0)).thenReturn(ai);

        assertThat(mThemeOverlayManager.getValidOverlay(mPackageManager)).isEqualTo(