Commit Graph

167 Commits

Author SHA1 Message Date
Sunny Goyal
a57d75cd11 Adding ListenableRef as an alternative to StateFlows.
This allows using listener pattern instead of coroutines within the recommended repository pattern and avoid the jank due to coroutines

Bug: 390572144
Test: atest ListenableRefTest
Flag: com.android.launcher3.model_repository
Change-Id: I9f74166e01e1bdb4cb8afce3213022ea10137230
2025-05-23 13:52:16 -07:00
Toni Barzic
83b8cc19ca Support workspace cells with two-line labels
Adds `maxLineCount` attribute to CellSpec. The attribute indicates the max
number of lines of text the cell was speced to support. It's used to:
*   enable two-line labels in `BubbleTextViews` for workspace (including
    folder children) items
*   Update cell dimension calculation to inform cell vertical padding

When calculating cell content size the icon text size will be included
`maxLineCount` times, so the cell content gets centered as if it
contains `maxLineCount` lines of text. That way the icon position will
be consistent between cells with text that fits into one line, and cells
that contain two lines of text.

Adds `maxLineCountMatchesWorkspace` attribute to specify that the cell
should inherit `maxLineCount` from workspace cell spec.

Bug: 30153091
Flag: com.android.launcher3.enable_scalability_for_desktop_experience
Test: Manual

Change-Id: I150a62f427a0ad755a4746a736d9846d3bea4d2e
2025-05-21 22:04:33 +00:00
Brian Isganitis
bcf2a81aa3 Only use mockito-kotlin in SandboxApplication.
Flag: TEST_ONLY
Bug: 415826632
Test: Related tests
Change-Id: I8a2704a8b55a0fd785577d6641665a34c1c9b650
2025-05-12 15:51:52 -04:00
Uwais Ashraf
1ae9814920 Merge "Create separate worker threads for IO work and lighter BG work" into main 2025-05-09 09:45:40 -07:00
Uwais Ashraf
c1102750dd Create separate worker threads for IO work and lighter BG work
Documentation largely pulled from Kotlin coroutines docs.

Flag: com.android.launcher3.enable_coroutine_threading_improvements
Bug: 416206104
Test: Presubmits
Change-Id: I89b7222e31680619e311fa9e9986da5c12d80ed4
2025-05-09 06:49:48 +00:00
Sunny Goyal
57a195b790 Making workspaceData immutable
BgDataModel holds a mutable handle of the data, which ensures that all edits go through this class and there is a single place to keep the repository updated

Bug: 390572144
Test: Updated existing model tests
Flag: EXEMPT refactor
Change-Id: I991b707dd21801d1abd00510f676549947285012
2025-05-07 13:21:21 -07:00
Sunny Goyal
53cc9a7806 Merge "Moving predicted items to ItemIdMap instead of extraItems" into main 2025-05-06 10:29:39 -07:00
Sebastián Franco
73dd3d3723 Merge "Making the Launcher Customizar available to Launcher3 and not only Nexus" into main 2025-05-06 08:56:51 -07:00
Sebastian Franco
3fd034c932 Making the Launcher Customizar available to Launcher3 and not only Nexus
Bug: 390496167
Bug: 411322054
Test: All Image tests
Flag: EXEMPT test only
Change-Id: I5e6cd806036bbc548ba9526efd619eec7ab9facd
2025-05-05 22:56:38 +00:00
Sunny Goyal
aef6c7932e Moving predicted items to ItemIdMap instead of extraItems
> This allows the whole workspace model to be contained in itemIdMap instead of spread across multiple data containers
> Deprecating extraItems, all non-workspace data should use separate repositories
> Design: http://go/launchermodel-re-arch?#heading=h.5y8n4r164d5s

