Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 450c9c45 authored by Adam Cohen's avatar Adam Cohen Committed by Android (Google) Code Review
Browse files

Merge "Adding default padding to AppWidgetHostView for widgets >= API level 14"

parents 9f3bd386 5d5f3405
Loading
Loading
Loading
Loading
+52 −0
Original line number Diff line number Diff line
@@ -16,13 +16,17 @@

package android.appwidget;

import android.content.ComponentName;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Build;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.SystemClock;
@@ -107,6 +111,54 @@ public class AppWidgetHostView extends FrameLayout {
    public void setAppWidget(int appWidgetId, AppWidgetProviderInfo info) {
        mAppWidgetId = appWidgetId;
        mInfo = info;

        // Sometimes the AppWidgetManager returns a null AppWidgetProviderInfo object for
        // a widget, eg. for some widgets in safe mode.
        if (info != null) {
            // We add padding to the AppWidgetHostView if necessary
            Padding padding = getPaddingForWidget(info.provider);
            setPadding(padding.left, padding.top, padding.right, padding.bottom);
        }
    }

    private static class Padding {
        int left = 0;
        int right = 0;
        int top = 0;
        int bottom = 0;
    }

    /**
     * As of ICE_CREAM_SANDWICH we are automatically adding padding to widgets targeting
     * ICE_CREAM_SANDWICH and higher. The new widget design guidelines strongly recommend
     * that widget developers do not add extra padding to their widgets. This will help
     * achieve consistency among widgets.
     */
    private Padding getPaddingForWidget(ComponentName component) {
        PackageManager packageManager = mContext.getPackageManager();
        Padding p = new Padding();
        ApplicationInfo appInfo;

        try {
            appInfo = packageManager.getApplicationInfo(component.getPackageName(), 0);
        } catch (Exception e) {
            // if we can't find the package, return 0 padding
            return p;
        }

        if (appInfo.targetSdkVersion >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
            Resources r = getResources();
            p.left = r.getDimensionPixelSize(com.android.internal.
                    R.dimen.default_app_widget_padding_left);
            p.right = r.getDimensionPixelSize(com.android.internal.
                    R.dimen.default_app_widget_padding_right);
            p.top = r.getDimensionPixelSize(com.android.internal.
                    R.dimen.default_app_widget_padding_top);
            p.bottom = r.getDimensionPixelSize(com.android.internal.
                    R.dimen.default_app_widget_padding_bottom);
        }

        return p;
    }

    public int getAppWidgetId() {
+6 −0
Original line number Diff line number Diff line
@@ -183,4 +183,10 @@

    <!-- Volume panel y offset -->
    <dimen name="volume_panel_top">80dp</dimen>

    <!-- Default padding to apply to AppWidgetHostViews containing widgets targeting API level 14 and up. -->
    <dimen name="default_app_widget_padding_left">8dp</dimen>
    <dimen name="default_app_widget_padding_top">8dp</dimen>
    <dimen name="default_app_widget_padding_right">8dp</dimen>
    <dimen name="default_app_widget_padding_bottom">8dp</dimen>
</resources>