From 9a52cee2391af2f0e1156bb6a20f72326487bc8f Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Tue, 25 Apr 2023 16:06:05 -0400 Subject: [PATCH] Expose broadcast intents for custom effects --- AndroidManifest.xml | 9 +++++ .../lunatic/CustomEffectReceiver.java | 40 +++++++++++++++++++ .../lunatic/Manager/AnimationManager.java | 5 +++ .../typeblog/lunatic/Manager/LEDManager.java | 19 +++++++++ .../lunatic/Manager/StatusManager.java | 9 +++++ 5 files changed, 82 insertions(+) create mode 100644 src/net/typeblog/lunatic/CustomEffectReceiver.java diff --git a/AndroidManifest.xml b/AndroidManifest.xml index eef8e4a..2c97a11 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -93,5 +93,14 @@ + + + + + + + + diff --git a/src/net/typeblog/lunatic/CustomEffectReceiver.java b/src/net/typeblog/lunatic/CustomEffectReceiver.java new file mode 100644 index 0000000..258d790 --- /dev/null +++ b/src/net/typeblog/lunatic/CustomEffectReceiver.java @@ -0,0 +1,40 @@ +package net.typeblog.lunatic; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; + +import net.typeblog.lunatic.Manager.LEDManager; +import net.typeblog.lunatic.Manager.StatusManager; + +public class CustomEffectReceiver extends BroadcastReceiver { + public static final String EFFECT_START = "net.typeblog.lunatic.EFFECT_START"; + public static final String EFFECT_SET = "net.typeblog.lunatic.EFFECT_SET"; + public static final String EFFECT_CLEAR = "net.typeblog.lunatic.EFFECT_CLEAR"; + public static final String EFFECT_END = "net.typeblog.lunatic.EFFECT_END"; + + private LEDManager mManager = new LEDManager(); + + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + + if (EFFECT_START.equals(action)) { + StatusManager.setCustomEffectActive(true); + } else if (EFFECT_SET.equals(action)) { + if (!StatusManager.isCustomEffectActive()) return; + int ids = intent.getIntExtra("ids", 0); + int color = intent.getIntExtra("color", 0xffffff); + int brightness = intent.getIntExtra("brightness", 100); + + mManager.setRawState(ids, color, brightness); + } else if (EFFECT_CLEAR.equals(action)) { + if (!StatusManager.isCustomEffectActive()) return; + mManager.enableAllLEDs(false); + } else if (EFFECT_END.equals(action)) { + if (!StatusManager.isCustomEffectActive()) return; + mManager.enableAllLEDs(false); + StatusManager.setCustomEffectActive(false); + } + } +} diff --git a/src/net/typeblog/lunatic/Manager/AnimationManager.java b/src/net/typeblog/lunatic/Manager/AnimationManager.java index bee11b1..ecbaf9a 100644 --- a/src/net/typeblog/lunatic/Manager/AnimationManager.java +++ b/src/net/typeblog/lunatic/Manager/AnimationManager.java @@ -51,6 +51,11 @@ public final class AnimationManager { } private static boolean check(Constants.SpotlightMode mode) { + if (StatusManager.isCustomEffectActive()) { + if (DEBUG) Log.d(TAG, "Custom effects override all animations | name: " + mode.name()); + return false; + } + switch (mode) { case FLASHLIGHT: if (!StatusManager.isAllLedsActive()) diff --git a/src/net/typeblog/lunatic/Manager/LEDManager.java b/src/net/typeblog/lunatic/Manager/LEDManager.java index 124022a..b37929b 100644 --- a/src/net/typeblog/lunatic/Manager/LEDManager.java +++ b/src/net/typeblog/lunatic/Manager/LEDManager.java @@ -64,4 +64,23 @@ public class LEDManager { mEnabledLeds = enable ? 31 : 0; syncState(); } + + public void setRawState(int ids, int color, int brightness) { + if (brightness > 100) { + brightness = 100; + } else if (brightness < 0) { + brightness = 0; + } + + if (ids >= 32) { + ids = 31; + } else if (ids < 0) { + ids = 0; + } + + mEnabledLeds = ids; + mColor = color; + mBrightness = brightness; + syncState(); + } } diff --git a/src/net/typeblog/lunatic/Manager/StatusManager.java b/src/net/typeblog/lunatic/Manager/StatusManager.java index 3c655f4..f81bb95 100644 --- a/src/net/typeblog/lunatic/Manager/StatusManager.java +++ b/src/net/typeblog/lunatic/Manager/StatusManager.java @@ -26,6 +26,7 @@ public final class StatusManager { private static boolean musicLedActive = false; private static boolean notifLedActive = false; private static boolean chargingLedActive = false; + private static boolean customEffectActive = false; public static boolean isAllLedsActive() { return allLedActive; @@ -66,4 +67,12 @@ public final class StatusManager { public static void setChargingLedsActive(boolean status) { chargingLedActive = status; } + + public static boolean isCustomEffectActive() { + return customEffectActive; + } + + public static void setCustomEffectActive(boolean status) { + customEffectActive = status; + } }