From 8c7b7154a603b46c9d68ca8403eefff9e16f588a Mon Sep 17 00:00:00 2001 From: tobiasKaminsky Date: Thu, 26 Aug 2021 12:26:46 +0200 Subject: [PATCH 1/7] Bump to SDK 30 Signed-off-by: tobiasKaminsky --- app/build.gradle | 4 ++-- .../nextcloud/talk/controllers/LocationPickerController.kt | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 7b2f99355..cbf38dc5a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -45,11 +45,11 @@ for (TaskExecutionRequest tr : getGradle().getStartParameter().getTaskRequests() } android { - compileSdkVersion 29 + compileSdkVersion 30 buildToolsVersion '30.0.3' defaultConfig { minSdkVersion 21 - targetSdkVersion 29 + targetSdkVersion 30 testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" // mayor.minor.hotfix.increment (for increment: 01-50=Alpha / 51-89=RC / 90-99=stable) diff --git a/app/src/main/java/com/nextcloud/talk/controllers/LocationPickerController.kt b/app/src/main/java/com/nextcloud/talk/controllers/LocationPickerController.kt index 899d78296..a4654d3f8 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/LocationPickerController.kt +++ b/app/src/main/java/com/nextcloud/talk/controllers/LocationPickerController.kt @@ -519,7 +519,7 @@ class LocationPickerController(args: Bundle) : } } - override fun onLocationChanged(location: Location?) { + override fun onLocationChanged(location: Location) { myLocation = GeoPoint(location) } @@ -527,11 +527,11 @@ class LocationPickerController(args: Bundle) : // empty } - override fun onProviderEnabled(provider: String?) { + override fun onProviderEnabled(provider: String) { // empty } - override fun onProviderDisabled(provider: String?) { + override fun onProviderDisabled(provider: String) { // empty } From b5960f9b97edd106ef4a8b2e88a43ad234e44b48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20Kr=C3=BCger?= Date: Mon, 6 Sep 2021 17:40:17 +0200 Subject: [PATCH 2/7] Use permission WRITE_EXTERNAL_STORAGE up to SDK 29 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tim Krüger --- app/src/main/AndroidManifest.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index acca95c7a..516cf22be 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -62,7 +62,9 @@ - + From 5cacf7767d21c554b2002cd4bd994b8cb84d6e9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20Kr=C3=BCger?= Date: Tue, 14 Sep 2021 13:54:20 +0200 Subject: [PATCH 3/7] Ask for READ_EXTERNAL_STORAGE permsssion for API level 30 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Since API level 30 the WRITE_EXTERNAL_STORAGE permission will be ignored. Instead the READ_EXTERNAL_STORAGE permission must be used. See: https://developer.android.com/training/data-storage Signed-off-by: Tim Krüger --- .../talk/jobs/UploadAndShareFilesWorker.kt | 73 ++++++++++++++----- 1 file changed, 53 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/jobs/UploadAndShareFilesWorker.kt b/app/src/main/java/com/nextcloud/talk/jobs/UploadAndShareFilesWorker.kt index c5e20bffe..e315ab3f3 100644 --- a/app/src/main/java/com/nextcloud/talk/jobs/UploadAndShareFilesWorker.kt +++ b/app/src/main/java/com/nextcloud/talk/jobs/UploadAndShareFilesWorker.kt @@ -213,31 +213,64 @@ class UploadAndShareFilesWorker(val context: Context, workerParameters: WorkerPa const val META_DATA = "META_DATA" fun isStoragePermissionGranted(context: Context): Boolean { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - return if (PermissionChecker.checkSelfPermission( - context, - Manifest.permission.WRITE_EXTERNAL_STORAGE - ) == PermissionChecker.PERMISSION_GRANTED - ) { - Log.d(TAG, "Permission is granted") - true - } else { - Log.d(TAG, "Permission is revoked") - false + when { + Build.VERSION.SDK_INT > 29 -> { + return if (PermissionChecker.checkSelfPermission( + context, Manifest.permission + .READ_EXTERNAL_STORAGE + ) == PermissionChecker.PERMISSION_GRANTED + ) { + Log.d(TAG, "Permission is granted (SDK 30 or greater)") + true + } else { + Log.d(TAG, "Permission is revoked (SDK 30 or greater)") + false + } + } + Build.VERSION.SDK_INT >= Build.VERSION_CODES.M -> { + return if (PermissionChecker.checkSelfPermission( + context, + Manifest.permission.WRITE_EXTERNAL_STORAGE + ) == PermissionChecker.PERMISSION_GRANTED + ) { + Log.d(TAG, "Permission is granted") + true + } else { + Log.d(TAG, "Permission is revoked") + false + } + } + else -> { // permission is automatically granted on sdk<23 upon installation + Log.d(TAG, "Permission is granted") + return true } - } else { // permission is automatically granted on sdk<23 upon installation - Log.d(TAG, "Permission is granted") - return true } } fun requestStoragePermission(controller: Controller) { - controller.requestPermissions( - arrayOf( - Manifest.permission.WRITE_EXTERNAL_STORAGE - ), - REQUEST_PERMISSION - ) + + + when { + Build.VERSION.SDK_INT > 29 -> { + controller.requestPermissions( + arrayOf( + Manifest.permission.READ_EXTERNAL_STORAGE + ), + REQUEST_PERMISSION + ) + } + Build.VERSION.SDK_INT >= Build.VERSION_CODES.M -> { + controller.requestPermissions( + arrayOf( + Manifest.permission.WRITE_EXTERNAL_STORAGE + ), + REQUEST_PERMISSION + ) + } + else -> { // permission is automatically granted on sdk<23 upon installation + + } + } } } } From 0f54b6a505717ca3d71ce057cf60a1ad1beefcbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20Kr=C3=BCger?= Date: Wed, 15 Sep 2021 11:31:52 +0200 Subject: [PATCH 4/7] Add ignore ScopredStorage for WRITE_EXTERNAL_STORAGE permission MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Because the permission is needed up to SDK level 29 Lint should be ignore that one. Signed-off-by: Tim Krüger --- app/src/main/AndroidManifest.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 516cf22be..48f9390e2 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -64,7 +64,8 @@ android:maxSdkVersion="22" /> + android:maxSdkVersion="29" + tools:ignore="ScopedStorage" /> From 99f5a64c505b07c0c0c7e21782d2d6019eaad62e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20Kr=C3=BCger?= Date: Wed, 15 Sep 2021 14:58:12 +0200 Subject: [PATCH 5/7] Suppress Lint for wrong constant of AudioManager.GET_DEVICES_ALL MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Up to now AudioManager.GET_DEVICES_ALL is a valid value. Because of that the suppress annotation were added. See: https://developer.android.com/reference/android/media/AudioManager#getDevices(int) Signed-off-by: Tim Krüger --- .../main/java/com/nextcloud/talk/webrtc/MagicAudioManager.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/nextcloud/talk/webrtc/MagicAudioManager.java b/app/src/main/java/com/nextcloud/talk/webrtc/MagicAudioManager.java index a631d7d05..59d925da3 100644 --- a/app/src/main/java/com/nextcloud/talk/webrtc/MagicAudioManager.java +++ b/app/src/main/java/com/nextcloud/talk/webrtc/MagicAudioManager.java @@ -31,6 +31,7 @@ package com.nextcloud.talk.webrtc; +import android.annotation.SuppressLint; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; @@ -464,7 +465,7 @@ public class MagicAudioManager { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { return audioManager.isWiredHeadsetOn(); } else { - final AudioDeviceInfo[] devices = audioManager.getDevices(AudioManager.GET_DEVICES_ALL); + @SuppressLint("WrongConstant") final AudioDeviceInfo[] devices = audioManager.getDevices(AudioManager.GET_DEVICES_ALL); for (AudioDeviceInfo device : devices) { final int type = device.getType(); if (type == AudioDeviceInfo.TYPE_WIRED_HEADSET) { From e1d9afa1a26ef09970b90021eb13be63c3eb4e5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20Kr=C3=BCger?= Date: Wed, 15 Sep 2021 16:17:32 +0200 Subject: [PATCH 6/7] Suppress Lint for wrong constant of AudioManager modes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tim Krüger --- .../main/java/com/nextcloud/talk/webrtc/MagicAudioManager.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/java/com/nextcloud/talk/webrtc/MagicAudioManager.java b/app/src/main/java/com/nextcloud/talk/webrtc/MagicAudioManager.java index 59d925da3..7eba93239 100644 --- a/app/src/main/java/com/nextcloud/talk/webrtc/MagicAudioManager.java +++ b/app/src/main/java/com/nextcloud/talk/webrtc/MagicAudioManager.java @@ -194,6 +194,7 @@ public class MagicAudioManager { } } + @SuppressLint("WrongConstant") public void start(AudioManagerEvents audioManagerEvents) { Log.d(TAG, "start"); ThreadUtils.checkIsOnMainThread(); @@ -292,6 +293,7 @@ public class MagicAudioManager { Log.d(TAG, "AudioManager started"); } + @SuppressLint("WrongConstant") public void stop() { Log.d(TAG, "stop"); ThreadUtils.checkIsOnMainThread(); From 1a9f5a3f735fe9f634eef3b87189dab5eee05063 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20Kr=C3=BCger?= Date: Wed, 15 Sep 2021 17:02:57 +0200 Subject: [PATCH 7/7] Make klint happy :-) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Tim Krüger --- .../nextcloud/talk/jobs/UploadAndShareFilesWorker.kt | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/jobs/UploadAndShareFilesWorker.kt b/app/src/main/java/com/nextcloud/talk/jobs/UploadAndShareFilesWorker.kt index e315ab3f3..ee7f29db1 100644 --- a/app/src/main/java/com/nextcloud/talk/jobs/UploadAndShareFilesWorker.kt +++ b/app/src/main/java/com/nextcloud/talk/jobs/UploadAndShareFilesWorker.kt @@ -214,10 +214,10 @@ class UploadAndShareFilesWorker(val context: Context, workerParameters: WorkerPa fun isStoragePermissionGranted(context: Context): Boolean { when { - Build.VERSION.SDK_INT > 29 -> { + Build.VERSION.SDK_INT > Build.VERSION_CODES.Q -> { return if (PermissionChecker.checkSelfPermission( - context, Manifest.permission - .READ_EXTERNAL_STORAGE + context, + Manifest.permission.READ_EXTERNAL_STORAGE ) == PermissionChecker.PERMISSION_GRANTED ) { Log.d(TAG, "Permission is granted (SDK 30 or greater)") @@ -249,9 +249,8 @@ class UploadAndShareFilesWorker(val context: Context, workerParameters: WorkerPa fun requestStoragePermission(controller: Controller) { - when { - Build.VERSION.SDK_INT > 29 -> { + Build.VERSION.SDK_INT > Build.VERSION_CODES.Q -> { controller.requestPermissions( arrayOf( Manifest.permission.READ_EXTERNAL_STORAGE @@ -268,7 +267,6 @@ class UploadAndShareFilesWorker(val context: Context, workerParameters: WorkerPa ) } else -> { // permission is automatically granted on sdk<23 upon installation - } } }