Caching system app flag to avoid unnecessary system calls

when scrolling

Bug: 65493000
Change-Id: If60ec6dec23e7efa1031d72e76775fa2449bcd7b
This commit is contained in:
Sunny Goyal
2017-09-29 07:54:37 -07:00
parent 510fdfbcea
commit 6b0aa870b8
2 changed files with 29 additions and 4 deletions
+15
View File
@@ -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
@@ -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) {
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)) {
if (sUninstallDisabled == null) {
UserManager userManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
Bundle restrictions = userManager.getUserRestrictions();
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;
}