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

Commit 6b0aa870 authored by Sunny Goyal's avatar Sunny Goyal
Browse files

Caching system app flag to avoid unnecessary system calls

when scrolling

Bug: 65493000
Change-Id: If60ec6dec23e7efa1031d72e76775fa2449bcd7b
parent 510fdfbc
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.launcher3;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.LauncherActivityInfo;
import android.os.UserHandle;

@@ -31,6 +32,10 @@ import com.android.launcher3.util.PackageManagerHelper;
 */
public class AppInfo extends ItemInfoWithIcon {

    public static final int FLAG_SYSTEM_UNKNOWN = 0;
    public static final int FLAG_SYSTEM_YES = 1 << 0;
    public static final int FLAG_SYSTEM_NO = 1 << 1;

    /**
     * The intent used to start the application.
     */
@@ -43,6 +48,11 @@ public class AppInfo extends ItemInfoWithIcon {
     */
    public int isDisabled = ShortcutInfo.DEFAULT;

    /**
     * Stores if the app is a system app or not.
     */
    public int isSystemApp;

    public AppInfo() {
        itemType = LauncherSettings.Favorites.ITEM_TYPE_APPLICATION;
    }
@@ -71,6 +81,10 @@ public class AppInfo extends ItemInfoWithIcon {
        }

        intent = makeLaunchIntent(info);

        isSystemApp = (info.getApplicationInfo().flags & ApplicationInfo.FLAG_SYSTEM) == 0
                ? FLAG_SYSTEM_NO : FLAG_SYSTEM_YES;

    }

    public AppInfo(AppInfo info) {
@@ -79,6 +93,7 @@ public class AppInfo extends ItemInfoWithIcon {
        title = Utilities.trim(info.title);
        intent = new Intent(info.intent);
        isDisabled = info.isDisabled;
        isSystemApp = info.isSystemApp;
    }

    @Override
+14 −4
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import java.net.URISyntaxException;
public class UninstallDropTarget extends ButtonDropTarget {

    private static final String TAG = "UninstallDropTarget";
    private static Boolean sUninstallDisabled;

    public UninstallDropTarget(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
@@ -48,13 +49,22 @@ public class UninstallDropTarget extends ButtonDropTarget {
    }

    public static boolean supportsDrop(Context context, ItemInfo info) {
        if (sUninstallDisabled == null) {
            UserManager userManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
            Bundle restrictions = userManager.getUserRestrictions();
        if (restrictions.getBoolean(UserManager.DISALLOW_APPS_CONTROL, false)
                || restrictions.getBoolean(UserManager.DISALLOW_UNINSTALL_APPS, false)) {
            sUninstallDisabled = restrictions.getBoolean(UserManager.DISALLOW_APPS_CONTROL, false)
                    || restrictions.getBoolean(UserManager.DISALLOW_UNINSTALL_APPS, false);
        }
        if (sUninstallDisabled) {
            return false;
        }

        if (info instanceof AppInfo) {
            AppInfo appInfo = (AppInfo) info;
            if (appInfo.isSystemApp != AppInfo.FLAG_SYSTEM_UNKNOWN) {
                return (appInfo.isSystemApp & AppInfo.FLAG_SYSTEM_NO) != 0;
            }
        }
        return getUninstallTarget(context, info) != null;
    }