23 private static final String TAG =
"LifecycleChannel";
24 private static final String CHANNEL_NAME =
"flutter/lifecycle";
31 private enum AppLifecycleState {
39 private AppLifecycleState lastAndroidState =
null;
40 private AppLifecycleState lastFlutterState =
null;
41 private boolean lastFocus =
true;
43 @NonNull
private final BasicMessageChannel<String> channel;
46 this(
new BasicMessageChannel<String>(dartExecutor, CHANNEL_NAME, StringCodec.INSTANCE));
51 this.channel = channel;
69 private void sendState(AppLifecycleState
state,
boolean hasFocus) {
70 if (lastAndroidState ==
state && hasFocus == lastFocus) {
74 if (
state ==
null && lastAndroidState ==
null) {
82 AppLifecycleState newState =
null;
89 newState = hasFocus ? AppLifecycleState.RESUMED : AppLifecycleState.INACTIVE;
100 lastAndroidState =
state;
101 lastFocus = hasFocus;
102 if (newState == lastFlutterState) {
106 String
message =
"AppLifecycleState." + newState.name().toLowerCase(Locale.ROOT);
107 Log.v(TAG,
"Sending " +
message +
" message.");
109 lastFlutterState = newState;
115 sendState(lastAndroidState,
true);
120 sendState(lastAndroidState,
false);
124 sendState(AppLifecycleState.RESUMED, lastFocus);
128 sendState(AppLifecycleState.INACTIVE, lastFocus);
132 sendState(AppLifecycleState.PAUSED, lastFocus);
136 sendState(AppLifecycleState.DETACHED, lastFocus);