Added alternative query syntax for listMedia for Android 11 (no longer supports LIMIT)

This commit is contained in:
Jordan Bushnell 2020-11-23 20:21:02 +00:00
parent 44842c0b1b
commit 50ccc25eb1
7 changed files with 179 additions and 7 deletions

29
.idea/libraries/Dart_SDK.xml generated Normal file
View File

@ -0,0 +1,29 @@
<component name="libraryTable">
<library name="Dart SDK">
<CLASSES>
<root url="file://$USER_HOME$/development/flutter/bin/cache/dart-sdk/lib/async" />
<root url="file://$USER_HOME$/development/flutter/bin/cache/dart-sdk/lib/cli" />
<root url="file://$USER_HOME$/development/flutter/bin/cache/dart-sdk/lib/collection" />
<root url="file://$USER_HOME$/development/flutter/bin/cache/dart-sdk/lib/convert" />
<root url="file://$USER_HOME$/development/flutter/bin/cache/dart-sdk/lib/core" />
<root url="file://$USER_HOME$/development/flutter/bin/cache/dart-sdk/lib/developer" />
<root url="file://$USER_HOME$/development/flutter/bin/cache/dart-sdk/lib/ffi" />
<root url="file://$USER_HOME$/development/flutter/bin/cache/dart-sdk/lib/html" />
<root url="file://$USER_HOME$/development/flutter/bin/cache/dart-sdk/lib/indexed_db" />
<root url="file://$USER_HOME$/development/flutter/bin/cache/dart-sdk/lib/io" />
<root url="file://$USER_HOME$/development/flutter/bin/cache/dart-sdk/lib/isolate" />
<root url="file://$USER_HOME$/development/flutter/bin/cache/dart-sdk/lib/js" />
<root url="file://$USER_HOME$/development/flutter/bin/cache/dart-sdk/lib/js_util" />
<root url="file://$USER_HOME$/development/flutter/bin/cache/dart-sdk/lib/math" />
<root url="file://$USER_HOME$/development/flutter/bin/cache/dart-sdk/lib/mirrors" />
<root url="file://$USER_HOME$/development/flutter/bin/cache/dart-sdk/lib/svg" />
<root url="file://$USER_HOME$/development/flutter/bin/cache/dart-sdk/lib/typed_data" />
<root url="file://$USER_HOME$/development/flutter/bin/cache/dart-sdk/lib/wasm" />
<root url="file://$USER_HOME$/development/flutter/bin/cache/dart-sdk/lib/web_audio" />
<root url="file://$USER_HOME$/development/flutter/bin/cache/dart-sdk/lib/web_gl" />
<root url="file://$USER_HOME$/development/flutter/bin/cache/dart-sdk/lib/web_sql" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

7
.idea/libraries/Flutter_Plugins.xml generated Normal file
View File

@ -0,0 +1,7 @@
<component name="libraryTable">
<library name="Flutter Plugins" type="FlutterPluginsLibraryType">
<CLASSES />
<JAVADOC />
<SOURCES />
</library>
</component>

8
.idea/modules.xml generated Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/photo_gallery.iml" filepath="$PROJECT_DIR$/.idea/photo_gallery.iml" />
</modules>
</component>
</project>

17
.idea/photo_gallery.iml generated Normal file
View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/.pub" />
<excludeFolder url="file://$MODULE_DIR$/build" />
<excludeFolder url="file://$MODULE_DIR$/example/.dart_tool" />
<excludeFolder url="file://$MODULE_DIR$/example/.pub" />
<excludeFolder url="file://$MODULE_DIR$/example/build" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Dart SDK" level="project" />
</component>
</module>

6
.idea/vcs.xml generated Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>

60
.idea/workspace.xml generated Normal file
View File

