Commit Graph

54 Commits (74c1cc82fb4975f63c20a718f09367149bcc3c70)

Author SHA1 Message Date
Roger Yang 74c1cc82fb Closes #19921: Update appcompat and fragment dependencies to 1.3.x 3 years ago
Mihai Adrian Carare 9c9e26953f
For #19813: Invalidate tab tray adapter structure on screen rotation. (#20044) 3 years ago
Mugurell abeb8b5576 For #19135 - Set different offsets for expanded trays
As in the previous version of tabs tray when tray is expanded while in portrait
it should have a 40dp offset and when the tray is expanded while in landscape
it should have a 0dp offset - effectively making it fullscreen.

These values were set in code, always overriding the xml set value so I
removed that xml declaration.
3 years ago
Mugurell 3cbb67da5c For #19135 - Expand the tabs tray in landscape
Track the current orientation and collapse / expand it the tabs tray depending
on the orientation and the number of opened tabs.
3 years ago
Mugurell d7544337b8 For #19135 - Refactor the behavior code to support more functionality later
Setup a new TabSheetBehaviorManager with all the dependencies it needs to
set the initial tray's behavior.
This same manager will later be called to update behavior's properties.
3 years ago
mcarare d43acbd03d For #19938: Remove a11y workaround for tab tray new tab button.
Historically, button was introduced in a3dc565c10,
because FAB was not selectable by a11y in previous implementation of tab tray.
3 years ago
codrut.topliceanu 5729137ddb For #19738 - Adds tests for SecureTabsTrayBinding.kt 3 years ago
Jonathan Almeida a64cac6c7f Issue #19792: Add content description for tab tray action button 3 years ago
Roger Yang 2e4635334a
Closes #19090: Show snackbar on adding to bookmarks from tabs tray (#19807) 3 years ago
Jonathan Almeida 811dd3e618 Issue #19809: Change default tab tray view to grid layout 3 years ago
Jonathan Almeida 27280e6683 Issue #19809: Remove Grid layout info banner in tabs tray 3 years ago
Jonathan Almeida dc11c334b6 Issue #19112: Remove old tab tray code 3 years ago
Jonathan Almeida fc46ab2804 Close #19731: Track metrics before we dismiss the tabs tray 3 years ago
Jonathan Almeida 758700cbb0 Issue #19647: Navigate to browser from home via Synced Tabs page 3 years ago
Mugurell 3fb40e1f40 For #19475 - Introduce a DefaultTabsTrayInteractor
Refactored the TabsTrayFragment to not implement the TabsTrayInteractor which
among other advantages allowed for easier testing.
3 years ago
Mugurell dc26272381 For #19475 - Cleanup - respect naming scheme in TabsTrayController
In our current MVI implementation the View Interactors are first called in
response to a direct user action and contain methods following the
"onXXHappened" naming scheme and then delegate other Interactors / Controllers
for specific actions.

Controllers contain the business logic for actually updating the app's state
and offer methods following the "handleXXAction" naming scheme.
3 years ago
Jonathan Almeida ede909e858
Issue #19176: Exit select mode when removing tab (#19486) 3 years ago
Jonathan Almeida f0d352f47e Issue #19002: Correct naming of pager viewholders 3 years ago
Jonathan Almeida a95a26b2c6 Issue #19002: Use a single BrowserTrayList for normal/private list
We now have a BrowserTrayList.
 - Renamed from `BaseBrowserTrayList`.
 - Removed the abstract `configuration` and used a `lateinit var`
 instead.
 - Removed `NormalBrowserTrayList` and `PrivateBrowserTrayList`.
3 years ago
Jonathan Almeida bd753d3f94 Issue #19002: Correct browser viewholder naming 3 years ago
Jonathan Almeida 809c82a9f9 Issue #19002: Move TabsTrayViewHolder to browser package 3 years ago
Jonathan Almeida 392ace67d6 Issue #19175: Fix SyncTabs list not updating on changes
The main cause for this is that the `LifecycleProvider` needs to be set
to `State.RESUMED` to avoid the account manager's internal
`ObserverRegistry` from putting the UI observers into the paused state.

