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

Commit 77864c64 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Persist widget size options" into main

parents efd0042b 4086de65
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
@@ -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) {