From 1f2c14d00a819366ec14212d08279a91a5fb84f0 Mon Sep 17 00:00:00 2001 From: Viktor Stojanov Date: Wed, 21 Oct 2020 13:31:42 +0200 Subject: [PATCH 1/8] Add query for Android 30 target --- build.gradle | 4 ++-- pickcore/src/main/AndroidManifest.xml | 6 ++++++ .../com/lovoo/android/pickcore/loader/CameraLoader.kt | 10 ++++++---- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/build.gradle b/build.gradle index eb6daee..13de242 100644 --- a/build.gradle +++ b/build.gradle @@ -29,7 +29,7 @@ buildscript { ext.orchestrator_version = "1.2.0" ext.androidX_test_version = "1.2.0" - ext.target_version = 29 + ext.target_version = 30 ext.min_version = 18 def version = System.getenv("VERSION") @@ -42,7 +42,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.6.3' + classpath 'com.android.tools.build:gradle:3.6.4' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'org.jetbrains.dokka:dokka-gradle-plugin:0.9.18' classpath 'com.diffplug.spotless:spotless-plugin-gradle:3.27.1' diff --git a/pickcore/src/main/AndroidManifest.xml b/pickcore/src/main/AndroidManifest.xml index 6f31cb5..e563580 100644 --- a/pickcore/src/main/AndroidManifest.xml +++ b/pickcore/src/main/AndroidManifest.xml @@ -7,4 +7,10 @@ + + + + + + diff --git a/pickcore/src/main/kotlin/com/lovoo/android/pickcore/loader/CameraLoader.kt b/pickcore/src/main/kotlin/com/lovoo/android/pickcore/loader/CameraLoader.kt index a9e78f1..6e3790c 100644 --- a/pickcore/src/main/kotlin/com/lovoo/android/pickcore/loader/CameraLoader.kt +++ b/pickcore/src/main/kotlin/com/lovoo/android/pickcore/loader/CameraLoader.kt @@ -210,10 +210,12 @@ object CameraLoader { listener.onScanCompleted(path, uri) context.sendBroadcast(Intent(INTENT_INVALIDATE_GALLERY)) if (!aboveQ()) { - context.sendBroadcast(Intent( - Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri - ?: Uri.parse(path) - ) + context.sendBroadcast( + Intent( + Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, + uri + ?: Uri.parse(path) + ) ) } } From b97f33afeef9c27984ec21b8d5d9ac9f19bfe70a Mon Sep 17 00:00:00 2001 From: Viktor Stojanov Date: Wed, 21 Oct 2020 14:04:40 +0200 Subject: [PATCH 2/8] fix nullable package --- .../lovoo/android/pickpic/instrumentation/helper/AppStart.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/androidTest/kotlin/com/lovoo/android/pickpic/instrumentation/helper/AppStart.kt b/app/src/androidTest/kotlin/com/lovoo/android/pickpic/instrumentation/helper/AppStart.kt index 62e0c5e..fb09cdf 100644 --- a/app/src/androidTest/kotlin/com/lovoo/android/pickpic/instrumentation/helper/AppStart.kt +++ b/app/src/androidTest/kotlin/com/lovoo/android/pickpic/instrumentation/helper/AppStart.kt @@ -31,7 +31,7 @@ object AppStart { intent.addCategory(Intent.CATEGORY_HOME) val pm = InstrumentationRegistry.getInstrumentation().context.packageManager val resolveInfo = pm.resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY) - return resolveInfo.activityInfo.packageName + return resolveInfo?.activityInfo?.packageName ?: "" } fun launchApp(device: UiDevice) { From 6ddfe17d4b1cc8c065f791c6b3bbc0e3ab07142d Mon Sep 17 00:00:00 2001 From: Sandra Reichel Date: Thu, 22 Oct 2020 09:53:15 +0200 Subject: [PATCH 3/8] exclude android 30 from settings preferences always to false --- .../android/pickcam/view/PickPicCaptureFragment.kt | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/pickcam/src/main/kotlin/com/lovoo/android/pickcam/view/PickPicCaptureFragment.kt b/pickcam/src/main/kotlin/com/lovoo/android/pickcam/view/PickPicCaptureFragment.kt index 9da4816..c81a1ec 100644 --- a/pickcam/src/main/kotlin/com/lovoo/android/pickcam/view/PickPicCaptureFragment.kt +++ b/pickcam/src/main/kotlin/com/lovoo/android/pickcam/view/PickPicCaptureFragment.kt @@ -20,6 +20,7 @@ import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import android.content.IntentFilter +import android.content.pm.PackageManager import android.os.Build import android.os.Bundle import android.os.Environment @@ -120,6 +121,15 @@ class PickPicCaptureFragment : DialogFragment() { override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) { super.onRequestPermissionsResult(requestCode, permissions, grantResults) if (requestCode == PERMISSION_REQUEST_CODE) { + val preferences = requireContext().getSharedPreferences(PREF_CATEGORY, Context.MODE_PRIVATE) + if (isR()) { + grantResults.forEach { + preferences.edit().putBoolean(PREF_KEY_PERMISSION, it != PackageManager.PERMISSION_DENIED).apply() + } + } else { + preferences.edit().putBoolean(PREF_KEY_PERMISSION, false).apply() + } + val deniedPermissions = Permission.getDeniedPermissions(requireActivity(), Permission.cameraPermissions.plus(Permission.galleryPermissions)) if (deniedPermissions.isEmpty()) { startCamera() @@ -138,7 +148,6 @@ class PickPicCaptureFragment : DialogFragment() { if (!isFirstTime && deniedList.firstOrNull { it.second } != null) { Permission.openSettings(requireActivity()) } else { - preferences.edit().putBoolean(PREF_KEY_PERMISSION, false).apply() val permissions = Array(deniedList.size) { i -> deniedList[i].first } Permission.requestPermissions(this, PERMISSION_REQUEST_CODE, permissions) } @@ -163,6 +172,8 @@ class PickPicCaptureFragment : DialogFragment() { } } + private fun isR() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.R + companion object { private const val CAMERA_REQUEST_CODE = 2734 private const val PERMISSION_REQUEST_CODE = 2735 From 6f31e5c24d53a2ce6ac79dda140b1f5eddc672ed Mon Sep 17 00:00:00 2001 From: Viktor Stojanov Date: Mon, 26 Oct 2020 16:13:49 +0100 Subject: [PATCH 4/8] Fix uploading a picture on Android 29 --- app/src/main/AndroidManifest.xml | 1 + build.gradle | 2 +- .../pickcam/worker/CaptureResultWorker.kt | 3 ++- .../android/pickcore/loader/CameraLoader.kt | 27 +++++++++---------- 4 files changed, 17 insertions(+), 16 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a09e00f..c691ff6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,6 +7,7 @@ android:name="androidx.multidex.MultiDexApplication" android:allowBackup="true" android:icon="@mipmap/ic_launcher" + android:requestLegacyExternalStorage="true" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" diff --git a/build.gradle b/build.gradle index eb6daee..05161ec 100644 --- a/build.gradle +++ b/build.gradle @@ -34,7 +34,7 @@ buildscript { def version = System.getenv("VERSION") def code = System.getenv("VERSION_CODE") - ext.version_name = version == null ? "1.1.0" : version + ext.version_name = version == null ? "1.3.0" : version ext.version_code = code == null ? 10 : code.toInteger() repositories { diff --git a/pickcam/src/main/kotlin/com/lovoo/android/pickcam/worker/CaptureResultWorker.kt b/pickcam/src/main/kotlin/com/lovoo/android/pickcam/worker/CaptureResultWorker.kt index 286bb42..0a120c3 100644 --- a/pickcam/src/main/kotlin/com/lovoo/android/pickcam/worker/CaptureResultWorker.kt +++ b/pickcam/src/main/kotlin/com/lovoo/android/pickcam/worker/CaptureResultWorker.kt @@ -30,6 +30,7 @@ import com.lovoo.android.pickcore.contract.CameraDestination import com.lovoo.android.pickcore.destination.PrivateDirectory import com.lovoo.android.pickcore.destination.moveToPublicDirectory import com.lovoo.android.pickcore.loader.CameraLoader +import com.lovoo.android.pickcore.util.aboveQ import io.reactivex.Single import java.io.File @@ -55,7 +56,7 @@ class CaptureResultWorker( override fun createWork(): Single { return Single.create { emitter -> - val file = if (isPublic) inputFile else inputFile.moveToPublicDirectory().file + val file = if (isPublic || aboveQ()) inputFile else inputFile.moveToPublicDirectory().file if (file == null) { context.sendBroadcast(Intent(INTENT_ACTION_ON_RESULT)) diff --git a/pickcore/src/main/kotlin/com/lovoo/android/pickcore/loader/CameraLoader.kt b/pickcore/src/main/kotlin/com/lovoo/android/pickcore/loader/CameraLoader.kt index a9e78f1..d62e480 100644 --- a/pickcore/src/main/kotlin/com/lovoo/android/pickcore/loader/CameraLoader.kt +++ b/pickcore/src/main/kotlin/com/lovoo/android/pickcore/loader/CameraLoader.kt @@ -28,6 +28,7 @@ import android.net.Uri import android.os.Build import android.os.Environment import android.provider.MediaStore +import androidx.core.content.FileProvider import androidx.exifinterface.media.ExifInterface import androidx.fragment.app.Fragment import com.lovoo.android.pickcore.contract.CameraDestination @@ -133,8 +134,8 @@ object CameraLoader { val shouldScale = scale < 0.9f val shouldRotate = degree % 360 != 0 - if (!shouldScale && !shouldRotate) { - updateMediaScanner(context, arrayOf(filePath), listener) + if (!shouldScale && !shouldRotate && !aboveQ()) { + updateMediaScanner(context, arrayOf(filePath), null, listener) return } @@ -160,16 +161,17 @@ object CameraLoader { // Calculate new relative path for Q and before Q val newFilePath = if (aboveQ()) { - val tempPath = filePath.replace(".jpg", "-2.jpg") + val tempPath = filePath // .replace(".jpg", "-2.jpg") val lastItem = tempPath.split("/").last() tempPath.replaceAfterLast("/", "$appName/$lastItem") } else { - filePath.replace(".jpg", "-2.jpg") + filePath // .replace(".jpg", "-2.jpg") } // Create the new file with specified path val file = File(newFilePath) + var fileUri: Uri? = null var fos: OutputStream? = null try { // Separate logic for Q and before Q @@ -182,8 +184,8 @@ object CameraLoader { } // Prepare OutputStream for insertion - val uri: Uri? = context.contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values) - uri?.let { fos = context.contentResolver.openOutputStream(it) } + fileUri = context.contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values) + fileUri?.let { fos = context.contentResolver.openOutputStream(it) } } else { // Create new FileOutputStream fos = FileOutputStream(file) @@ -197,7 +199,7 @@ object CameraLoader { fos?.close() // Signal new image was added - updateMediaScanner(context, arrayOf(filePath, file.absolutePath), listener) + updateMediaScanner(context, arrayOf(file.absolutePath), fileUri, listener) } } catch (e: IOException) { e.printStackTrace() @@ -205,16 +207,13 @@ object CameraLoader { } // Notify listeners a new image was added - private fun updateMediaScanner(context: Context, files: Array, listener: MediaScannerConnection.OnScanCompletedListener) { + private fun updateMediaScanner(context: Context, files: Array, fileUri: Uri?, listener: MediaScannerConnection.OnScanCompletedListener) { MediaScannerConnection.scanFile(context, files, null) { path, uri -> - listener.onScanCompleted(path, uri) + val curUri = uri ?: fileUri ?: Uri.parse(path) + listener.onScanCompleted(path, curUri) context.sendBroadcast(Intent(INTENT_INVALIDATE_GALLERY)) if (!aboveQ()) { - context.sendBroadcast(Intent( - Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri - ?: Uri.parse(path) - ) - ) + context.sendBroadcast(Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, curUri)) } } } From b6834119522e1f872fd22b983136bbeb0910ba4f Mon Sep 17 00:00:00 2001 From: Viktor Stojanov Date: Mon, 26 Oct 2020 16:16:03 +0100 Subject: [PATCH 5/8] Correct version --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 05161ec..8a4b112 100644 --- a/build.gradle +++ b/build.gradle @@ -34,7 +34,7 @@ buildscript { def version = System.getenv("VERSION") def code = System.getenv("VERSION_CODE") - ext.version_name = version == null ? "1.3.0" : version + ext.version_name = version == null ? "1.2.1" : version ext.version_code = code == null ? 10 : code.toInteger() repositories { From 8656a3926ac4dac65efd0dafa1c2964b5a762457 Mon Sep 17 00:00:00 2001 From: Viktor Stojanov Date: Mon, 26 Oct 2020 16:54:23 +0100 Subject: [PATCH 6/8] Add save date --- .../kotlin/com/lovoo/android/pickcore/loader/CameraLoader.kt | 4 +++- .../kotlin/com/lovoo/android/pickcore/loader/GalleryLoader.kt | 2 +- .../kotlin/com/lovoo/android/pickcore/loader/PictureLoader.kt | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/pickcore/src/main/kotlin/com/lovoo/android/pickcore/loader/CameraLoader.kt b/pickcore/src/main/kotlin/com/lovoo/android/pickcore/loader/CameraLoader.kt index d62e480..6ff2771 100644 --- a/pickcore/src/main/kotlin/com/lovoo/android/pickcore/loader/CameraLoader.kt +++ b/pickcore/src/main/kotlin/com/lovoo/android/pickcore/loader/CameraLoader.kt @@ -28,7 +28,6 @@ import android.net.Uri import android.os.Build import android.os.Environment import android.provider.MediaStore -import androidx.core.content.FileProvider import androidx.exifinterface.media.ExifInterface import androidx.fragment.app.Fragment import com.lovoo.android.pickcore.contract.CameraDestination @@ -178,8 +177,11 @@ object CameraLoader { if (aboveQ()) { // Prepare file values for insertion val values = ContentValues().apply { + val now = System.currentTimeMillis() put(MediaStore.Images.Media.DISPLAY_NAME, file.name) put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg") + put(MediaStore.MediaColumns.DATE_ADDED, now) + put(MediaStore.MediaColumns.DATE_TAKEN, now) put(MediaStore.Images.Media.RELATIVE_PATH, "${Environment.DIRECTORY_PICTURES}/$appName") } diff --git a/pickcore/src/main/kotlin/com/lovoo/android/pickcore/loader/GalleryLoader.kt b/pickcore/src/main/kotlin/com/lovoo/android/pickcore/loader/GalleryLoader.kt index 2645a51..b8bc79a 100644 --- a/pickcore/src/main/kotlin/com/lovoo/android/pickcore/loader/GalleryLoader.kt +++ b/pickcore/src/main/kotlin/com/lovoo/android/pickcore/loader/GalleryLoader.kt @@ -44,7 +44,7 @@ class GalleryLoader( projection, selection, selectArguments, - "${MediaStore.Images.Media.DATE_TAKEN} DESC" + "${MediaStore.Images.Media.DISPLAY_NAME} ASC" ) { private val columns = if (aboveQ()) arrayOf( diff --git a/pickcore/src/main/kotlin/com/lovoo/android/pickcore/loader/PictureLoader.kt b/pickcore/src/main/kotlin/com/lovoo/android/pickcore/loader/PictureLoader.kt index 0e196ab..d1f17ef 100644 --- a/pickcore/src/main/kotlin/com/lovoo/android/pickcore/loader/PictureLoader.kt +++ b/pickcore/src/main/kotlin/com/lovoo/android/pickcore/loader/PictureLoader.kt @@ -46,7 +46,7 @@ class PictureLoader( projection, getSelection(gallery), getSelectionArgs(gallery), - "${MediaStore.Images.Media.DATE_TAKEN} DESC" + "${MediaStore.Images.Media.DATE_ADDED} DESC" ) { private val cameraEngine: CameraEngine From 7ac03aaa2d2adc6b0e347198ba8effaad869ce5f Mon Sep 17 00:00:00 2001 From: Sandra Reichel Date: Wed, 28 Oct 2020 11:13:39 +0100 Subject: [PATCH 7/8] update version 1.3.0 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 46aa16a..0c26d33 100644 --- a/build.gradle +++ b/build.gradle @@ -34,7 +34,7 @@ buildscript { def version = System.getenv("VERSION") def code = System.getenv("VERSION_CODE") - ext.version_name = version == null ? "1.2.1" : version + ext.version_name = version == null ? "1.3.0" : version ext.version_code = code == null ? 10 : code.toInteger() repositories { From d8c836b13182d3eac64163905f585f5b998e1f0b Mon Sep 17 00:00:00 2001 From: Sandra Reichel Date: Wed, 28 Oct 2020 11:21:19 +0100 Subject: [PATCH 8/8] make isR() an Extension and rename aboveQ() for more clearness --- .../android/pickcam/view/PickPicCaptureFragment.kt | 5 ++--- .../android/pickcam/worker/CaptureResultWorker.kt | 4 ++-- .../lovoo/android/pickcore/loader/CameraLoader.kt | 10 +++++----- .../lovoo/android/pickcore/loader/GalleryLoader.kt | 12 ++++++------ .../lovoo/android/pickcore/util/ContextExtensions.kt | 6 +++++- 5 files changed, 20 insertions(+), 17 deletions(-) diff --git a/pickcam/src/main/kotlin/com/lovoo/android/pickcam/view/PickPicCaptureFragment.kt b/pickcam/src/main/kotlin/com/lovoo/android/pickcam/view/PickPicCaptureFragment.kt index c81a1ec..608b53f 100644 --- a/pickcam/src/main/kotlin/com/lovoo/android/pickcam/view/PickPicCaptureFragment.kt +++ b/pickcam/src/main/kotlin/com/lovoo/android/pickcam/view/PickPicCaptureFragment.kt @@ -39,6 +39,7 @@ import com.lovoo.android.pickcore.destination.PrivateDirectory import com.lovoo.android.pickcore.destination.PublicDirectory import com.lovoo.android.pickcore.loader.CameraLoader import com.lovoo.android.pickcore.permission.Permission +import com.lovoo.android.pickcore.util.isMinimumR /** * Ready to use solution to handle Android Camera capture. @@ -122,7 +123,7 @@ class PickPicCaptureFragment : DialogFragment() { super.onRequestPermissionsResult(requestCode, permissions, grantResults) if (requestCode == PERMISSION_REQUEST_CODE) { val preferences = requireContext().getSharedPreferences(PREF_CATEGORY, Context.MODE_PRIVATE) - if (isR()) { + if (isMinimumR()) { grantResults.forEach { preferences.edit().putBoolean(PREF_KEY_PERMISSION, it != PackageManager.PERMISSION_DENIED).apply() } @@ -172,8 +173,6 @@ class PickPicCaptureFragment : DialogFragment() { } } - private fun isR() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.R - companion object { private const val CAMERA_REQUEST_CODE = 2734 private const val PERMISSION_REQUEST_CODE = 2735 diff --git a/pickcam/src/main/kotlin/com/lovoo/android/pickcam/worker/CaptureResultWorker.kt b/pickcam/src/main/kotlin/com/lovoo/android/pickcam/worker/CaptureResultWorker.kt index 0a120c3..11821df 100644 --- a/pickcam/src/main/kotlin/com/lovoo/android/pickcam/worker/CaptureResultWorker.kt +++ b/pickcam/src/main/kotlin/com/lovoo/android/pickcam/worker/CaptureResultWorker.kt @@ -30,7 +30,7 @@ import com.lovoo.android.pickcore.contract.CameraDestination import com.lovoo.android.pickcore.destination.PrivateDirectory import com.lovoo.android.pickcore.destination.moveToPublicDirectory import com.lovoo.android.pickcore.loader.CameraLoader -import com.lovoo.android.pickcore.util.aboveQ +import com.lovoo.android.pickcore.util.isMinimumQ import io.reactivex.Single import java.io.File @@ -56,7 +56,7 @@ class CaptureResultWorker( override fun createWork(): Single { return Single.create { emitter -> - val file = if (isPublic || aboveQ()) inputFile else inputFile.moveToPublicDirectory().file + val file = if (isPublic || isMinimumQ()) inputFile else inputFile.moveToPublicDirectory().file if (file == null) { context.sendBroadcast(Intent(INTENT_ACTION_ON_RESULT)) diff --git a/pickcore/src/main/kotlin/com/lovoo/android/pickcore/loader/CameraLoader.kt b/pickcore/src/main/kotlin/com/lovoo/android/pickcore/loader/CameraLoader.kt index 6ff2771..9b9f013 100644 --- a/pickcore/src/main/kotlin/com/lovoo/android/pickcore/loader/CameraLoader.kt +++ b/pickcore/src/main/kotlin/com/lovoo/android/pickcore/loader/CameraLoader.kt @@ -32,7 +32,7 @@ import androidx.exifinterface.media.ExifInterface import androidx.fragment.app.Fragment import com.lovoo.android.pickcore.contract.CameraDestination import com.lovoo.android.pickcore.contract.getUri -import com.lovoo.android.pickcore.util.aboveQ +import com.lovoo.android.pickcore.util.isMinimumQ import java.io.File import java.io.FileOutputStream import java.io.IOException @@ -133,7 +133,7 @@ object CameraLoader { val shouldScale = scale < 0.9f val shouldRotate = degree % 360 != 0 - if (!shouldScale && !shouldRotate && !aboveQ()) { + if (!shouldScale && !shouldRotate && !isMinimumQ()) { updateMediaScanner(context, arrayOf(filePath), null, listener) return } @@ -159,7 +159,7 @@ object CameraLoader { val appName = context.getString(context.applicationInfo.labelRes) // Calculate new relative path for Q and before Q - val newFilePath = if (aboveQ()) { + val newFilePath = if (isMinimumQ()) { val tempPath = filePath // .replace(".jpg", "-2.jpg") val lastItem = tempPath.split("/").last() tempPath.replaceAfterLast("/", "$appName/$lastItem") @@ -174,7 +174,7 @@ object CameraLoader { var fos: OutputStream? = null try { // Separate logic for Q and before Q - if (aboveQ()) { + if (isMinimumQ()) { // Prepare file values for insertion val values = ContentValues().apply { val now = System.currentTimeMillis() @@ -214,7 +214,7 @@ object CameraLoader { val curUri = uri ?: fileUri ?: Uri.parse(path) listener.onScanCompleted(path, curUri) context.sendBroadcast(Intent(INTENT_INVALIDATE_GALLERY)) - if (!aboveQ()) { + if (!isMinimumQ()) { context.sendBroadcast(Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, curUri)) } } diff --git a/pickcore/src/main/kotlin/com/lovoo/android/pickcore/loader/GalleryLoader.kt b/pickcore/src/main/kotlin/com/lovoo/android/pickcore/loader/GalleryLoader.kt index b8bc79a..73b1642 100644 --- a/pickcore/src/main/kotlin/com/lovoo/android/pickcore/loader/GalleryLoader.kt +++ b/pickcore/src/main/kotlin/com/lovoo/android/pickcore/loader/GalleryLoader.kt @@ -26,7 +26,7 @@ import android.provider.MediaStore import androidx.loader.content.CursorLoader import com.lovoo.android.pickcore.Constants import com.lovoo.android.pickcore.model.GalleryLib -import com.lovoo.android.pickcore.util.aboveQ +import com.lovoo.android.pickcore.util.isMinimumQ /** * A [CursorLoader] implementation that fetch album information from external [MediaStore.Files] @@ -47,7 +47,7 @@ class GalleryLoader( "${MediaStore.Images.Media.DISPLAY_NAME} ASC" ) { - private val columns = if (aboveQ()) arrayOf( + private val columns = if (isMinimumQ()) arrayOf( MediaStore.Files.FileColumns._ID, COLUMN_NAME_ID, COLUMN_NAME_DISPLAY_NAME, @@ -65,7 +65,7 @@ class GalleryLoader( return try { val galleries = super.loadInBackground() val allEntry = MatrixCursor(columns) - if (aboveQ()) { + if (isMinimumQ()) { loadCursorPostQ(galleries, allEntry) } else { loadCursorPreQ(galleries, allEntry) @@ -159,7 +159,7 @@ class GalleryLoader( private const val COLUMN_NAME_COUNT = "count" private val query = MediaStore.Files.getContentUri("external") - private val projection = if (aboveQ()) arrayOf( + private val projection = if (isMinimumQ()) arrayOf( MediaStore.Files.FileColumns._ID, COLUMN_NAME_ID, COLUMN_NAME_DISPLAY_NAME, @@ -172,7 +172,7 @@ class GalleryLoader( MediaStore.MediaColumns.DATA, "COUNT(*) AS $COLUMN_NAME_COUNT" ) - private val group = if (aboveQ()) "" else ") GROUP BY ($COLUMN_NAME_ID" + private val group = if (isMinimumQ()) "" else ") GROUP BY ($COLUMN_NAME_ID" private val selection = "${MediaStore.Files.FileColumns.MEDIA_TYPE}=? AND ${MediaStore.MediaColumns.SIZE}>0$group" private val selectArguments = arrayOf(MediaStore.Files.FileColumns.MEDIA_TYPE_IMAGE.toString()) @@ -190,7 +190,7 @@ class GalleryLoader( * @param cursor the [Cursor] * @return the [GalleryLib] object with the data from the [Cursor] */ - fun convert(cursor: Cursor) = if (aboveQ()) GalleryLib( + fun convert(cursor: Cursor) = if (isMinimumQ()) GalleryLib( cursor.getString(cursor.getColumnIndex(COLUMN_NAME_ID)), getUri(cursor)?.toString(), cursor.getString(cursor.getColumnIndex(COLUMN_NAME_DISPLAY_NAME)), diff --git a/pickcore/src/main/kotlin/com/lovoo/android/pickcore/util/ContextExtensions.kt b/pickcore/src/main/kotlin/com/lovoo/android/pickcore/util/ContextExtensions.kt index 703149a..b80738a 100644 --- a/pickcore/src/main/kotlin/com/lovoo/android/pickcore/util/ContextExtensions.kt +++ b/pickcore/src/main/kotlin/com/lovoo/android/pickcore/util/ContextExtensions.kt @@ -17,4 +17,8 @@ package com.lovoo.android.pickcore.util import android.os.Build -fun aboveQ() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q +fun isMinimumQ() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q + +fun isMinimumR() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.R + +