libreshift / red-moon Goto Github PK
View Code? Open in Web Editor NEWAndroid screen filter app for night time phone use.
License: GNU General Public License v3.0
Android screen filter app for night time phone use.
License: GNU General Public License v3.0
Hi there !
I happily discovered Red Moon as an alternative to Twilight on F-Droid.
However, automatic turn-on/turn at custom times does not seem to work : I set it to run between 20:00 and 06:00, but it did not stop at 06:00.
Also, I'm not quite sure what the two startup options do ("Keep running after reboot" and "Alway open on startup") : do they mean that Red Moon doesn't normally start at boot to monitor automatic turn on/off times, and that reboot behaves differently than normal boot ?
Filters along the lines of what this app currently does may work without root, but on rooted devices, true temperature adjustment along the lines of what's done by cf.lumen or CyanogenMod LiveDisplay is a far better solution, and it would be nice to see such functionality available in a standalone F-Droid app.
great app, how to translate it to lithuanian lang, can i create values-lt folder and put in it strings file. Where are the english strings file to use it as a template?
Consider having a dark theme so that eyes aren't dazzle when turning red-moon on at night. Also, dark themes are just nicer (!)
I am able to contribute translations to Chinese, which would widen the user-base, but I am not sure how this could be done. Do you have any suggestions?
I tried to run Red Moon on my device but nothing happens when i enable the filter, even at night.
Is there anything i can do to help you solve this issue?
Sony Xperia Z3c
Android 5.1
Crashes as soon as I press the switch to turn it on and keeps on crashing in the background every fes seconds.
Switch not initialized to ON when red-moon starts from boot.
It would be great if redmoon could be (de)activated automatically at certain hours.
Roll of the DAY_OF_MONTH doesn't roll the MONTH forward as I expected. So when it tries to schedule for the next day on the last day of the month it instead schedules for the first day of the previous month. It immediately receives this alarm and schedules a new one, essentially continuously turning the filter on (or off).
For any users affected, the problems stop when you select "Never" as times to schedule the filter.
Red Moon 2.1 from F-Droid on Android 4.2.2 crashes straight away, the GUI doesn't even appear.
Using a Fairphone 1.
It would be nice if one could read the changelog before updating.
When the filter is active, you can see immediately what happens as you adjust the sliders. When the app is off, you need to turn it on to see; real time feedback on what the filter is going to look like would be really useful.
Hi,
when I try to launch the application I got the message " Unfortunately, Red Moon has stopped".
My phone is Motorola moto g 4G with android 4.4.4 (XT1039).
Using USB Debugging, here the log:
E/VdcInflateDelegate(14075): Exception while inflating
E/VdcInflateDelegate(14075): org.xmlpull.v1.XmlPullParserException: Binary XML file line #17 tag requires viewportWidth > 0
E/VdcInflateDelegate(14075): at android.support.graphics.drawable.VectorDrawableCompat.updateStateFromTypedArray(VectorDrawableCompat.java:535)
E/VdcInflateDelegate(14075): at android.support.graphics.drawable.VectorDrawableCompat.inflate(VectorDrawableCompat.java:472)
E/VdcInflateDelegate(14075): at android.support.graphics.drawable.VectorDrawableCompat.createFromXmlInner(VectorDrawableCompat.java:436)
E/VdcInflateDelegate(14075): at android.support.v7.widget.AppCompatDrawableManager$VdcInflateDelegate.createFromXmlInner(AppCompatDrawableManager.java:829)
E/VdcInflateDelegate(14075): at android.support.v7.widget.AppCompatDrawableManager.loadDrawableFromDelegates(AppCompatDrawableManager.java:303)
E/VdcInflateDelegate(14075): at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:178)
E/VdcInflateDelegate(14075): at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:173)
E/VdcInflateDelegate(14075): at android.support.v7.widget.TintTypedArray.getDrawable(TintTypedArray.java:60)
E/VdcInflateDelegate(14075): at android.support.v7.widget.Toolbar.(Toolbar.java:254)
E/VdcInflateDelegate(14075): at android.support.v7.widget.Toolbar.(Toolbar.java:196)
E/VdcInflateDelegate(14075): at java.lang.reflect.Constructor.constructNative(Native Method)
E/VdcInflateDelegate(14075): at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
E/VdcInflateDelegate(14075): at android.view.LayoutInflater.createView(LayoutInflater.java:594)
E/VdcInflateDelegate(14075): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
E/VdcInflateDelegate(14075): at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
E/VdcInflateDelegate(14075): at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
E/VdcInflateDelegate(14075): at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
E/VdcInflateDelegate(14075): at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
E/VdcInflateDelegate(14075): at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
E/VdcInflateDelegate(14075): at android.support.v7.app.AppCompatDelegateImplV7.createSubDecor(AppCompatDelegateImplV7.java:379)
E/VdcInflateDelegate(14075): at android.support.v7.app.AppCompatDelegateImplV7.ensureSubDecor(AppCompatDelegateImplV7.java:300)
E/VdcInflateDelegate(14075): at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:264)
E/VdcInflateDelegate(14075): at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:129)
E/VdcInflateDelegate(14075): at com.jmstudios.redmoon.activity.ShadesActivity.onCreate(ShadesActivity.java:35)
E/VdcInflateDelegate(14075): at android.app.Activity.performCreate(Activity.java:5248)
E/VdcInflateDelegate(14075): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1110)
E/VdcInflateDelegate(14075): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2162)
E/VdcInflateDelegate(14075): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2257)
E/VdcInflateDelegate(14075): at android.app.ActivityThread.access$800(ActivityThread.java:139)
E/VdcInflateDelegate(14075): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210)
E/VdcInflateDelegate(14075): at android.os.Handler.dispatchMessage(Handler.java:102)
E/VdcInflateDelegate(14075): at android.os.Looper.loop(Looper.java:136)
E/VdcInflateDelegate(14075): at android.app.ActivityThread.main(ActivityThread.java:5086)
E/VdcInflateDelegate(14075): at java.lang.reflect.Method.invokeNative(Native Method)
E/VdcInflateDelegate(14075): at java.lang.reflect.Method.invoke(Method.java:515)
E/VdcInflateDelegate(14075): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
E/VdcInflateDelegate(14075): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
E/VdcInflateDelegate(14075): at dalvik.system.NativeStart.main(Native Method)
D/AndroidRuntime(14075): Shutting down VM
W/dalvikvm(14075): threadid=1: thread exiting with uncaught exception (group=0x416b1d40)
E/AndroidRuntime(14075): FATAL EXCEPTION: main
E/AndroidRuntime(14075): Process: com.jmstudios.redmoon, PID: 14075
E/AndroidRuntime(14075): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.jmstudios.redmoon/com.jmstudios.redmoon.activity.ShadesActivity}: android.view.InflateException: Binary XML file line #36: Error inflating class android.support.v7.widget.Toolbar
E/AndroidRuntime(14075): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2198)
E/AndroidRuntime(14075): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2257)
E/AndroidRuntime(14075): at android.app.ActivityThread.access$800(ActivityThread.java:139)
E/AndroidRuntime(14075): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210)
E/AndroidRuntime(14075): at android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime(14075): at android.os.Looper.loop(Looper.java:136)
E/AndroidRuntime(14075): at android.app.ActivityThread.main(ActivityThread.java:5086)
E/AndroidRuntime(14075): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(14075): at java.lang.reflect.Method.invoke(Method.java:515)
E/AndroidRuntime(14075): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
E/AndroidRuntime(14075): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
E/AndroidRuntime(14075): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(14075): Caused by: android.view.InflateException: Binary XML file line #36: Error inflating class android.support.v7.widget.Toolbar
E/AndroidRuntime(14075): at android.view.LayoutInflater.createView(LayoutInflater.java:620)
E/AndroidRuntime(14075): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
E/AndroidRuntime(14075): at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
E/AndroidRuntime(14075): at android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
E/AndroidRuntime(14075): at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
E/AndroidRuntime(14075): at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
E/AndroidRuntime(14075): at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
E/AndroidRuntime(14075): at android.support.v7.app.AppCompatDelegateImplV7.createSubDecor(AppCompatDelegateImplV7.java:379)
E/AndroidRuntime(14075): at android.support.v7.app.AppCompatDelegateImplV7.ensureSubDecor(AppCompatDelegateImplV7.java:300)
E/AndroidRuntime(14075): at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:264)
E/AndroidRuntime(14075): at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:129)
E/AndroidRuntime(14075): at com.jmstudios.redmoon.activity.ShadesActivity.onCreate(ShadesActivity.java:35)
E/AndroidRuntime(14075): at android.app.Activity.performCreate(Activity.java:5248)
E/AndroidRuntime(14075): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1110)
E/AndroidRuntime(14075): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2162)
E/AndroidRuntime(14075): ... 11 more
E/AndroidRuntime(14075): Caused by: java.lang.reflect.InvocationTargetException
E/AndroidRuntime(14075): at java.lang.reflect.Constructor.constructNative(Native Method)
E/AndroidRuntime(14075): at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
E/AndroidRuntime(14075): at android.view.LayoutInflater.createView(LayoutInflater.java:594)
E/AndroidRuntime(14075): ... 25 more
E/AndroidRuntime(14075): Caused by: android.content.res.Resources$NotFoundException: File res/drawable-v19/abc_ic_ab_back_material.xml from drawable resource ID #0x7f020016
E/AndroidRuntime(14075): at android.content.res.Resources.loadDrawable(Resources.java:2099)
E/AndroidRuntime(14075): at android.content.res.Resources.getDrawable(Resources.java:700)
E/AndroidRuntime(14075): at android.support.v7.widget.TintResources.superGetDrawable(TintResources.java:48)
E/AndroidRuntime(14075): at android.support.v7.widget.AppCompatDrawableManager.onDrawableLoadedFromResources(AppCompatDrawableManager.java:374)
E/AndroidRuntime(14075): at android.support.v7.widget.TintResources.getDrawable(TintResources.java:44)
E/AndroidRuntime(14075): at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:323)
E/AndroidRuntime(14075): at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:180)
E/AndroidRuntime(14075): at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:173)
E/AndroidRuntime(14075): at android.support.v7.widget.TintTypedArray.getDrawable(TintTypedArray.java:60)
E/AndroidRuntime(14075): at android.support.v7.widget.Toolbar.(Toolbar.java:254)
E/AndroidRuntime(14075): at android.support.v7.widget.Toolbar.(Toolbar.java:196)
E/AndroidRuntime(14075): ... 28 more
E/AndroidRuntime(14075): Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #17: invalid drawable tag vector
E/AndroidRuntime(14075): at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:933)
E/AndroidRuntime(14075): at android.graphics.drawable.Drawable.createFromXml(Drawable.java:877)
E/AndroidRuntime(14075): at android.content.res.Resources.loadDrawable(Resources.java:2095)
E/AndroidRuntime(14075): ... 38 more
W/ActivityManager( 1023): Force finishing activity com.jmstudios.redmoon/.activity.ShadesActivity
I touch automatic turn on/off and select "based on sun" and yet I have not seen the filter come on or off automatically. What am I missing?
Hi there !
I saw that you said that the bug had been fixed in the other tickets but I've just upgraded to 2.2 and nothing has changed : It crashes when trying to enable Redmoon.
Your app looks promising I hope I will be able to try it soon :)
Using Android 5.1 from Fairphone 2 and last f-droid available RedMoon : 2.6.2
If I grab the RedMoon widget to slide it on a desk panel, the widget is dropped on the panel, but never appears on it. I tried several timesβ¦
This is a great app, thanks a ton! I've been dreaming about this kind of app for a long time. π
I'd like to make a feature proposal: the screen filter would adjust automatically based on the brightness of the environment. I have automatic brightness adjustment in Cyanogenmod but it is not sufficient, I'd like to have this screen filtering to adjust automatically too, in a similar way.
However, I'm not sure how to make it easily configurable. Perhaps it would only be the intensity level that needs to change as a function of environment brightness. The user could have one or few parameters to tune that or, as in my screen brightness config, the user could create "setpoints", that is, define light sensor values in lux and the corresponding intensity levels.
I was wondering how you'd feel about moving to GPLv3+.
I love that there's now a usable free software replacement to proprietary screen filter apps, and I'd like to work to make it better than those -- but I'd also be sad if a proprietary fork with added features came along and this app died out because they didn't give back.
To be 100% clear, that is NOT a threat. I have already done 85% of a UX overhaul for this app, which I will post in a mega-issue soon, no matter which license you decide to go with. the spirit of FLO development is collaboration; I do not want this to become a divisive, mud-slinging argument. I do have a preference and I hope you will consider switching. :)
Hi,
I have a problem when I change the automatic setting : Red Moon turn completely crazy (on, off, on, off,...)
My config :
Cyanogemod 11
Red Moon 2.6.1
Red Moon config :
Lower brightness checked
Automatically turn on filter on custom times (on:22h, off:6h)
Keep running after reboot : unchecked
Always open on startup : checked
Step to do that:
Red Moon is on and it's actually after "on time" (22h in my case)
Go into settings and change "custom times" into sun to enter disco mode.
I have another question :
What is the difference between "Keep running after reboot" and "Always open on startup"
Thanks a lot for this great application !
Pausing the filter doesn't work with version 2.2.1. It only stopps the the filter and hides the notifcation (so I must go in the app again and start it there).
List of changes to consider this ticket closed:
Some of this (anything quoted) is pulling from the Material guidelines (settings and selection controls). The rest is from my experience as a UX designer (in training).
1. Clarify the how users interact with the app
Add a FAB & change notification, the top-level switch, startup settings, & the automatic filter backend.
I wrote out a bunch of reasons why the current behavior is confusing, but they're cluttering this section so I moved them down to the bottom of this post 0 so here we can focus on solutions.
The user doesn't distinguish between the service and the filter. They only care about 3 questions:
So here's a state hierarchy:
Each indentation level is a layer of abstraction, and we have controls at each layer. If you mix layers, you'll end up with settings in places that don't make sense1.
The user doesn't care if Red Moon is able to turn off the service in the background, nor if the service starts on boot or if service is able to restart across reboots -- they only care what state the app is in. So the question becomes, where do we control elements of each state, and which states should persist across reboot? Here are my conclusions:
Remove both 'Startup' settings. They both have to do with implementation details that users don't care about.
The top-level switch should enable/disable Red Moon. Its state should persist across reboot.
Add a FAB that pauses and resumes the filter. Its state should not persist across reboot.
Changes to the filter settings get their own section at the bottom.
2. Change "Dark theme" to a switch and remove the secondary text.
Secondary text is optional. If the label is sufficient on its own, don't add a secondary text description.
[...]
If you have a single option, avoid using a checkbox and use an on/off switch instead.
"Dark theme" is pretty universally understood.
Switches are pretty overrated; they're often more confusing than a checkbox would be. That said, they have their place on lone settings or when changing the setting has an immediate effect (like toggling wifi or switching theme). Dark theme is both.
3. Shuffle around settings under the 'automatic filter' header
For non-switch settings, secondary text should show the current status of a setting only.
The first 3 lines mimic Twilight's interface. 'Location' should be smaller than Twilight's and only show the coordinates in its secondary text.
Automatic filter Filter times
'Location' opens up a new activity that guides you through the process of picking your location. That screen has 4 options:
0: It should be possible to understand how all settings will affect behavior without actually testing out different combinations of settings. It boils down to whether there a difference between a filter that's on but paused and a disabled filter. Ie, can the service be running and the filter be disabled? Related questions that follow:
My best guesses for the answers are:
Could you explain what the actual relationship between filter and service is? If it's different enough from my guess that implementing my suggestions would be difficult, I'll make some modifications.
1: It's pretty clear that the team behind Twilight did their homework for the design, but they got lost in the details. They decided "always on" should be at the manual-intervention level; I think it's a profile setting. They also decided "filter times" should be a global setting, when I think it's also a profile setting. Changing it is larger-scope than this ticket, though. I am only including changes here that I think should be uncontroversial.
Automatic filter toggle uses language, "Turn filter off" and "Turn filter on". The notification uses language "pause/resume". However, they both toggle the same setting (whether the filter is shown or not). This is the intended functionality, but they should use the same language.
I keep changing my opinion on which I prefer: I like "pause/resume" because it's very clear that this is a distinct action from enable/disable. I like "on/off" because it is actually describing the filter state. It does not matter that much which you pick, but they need to be the same. So either:
In light of #34, I think pause/resume is the clearest phrasing.
On android 6.0.1 (cm13) ui shows ok, when i push enable button error appears: app stopped working. Then notification tray is trying to load smthng and the same error is shown again.
Can you support this https://su.chainfire.eu/#updates-tapjacking?
I'm having difficulties writing this feature proposal because I don't know the terms.. Currently, redmoon appears in the notification panel. At least on my Cyanogenmod, there's another similar panel which shows square icons for wifi, brightness, settings, volume, location etc. Could redmoon be moved there instead (what's the name of that panel???)? One nice square icon among the others. Then, one press to enable/disable (pause/unpause) and a long press to open the app itself. Then it wouldn't need to appear in the notification panel anymore either.
Does this make sense?
Originally discussed in #61.
- Automatically pause when installing APKs
Darker detects when an APK is attempting to install and temporarily pauses.
This would indeed be very useful, and I've been looking into how to accomplish this. It seems that up to Android Lollipop (API 21) it was fairly easy to get the info of the foreground app with ActivityManager.getRunningTasks, however as of API 21+ this only returns 'non sensitive' tasks, making it unusable for this purpose.
According to this StackOverflow answer a workaround on later versions of Android is using android UsageStatsManager and filter out the last used application. A problem with this approach is that UsageStatsManager isn't implemented on Samsung phones according to the comments on that question.
Lastly I'm not sure how Red Moon would register changes to the foreground activity. There doesn't seem to be a listener framework for the UsageStats or the ActivityManager and constantly polling for changes may be a drain on the battery life of a phone.
That said, I'm quite a fan of this feature. I think it would be a huge usability improvement (especially for F-Droid users). However it seems that it would be quite complex and time consuming to implement this correctly, which I don't have right now. If someone else is willing to implement this, I would love to see a pull request π.
Once in auto-turn-on mode, using sunrise and sunset times, what Twilight (or Redshift) still does better is to adapt their relaxing-parameters to the expected ambient luminosity, regarding sun light intensity (assumed to reach the user through its windows).
Sun is rising/setting fast or slow relatively to the user position on the globe, and the user's eyes are adapting this light quite slowly also.
Despite the matching-sunlight goal, I personally like the progressive start of other solutions because my sight adapts to the red and I feel that the image on the screen is less red-distorded if I'm slowly boiled to it (like a frog in a slowy heated water-filled pan).
Checklist added by @smichel17. Original comment (not modified) is below.
When I have the option "Lower Brightness" enabled and turn on red moon, the screen flashes bright as it restores the brightness to max before lowering it.
Sony Xperia Z5
Hi raatmarien . Great job on the app. Thank you for your work
If you have the time could you add an option to disable the button backlight. The dimmer app on F-Droid already has code to do it.
Allow control with a plugin for Tasker as documented @ http://tasker.dinglisch.net/plugins.html
lower brightness
looks like it is part of the settings for a filter, but is actually independent of the selected filter.
Options to fix are
I think we should go with the first option. The default filter should not have lower brightness
enabled. The bed reading filter should. If the user changes this setting, the current filter is updated instead of displaying custom
like if you changed any of the other filter settings.
Hi,
I would like to use the Sun times to enable and disable RedMoon. I activated once my location feature then activated RedMoon auto-turn-on feature.
Here, I feel I miss a feedback from RedMoon to show me which position was acquired if any.
There's some duplicate code for changing preferences. I was looking into refactoring this, and came across some information that the approach used right now is deprecated. The new approach uses an XML file for each fragment, so you can (for example) add android:dependency="mSwitch"
and the setting will automatically gray out if the main switch is disabled, without needing to write any custom java.
FWIW, the code is generally really nice. I don't know much Java or Android-specific stuff (but I do know C -- pretty close), and it was very clear what was going on.
Hi,
Please add shortcut to activate /deactivate.
By enabling this tasker is intergrated via autoshortcut application.
Also, it will allow users to have a widget to turn on/off.
It would be great if the app could turn itself on in a duration after sunset of the users location and turn off in a duration before sunrise.
Android Wear support for watches, to set the same screen filters on the watch.
If I want to install an application over F-Droid or directly over an APK and running red moon while I want to install an application, I can't press on the install button, but if I then switch red moon of, I can press on Install. I haven't Google Play Services, so I can't test if it appears on an installation from Google Play, too.
Here's a bunch of thoughts about filtering. I couldn't decide where to draw lines so I'm just going to dump them all here.
Disclaimer: I didn't look at logs, so I'm hypothesizing.
I looked at this a little bit, and it seems like 'OnSeekBarChangeListener` isn't getting called until I lift my finger. If so, that's a bug in android's seekbar, not red moon.
It seems like the biggest barrier to refactoring would be the moon icons. You could still keep the three separate classes, but make them extend a new class that contains all the duplicate logic... but I also wonder if we could just remove the icons. The only unique things are:
Is there any chance to release Red Moon on Google Play store?
I am cautious to use apps from F-droid that are signed with a single F-droid key, not the keys of their developers.
If you don't wish to release on Play store the alternative would be to make a Red Moon F-droid repository or simply release the developer-signed app on Github.
Thanks for your consideration.
Adding an option to turn off status bar notifications would be a welcome improvement, so that once Red Moon is set up, it can be left alone to run in the background.
Trying to find my location when location services are turned off gives me a toast saying I need to enable location services.
I enabled them, and it's been searching for my location this whole day by now.
Might be a problem with my shitty GPS, but I can't manually set my location either.
What do?
Hello,
the notification in 2.6.2 was pretty usefull, since you could make it stop to apere during the day. The new notification is ab it annoying, since you have to kill the whole app in order to make it go away
Rgds schabi
On line 85 of ShadesPresenter.java, when the FAB is clicked, it checks to make sure ShadesPowerState is on. This check is unnecessary because the FAB will not display if ShadesPowerState is off.
I don't know if there are more checks like this scattered around the code (notifications? automatic toggle?), but if there are they can probably all be removed. The only actions possible while PowerState is off are changing the theme, sending feedback via email, and visiting this github page, none of which change their behavior based on PowerState.
There's already an onShadesPowerStateChanged() function -- it should be all that is needed, I think.
Hello, I've used Darker Pro (a non-free screen filter) for a long time and would like to move to Red Moon as I believe the filter is better, however it lacks some features which are useful.
Sorry to lump several queries into one issue but I thought it might be easier for you to dismiss if you weren't interested. Thank you for your work.
Advantage: increased trust/security.
Disadvantage: the current process seems a little cumbersome.
I'm not sure if this is something worth the hassle of doing right now, but it is something I'd encourage you to set up in the long term, so I figured I'd create an issue of it.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
π Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. πππ
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google β€οΈ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.