We can't see the private API that we interact with on the OS, but after
some internal investigation it appears that there might be an upper
limit to the request code we can use.
For now, let's try a value similar to that use in the GVE code to see
our requests are failing because of that.
The awesomeBar was set to stay hidden for the first consumeFrom(store) if the SearchDialogFragment.kt. However, recent changes send an additional store update when the view is created. To work around it we can take a look at AwesomeBarView.update(), we see that the awesomeBar suggestions get provided only if the query != url. So we can use the same method to keep the awesomeBar hidden until the user changes anything in the url.
When testing out WebAuthn support with the privileged API,
we need our app to be signed by an allowed signing key.
We're seeing our tests fail with this error when testing locally:
```
[FidoApiImpl] updateTransaction is called for stop
[FidoApiImpl] finishSecurityKeyRequestController should not be called when SecurityKeyRequestController is null.
```
Our theory is that if we try this code on our signed APK, we should see
it work.
I validated:
- that the log statement appeared in Nightly but not in Beta.
- that the local runtimes of our perftest increased (the median diff is 124ms)
* Closes https://github.com/mozilla-mobile/fenix/issues/14009: Fix onboarding 'Sign in to Firefox' ripple effect
* For https://github.com/mozilla-mobile/fenix/issues/14009: Add 'onboarding_padded_background_color' instead of rely on OS theme/color
Both previous solution, '?android:attr/colorControlHighlight' and '@color/ripple_material_light' were using a OS theme attr or color, which caused problems. To fix it, we introduced a 'onboarding_padded_background_color' which manually define the ripple effect color of the onboarding manual sign in button.
* For https://github.com/mozilla-mobile/fenix/issues/16373: Added performance Inflater to counter # of inflations
This class is quite straight forward. The only thing that I have to point out is the onCreateView method. It usually
calls its super if you don't override it. The problem with that is that the super.onCreateView actually uses
android.view. as a prefix for the XML element it tries to inflate. So if we have an element that isn't part
of that package, it'll crash. As I said in the code, a good example is ImageButton. Calling android.view.ImageButton
will make the app crash. The method is implemented the same way that PhoneLayoutInflater does (Another example
is the AsyncLayoutInflater)
* For https://github.com/mozilla-mobile/fenix/issues/16373: Added test for PerformanceInflater
This test got quite awkward / complicated fast. I wanted to test the to make sure we don't break *any* of our layouts
and to do so, I decided to just retrieve all our XML in our /res/layout folder. However, this gets quite a bit outside of a unit test scope.
The point was to get every layouts and get their LayoutID through the resources using the testContext we have. It gets even weirder, since some
of the XML tags have special implementation in android. One of them is the <fragment> tag. That tag actually is inflated by the OS using the Factory2
that the Activity.java implements. In order to get around the fragment issue, we just return a basic FrameLayout since the system LayoutInflater doesn't deal
won't ever get a <fragment> tag to inflate. Another issue was the <merge> tag. In order to inflate those, you need 1) a root view and 2) attach your view to it.
In order to be able to test those layouts file, I had to create an empty FrameLayout and use it as the root view for testing. Again, I know this is beyond the spirit of a unit test but if we use this inflater, I think it should make sure that no layouts are broken by it.
* For https://github.com/mozilla-mobile/fenix/issues/16373: Overrode getSystemService to return PerformanceInflater
This allows PerformanceInflater to be called in every inflation to keep track of the number of inflations we do.
* For https://github.com/mozilla-mobile/fenix/issues/16373: Added UI test for # of inflations
* For https://github.com/mozilla-mobile/fenix/issues/16373: Lint fix
* For #167373: Changed the LayoutInflater cloneInContext to take this instead of inflater
The inflater parameter is set on the first call from the OS from the Window object. However, the activity itself sets multiple factories on the inflater
during its creation (usually through AppCompatDelegateImpl.java). This means that, once we initially set the inflater with a null check, we pass an inflater
that has no factory initially. However, since we keep a reference to it, when cloneInContext was called, it cloned the inflater with the original inflater
which didn't have any factories set up. This meant that the app would crash on either browserFragment creation or any thing that required appCompat (such as
ImageView and ImageButton). Now, passing itself with a cloneInContext means we keep all the factories initially set by the activity or the fragment.
* For https://github.com/mozilla-mobile/fenix/issues/16373: Fixed code issues for PR. No behavior change
* For https://github.com/mozilla-mobile/fenix/issues/16373: fixed some code nits
* For https://github.com/mozilla-mobile/fenix/issues/11580 - Tracks text selection context menu usage
Tracks Copy, Search, Select All and Share items from the text selection context menu. Uses AC's DefaultSelectionActionDelegate to achieve this.
Co-authored-by: Gabriel Luong <gabriel.luong@gmail.com>