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

Verified Commit 5a5994a6 authored by Abhishek Aggarwal's avatar Abhishek Aggarwal Committed by Saalim Quadri
Browse files

widgets: Properly update widget options

parent a8c2bcd3
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -12,4 +12,8 @@
    <string-array name="aliased_apps">
        <item>com.generalmagic.magicearth</item> <item>@string/maps</item>
    </string-array>

    <string-array name="blacklisted_widget_options">
        <item>org.chromium.chrome.browser.quickactionsearchwidget.QuickActionSearchWidgetProvider$QuickActionSearchWidgetProviderDino</item>
    </string-array>
</resources>
+66 −12
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package foundation.e.bliss.widgets

import android.animation.LayoutTransition
import android.app.Activity.RESULT_OK
import android.appwidget.AppWidgetHostView
import android.appwidget.AppWidgetManager
import android.appwidget.AppWidgetManager.EXTRA_APPWIDGET_ID
import android.appwidget.AppWidgetProviderInfo
@@ -40,6 +41,7 @@ import android.widget.FrameLayout
import android.widget.LinearLayout
import android.widget.RelativeLayout
import android.widget.Toast
import androidx.core.view.forEach
import com.android.launcher3.InvariantDeviceProfile
import com.android.launcher3.Launcher
import com.android.launcher3.LauncherPrefs
@@ -51,6 +53,7 @@ import com.android.launcher3.widget.LauncherAppWidgetProviderInfo
import com.android.launcher3.widget.PendingAddShortcutInfo
import com.android.launcher3.widget.WidgetCell
import com.android.launcher3.widget.picker.WidgetsFullSheet
import com.android.launcher3.widget.util.WidgetSizes
import foundation.e.bliss.LauncherAppMonitor
import foundation.e.bliss.LauncherAppMonitorCallback
import foundation.e.bliss.utils.BlissDbUtils
@@ -72,6 +75,7 @@ class WidgetContainer(context: Context, attrs: AttributeSet?) : FrameLayout(cont
    private lateinit var mRemoveWidgetLayout: FrameLayout
    private lateinit var mResizeContainer: RelativeLayout
    private lateinit var mWidgetLinearLayout: LinearLayout
    private lateinit var mWrapper: LinearLayout

    private val mResizeContainerRect = Rect()
    private val mInsetPadding =
@@ -109,6 +113,7 @@ class WidgetContainer(context: Context, attrs: AttributeSet?) : FrameLayout(cont
            context.startActivity(intent)
        }

        mWrapper =
            findViewWithTag<LinearLayout?>("wrapper_children").apply {
                setOnHierarchyChangeListener(
                    object : OnHierarchyChangeListener {
@@ -174,6 +179,36 @@ class WidgetContainer(context: Context, attrs: AttributeSet?) : FrameLayout(cont
        }
    }

    fun updateWidgets() {
        if (::mWrapper.isInitialized) {
            val widgetDbHelper = WidgetsDbHelper.getInstance(context)
            val widgetManager = AppWidgetManager.getInstance(context)

            mWrapper.forEach {
                val height = widgetDbHelper.getWidgetHeight(it.id) ?: 0

                val info = (it as AppWidgetHostView).appWidgetInfo
                val opts =
                    WidgetSizes.getWidgetSizeOptions(
                        context,
                        info.provider,
                        mLauncher.deviceProfile.inv.numColumns,
                        mLauncher.deviceProfile.inv.numRows
                    )

                if (height > 0) {
                    opts.putInt(AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT, height)
                    opts.putInt(AppWidgetManager.OPTION_APPWIDGET_MAX_HEIGHT, height)
                }
                val blacklistedComponents =
                    context.resources.getStringArray(R.array.blacklisted_widget_options)
                if (!blacklistedComponents.contains(info.provider.className)) {
                    widgetManager.updateAppWidgetOptions(it.appWidgetId, opts)
                }
            }
        }
    }

    /** A fragment to display the default widgets. */
    class WidgetFragment : FragmentWithPreview() {
        private lateinit var mWrapper: LinearLayout
@@ -351,7 +386,7 @@ class WidgetContainer(context: Context, attrs: AttributeSet?) : FrameLayout(cont
                        }
                    }
                    .also {
                        val opts = mWidgetManager.getAppWidgetOptions(it.appWidgetId)
                        var opts = mWidgetManager.getAppWidgetOptions(it.appWidgetId)
                        val params =
                            LayoutParams(
                                -1,
@@ -401,6 +436,25 @@ class WidgetContainer(context: Context, attrs: AttributeSet?) : FrameLayout(cont
                            mWrapper.addView(it)
                        }

                        opts =
                            WidgetSizes.getWidgetSizeOptions(
                                context,
                                info.provider,
                                launcher.deviceProfile.inv.numColumns,
                                launcher.deviceProfile.inv.numRows
                            )

                        if (params.height > 0) {
                            opts.putInt(AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT, params.height)
                            opts.putInt(AppWidgetManager.OPTION_APPWIDGET_MAX_HEIGHT, params.height)
                        }

                        val blacklistedComponents =
                            context.resources.getStringArray(R.array.blacklisted_widget_options)
                        if (!blacklistedComponents.contains(info.provider.className)) {
                            mWidgetManager.updateAppWidgetOptions(it.appWidgetId, opts)
                        }

                        widgetsDbHelper.insert(
                            WidgetInfo(
                                mWrapper.indexOfChild(it),
+3 −0
Original line number Diff line number Diff line
@@ -3484,6 +3484,9 @@ public class Launcher extends StatefulActivity<LauncherState>
            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                int newHeight = minHeight + (normalisedDifference * seekBar.getProgress());
                if (getWorkspace().getFirstPagePinnedItem() instanceof WidgetContainer) {
                    ((WidgetContainer) getWorkspace().getFirstPagePinnedItem()).updateWidgets();
                }
                Logger.d("Launcher.WidgetResize", "newHeight: " + newHeight);
                WidgetsDbHelper.getInstance(getApplicationContext())
                        .updateHeight(activeRoundedWidgetView.getAppWidgetId(), newHeight);
+4 −0
Original line number Diff line number Diff line
@@ -162,6 +162,7 @@ import foundation.e.bliss.LauncherAppMonitorCallback;
import foundation.e.bliss.OnBackPressedHandler;
import foundation.e.bliss.folder.GridFolder;
import foundation.e.bliss.multimode.MultiModeController;
import foundation.e.bliss.widgets.WidgetContainer;

/**
 * The workspace is a wide area with a wallpaper and a finite number of pages.
@@ -409,6 +410,9 @@ public class Workspace<T extends View & PageIndicator> extends PagedView<T>

        updateCellLayoutMeasures();
        updateWorkspaceWidgetsSizes();
        if (mFirstPagePinnedItem instanceof WidgetContainer) {
            ((WidgetContainer) mFirstPagePinnedItem).updateWidgets();
        }
        setPageIndicatorInset();
    }