Bug: 390572144
Test: atest PredictionUpdateTaskTest
Flag: EXEMPT refactor
Change-Id: I886d0a8d5bbbf9f5c2054d4a2442bf03f9c4eab5
2025-05-05 15:52:37 -07:00
Sebastian Franco
fc8537d5de Creating NexusLauncherE2ETests test suite, this cl only adds the Launcher3 part
The test don't run yet in presubmit, first I will have the NexusLauncherE2ETests
target ready and then I will add it to the presubmit.

Bug: 324261526
Flag: EXEMPT test only
Test: atest NexusLauncherE2ETests
Change-Id: I4daa204ec735456c481b0682ca518da381af7bb7
2025-05-05 18:53:08 +00:00
Jagrut Desai
f52ffc1232 Auto-Stashing Functionality for Pinned Taskbar
This cl includes :
- Refactor to remove unpinning/pinning in desktop mode with refactor of DisplayController, TaksbarPinningController, and its tests.
- Combined the auto stashing conditions under one method shouldAllowTaskbarToAutoStash() which takes in consideration isTransientTaskbar, isInDesktop, and Always Show Taskbar option is turned on/off in desktop mode.
- enabled taksbar divider popup support in desktop mode.
- Intorduced animation for pinned taksbar when autostadhing is enabled.
- Enable to onSwipeToUnstashTaskbar for TaskbarInputStashController for pinned taksbar in desktop mode.

Test: Presubmit, Unit, Manual
Bug: 381535785
Flag: com.android.window.flags.enable_desktop_windowing_mode
Change-Id: Ie5ecf3a3c72bf8dfadf2d0c908269305fe5bad0b
2025-04-30 10:39:58 -07:00
Pat Manning
9ee290e81f Cancel ongoing dismiss animation when Launcher state changes.
Fix: 410744889
Test: Manual
Flag: com.android.launcher3.enable_expressive_dismiss_task_motion
Change-Id: I5e81de6762e7d0ea47f8574599901aac1bb8bb77
2025-04-28 10:27:29 +01:00
Sunny Goyal
3678af5a81 Fixing crashes due to code 1032 SQLITE_READONLY_DBMOVED
1) Moving any DB file deletion before opening the DB to avoid deleting already opened file
2) Using a sandbox directory for BackupAndRestoreDBSelectionTest which can delete actively opened files causing other tests to fail

Bug: 403551539
Flag: EXEMPT bugfix
Test: Presubmit
Change-Id: Ib1088a0e486edf755e5f7dcd738eb835af78b4c4
2025-04-22 16:09:52 -07:00
Treehugger Robot
14a18dbf9b Merge "Fix launcher tests in studio" into main 2025-04-15 13:05:00 -07:00
Dave Mankoff
396d69956b Fix launcher tests in studio
Fixes: 410874290
Flag: EXEMPT small fixes for gradle
Test: test_gradle_build.sh
Change-Id: Iab8ad757d11e1d0ba5f85a7063e2d087ffc38d2b
2025-04-15 19:05:48 +00:00
Adnan Begovic
ee79e0f5d2 launcher3: Use @UiExecutor within ThemeManager.
Use the provided @UiExecutor within the ThemeManager
instead of referencing the MAIN_EXECUTOR directly.

Bug: 407593767
Test: ThemeManagerTest
Flag: NONE - new module
Change-Id: I6359adc1308bdb209dcf6c6e1c2d3fc7f4438585
2025-04-15 09:04:44 -07:00
Will Osborn
5c00b41505 Merge "Refactor RecentsAnimationDeviceState and TaskAnimationManager using new PerDisplay library" into main 2025-03-28 14:05:39 -07:00
Will Osborn
ec8d20d0ed Refactor RecentsAnimationDeviceState and TaskAnimationManager using new PerDisplay library
Test: locally tested on Tangor
Bug: 399371607
Flag: EXEMPT refactor

