diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java index ac4c2d595..c9fc1a57c 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java @@ -44,6 +44,7 @@ import com.fongmi.android.tv.model.SiteViewModel; import com.fongmi.android.tv.player.Source; import com.fongmi.android.tv.player.exo.CacheManager; import com.fongmi.android.tv.server.Server; +import com.fongmi.android.tv.service.PlaybackService; import com.fongmi.android.tv.ui.adapter.BaseDiffCallback; import com.fongmi.android.tv.ui.base.BaseActivity; import com.fongmi.android.tv.ui.custom.CustomRowPresenter; @@ -476,14 +477,14 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen } else if (mBinding.recycler.getSelectedPosition() != 0) { mBinding.recycler.scrollToPosition(0); } else { - super.onBackInvoked(); + if (PlaybackService.isRunning()) moveTaskToBack(true); + else super.onBackInvoked(); } } @Override protected void onDestroy() { CacheManager.get().release(); - WallConfig.get().clear(); LiveConfig.get().clear(); VodConfig.get().clear(); AppDatabase.backup(); diff --git a/app/src/main/java/com/fongmi/android/tv/api/config/LiveConfig.java b/app/src/main/java/com/fongmi/android/tv/api/config/LiveConfig.java index 86c64b062..d839c5180 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/config/LiveConfig.java +++ b/app/src/main/java/com/fongmi/android/tv/api/config/LiveConfig.java @@ -91,10 +91,6 @@ public class LiveConfig { } public LiveConfig init() { - this.home = null; - this.ads = new ArrayList<>(); - this.rules = new ArrayList<>(); - this.lives = new ArrayList<>(); return config(Config.live()); } @@ -106,10 +102,8 @@ public class LiveConfig { } public LiveConfig clear() { - this.home = null; - this.ads.clear(); - this.rules.clear(); - this.lives.clear(); + home = null; + lives = null; return this; } @@ -133,7 +127,7 @@ public class LiveConfig { OkHttp.cancel(TAG); Server.get().start(); String text = Decoder.getJson(UrlUtil.convert(config.getUrl()), TAG); - if (!Json.isObj(text)) clear().parseText(text, callback); + if (!Json.isObj(text)) parseText(text, callback); else checkJson(Json.parse(text).getAsJsonObject(), callback); config.update(); } catch (Throwable e) { @@ -180,7 +174,6 @@ public class LiveConfig { private void parseConfig(JsonObject object, Callback callback) { try { - clear(); initLive(object); initOther(object); } catch (Throwable e) { diff --git a/app/src/main/java/com/fongmi/android/tv/api/config/VodConfig.java b/app/src/main/java/com/fongmi/android/tv/api/config/VodConfig.java index 22916bd7c..4d73daad5 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/config/VodConfig.java +++ b/app/src/main/java/com/fongmi/android/tv/api/config/VodConfig.java @@ -80,17 +80,7 @@ public class VodConfig { } public VodConfig init() { - this.wall = null; - this.home = null; - this.parse = null; - this.config = Config.vod(); - this.ads = new ArrayList<>(); - this.doh = new ArrayList<>(); - this.rules = new ArrayList<>(); - this.sites = new ArrayList<>(); - this.flags = new ArrayList<>(); - this.parses = new ArrayList<>(); - return this; + return config(Config.vod()); } public VodConfig config(Config config) { @@ -99,15 +89,9 @@ public class VodConfig { } public VodConfig clear() { - this.wall = null; - this.home = null; - this.parse = null; - this.ads.clear(); - this.doh.clear(); - this.rules.clear(); - this.sites.clear(); - this.flags.clear(); - this.parses.clear(); + home = null; + parse = null; + sites = null; BaseLoader.get().clear(); return this; } @@ -158,7 +142,6 @@ public class VodConfig { private void parseConfig(JsonObject object, Callback callback) { try { - clear(); initSite(object); initParse(object); initOther(object); diff --git a/app/src/main/java/com/fongmi/android/tv/api/config/WallConfig.java b/app/src/main/java/com/fongmi/android/tv/api/config/WallConfig.java index 36cf49fa9..64b82f810 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/config/WallConfig.java +++ b/app/src/main/java/com/fongmi/android/tv/api/config/WallConfig.java @@ -49,7 +49,7 @@ public class WallConfig { } public static void load(Config config, Callback callback) { - get().clear().config(config).load(callback); + get().config(config).load(callback); } public WallConfig init() { @@ -63,11 +63,6 @@ public class WallConfig { return this; } - public WallConfig clear() { - this.config = null; - return this; - } - private boolean isCanceled(Throwable e) { return e.getCause() instanceof InterruptedException || e.getCause() instanceof InterruptedIOException; } diff --git a/app/src/main/java/com/fongmi/android/tv/service/PlaybackService.java b/app/src/main/java/com/fongmi/android/tv/service/PlaybackService.java index c31ab8821..f64a7aca5 100644 --- a/app/src/main/java/com/fongmi/android/tv/service/PlaybackService.java +++ b/app/src/main/java/com/fongmi/android/tv/service/PlaybackService.java @@ -1,8 +1,10 @@ package com.fongmi.android.tv.service; import android.annotation.SuppressLint; +import android.app.ActivityManager; import android.app.Notification; import android.app.Service; +import android.content.Context; import android.content.Intent; import android.content.pm.ServiceInfo; import android.graphics.Bitmap; @@ -32,6 +34,7 @@ import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; +import java.util.List; import java.util.Objects; public class PlaybackService extends Service { @@ -151,4 +154,12 @@ public class PlaybackService extends Service { public IBinder onBind(Intent intent) { return null; } + + public static boolean isRunning() { + ActivityManager manager = (ActivityManager) App.get().getSystemService(Context.ACTIVITY_SERVICE); + List services = manager.getRunningServices(Integer.MAX_VALUE); + if (services == null || services.isEmpty()) return false; + String clz = PlaybackService.class.getName(); + return services.stream().anyMatch(serviceInfo -> clz.equals(serviceInfo.service.getClassName())); + } } diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/HomeActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/HomeActivity.java index fefdad8a8..b6a733eae 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/HomeActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/HomeActivity.java @@ -32,6 +32,7 @@ import com.fongmi.android.tv.player.Source; import com.fongmi.android.tv.player.exo.CacheManager; import com.fongmi.android.tv.receiver.ShortcutReceiver; import com.fongmi.android.tv.server.Server; +import com.fongmi.android.tv.service.PlaybackService; import com.fongmi.android.tv.ui.base.BaseActivity; import com.fongmi.android.tv.ui.custom.FragmentStateManager; import com.fongmi.android.tv.ui.fragment.SettingFragment; @@ -216,14 +217,14 @@ public class HomeActivity extends BaseActivity implements NavigationBarView.OnIt } else if (mManager.isVisible(1)) { mBinding.navigation.setSelectedItemId(R.id.vod); } else if (mManager.canBack(0)) { - super.onBackInvoked(); + if (PlaybackService.isRunning()) moveTaskToBack(true); + else super.onBackInvoked(); } } @Override protected void onDestroy() { CacheManager.get().release(); - WallConfig.get().clear(); LiveConfig.get().clear(); VodConfig.get().clear(); AppDatabase.backup();