diff options
author | Mitsuru Oshima <oshima@google.com> | 2009-07-01 00:10:43 -0700 |
---|---|---|
committer | Mitsuru Oshima <oshima@google.com> | 2009-07-01 00:10:43 -0700 |
commit | 8f25c426b118c35f558cbf27bd413e1eb6d59823 (patch) | |
tree | 1dc53d22e856c9f15afabfdef4c3a957652a129b | |
parent | 083928fefde7060eb69f7f45cd8e2180efa9bfe1 (diff) | |
download | frameworks_base-8f25c426b118c35f558cbf27bd413e1eb6d59823.zip frameworks_base-8f25c426b118c35f558cbf27bd413e1eb6d59823.tar.gz frameworks_base-8f25c426b118c35f558cbf27bd413e1eb6d59823.tar.bz2 |
resolve complex value in application context instead of system context.
-rw-r--r-- | core/java/android/appwidget/AppWidgetManager.java | 15 | ||||
-rw-r--r-- | services/java/com/android/server/AppWidgetService.java | 15 |
2 files changed, 25 insertions, 5 deletions
diff --git a/core/java/android/appwidget/AppWidgetManager.java b/core/java/android/appwidget/AppWidgetManager.java index eca04b3..3660001 100644 --- a/core/java/android/appwidget/AppWidgetManager.java +++ b/core/java/android/appwidget/AppWidgetManager.java @@ -21,7 +21,9 @@ import android.content.Context; import android.os.IBinder; import android.os.RemoteException; import android.os.ServiceManager; +import android.util.DisplayMetrics; import android.util.Log; +import android.util.TypedValue; import android.widget.RemoteViews; import com.android.internal.appwidget.IAppWidgetService; @@ -187,6 +189,8 @@ public class AppWidgetManager { Context mContext; + private DisplayMetrics mDisplayMetrics; + /** * Get the AppWidgetManager instance to use for the supplied {@link android.content.Context * Context} object. @@ -213,6 +217,7 @@ public class AppWidgetManager { private AppWidgetManager(Context context) { mContext = context; + mDisplayMetrics = context.getResources().getDisplayMetrics(); } /** @@ -292,7 +297,15 @@ public class AppWidgetManager { */ public AppWidgetProviderInfo getAppWidgetInfo(int appWidgetId) { try { - return sService.getAppWidgetInfo(appWidgetId); + AppWidgetProviderInfo info = sService.getAppWidgetInfo(appWidgetId); + if (info != null) { + // Converting complex to dp. + info.minWidth = + TypedValue.complexToDimensionPixelSize(info.minWidth, mDisplayMetrics); + info.minHeight = + TypedValue.complexToDimensionPixelSize(info.minHeight, mDisplayMetrics); + } + return info; } catch (RemoteException e) { throw new RuntimeException("system server dead?", e); diff --git a/services/java/com/android/server/AppWidgetService.java b/services/java/com/android/server/AppWidgetService.java index c50ae94..bd8b8ef 100644 --- a/services/java/com/android/server/AppWidgetService.java +++ b/services/java/com/android/server/AppWidgetService.java @@ -40,6 +40,7 @@ import android.os.RemoteException; import android.os.SystemClock; import android.util.AttributeSet; import android.util.Log; +import android.util.TypedValue; import android.util.Xml; import android.widget.RemoteViews; @@ -695,10 +696,16 @@ class AppWidgetService extends IAppWidgetService.Stub TypedArray sa = mContext.getResources().obtainAttributes(attrs, com.android.internal.R.styleable.AppWidgetProviderInfo); - info.minWidth = sa.getDimensionPixelSize( - com.android.internal.R.styleable.AppWidgetProviderInfo_minWidth, 0); - info.minHeight = sa.getDimensionPixelSize( - com.android.internal.R.styleable.AppWidgetProviderInfo_minHeight, 0); + + // These dimensions has to be resolved in the application's context. + // We simply send back the raw complex data, which will be + // converted to dp in {@link AppWidgetManager#getAppWidgetInfo}. + TypedValue value = sa.peekValue( + com.android.internal.R.styleable.AppWidgetProviderInfo_minWidth); + info.minWidth = value != null ? value.data : 0; + value = sa.peekValue(com.android.internal.R.styleable.AppWidgetProviderInfo_minHeight); + info.minHeight = value != null ? value.data : 0; + info.updatePeriodMillis = sa.getInt( com.android.internal.R.styleable.AppWidgetProviderInfo_updatePeriodMillis, 0); info.initialLayout = sa.getResourceId( |