Change-Id: Ie52f53a2d5dee757a8dc3b19248736bc15e5e0c6
2025-03-28 12:08:36 +00:00
Shamali P
472709d9ca Delete the filter code as it will be provided differently in refactor
With the dagger update the initialization happens in constructor which
we would avoid once we work on refactor and move it into a repository
class. The list will also be fetched from a different data source, so,
makes sense to delete it at the moment.

Bug: 406324964
Flag: EXEMPT BUGFIX
Test: Not applicable as code is removed
Change-Id: Iab8bb1e94677abf9b5b882f4d3485b002faf3e0f
2025-03-27 14:15:05 -07:00
Sunny Goyal
3b307455a0 Revert^2 "Simplifying model testing rules"
35b6d322ab

Change-Id: I3ed574a517dbe350b6dfe5b1d3ed198203d22f44
2025-03-26 23:08:55 -07:00
Priyanka Advani (xWF)
35b6d322ab Revert "Simplifying model testing rules"
Revert submission 32704934-model-test-cleanup

Reason for revert: Droidmonitor created revert due to b/406588406. Will be verifying through ABTD before submission.

Reverted changes: /q/submissionid:32704934-model-test-cleanup

Change-Id: Ieeb7f5b5699afeae27f946f060147bb68afc36e5
2025-03-26 16:12:16 -07:00
Sunny Goyal
cb84230913 Simplifying model testing rules
> Using Sandbox application everywhere to avoid test leaks
> Removing LauncherModelHelper and moving some utility methods to rules and extensions

Bug: 406521480
Flag: EXEMPT test only
Test: Presubmit

Change-Id: I17bd5ec2bdb0fc0cbe02be9c8ee76595effe3f11
2025-03-26 11:34:15 -07:00
Sunny Goyal
66916cda10 Moving LauncherAppWidgetHolder to dagger
This would allow customizing the widget holder in LauncherPreview

Bug: 361850561
Test: Updated tests and presubmit
Flag: EXEMPT dagger
Change-Id: I32491169188992453693048986c57cb780fdf1d8
2025-03-14 14:19:29 -07:00
Sunny Goyal
25f5c7e761 Making ModelDbController injectable
Bug: 361850561
Test: Updated tests
Flag: EXEMPT dagger
Change-Id: Ie600469476ce5eb60813a3c8b57b9445fcf82c24
2025-03-13 11:23:23 -07:00
Thu-Huong Vu
48dd9eee1c Register SimpleBroadcastReceiver permission.
Update SimpleBroadcastReceiver API to pass in broadcast permission and
register Growth Broadcast Receiver with permission to prevent other apps
from triggering Growth Nudge on their behalf.

Flag: EXEMPT add separately
Test: Manual
Bug: 397739323
Change-Id: I3a9d5e131ced752af0a1b35d400eed6d170fc81e
2025-03-10 23:29:33 +00:00
Sebastian Franco
aeb99f8d24 Moving zip rule to Multivalent to fix roboelectric test in A-studio
This fixes roboelectric test Running in Android Studio.

Bug: 390496167
Flag: TEST_ONLY
Test: all dumpTest
Test: Running roboelectric test in Android Studio
Change-Id: I903c6cea3c981a9c38cfcd05b54e4095b6fe2a8a
2025-03-07 11:56:45 -08:00
Sunny Goyal
84e0e6a188 Making ActivityContext extend SavedStateRegistryOwner
Bug: 390572144
Test: Presubmit
Flag: EXEMPT refactor

Change-Id: I8272e95a8d2da95b3c93ec616fdf877b89db5b26
2025-03-05 09:22:47 -08:00
Treehugger Robot
57cab7794a Merge "Simplifying some view iteration methods" into main 2025-03-04 18:42:06 -08:00
Sunny Goyal
476d926972 Simplifying some view iteration methods
Bug: 393703968
Flag: EXEMPT refactor
Test: Presubmit
Change-Id: Ieffa3a66fbf8595d542995c348df578a3aec9083
2025-03-04 10:39:55 -08:00
Sunny Goyal
5025b9ab04 Moving widgetFilter to dagger
Moving widget filtering to UI layer as it changes with surface

