From 0b7d6be9765a2ba34bb45c99cbfda817423b779c Mon Sep 17 00:00:00 2001 From: Jonah Williams Date: Fri, 13 Apr 2018 17:08:00 -0700 Subject: [PATCH] Re-land "do not pause rendering when android view loses focus" (#5004) * do not pause rendering when android view loses focus --- lib/ui/window.dart | 10 +++++++--- .../android/io/flutter/app/FlutterActivity.java | 6 ++++++ .../io/flutter/app/FlutterActivityDelegate.java | 5 +++++ .../android/io/flutter/app/FlutterActivityEvents.java | 5 +++++ .../io/flutter/app/FlutterFragmentActivity.java | 6 ++++++ .../platform/android/io/flutter/view/FlutterView.java | 4 ++-- 6 files changed, 31 insertions(+), 5 deletions(-) diff --git a/lib/ui/window.dart b/lib/ui/window.dart index 26b7021929e..05bf0b73a9f 100644 --- a/lib/ui/window.dart +++ b/lib/ui/window.dart @@ -47,10 +47,14 @@ enum AppLifecycleState { /// in the foreground inactive state. Apps transition to this state when in /// a phone call, responding to a TouchID request, when entering the app /// switcher or the control center, or when the UIViewController hosting the - /// Flutter app is transitioning. Apps in this state should assume that they - /// may be [paused] at any time. + /// Flutter app is transitioning. /// - /// On Android, this state is currently unused. + /// On Android, this corresponds to an app or the Flutter host view running + /// in the foreground inactive state. Apps transition to this state when + /// another activity is focused, such as a split-screen app, a phone call, + /// a picture-in-picture app, a system dialog, or another window. + /// + /// Apps in this state should assume that they may be [paused] at any time. inactive, /// The application is not currently visible to the user, not responding to diff --git a/shell/platform/android/io/flutter/app/FlutterActivity.java b/shell/platform/android/io/flutter/app/FlutterActivity.java index f01e85a1a24..ab566c485a1 100644 --- a/shell/platform/android/io/flutter/app/FlutterActivity.java +++ b/shell/platform/android/io/flutter/app/FlutterActivity.java @@ -99,6 +99,12 @@ public class FlutterActivity extends Activity implements FlutterView.Provider, P super.onBackPressed(); } } + + @Override + protected void onStop() { + eventDelegate.onStop(); + super.onStop(); + } @Override protected void onPause() { diff --git a/shell/platform/android/io/flutter/app/FlutterActivityDelegate.java b/shell/platform/android/io/flutter/app/FlutterActivityDelegate.java index 9de35c4b480..1c880d7e469 100644 --- a/shell/platform/android/io/flutter/app/FlutterActivityDelegate.java +++ b/shell/platform/android/io/flutter/app/FlutterActivityDelegate.java @@ -218,6 +218,11 @@ public final class FlutterActivityDelegate } } + @Override + public void onStop() { + flutterView.onStop(); + } + @Override public void onPostResume() { if (flutterView != null) { diff --git a/shell/platform/android/io/flutter/app/FlutterActivityEvents.java b/shell/platform/android/io/flutter/app/FlutterActivityEvents.java index 98a3a1016c8..8d8eb422aa3 100644 --- a/shell/platform/android/io/flutter/app/FlutterActivityEvents.java +++ b/shell/platform/android/io/flutter/app/FlutterActivityEvents.java @@ -54,6 +54,11 @@ public interface FlutterActivityEvents */ void onDestroy(); + /** + * @see android.app.Activity#onStop() + */ + void onStop(); + /** * Invoked when the activity has detected the user's press of the back key. * diff --git a/shell/platform/android/io/flutter/app/FlutterFragmentActivity.java b/shell/platform/android/io/flutter/app/FlutterFragmentActivity.java index cc8325df974..050c5cd2321 100644 --- a/shell/platform/android/io/flutter/app/FlutterFragmentActivity.java +++ b/shell/platform/android/io/flutter/app/FlutterFragmentActivity.java @@ -98,6 +98,12 @@ public class FlutterFragmentActivity } } + @Override + protected void onStop() { + eventDelegate.onStop(); + super.onStop(); + } + @Override protected void onPause() { super.onPause(); diff --git a/shell/platform/android/io/flutter/view/FlutterView.java b/shell/platform/android/io/flutter/view/FlutterView.java index 6b8f6b47f6f..38b0df20b96 100644 --- a/shell/platform/android/io/flutter/view/FlutterView.java +++ b/shell/platform/android/io/flutter/view/FlutterView.java @@ -267,7 +267,7 @@ public class FlutterView extends SurfaceView } public void onPause() { - mFlutterLifecycleChannel.send("AppLifecycleState.paused"); + mFlutterLifecycleChannel.send("AppLifecycleState.inactive"); } public void onPostResume() { @@ -278,7 +278,7 @@ public class FlutterView extends SurfaceView } public void onStop() { - mFlutterLifecycleChannel.send("AppLifecycleState.suspending"); + mFlutterLifecycleChannel.send("AppLifecycleState.paused"); } public void onMemoryPressure() {