OSDN Git Service

Automatically padding widgets based on target API level
authorAdam Cohen <adamcohen@google.com>
Fri, 26 Aug 2011 01:57:14 +0000 (18:57 -0700)
committerAdam Cohen <adamcohen@google.com>
Fri, 26 Aug 2011 01:57:14 +0000 (18:57 -0700)
Change-Id: I062c487df1067a787e9921e85558b38294a10112

res/values/dimens.xml
src/com/android/launcher2/Launcher.java
src/com/android/launcher2/LauncherAppWidgetHostView.java

index 0d44db8..3eec49f 100644 (file)
     <dimen name="dragViewOffsetY">-8dp</dimen>
 
     <!-- Padding applied to AppWidgets -->
-    <dimen name="app_widget_padding_left">3dp</dimen>
-    <dimen name="app_widget_padding_right">3dp</dimen>
-    <dimen name="app_widget_padding_top">1dp</dimen>
-    <dimen name="app_widget_padding_bottom">1dp</dimen>
+    <dimen name="app_widget_padding_left">4dp</dimen>
+    <dimen name="app_widget_padding_right">4dp</dimen>
+    <dimen name="app_widget_padding_top">4dp</dimen>
+    <dimen name="app_widget_padding_bottom">4dp</dimen>
 
 <!-- Folders -->
     <!-- The size of the image which sits behind the preview of the folder contents -->
index 22a34e6..6c446a2 100644 (file)
@@ -52,6 +52,7 @@ import android.graphics.Rect;
 import android.graphics.drawable.Drawable;
 import android.net.Uri;
 import android.os.AsyncTask;
+import android.os.Build;
 import android.os.Bundle;
 import android.os.Environment;
 import android.os.Handler;
@@ -74,8 +75,8 @@ import android.view.MenuItem;
 import android.view.MotionEvent;
 import android.view.Surface;
 import android.view.View;
-import android.view.View.OnLongClickListener;
 import android.view.ViewGroup;
+import android.view.View.OnLongClickListener;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.animation.DecelerateInterpolator;
 import android.view.inputmethod.InputMethodManager;
@@ -729,8 +730,6 @@ public final class Launcher extends Activity
         }
     }
 
-
-
     /**
      * Creates a view representing a shortcut.
      *
@@ -845,6 +844,39 @@ public final class Launcher extends Activity
         }
     }
 
+    class Padding {
+        int left = 0;
+        int right = 0;
+        int top = 0;
+        int bottom = 0;
+    }
+
+    Padding getPaddingForWidget(AppWidgetProviderInfo widgetInfo) {
+        PackageManager packageManager = getPackageManager();
+        Padding p = new Padding();
+        android.content.pm.ApplicationInfo appInfo;
+
+        try {
+            appInfo = packageManager.getApplicationInfo(
+                    widgetInfo.provider.getPackageName(), 0);
+        } catch (Exception e) {
+            // if we can't find the package, return 0 padding
+            return p;
+        }
+
+        // TODO: This should be ICE_CREAM_SANDWICH, but since the unbundled apps
+        // may not have updated their targetSdkVersion yet, we've bumped it down for now.
+        if (appInfo.targetSdkVersion >= Build.VERSION_CODES.HONEYCOMB_MR2) {
+            Resources r = getResources();
+            p.left = r.getDimensionPixelSize(R.dimen.app_widget_padding_left);
+            p.right = r.getDimensionPixelSize(R.dimen.app_widget_padding_right);
+            p.top = r.getDimensionPixelSize(R.dimen.app_widget_padding_top);
+            p.bottom = r.getDimensionPixelSize(R.dimen.app_widget_padding_bottom);
+        }
+
+        return p;
+    }
+
     /**
      * Add a widget to the workspace.
      *
@@ -857,15 +889,11 @@ public final class Launcher extends Activity
         // Calculate the grid spans needed to fit this widget
         CellLayout layout = getCellLayout(container, screen);
 
+        Padding padding = getPaddingForWidget(appWidgetInfo);
         // We want to account for the extra amount of padding that we are adding to the widget
         // to ensure that it gets the full amount of space that it has requested
-        Resources r = getResources();
-        int requiredWidth = appWidgetInfo.minWidth +
-                r.getDimensionPixelSize(R.dimen.app_widget_padding_left) +
-                r.getDimensionPixelSize(R.dimen.app_widget_padding_right);
-        int requiredHeight = appWidgetInfo.minHeight + 
-                r.getDimensionPixelSize(R.dimen.app_widget_padding_top) +
-                r.getDimensionPixelSize(R.dimen.app_widget_padding_bottom);
+        int requiredWidth = appWidgetInfo.minWidth + padding.left + padding.right;
+        int requiredHeight = appWidgetInfo.minHeight + padding.top + padding.bottom;
         int[] spanXY = layout.rectToCell(requiredWidth, requiredHeight, null);
 
         // Try finding open space on Launcher screen
index 7c3b993..a84ced6 100644 (file)
@@ -17,6 +17,7 @@
 package com.android.launcher2;
 
 import android.appwidget.AppWidgetHostView;
+import android.appwidget.AppWidgetProviderInfo;
 import android.content.Context;
 import android.content.res.Resources;
 import android.view.LayoutInflater;
@@ -26,6 +27,7 @@ import android.view.ViewConfiguration;
 import android.view.ViewGroup;
 
 import com.android.launcher.R;
+import com.android.launcher2.Launcher.Padding;
 
 /**
  * {@inheritDoc}
@@ -34,17 +36,12 @@ public class LauncherAppWidgetHostView extends AppWidgetHostView {
     private boolean mHasPerformedLongPress;
     private CheckForLongPress mPendingCheckForLongPress;
     private LayoutInflater mInflater;
+    private Launcher mLauncher;
 
     public LauncherAppWidgetHostView(Context context) {
         super(context);
         mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-
-        Resources r = context.getResources();
-        // We add necessary padding to the AppWidgetHostView
-        setPadding(r.getDimensionPixelSize(R.dimen.app_widget_padding_left),
-                r.getDimensionPixelSize(R.dimen.app_widget_padding_top),
-                r.getDimensionPixelSize(R.dimen.app_widget_padding_right),
-                r.getDimensionPixelSize(R.dimen.app_widget_padding_bottom));
+        mLauncher = (Launcher) context;
     }
 
     @Override
@@ -119,6 +116,14 @@ public class LauncherAppWidgetHostView extends AppWidgetHostView {
     }
 
     @Override
+    public void setAppWidget(int appWidgetId, AppWidgetProviderInfo info) {
+        super.setAppWidget(appWidgetId, info);
+        // We add necessary padding to the AppWidgetHostView
+        Launcher.Padding padding = mLauncher.getPaddingForWidget(info);
+        setPadding(padding.left, padding.top, padding.right, padding.bottom);
+    }
+
+    @Override
     public int getDescendantFocusability() {
         return ViewGroup.FOCUS_BLOCK_DESCENDANTS;
     }