Skip to content

Commit 81e0258

Browse files
committed
fix: Fix "Reply already submitted" error #330
1 parent a181843 commit 81e0258

File tree

1 file changed

+32
-20
lines changed

1 file changed

+32
-20
lines changed

android/src/main/kotlin/com/pravera/flutter_foreground_task/MethodCallHandlerImpl.kt

Lines changed: 32 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import io.flutter.plugin.common.BinaryMessenger
1515
import io.flutter.plugin.common.MethodCall
1616
import io.flutter.plugin.common.MethodChannel
1717
import io.flutter.plugin.common.PluginRegistry
18+
import java.util.UUID
1819
import kotlin.Exception
1920

2021
/** MethodCallHandlerImpl */
@@ -25,7 +26,8 @@ class MethodCallHandlerImpl(private val context: Context, private val provider:
2526
private lateinit var channel: MethodChannel
2627

2728
private var activity: Activity? = null
28-
private var resultCallbacks: MutableMap<Int, MethodChannel.Result?> = mutableMapOf()
29+
private var methodCodes: MutableMap<Int, Int> = mutableMapOf()
30+
private var methodResults: MutableMap<Int, MethodChannel.Result> = mutableMapOf()
2931

3032
override fun onMethodCall(call: MethodCall, result: MethodChannel.Result) {
3133
val args = call.arguments
@@ -109,27 +111,30 @@ class MethodCallHandlerImpl(private val context: Context, private val provider:
109111

110112
"openIgnoreBatteryOptimizationSettings" -> {
111113
checkActivityNull().let {
112-
val reqCode = RequestCode.OPEN_IGNORE_BATTERY_OPTIMIZATION_SETTINGS
113-
resultCallbacks[reqCode] = result
114-
PluginUtils.openIgnoreBatteryOptimizationSettings(it, reqCode)
114+
val requestCode = UUID.randomUUID().hashCode() and 0xFFFF
115+
methodCodes[requestCode] = RequestCode.OPEN_IGNORE_BATTERY_OPTIMIZATION_SETTINGS
116+
methodResults[requestCode] = result
117+
PluginUtils.openIgnoreBatteryOptimizationSettings(it, requestCode)
115118
}
116119
}
117120

118121
"requestIgnoreBatteryOptimization" -> {
119122
checkActivityNull().let {
120-
val reqCode = RequestCode.REQUEST_IGNORE_BATTERY_OPTIMIZATION
121-
resultCallbacks[reqCode] = result
122-
PluginUtils.requestIgnoreBatteryOptimization(it, reqCode)
123+
val requestCode = UUID.randomUUID().hashCode() and 0xFFFF
124+
methodCodes[requestCode] = RequestCode.REQUEST_IGNORE_BATTERY_OPTIMIZATION
125+
methodResults[requestCode] = result
126+
PluginUtils.requestIgnoreBatteryOptimization(it, requestCode)
123127
}
124128
}
125129

126130
"canDrawOverlays" -> result.success(PluginUtils.canDrawOverlays(context))
127131

128132
"openSystemAlertWindowSettings" -> {
129133
checkActivityNull().let {
130-
val reqCode = RequestCode.OPEN_SYSTEM_ALERT_WINDOW_SETTINGS
131-
resultCallbacks[reqCode] = result
132-
PluginUtils.openSystemAlertWindowSettings(it, reqCode)
134+
val requestCode = UUID.randomUUID().hashCode() and 0xFFFF
135+
methodCodes[requestCode] = RequestCode.OPEN_SYSTEM_ALERT_WINDOW_SETTINGS
136+
methodResults[requestCode] = result
137+
PluginUtils.openSystemAlertWindowSettings(it, requestCode)
133138
}
134139
}
135140

@@ -138,9 +143,10 @@ class MethodCallHandlerImpl(private val context: Context, private val provider:
138143

139144
"openAlarmsAndRemindersSettings" -> {
140145
checkActivityNull().let {
141-
val reqCode = RequestCode.OPEN_ALARMS_AND_REMINDER_SETTINGS
142-
resultCallbacks[reqCode] = result
143-
PluginUtils.openAlarmsAndRemindersSettings(it, reqCode)
146+
val requestCode = UUID.randomUUID().hashCode() and 0xFFFF
147+
methodCodes[requestCode] = RequestCode.OPEN_ALARMS_AND_REMINDER_SETTINGS
148+
methodResults[requestCode] = result
149+
PluginUtils.openAlarmsAndRemindersSettings(it, requestCode)
144150
}
145151
}
146152

@@ -152,19 +158,25 @@ class MethodCallHandlerImpl(private val context: Context, private val provider:
152158
}
153159

154160
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?): Boolean {
155-
val resultCallback = resultCallbacks[requestCode] ?: return true
161+
val methodCode = methodCodes[requestCode]
162+
val methodResult = methodResults[requestCode]
163+
methodCodes.remove(requestCode)
164+
methodResults.remove(requestCode)
156165

157-
when (requestCode) {
166+
if (methodCode == null || methodResult == null) {
167+
return true
168+
}
169+
170+
when (methodCode) {
158171
RequestCode.OPEN_IGNORE_BATTERY_OPTIMIZATION_SETTINGS ->
159-
resultCallback.success(PluginUtils.isIgnoringBatteryOptimizations(context))
172+
methodResult.success(PluginUtils.isIgnoringBatteryOptimizations(context))
160173
RequestCode.REQUEST_IGNORE_BATTERY_OPTIMIZATION ->
161-
resultCallback.success(PluginUtils.isIgnoringBatteryOptimizations(context))
174+
methodResult.success(PluginUtils.isIgnoringBatteryOptimizations(context))
162175
RequestCode.OPEN_SYSTEM_ALERT_WINDOW_SETTINGS ->
163-
resultCallback.success(PluginUtils.canDrawOverlays(context))
176+
methodResult.success(PluginUtils.canDrawOverlays(context))
164177
RequestCode.OPEN_ALARMS_AND_REMINDER_SETTINGS ->
165-
resultCallback.success(PluginUtils.canScheduleExactAlarms(context))
178+
methodResult.success(PluginUtils.canScheduleExactAlarms(context))
166179
}
167-
168180
return true
169181
}
170182

0 commit comments

Comments
 (0)