summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/Workspace.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/launcher3/Workspace.java')
-rw-r--r--src/com/android/launcher3/Workspace.java66
1 files changed, 38 insertions, 28 deletions
diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java
index 20682ca93..c8f2f33fb 100644
--- a/src/com/android/launcher3/Workspace.java
+++ b/src/com/android/launcher3/Workspace.java
@@ -30,8 +30,6 @@ import android.app.WallpaperManager;
import android.appwidget.AppWidgetHostView;
import android.appwidget.AppWidgetProviderInfo;
import android.content.ComponentName;
-import android.content.ContentResolver;
-import android.content.ContentValues;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.Resources;
@@ -49,7 +47,6 @@ import android.net.Uri;
import android.os.AsyncTask;
import android.os.IBinder;
import android.os.Parcelable;
-import android.provider.BaseColumns;
import android.support.v4.view.ViewCompat;
import android.util.AttributeSet;
import android.util.Log;
@@ -75,6 +72,7 @@ import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
+import java.util.concurrent.atomic.AtomicBoolean;
/**
* The workspace is a wide area with a wallpaper and a finite number of pages.
@@ -1118,10 +1116,10 @@ public class Workspace extends SmoothPagedView
for (int j = 0; j < itemCount; j++) {
View v = swc.getChildAt(j);
- if (v.getTag() instanceof LauncherAppWidgetInfo) {
+ if (v != null && v.getTag() instanceof LauncherAppWidgetInfo) {
LauncherAppWidgetInfo info = (LauncherAppWidgetInfo) v.getTag();
LauncherAppWidgetHostView lahv = (LauncherAppWidgetHostView) info.hostView;
- if (lahv != null && lahv.orientationChangedSincedInflation()) {
+ if (lahv != null && lahv.isReinflateRequired()) {
mLauncher.removeAppWidget(info);
// Remove the current widget which is inflated with the wrong orientation
cl.removeView(lahv);
@@ -3250,7 +3248,6 @@ public class Workspace extends SmoothPagedView
LauncherAppState app = LauncherAppState.getInstance();
DeviceProfile grid = app.getDynamicGrid().getDeviceProfile();
- Resources res = launcher.getResources();
Display display = launcher.getWindowManager().getDefaultDisplay();
Point smallestSize = new Point();
Point largestSize = new Point();
@@ -4583,29 +4580,43 @@ public class Workspace extends SmoothPagedView
}
public Folder getFolderForTag(final Object tag) {
- final Folder[] value = new Folder[1];
- mapOverItems(MAP_NO_RECURSE, new ItemOperator() {
+ return (Folder) getFirstMatch(new ItemOperator() {
+
@Override
public boolean evaluate(ItemInfo info, View v, View parent) {
- if (v instanceof Folder) {
- Folder f = (Folder) v;
- if (f.getInfo() == tag && f.getInfo().opened) {
- value[0] = f;
- return true;
- }
- }
- return false;
+ return (v instanceof Folder) && (((Folder) v).getInfo() == tag)
+ && ((Folder) v).getInfo().opened;
}
});
- return value[0];
}
public View getViewForTag(final Object tag) {
+ return getFirstMatch(new ItemOperator() {
+
+ @Override
+ public boolean evaluate(ItemInfo info, View v, View parent) {
+ return info == tag;
+ }
+ });
+ }
+
+ public LauncherAppWidgetHostView getWidgetForAppWidgetId(final int appWidgetId) {
+ return (LauncherAppWidgetHostView) getFirstMatch(new ItemOperator() {
+
+ @Override
+ public boolean evaluate(ItemInfo info, View v, View parent) {
+ return (info instanceof LauncherAppWidgetInfo) &&
+ ((LauncherAppWidgetInfo) info).appWidgetId == appWidgetId;
+ }
+ });
+ }
+
+ private View getFirstMatch(final ItemOperator operator) {
final View[] value = new View[1];
mapOverItems(MAP_NO_RECURSE, new ItemOperator() {
@Override
public boolean evaluate(ItemInfo info, View v, View parent) {
- if (v.getTag() == tag) {
+ if (operator.evaluate(info, v, parent)) {
value[0] = v;
return true;
}
@@ -4887,7 +4898,7 @@ public class Workspace extends SmoothPagedView
}
private void restorePendingWidgets(final Set<String> installedPackaged) {
- final ContentResolver contentResolver = getContext().getContentResolver();
+ final AtomicBoolean widgetsChanged = new AtomicBoolean(false);
// Iterate non recursively as widgets can't be inside a folder.
mapOverItems(MAP_NO_RECURSE, new ItemOperator() {
@@ -4895,22 +4906,21 @@ public class Workspace extends SmoothPagedView
public boolean evaluate(ItemInfo info, View v, View parent) {
if (info instanceof LauncherAppWidgetInfo) {
LauncherAppWidgetInfo widgetInfo = (LauncherAppWidgetInfo) info;
- if (widgetInfo.restoreStatus == LauncherAppWidgetInfo.RESTORE_PROVIDER_PENDING
+ if (widgetInfo.hasRestoreFlag(LauncherAppWidgetInfo.FLAG_PROVIDER_NOT_READY)
&& installedPackaged.contains(widgetInfo.providerName.getPackageName())) {
- // Package installed. Update pending widgets.
- ContentValues values = new ContentValues();
- values.put(LauncherSettings.Favorites.RESTORED,
- LauncherAppWidgetInfo.RESTORE_COMPLETED);
- String where = BaseColumns._ID + "= ?";
- String[] args = {Long.toString(widgetInfo.id)};
- contentResolver.update(LauncherSettings.Favorites.CONTENT_URI,
- values, where, args);
+ widgetsChanged.set(true);
}
}
// process all the widget
return false;
}
});
+ if (widgetsChanged.get()) {
+ // Reload layout and update widget status
+ // TODO instead of full reload, just update the specific widgets
+ getContext().getContentResolver()
+ .notifyChange(LauncherSettings.Favorites.CONTENT_URI, null);
+ }
}
private void moveToScreen(int page, boolean animate) {