Bug: 361850561
Test: Presubmit
Flag: EXEMPT dagger
Change-Id: I9d9377540ca36873659cea4ecc91fb162d82cd44
2025-03-03 10:27:14 -08:00
Treehugger Robot
1e8125c76b Merge "Merging some notification dots implementation" into main 2025-02-27 16:08:10 -08:00
Treehugger Robot
9a5cd11da5 Merge "Move MainThreadInitializedObject to Launcher3 Go." into main 2025-02-27 13:03:12 -08:00
Charlie Anderson
f22128e5f4 Merge "Make ModelTestExtensions default to process userhandle for HSUM" into main 2025-02-27 12:59:26 -08:00
Sunny Goyal
39063bf167 Merging some notification dots implementation
Bug: 393703968
Flag: EXEMPT refactor
Test: Presubmit
Change-Id: Ie02311afba85f06fbafd265a5015cd23bd356a36
2025-02-27 08:50:26 -08:00
Anushree Ganjam
e6065f5a94 Move MainThreadInitializedObject to Launcher3 Go.
Move SandboxContext to a separate class.
Remove all MainThreadInitializedObject references in Launcher3 and tests.
Remove ObjectSandbox interface and make RoboApplication extend
SandboxContext

Bug: 361850561
Test: Presubmit
Flag: EXEMPT dagger
Change-Id: I1a8af5e6ae59df44d8ad6732b4d6e949ac402d6c
2025-02-26 16:49:08 -08:00
Charlie Anderson
87ed2ec7dd Make ModelTestExtensions default to process userhandle for HSUM
Bug: 398857280
Test: BackupAndRestoreTest
Flag: EXEMPT test fix
Change-Id: I1781ffd0a04c31ee01108fb5802278051cdff4dc
2025-02-26 11:00:18 -05:00
Jagrut Desai
8b2e5eff9b Desktop Mode Taskbar Recreate Animation
This Cl includes
       - addition of entry/exit callback methods in DesktopVisibilityController.
       - taskbar manager now listens to desktop mode changes.
       - TaskbarBackrgroundRedererer can now individually animation backgrounds for transient and persistent taskbars
       - new channel for taskbar icon alpha added to TaskbarViewController
       - new animated float to handle background alpha while we are recreating taskbar with animation.

Solution:

we use the callabck we get from DekstopVisibilty for entry/exit to first change logic of when we are considered inDesktopMode. Upon entry/exit we notify display controller for info change.
we also at notify taskbar manager who is now a listener to the desktop mode change and start the recreate process. TaskbarManager first animates existing taskbar out of user view and then follows the original recreate flow.

Test: Presubmit
Bug: 343882478
Flag: com.android.window.flags.enable_desktop_windowing_mode
Change-Id: Ib827564cacd194f499e7d9b1965e2bb13e3548ab
2025-02-24 11:59:53 -08:00
Sunny Goyal
7629bc4dcd Merge "Converting LauncherAppState to Dagger" into main 2025-02-21 10:06:01 -08:00
Sunny Goyal
c9f697aeb5 Converting LauncherAppState to Dagger
Bug: 361850561
Test: Presubmit
Flag: EXEMPT dagger

Change-Id: I336a233d2703c23a7e9065474bde471786886144
2025-02-20 19:13:49 -08:00
Shamali P
f6efa25a49 Update widgetsModel to return pickable vs all widgets separately.
Earlier wallpaper preview was reading widgets that were eligible for
displaying in picker, which means widgets that are marked as hidden in
picker wouldn't show up in wallpaper preview.

This fix updates widgets model to maintain map of all widgets (instead of just pickable widgets like before), so that the existing `getWidgetsByComponentKey` function used by wallpaper preview can see all widgets. And, updates picker specific methods to use separate functions (suffixed `forPicker` that filter out picker ineligible widgets when read by picker code).

