| Age | Commit message (Collapse) | Author | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
A comment is added to clarify that `runBlocking` is used intentionally
to prevent tests from skipping delays. The `suspend` modifier, which
was redundant, has been removed from the `generateTraffic` function.
|
|
|
|
|
|
|
|
To improve startup performance this
PR adds a baseline profile generation module in test/baselineprofile.
The baseline profile plugin requires Junit4 so that is also added as a
dependency.
A baseline-prof.txt was also generated by running
`./gradlew generatePlayProdReleaseBaselineProfile` and checked in.
The tests that generate the baselineprofile currently only start the app
and accepts the privacy policy. This should be improved later on to
improve the startup performance.
|
|
|
|
|
|
|
|
|
|
|
|
Sets the default relay selection to the current country (as determined
by am.i.mullvad.net). If the current country does not have any relays
the country with the closest relay is choosen instead.
In non-release builds of the Android app we do not bundle a relay list
in the APK, and the relay list is fetched when the user logs in.
So one of the following can happen:
1. Geolocation request returns, we have a relay list.
2. Geolocation request returns, we do not yet have a relay list.
3. Relay list request returns, we have a geolocation.
4. Relay list request returns, we do not have a geolocation.
In 1. and 3. we can update the default location. In 2. we have to wait
until the relay list is fetched from the api until we can update the
default location. 4. is unlikely to happen but could happen if
am.i.mullvad is down.
|
|
|
|
App module had transitive dependencies using a older version at runtime
of serializationx. However, when compiling the test:e2e module a later
version than 1.8.0 was used through ktor. This caused deserialization
in runtime to go looking for a method that didn't exist. By putting an
explicit version in the app module we make sure to use a version that
is compatible with ktor.
|
|
|
|
|
|
Adds a custom detekt rule that checks that all Screen and Dialog
composables are called with only named arguments.
|
|
|
|
|
|
|
|
|
|
|
|
Instead of scheduling system notifications from a flow we now
schedule them independently from the app lifecycle via AlarmManager.
This is done so that for example an expiry notification that the user
dismissed won't get redisplayed if the app process gets killed and
then restarted.
When the account exiry time is fetched we schedule an alarm that will
show a notification 3 days before the account time expires. This alarm
then also schedules a new alarm to show the following notification and
so on.
To make this work this PR also introduces two new broadcast receivers;
one on boot received listener and one on time time/timezone changed
listener.
Beause Android clears alarms when the devices is rebooted/the time is
changed we need these listeners to re-trigger the alarm.
To enable the broadcast receivers to re-trigger the alarm we also have
to persist the expiry time in the DataStore preferences.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Previously we did a DNS lookup for Stagemole and Devmole however, this
causes problem when starting the app with no internet and is different
from how the app performs in production mode. This commit removes that
logic in order to align closer to what we expect in prod.
|
|
|
|
This commit does multiple changes to how we work with properties.
- Instead of relying on `e2e.properties` and `local.properties` only use
the `gradle.properties` as per standard gradle.
- Naming of properties are changed to have a coherent structure.
- Allow for setting stagemole and prod account separately.
- Consolidate all the default values into `gradle.properties`
|
|
|
|
|
|
|
|
NullPointerException was probably caused by the active window being
changing while we called `waitForStableInActiveWindow`.
|
|
Converts all our last test to use the Page object pattern and clean up
a bunch of old MockApi and E2E test logic.
|
|
|
|
|
|
The device mangement test would fail because it expect the device to be
removed however it was in a loading state while API request was being
made. This commit allows it to be visible intiailly (loading) and then
expects it to be removed.
|
|
|
|
|
|
|
|
|
|
|