Skip to content

Commit 5f14a80

Browse files
[image_picker] Switch to Kotlin Pigeon (#11504)
Replaces the Java Pigeon generator with the Kotlin Pigeon generator, and adjusts the project accordingly: - Adds Kotlin build setings to Gradle. - Updates API signatures for Kotlin/Java differences. - Adds generic Java/Kotlin compat shim to create Result objects from Java, since those haven't been added to the Pigeon generator yet. - Updates tests to use constructors instead of builders, since the Kotlin generator doesn't create builders. - Updates tests to use a Java/Kotlin compat shim to read Kotlin Result values, instead of mocking the Java Pigeon response object. Part of flutter/flutter#158287 ## Pre-Review Checklist [^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling.
1 parent c05ab81 commit 5f14a80

17 files changed

Lines changed: 1541 additions & 1555 deletions

File tree

packages/image_picker/image_picker_android/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 0.8.13+17
2+
3+
* Updates internal implementation to use Kotlin Pigeon.
4+
15
## 0.8.13+16
26

37
* Bumps androidx.core:core from 1.17.0 to 1.18.0.

packages/image_picker/image_picker_android/android/build.gradle.kts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
1+
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
2+
13
group = "io.flutter.plugins.imagepicker"
24
version = "1.0-SNAPSHOT"
35

46
buildscript {
7+
val kotlinVersion = "2.3.20"
58
repositories {
69
google()
710
mavenCentral()
811
}
912

1013
dependencies {
1114
classpath("com.android.tools.build:gradle:8.13.1")
15+
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion")
1216
}
1317
}
1418

@@ -21,6 +25,13 @@ allprojects {
2125

2226
plugins {
2327
id("com.android.library")
28+
id("kotlin-android")
29+
}
30+
31+
kotlin {
32+
compilerOptions {
33+
jvmTarget = JvmTarget.fromTarget(JavaVersion.VERSION_17.toString())
34+
}
2435
}
2536

2637
android {

packages/image_picker/image_picker_android/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerCache.java

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ private void setType(String type) {
7575
prefs.edit().putString(SHARED_PREFERENCE_TYPE_KEY, type).apply();
7676
}
7777

78-
void saveDimensionWithOutputOptions(Messages.ImageSelectionOptions options) {
78+
void saveDimensionWithOutputOptions(ImageSelectionOptions options) {
7979
final SharedPreferences prefs =
8080
context.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
8181
SharedPreferences.Editor editor = prefs.edit();
@@ -87,7 +87,7 @@ void saveDimensionWithOutputOptions(Messages.ImageSelectionOptions options) {
8787
editor.putLong(
8888
SHARED_PREFERENCE_MAX_HEIGHT_KEY, Double.doubleToRawLongBits(options.getMaxHeight()));
8989
}
90-
editor.putInt(SHARED_PREFERENCE_IMAGE_QUALITY_KEY, options.getQuality().intValue());
90+
editor.putInt(SHARED_PREFERENCE_IMAGE_QUALITY_KEY, (int) options.getQuality());
9191
editor.apply();
9292
}
9393

@@ -146,13 +146,12 @@ Map<String, Object> getCacheMap() {
146146
}
147147

148148
if (prefs.contains(SHARED_PREFERENCE_ERROR_CODE_KEY)) {
149-
final Messages.CacheRetrievalError.Builder error = new Messages.CacheRetrievalError.Builder();
150-
error.setCode(prefs.getString(SHARED_PREFERENCE_ERROR_CODE_KEY, ""));
149+
final CacheRetrievalError error =
150+
new CacheRetrievalError(
151+
prefs.getString(SHARED_PREFERENCE_ERROR_CODE_KEY, ""),
152+
prefs.getString(SHARED_PREFERENCE_ERROR_MESSAGE_KEY, null));
151153
hasData = true;
152-
if (prefs.contains(SHARED_PREFERENCE_ERROR_MESSAGE_KEY)) {
153-
error.setMessage(prefs.getString(SHARED_PREFERENCE_ERROR_MESSAGE_KEY, ""));
154-
}
155-
resultMap.put(MAP_KEY_ERROR, error.build());
154+
resultMap.put(MAP_KEY_ERROR, error);
156155
}
157156

158157
if (hasData) {
@@ -161,8 +160,8 @@ Map<String, Object> getCacheMap() {
161160
resultMap.put(
162161
MAP_KEY_TYPE,
163162
typeValue.equals(MAP_TYPE_VALUE_VIDEO)
164-
? Messages.CacheRetrievalType.VIDEO
165-
: Messages.CacheRetrievalType.IMAGE);
163+
? CacheRetrievalType.VIDEO
164+
: CacheRetrievalType.IMAGE);
166165
}
167166
if (prefs.contains(SHARED_PREFERENCE_MAX_WIDTH_KEY)) {
168167
final long maxWidthValue = prefs.getLong(SHARED_PREFERENCE_MAX_WIDTH_KEY, 0);

0 commit comments

Comments
 (0)