Adding support for storing keywords in iconCache
Change-Id: I1183e63a6556ebfb3eee5df23d149e09728193a9
Merged-In: I1183e63a6556ebfb3eee5df23d149e09728193a9
(cherry picked from commit e529a86fbd
)
This commit is contained in:
parent
22edac9bf5
commit
934ebd087b
|
@ -36,12 +36,16 @@ import android.graphics.BitmapFactory;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
|
import android.os.LocaleList;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.os.Process;
|
import android.os.Process;
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
import com.android.launcher3.icons.BaseIconFactory;
|
import com.android.launcher3.icons.BaseIconFactory;
|
||||||
import com.android.launcher3.icons.BitmapInfo;
|
import com.android.launcher3.icons.BitmapInfo;
|
||||||
import com.android.launcher3.icons.BitmapRenderer;
|
import com.android.launcher3.icons.BitmapRenderer;
|
||||||
|
@ -57,8 +61,6 @@ import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
|
|
||||||
public abstract class BaseIconCache {
|
public abstract class BaseIconCache {
|
||||||
|
|
||||||
private static final String TAG = "BaseIconCache";
|
private static final String TAG = "BaseIconCache";
|
||||||
|
@ -84,6 +86,7 @@ public abstract class BaseIconCache {
|
||||||
|
|
||||||
protected int mIconDpi;
|
protected int mIconDpi;
|
||||||
protected IconDB mIconDb;
|
protected IconDB mIconDb;
|
||||||
|
protected LocaleList mLocaleList = LocaleList.getEmptyLocaleList();
|
||||||
protected String mSystemState = "";
|
protected String mSystemState = "";
|
||||||
|
|
||||||
private final String mDbFileName;
|
private final String mDbFileName;
|
||||||
|
@ -227,12 +230,12 @@ public abstract class BaseIconCache {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Refreshes the system state definition used to check the validity of the cache. It
|
* Refreshes the system state definition used to check the validity of the cache. It
|
||||||
* incorporates all the properties that can affect the cache like locale and system-version.
|
* incorporates all the properties that can affect the cache like the list of enabled locale
|
||||||
|
* and system-version.
|
||||||
*/
|
*/
|
||||||
private void updateSystemState() {
|
private void updateSystemState() {
|
||||||
final String locale =
|
mLocaleList = mContext.getResources().getConfiguration().getLocales();
|
||||||
mContext.getResources().getConfiguration().getLocales().toLanguageTags();
|
mSystemState = mLocaleList.toLanguageTags() + "," + Build.VERSION.SDK_INT;
|
||||||
mSystemState = locale + "," + Build.VERSION.SDK_INT;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected String getIconSystemState(String packageName) {
|
protected String getIconSystemState(String packageName) {
|
||||||
|
@ -269,7 +272,7 @@ public abstract class BaseIconCache {
|
||||||
mCache.put(key, entry);
|
mCache.put(key, entry);
|
||||||
|
|
||||||
ContentValues values = newContentValues(entry, entry.title.toString(),
|
ContentValues values = newContentValues(entry, entry.title.toString(),
|
||||||
componentName.getPackageName());
|
componentName.getPackageName(), cachingLogic.getKeywords(object, mLocaleList));
|
||||||
addIconToDB(values, componentName, info, userSerial);
|
addIconToDB(values, componentName, info, userSerial);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -445,7 +448,7 @@ public abstract class BaseIconCache {
|
||||||
// Add the icon in the DB here, since these do not get written during
|
// Add the icon in the DB here, since these do not get written during
|
||||||
// package updates.
|
// package updates.
|
||||||
ContentValues values = newContentValues(
|
ContentValues values = newContentValues(
|
||||||
iconInfo, entry.title.toString(), packageName);
|
iconInfo, entry.title.toString(), packageName, null);
|
||||||
addIconToDB(values, cacheKey.componentName, info, getSerialNumberForUser(user));
|
addIconToDB(values, cacheKey.componentName, info, getSerialNumberForUser(user));
|
||||||
|
|
||||||
} catch (NameNotFoundException e) {
|
} catch (NameNotFoundException e) {
|
||||||
|
@ -504,23 +507,35 @@ public abstract class BaseIconCache {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static final class IconDB extends SQLiteCacheHelper {
|
/**
|
||||||
private final static int RELEASE_VERSION = 26;
|
* Returns a cursor for an arbitrary query to the cache db
|
||||||
|
*/
|
||||||
|
public synchronized Cursor queryCacheDb(String[] columns, String selection,
|
||||||
|
String[] selectionArgs) {
|
||||||
|
return mIconDb.query(columns, selection, selectionArgs);
|
||||||
|
}
|
||||||
|
|
||||||
public final static String TABLE_NAME = "icons";
|
/**
|
||||||
public final static String COLUMN_ROWID = "rowid";
|
* Cache class to store the actual entries on disk
|
||||||
public final static String COLUMN_COMPONENT = "componentName";
|
*/
|
||||||
public final static String COLUMN_USER = "profileId";
|
public static final class IconDB extends SQLiteCacheHelper {
|
||||||
public final static String COLUMN_LAST_UPDATED = "lastUpdated";
|
private static final int RELEASE_VERSION = 27;
|
||||||
public final static String COLUMN_VERSION = "version";
|
|
||||||
public final static String COLUMN_ICON = "icon";
|
|
||||||
public final static String COLUMN_ICON_COLOR = "icon_color";
|
|
||||||
public final static String COLUMN_LABEL = "label";
|
|
||||||
public final static String COLUMN_SYSTEM_STATE = "system_state";
|
|
||||||
|
|
||||||
public final static String[] COLUMNS_HIGH_RES = new String[] {
|
public static final String TABLE_NAME = "icons";
|
||||||
|
public static final String COLUMN_ROWID = "rowid";
|
||||||
|
public static final String COLUMN_COMPONENT = "componentName";
|
||||||
|
public static final String COLUMN_USER = "profileId";
|
||||||
|
public static final String COLUMN_LAST_UPDATED = "lastUpdated";
|
||||||
|
public static final String COLUMN_VERSION = "version";
|
||||||
|
public static final String COLUMN_ICON = "icon";
|
||||||
|
public static final String COLUMN_ICON_COLOR = "icon_color";
|
||||||
|
public static final String COLUMN_LABEL = "label";
|
||||||
|
public static final String COLUMN_SYSTEM_STATE = "system_state";
|
||||||
|
public static final String COLUMN_KEYWORDS = "keywords";
|
||||||
|
|
||||||
|
public static final String[] COLUMNS_HIGH_RES = new String[] {
|
||||||
IconDB.COLUMN_ICON_COLOR, IconDB.COLUMN_LABEL, IconDB.COLUMN_ICON };
|
IconDB.COLUMN_ICON_COLOR, IconDB.COLUMN_LABEL, IconDB.COLUMN_ICON };
|
||||||
public final static String[] COLUMNS_LOW_RES = new String[] {
|
public static final String[] COLUMNS_LOW_RES = new String[] {
|
||||||
IconDB.COLUMN_ICON_COLOR, IconDB.COLUMN_LABEL };
|
IconDB.COLUMN_ICON_COLOR, IconDB.COLUMN_LABEL };
|
||||||
|
|
||||||
public IconDB(Context context, String dbFileName, int iconPixelSize) {
|
public IconDB(Context context, String dbFileName, int iconPixelSize) {
|
||||||
|
@ -529,21 +544,23 @@ public abstract class BaseIconCache {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreateTable(SQLiteDatabase db) {
|
protected void onCreateTable(SQLiteDatabase db) {
|
||||||
db.execSQL("CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " (" +
|
db.execSQL("CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " ("
|
||||||
COLUMN_COMPONENT + " TEXT NOT NULL, " +
|
+ COLUMN_COMPONENT + " TEXT NOT NULL, "
|
||||||
COLUMN_USER + " INTEGER NOT NULL, " +
|
+ COLUMN_USER + " INTEGER NOT NULL, "
|
||||||
COLUMN_LAST_UPDATED + " INTEGER NOT NULL DEFAULT 0, " +
|
+ COLUMN_LAST_UPDATED + " INTEGER NOT NULL DEFAULT 0, "
|
||||||
COLUMN_VERSION + " INTEGER NOT NULL DEFAULT 0, " +
|
+ COLUMN_VERSION + " INTEGER NOT NULL DEFAULT 0, "
|
||||||
COLUMN_ICON + " BLOB, " +
|
+ COLUMN_ICON + " BLOB, "
|
||||||
COLUMN_ICON_COLOR + " INTEGER NOT NULL DEFAULT 0, " +
|
+ COLUMN_ICON_COLOR + " INTEGER NOT NULL DEFAULT 0, "
|
||||||
COLUMN_LABEL + " TEXT, " +
|
+ COLUMN_LABEL + " TEXT, "
|
||||||
COLUMN_SYSTEM_STATE + " TEXT, " +
|
+ COLUMN_SYSTEM_STATE + " TEXT, "
|
||||||
"PRIMARY KEY (" + COLUMN_COMPONENT + ", " + COLUMN_USER + ") " +
|
+ COLUMN_KEYWORDS + " TEXT, "
|
||||||
");");
|
+ "PRIMARY KEY (" + COLUMN_COMPONENT + ", " + COLUMN_USER + ") "
|
||||||
|
+ ");");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private ContentValues newContentValues(BitmapInfo bitmapInfo, String label, String packageName) {
|
private ContentValues newContentValues(BitmapInfo bitmapInfo, String label,
|
||||||
|
String packageName, @Nullable String keywords) {
|
||||||
ContentValues values = new ContentValues();
|
ContentValues values = new ContentValues();
|
||||||
values.put(IconDB.COLUMN_ICON,
|
values.put(IconDB.COLUMN_ICON,
|
||||||
bitmapInfo.isLowRes() ? null : GraphicsUtils.flattenBitmap(bitmapInfo.icon));
|
bitmapInfo.isLowRes() ? null : GraphicsUtils.flattenBitmap(bitmapInfo.icon));
|
||||||
|
@ -551,7 +568,7 @@ public abstract class BaseIconCache {
|
||||||
|
|
||||||
values.put(IconDB.COLUMN_LABEL, label);
|
values.put(IconDB.COLUMN_LABEL, label);
|
||||||
values.put(IconDB.COLUMN_SYSTEM_STATE, getIconSystemState(packageName));
|
values.put(IconDB.COLUMN_SYSTEM_STATE, getIconSystemState(packageName));
|
||||||
|
values.put(IconDB.COLUMN_KEYWORDS, keywords);
|
||||||
return values;
|
return values;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,8 +17,11 @@ package com.android.launcher3.icons.cache;
|
||||||
|
|
||||||
import android.content.ComponentName;
|
import android.content.ComponentName;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.os.LocaleList;
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
|
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
import com.android.launcher3.icons.BitmapInfo;
|
import com.android.launcher3.icons.BitmapInfo;
|
||||||
|
|
||||||
public interface CachingLogic<T> {
|
public interface CachingLogic<T> {
|
||||||
|
@ -30,4 +33,12 @@ public interface CachingLogic<T> {
|
||||||
CharSequence getLabel(T object);
|
CharSequence getLabel(T object);
|
||||||
|
|
||||||
void loadIcon(Context context, T object, BitmapInfo target);
|
void loadIcon(Context context, T object, BitmapInfo target);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides a option list of keywords to associate with this object
|
||||||
|
*/
|
||||||
|
@Nullable
|
||||||
|
default String getKeywords(T object, LocaleList localeList) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,6 +16,8 @@
|
||||||
|
|
||||||
package com.android.quickstep;
|
package com.android.quickstep;
|
||||||
|
|
||||||
|
import static com.android.launcher3.util.MainThreadInitializedObject.forOverride;
|
||||||
|
|
||||||
import android.graphics.Matrix;
|
import android.graphics.Matrix;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
|
||||||
|
@ -47,8 +49,7 @@ public class TaskOverlayFactory implements ResourceBasedOverride {
|
||||||
};
|
};
|
||||||
|
|
||||||
public static final MainThreadInitializedObject<TaskOverlayFactory> INSTANCE =
|
public static final MainThreadInitializedObject<TaskOverlayFactory> INSTANCE =
|
||||||
new MainThreadInitializedObject<>(c -> Overrides.getObject(TaskOverlayFactory.class,
|
forOverride(TaskOverlayFactory.class, R.string.task_overlay_factory_class);
|
||||||
c, R.string.task_overlay_factory_class));
|
|
||||||
|
|
||||||
public List<TaskSystemShortcut> getEnabledShortcuts(TaskView taskView) {
|
public List<TaskSystemShortcut> getEnabledShortcuts(TaskView taskView) {
|
||||||
final ArrayList<TaskSystemShortcut> shortcuts = new ArrayList<>();
|
final ArrayList<TaskSystemShortcut> shortcuts = new ArrayList<>();
|
||||||
|
|
|
@ -16,15 +16,12 @@
|
||||||
package com.android.quickstep;
|
package com.android.quickstep;
|
||||||
|
|
||||||
import static com.android.quickstep.TaskUtils.checkCurrentOrManagedUserId;
|
import static com.android.quickstep.TaskUtils.checkCurrentOrManagedUserId;
|
||||||
import static com.android.systemui.shared.system.QuickStepContract.KEY_EXTRA_SUPPORTS_WINDOW_CORNERS;
|
|
||||||
import static com.android.systemui.shared.system.QuickStepContract.KEY_EXTRA_WINDOW_CORNER_RADIUS;
|
|
||||||
|
|
||||||
import android.annotation.TargetApi;
|
import android.annotation.TargetApi;
|
||||||
import android.app.ActivityManager;
|
import android.app.ActivityManager;
|
||||||
import android.content.ComponentCallbacks2;
|
import android.content.ComponentCallbacks2;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
|
||||||
import android.os.HandlerThread;
|
import android.os.HandlerThread;
|
||||||
import android.os.Process;
|
import android.os.Process;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
|
@ -35,7 +32,6 @@ import com.android.systemui.shared.recents.ISystemUiProxy;
|
||||||
import com.android.systemui.shared.recents.model.Task;
|
import com.android.systemui.shared.recents.model.Task;
|
||||||
import com.android.systemui.shared.recents.model.ThumbnailData;
|
import com.android.systemui.shared.recents.model.ThumbnailData;
|
||||||
import com.android.systemui.shared.system.ActivityManagerWrapper;
|
import com.android.systemui.shared.system.ActivityManagerWrapper;
|
||||||
import com.android.systemui.shared.system.QuickStepContract;
|
|
||||||
import com.android.systemui.shared.system.TaskStackChangeListener;
|
import com.android.systemui.shared.system.TaskStackChangeListener;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -52,7 +48,7 @@ public class RecentsModel extends TaskStackChangeListener {
|
||||||
|
|
||||||
// We do not need any synchronization for this variable as its only written on UI thread.
|
// We do not need any synchronization for this variable as its only written on UI thread.
|
||||||
public static final MainThreadInitializedObject<RecentsModel> INSTANCE =
|
public static final MainThreadInitializedObject<RecentsModel> INSTANCE =
|
||||||
new MainThreadInitializedObject<>(c -> new RecentsModel(c));
|
new MainThreadInitializedObject<>(RecentsModel::new);
|
||||||
|
|
||||||
private final List<TaskThumbnailChangeListener> mThumbnailChangeListeners = new ArrayList<>();
|
private final List<TaskThumbnailChangeListener> mThumbnailChangeListeners = new ArrayList<>();
|
||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
|
|
|
@ -72,6 +72,7 @@
|
||||||
<string name="system_shortcut_factory_class" translatable="false"></string>
|
<string name="system_shortcut_factory_class" translatable="false"></string>
|
||||||
<string name="app_launch_tracker_class" translatable="false"></string>
|
<string name="app_launch_tracker_class" translatable="false"></string>
|
||||||
<string name="test_information_handler_class" translatable="false"></string>
|
<string name="test_information_handler_class" translatable="false"></string>
|
||||||
|
<string name="launcher_activity_logic_class" translatable="false"></string>
|
||||||
|
|
||||||
<!-- Package name of the default wallpaper picker. -->
|
<!-- Package name of the default wallpaper picker. -->
|
||||||
<string name="wallpaper_picker_package" translatable="false"></string>
|
<string name="wallpaper_picker_package" translatable="false"></string>
|
||||||
|
|
|
@ -1,16 +1,17 @@
|
||||||
package com.android.launcher3;
|
package com.android.launcher3;
|
||||||
|
|
||||||
import android.content.Context;
|
import static com.android.launcher3.util.MainThreadInitializedObject.forOverride;
|
||||||
|
|
||||||
import android.content.pm.LauncherActivityInfo;
|
import android.content.pm.LauncherActivityInfo;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
|
|
||||||
|
import com.android.launcher3.util.MainThreadInitializedObject;
|
||||||
import com.android.launcher3.util.ResourceBasedOverride;
|
import com.android.launcher3.util.ResourceBasedOverride;
|
||||||
|
|
||||||
public class IconProvider implements ResourceBasedOverride {
|
public class IconProvider implements ResourceBasedOverride {
|
||||||
|
|
||||||
public static IconProvider newInstance(Context context) {
|
public static MainThreadInitializedObject<IconProvider> INSTANCE =
|
||||||
return Overrides.getObject(IconProvider.class, context, R.string.icon_provider_class);
|
forOverride(IconProvider.class, R.string.icon_provider_class);
|
||||||
}
|
|
||||||
|
|
||||||
public IconProvider() { }
|
public IconProvider() { }
|
||||||
|
|
||||||
|
|
|
@ -19,14 +19,12 @@ package com.android.launcher3;
|
||||||
import static com.android.launcher3.InvariantDeviceProfile.CHANGE_FLAG_ICON_PARAMS;
|
import static com.android.launcher3.InvariantDeviceProfile.CHANGE_FLAG_ICON_PARAMS;
|
||||||
import static com.android.launcher3.util.SecureSettingsObserver.newNotificationSettingsObserver;
|
import static com.android.launcher3.util.SecureSettingsObserver.newNotificationSettingsObserver;
|
||||||
|
|
||||||
import android.app.KeyguardManager;
|
|
||||||
import android.content.ComponentName;
|
import android.content.ComponentName;
|
||||||
import android.content.ContentProviderClient;
|
import android.content.ContentProviderClient;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.IntentFilter;
|
import android.content.IntentFilter;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Process;
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import com.android.launcher3.compat.LauncherAppsCompat;
|
import com.android.launcher3.compat.LauncherAppsCompat;
|
||||||
|
@ -46,7 +44,7 @@ public class LauncherAppState {
|
||||||
|
|
||||||
// We do not need any synchronization for this variable as its only written on UI thread.
|
// We do not need any synchronization for this variable as its only written on UI thread.
|
||||||
private static final MainThreadInitializedObject<LauncherAppState> INSTANCE =
|
private static final MainThreadInitializedObject<LauncherAppState> INSTANCE =
|
||||||
new MainThreadInitializedObject<>((c) -> new LauncherAppState(c));
|
new MainThreadInitializedObject<>(LauncherAppState::new);
|
||||||
|
|
||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
private final LauncherModel mModel;
|
private final LauncherModel mModel;
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
package com.android.launcher3.graphics;
|
package com.android.launcher3.graphics;
|
||||||
|
|
||||||
import static com.android.launcher3.graphics.IconShape.getShapePath;
|
import static com.android.launcher3.graphics.IconShape.getShapePath;
|
||||||
|
import static com.android.launcher3.util.MainThreadInitializedObject.forOverride;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.pm.ActivityInfo;
|
import android.content.pm.ActivityInfo;
|
||||||
|
@ -31,6 +32,8 @@ import android.os.Process;
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
import android.util.ArrayMap;
|
import android.util.ArrayMap;
|
||||||
|
|
||||||
|
import androidx.annotation.UiThread;
|
||||||
|
|
||||||
import com.android.launcher3.FastBitmapDrawable;
|
import com.android.launcher3.FastBitmapDrawable;
|
||||||
import com.android.launcher3.ItemInfoWithIcon;
|
import com.android.launcher3.ItemInfoWithIcon;
|
||||||
import com.android.launcher3.R;
|
import com.android.launcher3.R;
|
||||||
|
@ -38,16 +41,13 @@ import com.android.launcher3.icons.BitmapInfo;
|
||||||
import com.android.launcher3.util.MainThreadInitializedObject;
|
import com.android.launcher3.util.MainThreadInitializedObject;
|
||||||
import com.android.launcher3.util.ResourceBasedOverride;
|
import com.android.launcher3.util.ResourceBasedOverride;
|
||||||
|
|
||||||
import androidx.annotation.UiThread;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Factory for creating new drawables.
|
* Factory for creating new drawables.
|
||||||
*/
|
*/
|
||||||
public class DrawableFactory implements ResourceBasedOverride {
|
public class DrawableFactory implements ResourceBasedOverride {
|
||||||
|
|
||||||
public static final MainThreadInitializedObject<DrawableFactory> INSTANCE =
|
public static final MainThreadInitializedObject<DrawableFactory> INSTANCE =
|
||||||
new MainThreadInitializedObject<>(c -> Overrides.getObject(DrawableFactory.class,
|
forOverride(DrawableFactory.class, R.string.drawable_factory_class);
|
||||||
c.getApplicationContext(), R.string.drawable_factory_class));
|
|
||||||
|
|
||||||
protected final UserHandle mMyUser = Process.myUserHandle();
|
protected final UserHandle mMyUser = Process.myUserHandle();
|
||||||
protected final ArrayMap<UserHandle, Bitmap> mUserBadges = new ArrayMap<>();
|
protected final ArrayMap<UserHandle, Bitmap> mUserBadges = new ArrayMap<>();
|
||||||
|
|
|
@ -29,6 +29,8 @@ import android.os.Process;
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
import com.android.launcher3.AppInfo;
|
import com.android.launcher3.AppInfo;
|
||||||
import com.android.launcher3.IconProvider;
|
import com.android.launcher3.IconProvider;
|
||||||
import com.android.launcher3.InvariantDeviceProfile;
|
import com.android.launcher3.InvariantDeviceProfile;
|
||||||
|
@ -36,8 +38,8 @@ import com.android.launcher3.ItemInfoWithIcon;
|
||||||
import com.android.launcher3.LauncherFiles;
|
import com.android.launcher3.LauncherFiles;
|
||||||
import com.android.launcher3.LauncherModel;
|
import com.android.launcher3.LauncherModel;
|
||||||
import com.android.launcher3.MainThreadExecutor;
|
import com.android.launcher3.MainThreadExecutor;
|
||||||
import com.android.launcher3.WorkspaceItemInfo;
|
|
||||||
import com.android.launcher3.Utilities;
|
import com.android.launcher3.Utilities;
|
||||||
|
import com.android.launcher3.WorkspaceItemInfo;
|
||||||
import com.android.launcher3.compat.LauncherAppsCompat;
|
import com.android.launcher3.compat.LauncherAppsCompat;
|
||||||
import com.android.launcher3.compat.UserManagerCompat;
|
import com.android.launcher3.compat.UserManagerCompat;
|
||||||
import com.android.launcher3.icons.ComponentWithLabel.ComponentCachingLogic;
|
import com.android.launcher3.icons.ComponentWithLabel.ComponentCachingLogic;
|
||||||
|
@ -50,8 +52,6 @@ import com.android.launcher3.util.Preconditions;
|
||||||
|
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Cache of application icons. Icons can be made from any thread.
|
* Cache of application icons. Icons can be made from any thread.
|
||||||
*/
|
*/
|
||||||
|
@ -75,11 +75,11 @@ public class IconCache extends BaseIconCache {
|
||||||
super(context, LauncherFiles.APP_ICONS_DB, LauncherModel.getWorkerLooper(),
|
super(context, LauncherFiles.APP_ICONS_DB, LauncherModel.getWorkerLooper(),
|
||||||
inv.fillResIconDpi, inv.iconBitmapSize, true /* inMemoryCache */);
|
inv.fillResIconDpi, inv.iconBitmapSize, true /* inMemoryCache */);
|
||||||
mComponentWithLabelCachingLogic = new ComponentCachingLogic(context);
|
mComponentWithLabelCachingLogic = new ComponentCachingLogic(context);
|
||||||
mLauncherActivityInfoCachingLogic = new LauncherActivtiyCachingLogic(this);
|
mLauncherActivityInfoCachingLogic = LauncherActivityCachingLogic.newInstance(context);
|
||||||
mLauncherApps = LauncherAppsCompat.getInstance(mContext);
|
mLauncherApps = LauncherAppsCompat.getInstance(mContext);
|
||||||
mUserManager = UserManagerCompat.getInstance(mContext);
|
mUserManager = UserManagerCompat.getInstance(mContext);
|
||||||
mInstantAppResolver = InstantAppResolver.newInstance(mContext);
|
mInstantAppResolver = InstantAppResolver.newInstance(mContext);
|
||||||
mIconProvider = IconProvider.newInstance(context);
|
mIconProvider = IconProvider.INSTANCE.get(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -20,14 +20,23 @@ import android.content.Context;
|
||||||
import android.content.pm.LauncherActivityInfo;
|
import android.content.pm.LauncherActivityInfo;
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
|
|
||||||
|
import com.android.launcher3.IconProvider;
|
||||||
|
import com.android.launcher3.R;
|
||||||
import com.android.launcher3.icons.cache.CachingLogic;
|
import com.android.launcher3.icons.cache.CachingLogic;
|
||||||
|
import com.android.launcher3.util.ResourceBasedOverride;
|
||||||
|
|
||||||
public class LauncherActivtiyCachingLogic implements CachingLogic<LauncherActivityInfo> {
|
/**
|
||||||
|
* Caching logic for LauncherActivityInfo.
|
||||||
|
*/
|
||||||
|
public class LauncherActivityCachingLogic
|
||||||
|
implements CachingLogic<LauncherActivityInfo>, ResourceBasedOverride {
|
||||||
|
|
||||||
private final IconCache mCache;
|
/**
|
||||||
|
* Creates and returns a new instance
|
||||||
public LauncherActivtiyCachingLogic(IconCache cache) {
|
*/
|
||||||
mCache = cache;
|
public static LauncherActivityCachingLogic newInstance(Context context) {
|
||||||
|
return Overrides.getObject(LauncherActivityCachingLogic.class, context,
|
||||||
|
R.string.launcher_activity_logic_class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -49,8 +58,10 @@ public class LauncherActivtiyCachingLogic implements CachingLogic<LauncherActivi
|
||||||
public void loadIcon(Context context, LauncherActivityInfo object,
|
public void loadIcon(Context context, LauncherActivityInfo object,
|
||||||
BitmapInfo target) {
|
BitmapInfo target) {
|
||||||
LauncherIcons li = LauncherIcons.obtain(context);
|
LauncherIcons li = LauncherIcons.obtain(context);
|
||||||
li.createBadgedIconBitmap(mCache.getFullResIcon(object),
|
li.createBadgedIconBitmap(
|
||||||
|
IconProvider.INSTANCE.get(context)
|
||||||
|
.getIcon(object, li.mFillResIconDpi, true /* flattenDrawable */),
|
||||||
object.getUser(), object.getApplicationInfo().targetSdkVersion).applyTo(target);
|
object.getUser(), object.getApplicationInfo().targetSdkVersion).applyTo(target);
|
||||||
li.recycle();
|
li.recycle();
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -15,18 +15,18 @@
|
||||||
*/
|
*/
|
||||||
package com.android.launcher3.model;
|
package com.android.launcher3.model;
|
||||||
|
|
||||||
import static com.android.launcher3.util.ResourceBasedOverride.Overrides.getObject;
|
import static com.android.launcher3.util.MainThreadInitializedObject.forOverride;
|
||||||
|
|
||||||
import android.content.ComponentName;
|
import android.content.ComponentName;
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
|
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
import com.android.launcher3.R;
|
import com.android.launcher3.R;
|
||||||
import com.android.launcher3.userevent.nano.LauncherLogProto.ContainerType;
|
import com.android.launcher3.userevent.nano.LauncherLogProto.ContainerType;
|
||||||
import com.android.launcher3.util.MainThreadInitializedObject;
|
import com.android.launcher3.util.MainThreadInitializedObject;
|
||||||
import com.android.launcher3.util.ResourceBasedOverride;
|
import com.android.launcher3.util.ResourceBasedOverride;
|
||||||
|
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Callback for receiving various app launch events
|
* Callback for receiving various app launch events
|
||||||
*/
|
*/
|
||||||
|
@ -43,8 +43,7 @@ public class AppLaunchTracker implements ResourceBasedOverride {
|
||||||
|
|
||||||
|
|
||||||
public static final MainThreadInitializedObject<AppLaunchTracker> INSTANCE =
|
public static final MainThreadInitializedObject<AppLaunchTracker> INSTANCE =
|
||||||
new MainThreadInitializedObject<>(c ->
|
forOverride(AppLaunchTracker.class, R.string.app_launch_tracker_class);
|
||||||
getObject(AppLaunchTracker.class, c, R.string.app_launch_tracker_class));
|
|
||||||
|
|
||||||
public void onStartShortcut(String packageName, String shortcutId, UserHandle user,
|
public void onStartShortcut(String packageName, String shortcutId, UserHandle user,
|
||||||
@Nullable String container) { }
|
@Nullable String container) { }
|
||||||
|
|
|
@ -49,8 +49,8 @@ import com.android.launcher3.LauncherAppState;
|
||||||
import com.android.launcher3.LauncherAppWidgetInfo;
|
import com.android.launcher3.LauncherAppWidgetInfo;
|
||||||
import com.android.launcher3.LauncherModel;
|
import com.android.launcher3.LauncherModel;
|
||||||
import com.android.launcher3.LauncherSettings;
|
import com.android.launcher3.LauncherSettings;
|
||||||
import com.android.launcher3.WorkspaceItemInfo;
|
|
||||||
import com.android.launcher3.Utilities;
|
import com.android.launcher3.Utilities;
|
||||||
|
import com.android.launcher3.WorkspaceItemInfo;
|
||||||
import com.android.launcher3.compat.AppWidgetManagerCompat;
|
import com.android.launcher3.compat.AppWidgetManagerCompat;
|
||||||
import com.android.launcher3.compat.LauncherAppsCompat;
|
import com.android.launcher3.compat.LauncherAppsCompat;
|
||||||
import com.android.launcher3.compat.PackageInstallerCompat;
|
import com.android.launcher3.compat.PackageInstallerCompat;
|
||||||
|
@ -61,7 +61,7 @@ import com.android.launcher3.folder.FolderIconPreviewVerifier;
|
||||||
import com.android.launcher3.icons.ComponentWithLabel;
|
import com.android.launcher3.icons.ComponentWithLabel;
|
||||||
import com.android.launcher3.icons.ComponentWithLabel.ComponentCachingLogic;
|
import com.android.launcher3.icons.ComponentWithLabel.ComponentCachingLogic;
|
||||||
import com.android.launcher3.icons.IconCache;
|
import com.android.launcher3.icons.IconCache;
|
||||||
import com.android.launcher3.icons.LauncherActivtiyCachingLogic;
|
import com.android.launcher3.icons.LauncherActivityCachingLogic;
|
||||||
import com.android.launcher3.icons.LauncherIcons;
|
import com.android.launcher3.icons.LauncherIcons;
|
||||||
import com.android.launcher3.icons.cache.IconCacheUpdateHandler;
|
import com.android.launcher3.icons.cache.IconCacheUpdateHandler;
|
||||||
import com.android.launcher3.logging.FileLog;
|
import com.android.launcher3.logging.FileLog;
|
||||||
|
@ -196,7 +196,7 @@ public class LoaderTask implements Runnable {
|
||||||
IconCacheUpdateHandler updateHandler = mIconCache.getUpdateHandler();
|
IconCacheUpdateHandler updateHandler = mIconCache.getUpdateHandler();
|
||||||
setIgnorePackages(updateHandler);
|
setIgnorePackages(updateHandler);
|
||||||
updateHandler.updateIcons(allActivityList,
|
updateHandler.updateIcons(allActivityList,
|
||||||
new LauncherActivtiyCachingLogic(mApp.getIconCache()),
|
LauncherActivityCachingLogic.newInstance(mApp.getContext()),
|
||||||
mApp.getModel()::onPackageIconsUpdated);
|
mApp.getModel()::onPackageIconsUpdated);
|
||||||
|
|
||||||
// Take a break
|
// Take a break
|
||||||
|
|
|
@ -15,6 +15,10 @@
|
||||||
*/
|
*/
|
||||||
package com.android.launcher3.popup;
|
package com.android.launcher3.popup;
|
||||||
|
|
||||||
|
import static com.android.launcher3.util.MainThreadInitializedObject.forOverride;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
import com.android.launcher3.ItemInfo;
|
import com.android.launcher3.ItemInfo;
|
||||||
import com.android.launcher3.Launcher;
|
import com.android.launcher3.Launcher;
|
||||||
import com.android.launcher3.R;
|
import com.android.launcher3.R;
|
||||||
|
@ -24,13 +28,10 @@ import com.android.launcher3.util.ResourceBasedOverride;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
|
|
||||||
public class SystemShortcutFactory implements ResourceBasedOverride {
|
public class SystemShortcutFactory implements ResourceBasedOverride {
|
||||||
|
|
||||||
public static final MainThreadInitializedObject<SystemShortcutFactory> INSTANCE =
|
public static final MainThreadInitializedObject<SystemShortcutFactory> INSTANCE =
|
||||||
new MainThreadInitializedObject<>(c -> Overrides.getObject(
|
forOverride(SystemShortcutFactory.class, R.string.system_shortcut_factory_class);
|
||||||
SystemShortcutFactory.class, c, R.string.system_shortcut_factory_class));
|
|
||||||
|
|
||||||
/** Note that these are in order of priority. */
|
/** Note that these are in order of priority. */
|
||||||
private final SystemShortcut[] mAllShortcuts;
|
private final SystemShortcut[] mAllShortcuts;
|
||||||
|
|
|
@ -18,12 +18,13 @@ package com.android.launcher3.util;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
|
|
||||||
|
import androidx.annotation.VisibleForTesting;
|
||||||
|
|
||||||
import com.android.launcher3.MainThreadExecutor;
|
import com.android.launcher3.MainThreadExecutor;
|
||||||
|
import com.android.launcher3.util.ResourceBasedOverride.Overrides;
|
||||||
|
|
||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
|
|
||||||
import androidx.annotation.VisibleForTesting;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Utility class for defining singletons which are initiated on main thread.
|
* Utility class for defining singletons which are initiated on main thread.
|
||||||
*/
|
*/
|
||||||
|
@ -60,6 +61,14 @@ public class MainThreadInitializedObject<T> {
|
||||||
mValue = value;
|
mValue = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes a provider based on resource overrides
|
||||||
|
*/
|
||||||
|
public static <T extends ResourceBasedOverride> MainThreadInitializedObject<T> forOverride(
|
||||||
|
Class<T> clazz, int resourceId) {
|
||||||
|
return new MainThreadInitializedObject<>(c -> Overrides.getObject(clazz, c, resourceId));
|
||||||
|
}
|
||||||
|
|
||||||
public interface ObjectProvider<T> {
|
public interface ObjectProvider<T> {
|
||||||
|
|
||||||
T get(Context context);
|
T get(Context context);
|
||||||
|
|
Loading…
Reference in New Issue