The rest of the changes is to rely the internal (safe) logic to
correctly sync and then update the tabs list.
3 years ago
Jonathan Almeida f421f82f2c Close #19259: Pass CoroutineContext to nav interactor constructor 3 years ago
Roger Yang cd37f398f1
Closes #18816: Disable TabsTray FAB on accessibility enabled (#19170) 3 years ago
Jonathan Almeida 69efd3a089 Close #19094: Open sign-in flow if no account is created for tabs tray 3 years ago
Jonathan Almeida 8b6d06e551 Close #19064: Focus on tab page with the BrowsingModeManager 3 years ago
Roger Yang cba68faac6 Closes #18946: Add undo toast for tabstray 3 years ago
codrut.topliceanu 3b7ba340e1 For #19023 - Expands tabsTray when tabs over certain number
TabsTray should be collapsed when there are only a few tabs on screen, otherwise it should go straight to STATE_EXPANDED.
3 years ago
Kate Glazko ae157e5679 For #18520: Add Empty Tab State To Browser Tray List 3 years ago
Jonathan Almeida 2ef04c2a9e Close #19024: Fix intermittent test failure in NavigationInteractor 3 years ago
Jonathan Almeida 6c8b1a7e8f Close #19045: Dismiss tabstray when last tab in a page is closed 3 years ago
Roger Yang bde54dc30f
Closes #19003: Add account setting to tabstray synced tab menu (#19034) 3 years ago
Roger Yang 8246f81c97
Closes #18948: Update tabstray telemetry (#19004) 3 years ago
Jonathan Almeida b9881372ef Close #19011: Always have a click listener in TabTrayViewHolder 3 years ago
Jonathan Almeida 0a4927a495 Issue #18934: Do not nullify adapter on window detached
Previously, to fix a memory leak, we were removing the adapter reference
entirely in order to have the `onDetachedFromRecyclerView` callback
invoked. This causes a side-effect where we can no longer reference the
adapter any more when we re-attach.

The simpler solution is to just invoke the needed callback directly
instead.
3 years ago
MarcLeclair 990bfa7e6d
16900 make navgraph inflation asynchronous (#18889)
* For #16900: implement async navgraph inflation

For #16900: removed nav graph from xml

For #16900: inflate navGraph programatically

For #16900: Made NavGraph inflation asynchronous

For #16900: Changed to block with runBlocking

For #16900: Refactored blocking call into a function

For 16900: NavGraph inflation is now async

We now attach the nav graph (or check if its attached) on every nav call ( an extension function for NavController).
This is done by checking the value of the job stored in PerfNavController.map which keeps track of the job with the NavController as a Key.
If the job hasn't been completed, it will block the main thread until the job is done. The job itself is responsible for attaching the navgraph
to the navcontroller (and the inflation of the latter too)

For 16900: rebased upstream master

For 16900: Rebase on master

For #16900: Fixed Async Navgraph navigation per review comments.

1)The Asynchronous method is now found in NavGraphProvider.kt. It creates a job on the IO dispatcher
2)The Job is tracked through a WeakHashMap from Controller --> NavGraph
3)The Coroutine scope doesn't use MainScope() anymore
4)The Coroutine is cancelled if the Activity is destroyed
5)The tests mockk the blockForNavGraphInflation method through the FenixReoboelectricTestApplication instead of calling the mock every setup()

For #16900: inflateNavGraphAsync now takes navController

For #16900: Pass lifecycleScope to NavGraphProvider

For #16900: removed unused mock

For #16900: Added linter rules for navigate calls

We need linting rules to make sure no one calls the NavController.navigate() methods

For #16900: Added TestRule to help abstract the mocks in the code

For 16900: Fix linting problems

For #16900: Cleaned duplicated code in tests

For #16900: cleaned up NavGraphTestRule for finished test

For #16900: had to revert an accidentally edited file

For #16900: rebased master

* For #16900: Review nits for async navgraph

This is composed of squash commits, the original messages can be found below:

-> DisableNavGraphProviderAssertionRule + kdoc.

Use test rule in RobolectricApplication.

Fix failing CrashReporterControllerTest

Fix blame by -> navigate in tests.

