Loading src/com/android/launcher3/LauncherAppWidgetProviderInfo.java +17 −2 Original line number Diff line number Diff line Loading @@ -2,11 +2,15 @@ package com.android.launcher3; import android.appwidget.AppWidgetHostView; import android.appwidget.AppWidgetProviderInfo; import android.content.ComponentName; import android.content.Context; import android.content.pm.PackageManager; import android.graphics.Point; import android.graphics.Rect; import android.os.Parcel; import android.os.UserHandle; import com.android.launcher3.icons.ComponentWithLabel; /** * This class is a thin wrapper around the framework AppWidgetProviderInfo class. This class affords Loading @@ -14,7 +18,8 @@ import android.os.Parcel; * (who's implementation is owned by the launcher). This object represents a widget type / class, * as opposed to a widget instance, and so should not be confused with {@link LauncherAppWidgetInfo} */ public class LauncherAppWidgetProviderInfo extends AppWidgetProviderInfo { public class LauncherAppWidgetProviderInfo extends AppWidgetProviderInfo implements ComponentWithLabel { public static final String CLS_CUSTOM_WIDGET_PREFIX = "#custom-widget-"; Loading Loading @@ -102,4 +107,14 @@ public class LauncherAppWidgetProviderInfo extends AppWidgetProviderInfo { return 0; } } @Override public final ComponentName getComponent() { return provider; } @Override public final UserHandle getUser() { return getProfile(); } } src/com/android/launcher3/LauncherModel.java +13 −0 Original line number Diff line number Diff line Loading @@ -599,6 +599,19 @@ public class LauncherModel extends BroadcastReceiver CacheDataUpdatedTask.OP_CACHE_UPDATE, user, updatedPackages)); } /** * Called when the labels for the widgets has updated in the icon cache. */ public void onWidgetLabelsUpdated(HashSet<String> updatedPackages, UserHandle user) { enqueueModelUpdateTask(new BaseModelUpdateTask() { @Override public void execute(LauncherAppState app, BgDataModel dataModel, AllAppsList apps) { dataModel.widgetsModel.onPackageIconsUpdated(updatedPackages, user, app); bindUpdatedWidgets(dataModel); } }); } public void enqueueModelUpdateTask(ModelUpdateTask task) { task.init(mApp, this, sBgDataModel, mBgAllAppsList, mUiExecutor); runOnWorkerThread(task); Loading src/com/android/launcher3/compat/LauncherAppsCompatVL.java +1 −1 Original line number Diff line number Diff line Loading @@ -200,7 +200,7 @@ public class LauncherAppsCompatVL extends LauncherAppsCompat { pm.queryIntentActivities(new Intent(Intent.ACTION_CREATE_SHORTCUT), 0)) { if (packageUser == null || packageUser.mPackageName .equals(info.activityInfo.packageName)) { result.add(new ShortcutConfigActivityInfoVL(info.activityInfo, pm)); result.add(new ShortcutConfigActivityInfoVL(info.activityInfo)); } } return result; Loading src/com/android/launcher3/compat/ShortcutConfigActivityInfo.java +10 −12 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ import android.os.UserHandle; import android.util.Log; import android.widget.Toast; import com.android.launcher3.icons.ComponentWithLabel; import com.android.launcher3.icons.IconCache; import com.android.launcher3.LauncherSettings; import com.android.launcher3.R; Loading @@ -40,7 +41,7 @@ import com.android.launcher3.ShortcutInfo; /** * Wrapper class for representing a shortcut configure activity. */ public abstract class ShortcutConfigActivityInfo { public abstract class ShortcutConfigActivityInfo implements ComponentWithLabel { private static final String TAG = "SCActivityInfo"; Loading @@ -52,10 +53,12 @@ public abstract class ShortcutConfigActivityInfo { mUser = user; } @Override public ComponentName getComponent() { return mCn; } @Override public UserHandle getUser() { return mUser; } Loading @@ -64,8 +67,6 @@ public abstract class ShortcutConfigActivityInfo { return LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT; } public abstract CharSequence getLabel(); public abstract Drawable getFullResIcon(IconCache cache); /** Loading Loading @@ -94,8 +95,8 @@ public abstract class ShortcutConfigActivityInfo { } /** * Returns true if various properties ({@link #getLabel()}, {@link #getFullResIcon}) can * be safely persisted. * Returns true if various properties ({@link #getLabel(PackageManager)}, * {@link #getFullResIcon}) can be safely persisted. */ public boolean isPersistable() { return true; Loading @@ -104,18 +105,15 @@ public abstract class ShortcutConfigActivityInfo { static class ShortcutConfigActivityInfoVL extends ShortcutConfigActivityInfo { private final ActivityInfo mInfo; private final PackageManager mPm; public ShortcutConfigActivityInfoVL(ActivityInfo info, PackageManager pm) { public ShortcutConfigActivityInfoVL(ActivityInfo info) { super(new ComponentName(info.packageName, info.name), Process.myUserHandle()); mInfo = info; mPm = pm; } @Override public CharSequence getLabel() { return mInfo.loadLabel(mPm); public CharSequence getLabel(PackageManager pm) { return mInfo.loadLabel(pm); } @Override Loading @@ -135,7 +133,7 @@ public abstract class ShortcutConfigActivityInfo { } @Override public CharSequence getLabel() { public CharSequence getLabel(PackageManager pm) { return mInfo.getLabel(); } Loading src/com/android/launcher3/dragndrop/AddItemActivity.java +28 −12 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ import android.graphics.Canvas; import android.graphics.Point; import android.graphics.PointF; import android.graphics.Rect; import android.os.AsyncTask; import android.os.Build; import android.os.Bundle; import android.view.MotionEvent; Loading @@ -46,6 +47,7 @@ import com.android.launcher3.InvariantDeviceProfile; import com.android.launcher3.LauncherAppState; import com.android.launcher3.LauncherAppWidgetHost; import com.android.launcher3.LauncherAppWidgetProviderInfo; import com.android.launcher3.LauncherModel; import com.android.launcher3.R; import com.android.launcher3.compat.AppWidgetManagerCompat; import com.android.launcher3.compat.LauncherAppsCompatVO; Loading @@ -54,6 +56,8 @@ import com.android.launcher3.shortcuts.ShortcutInfoCompat; import com.android.launcher3.userevent.nano.LauncherLogProto.Action; import com.android.launcher3.userevent.nano.LauncherLogProto.ContainerType; import com.android.launcher3.util.InstantAppResolver; import com.android.launcher3.util.LooperExecutor; import com.android.launcher3.util.Provider; import com.android.launcher3.widget.PendingAddShortcutInfo; import com.android.launcher3.widget.PendingAddWidgetInfo; import com.android.launcher3.widget.WidgetHostViewLoader; Loading @@ -78,7 +82,6 @@ public class AddItemActivity extends BaseActivity implements OnLongClickListener // Widget request specific options. private LauncherAppWidgetHost mAppWidgetHost; private AppWidgetManagerCompat mAppWidgetManager; private PendingAddWidgetInfo mPendingWidgetInfo; private int mPendingBindWidgetId; private Bundle mWidgetOptions; Loading Loading @@ -189,10 +192,9 @@ public class AddItemActivity extends BaseActivity implements OnLongClickListener private void setupShortcut() { PinShortcutRequestActivityInfo shortcutInfo = new PinShortcutRequestActivityInfo(mRequest, this); WidgetItem item = new WidgetItem(shortcutInfo); mWidgetCell.getWidgetView().setTag(new PendingAddShortcutInfo(shortcutInfo)); mWidgetCell.applyFromCellItem(item, mApp.getWidgetCache()); mWidgetCell.ensurePreview(); applyWidgetItemAsync( () -> new WidgetItem(shortcutInfo, mApp.getIconCache(), getPackageManager())); } private boolean setupWidget() { Loading @@ -207,16 +209,30 @@ public class AddItemActivity extends BaseActivity implements OnLongClickListener mAppWidgetManager = AppWidgetManagerCompat.getInstance(this); mAppWidgetHost = new LauncherAppWidgetHost(this); mPendingWidgetInfo = new PendingAddWidgetInfo(widgetInfo); mPendingWidgetInfo.spanX = Math.min(mIdp.numColumns, widgetInfo.spanX); mPendingWidgetInfo.spanY = Math.min(mIdp.numRows, widgetInfo.spanY); mWidgetOptions = WidgetHostViewLoader.getDefaultOptionsForWidget(this, mPendingWidgetInfo); PendingAddWidgetInfo pendingInfo = new PendingAddWidgetInfo(widgetInfo); pendingInfo.spanX = Math.min(mIdp.numColumns, widgetInfo.spanX); pendingInfo.spanY = Math.min(mIdp.numRows, widgetInfo.spanY); mWidgetOptions = WidgetHostViewLoader.getDefaultOptionsForWidget(this, pendingInfo); mWidgetCell.getWidgetView().setTag(pendingInfo); applyWidgetItemAsync(() -> new WidgetItem(widgetInfo, mIdp, mApp.getIconCache())); return true; } WidgetItem item = new WidgetItem(widgetInfo, getPackageManager(), mIdp); mWidgetCell.getWidgetView().setTag(mPendingWidgetInfo); private void applyWidgetItemAsync(final Provider<WidgetItem> itemProvider) { new AsyncTask<Void, Void, WidgetItem>() { @Override protected WidgetItem doInBackground(Void... voids) { return itemProvider.get(); } @Override protected void onPostExecute(WidgetItem item) { mWidgetCell.applyFromCellItem(item, mApp.getWidgetCache()); mWidgetCell.ensurePreview(); return true; } }.executeOnExecutor(new LooperExecutor(LauncherModel.getWorkerLooper())); // TODO: Create a worker looper executor and reuse that everywhere. } /** Loading Loading
src/com/android/launcher3/LauncherAppWidgetProviderInfo.java +17 −2 Original line number Diff line number Diff line Loading @@ -2,11 +2,15 @@ package com.android.launcher3; import android.appwidget.AppWidgetHostView; import android.appwidget.AppWidgetProviderInfo; import android.content.ComponentName; import android.content.Context; import android.content.pm.PackageManager; import android.graphics.Point; import android.graphics.Rect; import android.os.Parcel; import android.os.UserHandle; import com.android.launcher3.icons.ComponentWithLabel; /** * This class is a thin wrapper around the framework AppWidgetProviderInfo class. This class affords Loading @@ -14,7 +18,8 @@ import android.os.Parcel; * (who's implementation is owned by the launcher). This object represents a widget type / class, * as opposed to a widget instance, and so should not be confused with {@link LauncherAppWidgetInfo} */ public class LauncherAppWidgetProviderInfo extends AppWidgetProviderInfo { public class LauncherAppWidgetProviderInfo extends AppWidgetProviderInfo implements ComponentWithLabel { public static final String CLS_CUSTOM_WIDGET_PREFIX = "#custom-widget-"; Loading Loading @@ -102,4 +107,14 @@ public class LauncherAppWidgetProviderInfo extends AppWidgetProviderInfo { return 0; } } @Override public final ComponentName getComponent() { return provider; } @Override public final UserHandle getUser() { return getProfile(); } }
src/com/android/launcher3/LauncherModel.java +13 −0 Original line number Diff line number Diff line Loading @@ -599,6 +599,19 @@ public class LauncherModel extends BroadcastReceiver CacheDataUpdatedTask.OP_CACHE_UPDATE, user, updatedPackages)); } /** * Called when the labels for the widgets has updated in the icon cache. */ public void onWidgetLabelsUpdated(HashSet<String> updatedPackages, UserHandle user) { enqueueModelUpdateTask(new BaseModelUpdateTask() { @Override public void execute(LauncherAppState app, BgDataModel dataModel, AllAppsList apps) { dataModel.widgetsModel.onPackageIconsUpdated(updatedPackages, user, app); bindUpdatedWidgets(dataModel); } }); } public void enqueueModelUpdateTask(ModelUpdateTask task) { task.init(mApp, this, sBgDataModel, mBgAllAppsList, mUiExecutor); runOnWorkerThread(task); Loading
src/com/android/launcher3/compat/LauncherAppsCompatVL.java +1 −1 Original line number Diff line number Diff line Loading @@ -200,7 +200,7 @@ public class LauncherAppsCompatVL extends LauncherAppsCompat { pm.queryIntentActivities(new Intent(Intent.ACTION_CREATE_SHORTCUT), 0)) { if (packageUser == null || packageUser.mPackageName .equals(info.activityInfo.packageName)) { result.add(new ShortcutConfigActivityInfoVL(info.activityInfo, pm)); result.add(new ShortcutConfigActivityInfoVL(info.activityInfo)); } } return result; Loading
src/com/android/launcher3/compat/ShortcutConfigActivityInfo.java +10 −12 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ import android.os.UserHandle; import android.util.Log; import android.widget.Toast; import com.android.launcher3.icons.ComponentWithLabel; import com.android.launcher3.icons.IconCache; import com.android.launcher3.LauncherSettings; import com.android.launcher3.R; Loading @@ -40,7 +41,7 @@ import com.android.launcher3.ShortcutInfo; /** * Wrapper class for representing a shortcut configure activity. */ public abstract class ShortcutConfigActivityInfo { public abstract class ShortcutConfigActivityInfo implements ComponentWithLabel { private static final String TAG = "SCActivityInfo"; Loading @@ -52,10 +53,12 @@ public abstract class ShortcutConfigActivityInfo { mUser = user; } @Override public ComponentName getComponent() { return mCn; } @Override public UserHandle getUser() { return mUser; } Loading @@ -64,8 +67,6 @@ public abstract class ShortcutConfigActivityInfo { return LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT; } public abstract CharSequence getLabel(); public abstract Drawable getFullResIcon(IconCache cache); /** Loading Loading @@ -94,8 +95,8 @@ public abstract class ShortcutConfigActivityInfo { } /** * Returns true if various properties ({@link #getLabel()}, {@link #getFullResIcon}) can * be safely persisted. * Returns true if various properties ({@link #getLabel(PackageManager)}, * {@link #getFullResIcon}) can be safely persisted. */ public boolean isPersistable() { return true; Loading @@ -104,18 +105,15 @@ public abstract class ShortcutConfigActivityInfo { static class ShortcutConfigActivityInfoVL extends ShortcutConfigActivityInfo { private final ActivityInfo mInfo; private final PackageManager mPm; public ShortcutConfigActivityInfoVL(ActivityInfo info, PackageManager pm) { public ShortcutConfigActivityInfoVL(ActivityInfo info) { super(new ComponentName(info.packageName, info.name), Process.myUserHandle()); mInfo = info; mPm = pm; } @Override public CharSequence getLabel() { return mInfo.loadLabel(mPm); public CharSequence getLabel(PackageManager pm) { return mInfo.loadLabel(pm); } @Override Loading @@ -135,7 +133,7 @@ public abstract class ShortcutConfigActivityInfo { } @Override public CharSequence getLabel() { public CharSequence getLabel(PackageManager pm) { return mInfo.getLabel(); } Loading
src/com/android/launcher3/dragndrop/AddItemActivity.java +28 −12 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ import android.graphics.Canvas; import android.graphics.Point; import android.graphics.PointF; import android.graphics.Rect; import android.os.AsyncTask; import android.os.Build; import android.os.Bundle; import android.view.MotionEvent; Loading @@ -46,6 +47,7 @@ import com.android.launcher3.InvariantDeviceProfile; import com.android.launcher3.LauncherAppState; import com.android.launcher3.LauncherAppWidgetHost; import com.android.launcher3.LauncherAppWidgetProviderInfo; import com.android.launcher3.LauncherModel; import com.android.launcher3.R; import com.android.launcher3.compat.AppWidgetManagerCompat; import com.android.launcher3.compat.LauncherAppsCompatVO; Loading @@ -54,6 +56,8 @@ import com.android.launcher3.shortcuts.ShortcutInfoCompat; import com.android.launcher3.userevent.nano.LauncherLogProto.Action; import com.android.launcher3.userevent.nano.LauncherLogProto.ContainerType; import com.android.launcher3.util.InstantAppResolver; import com.android.launcher3.util.LooperExecutor; import com.android.launcher3.util.Provider; import com.android.launcher3.widget.PendingAddShortcutInfo; import com.android.launcher3.widget.PendingAddWidgetInfo; import com.android.launcher3.widget.WidgetHostViewLoader; Loading @@ -78,7 +82,6 @@ public class AddItemActivity extends BaseActivity implements OnLongClickListener // Widget request specific options. private LauncherAppWidgetHost mAppWidgetHost; private AppWidgetManagerCompat mAppWidgetManager; private PendingAddWidgetInfo mPendingWidgetInfo; private int mPendingBindWidgetId; private Bundle mWidgetOptions; Loading Loading @@ -189,10 +192,9 @@ public class AddItemActivity extends BaseActivity implements OnLongClickListener private void setupShortcut() { PinShortcutRequestActivityInfo shortcutInfo = new PinShortcutRequestActivityInfo(mRequest, this); WidgetItem item = new WidgetItem(shortcutInfo); mWidgetCell.getWidgetView().setTag(new PendingAddShortcutInfo(shortcutInfo)); mWidgetCell.applyFromCellItem(item, mApp.getWidgetCache()); mWidgetCell.ensurePreview(); applyWidgetItemAsync( () -> new WidgetItem(shortcutInfo, mApp.getIconCache(), getPackageManager())); } private boolean setupWidget() { Loading @@ -207,16 +209,30 @@ public class AddItemActivity extends BaseActivity implements OnLongClickListener mAppWidgetManager = AppWidgetManagerCompat.getInstance(this); mAppWidgetHost = new LauncherAppWidgetHost(this); mPendingWidgetInfo = new PendingAddWidgetInfo(widgetInfo); mPendingWidgetInfo.spanX = Math.min(mIdp.numColumns, widgetInfo.spanX); mPendingWidgetInfo.spanY = Math.min(mIdp.numRows, widgetInfo.spanY); mWidgetOptions = WidgetHostViewLoader.getDefaultOptionsForWidget(this, mPendingWidgetInfo); PendingAddWidgetInfo pendingInfo = new PendingAddWidgetInfo(widgetInfo); pendingInfo.spanX = Math.min(mIdp.numColumns, widgetInfo.spanX); pendingInfo.spanY = Math.min(mIdp.numRows, widgetInfo.spanY); mWidgetOptions = WidgetHostViewLoader.getDefaultOptionsForWidget(this, pendingInfo); mWidgetCell.getWidgetView().setTag(pendingInfo); applyWidgetItemAsync(() -> new WidgetItem(widgetInfo, mIdp, mApp.getIconCache())); return true; } WidgetItem item = new WidgetItem(widgetInfo, getPackageManager(), mIdp); mWidgetCell.getWidgetView().setTag(mPendingWidgetInfo); private void applyWidgetItemAsync(final Provider<WidgetItem> itemProvider) { new AsyncTask<Void, Void, WidgetItem>() { @Override protected WidgetItem doInBackground(Void... voids) { return itemProvider.get(); } @Override protected void onPostExecute(WidgetItem item) { mWidgetCell.applyFromCellItem(item, mApp.getWidgetCache()); mWidgetCell.ensurePreview(); return true; } }.executeOnExecutor(new LooperExecutor(LauncherModel.getWorkerLooper())); // TODO: Create a worker looper executor and reuse that everywhere. } /** Loading