diff options
| -rw-r--r-- | services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java index 16fe0077d6ff..cfeb5f4e2469 100644 --- a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java +++ b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java @@ -107,6 +107,7 @@ import android.util.IntArray; import android.util.Log; import android.util.LongSparseArray; import android.util.Pair; +import android.util.SizeF; import android.util.Slog; import android.util.SparseArray; import android.util.SparseBooleanArray; @@ -163,6 +164,7 @@ import java.util.Objects; import java.util.Set; import java.util.concurrent.atomic.AtomicLong; import java.util.function.LongSupplier; +import java.util.stream.Collectors; class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBackupProvider, OnCrossProfileWidgetProvidersChangeListener { @@ -176,6 +178,9 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku private static final String STATE_FILENAME = "appwidgets.xml"; + private static final String KEY_SIZES = "sizes"; + private static final String SIZE_SEPARATOR = ","; + private static final int MIN_UPDATE_PERIOD = DEBUG ? 0 : 30 * 60 * 1000; // 30 minutes private static final int TAG_UNDEFINED = -1; @@ -2710,6 +2715,13 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku out.attributeIntHex(null, "max_height", (maxHeight > 0) ? maxHeight : 0); out.attributeIntHex(null, "host_category", widget.options.getInt( AppWidgetManager.OPTION_APPWIDGET_HOST_CATEGORY)); + List<SizeF> sizes = widget.options.getParcelableArrayList( + AppWidgetManager.OPTION_APPWIDGET_SIZES, SizeF.class); + if (sizes != null) { + String sizeStr = sizes.stream().map(SizeF::toString) + .collect(Collectors.joining(SIZE_SEPARATOR)); + out.attribute(null, KEY_SIZES, sizeStr); + } if (saveRestoreCompleted) { boolean restoreCompleted = widget.options.getBoolean( AppWidgetManager.OPTION_APPWIDGET_RESTORE_COMPLETED); @@ -2741,6 +2753,17 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku if (maxHeight != -1) { options.putInt(AppWidgetManager.OPTION_APPWIDGET_MAX_HEIGHT, maxHeight); } + String sizesStr = parser.getAttributeValue(null, KEY_SIZES); + if (sizesStr != null) { + try { + ArrayList<SizeF> sizes = Arrays.stream(sizesStr.split(SIZE_SEPARATOR)) + .map(SizeF::parseSizeF) + .collect(Collectors.toCollection(ArrayList::new)); + options.putParcelableArrayList(AppWidgetManager.OPTION_APPWIDGET_SIZES, sizes); + } catch (NumberFormatException e) { + Slog.e(TAG, "Error parsing widget sizes", e); + } + } int category = parser.getAttributeIntHex(null, "host_category", AppWidgetProviderInfo.WIDGET_CATEGORY_UNKNOWN); if (category != AppWidgetProviderInfo.WIDGET_CATEGORY_UNKNOWN) { |