Removed now obsolete feature flag and tests.
Removed obsolete swipe refresh state from BookmarkFragmentState
Also adapted tests and remove obsolete ones.
Upgrades to A-C 69.0.20201203202830 and addresses breaking changes:
- Upgrades androidx workmanager to 2.4.0 in line with A-C.
- RecordingDevicesNotificationFeature was removed
- SearchUseCases accept parent session ID instead of session itself
This PR builds on [AC##9024][1], and implements setting the Nimbus endpoints from [a secret set at build time][2].
For production use, this requires a secret named `nimbus_url` to be put into CI.
Note: Nimbus is currently behind a feature flag.
If developers wish to use a Nimbus server for local development, you can set the url by adding an entry into local.properties, e.g.:
```
nimbus.remote-settings.url=https://settings.stage.moz4ws.net
```
Without setting server, Nimbus will be able to function, except no experimental definitions will be fetched, and features under experiment will be configured as if not enrolled in the experiment.
[1]: https://github.com/mozilla-mobile/android-components/pull/9024
[2]: https://groups.google.com/a/mozilla.com/g/android-components-team/c/lAGVKQy8aiA/m/rY3uGAwhBAAJ
This doesn't fix the underlying issue of #16435, but a symptom we have seen quite often in different
situations: When the ExternalAppBrowserActivity is not linked to a tab anymore then it falls back
to displaying a (partially broken) browser UI. With multiple browser activities at the same time
sooner or later we crash with a "display already acquired" error because both activities try to
render the same tab.
Items should follow the following ordering:
- current session open tabs
- collections options - currently the "Select tabs" button
- synced tabs items
This order should also be kept after returning from Multiselect mode.
Instead of simply fixing the memory leak for this issue by directly
removing references, it makes more sense to move the whole
BiometricPrompt out of the fragment and into it's own feature to be
re-usable.
While StrictMode is not exclusively used for performance purposes, it's
primarily used for perf purposes so let's move it to the perf package
and code owner it.
* For #15761 - Part 1: Turn ON the showGridViewInTabsSettings feature flag
* For #15761 - Part 2: Remove the showGridViewInTabsSettings feature flag and show the Tab view preference category
To get the index of the current selected browser tab when using reverse layout
we should also account for items placed below of the browser tabs.
The patch here unifies the logic already used for some calls but not all.
They're currently lazy { lazy { value } }. Accessing `lazy.value`
directly allows us to make it lazy { value }. This should be more
performant and prevents us from double-counting these components.
By having LazyMonitored implement Lazy, we can continue to pass these
values directly into the ac APIs that require Lazy references. For some
reason, implementing `Lazy.value` can replace `operator fun getValue`
required for delegates.
By component groups, I mean I applied this to any class with the
class kdoc, "Component group for...".
There are a few instances of lazy we had to keep using the old API to
avoid having to update constructor arguments.
With the Fennec -> Fenix migration complete there is no other Mozilla
application that would serve as a custom account provider hence the automatic
signin would not be possible.
Make this more obvious by commenting out the code that would trigger an
onboarding banner for it but keep the code in the app for when #15694 would add
to Fenix the ability to serve as a custom account provider.
STATE_HALF_EXPANDED cannot be disabled while also keeping fitToContents = true
based on which the tabs tray layout is currently set.
To work around this we'll set a a minuscule height for the tab tray when in
this state and then immediately advance to STATE_HIDDEN so to make it
imperceptible to the users.
Since I couldn't write unit tests because of InflateExceptions in Robolectric
I've written UI tests to protect against regressions.
This patch introduces a build flag that can be used on demand on the command line (`./gradlew -PmozillaOnline [..}`) or
permanently when added to local.properties (`mozillaOnline`).
At runtime `Config.channel.isMozillaOnline` will return `true` if the flag was set at build time.
* For #15278: added CoroutineManager to count runBlocking calls
* For #15278: Added actual detekt rule for runblocking and its config to the yaml
* For #15278: Added unit test for RunblockingCounter
* For #15278: renamed StrictModeStartupSuppressionCountTest.kt to PerformanceStartupTest.kt and added runBlockingCount test
* Lint fix
* For #15278: made runblocking a Long to prevent overflow
* For #15278: fixed MozRunblocking name, description and moved RunBlockingCounter to perf package
* For #15278:Renamed MozillaRunblockingCheck to MozillaRunBlockingCheck
* For #15278: Added setup for unit test, since it failed without restting counter
* For #15278: Fixed naming for RunBlocking lint check
* For #15278: removed changes made to test to use runBlockingIncrement
* For #15728: added test exclusion for runBlocking check
* For #15278: changed null check and added Synchronized to count setter
* For #15278: fix for nits
* For #15278: added StartupExcessiveResourceUseTest to CODEOWNERS
* For #15278: fixed for nits
* For #15278: Moved increment function to extension function and fixed indentation
* For #15278: Added tests for Atomic Integer extension and nit fix
Items should have a 16dp all around padding.
Have them have a 8dp padding that will add to 16 when placed together.
Have the parent have another 8dp that will add to 16 for when items are placed
to the edge of the available screen.
* Ability to rename top sites, closes#9548
* Highlight the "Remove" top site action as destructive
With more menu items in the top site contextual menu, it makes sense to differentiate
* Added test for the top site renaming action
* Fixed lint check (wildcard imports, blank spaces)
* Applied suggestions from code review
* Apply suggestions from code review
Co-authored-by: Gabriel Luong <gabriel.luong@gmail.com>
* Implemented dialog click listener with manual dismiss/cancel
Co-authored-by: Lorenzo Stanco <lorenzo.stanco@gmail.com>
* For #14637 - Compatibility patch for AC - 8554
* Update Android Components version to 65.0.20201029143039
Co-authored-by: Arturo Mejia <arturomejiamarmol@gmail.com>
* For #15929: Remove SearchWidgetCFR telemetry.
* For #15929: Remove SearchWidgetCFR and search widget experiment.
* For #15929: Remove unit tests references to search widget experiment.
* Closes#13262: Update AGP to 4
* Update to Mozilla Android Components 63.0.20201019090011.
* Update Kotlin to 1.4.10 and Coroutines to 1.3.9.
* Fix new compiler warnings.
* Fix compilation of lint rules module.
* Pin JNA version.
* Fix new lint errors.
Co-authored-by: Tiger Oakes <toakes@mozilla.com>
* For #15937 - Remove the topFrecentSite feature flag
* For #15937 - Hide the "Pull to refresh" preference since its visibility is managed by a feature flag
While the callback receiver is identical in these two methods, they're
semantically different: apply is for initializing the receiver while with
is anything else benefiting from a new `this` receiver.
I didn't change the usage of apply that has a return statement because I
was afraid my change might change behavior.
The new robolectric version changed the behavior such that the app ID
that was returned for our app was `org.mozilla.fenix.debug` instead of
(I guess) `org.mozilla.fenix`. In general, relying on robolectric can be
fragile, such as this case, so it's better to mock. Also, this test
behavior should theoretically have varied between build flavors so
mocking prevents the tests from breaking across flavors.
- Renames CloseTabsSettingsFragment.kt to TabsSettingsFragment.kt
- Renames close_tabs_preferences.xml to tabs_preferences.xml
- Adds preference options for the switching between the Grid and List tab views
The difficulty in mocking StrictMode.resetAfter is concerning.
I'm starting to second-guess whether or not making strict mode manager a class
was a good idea.
I believe this was a premature optimization: it's unclear that it would
actually improve performance and yet we had to add several weird
workarounds to make it work that broke encapsulation. It's also
possible it would be worse for the APK size because of excessive
inlining.
set save button state by calling invalidateOptionsMenu, causing onPrepareOptionsMenu to be called which will enable/disable the save button depending on if changes have been made or not
In a followup PR, we need to add state to strictModeManager (the
number of suppressions). This is much simpler to do when this is defined
as a class rather than an object. However, when this is defined as a
class, `resetAfter` needs access to the strictModeManager. Instead of
passing it in as an argument, it made sense to move this function onto
the strictModeManager instead.
Since folks are used to calling:
```
StrictMode.ThreadPolicy.allowThreadDiskReads().resetAfter
```
We're going to have to add a lint check to prevent them from doing that.
I originally tried to create this PR leaving this as an object to keep
the change simple but it wasn't worth it - once the object started to
keep state, we'd need to manually reset the state between runs. Also,
the tests were already getting hacky with static mocking so it was
easier to address some of those issues this way too.
Additional branching introduces complexity so we should avoid it when
possible. This branch was also unused so it's more likely to have bugs
if we tried to use it after some refactor.