diff options
Diffstat (limited to 'src/com/android/launcher3/LauncherAppWidgetProviderInfo.java')
-rw-r--r-- | src/com/android/launcher3/LauncherAppWidgetProviderInfo.java | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/src/com/android/launcher3/LauncherAppWidgetProviderInfo.java b/src/com/android/launcher3/LauncherAppWidgetProviderInfo.java new file mode 100644 index 000000000..e7f49b2ce --- /dev/null +++ b/src/com/android/launcher3/LauncherAppWidgetProviderInfo.java @@ -0,0 +1,89 @@ +package com.android.launcher3; + +import android.appwidget.AppWidgetProviderInfo; +import android.content.ComponentName; +import android.content.Context; +import android.content.pm.PackageManager; +import android.graphics.drawable.Drawable; +import android.os.Parcel; + +import java.lang.reflect.Field; + +/** + * This class is a thin wrapper around the framework AppWidgetProviderInfo class. This class affords + * a common object for describing both framework provided AppWidgets as well as custom widgets + * (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 boolean isCustomWidget = false; + int spanX = -1; + int spanY = -1; + int minSpanX = -1; + int minSpanY = -1; + + public static LauncherAppWidgetProviderInfo fromProviderInfo(Context context, + AppWidgetProviderInfo info) { + + // In lieu of a public super copy constructor, we first write the AppWidgetProviderInfo + // into a parcel, and then construct a new LauncherAppWidgetProvider info from the + // associated super parcel constructor. This allows us to copy non-public members without + // using reflection. + Parcel p = Parcel.obtain(); + info.writeToParcel(p, 0); + p.setDataPosition(0); + LauncherAppWidgetProviderInfo lawpi = new LauncherAppWidgetProviderInfo(p); + + int[] minResizeSpan = Launcher.getMinSpanForWidget(context, lawpi); + int[] span = Launcher.getSpanForWidget(context, lawpi); + + lawpi.spanX = span[0]; + lawpi.spanY = span[1]; + lawpi.minSpanX = minResizeSpan[0]; + lawpi.minSpanY = minResizeSpan[1]; + + return lawpi; + } + + public LauncherAppWidgetProviderInfo(Parcel in) { + super(in); + } + + public LauncherAppWidgetProviderInfo(Context context, CustomAppWidget widget) { + isCustomWidget = true; + + provider = new ComponentName(context, widget.getClass().getName()); + icon = widget.getIcon(); + label = widget.getLabel(); + previewImage = widget.getPreviewImage(); + initialLayout = widget.getWidgetLayout(); + resizeMode = widget.getResizeMode(); + + spanX = widget.getSpanX(); + spanY = widget.getSpanY(); + minSpanX = widget.getMinSpanX(); + minSpanY = widget.getMinSpanY(); + } + + public String getLabel(PackageManager packageManager) { + if (isCustomWidget) { + return label.toString().trim(); + } + return super.loadLabel(packageManager); + } + + public Drawable getIcon(Context context, IconCache cache) { + if (isCustomWidget) { + return cache.getFullResIcon(provider.getPackageName(), icon); + } + return super.loadIcon(context, cache.getFullResIconDpi()); + } + + public String toString() { + if (isCustomWidget) { + return "LauncherAppWidgetProviderInfo(" + provider + ")"; + } + return super.toString(); + } + } |