Bläddra i källkod

switch to AndroidX

Signed-off-by: tobiasKaminsky <tobias@kaminsky.me>
tobiasKaminsky 6 år sedan
förälder
incheckning
59cf6b9ba4
100 ändrade filer med 541 tillägg och 480 borttagningar
  1. 17 18
      build.gradle
  2. 2 0
      gradle.properties
  3. 1 1
      scripts/analysis/lint-results.txt
  4. 10 10
      src/androidTest/disabledTests/screenshots/ScreenshotsIT.java
  5. 8 7
      src/androidTest/disabledTests/uiautomator/InitialTest.java
  6. 3 2
      src/androidTest/java/com/owncloud/android/AbstractIT.java
  7. 3 3
      src/androidTest/java/com/owncloud/android/FileIT.java
  8. 2 2
      src/androidTest/java/com/owncloud/android/UploadIT.java
  9. 3 2
      src/androidTest/java/com/owncloud/android/datamodel/OCFileUnitTest.java
  10. 4 3
      src/androidTest/java/com/owncloud/android/datamodel/UploadStorageManagerTest.java
  11. 4 3
      src/androidTest/java/com/owncloud/android/util/EncryptionTestIT.java
  12. 1 1
      src/main/AndroidManifest.xml
  13. 5 5
      src/main/java/com/owncloud/android/MainApp.java
  14. 9 8
      src/main/java/com/owncloud/android/authentication/AccountAuthenticatorActivity.java
  15. 3 2
      src/main/java/com/owncloud/android/authentication/AccountUtils.java
  16. 7 7
      src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java
  17. 6 5
      src/main/java/com/owncloud/android/datamodel/ExternalLinksProvider.java
  18. 1 1
      src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java
  19. 1 2
      src/main/java/com/owncloud/android/datamodel/FileSystemDataSet.java
  20. 3 3
      src/main/java/com/owncloud/android/datamodel/MediaProvider.java
  21. 2 2
      src/main/java/com/owncloud/android/datamodel/OCFile.java
  22. 2 1
      src/main/java/com/owncloud/android/datamodel/SyncedFolderProvider.java
  23. 1 1
      src/main/java/com/owncloud/android/datamodel/ThumbnailsCacheManager.java
  24. 7 8
      src/main/java/com/owncloud/android/datamodel/UploadsStorageManager.java
  25. 2 1
      src/main/java/com/owncloud/android/files/services/FileDownloader.java
  26. 4 3
      src/main/java/com/owncloud/android/files/services/FileUploader.java
  27. 3 2
      src/main/java/com/owncloud/android/jobs/AccountRemovalJob.java
  28. 2 1
      src/main/java/com/owncloud/android/jobs/ContactsBackupJob.java
  29. 4 4
      src/main/java/com/owncloud/android/jobs/ContactsImportJob.java
  30. 3 2
      src/main/java/com/owncloud/android/jobs/FilesSyncJob.java
  31. 9 8
      src/main/java/com/owncloud/android/jobs/MediaFoldersDetectionJob.java
  32. 2 1
      src/main/java/com/owncloud/android/jobs/NContentObserverJob.java
  33. 3 2
      src/main/java/com/owncloud/android/jobs/NotificationJob.java
  34. 2 1
      src/main/java/com/owncloud/android/jobs/OfflineSyncJob.java
  35. 16 15
      src/main/java/com/owncloud/android/media/MediaService.java
  36. 3 2
      src/main/java/com/owncloud/android/operations/RefreshFolderOperation.java
  37. 2 1
      src/main/java/com/owncloud/android/operations/RemoveRemoteEncryptedFileOperation.java
  38. 2 1
      src/main/java/com/owncloud/android/operations/UploadFileOperation.java
  39. 2 1
      src/main/java/com/owncloud/android/providers/DiskLruImageCacheFileProvider.java
  40. 2 1
      src/main/java/com/owncloud/android/providers/FileContentProvider.java
  41. 5 4
      src/main/java/com/owncloud/android/providers/UsersAndGroupsSearchProvider.java
  42. 76 76
      src/main/java/com/owncloud/android/syncadapter/FileSyncAdapter.java
  43. 3 2
      src/main/java/com/owncloud/android/ui/EmptyRecyclerView.java
  44. 2 1
      src/main/java/com/owncloud/android/ui/SquareImageView.java
  45. 2 1
      src/main/java/com/owncloud/android/ui/TextDrawable.java
  46. 3 2
      src/main/java/com/owncloud/android/ui/ThemeableSwitchPreference.java
  47. 6 6
      src/main/java/com/owncloud/android/ui/activities/ActivitiesActivity.java
  48. 3 3
      src/main/java/com/owncloud/android/ui/activities/ActivitiesPresenter.java
  49. 2 2
      src/main/java/com/owncloud/android/ui/activities/data/activities/ActivitiesRepository.java
  50. 1 1
      src/main/java/com/owncloud/android/ui/activities/data/activities/ActivityRepositories.java
  51. 2 2
      src/main/java/com/owncloud/android/ui/activities/data/activities/RemoteActivitiesRepository.java
  52. 1 1
      src/main/java/com/owncloud/android/ui/activities/data/files/FileRepositories.java
  53. 3 3
      src/main/java/com/owncloud/android/ui/activities/data/files/FilesRepository.java
  54. 2 2
      src/main/java/com/owncloud/android/ui/activities/data/files/RemoteFilesRepository.java
  55. 2 1
      src/main/java/com/owncloud/android/ui/activity/BaseActivity.java
  56. 10 9
      src/main/java/com/owncloud/android/ui/activity/ContactsPreferenceActivity.java
  57. 7 6
      src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java
  58. 33 32
      src/main/java/com/owncloud/android/ui/activity/ErrorsWhileCopyingHandlerActivity.java
  59. 3 2
      src/main/java/com/owncloud/android/ui/activity/ExternalSiteWebView.java
  60. 5 4
      src/main/java/com/owncloud/android/ui/activity/FileActivity.java
  61. 17 16
      src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java
  62. 2 1
      src/main/java/com/owncloud/android/ui/activity/FilePickerActivity.java
  63. 2 1
      src/main/java/com/owncloud/android/ui/activity/FirstRunActivity.java
  64. 5 4
      src/main/java/com/owncloud/android/ui/activity/FolderPickerActivity.java
  65. 12 9
      src/main/java/com/owncloud/android/ui/activity/LogHistoryActivity.java
  66. 5 4
      src/main/java/com/owncloud/android/ui/activity/ManageAccountsActivity.java
  67. 4 3
      src/main/java/com/owncloud/android/ui/activity/ManageSpaceActivity.java
  68. 5 5
      src/main/java/com/owncloud/android/ui/activity/NotificationsActivity.java
  69. 2 2
      src/main/java/com/owncloud/android/ui/activity/OnEnforceableRefreshListener.java
  70. 2 1
      src/main/java/com/owncloud/android/ui/activity/ParticipateActivity.java
  71. 5 4
      src/main/java/com/owncloud/android/ui/activity/PassCodeActivity.java
  72. 8 7
      src/main/java/com/owncloud/android/ui/activity/Preferences.java
  73. 17 16
      src/main/java/com/owncloud/android/ui/activity/ReceiveExternalFilesActivity.java
  74. 2 1
      src/main/java/com/owncloud/android/ui/activity/RequestCredentialsActivity.java
  75. 1 1
      src/main/java/com/owncloud/android/ui/activity/RichDocumentsWebView.java
  76. 8 7
      src/main/java/com/owncloud/android/ui/activity/ShareActivity.java
  77. 12 11
      src/main/java/com/owncloud/android/ui/activity/SyncedFoldersActivity.java
  78. 6 5
      src/main/java/com/owncloud/android/ui/activity/ToolbarActivity.java
  79. 15 14
      src/main/java/com/owncloud/android/ui/activity/UploadFilesActivity.java
  80. 3 3
      src/main/java/com/owncloud/android/ui/activity/UploadListActivity.java
  81. 9 9
      src/main/java/com/owncloud/android/ui/activity/UserInfoActivity.java
  82. 6 5
      src/main/java/com/owncloud/android/ui/activity/WhatsNewActivity.java
  83. 3 2
      src/main/java/com/owncloud/android/ui/adapter/AccountListAdapter.java
  84. 2 2
      src/main/java/com/owncloud/android/ui/adapter/ActivityAndVersionListAdapter.java
  85. 3 2
      src/main/java/com/owncloud/android/ui/adapter/ActivityListAdapter.java
  86. 4 4
      src/main/java/com/owncloud/android/ui/adapter/FeaturesViewAdapter.java
  87. 4 4
      src/main/java/com/owncloud/android/ui/adapter/FeaturesWebViewAdapter.java
  88. 4 3
      src/main/java/com/owncloud/android/ui/adapter/FileDetailTabAdapter.java
  89. 3 2
      src/main/java/com/owncloud/android/ui/adapter/LocalFileListAdapter.java
  90. 2 2
      src/main/java/com/owncloud/android/ui/adapter/NotificationListAdapter.java
  91. 3 2
      src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java
  92. 2 1
      src/main/java/com/owncloud/android/ui/adapter/SendButtonAdapter.java
  93. 3 2
      src/main/java/com/owncloud/android/ui/adapter/ShareUserListAdapter.java
  94. 1 1
      src/main/java/com/owncloud/android/ui/adapter/SyncedFolderAdapter.java
  95. 2 2
      src/main/java/com/owncloud/android/ui/adapter/TemplateAdapter.java
  96. 2 2
      src/main/java/com/owncloud/android/ui/adapter/TrashbinListAdapter.java
  97. 1 1
      src/main/java/com/owncloud/android/ui/adapter/UploadListAdapter.java
  98. 5 5
      src/main/java/com/owncloud/android/ui/adapter/UserListAdapter.java
  99. 11 10
      src/main/java/com/owncloud/android/ui/adapter/X509CertificateViewAdapter.java
  100. 1 1
      src/main/java/com/owncloud/android/ui/components/CustomEditText.java

+ 17 - 18
build.gradle

