Fix widget refresh issue on package install/uninstall
Culprit CL: https://googleplex-android-review.git.corp.google.com/#/c/592303/3/src/com/android/launcher3/LauncherModel.java b/19658229 Change-Id: I02b0b2a0ed9bc3200bbe1edcb251cf0efe939e53
This commit is contained in:
@@ -4608,13 +4608,13 @@ public class Launcher extends Activity
|
|||||||
}
|
}
|
||||||
if (mAppsCustomizeContent != null) {
|
if (mAppsCustomizeContent != null) {
|
||||||
mAppsCustomizeContent.onPackagesUpdated(
|
mAppsCustomizeContent.onPackagesUpdated(
|
||||||
LauncherModel.getSortedWidgetsAndShortcuts(this));
|
LauncherModel.getSortedWidgetsAndShortcuts(this, false /* refresh */));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (mAppsCustomizeContent != null) {
|
if (mAppsCustomizeContent != null) {
|
||||||
mAppsCustomizeContent.setApps(apps);
|
mAppsCustomizeContent.setApps(apps);
|
||||||
mAppsCustomizeContent.onPackagesUpdated(
|
mAppsCustomizeContent.onPackagesUpdated(
|
||||||
LauncherModel.getSortedWidgetsAndShortcuts(this));
|
LauncherModel.getSortedWidgetsAndShortcuts(this, false /* refresh */));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (mLauncherCallbacks != null) {
|
if (mLauncherCallbacks != null) {
|
||||||
|
|||||||
@@ -81,7 +81,8 @@ public class LauncherAppWidgetHost extends AppWidgetHost {
|
|||||||
protected void onProvidersChanged() {
|
protected void onProvidersChanged() {
|
||||||
// Once we get the message that widget packages are updated, we need to rebind items
|
// Once we get the message that widget packages are updated, we need to rebind items
|
||||||
// in AppsCustomize accordingly.
|
// in AppsCustomize accordingly.
|
||||||
mLauncher.bindPackagesUpdated(LauncherModel.getSortedWidgetsAndShortcuts(mLauncher));
|
mLauncher.bindPackagesUpdated(LauncherModel.getSortedWidgetsAndShortcuts(mLauncher,
|
||||||
|
true /* refresh */));
|
||||||
|
|
||||||
for (Runnable callback : mProviderChangeListeners) {
|
for (Runnable callback : mProviderChangeListeners) {
|
||||||
callback.run();
|
callback.run();
|
||||||
|
|||||||
@@ -175,7 +175,6 @@ public class LauncherModel extends BroadcastReceiver
|
|||||||
|
|
||||||
// sBgWidgetProviders is the set of widget providers including custom internal widgets
|
// sBgWidgetProviders is the set of widget providers including custom internal widgets
|
||||||
public static HashMap<ComponentName, LauncherAppWidgetProviderInfo> sBgWidgetProviders;
|
public static HashMap<ComponentName, LauncherAppWidgetProviderInfo> sBgWidgetProviders;
|
||||||
public static boolean sWidgetProvidersDirty;
|
|
||||||
|
|
||||||
// sPendingPackages is a set of packages which could be on sdcard and are not available yet
|
// sPendingPackages is a set of packages which could be on sdcard and are not available yet
|
||||||
static final HashMap<UserHandleCompat, HashSet<String>> sPendingPackages =
|
static final HashMap<UserHandleCompat, HashSet<String>> sPendingPackages =
|
||||||
@@ -3319,7 +3318,7 @@ public class LauncherModel extends BroadcastReceiver
|
|||||||
}
|
}
|
||||||
|
|
||||||
final ArrayList<Object> widgetsAndShortcuts =
|
final ArrayList<Object> widgetsAndShortcuts =
|
||||||
getSortedWidgetsAndShortcuts(context);
|
getSortedWidgetsAndShortcuts(context, true /* refresh */);
|
||||||
mHandler.post(new Runnable() {
|
mHandler.post(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
@@ -3342,9 +3341,10 @@ public class LauncherModel extends BroadcastReceiver
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<LauncherAppWidgetProviderInfo> getWidgetProviders(Context context) {
|
public static List<LauncherAppWidgetProviderInfo> getWidgetProviders(Context context,
|
||||||
|
boolean refresh) {
|
||||||
synchronized (sBgLock) {
|
synchronized (sBgLock) {
|
||||||
if (sBgWidgetProviders != null && !sWidgetProvidersDirty) {
|
if (sBgWidgetProviders != null && !refresh) {
|
||||||
return new ArrayList<LauncherAppWidgetProviderInfo>(sBgWidgetProviders.values());
|
return new ArrayList<LauncherAppWidgetProviderInfo>(sBgWidgetProviders.values());
|
||||||
}
|
}
|
||||||
sBgWidgetProviders = new HashMap<ComponentName, LauncherAppWidgetProviderInfo>();
|
sBgWidgetProviders = new HashMap<ComponentName, LauncherAppWidgetProviderInfo>();
|
||||||
@@ -3361,7 +3361,6 @@ public class LauncherModel extends BroadcastReceiver
|
|||||||
info = new LauncherAppWidgetProviderInfo(context, widget);
|
info = new LauncherAppWidgetProviderInfo(context, widget);
|
||||||
sBgWidgetProviders.put(info.provider, info);
|
sBgWidgetProviders.put(info.provider, info);
|
||||||
}
|
}
|
||||||
sWidgetProvidersDirty = false;
|
|
||||||
return new ArrayList<LauncherAppWidgetProviderInfo>(sBgWidgetProviders.values());
|
return new ArrayList<LauncherAppWidgetProviderInfo>(sBgWidgetProviders.values());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3369,17 +3368,17 @@ public class LauncherModel extends BroadcastReceiver
|
|||||||
public static LauncherAppWidgetProviderInfo getProviderInfo(Context ctx, ComponentName name) {
|
public static LauncherAppWidgetProviderInfo getProviderInfo(Context ctx, ComponentName name) {
|
||||||
synchronized (sBgLock) {
|
synchronized (sBgLock) {
|
||||||
if (sBgWidgetProviders == null) {
|
if (sBgWidgetProviders == null) {
|
||||||
getWidgetProviders(ctx);
|
getWidgetProviders(ctx, false /* refresh */);
|
||||||
}
|
}
|
||||||
return sBgWidgetProviders.get(name);
|
return sBgWidgetProviders.get(name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns a list of ResolveInfos/AppWindowInfos in sorted order
|
// Returns a list of ResolveInfos/AppWidgetInfos in sorted order
|
||||||
public static ArrayList<Object> getSortedWidgetsAndShortcuts(Context context) {
|
public static ArrayList<Object> getSortedWidgetsAndShortcuts(Context context, boolean refresh) {
|
||||||
PackageManager packageManager = context.getPackageManager();
|
PackageManager packageManager = context.getPackageManager();
|
||||||
final ArrayList<Object> widgetsAndShortcuts = new ArrayList<Object>();
|
final ArrayList<Object> widgetsAndShortcuts = new ArrayList<Object>();
|
||||||
widgetsAndShortcuts.addAll(getWidgetProviders(context));
|
widgetsAndShortcuts.addAll(getWidgetProviders(context, refresh));
|
||||||
Intent shortcutsIntent = new Intent(Intent.ACTION_CREATE_SHORTCUT);
|
Intent shortcutsIntent = new Intent(Intent.ACTION_CREATE_SHORTCUT);
|
||||||
widgetsAndShortcuts.addAll(packageManager.queryIntentActivities(shortcutsIntent, 0));
|
widgetsAndShortcuts.addAll(packageManager.queryIntentActivities(shortcutsIntent, 0));
|
||||||
Collections.sort(widgetsAndShortcuts, new WidgetAndShortcutNameComparator(context));
|
Collections.sort(widgetsAndShortcuts, new WidgetAndShortcutNameComparator(context));
|
||||||
|
|||||||
Reference in New Issue
Block a user