From abee470afcfc6765486d8c51d4943134209a8d25 Mon Sep 17 00:00:00 2001 From: lollipopkit Date: Tue, 28 Mar 2023 17:12:44 +0800 Subject: [PATCH] Android: support `background` process --- .../kotlin/tech/lolli/toolbox/MainActivity.kt | 19 ++++++++++++++++++- lib/view/page/home.dart | 11 +++++++++-- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/android/app/src/main/kotlin/tech/lolli/toolbox/MainActivity.kt b/android/app/src/main/kotlin/tech/lolli/toolbox/MainActivity.kt index 1e2849e1..b8dcfce2 100644 --- a/android/app/src/main/kotlin/tech/lolli/toolbox/MainActivity.kt +++ b/android/app/src/main/kotlin/tech/lolli/toolbox/MainActivity.kt @@ -1,6 +1,23 @@ package tech.lolli.toolbox import io.flutter.embedding.android.FlutterActivity +import io.flutter.embedding.engine.FlutterEngine +import io.flutter.plugin.common.MethodChannel -class MainActivity: FlutterActivity() { +class MainActivity : FlutterActivity() { + override fun configureFlutterEngine(flutterEngine: FlutterEngine) { + super.configureFlutterEngine(flutterEngine) + val binaryMessenger = flutterEngine.dartExecutor.binaryMessenger + + MethodChannel(binaryMessenger, "tech.lolli.toolbox/app_retain").apply { + setMethodCallHandler { method, result -> + if (method.method == "sendToBackground") { + moveTaskToBack(true) + result.success(null) + } else { + result.notImplemented() + } + } + } + } } diff --git a/lib/view/page/home.dart b/lib/view/page/home.dart index 0dbfddbf..b5061a91 100644 --- a/lib/view/page/home.dart +++ b/lib/view/page/home.dart @@ -1,11 +1,13 @@ import 'package:after_layout/after_layout.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:get_it/get_it.dart'; import '../../core/analysis.dart'; import '../../core/route.dart'; import '../../core/update.dart'; +import '../../core/utils/platform.dart'; import '../../core/utils/ui.dart'; import '../../data/model/app/dynamic_color.dart'; import '../../data/model/app/navigation_item.dart'; @@ -47,6 +49,7 @@ class _MyHomePageState extends State late int _selectIndex; late double _width; late S _s; + final _channel = const MethodChannel('tech.lolli.toolbox/app_retain'); @override void initState() { @@ -75,8 +78,12 @@ class _MyHomePageState extends State void didChangeAppLifecycleState(AppLifecycleState state) { super.didChangeAppLifecycleState(state); if (state == AppLifecycleState.paused) { - _serverProvider.setDisconnected(); - _serverProvider.stopAutoRefresh(); + if (isAndroid) { + _channel.invokeMethod('sendToBackground'); + } else { + _serverProvider.setDisconnected(); + _serverProvider.stopAutoRefresh(); + } } if (state == AppLifecycleState.resumed) { _serverProvider.startAutoRefresh();