From 75d2a96b46a2e43531534f71ef501ac6b65dd57d Mon Sep 17 00:00:00 2001 From: M66B Date: Fri, 17 Jun 2022 22:46:00 +0200 Subject: [PATCH] Debug: monitor audio mode --- .../eu/faircode/email/ServiceSynchronize.java | 36 ++++++++++++++++ .../java/eu/faircode/email/TwoStateOwner.java | 41 ++++++++++++++++--- 2 files changed, 71 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java index 26100355a9..3c611dbfaf 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java +++ b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java @@ -31,6 +31,7 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.SharedPreferences; +import android.media.AudioManager; import android.net.ConnectivityManager; import android.net.LinkProperties; import android.net.Network; @@ -47,9 +48,12 @@ import androidx.annotation.NonNull; import androidx.annotation.RequiresApi; import androidx.core.app.NotificationCompat; import androidx.core.content.ContextCompat; +import androidx.lifecycle.Lifecycle; +import androidx.lifecycle.LifecycleObserver; import androidx.lifecycle.MediatorLiveData; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.Observer; +import androidx.lifecycle.OnLifecycleEvent; import androidx.preference.PreferenceManager; import com.sun.mail.iap.Argument; @@ -676,6 +680,38 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences final TwoStateOwner cowner = new TwoStateOwner(this, "liveUnseenNotify"); + if (BuildConfig.DEBUG && + Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + // Widgets will be disabled too + AudioManager am = Helper.getSystemService(this, AudioManager.class); + + AudioManager.OnModeChangedListener listener = new AudioManager.OnModeChangedListener() { + @Override + public void onModeChanged(int mode) { + boolean inCall = MediaPlayerHelper.isInCall(mode); + boolean notify_suppress_in_call = prefs.getBoolean("notify_suppress_in_call", false); + Log.i("Owner inCall=" + inCall + " suppress=" + notify_suppress_in_call); + cowner.setEnabled(!notify_suppress_in_call || !inCall); + } + }; + listener.onModeChanged(am.getMode()); // Init + + getLifecycle().addObserver(new LifecycleObserver() { + private boolean registered = false; + + @OnLifecycleEvent(Lifecycle.Event.ON_ANY) + public void onStateChanged() { + if (ServiceSynchronize.this.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) { + am.addOnModeChangedListener(executor, listener); + registered = true; + } else if (registered) { + am.removeOnModeChangedListener(listener); + registered = false; + } + } + }); + } + db.folder().liveSynchronizing().observe(this, new Observer>() { private List lastAccounts = new ArrayList<>(); private List lastFolders = new ArrayList<>(); diff --git a/app/src/main/java/eu/faircode/email/TwoStateOwner.java b/app/src/main/java/eu/faircode/email/TwoStateOwner.java index 91fd478804..940ff3f6c5 100644 --- a/app/src/main/java/eu/faircode/email/TwoStateOwner.java +++ b/app/src/main/java/eu/faircode/email/TwoStateOwner.java @@ -37,6 +37,8 @@ import java.util.Objects; public class TwoStateOwner implements LifecycleOwner { private String name; + private boolean enabled = true; + private Boolean start = null; private boolean owned = true; private Object condition; private LifecycleRegistry registry; @@ -77,6 +79,27 @@ public class TwoStateOwner implements LifecycleOwner { }); } + void setEnabled(boolean value) { + Log.i("Owner enable=" + value + " state=" + registry.getCurrentState().name()); + if (enabled && !value) { + boolean started = registry.getCurrentState().isAtLeast(Lifecycle.State.STARTED); + stop(); + start = (started ? true : null); + Log.i("Owner stopped start=" + start); + } + + enabled = value; + + if (enabled && start != null) { + Log.i("Owner restore start=" + start); + if (start) + start(); + else + stop(); + start = null; + } + } + private void create() { if (owned) { // Initialize @@ -99,15 +122,21 @@ public class TwoStateOwner implements LifecycleOwner { } void start() { - Lifecycle.State state = registry.getCurrentState(); - if (!state.equals(Lifecycle.State.STARTED) && !state.equals(Lifecycle.State.DESTROYED)) - setState(Lifecycle.State.STARTED); + if (enabled) { + Lifecycle.State state = registry.getCurrentState(); + if (!state.equals(Lifecycle.State.STARTED) && !state.equals(Lifecycle.State.DESTROYED)) + setState(Lifecycle.State.STARTED); + } else + start = true; } void stop() { - Lifecycle.State state = registry.getCurrentState(); - if (!state.equals(Lifecycle.State.CREATED) && !state.equals(Lifecycle.State.DESTROYED)) - setState(Lifecycle.State.CREATED); + if (enabled) { + Lifecycle.State state = registry.getCurrentState(); + if (!state.equals(Lifecycle.State.CREATED) && !state.equals(Lifecycle.State.DESTROYED)) + setState(Lifecycle.State.CREATED); + } else + start = false; } void restart() {