Bug: 385695615
Test: WidgetsModelTest, WidgetsPredictionUpdateTaskTest and demo
Flag: EXEMPT BUGFIX
Change-Id: I59efe38be0ce1f8a956ba4be42fb6e8b48b5d323
2025-02-20 14:13:16 -08:00
Treehugger Robot
6191d06684 Merge "launcher3: Improve SimpleBroadcastReceiver." into main 2025-02-12 18:19:35 -08:00
Adnan Begovic
1b26bb4a74 launcher3: Improve SimpleBroadcastReceiver.
Unless explicitly annotated, parameters in java are by
  default nullable. There are a few cases where a null context
  may be passed to the unregisterReceiverSafely function
  of SimpleBroadcastReceiver.

  To mitigate misuses or incorrect contexts being passed for
  register vs unregister, keep the context as a strong reference
  in the constructor.

  Also added NonNull annotations for any public callsites to
  enforce behavior.

Bug: 395019017, 395966395
Flag: NONE - bug fixed
Test: manual - presubmit
Change-Id: Ie371fa45cadceaf51cf184b446df9123ef27c337
2025-02-12 13:43:34 -08:00
Ahmed Fakhry
ad6fee6111 Implement isInDesktopMode*()
This CL does the following:
- Adds new methods `isInDesktopMode()` and
  `isInDesktopModeAndNotInOverview()` to `DesktopVisibilityController`.
- These two methods rely on the new multi-desks impl when the flags are
  enabled.
- Makes the existing `areDesktopTasksVisible()` and
  `areDesktopTasksVisibleAndNotInOverview()` private, and migrates all
  the usages to the new methods.
- The new methods uses the old methods if the flags are disabled.

A companion NexusLauncher CL is at ag/31601363.

Bug: 394182435
Test: m
Flag: com.android.window.flags.enable_multiple_desktops_frontend
Flag: com.android.window.flags.enable_multiple_desktops_backend
Change-Id: I29ff38f984bfe2f68a120f84e1a75fa36b739258
2025-02-12 21:18:51 +00:00
Sunny Goyal
c864281f3c Revert "Refactor all uses of DisplayController singleton INSTANCE"
Revert submission 31490053-DisplayControllRefactorForCD

Reason for revert: Leak is displayProvider

Reverted changes: /q/submissionid:31490053-DisplayControllRefactorForCD

Change-Id: Ib65150cdde765be009b5c4ce960f9fe025de9e60
2025-02-12 10:27:18 -08:00
Will Osborn
5f8b6206ce Refactor all uses of DisplayController singleton INSTANCE
And make DisplayController display id aware

Test: locally tested on Tangor
Flag: EXEMPT refactor
Bug: 392858637

Change-Id: I805cd7323c48a2988c95b9fda7f6cfe4c153860c
2025-02-12 10:46:34 +00:00
Toni Barzic
860c4ee680 Use pinned taskbar with desktop tasks on freeform displays
Bug: 390665752
Flag: com.android.window.flags.enable_desktop_taskbar_on_freeform_displays
Test: manual on desktop device. verify correct taskbar is shown
      on home screen, in overview, in desktop mode, with fullscreen
      app shown. Verify opening/launching apps from taskbar works
      as expected.

Change-Id: I5c1e21799609c28ec44cc190bfc681934907199f
2025-02-04 13:00:37 -08:00
Treehugger Robot
821572007d Merge "Revert^2 "Unifying various model update callbacks into one"" into main 2025-01-30 15:45:47 -08:00
Sunny Goyal
dfbbebc9e3 Revert^2 "Unifying various model update callbacks into one"
72f9943f64

Change-Id: I38901714947a2b7926723ea25df4a2b8216303e4
2025-01-30 13:19:32 -08:00
Priyanka Advani (xWF)
da2e19a821 Merge "Revert "Unifying various model update callbacks into one"" into main 2025-01-30 13:12:33 -08:00