@@ -33,7 +33,6 @@ configurations.all {
 }
 
 ext {
-    supportLibraryVersion = '28.0.0'
     jacocoVersion = "0.8.2"
 
     travisBuild = System.getenv("TRAVIS") == "true"
@@ -82,7 +81,7 @@ android {
         minSdkVersion 14
         targetSdkVersion 28
 
-        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
+        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
 
         // arguments to be passed to functional tests
         testInstrumentationRunnerArgument "TEST_USER", "\"$System.env.OCTEST_APP_USERNAME\""
@@ -207,24 +206,24 @@ android {
 
 dependencies {
     // dependencies for app building
-    implementation 'com.android.support:multidex:1.0.3'
+    implementation 'androidx.multidex:multidex:2.0.0'
 //    implementation project('nextcloud-android-library')
     genericImplementation 'com.github.nextcloud:android-library:master-SNAPSHOT'
     gplayImplementation 'com.github.nextcloud:android-library:master-SNAPSHOT'
     versionDevImplementation 'com.github.nextcloud:android-library:master-SNAPSHOT'
-    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
-    implementation "com.android.support:support-v4:${supportLibraryVersion}"
-    implementation "com.android.support:design:${supportLibraryVersion}"
+    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
+    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
+    implementation 'com.google.android.material:material:1.0.0'
     implementation 'com.jakewharton:disklrucache:2.0.2'
-    implementation "com.android.support:appcompat-v7:${supportLibraryVersion}"
-    implementation "com.android.support:cardview-v7:${supportLibraryVersion}"
-    implementation "com.android.support:exifinterface:${supportLibraryVersion}"
+    implementation 'androidx.appcompat:appcompat:1.0.2'
+    implementation 'androidx.cardview:cardview:1.0.0'
+    implementation 'androidx.exifinterface:exifinterface:1.0.0'
     implementation 'com.github.albfernandez:juniversalchardet:2.0.0' // need this version for Android <7
     implementation 'com.google.code.findbugs:annotations:2.0.1'
     implementation 'commons-io:commons-io:2.6'
     implementation 'com.github.evernote:android-job:v1.2.5'
-    implementation 'com.jakewharton:butterknife:8.8.1'
-    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
+    implementation 'com.jakewharton:butterknife:9.0.0-rc2'
+    annotationProcessor 'com.jakewharton:butterknife-compiler:9.0.0-rc2'
     implementation 'org.greenrobot:eventbus:3.1.1'
     implementation 'com.googlecode.ez-vcard:ez-vcard:0.10.4'
     implementation 'org.lukhnos:nnio:0.2'
@@ -235,12 +234,12 @@ dependencies {
     implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.15'
 
     implementation 'org.parceler:parceler-api:1.1.12'
-    annotationProcessor 'org.parceler:parceler:1.1.11'
+    annotationProcessor 'org.parceler:parceler:1.1.12'
     implementation('com.github.bumptech.glide:glide:3.7.0') {
         exclude group: "com.android.support"
     }
     implementation 'com.caverock:androidsvg:1.3'
-    implementation "com.android.support:support-annotations:${supportLibraryVersion}"
+    implementation 'androidx.annotation:annotation:1.0.1'
     implementation 'com.google.code.gson:gson:2.8.5'
 
     // dependencies for local unit tests
@@ -248,15 +247,15 @@ dependencies {
     testImplementation 'org.mockito:mockito-core:2.23.4'
     // dependencies for instrumented tests
     // JUnit4 Rules
-    androidTestImplementation 'com.android.support.test:rules:1.0.2'
+    androidTestImplementation 'androidx.test:rules:1.1.0'
     // Android JUnit Runner
-    androidTestImplementation 'com.android.support.test:runner:1.0.2'
+    androidTestImplementation 'androidx.test:runner:1.1.0'
 
     // Espresso core
-    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
-    androidTestImplementation 'com.android.support.test.espresso:espresso-contrib:3.0.2'
+    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0'
+    androidTestImplementation 'androidx.test.espresso:espresso-contrib:3.1.0'
     // UIAutomator - for cross-app UI tests, and to grant screen is turned on in Espresso tests
-    androidTestImplementation 'com.android.support.test.uiautomator:uiautomator-v18:2.1.3'
+    androidTestImplementation 'androidx.test.uiautomator:uiautomator:2.2.0'
     // fix conflict in dependencies; see http://g.co/androidstudio/app-test-app-conflict for details
     //androidTestImplementation "com.android.support:support-annotations:${supportLibraryVersion}"
     implementation 'org.jetbrains:annotations:16.0.3'

+ 2 - 0
gradle.properties

@@ -1,3 +1,5 @@
 # workaround since lombok and desugering have an issue
 # to be fixed with gradle Android plugin 3.3.0
 android.enableD8.desugaring=false
+android.enableJetifier=true
+android.useAndroidX=true

+ 1 - 1
scripts/analysis/lint-results.txt

@@ -1,2 +1,2 @@
 DO NOT TOUCH; GENERATED BY DRONE
-      <span class="mdl-layout-title">Lint Report: 85 warnings</span>
+      <span class="mdl-layout-title">Lint Report: 84 warnings</span>

+ 10 - 10
src/androidTest/disabledTests/screenshots/ScreenshotsIT.java

@@ -1,11 +1,6 @@
 package com.owncloud.android.screenshots;
 
 import android.content.Intent;
-import android.support.test.espresso.Espresso;
-import android.support.test.espresso.action.ViewActions;
-import android.support.test.espresso.contrib.DrawerActions;
-import android.support.test.espresso.matcher.PreferenceMatchers;
-import android.support.test.rule.ActivityTestRule;
 
 import com.owncloud.android.R;
 import com.owncloud.android.ui.activity.FileDisplayActivity;
@@ -20,15 +15,20 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
 
+import androidx.test.espresso.Espresso;
+import androidx.test.espresso.action.ViewActions;
+import androidx.test.espresso.contrib.DrawerActions;
+import androidx.test.espresso.matcher.PreferenceMatchers;
+import androidx.test.rule.ActivityTestRule;
 import tools.fastlane.screengrab.Screengrab;
 import tools.fastlane.screengrab.UiAutomatorScreenshotStrategy;
 import tools.fastlane.screengrab.locale.LocaleTestRule;
 
-import static android.support.test.espresso.Espresso.onData;
-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.withId;
-import static android.support.test.espresso.matcher.ViewMatchers.withText;
+import static androidx.test.espresso.Espresso.onData;
+import static androidx.test.espresso.Espresso.onView;
+import static androidx.test.espresso.action.ViewActions.click;
+import static androidx.test.espresso.matcher.ViewMatchers.withId;
+import static androidx.test.espresso.matcher.ViewMatchers.withText;
 import static org.hamcrest.Matchers.anything;
 import static org.hamcrest.core.AnyOf.anyOf;
 

+ 8 - 7
src/androidTest/disabledTests/uiautomator/InitialTest.java

@@ -21,18 +21,19 @@ package com.owncloud.android.uiautomator;
 import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.filters.SdkSuppress;
-import android.support.test.runner.AndroidJUnit4;
-import android.support.test.uiautomator.UiDevice;
-import android.support.test.uiautomator.UiObject;
-import android.support.test.uiautomator.UiObjectNotFoundException;
-import android.support.test.uiautomator.UiSelector;
 
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
+import androidx.test.InstrumentationRegistry;
+import androidx.test.filters.SdkSuppress;
+import androidx.test.runner.AndroidJUnit4;
+import androidx.test.uiautomator.UiDevice;
+import androidx.test.uiautomator.UiObject;
+import androidx.test.uiautomator.UiObjectNotFoundException;
+import androidx.test.uiautomator.UiSelector;
+
 import static org.hamcrest.CoreMatchers.notNullValue;
 import static org.junit.Assert.assertThat;
 

+ 3 - 2
src/androidTest/java/com/owncloud/android/AbstractIT.java

@@ -6,8 +6,6 @@ import android.accounts.AuthenticatorException;
 import android.accounts.OperationCanceledException;
 import android.content.ActivityNotFoundException;
 import android.content.Context;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.runner.AndroidJUnit4;
 
 import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.lib.common.OwnCloudClient;
@@ -22,6 +20,9 @@ import java.io.File;
 import java.io.FileWriter;
 import java.io.IOException;
 
+import androidx.test.InstrumentationRegistry;
+import androidx.test.runner.AndroidJUnit4;
+
 /**
  * Common base for all integration tests
  */

+ 3 - 3
src/androidTest/java/com/owncloud/android/FileIT.java

@@ -1,7 +1,5 @@
 package com.owncloud.android;
 
-import android.support.test.runner.AndroidJUnit4;
-
 import com.owncloud.android.lib.common.operations.RemoteOperationResult;
 import com.owncloud.android.operations.CreateFolderOperation;
 import com.owncloud.android.operations.common.SyncOperation;
@@ -9,6 +7,8 @@ import com.owncloud.android.operations.common.SyncOperation;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
+import androidx.test.runner.AndroidJUnit4;
+
 import static junit.framework.TestCase.assertTrue;
 import static org.junit.Assert.assertNull;
 
@@ -21,7 +21,7 @@ public class FileIT extends AbstractIT {
     @Test
     public void testCreateFolder() {
         String path = "/testFolder/";
-        
+
         // folder does not exist yet
         assertNull(getStorageManager().getFileByPath(path));
 

+ 2 - 2
src/androidTest/java/com/owncloud/android/UploadIT.java

@@ -1,7 +1,5 @@
 package com.owncloud.android;
 
-import android.support.test.runner.AndroidJUnit4;
-
 import com.owncloud.android.db.OCUpload;
 import com.owncloud.android.files.services.FileUploader;
 import com.owncloud.android.lib.common.operations.RemoteOperationResult;
@@ -11,6 +9,8 @@ import com.owncloud.android.utils.FileStorageUtils;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
+import androidx.test.runner.AndroidJUnit4;
+
 import static junit.framework.TestCase.assertTrue;
 
 /**

+ 3 - 2
src/androidTest/java/com/owncloud/android/datamodel/OCFileUnitTest.java

@@ -21,13 +21,14 @@
 package com.owncloud.android.datamodel;
 
 import android.os.Parcel;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
 
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 

+ 4 - 3
src/androidTest/java/com/owncloud/android/datamodel/UploadStorageManagerTest.java

@@ -3,9 +3,6 @@ package com.owncloud.android.datamodel;
 import android.accounts.Account;
 import android.content.ContentResolver;
 import android.content.Context;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
 
 import com.owncloud.android.db.OCUpload;
 
@@ -17,6 +14,10 @@ import org.junit.runner.RunWith;
 
 import java.io.File;
 
+import androidx.test.InstrumentationRegistry;
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
 /**
  * Created by JARP on 6/7/17.
  */

+ 4 - 3
src/androidTest/java/com/owncloud/android/util/EncryptionTestIT.java

@@ -22,8 +22,6 @@
 package com.owncloud.android.util;
 
 import android.os.Build;
-import android.support.annotation.RequiresApi;
-import android.support.test.runner.AndroidJUnit4;
 
 import com.google.gson.JsonElement;
 import com.google.gson.JsonParser;
@@ -50,7 +48,10 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Set;
 
-import static android.support.test.InstrumentationRegistry.getInstrumentation;
+import androidx.annotation.RequiresApi;
+import androidx.test.runner.AndroidJUnit4;
+
+import static androidx.test.InstrumentationRegistry.getInstrumentation;
 import static junit.framework.Assert.assertFalse;
 import static junit.framework.Assert.assertTrue;
 import static org.junit.Assert.assertEquals;

+ 1 - 1
src/main/AndroidManifest.xml

@@ -200,7 +200,7 @@
 
         <!-- new provider used to generate URIs without file:// scheme (forbidden from Android 7) -->
         <provider
-            android:name="android.support.v4.content.FileProvider"
+            android:name="androidx.core.content.FileProvider"
             android:authorities="@string/file_provider_authority"
             android:grantUriPermissions="true"
             android:exported="false">

+ 5 - 5
src/main/java/com/owncloud/android/MainApp.java

@@ -35,11 +35,6 @@ import android.os.Build;
 import android.os.Bundle;
 import android.os.Environment;
 import android.os.StrictMode;
-import android.support.annotation.RequiresApi;
-import android.support.annotation.StringRes;
-import android.support.multidex.MultiDexApplication;
-import android.support.v4.util.Pair;
-import android.support.v7.app.AlertDialog;
 import android.text.TextUtils;
 import android.view.WindowManager;
 
@@ -81,6 +76,11 @@ import java.util.List;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
 
+import androidx.annotation.RequiresApi;
+import androidx.annotation.StringRes;
+import androidx.appcompat.app.AlertDialog;
+import androidx.core.util.Pair;
+import androidx.multidex.MultiDexApplication;
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 
 import static com.owncloud.android.ui.activity.ContactsPreferenceActivity.PREFERENCE_CONTACTS_AUTOMATIC_BACKUP;

+ 9 - 8
src/main/java/com/owncloud/android/authentication/AccountAuthenticatorActivity.java

@@ -19,16 +19,17 @@ package com.owncloud.android.authentication;
 import android.accounts.AccountAuthenticatorResponse;
 import android.accounts.AccountManager;
 import android.os.Bundle;
-import android.support.v7.app.AppCompatActivity;
+
+import androidx.appcompat.app.AppCompatActivity;
 
 /*
- * Base class for implementing an Activity that is used to help implement an AbstractAccountAuthenticator. 
- * If the AbstractAccountAuthenticator needs to use an activity to handle the request then it can have the activity extend 
+ * Base class for implementing an Activity that is used to help implement an AbstractAccountAuthenticator.
+ * If the AbstractAccountAuthenticator needs to use an activity to handle the request then it can have the activity extend
  * AccountAuthenticatorActivity. The AbstractAccountAuthenticator passes in the response to the intent using the following:
  * intent.putExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE, response);
- * 
- * The activity then sets the result that is to be handed to the response via setAccountAuthenticatorResult(android.os.Bundle). 
- * This result will be sent as the result of the request when the activity finishes. If this is never set or if it is set to null 
+ *
+ * The activity then sets the result that is to be handed to the response via setAccountAuthenticatorResult(android.os.Bundle).
+ * This result will be sent as the result of the request when the activity finishes. If this is never set or if it is set to null
  * then error AccountManager.ERROR_CODE_CANCELED will be called on the response.
  */
 
@@ -41,7 +42,7 @@ public class AccountAuthenticatorActivity extends AppCompatActivity {
     /**
      * Set the result that is to be sent as the result of the request that caused this Activity to be launched.
      * If result is null or this method is never called then the request will be canceled.
-     * 
+     *
      * @param result this is returned as the result of the AbstractAccountAuthenticator request
      */
     public final void setAccountAuthenticatorResult(Bundle result) {
@@ -64,7 +65,7 @@ public class AccountAuthenticatorActivity extends AppCompatActivity {
             mAccountAuthenticatorResponse.onRequestContinued();
         }
     }
-    
+
     /**
      * Sends the result or a Constants.ERROR_CODE_CANCELED error if a result isn't present.
      */

+ 3 - 2
src/main/java/com/owncloud/android/authentication/AccountUtils.java

@@ -24,8 +24,6 @@ import android.accounts.AccountManager;
 import android.content.Context;
 import android.content.SharedPreferences;
 import android.preference.PreferenceManager;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
 
 import com.owncloud.android.MainApp;
 import com.owncloud.android.datamodel.ArbitraryDataProvider;
@@ -33,6 +31,9 @@ import com.owncloud.android.lib.common.accounts.AccountUtils.Constants;
 import com.owncloud.android.lib.resources.status.OwnCloudVersion;
 import com.owncloud.android.ui.activity.ManageAccountsActivity;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
 /**
  * Helper class for dealing with accounts.
  */

+ 7 - 7
src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java

@@ -59,13 +59,6 @@ import android.os.Bundle;
 import android.os.Handler;
 import android.os.IBinder;
 import android.preference.PreferenceManager;
-import android.support.annotation.Nullable;
-import android.support.design.widget.Snackbar;
-import android.support.design.widget.TextInputLayout;
-import android.support.v4.app.DialogFragment;
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentManager;
-import android.support.v4.app.FragmentTransaction;
 import android.text.Editable;
 import android.text.InputType;
 import android.text.TextUtils;
@@ -90,6 +83,8 @@ import android.widget.ProgressBar;
 import android.widget.TextView;
 import android.widget.TextView.OnEditorActionListener;
 
+import com.google.android.material.snackbar.Snackbar;
+import com.google.android.material.textfield.TextInputLayout;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
 import com.owncloud.android.authentication.SsoWebViewClient.SsoWebViewClientListener;
@@ -132,6 +127,11 @@ import java.util.HashMap;
 import java.util.Locale;
 import java.util.Map;
 
+import androidx.annotation.Nullable;
+import androidx.fragment.app.DialogFragment;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentTransaction;
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 
 /**

+ 6 - 5
src/main/java/com/owncloud/android/datamodel/ExternalLinksProvider.java

@@ -1,19 +1,19 @@
 /*
  * Nextcloud Android client application
- * 
+ *
  * Copyright (C) 2017 Tobias Kaminsky
  * Copyright (C) 2017 Nextcloud.
- * 
+ *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
  * License as published by the Free Software Foundation; either
  * version 3 of the License, or any later version.
- * 
+ *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
- * 
+ *
  * You should have received a copy of the GNU Affero General Public
  * License along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
@@ -23,7 +23,6 @@ import android.content.ContentResolver;
 import android.content.ContentValues;
 import android.database.Cursor;
 import android.net.Uri;
-import android.support.annotation.NonNull;
 
 import com.owncloud.android.db.ProviderMeta;
 import com.owncloud.android.lib.common.ExternalLink;
@@ -33,6 +32,8 @@ import com.owncloud.android.lib.common.utils.Log_OC;
 import java.util.ArrayList;
 import java.util.List;
 
+import androidx.annotation.NonNull;
+
 /**
  * Database provider for handling the persistence aspects of {@link com.owncloud.android.lib.common.ExternalLink}s.
  */

+ 1 - 1
src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java

@@ -33,7 +33,6 @@ import android.database.Cursor;
 import android.net.Uri;
 import android.os.RemoteException;
 import android.provider.MediaStore;
-import android.support.annotation.Nullable;
 import android.text.TextUtils;
 
 import com.owncloud.android.MainApp;
@@ -63,6 +62,7 @@ import java.util.List;
 import java.util.Locale;
 import java.util.Set;
 
+import androidx.annotation.Nullable;
 import lombok.Getter;
 import lombok.Setter;
 

+ 1 - 2
src/main/java/com/owncloud/android/datamodel/FileSystemDataSet.java

@@ -22,8 +22,7 @@
  */
 package com.owncloud.android.datamodel;
 
-import android.support.annotation.Nullable;
-
+import androidx.annotation.Nullable;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 import lombok.NoArgsConstructor;

+ 3 - 3
src/main/java/com/owncloud/android/datamodel/MediaProvider.java

@@ -27,9 +27,9 @@ import android.content.ContentResolver;
 import android.database.Cursor;
 import android.net.Uri;
 import android.provider.MediaStore;
-import android.support.design.widget.Snackbar;
 import android.util.Log;
 
+import com.google.android.material.snackbar.Snackbar;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
 import com.owncloud.android.utils.PermissionUtil;
@@ -185,8 +185,8 @@ public final class MediaProvider {
                 Manifest.permission.WRITE_EXTERNAL_STORAGE)) || getWithoutActivity) {
             cursorFolders = contentResolver.query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, VIDEOS_FOLDER_PROJECTION,
                     null, null, null);
-        } 
-        
+        }
+
         List<MediaFolder> mediaFolders = new ArrayList<>();
         String dataPath = MainApp.getStoragePath() + File.separator + MainApp.getDataFolder();
 

+ 2 - 2
src/main/java/com/owncloud/android/datamodel/OCFile.java

@@ -28,8 +28,6 @@ import android.content.Context;
 import android.net.Uri;
 import android.os.Parcel;
 import android.os.Parcelable;
-import android.support.annotation.NonNull;
-import android.support.v4.content.FileProvider;
 
 import com.owncloud.android.R;
 import com.owncloud.android.lib.common.network.WebdavEntry;
@@ -40,6 +38,8 @@ import com.owncloud.android.utils.MimeType;
 
 import java.io.File;
 
+import androidx.annotation.NonNull;
+import androidx.core.content.FileProvider;
 import lombok.Getter;
 import lombok.Setter;
 import third_parties.daveKoeller.AlphanumComparator;

+ 2 - 1
src/main/java/com/owncloud/android/datamodel/SyncedFolderProvider.java

@@ -26,7 +26,6 @@ import android.content.ContentValues;
 import android.content.Context;
 import android.database.Cursor;
 import android.net.Uri;
-import android.support.annotation.NonNull;
 
 import com.owncloud.android.db.PreferenceManager;
 import com.owncloud.android.db.ProviderMeta;
@@ -37,6 +36,8 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Observable;
 
+import androidx.annotation.NonNull;
+
 /**
  * Database provider for handling the persistence aspects of {@link SyncedFolder}s.
  */

+ 1 - 1
src/main/java/com/owncloud/android/datamodel/ThumbnailsCacheManager.java

@@ -37,7 +37,6 @@ import android.media.ThumbnailUtils;
 import android.net.Uri;
 import android.os.AsyncTask;
 import android.provider.MediaStore;
-import android.support.annotation.Nullable;
 import android.text.TextUtils;
 import android.view.Display;
 import android.view.MenuItem;
@@ -73,6 +72,7 @@ import java.lang.ref.WeakReference;
 import java.net.URLEncoder;
 import java.util.List;
 
+import androidx.annotation.Nullable;
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 
 /**

+ 7 - 8
src/main/java/com/owncloud/android/datamodel/UploadsStorageManager.java

@@ -26,7 +26,6 @@ import android.content.ContentValues;
 import android.content.Context;
 import android.database.Cursor;
 import android.net.Uri;
-import android.support.annotation.Nullable;
 
 import com.owncloud.android.authentication.AccountUtils;
 import com.owncloud.android.db.OCUpload;
@@ -40,6 +39,8 @@ import com.owncloud.android.operations.UploadFileOperation;
 import java.util.Calendar;
 import java.util.Observable;
 
+import androidx.annotation.Nullable;
+
 /**
  * Database helper for storing list of files to be uploaded, including status
  * information for each file.
@@ -343,7 +344,7 @@ public class UploadsStorageManager extends Observable {
 
         if (account != null) {
             return getUploads(
-                    ProviderTableMeta.UPLOADS_STATUS + "==" + UploadStatus.UPLOAD_IN_PROGRESS.value +
+                ProviderTableMeta.UPLOADS_STATUS + "==" + UploadStatus.UPLOAD_IN_PROGRESS.value +
                             " OR " + ProviderTableMeta.UPLOADS_LAST_RESULT +
                             "==" + UploadResult.DELAYED_FOR_WIFI.getValue() +
                             " OR " + ProviderTableMeta.UPLOADS_LAST_RESULT +
@@ -353,8 +354,7 @@ public class UploadsStorageManager extends Observable {
                             " OR " + ProviderTableMeta.UPLOADS_LAST_RESULT +
                             "==" + UploadResult.DELAYED_IN_POWER_SAVE_MODE.getValue() +
                             " AND " + ProviderTableMeta.UPLOADS_ACCOUNT_NAME + "== ?",
-                    new String[]{account.name}
-            );
+                account.name);
         } else {
             return new OCUpload[0];
         }
@@ -375,7 +375,7 @@ public class UploadsStorageManager extends Observable {
                         "==" + UploadResult.DELAYED_IN_POWER_SAVE_MODE.getValue() +
                         " ) AND " + ProviderTableMeta.UPLOADS_LAST_RESULT +
                         "!= " + UploadResult.VIRUS_DETECTED.getValue()
-                , new String[]{String.valueOf(UploadStatus.UPLOAD_FAILED.value)});
+            , String.valueOf(UploadStatus.UPLOAD_FAILED.value));
     }
 
     public OCUpload[] getFinishedUploadsForCurrentAccount() {
@@ -383,7 +383,7 @@ public class UploadsStorageManager extends Observable {
 
         if (account != null) {
             return getUploads(ProviderTableMeta.UPLOADS_STATUS + "==" + UploadStatus.UPLOAD_SUCCEEDED.value + AND +
-                    ProviderTableMeta.UPLOADS_ACCOUNT_NAME + "== ?", new String[]{account.name});
+                                  ProviderTableMeta.UPLOADS_ACCOUNT_NAME + "== ?", account.name);
         } else {
             return new OCUpload[0];
         }
@@ -411,8 +411,7 @@ public class UploadsStorageManager extends Observable {
                             AND + ProviderTableMeta.UPLOADS_LAST_RESULT +
                             "<>" + UploadResult.DELAYED_IN_POWER_SAVE_MODE.getValue() +
                             AND + ProviderTableMeta.UPLOADS_ACCOUNT_NAME + "== ?",
-                    new String[]{account.name}
-            );
+                              account.name);
         } else {
             return new OCUpload[0];
         }

+ 2 - 1
src/main/java/com/owncloud/android/files/services/FileDownloader.java

@@ -36,7 +36,6 @@ import android.os.IBinder;
 import android.os.Looper;
 import android.os.Message;
 import android.os.Process;
-import android.support.v4.app.NotificationCompat;
 import android.util.Pair;
 
 import com.owncloud.android.R;
@@ -70,6 +69,8 @@ import java.util.Iterator;
 import java.util.Map;
 import java.util.Vector;
 
+import androidx.core.app.NotificationCompat;
+
 public class FileDownloader extends Service
         implements OnDatatransferProgressListener, OnAccountsUpdateListener {
 

+ 4 - 3
src/main/java/com/owncloud/android/files/services/FileUploader.java

@@ -42,7 +42,6 @@ import android.os.Looper;
 import android.os.Message;
 import android.os.Parcelable;
 import android.os.Process;
-import android.support.v4.app.NotificationCompat;
 import android.util.Pair;
 
 import com.evernote.android.job.JobRequest;
@@ -84,6 +83,8 @@ import java.util.Vector;
 
 import javax.annotation.Nullable;
 
+import androidx.core.app.NotificationCompat;
+
 /**
  * Service for uploading files. Invoke using context.startService(...).
  *
@@ -525,7 +526,7 @@ public class FileUploader extends Service
         Log_OC.d(TAG, "Starting command with id " + startId);
 
         startForeground(FOREGROUND_SERVICE_ID, mNotification);
-        
+
         if (intent == null) {
             Log_OC.e(TAG, "Intent is null");
             return Service.START_NOT_STICKY;
@@ -1166,7 +1167,7 @@ public class FileUploader extends Service
             if (mNotificationManager == null) {
                 mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
             }
-            
+
             mNotificationManager.notify(R.string.uploader_upload_in_progress_ticker, mNotificationBuilder.build());
         }   // else wait until the upload really start (onTransferProgress is called), so that if it's discarded
         // due to lack of Wifi, no notification is shown

+ 3 - 2
src/main/java/com/owncloud/android/jobs/AccountRemovalJob.java

@@ -26,7 +26,6 @@ import android.accounts.AccountManager;
 import android.accounts.AccountManagerCallback;
 import android.accounts.AccountManagerFuture;
 import android.content.Context;
-import android.support.annotation.NonNull;
 
 import com.evernote.android.job.Job;
 import com.evernote.android.job.util.support.PersistableBundleCompat;
@@ -50,6 +49,8 @@ import java.io.File;
 import java.util.ArrayList;
 import java.util.List;
 
+import androidx.annotation.NonNull;
+
 import static android.content.Context.ACCOUNT_SERVICE;
 import static com.owncloud.android.ui.activity.ManageAccountsActivity.PENDING_FOR_REMOVAL;
 
@@ -119,7 +120,7 @@ public class AccountRemovalJob extends Job implements AccountManagerCallback<Boo
                 filesystemDataProvider.deleteAllEntriesForSyncedFolder(Long.toString(syncedFolderId));
             }
 
-            // delete stored E2E keys 
+            // delete stored E2E keys
             arbitraryDataProvider.deleteKeyForAccount(account.name, EncryptionUtils.PRIVATE_KEY);
             arbitraryDataProvider.deleteKeyForAccount(account.name, EncryptionUtils.PUBLIC_KEY);
 

+ 2 - 1
src/main/java/com/owncloud/android/jobs/ContactsBackupJob.java

@@ -30,7 +30,6 @@ import android.database.Cursor;
 import android.net.Uri;
 import android.os.IBinder;
 import android.provider.ContactsContract;
-import android.support.annotation.NonNull;
 import android.text.format.DateFormat;
 
 import com.evernote.android.job.Job;
@@ -56,6 +55,8 @@ import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.List;
 
+import androidx.annotation.NonNull;
+
 /**
  * Job that backup contacts to /Contacts-Backup and deletes files older than x days
  */

+ 4 - 4
src/main/java/com/owncloud/android/jobs/ContactsImportJob.java

@@ -4,17 +4,17 @@
  * @author Tobias Kaminsky
  * Copyright (C) 2017 Tobias Kaminsky
  * Copyright (C) 2017 Nextcloud GmbH.
- * 
+ *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Affero General Public License as published by
  * the Free Software Foundation, either version 3 of the License, or
  * at your option) any later version.
- * 
+ *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU Affero General Public License for more details.
- * 
+ *
  * You should have received a copy of the GNU Affero General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
@@ -24,7 +24,6 @@ package com.owncloud.android.jobs;
 import android.database.Cursor;
 import android.net.Uri;
 import android.provider.ContactsContract;
-import android.support.annotation.NonNull;
 
 import com.evernote.android.job.Job;
 import com.evernote.android.job.util.support.PersistableBundleCompat;
@@ -38,6 +37,7 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.TreeMap;
 
+import androidx.annotation.NonNull;
 import ezvcard.Ezvcard;
 import ezvcard.VCard;
 import third_parties.ezvcard_android.ContactOperations;

+ 3 - 2
src/main/java/com/owncloud/android/jobs/FilesSyncJob.java

@@ -27,8 +27,6 @@ import android.content.Context;
 import android.content.res.Resources;
 import android.os.Build;
 import android.os.PowerManager;
-import android.support.annotation.NonNull;
-import android.support.media.ExifInterface;
 import android.text.TextUtils;
 
 import com.evernote.android.job.Job;
@@ -58,6 +56,9 @@ import java.util.Date;
 import java.util.Locale;
 import java.util.TimeZone;
 
+import androidx.annotation.NonNull;
+import androidx.exifinterface.media.ExifInterface;
+
 /*
     Job that:
         - restarts existing jobs if required

+ 9 - 8
src/main/java/com/owncloud/android/jobs/MediaFoldersDetectionJob.java

@@ -30,8 +30,6 @@ import android.content.Context;
 import android.content.Intent;
 import android.graphics.BitmapFactory;
 import android.media.RingtoneManager;
-import android.support.annotation.NonNull;
-import android.support.v4.app.NotificationCompat;
 import android.text.TextUtils;
 
 import com.evernote.android.job.Job;
@@ -51,6 +49,9 @@ import com.owncloud.android.utils.ThemeUtils;
 import java.util.ArrayList;
 import java.util.List;
 
+import androidx.annotation.NonNull;
+import androidx.core.app.NotificationCompat;
+
 public class MediaFoldersDetectionJob extends Job {
     public static final String TAG = "MediaFoldersDetectionJob";
 
@@ -110,9 +111,9 @@ public class MediaFoldersDetectionJob extends Job {
                         if (syncedFolderProvider.findByLocalPathAndAccount(imageMediaFolder, account) == null) {
                             sendNotification(String.format(context.getString(R.string.new_media_folder_detected),
                                     context.getString(R.string.new_media_folder_photos)),
-                                    imageMediaFolder.substring(imageMediaFolder.lastIndexOf('/') + 1,
-                                            imageMediaFolder.length()),
-                                    account, imageMediaFolder, 1);
+                                             imageMediaFolder.substring(imageMediaFolder.lastIndexOf('/') + 1
+                                             ),
+                                             account, imageMediaFolder, 1);
                         }
                     }
 
@@ -120,9 +121,9 @@ public class MediaFoldersDetectionJob extends Job {
                         if (syncedFolderProvider.findByLocalPathAndAccount(videoMediaFolder, account) == null) {
                             sendNotification(String.format(context.getString(R.string.new_media_folder_detected),
                                     context.getString(R.string.new_media_folder_videos)),
-                                    videoMediaFolder.substring(videoMediaFolder.lastIndexOf('/') + 1,
-                                            videoMediaFolder.length()),
-                                    account, videoMediaFolder, 2);
+                                             videoMediaFolder.substring(videoMediaFolder.lastIndexOf('/') + 1
+                                             ),
+                                             account, videoMediaFolder, 2);
                         }
                     }
                 }

+ 2 - 1
src/main/java/com/owncloud/android/jobs/NContentObserverJob.java

@@ -24,7 +24,6 @@ package com.owncloud.android.jobs;
 import android.app.job.JobParameters;
 import android.app.job.JobService;
 import android.os.Build;
-import android.support.annotation.RequiresApi;
 
 import com.evernote.android.job.JobRequest;
 import com.evernote.android.job.util.support.PersistableBundleCompat;
@@ -32,6 +31,8 @@ import com.owncloud.android.datamodel.SyncedFolderProvider;
 import com.owncloud.android.utils.FilesSyncHelper;
 import com.owncloud.android.utils.PowerUtils;
 
+import androidx.annotation.RequiresApi;
+
 /*
     Job that triggers new FilesSyncJob in case new photo or video were detected
     and starts a job to find new media folders

+ 3 - 2
src/main/java/com/owncloud/android/jobs/NotificationJob.java

@@ -27,8 +27,6 @@ import android.content.Context;
 import android.content.Intent;
 import android.graphics.BitmapFactory;
 import android.media.RingtoneManager;
-import android.support.annotation.NonNull;
-import android.support.v4.app.NotificationCompat;
 import android.text.TextUtils;
 import android.util.Base64;
 import android.util.Log;
@@ -51,6 +49,9 @@ import java.security.PrivateKey;
 import javax.crypto.Cipher;
 import javax.crypto.NoSuchPaddingException;
 
+import androidx.annotation.NonNull;
+import androidx.core.app.NotificationCompat;
+
 public class NotificationJob extends Job {
     public static final String TAG = "NotificationJob";
 

+ 2 - 1
src/main/java/com/owncloud/android/jobs/OfflineSyncJob.java

@@ -25,7 +25,6 @@ import android.content.Intent;
 import android.database.Cursor;
 import android.os.Build;
 import android.os.PowerManager;
-import android.support.annotation.NonNull;
 
 import com.evernote.android.job.Job;
 import com.evernote.android.job.JobManager;
@@ -46,6 +45,8 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
 
+import androidx.annotation.NonNull;
+
 public class OfflineSyncJob extends Job {
     public static final String TAG = "OfflineSyncJob";
 

+ 16 - 15
src/main/java/com/owncloud/android/media/MediaService.java

@@ -41,7 +41,6 @@ import android.net.wifi.WifiManager.WifiLock;
 import android.os.AsyncTask;
 import android.os.IBinder;
 import android.os.PowerManager;
-import android.support.v4.app.NotificationCompat;
 import android.widget.Toast;
 
 import com.owncloud.android.R;
@@ -61,9 +60,11 @@ import com.owncloud.android.utils.ThemeUtils;
 import java.io.IOException;
 import java.lang.ref.WeakReference;
 
+import androidx.core.app.NotificationCompat;
+
 
 /**
- * Service that handles media playback, both audio and video. 
+ * Service that handles media playback, both audio and video.
  *
  * Waits for Intents which signal the service to perform specific operations: Play, Pause,
  * Rewind, etc.
@@ -181,14 +182,14 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
         } else if (extra == MediaPlayer.MEDIA_ERROR_IO) {
             /*  Added in API level 17
                 File or network related operation errors.
-                Constant Value: -1004 (0xfffffc14) 
+                Constant Value: -1004 (0xfffffc14)
              */
             messageId = R.string.media_err_io;
 
         } else if (extra == MediaPlayer.MEDIA_ERROR_MALFORMED) {
             /*  Added in API level 17
                 Bitstream is not conforming to the related coding standard or file spec.
-                Constant Value: -1007 (0xfffffc11) 
+                Constant Value: -1007 (0xfffffc11)
              */
             messageId = R.string.media_err_malformed;
 
@@ -217,7 +218,7 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
                 Added in API level 1
                 Media server died. In this case, the application must release the MediaPlayer
                 object and instantiate a new one.
-                Constant Value: 100 (0x00000064) 
+                Constant Value: 100 (0x00000064)
              */
             messageId = R.string.media_err_unknown;
         }
@@ -268,9 +269,9 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
     /**
      * Processes a request to play a media file received as a parameter
      *
-     * TODO If a new request is received when a file is being prepared, it is ignored. Is this what we want? 
+     * TODO If a new request is received when a file is being prepared, it is ignored. Is this what we want?
      *
-     * @param intent    Intent received in the request with the data to identify the file to play. 
+     * @param intent    Intent received in the request with the data to identify the file to play.
      */
     private void processPlayFileRequest(Intent intent) {
         if (mState != State.PREPARING) {
@@ -327,7 +328,7 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
     }
 
     /**
-     * Processes a request to pause the current playback 
+     * Processes a request to pause the current playback
      */
     protected void processPauseRequest() {
         if (mState == State.PLAYING) {
@@ -393,7 +394,7 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
 
 
     /**
-     * Reconfigures MediaPlayer according to audio focus settings and starts/restarts it. 
+     * Reconfigures MediaPlayer according to audio focus settings and starts/restarts it.
      */
     protected void configAndStartMediaPlayer() {
         if (mPlayer == null) {
@@ -421,7 +422,7 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
 
 
     /**
-     * Requests the audio focus to the Audio Manager 
+     * Requests the audio focus to the Audio Manager
      */
     private void tryToGetAudioFocus() {
         if (mAudioFocus != AudioFocus.FOCUS
@@ -436,7 +437,7 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
 
 
     /**
-     * Starts playing the current media file. 
+     * Starts playing the current media file.
      */
     protected void playMedia() {
         mState = State.STOPPED;
@@ -501,7 +502,7 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
 
 
     /**
-     * Called when media player is done preparing. 
+     * Called when media player is done preparing.
      *
      * Time to start.
      */
@@ -589,7 +590,7 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
     }
 
     /**
-     * Called when there's an error playing media. 
+     * Called when there's an error playing media.
      *
      * Warns the user about the error and resets the media player.
      */
@@ -646,7 +647,7 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
 
 
     /**
-     * Provides a binder object that clients can use to perform operations on the MediaPlayer managed by the MediaService. 
+     * Provides a binder object that clients can use to perform operations on the MediaPlayer managed by the MediaService.
      */
     @Override
     public IBinder onBind(Intent arg) {
@@ -671,7 +672,7 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
     /**
      * Accesses the current MediaPlayer instance in the service.
      *
-     * To be handled carefully. Visibility is protected to be accessed only 
+     * To be handled carefully. Visibility is protected to be accessed only
      *
      * @return Current MediaPlayer instance handled by MediaService.
      */

+ 3 - 2
src/main/java/com/owncloud/android/operations/RefreshFolderOperation.java

@@ -22,8 +22,6 @@ package com.owncloud.android.operations;
 import android.accounts.Account;
 import android.content.Context;
 import android.content.Intent;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
 import android.util.Log;
 
 import com.owncloud.android.datamodel.DecryptedFolderMetadata;
@@ -52,6 +50,9 @@ import java.util.List;
 import java.util.Map;
 import java.util.Vector;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
 
 /**
  *  Remote operation performing the synchronization of the list of files contained

+ 2 - 1
src/main/java/com/owncloud/android/operations/RemoveRemoteEncryptedFileOperation.java

@@ -24,7 +24,6 @@ package com.owncloud.android.operations;
 import android.accounts.Account;
 import android.content.Context;
 import android.os.Build;
-import android.support.annotation.RequiresApi;
 
 import com.google.gson.reflect.TypeToken;
 import com.owncloud.android.datamodel.ArbitraryDataProvider;
@@ -44,6 +43,8 @@ import com.owncloud.android.utils.EncryptionUtils;
 import org.apache.commons.httpclient.HttpStatus;
 import org.apache.jackrabbit.webdav.client.methods.DeleteMethod;
 
+import androidx.annotation.RequiresApi;
+
 /**
  * Remote operation performing the removal of a remote encrypted file or folder
  */

+ 2 - 1
src/main/java/com/owncloud/android/operations/UploadFileOperation.java

@@ -24,7 +24,6 @@ import android.annotation.SuppressLint;
 import android.content.Context;
 import android.net.Uri;
 import android.os.Build;
-import android.support.annotation.RequiresApi;
 import android.util.Log;
 
 import com.evernote.android.job.JobRequest;
@@ -89,6 +88,8 @@ import java.util.Set;
 import java.util.UUID;
 import java.util.concurrent.atomic.AtomicBoolean;
 
+import androidx.annotation.RequiresApi;
+
 
 /**
  * Operation performing the update in the ownCloud server

+ 2 - 1
src/main/java/com/owncloud/android/providers/DiskLruImageCacheFileProvider.java

@@ -30,7 +30,6 @@ import android.graphics.Bitmap;
 import android.net.Uri;
 import android.os.ParcelFileDescriptor;
 import android.provider.OpenableColumns;
-import android.support.annotation.NonNull;
 
 import com.owncloud.android.MainApp;
 import com.owncloud.android.authentication.AccountUtils;
@@ -44,6 +43,8 @@ import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 
+import androidx.annotation.NonNull;
+
 public class DiskLruImageCacheFileProvider extends ContentProvider {
     public static final String TAG = DiskLruImageCacheFileProvider.class.getSimpleName();
 

+ 2 - 1
src/main/java/com/owncloud/android/providers/FileContentProvider.java

@@ -40,7 +40,6 @@ import android.database.sqlite.SQLiteOpenHelper;
 import android.database.sqlite.SQLiteQueryBuilder;
 import android.net.Uri;
 import android.os.Binder;
-import android.support.annotation.NonNull;
 import android.text.TextUtils;
 
 import com.owncloud.android.MainApp;
@@ -59,6 +58,8 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Locale;
 
+import androidx.annotation.NonNull;
+
 /**
  * The ContentProvider for the ownCloud App.
  */

+ 5 - 4
src/main/java/com/owncloud/android/providers/UsersAndGroupsSearchProvider.java

@@ -31,8 +31,6 @@ import android.net.Uri;
 import android.os.Handler;
 import android.os.Looper;
 import android.provider.BaseColumns;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
 import android.widget.Toast;
 
 import com.owncloud.android.R;
@@ -54,6 +52,9 @@ import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
 
 /**
  * Content provider for search suggestions, to search for users and groups existing in an ownCloud server.
@@ -104,7 +105,7 @@ public class UsersAndGroupsSearchProvider extends ContentProvider {
         if (getContext() == null) {
             return false;
         }
-        
+
         AUTHORITY = getContext().getResources().getString(R.string.users_and_groups_search_authority);
         ACTION_SHARE_WITH = getContext().getResources().getString(R.string.users_and_groups_share_with);
         DATA_USER = AUTHORITY + ".data.user";
@@ -124,7 +125,7 @@ public class UsersAndGroupsSearchProvider extends ContentProvider {
 
     /**
      * returns sharee from server
-     * 
+     *
      * Reference: http://developer.android.com/guide/topics/search/adding-custom-suggestions.html#CustomContentProvider
      *
      * @param uri           Content {@link Uri}, formatted as

+ 76 - 76
src/main/java/com/owncloud/android/syncadapter/FileSyncAdapter.java

@@ -33,8 +33,6 @@ import android.content.Context;
 import android.content.Intent;
 import android.content.SyncResult;
 import android.os.Bundle;
-import android.support.annotation.PluralsRes;
-import android.support.v4.app.NotificationCompat;
 
 import com.owncloud.android.R;
 import com.owncloud.android.authentication.AuthenticatorActivity;
@@ -59,10 +57,13 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import androidx.annotation.PluralsRes;
+import androidx.core.app.NotificationCompat;
+
 /**
- * Implementation of {@link AbstractThreadedSyncAdapter} responsible for synchronizing 
+ * Implementation of {@link AbstractThreadedSyncAdapter} responsible for synchronizing
  * ownCloud files.
- * 
+ *
  * Performs a full synchronization of the account received in {@link #onPerformSync(Account, Bundle,
  * String, ContentProviderClient, SyncResult)}.
  */
@@ -72,9 +73,9 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
 
     /** Maximum number of failed folder synchronizations that are supported before finishing
      * the synchronization operation */
-    private static final int MAX_FAILED_RESULTS = 3; 
-    
-    
+    private static final int MAX_FAILED_RESULTS = 3;
+
+
     public static final String EVENT_FULL_SYNC_START = FileSyncAdapter.class.getName() +
             ".EVENT_FULL_SYNC_START";
     public static final String EVENT_FULL_SYNC_END = FileSyncAdapter.class.getName() +
@@ -90,22 +91,22 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
 
     /** Time stamp for the current synchronization process, used to distinguish fresh data */
     private long mCurrentSyncTime;
-    
+
     /** Flag made 'true' when a request to cancel the synchronization is received */
     private boolean mCancellation;
 
     /** Counter for failed operations in the synchronization process */
     private int mFailedResultsCounter;
-    
+
     /** Result of the last failed operation */
     private RemoteOperationResult mLastFailedResult;
-    
+
     /** Counter of conflicts found between local and remote files */
     private int mConflictsFound;
-    
+
     /** Counter of failed operations in synchronization of kept-in-sync files */
     private int mFailsInFavouritesFound;
-    
+
     /** Map of remote and local paths to files that where locally stored in a location out
      * of the ownCloud folder and couldn't be copied automatically into it */
     private Map<String, String> mForgottenLocalFiles;
@@ -122,7 +123,7 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
         super(context, autoInitialize);
     }
 
-    
+
     /**
      * Creates a {@link FileSyncAdapter}
      *
@@ -132,7 +133,7 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
         super(context, autoInitialize, allowParallelSyncs);
     }
 
-    
+
     /**
      * {@inheritDoc}
      */
@@ -154,7 +155,7 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
         this.setAccount(account);
         this.setContentProviderClient(providerClient);
         this.setStorageManager(new FileDataStorageManager(account, providerClient));
-        
+
         try {
             this.initClientForCurrentAccount();
         } catch (IOException | AccountsException e) {
@@ -177,22 +178,22 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
             mCurrentSyncTime = System.currentTimeMillis();
             if (!mCancellation) {
                 synchronizeFolder(getStorageManager().getFileByPath(OCFile.ROOT_PATH));
-                
+
             } else {
                 Log_OC.d(TAG, "Leaving synchronization before synchronizing the root folder " +
                         "because cancellation request");
             }
-            
+
         } finally {
             // it's important making this although very unexpected errors occur;
             // that's the reason for the finally
-            
+
             if (mFailedResultsCounter > 0 && mIsManualSync) {
                 /// don't let the system synchronization manager retries MANUAL synchronizations
                 //      (be careful: "MANUAL" currently includes the synchronization requested when
                 //      a new account is created and when the user changes the current account)
                 mSyncResult.tooManyRetries = true;
-                
+
                 /// notify the user about the failure of MANUAL synchronization
                 notifyFailedSynchronization();
             }
@@ -205,16 +206,16 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
             sendLocalBroadcast(EVENT_FULL_SYNC_END, null, mLastFailedResult);   // message to signal
                                                                                 // the end to the UI
         }
-        
+
     }
-    
+
     /**
      * Called by system SyncManager when a synchronization is required to be cancelled.
-     * 
-     * Sets the mCancellation flag to 'true'. THe synchronization will be stopped later, 
-     * before a new folder is fetched. Data of the last folder synchronized will be still 
-     * locally saved. 
-     * 
+     *
+     * Sets the mCancellation flag to 'true'. THe synchronization will be stopped later,
+     * before a new folder is fetched. Data of the last folder synchronized will be still
+     * locally saved.
+     *
      * See {@link #onPerformSync(Account, Bundle, String, ContentProviderClient, SyncResult)}
      * and {@link #synchronizeFolder(OCFile)}.
      */
@@ -224,8 +225,8 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
         mCancellation = true;
         super.onSyncCanceled();
     }
-    
-    
+
+
     /**
      * Updates the locally stored version value of the ownCloud server
      */
@@ -233,28 +234,28 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
         UpdateOCVersionOperation update = new UpdateOCVersionOperation(getAccount(), getContext());
         RemoteOperationResult result = update.execute(getClient());
         if (!result.isSuccess()) {
-            mLastFailedResult = result; 
+            mLastFailedResult = result;
         }
     }
-    
-    
+
+
     /**
      *  Synchronizes the list of files contained in a folder identified with its remote path.
-     *  
-     *  Fetches the list and properties of the files contained in the given folder, including their 
+     *
+     *  Fetches the list and properties of the files contained in the given folder, including their
      *  properties, and updates the local database with them.
-     *  
+     *
      *  Enters in the child folders to synchronize their contents also, following a recursive
-     *  depth first strategy. 
-     * 
+     *  depth first strategy.
+     *
      *  @param folder                   Folder to synchronize.
      */
     private void synchronizeFolder(OCFile folder) {
-        
+
         if (mFailedResultsCounter > MAX_FAILED_RESULTS || isFinisher(mLastFailedResult)) {
             return;
         }
-        
+
         // folder synchronization
         RefreshFolderOperation synchFolderOp = new RefreshFolderOperation( folder,
                                                                                    mCurrentSyncTime,
@@ -265,14 +266,14 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
                                                                                    getContext()
                                                                                   );
         RemoteOperationResult result = synchFolderOp.execute(getClient());
-        
-        
+
+
         // synchronized folder -> notice to UI - ALWAYS, although !result.isSuccess
         sendLocalBroadcast(EVENT_FULL_SYNC_FOLDER_CONTENTS_SYNCED, folder.getRemotePath(), result);
-        
+
         // check the result of synchronizing the folder
         if (result.isSuccess() || result.getCode() == ResultCode.SYNC_CONFLICT) {
-            
+
             if (result.getCode() == ResultCode.SYNC_CONFLICT) {
                 mConflictsFound += synchFolderOp.getConflictsFound();
                 mFailsInFavouritesFound += synchFolderOp.getFailsInKeptInSyncFound();
@@ -281,21 +282,21 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
                 mForgottenLocalFiles.putAll(synchFolderOp.getForgottenLocalFiles());
             }
             if (result.isSuccess()) {
-                // synchronize children folders 
+                // synchronize children folders
                 List<OCFile> children = synchFolderOp.getChildren();
                 // beware of the 'hidden' recursion here!
                 syncChildren(children);
             }
-            
+
         } else if (result.getCode() != ResultCode.FILE_NOT_FOUND) {
             // in failures, the statistics for the global result are updated
             if (RemoteOperationResult.ResultCode.UNAUTHORIZED.equals(result.getCode())) {
                 mSyncResult.stats.numAuthExceptions++;
-                
+
             } else if (result.getException() instanceof DavException) {
                 mSyncResult.stats.numParseExceptions++;
-                
-            } else if (result.getException() instanceof IOException) { 
+
+            } else if (result.getException() instanceof IOException) {
                 mSyncResult.stats.numIoExceptions++;
             }
             mFailedResultsCounter++;
@@ -304,13 +305,13 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
         } // else, ResultCode.FILE_NOT_FOUND is ignored, remote folder was
           // removed from other thread or other client during the synchronization,
           // before this thread fetched its contents
-            
+
     }
 
     /**
      * Checks if a failed result should terminate the synchronization process immediately,
      * according to OUR OWN POLICY
-     * 
+     *
      * @param   failedResult        Remote operation result to check.
      * @return                      'True' if the result should immediately finish the
      *                              synchronization
@@ -331,7 +332,7 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
      *
      * No consideration of etag here because it MUST walk down anyway, in case that kept-in-sync files
      * have local changes.
-     * 
+     *
      * @param files         Files to recursively synchronize.
      */
     private void syncChildren(List<OCFile> files) {
@@ -343,7 +344,7 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
                 synchronizeFolder(newFile);
             }
         }
-       
+
         if (mCancellation && i <files.size()) {
             Log_OC.d(TAG,
                     "Leaving synchronization before synchronizing " + files.get(i).getRemotePath() +
@@ -351,12 +352,12 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
         }
     }
 
-    
+
     /**
      * Sends a message to any application component interested in the progress of the
      * synchronization.
-     * 
-     * @param event             Event in the process of synchronization to be notified.   
+     *
+     * @param event             Event in the process of synchronization to be notified.
      * @param dirRemotePath     Remote path of the folder target of the event occurred.
      * @param result            Result of an individual {@link SynchronizeFolderOperation},
      *                          if completed; may be null.
@@ -382,10 +383,9 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
         //LocalBroadcastManager.getInstance(getContext()).sendBroadcast(intent);
     }
 
-    
-    
+
     /**
-     * Notifies the user about a failed synchronization through the status notification bar 
+     * Notifies the user about a failed synchronization through the status notification bar
      */
     private void notifyFailedSynchronization() {
         NotificationCompat.Builder notificationBuilder = createNotificationBuilder();
@@ -414,7 +414,7 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
                 .setContentTitle(i18n(R.string.sync_fail_ticker))
                 .setContentText(i18n(R.string.sync_fail_content, getAccount().name));
         }
-        
+
         showNotification(R.string.sync_fail_ticker, notificationBuilder);
     }
 
@@ -422,14 +422,14 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
     /**
      * Notifies the user about conflicts and strange fails when trying to synchronize the contents
      * of kept-in-sync files.
-     * 
+     *
      * By now, we won't consider a failed synchronization.
      */
     private void notifyFailsInFavourites() {
         if (mFailedResultsCounter > 0) {
             NotificationCompat.Builder notificationBuilder = createNotificationBuilder();
             notificationBuilder.setTicker(i18n(R.string.sync_fail_in_favourites_ticker));
-                
+
             // TODO put something smart in the contentIntent below
             notificationBuilder
                 .setContentIntent(PendingIntent.getActivity(
@@ -442,12 +442,12 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
                     mFailedResultsCounter + mConflictsFound, mConflictsFound
                     )
                 );
-            
+
             showNotification(R.string.sync_fail_in_favourites_ticker, notificationBuilder);
         } else {
             NotificationCompat.Builder notificationBuilder = createNotificationBuilder();
             notificationBuilder.setTicker(i18n(R.string.sync_conflicts_in_favourites_ticker));
-          
+
             // TODO put something smart in the contentIntent below
             notificationBuilder
                 .setContentIntent(PendingIntent.getActivity(
@@ -455,26 +455,26 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
                 ))
                 .setContentTitle(i18n(R.string.sync_conflicts_in_favourites_ticker))
                 .setContentText(i18n(R.string.sync_conflicts_in_favourites_ticker, mConflictsFound));
-            
+
             showNotification(R.string.sync_conflicts_in_favourites_ticker, notificationBuilder);
-        } 
+        }
     }
-    
+
     /**
      * Notifies the user about local copies of files out of the ownCloud local directory that
      * were 'forgotten' because copying them inside the ownCloud local directory was not possible.
-     * 
+     *
      * We don't want links to files out of the ownCloud local directory (foreign files) anymore.
      * It's easy to have synchronization problems if a local file is linked to more than one
      * remote file.
-     * 
+     *
      * We won't consider a synchronization as failed when foreign files can not be copied to
      * the ownCloud local directory.
      */
     private void notifyForgottenLocalFiles() {
         NotificationCompat.Builder notificationBuilder = createNotificationBuilder();
         notificationBuilder.setTicker(i18n(R.string.sync_foreign_files_forgotten_ticker));
-      
+
         /// includes a pending intent in the notification showing a more detailed explanation
         Intent explanationIntent = new Intent(getContext(), ErrorsWhileCopyingHandlerActivity.class);
         explanationIntent.putExtra(ErrorsWhileCopyingHandlerActivity.EXTRA_ACCOUNT, getAccount());
@@ -483,9 +483,9 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
         remotePaths.addAll(mForgottenLocalFiles.keySet());
         localPaths.addAll(mForgottenLocalFiles.values());
         explanationIntent.putExtra(ErrorsWhileCopyingHandlerActivity.EXTRA_LOCAL_PATHS, localPaths);
-        explanationIntent.putExtra(ErrorsWhileCopyingHandlerActivity.EXTRA_REMOTE_PATHS, remotePaths);  
+        explanationIntent.putExtra(ErrorsWhileCopyingHandlerActivity.EXTRA_REMOTE_PATHS, remotePaths);
         explanationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
-        
+
         notificationBuilder
             .setContentIntent(PendingIntent.getActivity(
                 getContext(), (int) System.currentTimeMillis(), explanationIntent, 0
@@ -497,13 +497,13 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
                     mForgottenLocalFiles.size(),
                     i18n(R.string.app_name))
             );
-        
+
         showNotification(R.string.sync_foreign_files_forgotten_ticker, notificationBuilder);
     }
-    
+
     /**
      * Creates a notification builder with some commonly used settings
-     * 
+     *
      * @return notification builder
      */
     private NotificationCompat.Builder createNotificationBuilder() {
@@ -512,10 +512,10 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
         notificationBuilder.setColor(ThemeUtils.primaryColor(getContext(), true));
         return notificationBuilder;
     }
-    
+
     /**
      * Builds and shows the notification
-     * 
+     *
      * @param id
      * @param builder
      */
@@ -531,7 +531,7 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
     }
     /**
      * Shorthand translation
-     * 
+     *
      * @param key
      * @param args
      * @return

+ 3 - 2
src/main/java/com/owncloud/android/ui/EmptyRecyclerView.java

@@ -22,11 +22,12 @@
 package com.owncloud.android.ui;
 
 import android.content.Context;
-import android.support.annotation.Nullable;
-import android.support.v7.widget.RecyclerView;
 import android.util.AttributeSet;
 import android.view.View;
 
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.RecyclerView;
+
 /**
  * Extends RecyclerView to show a custom view if no data is available
  * Inspired by http://alexzh.com/tutorials/how-to-setemptyview-to-recyclerview

+ 2 - 1
src/main/java/com/owncloud/android/ui/SquareImageView.java

@@ -19,9 +19,10 @@
 package com.owncloud.android.ui;
 
 import android.content.Context;
-import android.support.v7.widget.AppCompatImageView;
 import android.util.AttributeSet;
 
+import androidx.appcompat.widget.AppCompatImageView;
+
 public class SquareImageView extends AppCompatImageView {
 
     public SquareImageView(Context context) {

+ 2 - 1
src/main/java/com/owncloud/android/ui/TextDrawable.java

@@ -27,7 +27,6 @@ import android.graphics.ColorFilter;
 import android.graphics.Paint;
 import android.graphics.PixelFormat;
 import android.graphics.drawable.Drawable;
-import android.support.annotation.NonNull;
 
 import com.owncloud.android.authentication.AccountUtils;
 import com.owncloud.android.utils.BitmapUtils;
@@ -37,6 +36,8 @@ import java.io.UnsupportedEncodingException;
 import java.security.NoSuchAlgorithmException;
 import java.util.Locale;
 
+import androidx.annotation.NonNull;
+
 /**
  * A Drawable object that draws text (1 character) on top of a circular/filled background.
  */

+ 3 - 2
src/main/java/com/owncloud/android/ui/ThemeableSwitchPreference.java

@@ -25,8 +25,6 @@ import android.content.res.ColorStateList;
 import android.graphics.Color;
 import android.os.Build;
 import android.preference.SwitchPreference;
-import android.support.annotation.RequiresApi;
-import android.support.v4.graphics.drawable.DrawableCompat;
 import android.util.AttributeSet;
 import android.view.View;
 import android.view.ViewGroup;
@@ -34,6 +32,9 @@ import android.widget.Switch;
 
 import com.owncloud.android.utils.ThemeUtils;
 
+import androidx.annotation.RequiresApi;
+import androidx.core.graphics.drawable.DrawableCompat;
+
 
 /**
  * Themeable switch preference

+ 6 - 6
src/main/java/com/owncloud/android/ui/activities/ActivitiesActivity.java

@@ -21,12 +21,6 @@ package com.owncloud.android.ui.activities;
 import android.content.Intent;
 import android.graphics.PorterDuff;
 import android.os.Bundle;
-import android.support.annotation.NonNull;
-import android.support.design.widget.BottomNavigationView;
-import android.support.v4.widget.SwipeRefreshLayout;
-import android.support.v7.app.ActionBar;
-import android.support.v7.widget.LinearLayoutManager;
-import android.support.v7.widget.RecyclerView;
 import android.view.MenuItem;
 import android.view.View;
 import android.widget.ImageView;
@@ -35,6 +29,7 @@ import android.widget.ProgressBar;
 import android.widget.TextView;
 import android.widget.Toast;
 
+import com.google.android.material.bottomnavigation.BottomNavigationView;
 import com.owncloud.android.R;
 import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.OCFile;
@@ -54,6 +49,11 @@ import com.owncloud.android.utils.ThemeUtils;
 
 import java.util.List;
 
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.ActionBar;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
 import butterknife.BindString;
 import butterknife.BindView;
 import butterknife.ButterKnife;

+ 3 - 3
src/main/java/com/owncloud/android/ui/activities/ActivitiesPresenter.java

@@ -19,9 +19,6 @@
 
 package com.owncloud.android.ui.activities;
 
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.lib.common.OwnCloudClient;
 import com.owncloud.android.ui.activities.data.activities.ActivitiesRepository;
@@ -30,6 +27,9 @@ import com.owncloud.android.ui.activity.BaseActivity;
 
 import java.util.List;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
 public class ActivitiesPresenter implements ActivitiesContract.ActionListener {
 
     private final ActivitiesContract.View activitiesView;

+ 2 - 2
src/main/java/com/owncloud/android/ui/activities/data/activities/ActivitiesRepository.java

@@ -18,12 +18,12 @@
  */
 package com.owncloud.android.ui.activities.data.activities;
 
-import android.support.annotation.NonNull;
-
 import com.owncloud.android.lib.common.OwnCloudClient;
 
 import java.util.List;
 
+import androidx.annotation.NonNull;
+
 /**
  * Main entry point for accessing activities data.
  */

+ 1 - 1
src/main/java/com/owncloud/android/ui/activities/data/activities/ActivityRepositories.java

@@ -18,7 +18,7 @@
  */
 package com.owncloud.android.ui.activities.data.activities;
 
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
 
 public class ActivityRepositories {
 

+ 2 - 2
src/main/java/com/owncloud/android/ui/activities/data/activities/RemoteActivitiesRepository.java

@@ -18,12 +18,12 @@
  */
 package com.owncloud.android.ui.activities.data.activities;
 
-import android.support.annotation.NonNull;
-
 import com.owncloud.android.lib.common.OwnCloudClient;
 
 import java.util.List;
 
+import androidx.annotation.NonNull;
+
 public class RemoteActivitiesRepository implements ActivitiesRepository {
 
     private final ActivitiesServiceApi activitiesServiceApi;

+ 1 - 1
src/main/java/com/owncloud/android/ui/activities/data/files/FileRepositories.java

@@ -18,7 +18,7 @@
  */
 package com.owncloud.android.ui.activities.data.files;
 
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
 
 public class FileRepositories {
 

+ 3 - 3
src/main/java/com/owncloud/android/ui/activities/data/files/FilesRepository.java

@@ -18,12 +18,12 @@
  */
 package com.owncloud.android.ui.activities.data.files;
 
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.ui.activity.BaseActivity;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
 /**
  * Main entry point for accessing remote files
  */

+ 2 - 2
src/main/java/com/owncloud/android/ui/activities/data/files/RemoteFilesRepository.java

@@ -18,11 +18,11 @@
  */
 package com.owncloud.android.ui.activities.data.files;
 
-import android.support.annotation.NonNull;
-
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.ui.activity.BaseActivity;
 
+import androidx.annotation.NonNull;
+
 class RemoteFilesRepository implements FilesRepository {
 
     private final FilesServiceApi filesServiceApi;

+ 2 - 1
src/main/java/com/owncloud/android/ui/activity/BaseActivity.java

@@ -8,7 +8,6 @@ import android.accounts.OperationCanceledException;
 import android.content.Intent;
 import android.os.Bundle;
 import android.os.Handler;
-import android.support.v7.app.AppCompatActivity;
 
 import com.owncloud.android.MainApp;
 import com.owncloud.android.authentication.AccountUtils;
@@ -17,6 +16,8 @@ import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.lib.resources.status.OCCapability;
 
+import androidx.appcompat.app.AppCompatActivity;
+
 /**
  * Base activity with common behaviour for activities dealing with ownCloud {@link Account}s .
  */

+ 10 - 9
src/main/java/com/owncloud/android/ui/activity/ContactsPreferenceActivity.java

@@ -4,17 +4,17 @@
  * @author Tobias Kaminsky
  * Copyright (C) 2017 Tobias Kaminsky
  * Copyright (C) 2017 Nextcloud GmbH.
- * 
+ *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Affero General Public License as published by
  * the Free Software Foundation, either version 3 of the License, or
  * at your option) any later version.
- * 
+ *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU Affero General Public License for more details.
- * 
+ *
  * You should have received a copy of the GNU Affero General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
@@ -25,15 +25,12 @@ import android.accounts.Account;
 import android.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
-import android.support.design.widget.BottomNavigationView;
-import android.support.v4.app.FragmentManager;
-import android.support.v4.app.FragmentTransaction;
-import android.support.v4.widget.DrawerLayout;
 import android.view.View;
 
 import com.evernote.android.job.JobManager;
 import com.evernote.android.job.JobRequest;
 import com.evernote.android.job.util.support.PersistableBundleCompat;
+import com.google.android.material.bottomnavigation.BottomNavigationView;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
 import com.owncloud.android.datamodel.OCFile;
@@ -48,6 +45,10 @@ import org.parceler.Parcels;
 
 import java.util.Set;
 
+import androidx.drawerlayout.widget.DrawerLayout;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentTransaction;
+
 /**
  * This activity shows all settings for contact backup/restore
  */
@@ -79,7 +80,7 @@ public class ContactsPreferenceActivity extends FileActivity implements FileFrag
             if (getSupportActionBar() != null) {
                 getSupportActionBar().setDisplayHomeAsUpEnabled(true);
             }
-            
+
             if (mDrawerToggle != null) {
                 mDrawerToggle.setDrawerIndicatorEnabled(false);
             }
@@ -193,4 +194,4 @@ public class ContactsPreferenceActivity extends FileActivity implements FileFrag
             finish();
         }
     }
-}
+}

+ 7 - 6
src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java

@@ -38,12 +38,6 @@ import android.net.Uri;
 import android.os.Build;
 import android.os.Bundle;
 import android.os.Handler;
-import android.support.annotation.NonNull;
-import android.support.design.widget.NavigationView;
-import android.support.v4.view.GravityCompat;
-import android.support.v4.widget.DrawerLayout;
-import android.support.v7.app.ActionBarDrawerToggle;
-import android.support.v7.graphics.drawable.DrawerArrowDrawable;
 import android.text.Html;
 import android.text.TextUtils;
 import android.view.Menu;
@@ -59,6 +53,7 @@ import android.widget.TextView;
 import com.bumptech.glide.Glide;
 import com.bumptech.glide.request.animation.GlideAnimation;
 import com.bumptech.glide.request.target.SimpleTarget;
+import com.google.android.material.navigation.NavigationView;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
 import com.owncloud.android.authentication.AccountUtils;
@@ -106,6 +101,12 @@ import org.parceler.Parcels;
 import java.util.ArrayList;
 import java.util.List;
 
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.ActionBarDrawerToggle;
+import androidx.appcompat.graphics.drawable.DrawerArrowDrawable;
+import androidx.core.view.GravityCompat;
+import androidx.drawerlayout.widget.DrawerLayout;
+
 /**
  * Base class to handle setup of the drawer implementation including user switching and avatar fetching and fallback
  * generation.

+ 33 - 32
src/main/java/com/owncloud/android/ui/activity/ErrorsWhileCopyingHandlerActivity.java

@@ -26,9 +26,6 @@ import android.content.Intent;
 import android.os.AsyncTask;
 import android.os.Bundle;
 import android.os.Handler;
-import android.support.annotation.NonNull;
-import android.support.v4.app.DialogFragment;
-import android.support.v7.app.AppCompatActivity;
 import android.text.method.ScrollingMovementMethod;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -50,14 +47,18 @@ import com.owncloud.android.utils.FileStorageUtils;
 import java.io.File;
 import java.util.List;
 
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.fragment.app.DialogFragment;
+
 
 /**
  * Activity reporting errors occurred when local files uploaded to an ownCloud account with an app
  * in version under 1.3.16 where being copied to the ownCloud local folder.
- * 
+ *
  * Allows the user move the files to the ownCloud local folder. let them unlinked to the remote
  * files.
- * 
+ *
  * Shown when the error notification summarizing the list of errors is clicked by the user.
  */
 public class ErrorsWhileCopyingHandlerActivity  extends AppCompatActivity implements OnClickListener {
@@ -72,7 +73,7 @@ public class ErrorsWhileCopyingHandlerActivity  extends AppCompatActivity implem
             ErrorsWhileCopyingHandlerActivity.class.getCanonicalName() + ".EXTRA_REMOTE_PATHS";
 
     private static final String WAIT_DIALOG_TAG = "WAIT_DIALOG";
-    
+
     protected Account mAccount;
     protected FileDataStorageManager mStorageManager;
     protected List<String> mLocalPaths;
@@ -80,7 +81,7 @@ public class ErrorsWhileCopyingHandlerActivity  extends AppCompatActivity implem
     protected ArrayAdapter<String> mAdapter;
     protected Handler mHandler;
     private DialogFragment mCurrentDialog;
-    
+
     /**
      * {@link}
      */
@@ -99,20 +100,20 @@ public class ErrorsWhileCopyingHandlerActivity  extends AppCompatActivity implem
             mCurrentDialog.dismiss();
             mCurrentDialog = null;
         }
-        
+
         /// load generic layout
         setContentView(R.layout.generic_explanation);
-        
+
         /// customize text message
-        TextView textView = (TextView) findViewById(R.id.message);
+        TextView textView = findViewById(R.id.message);
         String appName = getString(R.string.app_name);
         String message = String.format(getString(R.string.sync_foreign_files_forgotten_explanation),
                 appName, appName, appName, appName, mAccount.name);
         textView.setText(message);
         textView.setMovementMethod(new ScrollingMovementMethod());
-        
+
         /// load the list of local and remote files that failed
-        ListView listView = (ListView) findViewById(R.id.list);
+        ListView listView = findViewById(R.id.list);
         if (mLocalPaths != null && mLocalPaths.size() > 0) {
             mAdapter = new ErrorsWhileCopyingListAdapter();
             listView.setAdapter(mAdapter);
@@ -120,11 +121,11 @@ public class ErrorsWhileCopyingHandlerActivity  extends AppCompatActivity implem
             listView.setVisibility(View.GONE);
             mAdapter = null;
         }
-        
+
         /// customize buttons
-        Button cancelBtn = (Button) findViewById(R.id.cancel);
-        Button okBtn = (Button) findViewById(R.id.ok);
-        
+        Button cancelBtn = findViewById(R.id.cancel);
+        Button okBtn = findViewById(R.id.ok);
+
         okBtn.setText(R.string.foreign_files_move);
         cancelBtn.setOnClickListener(this);
         okBtn.setOnClickListener(this);
@@ -135,7 +136,7 @@ public class ErrorsWhileCopyingHandlerActivity  extends AppCompatActivity implem
          * remote files as the secondary text.
          */
     public class ErrorsWhileCopyingListAdapter extends ArrayAdapter<String> {
-        
+
         ErrorsWhileCopyingListAdapter() {
             super(ErrorsWhileCopyingHandlerActivity.this, android.R.layout.two_line_list_item,
                     android.R.id.text1, mLocalPaths);
@@ -145,8 +146,8 @@ public class ErrorsWhileCopyingHandlerActivity  extends AppCompatActivity implem
         public boolean isEnabled(int position) {
             return false;
         }
-        
-        /**
+
+            /**
          * {@inheritDoc}
          */
         @Override
@@ -160,14 +161,14 @@ public class ErrorsWhileCopyingHandlerActivity  extends AppCompatActivity implem
             if (view != null)  {
                 String localPath = getItem(position);
                 if (localPath != null) {
-                    TextView text1 = (TextView) view.findViewById(android.R.id.text1);
+                    TextView text1 = view.findViewById(android.R.id.text1);
                     if (text1 != null) {
                         text1.setText(String.format(getString(R.string.foreign_files_local_text), localPath));
                     }
                 }
                 if (mRemotePaths != null && mRemotePaths.size() > 0 && position >= 0 &&
                         position < mRemotePaths.size()) {
-                    TextView text2 = (TextView) view.findViewById(android.R.id.text2);
+                    TextView text2 = view.findViewById(android.R.id.text2);
                     String remotePath = mRemotePaths.get(position);
                     if (text2 != null && remotePath != null) {
                         text2.setText(String.format(getString(R.string.foreign_files_remote_text), remotePath));
@@ -181,7 +182,7 @@ public class ErrorsWhileCopyingHandlerActivity  extends AppCompatActivity implem
 
     /**
      * Listener method to perform the MOVE / CANCEL action available in this activity.
-     * 
+     *
      * @param v     Clicked view (button MOVE or CANCEL)
      */
     @Override
@@ -189,19 +190,19 @@ public class ErrorsWhileCopyingHandlerActivity  extends AppCompatActivity implem
         if (v.getId() == R.id.ok) {
             /// perform movement operation in background thread
             Log_OC.d(TAG, "Clicked MOVE, start movement");
-            new MoveFilesTask().execute();            
-            
+            new MoveFilesTask().execute();
+
         } else if (v.getId() == R.id.cancel) {
             /// just finish
             Log_OC.d(TAG, "Clicked CANCEL, bye");
             finish();
-            
+
         } else {
             Log_OC.e(TAG, "Clicked phantom button, id: " + v.getId());
         }
     }
 
-    
+
     /**
      * Asynchronous task performing the move of all the local files to the ownCloud folder.
      */
@@ -217,11 +218,11 @@ public class ErrorsWhileCopyingHandlerActivity  extends AppCompatActivity implem
             mCurrentDialog.show(getSupportFragmentManager(), WAIT_DIALOG_TAG);
             findViewById(R.id.ok).setEnabled(false);
         }
-        
-        
+
+
         /**
          * Performs the movement
-         * 
+         *
          * @return     'False' when the movement of any file fails.
          */
         @Override
@@ -239,10 +240,10 @@ public class ErrorsWhileCopyingHandlerActivity  extends AppCompatActivity implem
                     mStorageManager.saveFile(file);
                     mRemotePaths.remove(0);
                     mLocalPaths.remove(0);
-                        
+
                 } else {
                     // FAIL
-                    return false;   
+                    return false;
                 }
             }
             return true;
@@ -263,7 +264,7 @@ public class ErrorsWhileCopyingHandlerActivity  extends AppCompatActivity implem
             mCurrentDialog.dismiss();
             mCurrentDialog = null;
             findViewById(R.id.ok).setEnabled(true);
-            
+
             if (result) {
                 // nothing else to do in this activity
                 DisplayUtils.showSnackMessage(findViewById(android.R.id.content), R.string.foreign_files_success);

+ 3 - 2
src/main/java/com/owncloud/android/ui/activity/ExternalSiteWebView.java

@@ -24,8 +24,6 @@ package com.owncloud.android.ui.activity;
 import android.annotation.SuppressLint;
 import android.content.Intent;
 import android.os.Bundle;
-import android.support.v4.widget.DrawerLayout;
-import android.support.v7.app.ActionBar;
 import android.view.MenuItem;
 import android.view.Window;
 import android.webkit.WebChromeClient;
@@ -42,6 +40,9 @@ import com.owncloud.android.utils.ThemeUtils;
 
 import java.io.InputStream;
 
+import androidx.appcompat.app.ActionBar;
+import androidx.drawerlayout.widget.DrawerLayout;
+
 /**
  * This activity shows an URL as a web view
  */

+ 5 - 4
src/main/java/com/owncloud/android/ui/activity/FileActivity.java

@@ -34,12 +34,9 @@ import android.net.Uri;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.IBinder;
-import android.support.design.widget.Snackbar;
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentManager;
-import android.support.v4.app.FragmentTransaction;
 import android.view.View;
 
+import com.google.android.material.snackbar.Snackbar;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
 import com.owncloud.android.authentication.AuthenticatorActivity;
@@ -78,6 +75,10 @@ import com.owncloud.android.utils.ErrorMessageAdapter;
 import com.owncloud.android.utils.FilesSyncHelper;
 import com.owncloud.android.utils.ThemeUtils;
 
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentTransaction;
+
 
 /**
  * Activity with common behaviour for activities handling {@link OCFile}s in ownCloud {@link Account}s .

+ 17 - 16
src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java

@@ -46,18 +46,6 @@ import android.os.Build;
 import android.os.Bundle;
 import android.os.IBinder;
 import android.os.Parcelable;
-import android.support.annotation.NonNull;
-import android.support.annotation.StringRes;
-import android.support.design.widget.BottomNavigationView;
-import android.support.design.widget.Snackbar;
-import android.support.v4.app.DialogFragment;
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentManager;
-import android.support.v4.app.FragmentTransaction;
-import android.support.v4.content.ContextCompat;
-import android.support.v4.view.MenuItemCompat;
-import android.support.v7.app.AlertDialog;
-import android.support.v7.widget.SearchView;
 import android.text.TextUtils;
 import android.view.Menu;
 import android.view.MenuInflater;
@@ -67,6 +55,8 @@ import android.view.ViewTreeObserver;
 import android.widget.EditText;
 import android.widget.ImageView;
 
+import com.google.android.material.bottomnavigation.BottomNavigationView;
+import com.google.android.material.snackbar.Snackbar;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
 import com.owncloud.android.datamodel.ArbitraryDataProvider;
@@ -144,6 +134,17 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.StringRes;
+import androidx.appcompat.app.AlertDialog;
+import androidx.appcompat.widget.SearchView;
+import androidx.core.content.ContextCompat;
+import androidx.core.view.MenuItemCompat;
+import androidx.fragment.app.DialogFragment;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentTransaction;
+
 /**
  * Displays, what files the user has available in his ownCloud. This is the main view.
  */
@@ -783,10 +784,10 @@ public class FileDisplayActivity extends HookActivity
 
         // hacky as no default way is provided
         int fontColor = ThemeUtils.fontColor(this);
-        EditText editText = searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
+        EditText editText = searchView.findViewById(androidx.appcompat.R.id.search_src_text);
         editText.setHintTextColor(fontColor);
         editText.setTextColor(fontColor);
-        ImageView searchClose = searchView.findViewById(android.support.v7.appcompat.R.id.search_close_btn);
+        ImageView searchClose = searchView.findViewById(androidx.appcompat.R.id.search_close_btn);
         searchClose.setColorFilter(ThemeUtils.fontColor(this));
 
         // populate list of menu items to show/hide when drawer is opened/closed
@@ -809,7 +810,7 @@ public class FileDisplayActivity extends HookActivity
         }
 
         final View mSearchEditFrame = searchView
-                .findViewById(android.support.v7.appcompat.R.id.search_edit_frame);
+            .findViewById(androidx.appcompat.R.id.search_edit_frame);
 
         searchView.setOnCloseListener(new SearchView.OnCloseListener() {
             @Override
@@ -1119,7 +1120,7 @@ public class FileDisplayActivity extends HookActivity
         if (searchView == null) {
             return false;
         } else {
-            View mSearchEditFrame = searchView.findViewById(android.support.v7.appcompat.R.id.search_edit_frame);
+            View mSearchEditFrame = searchView.findViewById(androidx.appcompat.R.id.search_edit_frame);
             return mSearchEditFrame != null && mSearchEditFrame.getVisibility() == View.VISIBLE;
         }
     }

+ 2 - 1
src/main/java/com/owncloud/android/ui/activity/FilePickerActivity.java

@@ -22,7 +22,6 @@
 package com.owncloud.android.ui.activity;
 
 import android.os.Bundle;
-import android.support.v4.app.FragmentTransaction;
 import android.view.View;
 
 import com.owncloud.android.R;
@@ -30,6 +29,8 @@ import com.owncloud.android.ui.dialog.SortingOrderDialogFragment;
 import com.owncloud.android.ui.fragment.OCFileListFragment;
 import com.owncloud.android.utils.FileSortOrder;
 
+import androidx.fragment.app.FragmentTransaction;
+
 /**
  * File picker of remote files
  */

+ 2 - 1
src/main/java/com/owncloud/android/ui/activity/FirstRunActivity.java

@@ -30,7 +30,6 @@ import android.content.res.Configuration;
 import android.graphics.Color;
 import android.net.Uri;
 import android.os.Bundle;
-import android.support.v4.view.ViewPager;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.Button;
@@ -47,6 +46,8 @@ import com.owncloud.android.ui.adapter.FeaturesViewAdapter;
 import com.owncloud.android.ui.whatsnew.ProgressIndicator;
 import com.owncloud.android.utils.DisplayUtils;
 
+import androidx.viewpager.widget.ViewPager;
+
 /**
  * Activity displaying general feature after a fresh install.
  */

+ 5 - 4
src/main/java/com/owncloud/android/ui/activity/FolderPickerActivity.java

@@ -31,10 +31,6 @@ import android.graphics.PorterDuff;
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
 import android.os.Parcelable;
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentManager;
-import android.support.v4.app.FragmentTransaction;
-import android.support.v7.app.ActionBar;
 import android.util.Log;
 import android.view.Menu;
 import android.view.MenuInflater;
@@ -63,6 +59,11 @@ import com.owncloud.android.utils.ThemeUtils;
 
 import java.util.ArrayList;
 
+import androidx.appcompat.app.ActionBar;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentTransaction;
+
 import static com.owncloud.android.db.PreferenceManager.getSortOrderByFolder;
 
 public class FolderPickerActivity extends FileActivity implements FileFragment.ContainerActivity,

+ 12 - 9
src/main/java/com/owncloud/android/ui/activity/LogHistoryActivity.java

@@ -26,17 +26,13 @@ import android.net.Uri;
 import android.os.AsyncTask;
 import android.os.Build;
 import android.os.Bundle;
-import android.support.design.widget.Snackbar;
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentManager;
-import android.support.v4.app.FragmentTransaction;
-import android.support.v4.content.FileProvider;
 import android.view.MenuItem;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.widget.Button;
 import android.widget.TextView;
 
+import com.google.android.material.snackbar.Snackbar;
 import com.owncloud.android.R;
 import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.ui.dialog.LoadingDialog;
@@ -48,8 +44,14 @@ import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.lang.ref.WeakReference;
+import java.nio.charset.Charset;
 import java.util.ArrayList;
 
+import androidx.core.content.FileProvider;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentTransaction;
+
 
 public class LogHistoryActivity extends ToolbarActivity {
 
@@ -83,7 +85,7 @@ public class LogHistoryActivity extends ToolbarActivity {
         TextView logTV = findViewById(R.id.logTV);
 
         deleteHistoryButton.setOnClickListener(new OnClickListener() {
-            
+
             @Override
             public void onClick(View v) {
 
@@ -215,7 +217,8 @@ public class LogHistoryActivity extends ToolbarActivity {
                     File file = new File(mLogPath,logFileName[i]);
                     if (file.exists()) {
                         // Check if FileReader is ready
-                        final InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream(file), "UTF8");
+                        final InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream(file),
+                                                                                          Charset.forName("UTF-8"));
                         if (inputStreamReader.ready()) {
                             br = new BufferedReader(inputStreamReader);
                             while ((line = br.readLine()) != null) {
@@ -229,7 +232,7 @@ public class LogHistoryActivity extends ToolbarActivity {
             }
             catch (IOException e) {
                 Log_OC.d(TAG, e.getMessage());
-                
+
             } finally {
                 if (br != null) {
                     try {
@@ -276,4 +279,4 @@ public class LogHistoryActivity extends ToolbarActivity {
             outState.putString(KEY_LOG_TEXT, mLogText);
         }
     }
-}
+}

+ 5 - 4
src/main/java/com/owncloud/android/ui/activity/ManageAccountsActivity.java

@@ -32,8 +32,6 @@ import android.graphics.drawable.Drawable;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.IBinder;
-import android.support.v4.content.ContextCompat;
-import android.support.v4.graphics.drawable.DrawableCompat;
 import android.view.MenuItem;
 import android.view.View;
 import android.widget.AdapterView;
@@ -68,6 +66,9 @@ import java.util.Arrays;
 import java.util.List;
 import java.util.Set;
 
+import androidx.core.content.ContextCompat;
+import androidx.core.graphics.drawable.DrawableCompat;
+
 /**
  * An Activity that allows the user to manage accounts.
  */
@@ -181,7 +182,7 @@ public class ManageAccountsActivity extends FileActivity
         resultIntent.putExtra(KEY_ACCOUNT_LIST_CHANGED, hasAccountListChanged());
         resultIntent.putExtra(KEY_CURRENT_ACCOUNT_CHANGED, hasCurrentAccountChanged());
         setResult(RESULT_OK, resultIntent);
-        
+
         super.onBackPressed();
     }
 
@@ -338,7 +339,7 @@ public class ManageAccountsActivity extends FileActivity
                     mDownloaderBinder.cancel(account);
                 }
             }
-            
+
             if (AccountUtils.getCurrentOwnCloudAccount(this) == null) {
                 String accountName = "";
                 Account[] accounts = AccountManager.get(this).getAccountsByType(MainApp.getAccountType(this));

+ 4 - 3
src/main/java/com/owncloud/android/ui/activity/ManageSpaceActivity.java

@@ -24,19 +24,20 @@ import android.content.SharedPreferences;
 import android.os.AsyncTask;
 import android.os.Bundle;
 import android.preference.PreferenceManager;
-import android.support.design.widget.Snackbar;
-import android.support.v7.app.ActionBar;
-import android.support.v7.app.AppCompatActivity;
 import android.view.MenuItem;
 import android.view.View;
 import android.widget.Button;
 import android.widget.TextView;
 
+import com.google.android.material.snackbar.Snackbar;
 import com.owncloud.android.R;
 import com.owncloud.android.lib.common.utils.Log_OC;
 
 import java.io.File;
 
+import androidx.appcompat.app.ActionBar;
+import androidx.appcompat.app.AppCompatActivity;
+
 public class ManageSpaceActivity extends AppCompatActivity {
 
     private static final String TAG = ManageSpaceActivity.class.getSimpleName();

+ 5 - 5
src/main/java/com/owncloud/android/ui/activity/NotificationsActivity.java

@@ -28,11 +28,6 @@ import android.accounts.OperationCanceledException;
 import android.content.Intent;
 import android.graphics.PorterDuff;
 import android.os.Bundle;
-import android.support.design.widget.BottomNavigationView;
-import android.support.design.widget.Snackbar;
-import android.support.v4.widget.SwipeRefreshLayout;
-import android.support.v7.widget.LinearLayoutManager;
-import android.support.v7.widget.RecyclerView;
 import android.view.MenuItem;
 import android.view.View;
 import android.widget.ImageView;
@@ -40,6 +35,8 @@ import android.widget.LinearLayout;
 import android.widget.ProgressBar;
 import android.widget.TextView;
 
+import com.google.android.material.bottomnavigation.BottomNavigationView;
+import com.google.android.material.snackbar.Snackbar;
 import com.owncloud.android.R;
 import com.owncloud.android.authentication.AccountUtils;
 import com.owncloud.android.datamodel.ArbitraryDataProvider;
@@ -60,6 +57,9 @@ import com.owncloud.android.utils.ThemeUtils;
 import java.io.IOException;
 import java.util.List;
 
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
 import butterknife.BindString;
 import butterknife.BindView;
 import butterknife.ButterKnife;

+ 2 - 2
src/main/java/com/owncloud/android/ui/activity/OnEnforceableRefreshListener.java

@@ -21,11 +21,11 @@
 
 package com.owncloud.android.ui.activity;
 
-import android.support.v4.widget.SwipeRefreshLayout;
+import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
 
     public interface OnEnforceableRefreshListener extends SwipeRefreshLayout.OnRefreshListener {
 
-        public void onRefresh(boolean enforced);
+        void onRefresh(boolean enforced);
 
     }
 

+ 2 - 1
src/main/java/com/owncloud/android/ui/activity/ParticipateActivity.java

@@ -24,7 +24,6 @@ package com.owncloud.android.ui.activity;
 import android.content.Intent;
 import android.graphics.PorterDuff;
 import android.os.Bundle;
-import android.support.v7.widget.AppCompatButton;
 import android.text.Html;
 import android.text.method.LinkMovementMethod;
 import android.view.MenuItem;
@@ -35,6 +34,8 @@ import com.owncloud.android.R;
 import com.owncloud.android.utils.DisplayUtils;
 import com.owncloud.android.utils.ThemeUtils;
 
+import androidx.appcompat.widget.AppCompatButton;
+
 /**
  * Activity providing information about ways to participate in the app's development.
  */

+ 5 - 4
src/main/java/com/owncloud/android/ui/activity/PassCodeActivity.java

@@ -27,8 +27,6 @@ import android.content.SharedPreferences;
 import android.graphics.PorterDuff;
 import android.os.Bundle;
 import android.preference.PreferenceManager;
-import android.support.design.widget.Snackbar;
-import android.support.v7.app.AppCompatActivity;
 import android.text.Editable;
 import android.text.TextWatcher;
 import android.view.KeyEvent;
@@ -40,12 +38,15 @@ import android.widget.Button;
 import android.widget.EditText;
 import android.widget.TextView;
 
+import com.google.android.material.snackbar.Snackbar;
 import com.owncloud.android.R;
 import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.utils.ThemeUtils;
 
 import java.util.Arrays;
 
+import androidx.appcompat.app.AppCompatActivity;
+
 public class    PassCodeActivity extends AppCompatActivity {
 
     private static final String TAG = PassCodeActivity.class.getSimpleName();
@@ -99,7 +100,7 @@ public class    PassCodeActivity extends AppCompatActivity {
         mPassCodeEditTexts[0] = findViewById(R.id.txt0);
         ThemeUtils.colorEditText(mPassCodeEditTexts[0], elementColor);
         mPassCodeEditTexts[0].requestFocus();
-        
+
         mPassCodeEditTexts[1] = findViewById(R.id.txt1);
         ThemeUtils.colorEditText(mPassCodeEditTexts[1], elementColor);
 
@@ -113,7 +114,7 @@ public class    PassCodeActivity extends AppCompatActivity {
         if (window != null) {
             window.setSoftInputMode(android.view.WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
         }
-        
+
         if (ACTION_CHECK.equals(getIntent().getAction())) {
             /// this is a pass code request; the user has to input the right value
             mPassCodeHdr.setText(R.string.pass_code_enter_pass_code);

+ 8 - 7
src/main/java/com/owncloud/android/ui/activity/Preferences.java

@@ -41,12 +41,6 @@ import android.preference.PreferenceCategory;
 import android.preference.PreferenceManager;
 import android.preference.PreferenceScreen;
 import android.preference.SwitchPreference;
-import android.support.annotation.LayoutRes;
-import android.support.annotation.NonNull;
-import android.support.v4.content.res.ResourcesCompat;
-import android.support.v7.app.ActionBar;
-import android.support.v7.app.AlertDialog;
-import android.support.v7.app.AppCompatDelegate;
 import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.MenuItem;
@@ -78,10 +72,17 @@ import com.owncloud.android.utils.ThemeUtils;
 
 import java.util.ArrayList;
 
+import androidx.annotation.LayoutRes;
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.ActionBar;
+import androidx.appcompat.app.AlertDialog;
+import androidx.appcompat.app.AppCompatDelegate;
+import androidx.core.content.res.ResourcesCompat;
+
 /**
  * An Activity that allows the user to change the application's settings.
  *
- * It proxies the necessary calls via {@link android.support.v7.app.AppCompatDelegate} to be used with AppCompat.
+ * It proxies the necessary calls via {@link androidx.appcompat.app.AppCompatDelegate} to be used with AppCompat.
  */
 public class Preferences extends PreferenceActivity
         implements StorageMigration.StorageMigrationProgressListener, LoadingVersionNumberTask.VersionDevInterface {

+ 17 - 16
src/main/java/com/owncloud/android/ui/activity/ReceiveExternalFilesActivity.java

@@ -40,19 +40,6 @@ import android.os.Bundle;
 import android.os.Handler;
 import android.os.Looper;
 import android.os.Parcelable;
-import android.support.annotation.DrawableRes;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.StringRes;
-import android.support.v4.app.DialogFragment;
-import android.support.v4.app.FragmentManager;
-import android.support.v4.content.ContextCompat;
-import android.support.v4.graphics.drawable.DrawableCompat;
-import android.support.v4.view.MenuItemCompat;
-import android.support.v7.app.ActionBar;
-import android.support.v7.app.AlertDialog;
-import android.support.v7.app.AlertDialog.Builder;
-import android.support.v7.widget.SearchView;
 import android.text.format.DateFormat;
 import android.view.LayoutInflater;
 import android.view.Menu;
@@ -115,6 +102,20 @@ import java.util.List;
 import java.util.Stack;
 import java.util.Vector;
 
+import androidx.annotation.DrawableRes;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.StringRes;
+import androidx.appcompat.app.ActionBar;
+import androidx.appcompat.app.AlertDialog;
+import androidx.appcompat.app.AlertDialog.Builder;
+import androidx.appcompat.widget.SearchView;
+import androidx.core.content.ContextCompat;
+import androidx.core.graphics.drawable.DrawableCompat;
+import androidx.core.view.MenuItemCompat;
+import androidx.fragment.app.DialogFragment;
+import androidx.fragment.app.FragmentManager;
+
 /**
  * This can be used to upload things to an ownCloud instance.
  */
@@ -1047,12 +1048,12 @@ public class ReceiveExternalFilesActivity extends FileActivity
 
         // hacky as no default way is provided
         int fontColor = ThemeUtils.fontColor(this);
-        EditText editText = searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
+        EditText editText = searchView.findViewById(androidx.appcompat.R.id.search_src_text);
         editText.setHintTextColor(fontColor);
         editText.setTextColor(fontColor);
-        ImageView searchClose = searchView.findViewById(android.support.v7.appcompat.R.id.search_close_btn);
+        ImageView searchClose = searchView.findViewById(androidx.appcompat.R.id.search_close_btn);
         searchClose.setColorFilter(ThemeUtils.fontColor(this));
-        ImageView searchButton = searchView.findViewById(android.support.v7.appcompat.R.id.search_button);
+        ImageView searchButton = searchView.findViewById(androidx.appcompat.R.id.search_button);
         searchButton.setColorFilter(ThemeUtils.fontColor(this));
 
         return true;

+ 2 - 1
src/main/java/com/owncloud/android/ui/activity/RequestCredentialsActivity.java

@@ -25,7 +25,6 @@ import android.app.KeyguardManager;
 import android.content.Context;
 import android.content.Intent;
 import android.os.Build;
-import android.support.annotation.RequiresApi;
 import android.widget.Toast;
 
 import com.owncloud.android.R;
@@ -33,6 +32,8 @@ import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.utils.DeviceCredentialUtils;
 import com.owncloud.android.utils.DisplayUtils;
 
+import androidx.annotation.RequiresApi;
+
 /**
  * Dummy activity that is used to handle the device's default authentication workflow.
  */

+ 1 - 1
src/main/java/com/owncloud/android/ui/activity/RichDocumentsWebView.java

@@ -30,7 +30,6 @@ import android.net.Uri;
 import android.os.AsyncTask;
 import android.os.Build;
 import android.os.Bundle;
-import android.support.annotation.RequiresApi;
 import android.text.TextUtils;
 import android.view.View;
 import android.webkit.JavascriptInterface;
@@ -61,6 +60,7 @@ import org.parceler.Parcels;
 
 import java.lang.ref.WeakReference;
 
+import androidx.annotation.RequiresApi;
 import butterknife.BindView;
 import butterknife.ButterKnife;
 import butterknife.Unbinder;

+ 8 - 7
src/main/java/com/owncloud/android/ui/activity/ShareActivity.java

@@ -5,16 +5,16 @@
  * @author David A. Velasco
  * @author Juan Carlos González Cabrero
  * Copyright (C) 2015 ownCloud Inc.
- * 
+ *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2,
  * as published by the Free Software Foundation.
- * 
+ *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
- * 
+ *
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
@@ -25,11 +25,8 @@ import android.app.SearchManager;
 import android.content.Intent;
 import android.net.Uri;
 import android.os.Bundle;
-import android.support.design.widget.Snackbar;
-import android.support.v4.app.DialogFragment;
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentTransaction;
 
+import com.google.android.material.snackbar.Snackbar;
 import com.owncloud.android.R;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.lib.common.OwnCloudAccount;
@@ -54,6 +51,10 @@ import com.owncloud.android.utils.GetShareWithUsersAsyncTask;
 
 import java.util.ArrayList;
 
+import androidx.fragment.app.DialogFragment;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentTransaction;
+
 /**
  * Activity for sharing files.
  */

+ 12 - 11
src/main/java/com/owncloud/android/ui/activity/SyncedFoldersActivity.java

@@ -27,16 +27,6 @@ import android.content.SharedPreferences;
 import android.content.pm.PackageManager;
 import android.os.Bundle;
 import android.preference.PreferenceManager;
-import android.support.annotation.NonNull;
-import android.support.design.widget.AppBarLayout;
-import android.support.design.widget.BottomNavigationView;
-import android.support.design.widget.CollapsingToolbarLayout;
-import android.support.v4.app.FragmentManager;
-import android.support.v4.app.FragmentTransaction;
-import android.support.v4.widget.DrawerLayout;
-import android.support.v7.app.ActionBar;
-import android.support.v7.widget.GridLayoutManager;
-import android.support.v7.widget.RecyclerView;
 import android.text.TextUtils;
 import android.util.Log;
 import android.view.MenuItem;
@@ -45,6 +35,9 @@ import android.widget.LinearLayout;
 import android.widget.RelativeLayout;
 import android.widget.TextView;
 
+import com.google.android.material.appbar.AppBarLayout;
+import com.google.android.material.appbar.CollapsingToolbarLayout;
+import com.google.android.material.bottomnavigation.BottomNavigationView;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
 import com.owncloud.android.authentication.AccountUtils;
@@ -77,7 +70,15 @@ import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 
-import static android.support.design.widget.AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS;
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.ActionBar;
+import androidx.drawerlayout.widget.DrawerLayout;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentTransaction;
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import static com.google.android.material.appbar.AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS;
 import static com.owncloud.android.datamodel.SyncedFolderDisplayItem.UNPERSISTED_ID;
 
 /**

+ 6 - 5
src/main/java/com/owncloud/android/ui/activity/ToolbarActivity.java

@@ -26,11 +26,6 @@ import android.graphics.Bitmap;
 import android.graphics.PorterDuff;
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
-import android.support.annotation.ColorInt;
-import android.support.annotation.StringRes;
-import android.support.v4.content.ContextCompat;
-import android.support.v7.app.ActionBar;
-import android.support.v7.widget.Toolbar;
 import android.view.View;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
@@ -42,6 +37,12 @@ import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.utils.ThemeUtils;
 
+import androidx.annotation.ColorInt;
+import androidx.annotation.StringRes;
+import androidx.appcompat.app.ActionBar;
+import androidx.appcompat.widget.Toolbar;
+import androidx.core.content.ContextCompat;
+
 /**
  * Base class providing toolbar registration functionality, see {@link #setupToolbar()}.
  */

+ 15 - 14
src/main/java/com/owncloud/android/ui/activity/UploadFilesActivity.java

@@ -30,17 +30,6 @@ import android.graphics.drawable.Drawable;
 import android.os.AsyncTask;
 import android.os.Bundle;
 import android.os.Environment;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.v4.app.DialogFragment;
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentManager;
-import android.support.v4.app.FragmentTransaction;
-import android.support.v4.view.MenuItemCompat;
-import android.support.v7.app.ActionBar;
-import android.support.v7.widget.AppCompatButton;
-import android.support.v7.widget.AppCompatSpinner;
-import android.support.v7.widget.SearchView;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
@@ -70,6 +59,18 @@ import java.io.File;
 import java.util.ArrayList;
 import java.util.List;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.ActionBar;
+import androidx.appcompat.widget.AppCompatButton;
+import androidx.appcompat.widget.AppCompatSpinner;
+import androidx.appcompat.widget.SearchView;
+import androidx.core.view.MenuItemCompat;
+import androidx.fragment.app.DialogFragment;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentTransaction;
+
 /**
  * Displays local files and let the user choose what of them wants to upload
  * to the current ownCloud account.
@@ -247,10 +248,10 @@ public class UploadFilesActivity extends FileActivity implements
         int fontColor = ThemeUtils.fontColor(this);
         final MenuItem item = menu.findItem(R.id.action_search);
         mSearchView = (SearchView) MenuItemCompat.getActionView(item);
-        EditText editText = mSearchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
+        EditText editText = mSearchView.findViewById(androidx.appcompat.R.id.search_src_text);
         editText.setHintTextColor(fontColor);
         editText.setTextColor(fontColor);
-        ImageView searchClose = mSearchView.findViewById(android.support.v7.appcompat.R.id.search_close_btn);
+        ImageView searchClose = mSearchView.findViewById(androidx.appcompat.R.id.search_close_btn);
         searchClose.setColorFilter(fontColor);
 
 
@@ -328,7 +329,7 @@ public class UploadFilesActivity extends FileActivity implements
         if (mSearchView == null) {
             return false;
         } else {
-            View mSearchEditFrame = mSearchView.findViewById(android.support.v7.appcompat.R.id.search_edit_frame);
+            View mSearchEditFrame = mSearchView.findViewById(androidx.appcompat.R.id.search_edit_frame);
             return mSearchEditFrame != null && mSearchEditFrame.getVisibility() == View.VISIBLE;
         }
     }

+ 3 - 3
src/main/java/com/owncloud/android/ui/activity/UploadListActivity.java

@@ -32,9 +32,6 @@ import android.content.SharedPreferences;
 import android.os.Bundle;
 import android.os.IBinder;
 import android.preference.PreferenceManager;
-import android.support.design.widget.BottomNavigationView;
-import android.support.v4.widget.SwipeRefreshLayout;
-import android.support.v7.widget.GridLayoutManager;
 import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.MenuItem;
@@ -44,6 +41,7 @@ import android.widget.TextView;
 
 import com.evernote.android.job.JobRequest;
 import com.evernote.android.job.util.support.PersistableBundleCompat;
+import com.google.android.material.bottomnavigation.BottomNavigationView;
 import com.owncloud.android.R;
 import com.owncloud.android.datamodel.UploadsStorageManager;
 import com.owncloud.android.files.services.FileUploader;
@@ -60,6 +58,8 @@ import com.owncloud.android.utils.DisplayUtils;
 import com.owncloud.android.utils.FilesSyncHelper;
 import com.owncloud.android.utils.ThemeUtils;
 
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
 import butterknife.BindString;
 import butterknife.BindView;
 import butterknife.ButterKnife;

+ 9 - 9
src/main/java/com/owncloud/android/ui/activity/UserInfoActivity.java

@@ -36,13 +36,6 @@ import android.graphics.drawable.ColorDrawable;
 import android.graphics.drawable.Drawable;
 import android.graphics.drawable.LayerDrawable;
 import android.os.Bundle;
-import android.support.annotation.ColorInt;
-import android.support.annotation.DrawableRes;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.StringRes;
-import android.support.v4.graphics.drawable.DrawableCompat;
-import android.support.v7.widget.RecyclerView;
 import android.text.TextUtils;
 import android.view.LayoutInflater;
 import android.view.Menu;
@@ -82,6 +75,13 @@ import org.parceler.Parcels;
 import java.util.LinkedList;
 import java.util.List;
 
+import androidx.annotation.ColorInt;
+import androidx.annotation.DrawableRes;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.StringRes;
+import androidx.core.graphics.drawable.DrawableCompat;
+import androidx.recyclerview.widget.RecyclerView;
 import butterknife.BindString;
 import butterknife.BindView;
 import butterknife.ButterKnife;
@@ -109,7 +109,7 @@ public class UserInfoActivity extends FileActivity {
     @BindView(R.id.userinfo_username_full) protected TextView fullName;
     @BindView(R.id.user_info_list) protected RecyclerView mUserInfoList;
     @BindView(R.id.empty_list_progress) protected ProgressBar multiListProgressBar;
-    
+
     @BindString(R.string.user_information_retrieval_error) protected String sorryMessage;
 
     private float mCurrentAccountAvatarRadiusDimension;
@@ -267,7 +267,7 @@ public class UserInfoActivity extends FileActivity {
         if (!TextUtils.isEmpty(userInfo.getDisplayName())) {
             fullName.setText(userInfo.getDisplayName());
         }
-        
+
         if (userInfo.getPhone() == null && userInfo.getEmail() == null && userInfo.getAddress() == null
                 && userInfo.getTwitter() == null && userInfo.getWebsite() == null) {
 

+ 6 - 5
src/main/java/com/owncloud/android/ui/activity/WhatsNewActivity.java

@@ -5,17 +5,17 @@
  * Copyright (C) 2015 Bartosz Przybylski
  * Copyright (C) 2015 ownCloud Inc.
  * Copyright (C) 2016 Nextcloud.
- * 
+ *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
  * License as published by the Free Software Foundation; either
  * version 3 of the License, or any later version.
- * 
+ *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
- * 
+ *
  * You should have received a copy of the GNU Affero General Public
  * License along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
@@ -26,8 +26,6 @@ import android.content.Context;
 import android.content.Intent;
 import android.os.Build;
 import android.os.Bundle;
-import android.support.v4.app.FragmentActivity;
-import android.support.v4.view.ViewPager;
 import android.view.View;
 import android.widget.Button;
 import android.widget.ImageButton;
@@ -43,6 +41,9 @@ import com.owncloud.android.ui.adapter.FeaturesWebViewAdapter;
 import com.owncloud.android.ui.whatsnew.ProgressIndicator;
 import com.owncloud.android.utils.ThemeUtils;
 
+import androidx.fragment.app.FragmentActivity;
+import androidx.viewpager.widget.ViewPager;
+
 /**
  * Activity displaying new features after an update.
  */

+ 3 - 2
src/main/java/com/owncloud/android/ui/adapter/AccountListAdapter.java

@@ -22,7 +22,6 @@ package com.owncloud.android.ui.adapter;
 import android.accounts.Account;
 import android.graphics.Paint;
 import android.graphics.drawable.Drawable;
-import android.support.annotation.NonNull;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -40,6 +39,8 @@ import com.owncloud.android.utils.ThemeUtils;
 
 import java.util.List;
 
+import androidx.annotation.NonNull;
+
 /**
  * This Adapter populates a ListView with all accounts within the app.
  */
@@ -135,7 +136,7 @@ public class AccountListAdapter extends ArrayAdapter<AccountListItem> implements
         } else {
             actionView.setOnClickListener(v -> mListener.createAccount());
         }
-        
+
         return actionView;
     }
 

+ 2 - 2
src/main/java/com/owncloud/android/ui/adapter/ActivityAndVersionListAdapter.java

@@ -1,8 +1,6 @@
 package com.owncloud.android.ui.adapter;
 
 import android.content.Context;
-import android.support.annotation.NonNull;
-import android.support.v7.widget.RecyclerView;
 import android.text.format.DateFormat;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -23,6 +21,8 @@ import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
 import butterknife.BindView;
 import butterknife.ButterKnife;
 

+ 3 - 2
src/main/java/com/owncloud/android/ui/adapter/ActivityListAdapter.java

@@ -24,8 +24,6 @@ import android.content.res.Resources;
 import android.graphics.Color;
 import android.graphics.drawable.PictureDrawable;
 import android.net.Uri;
-import android.support.annotation.NonNull;
-import android.support.v7.widget.RecyclerView;
 import android.text.Spannable;
 import android.text.SpannableStringBuilder;
 import android.text.TextPaint;
@@ -72,6 +70,9 @@ import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.List;
 
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+
 /**
  * Adapter for the activity view
  */

+ 4 - 4
src/main/java/com/owncloud/android/ui/adapter/FeaturesViewAdapter.java

@@ -1,12 +1,12 @@
 package com.owncloud.android.ui.adapter;
 
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentManager;
-import android.support.v4.app.FragmentPagerAdapter;
-
 import com.owncloud.android.features.FeatureItem;
 import com.owncloud.android.ui.fragment.FeatureFragment;
 
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentPagerAdapter;
+
 public class FeaturesViewAdapter extends FragmentPagerAdapter {
 
     private FeatureItem[] mFeatures;

+ 4 - 4
src/main/java/com/owncloud/android/ui/adapter/FeaturesWebViewAdapter.java

@@ -1,11 +1,11 @@
 package com.owncloud.android.ui.adapter;
 
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentManager;
-import android.support.v4.app.FragmentPagerAdapter;
-
 import com.owncloud.android.ui.fragment.FeatureWebFragment;
 
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentPagerAdapter;
+
 public class FeaturesWebViewAdapter extends FragmentPagerAdapter {
     private String[] mWebUrls;
 

+ 4 - 3
src/main/java/com/owncloud/android/ui/adapter/FileDetailTabAdapter.java

@@ -21,14 +21,15 @@
 package com.owncloud.android.ui.adapter;
 
 import android.accounts.Account;
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentManager;
-import android.support.v4.app.FragmentStatePagerAdapter;
 
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.ui.fragment.FileDetailActivitiesFragment;
 import com.owncloud.android.ui.fragment.FileDetailSharingFragment;
 
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentStatePagerAdapter;
+
 /**
  * File details pager adapter.
  */

+ 3 - 2
src/main/java/com/owncloud/android/ui/adapter/LocalFileListAdapter.java

@@ -24,8 +24,6 @@ import android.content.Context;
 import android.content.res.Resources;
 import android.graphics.Bitmap;
 import android.graphics.Color;
-import android.support.annotation.NonNull;
-import android.support.v7.widget.RecyclerView;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -51,6 +49,9 @@ import java.util.List;
 import java.util.Locale;
 import java.util.Set;
 
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+
 /**
  * This Adapter populates a {@link RecyclerView} with all files and directories contained in a local directory
  */

+ 2 - 2
src/main/java/com/owncloud/android/ui/adapter/NotificationListAdapter.java

@@ -26,8 +26,6 @@ import android.graphics.Typeface;
 import android.graphics.drawable.PictureDrawable;
 import android.net.Uri;
 import android.os.AsyncTask;
-import android.support.annotation.NonNull;
-import android.support.v7.widget.RecyclerView;
 import android.text.Spannable;
 import android.text.SpannableStringBuilder;
 import android.text.TextUtils;
@@ -72,6 +70,8 @@ import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.List;
 
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
 import butterknife.BindView;
 import butterknife.ButterKnife;
 

+ 3 - 2
src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java

@@ -30,8 +30,6 @@ import android.graphics.Bitmap;
 import android.graphics.Color;
 import android.os.Handler;
 import android.os.Looper;
-import android.support.annotation.NonNull;
-import android.support.v7.widget.RecyclerView;
 import android.text.TextUtils;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -78,6 +76,9 @@ import java.util.Locale;
 import java.util.Set;
 import java.util.Vector;
 
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+
 /**
  * This Adapter populates a RecyclerView with all files and folders in a Nextcloud instance.
  */

+ 2 - 1
src/main/java/com/owncloud/android/ui/adapter/SendButtonAdapter.java

@@ -21,7 +21,6 @@ package com.owncloud.android.ui.adapter;
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
-import android.support.v7.widget.RecyclerView;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -33,6 +32,8 @@ import com.owncloud.android.ui.components.SendButtonData;
 
 import java.util.List;
 
+import androidx.recyclerview.widget.RecyclerView;
+
 public class SendButtonAdapter extends RecyclerView.Adapter<SendButtonAdapter.ViewHolder> {
 
     private List<SendButtonData> sendButtonDataList;

+ 3 - 2
src/main/java/com/owncloud/android/ui/adapter/ShareUserListAdapter.java

@@ -21,8 +21,6 @@
 package com.owncloud.android.ui.adapter;
 
 import android.content.Context;
-import android.support.annotation.DrawableRes;
-import android.support.annotation.NonNull;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -37,6 +35,9 @@ import com.owncloud.android.ui.TextDrawable;
 import java.security.NoSuchAlgorithmException;
 import java.util.List;
 
+import androidx.annotation.DrawableRes;
+import androidx.annotation.NonNull;
+
 /**
  * Adapter to show a user/group in Share With List
  */

+ 1 - 1
src/main/java/com/owncloud/android/ui/adapter/SyncedFolderAdapter.java

@@ -22,7 +22,6 @@
 package com.owncloud.android.ui.adapter;
 
 import android.content.Context;
-import android.support.annotation.NonNull;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -45,6 +44,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Locale;
 
+import androidx.annotation.NonNull;
 import butterknife.BindView;
 import butterknife.ButterKnife;
 

+ 2 - 2
src/main/java/com/owncloud/android/ui/adapter/TemplateAdapter.java

@@ -22,8 +22,6 @@
 package com.owncloud.android.ui.adapter;
 
 import android.content.Context;
-import android.support.annotation.NonNull;
-import android.support.v7.widget.RecyclerView;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -39,6 +37,8 @@ import com.owncloud.android.utils.glide.CustomGlideStreamLoader;
 import java.util.ArrayList;
 import java.util.List;
 
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
 import butterknife.BindView;
 import butterknife.ButterKnife;
 

+ 2 - 2
src/main/java/com/owncloud/android/ui/adapter/TrashbinListAdapter.java

@@ -24,8 +24,6 @@ import android.accounts.Account;
 import android.content.Context;
 import android.content.res.Resources;
 import android.graphics.Bitmap;
-import android.support.annotation.NonNull;
-import android.support.v7.widget.RecyclerView;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -48,6 +46,8 @@ import com.owncloud.android.utils.MimeTypeUtil;
 import java.util.ArrayList;
 import java.util.List;
 
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
 import butterknife.BindView;
 import butterknife.ButterKnife;
 

+ 1 - 1
src/main/java/com/owncloud/android/ui/adapter/UploadListAdapter.java

@@ -26,7 +26,6 @@ import android.content.ActivityNotFoundException;
 import android.content.Intent;
 import android.graphics.Bitmap;
 import android.net.Uri;
-import android.support.annotation.NonNull;
 import android.text.format.DateUtils;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -58,6 +57,7 @@ import java.io.File;
 import java.util.Arrays;
 import java.util.Comparator;
 
+import androidx.annotation.NonNull;
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 
 /**

+ 5 - 5
src/main/java/com/owncloud/android/ui/adapter/UserListAdapter.java

@@ -24,11 +24,6 @@ package com.owncloud.android.ui.adapter;
 import android.accounts.Account;
 import android.content.Context;
 import android.graphics.drawable.Drawable;
-import android.support.annotation.DrawableRes;
-import android.support.annotation.NonNull;
-import android.support.v4.app.FragmentManager;
-import android.support.v7.widget.AppCompatCheckBox;
-import android.support.v7.widget.RecyclerView;
 import android.view.LayoutInflater;
 import android.view.Menu;
 import android.view.MenuItem;
@@ -55,6 +50,11 @@ import com.owncloud.android.utils.ThemeUtils;
 import java.security.NoSuchAlgorithmException;
 import java.util.List;
 
+import androidx.annotation.DrawableRes;
+import androidx.annotation.NonNull;
+import androidx.appcompat.widget.AppCompatCheckBox;
+import androidx.fragment.app.FragmentManager;
+import androidx.recyclerview.widget.RecyclerView;
 import butterknife.BindView;
 import butterknife.ButterKnife;
 

+ 11 - 10
src/main/java/com/owncloud/android/ui/adapter/X509CertificateViewAdapter.java

@@ -20,7 +20,6 @@
 package com.owncloud.android.ui.adapter;
 
 import android.content.Context;
-import android.support.annotation.NonNull;
 import android.util.Log;
 import android.view.View;
 import android.widget.TextView;
@@ -39,11 +38,13 @@ import java.util.Map;
 
 import javax.security.auth.x500.X500Principal;
 
+import androidx.annotation.NonNull;
+
 /**
  * Show certificate information.
  */
 public class X509CertificateViewAdapter implements SslUntrustedCertDialog.CertificateViewAdapter {
-    
+
     private X509Certificate mCertificate;
 
     private static final String TAG = X509CertificateViewAdapter.class.getSimpleName();
@@ -51,18 +52,18 @@ public class X509CertificateViewAdapter implements SslUntrustedCertDialog.Certif
     public X509CertificateViewAdapter(X509Certificate certificate) {
         mCertificate = certificate;
     }
-    
+
     @Override
     public void updateCertificateView(View dialogView) {
         TextView nullCerView = dialogView.findViewById(R.id.null_cert);
-        
+
         if (mCertificate != null) {
             nullCerView.setVisibility(View.GONE);
             showSubject(mCertificate.getSubjectX500Principal(), dialogView);
             showIssuer(mCertificate.getIssuerX500Principal(), dialogView);
             showValidity(mCertificate.getNotBefore(), mCertificate.getNotAfter(), dialogView);
             showSignature(dialogView);
-            
+
         } else {
             nullCerView.setVisibility(View.VISIBLE);
         }
@@ -127,7 +128,7 @@ public class X509CertificateViewAdapter implements SslUntrustedCertDialog.Certif
            hex.append(':');
         }
         return digestType + ":" + newLine + hex.toString().replaceFirst("\\:$","") + newLine + newLine;
-     }    
+    }
 
     private void showValidity(Date notBefore, Date notAfter, View dialogView) {
         TextView fromView = dialogView.findViewById(R.id.value_validity_from);
@@ -145,7 +146,7 @@ public class X509CertificateViewAdapter implements SslUntrustedCertDialog.Certif
         TextView cView = dialogView.findViewById(R.id.value_subject_C);
         TextView stView = dialogView.findViewById(R.id.value_subject_ST);
         TextView lView = dialogView.findViewById(R.id.value_subject_L);
-        
+
         if (s.get("CN") != null) {
             cnView.setText(s.get("CN"));
             cnView.setVisibility(View.VISIBLE);
@@ -183,7 +184,7 @@ public class X509CertificateViewAdapter implements SslUntrustedCertDialog.Certif
             lView.setVisibility(View.GONE);
         }
     }
-    
+
     private void showIssuer(X500Principal issuer, View dialogView) {
         Map<String, String> s = parsePrincipal(issuer);
         TextView cnView = dialogView.findViewById(R.id.value_issuer_CN);
@@ -192,7 +193,7 @@ public class X509CertificateViewAdapter implements SslUntrustedCertDialog.Certif
         TextView cView = dialogView.findViewById(R.id.value_issuer_C);
         TextView stView = dialogView.findViewById(R.id.value_issuer_ST);
         TextView lView = dialogView.findViewById(R.id.value_issuer_L);
-        
+
         if (s.get("CN") != null) {
             cnView.setText(s.get("CN"));
             cnView.setVisibility(View.VISIBLE);
@@ -230,7 +231,7 @@ public class X509CertificateViewAdapter implements SslUntrustedCertDialog.Certif
             lView.setVisibility(View.GONE);
         }
     }
-    
+
 
     private Map<String, String> parsePrincipal(X500Principal principal) {
         Map<String, String> result = new HashMap<>();

+ 1 - 1
src/main/java/com/owncloud/android/ui/components/CustomEditText.java

@@ -32,7 +32,7 @@ import com.owncloud.android.authentication.AuthenticatorActivity;
 /**
  * Custom edit text to support fixed suffix or prefix
  */
-public class CustomEditText extends android.support.v7.widget.AppCompatEditText {
+public class CustomEditText extends androidx.appcompat.widget.AppCompatEditText {
     private Rect fixedRect = new Rect();
     private String fixedText = "";
     private boolean isPrefixFixed;

Vissa filer visades inte eftersom för många filer har ändrats