Adds user-configurable spacing controls (similar to Nova Launcher):
- Workspace padding: horizontal & vertical sliders (Home screen > Layout).
Horizontal factor is applied to the source margin so cells fill the
freed space; vertical factor preserves the dock reservation so the last
row never overlaps the hotseat.
- Widget padding: slider (Home screen > Widgets), 0% removes the forced
padding, up to 200%.
- App drawer top padding slider (App drawer > Grid).
- Widget resize: respect the overridden resize mode so force/unlimited
resize shows handles even for widgets whose provider limits resizing.
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
- On display change, we don't seem to re-arrange workspace widgets
whose current span size may no longer be a valid
- In some cases, the existing span showing on workspace is less than
the widget's min size and user is unable to resize to the correct size.
- Ideally irrespective of problem they should be able to resize to
correct size.
This cl lets user resize to valid size. In another bug we might want to
evaluate refreshing / updating widgets on display change.
Bug: 408974387
Test: See demo
Flag: EXEMPT BUGFIX
Change-Id: I9712a20739ec8ee1de9d85f22814c7f1b3474e47
* fixed java.lang.NoSuchMethodError: No interface method toList()
´´´
Ljava/util/List; in class Ljava/util/stream/Stream; or its super classes (declaration of 'java.util.stream.Stream' appears in /system/framework/core-oj.jar)
at com.android.launcher3.model.WidgetsModel.getFilteredWidgetsListForPicker(WidgetsModel.java:99)
at com.android.launcher3.model.WidgetsModel.getWidgetsListForPicker(WidgetsModel.java:122)
at com.android.launcher3.model.BaseLauncherBinder.bindWidgets(BaseLauncherBinder.java:204)
at com.android.launcher3.model.LoaderTask.run(LoaderTask.java:338)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.os.HandlerThread.run(HandlerThread.java:65)
´´´
* fix crashes when trying to customize from folders
* fix NoClassDefFound attempting to create new folder in lower apis
* fix java.lang.NoSuchMethodError: No static method beginAsyncSection(Ljava/lang/String;I)V in class Landroid/os/Trace; or its super classes (declaration of 'android.os.Trace' appears in /system/framework/framework.jar!classes2.dex) when adding widgets below Q
at com.android.launcher3.widget.LauncherAppWidgetHostView.setAppWidget(LauncherAppWidgetHostView.java:126)
at android.appwidget.AppWidgetHost.createView(AppWidgetHost.java:382)
at com.android.launcher3.widget.LauncherWidgetHolder.createViewInternal(LauncherWidgetHolder.java:447)
at com.android.launcher3.widget.LauncherWidgetHolder.createView(LauncherWi
* fix java.lang.NoSuchMethodError: No static method beginAsyncSection(Ljava/lang/String;I)V in class Landroid/os/Trace; or its super classes (declaration of 'android.os.Trace' appears in /system/framework/framework.jar!classes2.dex) when adding widgets below Q
at com.android.launcher3.widget.LauncherAppWidgetHostView.setAppWidget(LauncherAppWidgetHostView.java:126)
at android.appwidget.AppWidgetHost.createView(AppWidgetHost.java:382)
at com.android.launcher3.widget.LauncherWidgetHolder.createViewInternal(LauncherWidgetHolder.java:447)
at com.android.launcher3.widget.LauncherWidgetHolder.createView(LauncherWi
* fix java.lang.NoSuchMethodError: No virtual method setSystemGestureExclusionRects(Ljava/util/List;)V in class Lcom/android/launcher3/AppWidgetResizeFrame; or its super classes (declaration of 'com.android.launcher3.AppWidgetResizeFrame' appears in /data/app/app.lawnchair.play.debug-ewPju7gaDxUbh-ipLPLIoA==/base.apk!classes6.dex)
Instead of throwing the event on the Launcher, now the test listens
to changes in the view tree and when the condition is meet it stops the
waiter.
Bug: 352569050
Bug: 324261526
Test: IntegrationReorderWidgetsTest
Flag: TEST_ONLY
Change-Id: I94596429cb79af6b298281bd5cd4558e919736e2
Before this CL, the resize frame showed a mismatched corner radius
for widgets that have a non-default corner radius, when using the
add button. This is because widgets added with the button may not have
had `onLayout` called before the resize frame is set up.
This change adds a layout listener to the widget view, so that the frame
can set its corner radius once the view has been laid out.
Bug: none
Test: manual test
Flag: ACONFIG com.android.launcher3.enable_widget_tap_to_add NEXTFOOD
Change-Id: Ia9c37ae595be48e4ecab7930e17efca9a27ed05d
This also linked to the overlap we were seeing in
bug 331816144 (as can be seen in before and after video)
Bug: N/A
Test: See videos
Flag: aconfig launcher.enable_add_app_widget_via_config_activity_v2 NEXTFOOD
Change-Id: I21717e0c4d4eab7efa1746e46d3218b8b3cee4ef
Some widget will show config activity and immediately dismiss it after user dropping widget onto workspace. This lead to 2 code paths triggered around same time:
1. Drop widget to workspace and show resize frame, after state is transitiion to NORMAL, show workspace
2. Close config activity and Launcher#onActivityResult, which triggers removing dropped widget and extract bitmap, then re-inflate another pending widget and show resize frame
Due to race condition between #1 and #2, we might remove the dropped widget first in #2, then show resize frame in #1 after workspace is transitione to NORMAL, leading showing resize frame at incorrect location
Next CL will fix the slight misalignment of resize frame with widget.
Bug: 331433240
Flag: NONE
Test: manual
Change-Id: Ie02f59b370271d517ed2e91b42d665f44a86095b
* Add option to make all widgets resizable.
* Split setting for unlimited size and forcing.
* Update labels and add description to settings.
* Fix build error.
---------
Co-authored-by: SuperDragonXD <70206496+SuperDragonXD@users.noreply.github.com>
Also getting rid of part of the logic that updates the frame size in multi-window mode since multi-window is no longer supported
Test: N/A
Bug: 268553314
Flag: ENABLE_WIDGET_TRANSITION_FOR_RESIZING. OFF
Change-Id: I081b11441b562fccec7feb12cec0b28b9a0ea3a2
This reverts commit 76a1ceb5f2.
Reason for revert: Add flag back to turn it off for further testing
Bug: 270395274
Merged-In: I10b9e99734b14cbbe8d1190300493099a1f28a24
Change-Id: I10b9e99734b14cbbe8d1190300493099a1f28a24
Removing default widget padding logic. Also widget padding it applied
at ShortcutAndWidgetContainer so that the widgetView always has the
correct size.
Bug: 274826296
Bug: 257589413
Test: Verified using screenshots
Flags: N/A
Change-Id: Id4b5e94db6ec7b2aa3dca87b1e9ccc831b608cac
This variable is now mutable, making the uppercase format misleading.
For instance, users might assume they can use this value in other
immutable properties, when they really should be accessing the latest
value every time they need it.
Context: https://source.android.com/docs/setup/contribute/code-style#follow-field-naming-conventions
Test: Manual
Bug: 271160958
Change-Id: Iaaa51d9153cb8a7d686c72e1210b1948029dcfd5
Bug: 188081026
Test: no op change, should compile
Test: ReorderWidgets
Change-Id: I20367974e5a4cead406e18eb66dafd4d59651b2a
Merged-In: I20367974e5a4cead406e18eb66dafd4d59651b2a
The wrapper class is created for further changes that will run the wrapped host in the background.
Test: N/A
Bug: 235358918
Change-Id: I9bd6fc2749c5d4a4d3391fb75d0c3ff1e13d17bf
I'm moving the LayoutParams to another file to start the decoupling
of the Reorder outside of the CellLayout.
Also, I change the name from LayoutParams to LauncherLayoutParams to prevent confusion with ViewGroup.LayoutParams making it explicit that this are different LayoutParams.
Bug: 188081026
Test: atest ReorderWidget
Change-Id: I92251c5540ffcf5ece7b933e6f6c836eb825c997
When activity restarts, the widgetView gets onDetachFromWindow first
which inturn removes the AppWidgetResizeFrame from drawLayer while
the dispatchAttachToWindow was still in progress in DragLayer
Bug: 238416508
Test: Verified no crash after the change
Change-Id: I6359840c9fb3ae2719056845818620af19d3c94d
These are review comments followup from ag/17399997
Bug: b/218187058
Test: manually test thet Launcher3 features work correctly
Change-Id: I9865a37c1ed663370dc28e7678994f3d961e3cd1
To fix it I added the following logic condition: if the minimum size of
the widget (`mMinVSpan` vertically) is equal to the maximum size of the
widget (`mMaxVSpan` vertically), then you can't change the size and the
handles shouldn't appear, I did this for both the horizontal handles as
well as the vertical handles.
Fix: 202004006
Change-Id: Ide05231f5712a736129ac6cb2fee358f7c70e371
Test: Manully veryfied.
Also updated the tests to check that the resize frame is shown.
Bug: 192655785
Test: AddWidgetTest, AddConfigWidgetTest, manual
Change-Id: Id348f39cec1bebc8ec9ea9f3068f4bda2159eac4
The grid doesn't have a constant space between cells anymore, so we need
new attributes for the different spaces in different situations.
Bug: 191879424
Test: checking cell size and extra space in dumpsys
Change-Id: I4b6aae5b3fea281490c00cd13d0cd3a25372f21b