mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-02-20 03:08:19 +00:00
Merge "Refreshing widget list when a package containing a widget changes" into ub-launcher3-burnaby
This commit is contained in:
@@ -95,8 +95,6 @@ public class LauncherAppWidgetHost extends AppWidgetHost {
|
||||
}
|
||||
|
||||
protected void onProvidersChanged() {
|
||||
mLauncher.getModel().loadAndBindWidgetsAndShortcuts(mLauncher, mLauncher,
|
||||
true /* refresh */);
|
||||
if (!mProviderChangeListeners.isEmpty()) {
|
||||
for (Runnable callback : new ArrayList<>(mProviderChangeListeners)) {
|
||||
callback.run();
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
package com.android.launcher3;
|
||||
|
||||
import android.app.SearchManager;
|
||||
import android.appwidget.AppWidgetManager;
|
||||
import android.appwidget.AppWidgetProviderInfo;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.ComponentName;
|
||||
@@ -2864,8 +2865,7 @@ public class LauncherModel extends BroadcastReceiver
|
||||
// Cleanup any data stored for a deleted user.
|
||||
ManagedProfileHeuristic.processAllUsers(profiles, mContext);
|
||||
|
||||
loadAndBindWidgetsAndShortcuts(mApp.getContext(), tryGetCallbacks(oldCallbacks),
|
||||
true /* refresh */);
|
||||
loadAndBindWidgetsAndShortcuts(tryGetCallbacks(oldCallbacks), true /* refresh */);
|
||||
if (DEBUG_LOADERS) {
|
||||
Log.d(TAG, "Icons processed in "
|
||||
+ (SystemClock.uptimeMillis() - loadTime) + "ms");
|
||||
@@ -2934,7 +2934,7 @@ public class LauncherModel extends BroadcastReceiver
|
||||
}
|
||||
|
||||
// Reload widget list. No need to refresh, as we only want to update the icons and labels.
|
||||
loadAndBindWidgetsAndShortcuts(mApp.getContext(), callbacks, false);
|
||||
loadAndBindWidgetsAndShortcuts(callbacks, false);
|
||||
}
|
||||
|
||||
void enqueuePackageUpdated(PackageUpdatedTask task) {
|
||||
@@ -3276,8 +3276,36 @@ public class LauncherModel extends BroadcastReceiver
|
||||
});
|
||||
}
|
||||
|
||||
// onProvidersChanged method (API >= 17) already refreshed the widget list
|
||||
loadAndBindWidgetsAndShortcuts(context, callbacks, Build.VERSION.SDK_INT < 17);
|
||||
// Update widgets
|
||||
if (mOp == OP_ADD || mOp == OP_REMOVE || mOp == OP_UPDATE) {
|
||||
// Always refresh for a package event on secondary user
|
||||
boolean needToRefresh = !mUser.equals(UserHandleCompat.myUserHandle());
|
||||
|
||||
// Refresh widget list, if the package already had a widget.
|
||||
synchronized (sBgLock) {
|
||||
if (sBgWidgetProviders != null) {
|
||||
HashSet<String> pkgSet = new HashSet<>();
|
||||
Collections.addAll(pkgSet, mPackages);
|
||||
|
||||
for (ComponentKey key : sBgWidgetProviders.keySet()) {
|
||||
needToRefresh |= key.user.equals(mUser) &&
|
||||
pkgSet.contains(key.componentName.getPackageName());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!needToRefresh && mOp != OP_REMOVE) {
|
||||
// Refresh widget list, if there is any newly added widget
|
||||
PackageManager pm = context.getPackageManager();
|
||||
for (String pkg : mPackages) {
|
||||
needToRefresh |= !pm.queryBroadcastReceivers(
|
||||
new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE)
|
||||
.setPackage(pkg), 0).isEmpty();
|
||||
}
|
||||
}
|
||||
|
||||
loadAndBindWidgetsAndShortcuts(callbacks, needToRefresh);
|
||||
}
|
||||
|
||||
// Write all the logs to disk
|
||||
mHandler.post(new Runnable() {
|
||||
@@ -3351,13 +3379,12 @@ public class LauncherModel extends BroadcastReceiver
|
||||
}
|
||||
}
|
||||
|
||||
public void loadAndBindWidgetsAndShortcuts(final Context context, final Callbacks callbacks,
|
||||
final boolean refresh) {
|
||||
public void loadAndBindWidgetsAndShortcuts(final Callbacks callbacks, final boolean refresh) {
|
||||
|
||||
runOnWorkerThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
updateWidgetsModel(context, refresh);
|
||||
updateWidgetsModel(refresh);
|
||||
final WidgetsModel model = mBgWidgetsModel.clone();
|
||||
|
||||
mHandler.post(new Runnable() {
|
||||
@@ -3381,10 +3408,10 @@ public class LauncherModel extends BroadcastReceiver
|
||||
*
|
||||
* @see #loadAndBindWidgetsAndShortcuts
|
||||
*/
|
||||
@Thunk void updateWidgetsModel(Context context, boolean refresh) {
|
||||
PackageManager packageManager = context.getPackageManager();
|
||||
@Thunk void updateWidgetsModel(boolean refresh) {
|
||||
PackageManager packageManager = mApp.getContext().getPackageManager();
|
||||
final ArrayList<Object> widgetsAndShortcuts = new ArrayList<Object>();
|
||||
widgetsAndShortcuts.addAll(getWidgetProviders(context, refresh));
|
||||
widgetsAndShortcuts.addAll(getWidgetProviders(mApp.getContext(), refresh));
|
||||
Intent shortcutsIntent = new Intent(Intent.ACTION_CREATE_SHORTCUT);
|
||||
widgetsAndShortcuts.addAll(packageManager.queryIntentActivities(shortcutsIntent, 0));
|
||||
mBgWidgetsModel.setWidgetsAndShortcuts(widgetsAndShortcuts);
|
||||
|
||||
@@ -105,7 +105,7 @@ public class WidgetPreviewLoader {
|
||||
* sizes (landscape vs portrait).
|
||||
*/
|
||||
private static class CacheDb extends SQLiteOpenHelper {
|
||||
private static final int DB_VERSION = 3;
|
||||
private static final int DB_VERSION = 4;
|
||||
|
||||
private static final String TABLE_NAME = "shortcut_and_widget_previews";
|
||||
private static final String COLUMN_COMPONENT = "componentName";
|
||||
|
||||
Reference in New Issue
Block a user