Caching system app flag to avoid unnecessary system calls
when scrolling Bug: 65493000 Change-Id: If60ec6dec23e7efa1031d72e76775fa2449bcd7b
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user