renyuneyun / easer Goto Github PK
View Code? Open in Web Editor NEWUser-defined explicit automation for Android
Home Page: https://renyuneyun.github.io/Easer/
License: GNU General Public License v3.0
User-defined explicit automation for Android
Home Page: https://renyuneyun.github.io/Easer/
License: GNU General Public License v3.0
Please add an option "Activation/Deactivation of the the Access point functionality"
I would also interested by an option that permits to put my smartphone in airplane mode if it is discharging to save the battery.
Using the latest version on f-droid as of this report, 0.3.5, easer doesn't start on boot despite enabling the option in settings to do so. I experienced this issue a few times after rebooting my device and meeting certain conditions that should have triggered an action in easer (e.g. connected to wifi AP --> do some action). If I manually launch easer, then suddenly the event triggers.
I try almost all profile options on two different phones with two different versions of Android.
Conclusion:
The test is made with Battery is or is not discharging event.
Each profile selects only one option on/off or normal/silent sound or manual/auto brightnesse
Battery is charging -> select profile with option on
Battery is discharging -> select profile with option off
Then I put the power on/off several times, waiting between both. I tried to activate/desactivate the functionality by the parameters of the phone if Easer didn't works correctly to see what works (on or off).
I had several crashes during the tests but I didn't succeed to identify the conditions to predict them.
Results of the test below.
With Samsung Galaxy Note 2, Android 5.1.1, CM 12.1
bluetooth: everything works fine
auto rotation: everything works fine
hotspot: everything works fine
ring: almost ok but the option silent activate "only priority rings", not real silent mode.
data on: page updated, but doesn't put data on
data off: page not updated, doesn't put data off
wifi on: page updated, but doesn't put wifi on
wifi off: page not updated, doesn't put data off
brightness auto when discharging: page updated but do nothing on brightness
brightness manual when charging: not updated and do nothing on brightness
With Samsung S4, Android 6.0.1, LineageOS 13.0
bluetooth: everything works fine
ring: almost ok but the option silent activate "only priority rings", not real silent mode.
wifi: page updated, but doesn't activate nor desactivate wifi
hotspot off: page updated but doesn't desactivate hotspot
hotspot on: page not updated and doesn't activate hotspot
data on: page updated, but doesn't put data on
data off: page not updated, doesn't put data off
auto rotation on or off: crash Easer
brightness auto when discharging: page updated but do nothing on brightness
brightness manual when charging: page not updated and do nothing on brightness
Alright, I hope that this tests will be helpful for this already promising app! ;-)
Android version: 7.1
Device: Nexus 5x
Easer version: 0.3.3 (from f-droid)
I have created a super simple way to reproduce this behavior:
Add a profile that enabled bluetooth (and nothing else)
Add an event that triggers on "Battery Status" -> Is Charging
Plug in device to power so that it is charging.
Expected behavior: Easer enables bluetooth
Actual behavior: Nothing happens. If I load Easer and hit the 'refresh' floating button, then it triggers and enables bluetooth. I have tried the following and the behavior does not change:
None of those actions resolve this issue.
I have tried monitoring logcat to see if anything useful is printed, but logcat is super noisy when this chain of events if happening. If there's a specific tag/filter I can apply to logcat to show only messages from Easer, then please let me know what that is so I can (hopefully) collect useful information for you!
This may be an unrelated issue, but if I leave the device plugged in/charging, and disable bluetooth and hit the 'refresh' button in Easer again, then Easer will re-enable bluetooth. This seems to happen every single time I hit refresh, even though the 'charging' state never changes (i.e. it is always charging)
This is a feature request to add logging functionality to the app to log events & debug info to aid with debugging. Ideally the log should be accessible in-app, and at the very least is should be written to disk or have an option to output to disk so that it can be included in bug reports.
Right now, when issues are encountered, it is very difficult to determine if 1) the user didn't set something up correctly, or 2) if it's actually a bug in Easer.
Allow easer to trigger an event when the phone gets/stops getting used. Maybe the simples idea would be to check for a locked screen.
E.g. disable WIFI and mobile data completely, as long as I am not using the phone.
The way that 'events' are implemented now seems to result in an event triggering quite regularly even if there were no change in the state that the event is 'monitoring'. Let me explain with an example:
I create an event that runs some profile based on 'battery status: is NOT charging'. The profile that runs turns off bluetooth. Now, if my device is not charging and I manually turn on bluetooth, easer will turn it off after some amount of time. Instead, the event should only run once (e.g. power cord disconnected and no longer charging) and not execute continuously while 'not charging'.
This would allow users to temporarily override Easer behavior without having to outright disable/stop Easer (which means Easer is now unavailable to process other, new events that might happen).
Another example is a profile that enables 'vibrate' ringer mode when connected to a specific wifi network (the event). I may want to enable a different ringer mode on this network (e.g. 'do not disturb') at one point, but Easer will revert my manual config change to 'vibrate mode'.
Ideally, an event would happen once (e.g. 'device is now connected to wifi network X' or 'charging cable has been unplugged and now device is not charging), and the associated profile with the event would be run once. Users could then temporarily override it if necessary.
Please let me know if you need any more clarification about what I am asking for. I have a long history of using IFTTT apps on Android (llama, tasker, automagic), and what I am describing has been the way that all of the ones I have used have all behaved :)
This request is to add a new event for when Bluetooth is connected to a specific device. This would allow, for example, starting music when the phone connects to Bluetooth speakers.
Actually there are many useful intents around and that would be great to have ability to "run" them
In the profile edit page, what does "Action", "Category", "Type", "Data" mean?
How it can be useful for the user?
I would like to make my mobile phone at 9pm quiet. Can you add such a setting for profiles?
Building the latest releases errors with following information:
:app:processReleaseResourceswarning: string 'myGithub' has no default translation.
warning: string 'myWebsite' has no default translation.
:app:generateReleaseSources
:app:incrementalReleaseJavaCompilationSafeguard
:app:javaPreCompileRelease
:app:compileReleaseJavaWithJavac
:app:compileReleaseJavaWithJavac - is not incremental (e.g. outputs have changed, no previous execution, etc.).
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
:app:compileReleaseNdk UP-TO-DATE
:app:compileReleaseSources
:app:lintVitalRelease/home/vagrant/build/ryey.easer/app/src/main/res/values/strings.xml:4: Error: "title_activity_main" is not translated in "zh" (Chinese) [MissingTranslation]
<string name="title_activity_main">MainActivity</string>
~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/vagrant/build/ryey.easer/app/src/main/res/values/strings.xml:8: Error: "title_application" is not translated in "zh" (Chinese) [MissingTranslation]
<string name="title_application">App</string>
~~~~~~~~~~~~~~~~~~~~~~~~
/home/vagrant/build/ryey.easer/app/src/main/res/values/strings.xml:23: Error: "null_content" is not translated in "zh" (Chinese) [MissingTranslation]
<string name="null_content">NULL CONTENT</string>
~~~~~~~~~~~~~~~~~~~
/home/vagrant/build/ryey.easer/app/src/main/res/values/strings.xml:25: Error: "navigation_drawer_open" is not translated in "zh" (Chinese) [MissingTranslation]
<string name="navigation_drawer_open">Open navigation drawer</string>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/vagrant/build/ryey.easer/app/src/main/res/values/strings.xml:26: Error: "navigation_drawer_close" is not translated in "zh" (Chinese) [MissingTranslation]
<string name="navigation_drawer_close">Close navigation drawer</string>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/vagrant/build/ryey.easer/app/src/main/res/values/strings.xml:45: Error: "liscence_stringa" is not translated in "zh" (Chinese) [MissingTranslation]
<string name="liscence_stringa">This program is free software: you can redistribute it and/or modify
~~~~~~~~~~~~~~~~~~~~~~~
/home/vagrant/build/ryey.easer/app/src/main/res/values/strings.xml:50: Error: "liscence_stringb" is not translated in "zh" (Chinese) [MissingTranslation]
<string name="liscence_stringb">This program is distributed in the hope that it will be useful,
~~~~~~~~~~~~~~~~~~~~~~~
/home/vagrant/build/ryey.easer/app/src/main/res/values/strings.xml:55: Error: "liscence_stringc" is not translated in "zh" (Chinese) [MissingTranslation]
<string name="liscence_stringc">You should have received a copy of the GNU General Public License
~~~~~~~~~~~~~~~~~~~~~~~
/home/vagrant/build/ryey.easer/app/src/main/res/values/strings.xml:63: Error: "operation_ringer_mode" is not translated in "ja" (Japanese) [MissingTranslation]
<string name="operation_ringer_mode">Ringer Mode</string>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Explanation for issues of type "MissingTranslation":
If an application has more than one locale, then all the strings declared
in one language should also be translated in all other languages.
If the string should not be translated, you can add the attribute
translatable="false" on the <string> element, or you can define all your
non-translatable strings in a resource file called donottranslate.xml. Or,
you can ignore the issue with a tools:ignore="MissingTranslation"
attribute.
By default this detector allows regions of a language to just provide a
subset of the strings and fall back to the standard language strings. You
can require all regions to provide a full translation by setting the
environment variable ANDROID_LINT_COMPLETE_REGIONS.
You can tell lint (and other tools) which language is the default language
in your res/values/ folder by specifying tools:locale="languageCode" for
the root <resources> element in your resource file. (The tools prefix
refers to the namespace declaration http://schemas.android.com/tools.)
/home/vagrant/build/ryey.easer/app/src/main/res/values-ja/strings.xml:57: Error: The resource string "myGithub" has been marked as translatable="false" [ExtraTranslation]
<string name="myGithub">https://github.com/renyuneyun/Easer</string>
~~~~~~~~~~~~~~~
/home/vagrant/build/ryey.easer/app/src/main/res/values-ja/strings.xml:59: Error: The resource string "myWebsite" has been marked as translatable="false" [ExtraTranslation]
<string name="myWebsite">http://renyuneyun.is-programmer.com/</string>
~~~~~~~~~~~~~~~~
Explanation for issues of type "ExtraTranslation":
If a string appears in a specific language translation file, but there is
no corresponding string in the default locale, then this string is probably
unused. (It's technically possible that your application is only intended
to run in a specific locale, but it's still a good idea to provide a
fallback.).
Note that these strings can lead to crashes if the string is looked up on
any locale not providing a translation, so it's important to clean them
up.
11 errors, 0 warnings
FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:lintVitalRelease'.
> Lint found fatal errors while assembling a release target.
I work around that locally by ignoring MissingTranslation and ExtraTranslation errors like echo -e "android { lintOptions { disable 'MissingTranslation'\n\ndisable 'ExtraTranslation' }}" >> app/build.gradle
, but this should in fact be handled in upstream.
In #32, it seems that the last version of Easer is v0.3.7.
The version on f-droid is 0.3.6.1.
There is a problem in the automatic process or it is not an automatic process ;-)
By the way, is there a "release notes" place for Easer? Very useful to see the evolution of this app.
it would be useful to have a profile for airplane mode for battery saving
It would be nice to have a FloatingActionButton in the events and in the profiles menu to add events and profiles. This would be much more convenient than having to click on the three dots and choosing "Add".
During the development and by reading the issues (feature requests), I find that there seem to be needs to listen for multiple instances of the each event (e.g. DateEventPlugin
) and/or make decisions by the dynamic of some events (e.g. #14); by using Easer myself, I find sometimes several Events will need to have the same data but with different types and/or different parents, e.g. tell whether I just entered home or left home by using CellLocationEventPlugin
.
Therefore, I'm thinking of migrating the current (rather simple) way of listening to events to a more powerful and (in principle) more battery-friendly style: monitor. However, this idea is still quite primitive, so I'd welcome people to talk about it.
If using the monitor style, the change to Easer will be like this:
EventPlugin
with dataService
(s) (which acts as monitor) keep(s) listening for different EventPlugin
s, and check(s) which Link should be changed to satisfied or unsatisfied, and load(s) corresponding ProfileThen the user logic will be:
The benefits of changing to this way include:
Listener
s).So, to achieve these, my current problems are:
EventType
? In Condition or in Link? (My current thought is to place in Condition and keep Link only contains satisfied/true and unsatisfied/false, but not yet quite sure.)Service
way of implementing monitor is the best option or not. Are ther any other options?Any suggestions or simply talks are welcome (whether they are from a programmer perspective or a normal user perspective) :)
Currently events and profiles are displayed in the order of their creation. It would be good to show them in a tree instead of a list to show their dependency and also to allow them to be manually reordered.
The tree could use an "&" sign to indicate, that the hierarchy has the meaning of logically and the events to make them fire. (Or did I get this wrong?)
OD can be found on F-Droid site
When I want to add a profile that changes the "Ringer Mode", a dialog opens which shows that I have granted access to " notifications". I press back, but no entry is added to the profile.
I'd like to be able to specify what days of the week my events apply on.
N.b: The Android stock Clock has a really good example of UI for repeat events.
Thanks for the app!
I would like to help by filling in the about page.
The idea would be to add links to your github, website and the license as well as a brief app description. I plan to use strings so it is translatable. My hope is also to make it look aesthetically pleasing.
I will work on it and do a pull request.
Please add the version of the app somewhere (in the About menu for example)
You could also give the website addtess of the code.
I use my old smartphone as a lte modem, so an option to toggle USB tethering would be nice.
This is a known problem that when defining an event listening to NFC tag, that won't work.
This is because Android only dispatches NFC events to Activity
but not to custom BroadcastReceiver
registered programmically from a Service.
This will be fixed in v0.5.2.
I would like to automatically set the preferred network type to "gsm only" when I am in a specific Wifi in order to reduce battery drainage due to low network signal.
Moreover I would like to change the preferred network type back to "GSM/WCDMA" as soon as I am NOT in that Wifi anymore, but I guess this would be possible when #5 is done.
Thank you for your work!
It would be great to have an event that triggers when NFC tags are scanned, for example to activate car mode when entering the car.
To reproduce this:
tap the + to add a new event or scenario (does not matter which) under the appropriate section in the app
swipe the swipe view control thing at the bottom left or right
After doing the above steps, the radio buttons and text fields presented when editing a new or existing event or scenario do not always react to finger taps. The buttons at the top (the 'X', 'save' and 'menu') do not work at all.
Strangely enough, I can still swipe the swipe view thing.
When this occurs, the phone's back button also does not function.
There was nothing interesting in the easer log, but here are the contents just in case (after I tapped around a bit in a new event)
1516846746524,2018.01.24 18:19:06.524,ASSERT,PRETTY_LOGGER,======Easer started======
1516846746856,2018.01.24 18:19:06.856,DEBUG,PRETTY_LOGGER,Permission for plugin <cell location> not satisfied
1516846749524,2018.01.24 18:19:09.524,VERBOSE,PRETTY_LOGGER,item: Scenario
1516846749539,2018.01.24 18:19:09.539,VERBOSE,PRETTY_LOGGER,All profiles: []
1516846749541,2018.01.24 18:19:09.541,DEBUG,PRETTY_LOGGER,reloadList()
1516846749542,2018.01.24 18:19:09.542,VERBOSE,PRETTY_LOGGER,All profiles: []
1516846750396,2018.01.24 18:19:10.396,DEBUG,PRETTY_LOGGER,[FillDataJob] tick on 1
1516846750445,2018.01.24 18:19:10.445,DEBUG,PRETTY_LOGGER,[FillDataJob] tick on 0
1516846750446,2018.01.24 18:19:10.446,DEBUG,PRETTY_LOGGER,[FillDataJob] tick on 0
1516846750448,2018.01.24 18:19:10.448,DEBUG,PRETTY_LOGGER,[FillDataJob] tick on 1
1516846750505,2018.01.24 18:19:10.505,DEBUG,PRETTY_LOGGER,[FillDataJob] tick on 0
1516846750506,2018.01.24 18:19:10.506,DEBUG,PRETTY_LOGGER,[FillDataJob] tick on 0
1516846750511,2018.01.24 18:19:10.511,DEBUG,PRETTY_LOGGER,[FillDataJob] tick on 1
1516846750527,2018.01.24 18:19:10.527,DEBUG,PRETTY_LOGGER,[FillDataJob] tick on 0
1516846750528,2018.01.24 18:19:10.528,DEBUG,PRETTY_LOGGER,[FillDataJob] tick on 0
1516846754487,2018.01.24 18:19:14.487,DEBUG,PRETTY_LOGGER,[FillDataJob] tick on 1
1516846754499,2018.01.24 18:19:14.499,DEBUG,PRETTY_LOGGER,[FillDataJob] tick on 0
1516846754499,2018.01.24 18:19:14.499,DEBUG,PRETTY_LOGGER,[FillDataJob] tick on 0
1516846754501,2018.01.24 18:19:14.501,DEBUG,PRETTY_LOGGER,[FillDataJob] tick on 1
1516846755561,2018.01.24 18:19:15.561,DEBUG,PRETTY_LOGGER,[FillDataJob] tick on 1
1516846755682,2018.01.24 18:19:15.682,DEBUG,PRETTY_LOGGER,[FillDataJob] tick on 1
1516846755802,2018.01.24 18:19:15.802,DEBUG,PRETTY_LOGGER,[FillDataJob] tick on 1
1516846755919,2018.01.24 18:19:15.919,DEBUG,PRETTY_LOGGER,[FillDataJob] tick on 1
1516846755964,2018.01.24 18:19:15.964,DEBUG,PRETTY_LOGGER,[FillDataJob] tick on 1
1516846755975,2018.01.24 18:19:15.975,DEBUG,PRETTY_LOGGER,[FillDataJob] tick on 0
1516846755978,2018.01.24 18:19:15.978,DEBUG,PRETTY_LOGGER,[FillDataJob] tick on 0
1516846756045,2018.01.24 18:19:16.045,DEBUG,PRETTY_LOGGER,[FillDataJob] tick on 1
1516846756163,2018.01.24 18:19:16.163,DEBUG,PRETTY_LOGGER,[FillDataJob] tick on 1
1516846756273,2018.01.24 18:19:16.273,DEBUG,PRETTY_LOGGER,[FillDataJob] tick on 1
1516846756392,2018.01.24 18:19:16.392,DEBUG,PRETTY_LOGGER,[FillDataJob] tick on 1
1516846756506,2018.01.24 18:19:16.506,DEBUG,PRETTY_LOGGER,[FillDataJob] tick on 1
I'm planning to change Event
s to real events (i.e. from some states to some states) so the expression is more natural and also acts as a first step towards #19 (whichever Easer will eventually embrace that style or not).
However I'm stuck on several questions:
Any suggestions or discussions are welcome.
Since the media play/pause is implemented, having a way to trigger on headphone plug/unplug would be great! Some media players don't have an option for automatically playing when headphones are inserted, or maybe I would want to set a different ringer mode when headphones are unplugged.. etc.
This request is to add the ability to add multiple actions to an event. For example I have this scenario where I have a profile to run an action (play music) when I connect to certain Bluetooth devices. In other IFTTT apps, I've had to add a pause event before sending the play intent for it to work reliably with my devices.
When adding an ESSID with a space in the name, like 'Super Cool Wifi', does not result in any actions being taken unless the ESSID is surrounded in double quotes. This is unintuitive, and I only discovered it after trying to figure out why events were not triggering when connected/not connected to specific networks.
I suggest implementing this such that the SSID can be entered with spaces, and any quotation is handled by the app.
FDroid build has been failing since 0.4.7. It's generally a good idea to follow up with recurrent build failures as there may be a soluble cause.
In this case, it seems android-27 is not getting downloaded automatically...or something of that nature.
The issue is fixed now. See https://gitlab.com/fdroid/fdroidserver/issues/445 and https://gitlab.com/fdroid/fdroiddata/commit/2fffc59b for further details.
I'm not able to re-open #25, but this is still an issue for me on Android 8. I see the 'start on boot' permission is listed for Easer in Android, but after a boot the app does not start. I have to manually launch it and select 'start' before it is active and responding to events.
First, I want to thank you for this project. Android needed an open source "Tasker".
A couple of suggestions:
Add a profile that allows to trigger an alarm. I dont know if this can be done through Intent or it needs its own setup.
Event that triggers from notifications. Ideally you can filter the notifications by program that emitted the notification and by content of the notification (f.e. the notification contains certain word)
Otherwise i have to delete the event and remake it if i want it
I have just installed versioin 0.3.5 and it crashes on every launch, never even got to see the main screen.
Running android 4.4.4
Version 0.4.7 F-Droid
I'd like to make a keepalive for a bluetooth device, therefore i need something to trigger after an event, that will countdown, then trigger another event, or a profile.
maybe there's a cmd line that would do it, then send a broadcast?
Hello, congratulation for your work.
The unintuitive behaviour can be reproduced as follows:
After these steps, the "Outline" interface is shown but the user would expect the application to still show the previously chosen interface.
Keep in mind that screen rotation is just one of the several configuration changes that can produce this behaviour, such as a phone call
Hi! This app is extremely useful (I've been hoping for a FLOSS IFTTT thing for years..). It looks like you only accept donations via bountysource.com, which is rather unfortunate!
Have you considered a freedom-respecting platform like librepay? quite a few FLOSS projects use this.
Also, for what it's worth, it looks like bountysource.com was just acquired by some buzzwordy blockchain company called Canya.io... I definitely don't want to sign up for bountysource now.
Hi,
I have created a profile with bluetooth on and maximum brightness. Then I created an event, selected the profilem checked the clock button and entered a time. When this time has come, nothing happend. Outline was running. Did I miss something?
I want to enable/disable data roaming, (or just data) when entering/leaving a country, I live near the frontier to 2 other countries, for one I get no data roaming charges at all but for the other I get very very expensive charges for data roaming, so I tried to use the Cell Location field putting there the country code, or the phone company name, the result is a crash when saving the event.
logcat-crash-Cell-Location.txt
Note that the above logcat is for when entering letters in the cell location field, if instead I enter digits and the entered number is 1234 the crash tells about Array Index Out of Bounds.
What is the accepted format for the Cell Location and where to find the right values?
I have just installed versioin 0.3.5 and it crashes on every launch, never even got to see the main screen.
Running android 4.4.4
Just an idea: It would be nice to let huginn play together with easer. Hugin is a server side IFTTT clone. It could provide additional triggers or receive events from the phone. Also the actions (aka profiles
in easer) could be coordinated.
Hi. I would really like to be able to toggle my WiFi every 10 minutes. The current way of doing that would to be to create a lot of events for every 10 minutes over the day.
Could you add an option to run an event every X minutes?
@renyuneyun I'm assuming you are the one responsible for 'maintaining' Easer on F-droid, do you know what's up? I know the F-droid system was having issues with building apps, which led to several days of no updates for any apps being posted, but that seems to be resolved now as other apps I have installed through F-droid are now receiving updates.
Every time I created more than 2 profiles and 2 events, the app crashes. If I clear the app data and the cache manually now, I can start it until I created the profiles and events. I only used WiFi and time in the events if this help you.
It would be nice, if the lockscreen could be disabled, after it got manually unlocked once while connected to a known and registered WiFi and reenabled when this WiFi is left.
To add some Security by Obscurity the MAC of an AP or sth. like that could be checked.
Instead of relying on the SSID, Easer could query a URL on the local network, only reachable from within that network, whenever the trusted WiFi is active and verify that a pre-shared key can be downloaded or something like that so that it's not that trivial to trick the phone into unlocking.
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.