@@ -15,6 +15,7 @@ import io.flutter.plugin.common.BinaryMessenger
15
15
import io.flutter.plugin.common.MethodCall
16
16
import io.flutter.plugin.common.MethodChannel
17
17
import io.flutter.plugin.common.PluginRegistry
18
+ import java.util.UUID
18
19
import kotlin.Exception
19
20
20
21
/* * MethodCallHandlerImpl */
@@ -25,7 +26,8 @@ class MethodCallHandlerImpl(private val context: Context, private val provider:
25
26
private lateinit var channel: MethodChannel
26
27
27
28
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 ()
29
31
30
32
override fun onMethodCall (call : MethodCall , result : MethodChannel .Result ) {
31
33
val args = call.arguments
@@ -109,27 +111,30 @@ class MethodCallHandlerImpl(private val context: Context, private val provider:
109
111
110
112
" openIgnoreBatteryOptimizationSettings" -> {
111
113
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)
115
118
}
116
119
}
117
120
118
121
" requestIgnoreBatteryOptimization" -> {
119
122
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)
123
127
}
124
128
}
125
129
126
130
" canDrawOverlays" -> result.success(PluginUtils .canDrawOverlays(context))
127
131
128
132
" openSystemAlertWindowSettings" -> {
129
133
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)
133
138
}
134
139
}
135
140
@@ -138,9 +143,10 @@ class MethodCallHandlerImpl(private val context: Context, private val provider:
138
143
139
144
" openAlarmsAndRemindersSettings" -> {
140
145
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)
144
150
}
145
151
}
146
152
@@ -152,19 +158,25 @@ class MethodCallHandlerImpl(private val context: Context, private val provider:
152
158
}
153
159
154
160
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)
156
165
157
- when (requestCode) {
166
+ if (methodCode == null || methodResult == null ) {
167
+ return true
168
+ }
169
+
170
+ when (methodCode) {
158
171
RequestCode .OPEN_IGNORE_BATTERY_OPTIMIZATION_SETTINGS ->
159
- resultCallback .success(PluginUtils .isIgnoringBatteryOptimizations(context))
172
+ methodResult .success(PluginUtils .isIgnoringBatteryOptimizations(context))
160
173
RequestCode .REQUEST_IGNORE_BATTERY_OPTIMIZATION ->
161
- resultCallback .success(PluginUtils .isIgnoringBatteryOptimizations(context))
174
+ methodResult .success(PluginUtils .isIgnoringBatteryOptimizations(context))
162
175
RequestCode .OPEN_SYSTEM_ALERT_WINDOW_SETTINGS ->
163
- resultCallback .success(PluginUtils .canDrawOverlays(context))
176
+ methodResult .success(PluginUtils .canDrawOverlays(context))
164
177
RequestCode .OPEN_ALARMS_AND_REMINDER_SETTINGS ->
165
- resultCallback .success(PluginUtils .canScheduleExactAlarms(context))
178
+ methodResult .success(PluginUtils .canScheduleExactAlarms(context))
166
179
}
167
-
168
180
return true
169
181
}
170
182
0 commit comments