diff --git a/android/android-base/build.gradle b/android/android-base/build.gradle index a1e30ef89..6d7628ea6 100644 --- a/android/android-base/build.gradle +++ b/android/android-base/build.gradle @@ -23,8 +23,8 @@ android { dependencies { implementation "com.google.dagger:dagger:$DAGGER_VERSION" - implementation "com.android.support:design:$SUPPORT_LIBRARY_VERSION" - implementation "com.android.support:appcompat-v7:$SUPPORT_LIBRARY_VERSION" + implementation 'com.google.android.material:material:1.0.0' + implementation 'androidx.appcompat:appcompat:1.0.0' implementation "org.apache.commons:commons-lang3:3.5" annotationProcessor "com.google.dagger:dagger-compiler:$DAGGER_VERSION" diff --git a/android/android-base/src/main/java/org/isoron/androidbase/AndroidBugReporter.java b/android/android-base/src/main/java/org/isoron/androidbase/AndroidBugReporter.java index e50e2b04d..c0b30d1d9 100644 --- a/android/android-base/src/main/java/org/isoron/androidbase/AndroidBugReporter.java +++ b/android/android-base/src/main/java/org/isoron/androidbase/AndroidBugReporter.java @@ -21,9 +21,10 @@ package org.isoron.androidbase; import android.content.*; import android.os.*; -import android.support.annotation.*; import android.view.*; +import androidx.annotation.NonNull; + import java.io.*; import java.text.*; import java.util.*; diff --git a/android/android-base/src/main/java/org/isoron/androidbase/AndroidDirFinder.java b/android/android-base/src/main/java/org/isoron/androidbase/AndroidDirFinder.java index 3e40aed4d..cb61cad60 100644 --- a/android/android-base/src/main/java/org/isoron/androidbase/AndroidDirFinder.java +++ b/android/android-base/src/main/java/org/isoron/androidbase/AndroidDirFinder.java @@ -20,8 +20,10 @@ package org.isoron.androidbase; import android.content.*; -import android.support.annotation.*; -import android.support.v4.content.*; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.content.*; import android.util.*; import org.isoron.androidbase.utils.*; diff --git a/android/android-base/src/main/java/org/isoron/androidbase/BaseExceptionHandler.java b/android/android-base/src/main/java/org/isoron/androidbase/BaseExceptionHandler.java index 3a04b8b4f..6a7e4e4d1 100644 --- a/android/android-base/src/main/java/org/isoron/androidbase/BaseExceptionHandler.java +++ b/android/android-base/src/main/java/org/isoron/androidbase/BaseExceptionHandler.java @@ -19,7 +19,8 @@ package org.isoron.androidbase; -import android.support.annotation.*; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.isoron.androidbase.activities.*; diff --git a/android/android-base/src/main/java/org/isoron/androidbase/SSLContextProvider.java b/android/android-base/src/main/java/org/isoron/androidbase/SSLContextProvider.java index c488bbc16..a522cb023 100644 --- a/android/android-base/src/main/java/org/isoron/androidbase/SSLContextProvider.java +++ b/android/android-base/src/main/java/org/isoron/androidbase/SSLContextProvider.java @@ -20,9 +20,8 @@ package org.isoron.androidbase; import android.content.*; -import android.support.annotation.*; -import org.isoron.androidbase.*; +import androidx.annotation.NonNull; import java.io.*; import java.security.*; diff --git a/android/android-base/src/main/java/org/isoron/androidbase/activities/BaseActivity.java b/android/android-base/src/main/java/org/isoron/androidbase/activities/BaseActivity.java index fae8c82ba..2dea22e50 100644 --- a/android/android-base/src/main/java/org/isoron/androidbase/activities/BaseActivity.java +++ b/android/android-base/src/main/java/org/isoron/androidbase/activities/BaseActivity.java @@ -21,8 +21,9 @@ package org.isoron.androidbase.activities; import android.content.*; import android.os.*; -import android.support.annotation.*; -import android.support.v7.app.*; + +import androidx.annotation.Nullable; +import androidx.appcompat.app.*; import android.view.*; import org.isoron.androidbase.*; diff --git a/android/android-base/src/main/java/org/isoron/androidbase/activities/BaseMenu.java b/android/android-base/src/main/java/org/isoron/androidbase/activities/BaseMenu.java index 7cba01ddc..c5113a3fa 100644 --- a/android/android-base/src/main/java/org/isoron/androidbase/activities/BaseMenu.java +++ b/android/android-base/src/main/java/org/isoron/androidbase/activities/BaseMenu.java @@ -19,9 +19,11 @@ package org.isoron.androidbase.activities; -import android.support.annotation.*; import android.view.*; +import androidx.annotation.MenuRes; +import androidx.annotation.NonNull; + /** * Base class for all the menus in the application. *
diff --git a/android/android-base/src/main/java/org/isoron/androidbase/activities/BaseRootView.java b/android/android-base/src/main/java/org/isoron/androidbase/activities/BaseRootView.java
index 21c0322f7..3ff339387 100644
--- a/android/android-base/src/main/java/org/isoron/androidbase/activities/BaseRootView.java
+++ b/android/android-base/src/main/java/org/isoron/androidbase/activities/BaseRootView.java
@@ -20,8 +20,10 @@
package org.isoron.androidbase.activities;
import android.content.*;
-import android.support.annotation.*;
-import android.support.v7.widget.Toolbar;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.appcompat.widget.Toolbar;
import android.view.*;
import android.widget.*;
diff --git a/android/android-base/src/main/java/org/isoron/androidbase/activities/BaseScreen.java b/android/android-base/src/main/java/org/isoron/androidbase/activities/BaseScreen.java
index f135a6e62..331d91742 100644
--- a/android/android-base/src/main/java/org/isoron/androidbase/activities/BaseScreen.java
+++ b/android/android-base/src/main/java/org/isoron/androidbase/activities/BaseScreen.java
@@ -24,15 +24,19 @@ import android.graphics.*;
import android.graphics.drawable.*;
import android.net.*;
import android.os.*;
-import android.support.annotation.*;
-import android.support.design.widget.*;
-import android.support.v4.content.res.*;
-import android.support.v7.app.*;
-import android.support.v7.view.ActionMode;
-import android.support.v7.widget.Toolbar;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.StringRes;
+import androidx.core.content.res.*;
+import androidx.appcompat.app.*;
+import androidx.appcompat.view.ActionMode;
+import androidx.appcompat.widget.Toolbar;
import android.view.*;
import android.widget.*;
+import com.google.android.material.snackbar.Snackbar;
+
import org.isoron.androidbase.*;
import org.isoron.androidbase.utils.*;
@@ -40,7 +44,7 @@ import java.io.*;
import static android.os.Build.VERSION.SDK_INT;
import static android.os.Build.VERSION_CODES.LOLLIPOP;
-import static android.support.v4.content.FileProvider.getUriForFile;
+import static androidx.core.content.FileProvider.getUriForFile;
/**
* Base class for all screens in the application.
@@ -214,7 +218,7 @@ public class BaseScreen
if (snackbar == null)
{
snackbar = Snackbar.make(rootView, stringId, Snackbar.LENGTH_SHORT);
- int tvId = android.support.design.R.id.snackbar_text;
+ int tvId = R.id.snackbar_text;
TextView tv = (TextView) snackbar.getView().findViewById(tvId);
tv.setTextColor(Color.WHITE);
}
diff --git a/android/android-base/src/main/java/org/isoron/androidbase/activities/BaseSelectionMenu.java b/android/android-base/src/main/java/org/isoron/androidbase/activities/BaseSelectionMenu.java
index 87396e216..a1b486555 100644
--- a/android/android-base/src/main/java/org/isoron/androidbase/activities/BaseSelectionMenu.java
+++ b/android/android-base/src/main/java/org/isoron/androidbase/activities/BaseSelectionMenu.java
@@ -19,8 +19,9 @@
package org.isoron.androidbase.activities;
-import android.support.annotation.*;
-import android.support.v7.view.ActionMode;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.appcompat.view.ActionMode;
import android.view.*;
/**
diff --git a/android/android-base/src/main/java/org/isoron/androidbase/utils/FileUtils.java b/android/android-base/src/main/java/org/isoron/androidbase/utils/FileUtils.java
index 59ca4a9b4..b04f969b8 100644
--- a/android/android-base/src/main/java/org/isoron/androidbase/utils/FileUtils.java
+++ b/android/android-base/src/main/java/org/isoron/androidbase/utils/FileUtils.java
@@ -20,9 +20,11 @@
package org.isoron.androidbase.utils;
import android.os.*;
-import android.support.annotation.*;
import android.util.*;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
import java.io.*;
public abstract class FileUtils
diff --git a/android/android-base/src/main/java/org/isoron/androidbase/utils/InterfaceUtils.java b/android/android-base/src/main/java/org/isoron/androidbase/utils/InterfaceUtils.java
index e1fea418b..e9d484cb1 100644
--- a/android/android-base/src/main/java/org/isoron/androidbase/utils/InterfaceUtils.java
+++ b/android/android-base/src/main/java/org/isoron/androidbase/utils/InterfaceUtils.java
@@ -22,8 +22,10 @@ package org.isoron.androidbase.utils;
import android.content.*;
import android.content.res.*;
import android.graphics.*;
-import android.support.annotation.*;
-import android.support.v4.view.*;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.core.view.*;
import android.util.*;
import android.view.*;
import android.widget.*;
diff --git a/android/android-base/src/main/java/org/isoron/androidbase/utils/StyledResources.java b/android/android-base/src/main/java/org/isoron/androidbase/utils/StyledResources.java
index d15766f95..d00588a90 100644
--- a/android/android-base/src/main/java/org/isoron/androidbase/utils/StyledResources.java
+++ b/android/android-base/src/main/java/org/isoron/androidbase/utils/StyledResources.java
@@ -22,7 +22,9 @@ package org.isoron.androidbase.utils;
import android.content.*;
import android.content.res.*;
import android.graphics.drawable.*;
-import android.support.annotation.*;
+
+import androidx.annotation.AttrRes;
+import androidx.annotation.NonNull;
import org.isoron.androidbase.*;
diff --git a/android/android-pickers/build.gradle b/android/android-pickers/build.gradle
index 02f9aaaaf..0627c16ca 100644
--- a/android/android-pickers/build.gradle
+++ b/android/android-pickers/build.gradle
@@ -20,5 +20,5 @@ android {
}
dependencies {
- implementation "com.android.support:appcompat-v7:$SUPPORT_LIBRARY_VERSION"
+ implementation 'androidx.appcompat:appcompat:1.0.0'
}
diff --git a/android/android-pickers/src/main/java/com/android/colorpicker/ColorPickerDialog.java b/android/android-pickers/src/main/java/com/android/colorpicker/ColorPickerDialog.java
index 1060faf5b..a4f503392 100644
--- a/android/android-pickers/src/main/java/com/android/colorpicker/ColorPickerDialog.java
+++ b/android/android-pickers/src/main/java/com/android/colorpicker/ColorPickerDialog.java
@@ -18,8 +18,8 @@ package com.android.colorpicker;
import android.app.*;
import android.os.*;
-import android.support.v7.app.AlertDialog;
-import android.support.v7.app.*;
+import androidx.appcompat.app.AlertDialog;
+import androidx.appcompat.app.*;
import android.view.*;
import android.widget.*;
diff --git a/android/android-pickers/src/main/java/com/android/datetimepicker/date/MonthView.java b/android/android-pickers/src/main/java/com/android/datetimepicker/date/MonthView.java
index eff8b8186..79cda6b80 100644
--- a/android/android-pickers/src/main/java/com/android/datetimepicker/date/MonthView.java
+++ b/android/android-pickers/src/main/java/com/android/datetimepicker/date/MonthView.java
@@ -21,13 +21,15 @@ import android.content.res.*;
import android.graphics.*;
import android.graphics.Paint.*;
import android.os.*;
-import android.support.v4.view.*;
-import android.support.v4.view.accessibility.*;
-import android.support.v4.widget.*;
+import androidx.core.view.*;
+import androidx.core.view.accessibility.*;
+import androidx.core.widget.*;
import android.text.format.*;
import android.view.*;
import android.view.accessibility.*;
+import androidx.customview.widget.ExploreByTouchHelper;
+
import com.android.*;
import com.android.datetimepicker.*;
import com.android.datetimepicker.date.MonthAdapter.*;
diff --git a/android/android-pickers/src/main/java/com/android/datetimepicker/time/TimePickerDialog.java b/android/android-pickers/src/main/java/com/android/datetimepicker/time/TimePickerDialog.java
index 06c121b3c..b5e021a23 100644
--- a/android/android-pickers/src/main/java/com/android/datetimepicker/time/TimePickerDialog.java
+++ b/android/android-pickers/src/main/java/com/android/datetimepicker/time/TimePickerDialog.java
@@ -23,7 +23,7 @@ import android.app.*;
import android.content.*;
import android.content.res.*;
import android.os.*;
-import android.support.v7.app.*;
+import androidx.appcompat.app.*;
import android.util.*;
import android.view.*;
import android.view.View.*;
diff --git a/android/gradle.properties b/android/gradle.properties
index 52c524fe2..0d3a16351 100644
--- a/android/gradle.properties
+++ b/android/gradle.properties
@@ -14,3 +14,5 @@ BUILD_TOOLS_VERSION = 3.5.3
org.gradle.parallel=false
org.gradle.daemon=true
org.gradle.jvmargs=-Xms2048m -Xmx2048m -XX:MaxPermSize=2048m
+android.useAndroidX=true
+android.enableJetifier=true
diff --git a/android/uhabits-android/build.gradle b/android/uhabits-android/build.gradle
index 3db986e8c..521f4f19a 100644
--- a/android/uhabits-android/build.gradle
+++ b/android/uhabits-android/build.gradle
@@ -31,7 +31,7 @@ android {
targetSdkVersion TARGET_SDK_VERSION as Integer
applicationId "org.isoron.uhabits"
- testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
@@ -76,10 +76,10 @@ dependencies {
implementation project(":android-base")
implementation project(":android-pickers")
- implementation "com.android.support:appcompat-v7:$SUPPORT_LIBRARY_VERSION"
- implementation "com.android.support:design:$SUPPORT_LIBRARY_VERSION"
- implementation "com.android.support:preference-v14:$SUPPORT_LIBRARY_VERSION"
- implementation "com.android.support:support-v4:$SUPPORT_LIBRARY_VERSION"
+ implementation 'androidx.appcompat:appcompat:1.0.0'
+ implementation 'com.google.android.material:material:1.0.0'
+ implementation 'androidx.legacy:legacy-preference-v14:1.0.0'
+ implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation "com.github.paolorotolo:appintro:3.4.0"
implementation "com.google.dagger:dagger:$DAGGER_VERSION"
implementation "com.jakewharton:butterknife:8.6.1-SNAPSHOT"
@@ -91,19 +91,19 @@ dependencies {
compileOnly "javax.annotation:jsr250-api:1.0"
compileOnly "com.google.auto.factory:auto-factory:$AUTO_FACTORY_VERSION"
kapt "com.google.dagger:dagger-compiler:$DAGGER_VERSION"
- kapt "com.jakewharton:butterknife-compiler:9.0.0"
+ kapt "com.jakewharton:butterknife-compiler:10.2.1"
annotationProcessor "com.google.auto.factory:auto-factory:$AUTO_FACTORY_VERSION"
- androidTestImplementation "com.android.support.test.espresso:espresso-contrib:2.2.2"
- androidTestImplementation "com.android.support.test.espresso:espresso-core:2.2.2"
- androidTestImplementation "com.android.support.test.uiautomator:uiautomator-v18:2.1.1"
+ androidTestImplementation 'androidx.test.espresso:espresso-contrib:3.1.0'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0'
+ androidTestImplementation 'androidx.test.uiautomator:uiautomator:2.2.0'
androidTestImplementation "com.google.dagger:dagger:$DAGGER_VERSION"
androidTestImplementation "com.linkedin.testbutler:test-butler-library:1.3.1"
androidTestCompileOnly "com.google.auto.factory:auto-factory:$AUTO_FACTORY_VERSION"
androidTestAnnotationProcessor "com.google.auto.factory:auto-factory:$AUTO_FACTORY_VERSION"
- androidTestImplementation "com.android.support:support-annotations:$SUPPORT_LIBRARY_VERSION"
- androidTestImplementation "com.android.support.test:rules:0.5"
- androidTestImplementation "com.android.support.test:runner:0.5"
+ androidTestImplementation 'androidx.annotation:annotation:1.0.0'
+ androidTestImplementation 'androidx.test:rules:1.1.1'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation "com.google.guava:guava:24.1-android"
androidTestImplementation project(":uhabits-core")
kaptAndroidTest "com.google.dagger:dagger-compiler:$DAGGER_VERSION"
diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java
index 714299396..f7b351e36 100644
--- a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java
+++ b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseAndroidTest.java
@@ -23,11 +23,15 @@ import android.appwidget.*;
import android.content.*;
import android.content.res.*;
import android.os.*;
-import android.support.annotation.*;
-import android.support.test.*;
-import android.support.test.filters.*;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.StyleRes;
+import androidx.test.*;
+import androidx.test.filters.*;
import android.util.*;
+import androidx.test.platform.app.InstrumentationRegistry;
+
import junit.framework.*;
import org.isoron.androidbase.*;
@@ -80,8 +84,8 @@ public class BaseAndroidTest extends TestCase
{
if (Looper.myLooper() == null) Looper.prepare();
- targetContext = InstrumentationRegistry.getTargetContext();
- testContext = InstrumentationRegistry.getContext();
+ targetContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
+ testContext = InstrumentationRegistry.getInstrumentation().getContext();
DateUtils.setFixedLocalTime(FIXED_LOCAL_TIME);
setResolution(2.0f);
diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseUserInterfaceTest.java b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseUserInterfaceTest.java
index 142de3e92..f8c62a2c6 100644
--- a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseUserInterfaceTest.java
+++ b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseUserInterfaceTest.java
@@ -20,7 +20,8 @@
package org.isoron.uhabits;
import android.content.*;
-import android.support.test.uiautomator.*;
+
+import androidx.test.uiautomator.*;
import com.linkedin.android.testbutler.*;
@@ -30,8 +31,10 @@ import org.isoron.uhabits.core.ui.screens.habits.list.*;
import org.isoron.uhabits.core.utils.*;
import org.junit.*;
-import static android.support.test.InstrumentationRegistry.*;
-import static android.support.test.uiautomator.UiDevice.*;
+import static androidx.test.InstrumentationRegistry.getContext;
+import static androidx.test.InstrumentationRegistry.getTargetContext;
+import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
+import static androidx.test.uiautomator.UiDevice.*;
public class BaseUserInterfaceTest
{
diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseViewTest.java b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseViewTest.java
index 62f4841d4..fcd6ff9f6 100644
--- a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseViewTest.java
+++ b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/BaseViewTest.java
@@ -20,11 +20,14 @@
package org.isoron.uhabits;
import android.graphics.*;
-import android.support.annotation.*;
-import android.support.test.*;
+
+import androidx.annotation.NonNull;
+import androidx.test.*;
import android.view.*;
import android.widget.*;
+import androidx.test.platform.app.InstrumentationRegistry;
+
import org.isoron.androidbase.*;
import org.isoron.androidbase.utils.*;
import org.isoron.uhabits.widgets.*;
diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitsApplicationTest.java b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitsApplicationTest.java
index ea625adc6..222d7e93f 100644
--- a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitsApplicationTest.java
+++ b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitsApplicationTest.java
@@ -19,8 +19,10 @@
package org.isoron.uhabits;
-import android.support.test.filters.*;
-import android.support.test.runner.*;
+import androidx.test.filters.*;
+import androidx.test.runner.*;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.isoron.androidbase.*;
import org.junit.*;
diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/AboutTest.java b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/AboutTest.java
index 7fcd2d312..6ee63aba6 100644
--- a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/AboutTest.java
+++ b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/AboutTest.java
@@ -19,8 +19,10 @@
package org.isoron.uhabits.acceptance;
-import android.support.test.filters.*;
-import android.support.test.runner.*;
+import androidx.test.filters.*;
+import androidx.test.runner.*;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.isoron.uhabits.*;
import org.junit.*;
diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/HabitsTest.java b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/HabitsTest.java
index 035e0c150..8901f177b 100644
--- a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/HabitsTest.java
+++ b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/HabitsTest.java
@@ -19,8 +19,10 @@
package org.isoron.uhabits.acceptance;
-import android.support.test.filters.*;
-import android.support.test.runner.*;
+import androidx.test.filters.*;
+import androidx.test.runner.*;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.isoron.uhabits.*;
import org.junit.*;
diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/LinksTest.java b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/LinksTest.java
index fc0a729d1..e229b34e2 100644
--- a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/LinksTest.java
+++ b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/LinksTest.java
@@ -19,8 +19,10 @@
package org.isoron.uhabits.acceptance;
-import android.support.test.filters.*;
-import android.support.test.runner.*;
+import androidx.test.filters.*;
+import androidx.test.runner.*;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.isoron.uhabits.*;
import org.junit.*;
diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/WidgetTest.java b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/WidgetTest.java
index f5bcb4285..2c0f89527 100644
--- a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/WidgetTest.java
+++ b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/WidgetTest.java
@@ -19,7 +19,7 @@
package org.isoron.uhabits.acceptance;
-import android.support.test.filters.*;
+import androidx.test.filters.*;
import org.isoron.uhabits.*;
import org.junit.*;
diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/CommonSteps.java b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/CommonSteps.java
index 0a7c2646b..967a6b70d 100644
--- a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/CommonSteps.java
+++ b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/CommonSteps.java
@@ -19,22 +19,24 @@
package org.isoron.uhabits.acceptance.steps;
-import android.support.annotation.*;
-import android.support.test.espresso.*;
-import android.support.test.espresso.contrib.*;
-import android.support.test.uiautomator.*;
-import android.support.v7.widget.*;
+import androidx.annotation.StringRes;
+import androidx.test.espresso.*;
+import androidx.test.espresso.contrib.*;
+import androidx.test.uiautomator.*;
+import androidx.appcompat.widget.*;
+
+import androidx.recyclerview.widget.RecyclerView;
import org.isoron.uhabits.*;
import org.isoron.uhabits.R;
import org.isoron.uhabits.activities.habits.list.*;
import static android.os.Build.VERSION.*;
-import static android.support.test.espresso.Espresso.*;
-import static android.support.test.espresso.action.ViewActions.*;
-import static android.support.test.espresso.assertion.PositionAssertions.*;
-import static android.support.test.espresso.assertion.ViewAssertions.*;
-import static android.support.test.espresso.matcher.ViewMatchers.*;
+import static androidx.test.espresso.Espresso.*;
+import static androidx.test.espresso.action.ViewActions.*;
+import static androidx.test.espresso.assertion.PositionAssertions.*;
+import static androidx.test.espresso.assertion.ViewAssertions.*;
+import static androidx.test.espresso.matcher.ViewMatchers.*;
import static junit.framework.Assert.*;
import static org.hamcrest.CoreMatchers.*;
diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/EditHabitSteps.java b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/EditHabitSteps.java
index 56440730c..90293cc24 100644
--- a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/EditHabitSteps.java
+++ b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/EditHabitSteps.java
@@ -19,14 +19,14 @@
package org.isoron.uhabits.acceptance.steps;
-import android.support.test.uiautomator.*;
+import androidx.test.uiautomator.*;
import org.isoron.uhabits.*;
-import static android.support.test.espresso.Espresso.*;
-import static android.support.test.espresso.action.ViewActions.*;
-import static android.support.test.espresso.action.ViewActions.closeSoftKeyboard;
-import static android.support.test.espresso.matcher.ViewMatchers.*;
+import static androidx.test.espresso.Espresso.*;
+import static androidx.test.espresso.action.ViewActions.*;
+import static androidx.test.espresso.action.ViewActions.closeSoftKeyboard;
+import static androidx.test.espresso.matcher.ViewMatchers.*;
import static org.isoron.uhabits.BaseUserInterfaceTest.*;
public class EditHabitSteps
diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/ListHabitsSteps.java b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/ListHabitsSteps.java
index fe93da24e..99d739e1f 100644
--- a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/ListHabitsSteps.java
+++ b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/ListHabitsSteps.java
@@ -19,7 +19,7 @@
package org.isoron.uhabits.acceptance.steps;
-import android.support.test.espresso.*;
+import androidx.test.espresso.*;
import android.view.*;
import org.hamcrest.*;
@@ -28,15 +28,15 @@ import org.isoron.uhabits.activities.habits.list.views.*;
import java.util.*;
-import static android.support.test.espresso.Espresso.onView;
-import static android.support.test.espresso.action.ViewActions.click;
-import static android.support.test.espresso.matcher.ViewMatchers.hasDescendant;
-import static android.support.test.espresso.matcher.ViewMatchers.isEnabled;
-import static android.support.test.espresso.matcher.ViewMatchers.withClassName;
-import static android.support.test.espresso.matcher.ViewMatchers.withContentDescription;
-import static android.support.test.espresso.matcher.ViewMatchers.withId;
-import static android.support.test.espresso.matcher.ViewMatchers.withParent;
-import static android.support.test.espresso.matcher.ViewMatchers.withText;
+import static androidx.test.espresso.Espresso.onView;
+import static androidx.test.espresso.action.ViewActions.click;
+import static androidx.test.espresso.matcher.ViewMatchers.hasDescendant;
+import static androidx.test.espresso.matcher.ViewMatchers.isEnabled;
+import static androidx.test.espresso.matcher.ViewMatchers.withClassName;
+import static androidx.test.espresso.matcher.ViewMatchers.withContentDescription;
+import static androidx.test.espresso.matcher.ViewMatchers.withId;
+import static androidx.test.espresso.matcher.ViewMatchers.withParent;
+import static androidx.test.espresso.matcher.ViewMatchers.withText;
import static org.hamcrest.CoreMatchers.*;
import static org.isoron.uhabits.BaseUserInterfaceTest.device;
import static org.isoron.uhabits.acceptance.steps.CommonSteps.clickText;
diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/WidgetSteps.java b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/WidgetSteps.java
index c8d70f22c..3cb5a201c 100644
--- a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/WidgetSteps.java
+++ b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/acceptance/steps/WidgetSteps.java
@@ -19,7 +19,7 @@
package org.isoron.uhabits.acceptance.steps;
-import android.support.test.uiautomator.*;
+import androidx.test.uiautomator.*;
import static android.os.Build.VERSION.SDK_INT;
import static junit.framework.Assert.*;
diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/BarChartTest.java b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/BarChartTest.java
index 5a5b4255c..832b6c78f 100644
--- a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/BarChartTest.java
+++ b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/BarChartTest.java
@@ -19,8 +19,10 @@
package org.isoron.uhabits.activities.common.views;
-import android.support.test.filters.*;
-import android.support.test.runner.*;
+import androidx.test.filters.*;
+import androidx.test.runner.*;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.isoron.uhabits.*;
import org.isoron.uhabits.core.models.*;
diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/FrequencyChartTest.java b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/FrequencyChartTest.java
index eaf1c2568..ff492ef41 100644
--- a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/FrequencyChartTest.java
+++ b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/FrequencyChartTest.java
@@ -19,8 +19,10 @@
package org.isoron.uhabits.activities.common.views;
-import android.support.test.filters.*;
-import android.support.test.runner.*;
+import androidx.test.filters.*;
+import androidx.test.runner.*;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.isoron.uhabits.*;
import org.isoron.uhabits.core.models.*;
diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/HistoryChartTest.java b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/HistoryChartTest.java
index e4d1ba763..d3fef3755 100644
--- a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/HistoryChartTest.java
+++ b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/HistoryChartTest.java
@@ -19,8 +19,10 @@
package org.isoron.uhabits.activities.common.views;
-import android.support.test.filters.*;
-import android.support.test.runner.*;
+import androidx.test.filters.*;
+import androidx.test.runner.*;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.isoron.uhabits.*;
import org.isoron.uhabits.core.models.*;
diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/RingViewTest.java b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/RingViewTest.java
index 3b6907ca5..55f994e4a 100644
--- a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/RingViewTest.java
+++ b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/RingViewTest.java
@@ -20,8 +20,10 @@
package org.isoron.uhabits.activities.common.views;
import android.graphics.*;
-import android.support.test.filters.*;
-import android.support.test.runner.*;
+import androidx.test.filters.*;
+import androidx.test.runner.*;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.isoron.uhabits.*;
import org.isoron.uhabits.utils.*;
diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/ScoreChartTest.java b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/ScoreChartTest.java
index 759d2e714..216392129 100644
--- a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/ScoreChartTest.java
+++ b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/ScoreChartTest.java
@@ -19,8 +19,10 @@
package org.isoron.uhabits.activities.common.views;
-import android.support.test.filters.*;
-import android.support.test.runner.*;
+import androidx.test.filters.*;
+import androidx.test.runner.*;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.isoron.uhabits.*;
import org.isoron.uhabits.core.models.*;
diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/StreakChartTest.java b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/StreakChartTest.java
index c145b4799..fc82e1b5f 100644
--- a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/StreakChartTest.java
+++ b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/StreakChartTest.java
@@ -19,8 +19,10 @@
package org.isoron.uhabits.activities.common.views;
-import android.support.test.filters.*;
-import android.support.test.runner.*;
+import androidx.test.filters.*;
+import androidx.test.runner.*;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.isoron.uhabits.*;
import org.isoron.uhabits.core.models.*;
diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonViewTest.kt b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonViewTest.kt
index 9c6e52533..41dc80c0a 100644
--- a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonViewTest.kt
+++ b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonViewTest.kt
@@ -19,8 +19,9 @@
package org.isoron.uhabits.activities.habits.list.views
-import android.support.test.filters.*
-import android.support.test.runner.*
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.*
+import androidx.test.runner.*
import org.isoron.uhabits.*
import org.isoron.uhabits.core.models.*
import org.isoron.uhabits.utils.*
diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelViewTest.kt b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelViewTest.kt
index bfe411cb6..024b0fa7f 100644
--- a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelViewTest.kt
+++ b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkPanelViewTest.kt
@@ -19,8 +19,9 @@
package org.isoron.uhabits.activities.habits.list.views
-import android.support.test.filters.*
-import android.support.test.runner.*
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.*
+import androidx.test.runner.*
import org.hamcrest.CoreMatchers.*
import org.hamcrest.MatcherAssert.*
import org.isoron.uhabits.*
diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HabitCardViewTest.kt b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HabitCardViewTest.kt
index 5660b862e..19a482136 100644
--- a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HabitCardViewTest.kt
+++ b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HabitCardViewTest.kt
@@ -19,8 +19,9 @@
package org.isoron.uhabits.activities.habits.list.views
-import android.support.test.filters.*
-import android.support.test.runner.*
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.*
+import androidx.test.runner.*
import org.isoron.uhabits.*
import org.isoron.uhabits.core.models.*
import org.junit.*
diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HeaderViewTest.java b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HeaderViewTest.java
index 4c347c2a5..71f203e40 100644
--- a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HeaderViewTest.java
+++ b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HeaderViewTest.java
@@ -19,8 +19,10 @@
package org.isoron.uhabits.activities.habits.list.views;
-import android.support.test.filters.*;
-import android.support.test.runner.*;
+import androidx.test.filters.*;
+import androidx.test.runner.*;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.isoron.uhabits.*;
import org.isoron.uhabits.core.preferences.*;
diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HintViewTest.java b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HintViewTest.java
index 2bae80483..b6baabb30 100644
--- a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HintViewTest.java
+++ b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/HintViewTest.java
@@ -19,8 +19,10 @@
package org.isoron.uhabits.activities.habits.list.views;
-import android.support.test.filters.*;
-import android.support.test.runner.*;
+import androidx.test.filters.*;
+import androidx.test.runner.*;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.isoron.uhabits.*;
import org.isoron.uhabits.core.ui.screens.habits.list.*;
diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonViewTest.kt b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonViewTest.kt
index d64830e21..1c83fdb4b 100644
--- a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonViewTest.kt
+++ b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonViewTest.kt
@@ -19,8 +19,9 @@
package org.isoron.uhabits.activities.habits.list.views
-import android.support.test.filters.*
-import android.support.test.runner.*
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.*
+import androidx.test.runner.*
import org.hamcrest.CoreMatchers.*
import org.hamcrest.MatcherAssert.*
import org.isoron.uhabits.*
diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/NumberPanelViewTest.kt b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/NumberPanelViewTest.kt
index 616c00c4e..2a660b2a0 100644
--- a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/NumberPanelViewTest.kt
+++ b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/list/views/NumberPanelViewTest.kt
@@ -19,8 +19,9 @@
package org.isoron.uhabits.activities.habits.list.views
-import android.support.test.filters.*
-import android.support.test.runner.*
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.*
+import androidx.test.runner.*
import org.hamcrest.CoreMatchers.*
import org.hamcrest.MatcherAssert.*
import org.isoron.uhabits.*
diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/FrequencyCardTest.java b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/FrequencyCardTest.java
index 571f00c41..d8ceac381 100644
--- a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/FrequencyCardTest.java
+++ b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/FrequencyCardTest.java
@@ -19,10 +19,12 @@
package org.isoron.uhabits.activities.habits.show.views;
-import android.support.test.filters.*;
-import android.support.test.runner.*;
+import androidx.test.filters.*;
+import androidx.test.runner.*;
import android.view.*;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
import org.isoron.uhabits.*;
import org.isoron.uhabits.core.models.*;
import org.junit.*;
diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/HistoryCardTest.java b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/HistoryCardTest.java
index 1313e8afc..a912f24a7 100644
--- a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/HistoryCardTest.java
+++ b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/HistoryCardTest.java
@@ -19,10 +19,12 @@
package org.isoron.uhabits.activities.habits.show.views;
-import android.support.test.filters.*;
-import android.support.test.runner.*;
+import androidx.test.filters.*;
+import androidx.test.runner.*;
import android.view.*;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
import org.isoron.uhabits.*;
import org.isoron.uhabits.core.models.*;
import org.junit.*;
diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/OverviewCardTest.java b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/OverviewCardTest.java
index 82b28ef76..9afe0014d 100644
--- a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/OverviewCardTest.java
+++ b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/OverviewCardTest.java
@@ -19,10 +19,12 @@
package org.isoron.uhabits.activities.habits.show.views;
-import android.support.test.filters.*;
-import android.support.test.runner.*;
+import androidx.test.filters.*;
+import androidx.test.runner.*;
import android.view.*;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
import org.isoron.uhabits.*;
import org.isoron.uhabits.core.models.*;
import org.junit.*;
diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/ScoreCardTest.java b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/ScoreCardTest.java
index 39aee8640..51901e896 100644
--- a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/ScoreCardTest.java
+++ b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/ScoreCardTest.java
@@ -19,10 +19,12 @@
package org.isoron.uhabits.activities.habits.show.views;
-import android.support.test.filters.*;
-import android.support.test.runner.*;
+import androidx.test.filters.*;
+import androidx.test.runner.*;
import android.view.*;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
import org.isoron.uhabits.*;
import org.isoron.uhabits.core.models.*;
import org.junit.*;
diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/StreakCardTest.java b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/StreakCardTest.java
index 07927bccb..ebe8aed46 100644
--- a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/StreakCardTest.java
+++ b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/StreakCardTest.java
@@ -19,10 +19,12 @@
package org.isoron.uhabits.activities.habits.show.views;
-import android.support.test.filters.*;
-import android.support.test.runner.*;
+import androidx.test.filters.*;
+import androidx.test.runner.*;
import android.view.*;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
import org.isoron.uhabits.*;
import org.isoron.uhabits.core.models.*;
import org.junit.*;
diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/SubtitleCardTest.java b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/SubtitleCardTest.java
index eb29d1155..8c0f3763e 100644
--- a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/SubtitleCardTest.java
+++ b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/SubtitleCardTest.java
@@ -19,10 +19,12 @@
package org.isoron.uhabits.activities.habits.show.views;
-import android.support.test.filters.*;
-import android.support.test.runner.*;
+import androidx.test.filters.*;
+import androidx.test.runner.*;
import android.view.*;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
import org.isoron.uhabits.*;
import org.isoron.uhabits.core.models.*;
import org.junit.*;
diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/performance/PerformanceTest.java b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/performance/PerformanceTest.java
index 49ea79bc4..0dba9879f 100644
--- a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/performance/PerformanceTest.java
+++ b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/performance/PerformanceTest.java
@@ -19,8 +19,10 @@
package org.isoron.uhabits.performance;
-import android.support.test.filters.*;
-import android.support.test.runner.*;
+import androidx.test.filters.*;
+import androidx.test.runner.*;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.isoron.uhabits.*;
import org.isoron.uhabits.core.models.*;
diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/regression/SavedStateTest.kt b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/regression/SavedStateTest.kt
index 1418c56c7..5d783ad1f 100644
--- a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/regression/SavedStateTest.kt
+++ b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/regression/SavedStateTest.kt
@@ -19,7 +19,7 @@
package org.isoron.uhabits.regression
-import android.support.test.filters.*
+import androidx.test.filters.*
import org.isoron.uhabits.*
import org.junit.*
diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportCSVTaskTest.java b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportCSVTaskTest.java
index 0546713fa..9ae51a618 100644
--- a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportCSVTaskTest.java
+++ b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportCSVTaskTest.java
@@ -19,8 +19,10 @@
package org.isoron.uhabits.tasks;
-import android.support.test.filters.*;
-import android.support.test.runner.*;
+import androidx.test.filters.*;
+import androidx.test.runner.*;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.isoron.uhabits.*;
import org.junit.*;
diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportDBTaskTest.java b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportDBTaskTest.java
index 1033233b4..c383c9338 100644
--- a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportDBTaskTest.java
+++ b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/tasks/ExportDBTaskTest.java
@@ -19,8 +19,10 @@
package org.isoron.uhabits.tasks;
-import android.support.test.filters.*;
-import android.support.test.runner.*;
+import androidx.test.filters.*;
+import androidx.test.runner.*;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.isoron.uhabits.*;
import org.junit.*;
diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/CheckmarkWidgetTest.java b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/CheckmarkWidgetTest.java
index d0b14553b..0aeb4762f 100644
--- a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/CheckmarkWidgetTest.java
+++ b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/CheckmarkWidgetTest.java
@@ -19,10 +19,12 @@
package org.isoron.uhabits.widgets;
-import android.support.test.filters.*;
-import android.support.test.runner.*;
+import androidx.test.filters.*;
+import androidx.test.runner.*;
import android.widget.*;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
import org.isoron.uhabits.*;
import org.isoron.uhabits.core.models.*;
import org.junit.*;
diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/FrequencyWidgetTest.java b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/FrequencyWidgetTest.java
index 6739322ce..31a459af3 100644
--- a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/FrequencyWidgetTest.java
+++ b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/FrequencyWidgetTest.java
@@ -19,10 +19,12 @@
package org.isoron.uhabits.widgets;
-import android.support.test.filters.*;
-import android.support.test.runner.*;
+import androidx.test.filters.*;
+import androidx.test.runner.*;
import android.widget.*;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
import org.isoron.uhabits.*;
import org.isoron.uhabits.core.models.*;
import org.junit.*;
diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/HistoryWidgetTest.java b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/HistoryWidgetTest.java
index bbab26e67..f059d99c1 100644
--- a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/HistoryWidgetTest.java
+++ b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/HistoryWidgetTest.java
@@ -19,10 +19,12 @@
package org.isoron.uhabits.widgets;
-import android.support.test.filters.*;
-import android.support.test.runner.*;
+import androidx.test.filters.*;
+import androidx.test.runner.*;
import android.widget.*;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
import org.isoron.uhabits.*;
import org.isoron.uhabits.core.models.*;
import org.junit.*;
diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/ScoreWidgetTest.java b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/ScoreWidgetTest.java
index 7af5ea3fb..550984b65 100644
--- a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/ScoreWidgetTest.java
+++ b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/ScoreWidgetTest.java
@@ -19,10 +19,12 @@
package org.isoron.uhabits.widgets;
-import android.support.test.filters.*;
-import android.support.test.runner.*;
+import androidx.test.filters.*;
+import androidx.test.runner.*;
import android.widget.*;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
import org.isoron.uhabits.*;
import org.isoron.uhabits.core.models.*;
import org.junit.*;
diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/StreakWidgetTest.java b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/StreakWidgetTest.java
index 91d0cf696..a9d4e6f8f 100644
--- a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/StreakWidgetTest.java
+++ b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/StreakWidgetTest.java
@@ -19,10 +19,12 @@
package org.isoron.uhabits.widgets;
-import android.support.test.filters.*;
-import android.support.test.runner.*;
+import androidx.test.filters.*;
+import androidx.test.runner.*;
import android.widget.*;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
import org.isoron.uhabits.*;
import org.isoron.uhabits.core.models.*;
import org.junit.*;
diff --git a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetViewTest.java b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetViewTest.java
index a40ac45c9..f0354a5d5 100644
--- a/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetViewTest.java
+++ b/android/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetViewTest.java
@@ -19,8 +19,10 @@
package org.isoron.uhabits.widgets.views;
-import android.support.test.filters.*;
-import android.support.test.runner.*;
+import androidx.test.filters.*;
+import androidx.test.runner.*;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.isoron.uhabits.*;
import org.isoron.uhabits.core.models.*;
diff --git a/android/uhabits-android/src/main/AndroidManifest.xml b/android/uhabits-android/src/main/AndroidManifest.xml
index acf3695c0..0c298306b 100644
--- a/android/uhabits-android/src/main/AndroidManifest.xml
+++ b/android/uhabits-android/src/main/AndroidManifest.xml
@@ -210,7 +210,7 @@