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

Commit 1d7ed30d authored by Jon Miranda's avatar Jon Miranda
Browse files

Remove widgets that no longer fit the workspace in their current spans.

This can happen when display size changes.
We compare span sizes of widget in the db to the min sizes of the widget
in the current display size. If the widget can no longer fit in its existing
spans, we remove it.

Also update test widgets to have minWidth/minHeight of 1dp. This ensures that
the spanX, spanY, min* values remain consistent between different test devices.

Bug: 168818961
Change-Id: I723372e4582658f78b2f23ced9073cb77977a6b8
parent 24c81ad7
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -49,6 +49,7 @@ import android.util.LongSparseArray;
import android.util.TimingLogger;

import com.android.launcher3.LauncherAppState;
import com.android.launcher3.LauncherAppWidgetProviderInfo;
import com.android.launcher3.LauncherModel;
import com.android.launcher3.LauncherSettings;
import com.android.launcher3.Utilities;
@@ -306,6 +307,7 @@ public class LoaderTask implements Runnable {
        final PackageManagerHelper pmHelper = new PackageManagerHelper(context);
        final boolean isSafeMode = pmHelper.isSafeMode();
        final boolean isSdCardReady = Utilities.isBootCompleted();
        final WidgetManagerHelper widgetHelper = new WidgetManagerHelper(context);

        boolean clearDb = false;
        try {
@@ -391,6 +393,7 @@ public class LoaderTask implements Runnable {

                WorkspaceItemInfo info;
                LauncherAppWidgetInfo appWidgetInfo;
                LauncherAppWidgetProviderInfo widgetProviderInfo;
                Intent intent;
                String targetPkg;

@@ -720,6 +723,19 @@ public class LoaderTask implements Runnable {
                                            + appWidgetInfo.spanX + "x" + appWidgetInfo.spanY);
                                    continue;
                                }
                                widgetProviderInfo =
                                        widgetHelper.getLauncherAppWidgetInfo(appWidgetId);
                                if (widgetProviderInfo != null
                                        && (appWidgetInfo.spanX < widgetProviderInfo.minSpanX
                                        || appWidgetInfo.spanY < widgetProviderInfo.minSpanY)) {
                                    // This can happen when display size changes.
                                    c.markDeleted("Widget removed, min sizes not met: "
                                            + "span=" + appWidgetInfo.spanX + "x"
                                            + appWidgetInfo.spanY + " minSpan="
                                            + widgetProviderInfo.minSpanX + "x"
                                            + widgetProviderInfo.minSpanY);
                                    continue;
                                }
                                if (!c.isOnWorkspaceOrHotseat()) {
                                    c.markDeleted("Widget found where container != " +
                                            "CONTAINER_DESKTOP nor CONTAINER_HOTSEAT - ignoring!");
+2 −2
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="180dp"
    android:minHeight="110dp"
    android:minWidth="1dp"
    android:minHeight="1dp"
    android:updatePeriodMillis="86400000"
    android:initialLayout="@layout/test_layout_appwidget_blue"
    android:resizeMode="horizontal|vertical"
+2 −2
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="180dp"
    android:minHeight="110dp"
    android:minWidth="1dp"
    android:minHeight="1dp"
    android:updatePeriodMillis="86400000"
    android:initialLayout="@layout/test_layout_appwidget_red"
    android:resizeMode="horizontal|vertical"
+2 −2
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="180dp"
    android:minHeight="110dp"
    android:minWidth="1dp"
    android:minHeight="1dp"
    android:updatePeriodMillis="86400000"
    android:initialLayout="@layout/test_layout_appwidget_blue"
    android:configure="com.android.launcher3.testcomponent.WidgetConfigActivity"