@ -0,0 +1,60 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ChangeListManager">
<list default="true" id="e1497618-4e4e-43ad-ab23-e4b4dce9d8cc" name="Default Changelist" comment="">
<change beforePath="$PROJECT_DIR$/android/src/main/kotlin/com/morbit/photogallery/PhotoGalleryPlugin.kt" beforeDir="false" afterPath="$PROJECT_DIR$/android/src/main/kotlin/com/morbit/photogallery/PhotoGalleryPlugin.kt" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="DefaultGradleProjectSettings">
<option name="testRunner" value="GRADLE" />
<option name="delegatedBuild" value="true" />
</component>
<component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
<component name="ProjectId" id="1khaK8xQe9PX6hdw8hxgJ2iUSSb" />
<component name="ProjectViewState">
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent">
<property name="RunOnceActivity.OpenProjectViewOnStart" value="true" />
<property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
<property name="android.project.structure.last.selected" value="SDK Location" />
<property name="android.project.structure.proportion" value="0.15" />
<property name="android.sdk.path" value="$USER_HOME$/Library/Android/sdk" />
<property name="dart.analysis.tool.window.visible" value="false" />
<property name="last_opened_file_path" value="$PROJECT_DIR$" />
<property name="settings.editor.selected.configurable" value="preferences.pluginManager" />
<property name="show.migrate.to.gradle.popup" value="false" />
</component>
<component name="RunManager">
<configuration name="main.dart" type="FlutterRunConfigurationType" factoryName="Flutter">
<option name="filePath" value="$PROJECT_DIR$/example/lib/main.dart" />
<method v="2" />
</configuration>
</component>
<component name="SvnConfiguration">
<configuration />
</component>
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="e1497618-4e4e-43ad-ab23-e4b4dce9d8cc" name="Default Changelist" comment="" />
<created>1606155210205</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1606155210205</updated>
</task>
<servers />
</component>
<component name="WindowStateProjectService">
<state x="533" y="288" key="SettingsEditor" timestamp="1606155429126">
<screen x="0" y="25" width="2048" height="1255" />
</state>
<state x="533" y="288" key="SettingsEditor/0.25.2048.1255@0.25.2048.1255" timestamp="1606155429126" />
</component>
</project>

View File

@ -277,13 +277,58 @@ class PhotoGalleryPlugin : FlutterPlugin, MethodCallHandler {
val limit = take ?: (total - offset)
this.context?.run {
val imageCursor = this.contentResolver.query(
var imageCursor: Cursor? = null
/**
* Change the way to fetch Media Store
*/
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
// Get All data in Cursor by sorting in DESC order
imageCursor = this.contentResolver.query(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
imageMetadataProjection,
android.os.Bundle().apply {
// Limit & Offset
putInt(android.content.ContentResolver.QUERY_ARG_LIMIT, limit)
putInt(android.content.ContentResolver.QUERY_ARG_OFFSET, offset)
// Sort function
putStringArray(
android.content.ContentResolver.QUERY_ARG_SORT_COLUMNS,
arrayOf(
MediaStore.Images.Media.DATE_TAKEN,
MediaStore.Images.Media.DATE_MODIFIED
)
)
putIntArray(
android.content.ContentResolver.QUERY_ARG_SORT_DIRECTION,
intArrayOf(
android.content.ContentResolver.QUERY_SORT_DIRECTION_DESCENDING,
android.content.ContentResolver.QUERY_SORT_DIRECTION_DESCENDING
)
)
// Selection
if (albumId != allAlbumId) {
putString(android.content.ContentResolver.QUERY_ARG_SQL_SELECTION, "${MediaStore.Images.Media.BUCKET_ID} = ?")
putStringArray(
android.content.ContentResolver.QUERY_ARG_SQL_SELECTION_ARGS,
arrayOf(
albumId.toString()
)
)
}
},
null
)
} else {
imageCursor = this.contentResolver.query(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
imageMetadataProjection,
if (albumId == allAlbumId) null else "${MediaStore.Images.Media.BUCKET_ID} = $albumId",
null,
"$imageOrderBy LIMIT $limit OFFSET $offset"
)
}
imageCursor?.use { cursor ->
while (cursor.moveToNext()) {