Skip to content

Commit 3b12f1a

Browse files
authored
Merge pull request #263 from CaiJingLong/clean-up-android-code
Clean up android code
2 parents 5df02d5 + 31d864c commit 3b12f1a

File tree

12 files changed

+178
-241
lines changed

12 files changed

+178
-241
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ Change:
2424

2525
- Modified `AssetEntity.file`'s behavior on iOS, currently it will return a picture in jpg format instead of heic/gif/png. Now more in line with the description in the doc, this is suitable for uploading images (theoretically, no Exif information will be included).
2626
- Update android change media url from file scheme to content scheme.
27+
- Clean up some unused code.
2728

2829
## 0.5.0
2930

android/src/main/kotlin/top/kikt/imagescanner/ImageScannerPlugin.kt

+9-27
Original file line numberDiff line numberDiff line change
@@ -5,35 +5,17 @@ import io.flutter.plugin.common.PluginRegistry.Registrar
55
import top.kikt.imagescanner.core.PhotoManagerPlugin
66

77
class ImageScannerPlugin(val registrar: Registrar) {
8-
companion object {
9-
@JvmStatic
10-
fun registerWith(registrar: Registrar): Unit {
11-
val newChannel = MethodChannel(registrar.messenger(), "top.kikt/photo_manager")
12-
newChannel.setMethodCallHandler(PhotoManagerPlugin(registrar))
13-
}
8+
companion object {
9+
@JvmStatic
10+
fun registerWith(registrar: Registrar): Unit {
11+
val newChannel = MethodChannel(registrar.messenger(), "top.kikt/photo_manager")
12+
newChannel.setMethodCallHandler(PhotoManagerPlugin(registrar))
1413
}
15-
}
16-
17-
data class Asset(val path: String, val imgId: String, val dir: String, val dirId: String, val title: String, var thumb: String?, val type: AssetType, val timeStamp: Long, val duration: Long?, val width: Int, val height: Int) {
18-
19-
override fun equals(other: Any?): Boolean {
20-
if (other === this) {
21-
return true
22-
}
23-
if (other !is Asset) return false
24-
25-
return this.imgId == other.imgId
26-
}
27-
28-
override fun hashCode(): Int {
29-
return imgId.hashCode()
30-
}
31-
14+
}
3215
}
3316

3417
enum class AssetType {
35-
Other,
36-
Image,
37-
Video,
38-
Audio,
18+
Image,
19+
Video,
20+
Audio,
3921
}

android/src/main/kotlin/top/kikt/imagescanner/core/PhotoManagerNotifyChannel.kt

+46-45
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,6 @@ class PhotoManagerNotifyChannel(val registry: PluginRegistry.Registrar, handler:
2222

2323
private var notifying = false
2424

25-
val isNotifying: Boolean
26-
get() = notifying
27-
2825
private val videoObserver = MediaObserver(MEDIA_TYPE_VIDEO, handler)
2926
private val imageObserver = MediaObserver(MEDIA_TYPE_IMAGE, handler)
3027
private val audioObserver = MediaObserver(MEDIA_TYPE_AUDIO, handler)
@@ -152,52 +149,56 @@ class PhotoManagerNotifyChannel(val registry: PluginRegistry.Registrar, handler:
152149
}
153150

154151
private fun getGalleryIdAndName(id: Long, type: Int): Pair<Long?, String?> {
155-
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
156-
val cursor = cr.query(
157-
allUri,
158-
arrayOf(MediaStore.MediaColumns.BUCKET_ID, MediaStore.MediaColumns.BUCKET_DISPLAY_NAME),
159-
"${BaseColumns._ID} = ?",
160-
arrayOf(id.toString()),
161-
null
162-
)
163-
cursor?.use {
164-
if (cursor.moveToNext()) {
165-
val galleryId = cursor.getLong(cursor.getColumnIndex(MediaStore.MediaColumns.BUCKET_ID))
166-
val galleryName = cursor.getString(cursor.getColumnIndex(MediaStore.MediaColumns.BUCKET_DISPLAY_NAME))
167-
return Pair(galleryId, galleryName)
152+
when {
153+
Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q -> {
154+
val cursor = cr.query(
155+
allUri,
156+
arrayOf(MediaStore.MediaColumns.BUCKET_ID, MediaStore.MediaColumns.BUCKET_DISPLAY_NAME),
157+
"${BaseColumns._ID} = ?",
158+
arrayOf(id.toString()),
159+
null
160+
)
161+
cursor?.use {
162+
if (cursor.moveToNext()) {
163+
val galleryId = cursor.getLong(cursor.getColumnIndex(MediaStore.MediaColumns.BUCKET_ID))
164+
val galleryName = cursor.getString(cursor.getColumnIndex(MediaStore.MediaColumns.BUCKET_DISPLAY_NAME))
165+
return Pair(galleryId, galleryName)
166+
}
168167
}
169-
}
170168

171-
} else if (type == MEDIA_TYPE_AUDIO) {
172-
val cursor = cr.query(
173-
allUri,
174-
arrayOf(MediaStore.Audio.AudioColumns.ALBUM_ID, MediaStore.Audio.AudioColumns.ALBUM),
175-
"${BaseColumns._ID} = ?",
176-
arrayOf(id.toString()),
177-
null
178-
)
179-
180-
cursor?.use {
181-
if (cursor.moveToNext()) {
182-
val galleryId = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.AudioColumns.ALBUM_ID))
183-
val galleryName = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.AudioColumns.ALBUM))
184-
return Pair(galleryId, galleryName)
169+
}
170+
type == MEDIA_TYPE_AUDIO -> {
171+
val cursor = cr.query(
172+
allUri,
173+
arrayOf(MediaStore.Audio.AudioColumns.ALBUM_ID, MediaStore.Audio.AudioColumns.ALBUM),
174+
"${BaseColumns._ID} = ?",
175+
arrayOf(id.toString()),
176+
null
177+
)
178+
179+
cursor?.use {
180+
if (cursor.moveToNext()) {
181+
val galleryId = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.AudioColumns.ALBUM_ID))
182+
val galleryName = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.AudioColumns.ALBUM))
183+
return Pair(galleryId, galleryName)
184+
}
185185
}
186186
}
187-
} else {
188-
val cursor = cr.query(
189-
allUri,
190-
arrayOf("bucket_id", "bucket_display_name"),
191-
"${BaseColumns._ID} = ?",
192-
arrayOf(id.toString()),
193-
null
194-
)
195-
196-
cursor?.use {
197-
if (cursor.moveToNext()) {
198-
val galleryId = cursor.getLong(cursor.getColumnIndex("bucket_id"))
199-
val galleryName = cursor.getString(cursor.getColumnIndex("bucket_display_name"))
200-
return Pair(galleryId, galleryName)
187+
else -> {
188+
val cursor = cr.query(
189+
allUri,
190+
arrayOf("bucket_id", "bucket_display_name"),
191+
"${BaseColumns._ID} = ?",
192+
arrayOf(id.toString()),
193+
null
194+
)
195+
196+
cursor?.use {
197+
if (cursor.moveToNext()) {
198+
val galleryId = cursor.getLong(cursor.getColumnIndex("bucket_id"))
199+
val galleryName = cursor.getString(cursor.getColumnIndex("bucket_display_name"))
200+
return Pair(galleryId, galleryName)
201+
}
201202
}
202203
}
203204
}

android/src/main/kotlin/top/kikt/imagescanner/core/PhotoManagerPlugin.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -360,15 +360,15 @@ class PhotoManagerPlugin(private val registrar: PluginRegistry.Registrar) : Meth
360360
return 0
361361
}
362362

363-
fun MethodCall.getString(key: String): String {
363+
private fun MethodCall.getString(key: String): String {
364364
return this.argument<String>(key)!!
365365
}
366366

367-
fun MethodCall.getInt(key: String): Int {
367+
private fun MethodCall.getInt(key: String): Int {
368368
return this.argument<Int>(key)!!
369369
}
370370

371-
fun MethodCall.getOption(): FilterOption {
371+
private fun MethodCall.getOption(): FilterOption {
372372
val arguments = argument<Map<*, *>>("option")!!
373373
return ConvertUtils.convertFilterOptionsFromMap(arguments)
374374
}

android/src/main/kotlin/top/kikt/imagescanner/core/utils/AndroidQDBUtils.kt

+20-19
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,9 @@ import java.util.concurrent.locks.ReentrantLock
3030
import kotlin.concurrent.withLock
3131

3232
/// create 2019-09-11 by cai
33+
@Suppress("DEPRECATION")
3334
@RequiresApi(Build.VERSION_CODES.Q)
35+
@SuppressLint("Recycle")
3436
object AndroidQDBUtils : IDBUtils {
3537
private const val TAG = "PhotoManagerPlugin"
3638

@@ -144,7 +146,7 @@ object AndroidQDBUtils : IDBUtils {
144146
?: return emptyList()
145147

146148
while (cursor.moveToNext()) {
147-
val asset = convertCursorToAssetEntity(cursor, requestType)
149+
val asset = convertCursorToAssetEntity(cursor)
148150
list.add(asset)
149151
cache.putAsset(asset)
150152
}
@@ -187,7 +189,7 @@ object AndroidQDBUtils : IDBUtils {
187189
?: return emptyList()
188190

189191
while (cursor.moveToNext()) {
190-
val asset = convertCursorToAssetEntity(cursor, requestType)
192+
val asset = convertCursorToAssetEntity(cursor)
191193
list.add(asset)
192194
cache.putAsset(asset)
193195
}
@@ -198,13 +200,13 @@ object AndroidQDBUtils : IDBUtils {
198200

199201
}
200202

201-
private fun convertCursorToAssetEntity(cursor: Cursor, requestType: Int): AssetEntity {
203+
private fun convertCursorToAssetEntity(cursor: Cursor): AssetEntity {
202204
val id = cursor.getString(MediaStore.MediaColumns._ID)
203205
val path = cursor.getString(MediaStore.MediaColumns.DATA)
204206
val date = cursor.getLong(MediaStore.Images.Media.DATE_TAKEN)
205207
val type = cursor.getInt(MEDIA_TYPE)
206208

207-
val duration = if (type == MediaStore.Files.FileColumns.MEDIA_TYPE_IMAGE) 0 else cursor.getLong(MediaStore.Video.VideoColumns.DURATION)
209+
val duration = if (type == MEDIA_TYPE_IMAGE) 0 else cursor.getLong(MediaStore.Video.VideoColumns.DURATION)
208210
val width = cursor.getInt(MediaStore.MediaColumns.WIDTH)
209211
val height = cursor.getInt(MediaStore.MediaColumns.HEIGHT)
210212
val displayName = cursor.getString(MediaStore.Images.Media.DISPLAY_NAME)
@@ -221,21 +223,20 @@ object AndroidQDBUtils : IDBUtils {
221223

222224
val keys = (IDBUtils.storeImageKeys + IDBUtils.typeKeys + IDBUtils.storeVideoKeys).distinct().toTypedArray()
223225

224-
val selection = "${MediaStore.Files.FileColumns._ID} = ?"
226+
val selection = "$_ID = ?"
225227

226228
val args = arrayOf(id)
227229

228230
val cursor = context.contentResolver.query(allUri, keys, selection, args, null)
229231
cursor?.use {
230-
if (cursor.moveToNext()) {
231-
val type = cursor.getInt(MEDIA_TYPE)
232-
val dbAsset = convertCursorToAssetEntity(cursor, type)
232+
return if (cursor.moveToNext()) {
233+
val dbAsset = convertCursorToAssetEntity(cursor)
233234
cacheContainer.putAsset(dbAsset)
234235
cursor.close()
235-
return dbAsset
236+
dbAsset
236237
} else {
237238
cursor.close()
238-
return null
239+
null
239240
}
240241
}
241242
return null
@@ -377,7 +378,7 @@ object AndroidQDBUtils : IDBUtils {
377378
val uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI
378379

379380
val values = ContentValues().apply {
380-
put(MEDIA_TYPE, MediaStore.Files.FileColumns.MEDIA_TYPE_IMAGE)
381+
put(MEDIA_TYPE, MEDIA_TYPE_IMAGE)
381382

382383
put(MediaStore.MediaColumns.DISPLAY_NAME, title)
383384
put(MediaStore.Images.ImageColumns.MIME_TYPE, typeFromStream)
@@ -423,7 +424,7 @@ object AndroidQDBUtils : IDBUtils {
423424
val uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI
424425

425426
val values = ContentValues().apply {
426-
put(MEDIA_TYPE, MediaStore.Files.FileColumns.MEDIA_TYPE_IMAGE)
427+
put(MEDIA_TYPE, MEDIA_TYPE_IMAGE)
427428

428429
put(MediaStore.MediaColumns.DISPLAY_NAME, title)
429430
put(MediaStore.Images.ImageColumns.MIME_TYPE, typeFromStream)
@@ -480,7 +481,7 @@ object AndroidQDBUtils : IDBUtils {
480481

481482
val mediaType = convertTypeToMediaType(asset.type)
482483

483-
if (mediaType == MediaStore.Files.FileColumns.MEDIA_TYPE_VIDEO) {
484+
if (mediaType == MEDIA_TYPE_VIDEO) {
484485
copyKeys.add(MediaStore.Video.VideoColumns.DESCRIPTION)
485486
}
486487

@@ -500,7 +501,7 @@ object AndroidQDBUtils : IDBUtils {
500501
put(key, cursor.getString(key))
501502
}
502503
put(MEDIA_TYPE, mediaType)
503-
put(MediaStore.Files.FileColumns.RELATIVE_PATH, relativePath)
504+
put(RELATIVE_PATH, relativePath)
504505
}
505506

506507
val insertedUri = cr.insert(insertUri, cv) ?: throwMsg("Cannot insert new asset.")
@@ -592,8 +593,8 @@ object AndroidQDBUtils : IDBUtils {
592593
Log.i(TAG, "The removeAllExistsAssets was stopped, will be delete ids = $removedList")
593594
}
594595

595-
val idWhere = removedList.map { "?" }.joinToString(",")
596-
596+
val idWhere = removedList.joinToString(",") { "?" }
597+
597598
// Remove exists rows.
598599
val deleteRowCount = cr.delete(allUri, "${BaseColumns._ID} in ( $idWhere )", removedList.toTypedArray())
599600
Log.i("PhotoManagerPlugin", "Delete rows: $deleteRowCount")
@@ -605,7 +606,7 @@ object AndroidQDBUtils : IDBUtils {
605606
private fun getRelativePath(context: Context, galleryId: String): String? {
606607
val cr = context.contentResolver
607608

608-
val cursor = cr.query(allUri, arrayOf(MediaStore.Files.FileColumns.BUCKET_ID, MediaStore.Files.FileColumns.RELATIVE_PATH), "${MediaStore.Files.FileColumns.BUCKET_ID} = ?", arrayOf(galleryId), null)
609+
val cursor = cr.query(allUri, arrayOf(BUCKET_ID, RELATIVE_PATH), "$BUCKET_ID = ?", arrayOf(galleryId), null)
609610
?: return null
610611

611612
cursor.use {
@@ -619,7 +620,7 @@ object AndroidQDBUtils : IDBUtils {
619620
override fun getSomeInfo(context: Context, assetId: String): Pair<String, String>? {
620621
val cr = context.contentResolver
621622

622-
val cursor = cr.query(allUri, arrayOf(MediaStore.Files.FileColumns.BUCKET_ID, MediaStore.Files.FileColumns.RELATIVE_PATH), "${MediaStore.Files.FileColumns._ID} = ?", arrayOf(assetId), null)
623+
val cursor = cr.query(allUri, arrayOf(BUCKET_ID, RELATIVE_PATH), "$_ID = ?", arrayOf(assetId), null)
623624
?: return null
624625

625626
cursor.use {
@@ -646,7 +647,7 @@ object AndroidQDBUtils : IDBUtils {
646647
val info = VideoUtils.getPropertiesUseMediaPlayer(path)
647648

648649
val values = ContentValues().apply {
649-
put(MEDIA_TYPE, MediaStore.Files.FileColumns.MEDIA_TYPE_VIDEO)
650+
put(MEDIA_TYPE, MEDIA_TYPE_VIDEO)
650651

651652
put(MediaStore.MediaColumns.DISPLAY_NAME, title)
652653
put(MediaStore.Video.VideoColumns.MIME_TYPE, typeFromStream)

android/src/main/kotlin/top/kikt/imagescanner/core/utils/ConvertUtils.kt

+10-7
Original file line numberDiff line numberDiff line change
@@ -84,14 +84,17 @@ object ConvertUtils {
8484
}
8585

8686
fun getOptionFromType(map: Map<*, *>, type: AssetType): FilterCond {
87-
if (type == AssetType.Video) {
88-
return getOptionWithKey(map, "video")
89-
} else if (type == AssetType.Image) {
90-
return getOptionWithKey(map, "image")
91-
} else if (type == AssetType.Audio) {
92-
return getOptionWithKey(map, "audio")
87+
return when (type) {
88+
AssetType.Video -> {
89+
getOptionWithKey(map, "video")
90+
}
91+
AssetType.Image -> {
92+
getOptionWithKey(map, "image")
93+
}
94+
AssetType.Audio -> {
95+
getOptionWithKey(map, "audio")
96+
}
9397
}
94-
return FilterCond()
9598
}
9699

97100
private fun convertToOption(map: Map<*, *>): FilterCond {

0 commit comments

Comments
 (0)