This commit was generated by the following commands only:
```
find app/src/test -type f -exec sed -i '' "/import org.mozilla.fenix.ext.navigateBlockingForAsyncNavGraph/d" {} \;
find app/src/test -type f -exec sed -i "" "s/navigateBlockingForAsyncNavGraph/navigate/g" {} \;
git checkout app/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
```

Fix various blame

This is expected to be squashed into the first commit so, if so, it'd
fix the blame.

Move test rule to helpers pkg.

add missing license header

Add import change I missed

fix unused imports

Replace robolectricTestrunner with test rule.

Improve navGraphProvider docs

Remove unnecessary rule as defined by robolectric.

add clarifying comment to robolectric

remove unnecessary space

* For #16900: nit fixes for MozillaNavigateCheck and lint fixes

3 squash commits:
 *Changed violation message and fixed the lint rule for MozillaNavigateCheck
 *Added suppression to NavController.kt
 *Fixed detekt violations

* For 16900: Fixed failing tests

Co-authored-by: Michael Comella <michael.l.comella@gmail.com>
3 years ago
Jonathan Almeida d342aeae48 Close #18931: Implement add to collections in interactor
We moved the collection dialog code out from the old fragment, because it
had nothing to do with tabs tray, and into the collections package to be
re-usable in other parts of the app.

In addition, we also make use of it in the new tabs tray's
NavigationInteractor.
3 years ago
Jonathan Almeida 1944a5ef6b Issue #18885: Dismiss FAB icon when tabs tray is closed 3 years ago
Roger Yang bc90e193a2 Closes #18522: Re-add call to action in tabs tray 3 years ago
Jonathan Almeida f3df2c73d9
Close #18862: Add multi-select banner to tabs tray (#18932)
* Issue #18862: Add new addBookmark BookmarksUseCase

* Issue #18862: Add class for state binding features

* Issue #18862: Add delete multiple tabs to tray interactor

* Issue #18862: Add new actions to navigation interactor

* Issue #18862: Enable select mode from main tray menu

* Issue #18862: Add menu when in select mode

* Close #18862: Add multi-select banner to tabs tray

* Close #18862: Add select support for handle UI

We apply various layout changes to the "handle" UI in the tabs tray when
switching modes. It isn't quite clear to my, why we do this, if it's
really needed to meet the end result, and if there is a better way.

For now, we're simplying moving over that logic that we can re-evaluate
at a later time.
3 years ago
Jonathan Almeida 6d09a8757c Close #18845: Adds swipe-to-delete to tabs tray refactor
Copied the TabsTouchHelper from the `tabtray` package here so we don't
need to re-write our own because there's nothing more to add.

We can hook this up with our tabs tray here by putting it in the
`BaseBrowserTrayList` for our normal and private tabs list.
3 years ago
codrut.topliceanu 9219a1b35b For #18515 - Added Icon and sync functionality
Co-authored-by: Jonathan Almeida <jalmeida@mozilla.com>
3 years ago
Jonathan Almeida 2e3086ac40 No issue: Move menu to separate integrations class 3 years ago
Jonathan Almeida dd3e95b4cf No issue: Add test for share tab in navigation interactor
Co-authored-by: Roger Yang <royang@mozilla.com>
3 years ago
Jonathan Almeida 729acdba39 No issue: Observe only normal tabs when updating counter 3 years ago
Jonathan Almeida 9078139e40 Close #18774: Migrate mutli-selection to store
Removes the recyclerview-selection library and replaces it with the
SelectionHolder/SelectionInteractor with a Store.

This is an implementation that's similar to what we have in other UI
lists (library).
3 years ago
Roger Yang 01568d5859
Closes #18513: Re-add menu to tabs tray (#18756) 3 years ago
Jonathan Almeida a443509c8b Issue #18535: Set the span count for grid view 3 years ago
Jonathan Almeida 2c6395cafe Issue #18535: Do not animate first scroll to position
This looks less that ideal with a grid layout that swings by from the
normal tabs to private tabs.
3 years ago
Jonathan Almeida 92a99542e6
Close #17821: Add TabsTrayStore with actions and reducer (#18773) 3 years ago