From 5628b0b2a42b934f01c617e7409217a42f9d1275 Mon Sep 17 00:00:00 2001 From: Dan Galpin Date: Mon, 25 May 2015 04:55:41 -0700 Subject: [PATCH] Allow the Today widget to resize horizontally, change the default size to 2x1 --- .../app/widget/TodayWidgetIntentService.java | 47 +++++++++- .../app/widget/TodayWidgetProvider.java | 2 +- .../drawable-nodpi/widget_preview_today.png | Bin 0 -> 19003 bytes app/src/main/res/layout/widget_today.xml | 66 ++++++++++++++ .../main/res/layout/widget_today_large.xml | 82 ++++++++++++++++++ app/src/main/res/values/dimens.xml | 5 +- app/src/main/res/xml/widget_info_today.xml | 10 ++- 7 files changed, 206 insertions(+), 6 deletions(-) create mode 100644 app/src/main/res/drawable-nodpi/widget_preview_today.png create mode 100644 app/src/main/res/layout/widget_today.xml create mode 100644 app/src/main/res/layout/widget_today_large.xml diff --git a/app/src/main/java/com/example/android/sunshine/app/widget/TodayWidgetIntentService.java b/app/src/main/java/com/example/android/sunshine/app/widget/TodayWidgetIntentService.java index c07739a..0ab8854 100644 --- a/app/src/main/java/com/example/android/sunshine/app/widget/TodayWidgetIntentService.java +++ b/app/src/main/java/com/example/android/sunshine/app/widget/TodayWidgetIntentService.java @@ -24,6 +24,9 @@ import android.content.Intent; import android.database.Cursor; import android.net.Uri; import android.os.Build; +import android.os.Bundle; +import android.util.DisplayMetrics; +import android.util.TypedValue; import android.widget.RemoteViews; import com.example.android.sunshine.app.MainActivity; @@ -38,12 +41,14 @@ public class TodayWidgetIntentService extends IntentService { private static final String[] FORECAST_COLUMNS = { WeatherContract.WeatherEntry.COLUMN_WEATHER_ID, WeatherContract.WeatherEntry.COLUMN_SHORT_DESC, - WeatherContract.WeatherEntry.COLUMN_MAX_TEMP + WeatherContract.WeatherEntry.COLUMN_MAX_TEMP, + WeatherContract.WeatherEntry.COLUMN_MIN_TEMP }; // these indices must match the projection private static final int INDEX_WEATHER_ID = 0; private static final int INDEX_SHORT_DESC = 1; private static final int INDEX_MAX_TEMP = 2; + private static final int INDEX_MIN_TEMP = 3; public TodayWidgetIntentService() { super("TodayWidgetIntentService"); @@ -75,12 +80,25 @@ public class TodayWidgetIntentService extends IntentService { int weatherArtResourceId = Utility.getArtResourceForWeatherCondition(weatherId); String description = data.getString(INDEX_SHORT_DESC); double maxTemp = data.getDouble(INDEX_MAX_TEMP); + double minTemp = data.getDouble(INDEX_MIN_TEMP); String formattedMaxTemperature = Utility.formatTemperature(this, maxTemp); + String formattedMinTemperature = Utility.formatTemperature(this, minTemp); data.close(); // Perform this loop procedure for each Today widget for (int appWidgetId : appWidgetIds) { - int layoutId = R.layout.widget_today_small; + // Find the correct layout based on the widget's width + int widgetWidth = getWidgetWidth(appWidgetManager, appWidgetId); + int defaultWidth = getResources().getDimensionPixelSize(R.dimen.widget_today_default_width); + int largeWidth = getResources().getDimensionPixelSize(R.dimen.widget_today_large_width); + int layoutId; + if (widgetWidth >= largeWidth) { + layoutId = R.layout.widget_today_large; + } else if (widgetWidth >= defaultWidth) { + layoutId = R.layout.widget_today; + } else { + layoutId = R.layout.widget_today_small; + } RemoteViews views = new RemoteViews(getPackageName(), layoutId); // Add the data to the RemoteViews @@ -89,7 +107,9 @@ public class TodayWidgetIntentService extends IntentService { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) { setRemoteContentDescription(views, description); } + views.setTextViewText(R.id.widget_description, description); views.setTextViewText(R.id.widget_high_temperature, formattedMaxTemperature); + views.setTextViewText(R.id.widget_low_temperature, formattedMinTemperature); // Create an Intent to launch MainActivity Intent launchIntent = new Intent(this, MainActivity.class); @@ -101,6 +121,29 @@ public class TodayWidgetIntentService extends IntentService { } } + private int getWidgetWidth(AppWidgetManager appWidgetManager, int appWidgetId) { + // Prior to Jelly Bean, widgets were always their default size + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) { + return getResources().getDimensionPixelSize(R.dimen.widget_today_default_width); + } + // For Jelly Bean and higher devices, widgets can be resized - the current size can be + // retrieved from the newly added App Widget Options + return getWidgetWidthFromOptions(appWidgetManager, appWidgetId); + } + + @TargetApi(Build.VERSION_CODES.JELLY_BEAN) + private int getWidgetWidthFromOptions(AppWidgetManager appWidgetManager, int appWidgetId) { + Bundle options = appWidgetManager.getAppWidgetOptions(appWidgetId); + if (options.containsKey(AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH)) { + int minWidthDp = options.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH); + // The width returned is in dp, but we'll convert it to pixels to match the other widths + DisplayMetrics displayMetrics = getResources().getDisplayMetrics(); + return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, minWidthDp, + displayMetrics); + } + return getResources().getDimensionPixelSize(R.dimen.widget_today_default_width); + } + @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) private void setRemoteContentDescription(RemoteViews views, String description) { views.setContentDescription(R.id.widget_icon, description); diff --git a/app/src/main/java/com/example/android/sunshine/app/widget/TodayWidgetProvider.java b/app/src/main/java/com/example/android/sunshine/app/widget/TodayWidgetProvider.java index ee74909..81c1dfe 100644 --- a/app/src/main/java/com/example/android/sunshine/app/widget/TodayWidgetProvider.java +++ b/app/src/main/java/com/example/android/sunshine/app/widget/TodayWidgetProvider.java @@ -25,7 +25,7 @@ import android.support.annotation.NonNull; import com.example.android.sunshine.app.sync.SunshineSyncAdapter; /** - * Provider for a widget showing today's weather. + * Provider for a horizontally expandable widget showing today's weather. * * Delegates widget updating to {@link TodayWidgetIntentService} to ensure that * data retrieval is done on a background thread diff --git a/app/src/main/res/drawable-nodpi/widget_preview_today.png b/app/src/main/res/drawable-nodpi/widget_preview_today.png new file mode 100644 index 0000000000000000000000000000000000000000..7be01f0d3e30ba8db9e6e57434098b996bc35282 GIT binary patch literal 19003 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 z

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 RJ>Y3j44$rjF6*2UngB*X>}vo3 literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/widget_today.xml b/app/src/main/res/layout/widget_today.xml new file mode 100644 index 0000000..caf01ed --- /dev/null +++ b/app/src/main/res/layout/widget_today.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/widget_today_large.xml b/app/src/main/res/layout/widget_today_large.xml new file mode 100644 index 0000000..3838aaf --- /dev/null +++ b/app/src/main/res/layout/widget_today_large.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 12b07d1..1c7cbb2 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -54,6 +54,9 @@ 360dp - 40dp + 110dp 40dp + 40dp + @dimen/widget_today_default_height + 220dp diff --git a/app/src/main/res/xml/widget_info_today.xml b/app/src/main/res/xml/widget_info_today.xml index 9812f0b..c36d564 100644 --- a/app/src/main/res/xml/widget_info_today.xml +++ b/app/src/main/res/xml/widget_info_today.xml @@ -14,7 +14,13 @@ limitations under the License. --> \ No newline at end of file + android:previewImage="@drawable/widget_preview_today" + android:resizeMode="horizontal" + android:updatePeriodMillis="0" + tools:ignore="UnusedAttribute" />