Skip to content

Instantly share code, notes, and snippets.

@luk1337
Last active September 17, 2021 00:25
Show Gist options
  • Save luk1337/4d5c4d8cf6b37ec5148ac99c1fb5ab3c to your computer and use it in GitHub Desktop.
Save luk1337/4d5c4d8cf6b37ec5148ac99c1fb5ab3c to your computer and use it in GitHub Desktop.
diff --git a/app/src/main/java/com/ubergeek42/WeechatAndroid/WeechatActivity.kt b/app/src/main/java/com/ubergeek42/WeechatAndroid/WeechatActivity.kt
index 8dc5fab4..dc79664e 100644
--- a/app/src/main/java/com/ubergeek42/WeechatAndroid/WeechatActivity.kt
+++ b/app/src/main/java/com/ubergeek42/WeechatAndroid/WeechatActivity.kt
@@ -205,6 +205,16 @@ class WeechatActivity : AppCompatActivity(), CutePageChangeListener,
ThemeFix.fixIconAndColor(this)
}
+ @MainThread @CatD public override fun onPause() {
+ super.onPause()
+ RelayService.startWithAction(this, RelayService.ACTION_PAUSE)
+ }
+
+ @MainThread @CatD public override fun onResume() {
+ super.onResume()
+ RelayService.startWithAction(this, RelayService.ACTION_RESUME)
+ }
+
@MainThread @CatD(linger = true) fun connect() {
P.loadConnectionPreferences()
val error = P.validateConnectionPreferences()
diff --git a/app/src/main/java/com/ubergeek42/WeechatAndroid/service/RelayService.java b/app/src/main/java/com/ubergeek42/WeechatAndroid/service/RelayService.java
index 86866b11..1634d469 100644
--- a/app/src/main/java/com/ubergeek42/WeechatAndroid/service/RelayService.java
+++ b/app/src/main/java/com/ubergeek42/WeechatAndroid/service/RelayService.java
@@ -69,6 +69,7 @@ public class RelayService extends Service implements IObserver {
volatile public RelayConnection connection;
private PingActionReceiver ping;
private Handler doge; // thread "doge" used for connecting/disconnecting
+ private Handler cate; // thread "cate" used for pause/resume
// action is one of ACTION_START or ACTION_STOP
// see https://stackoverflow.com/a/47654126/1449683 regarding the version check
@@ -98,6 +99,7 @@ public class RelayService extends Service implements IObserver {
HandlerThread handlerThread = new HandlerThread("d-" + iteration);
handlerThread.start();
doge = new Handler(handlerThread.getLooper());
+ cate = new Handler(handlerThread.getLooper());
Network.get().register(this, () -> {
if (P.reconnect && state.contains(STATE.STARTED)) _start();
@@ -112,6 +114,7 @@ public class RelayService extends Service implements IObserver {
P.saveStuff();
Network.get().unregister(this);
doge.post(() -> doge.getLooper().quit());
+ cate.post(() -> cate.getLooper().quit());
}
@MainThread @Nullable @Override public IBinder onBind(Intent intent) {
@@ -125,6 +128,8 @@ public class RelayService extends Service implements IObserver {
final public static String ACTION_START = "com.ubergeek42.WeechatAndroid.START";
final public static String ACTION_STOP = "com.ubergeek42.WeechatAndroid.STOP";
+ final public static String ACTION_PAUSE = "com.ubergeek42.WeechatAndroid.PAUSE";
+ final public static String ACTION_RESUME = "com.ubergeek42.WeechatAndroid.RESUME";
// this method is called:
// * whenever app calls startService() (that means on each screen rotate)
@@ -135,10 +140,20 @@ public class RelayService extends Service implements IObserver {
P.loadConnectionPreferences();
start();
}
+ } else if (ACTION_RESUME.equals(intent.getAction())) {
+ cate.removeCallbacksAndMessages(null);
+ if (state.contains(STATE.STOPPED)) {
+ P.loadConnectionPreferences();
+ start();
+ }
} else if (ACTION_STOP.equals(intent.getAction())) {
if (!state.contains(STATE.STOPPED)) {
stop();
}
+ } else if (ACTION_PAUSE.equals(intent.getAction())) {
+ if (!state.contains(STATE.STOPPED)) {
+ cate.postDelayed(this::stop, 60000 * 5 /* 5 minutes */);
+ }
}
return START_STICKY;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment