{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
Dismiss Alarm Tasker Plugin
DATP is an Xposed Module and Tasker plugin for handling dismissed alarms
originating from the KitKat Desk Clock (Alarm Clock) on Nexus 5 devices. DATP
uses the Xposed findAndHookMethod to intercept the
AlarmStateManager::setDismissState and creates an intent to initiate the Tasker
plugin event mechanism. The Tasker plugin portion of DATP allows you to set an
alarm label of interest to isolate named alarm events; blank (empty string)
alarm labels will result in all dismissed alarms events for that configuration.
Installation Requirements
[Xposed Framework] v2.4+ (FREE)
Home URL - [Will Post Links When Authorized]
Xposed is a framework for modules that can change the behavior of the
system and apps without touching any APKs. That's great because it means
that modules can work for different versions and even ROMs without any
changes (as long as the original code was not changed too much). It's also
easy to undo. As all changes are done in the memory, you just need to
deactivate the module and reboot to get your original system back. There
are many other advantages, but here is just one more: Multiple modules can
do changes to the same part of the system or app. With modified APKs, you
to decide for one. No way to combine them, unless the author builds
multiple APKs with different combinations.
[Tasker] v4.3b5+ (Purchase Required)
Home URL - [Will Post Links When Authorized]
Beta URL - [Will Post Links When Authorized]
Tasker is an application for Android which performs tasks (sets of
actions) based on contexts (application, time, date, location, event,
gesture) in user-defined profiles or in clickable or timer home screen
widgets.
This simple concept profoundly extends your control of your Android device
and it's capabilities, without the need for 'root' or a special home
screen.
NOTE: As of 2014/03/05 the current version available on the Google Play
Store is v4.2u3. The beta edition is required due to the addition
of support for developer event plugins.
Action - net.dinglisch.android.tasker.ACTION_EDIT_EVENT
See [Will Post Links When Authorized] for the
changelog in the upcoming version of Tasker.
Version/Change Log
1.0 - 2014/03/05 - Initial release
Source
Source URL - [Will Post Links When Authorized]
Hint: It's on GitHub and my GitHub repository is the same as my XDA member name
Build Requirement
[Locale API]
Home URL - [Will Post Links When Authorized]
The Locale Developer Platform exposes APIs for plug-in conditions and
settings. Interaction with Locale occurs via Intents which are
documented in the following sections, along with the
[Will Post Links When Authorized]
Thanks
rovo89 - Xposed Framework
Tungstwenty - Xposed Framework
Pent - Tasker
Two Forty Four AM - Locale API
Also works on N4.
Would you consider to add actions to create, change and delete alarms by label?
cramu said:
Also works on N4.
Click to expand...
Click to collapse
Thanks for letting me know this works on Nexus 4 devices. Are you running KitKat v4.4+? The reason I am asking is I recently updated the title of this thread as I had a typo as to what version of android devices this is targeting. It's very well possible this would work on older android versions; however I targeted the build of the APK for SDK version 19 which is the KitKat release. When I get a moment I may go back into the AOSP repository and see if this will work on older Android Alarm Clock (Desk Clock) versions, but for now I am forcing KitKat requirement in the build.
cramu said:
Would you consider to add actions to create, change and delete alarms by label?
Click to expand...
Click to collapse
It is already possible to create alarms with alarm labels using Tasker; App->Set Alarm action. The Set Alarm App Action contains the following configuration elements:
Hours - Hour of day for alarm
Minutes - Minute of day for alarm
Message - Required on some devices [Not Nexus devices]
Confirm - If you want to confirm the creation of the alarm
If - Conditional expression that must be met to perform action
Label - Alarm label
The above would handle the creating of alarms with alarm labels. I use this App Action in Tasker to create an alarm Sunday - Thursday in a "Sleeping" task that is initiated from an NFC tag that I have on my nightstand. DATP was created so that I could perform my "End Sleeping" task when the alarm is dismissed and not snoozed as Tasker's event Alarm Done would get fired for any action of the Alarm Clock.
Could you elaborate on the enhancement request regarding "change and delete alarms by label?" I do not fully understand what you are looking for in this instance and once I have a better understanding I will look at adding this functionality.
Yes I'm running 4.4.2.
Just digging through my old profiles and you're right, I already managed to set an alarm with label through tasker.
The problem was, that tasker is not able to edit or delete alarms.
If you try to change an alarm that has been set before, Tasker will create a new alarm with the same label.
cramu said:
The problem was, that tasker is not able to edit or delete alarms.
If you try to change an alarm that has been set before, Tasker will create a new alarm with the same label.
Click to expand...
Click to collapse
OK I think I understand what you are looking as far as additional actions for Tasker. When I get a chance I will look into adding the ability to change and delete alarms via two new Tasker actions. I will make it so that if the alarm label is matched then update the alarm with a new time or delete the alarm. If it makes sense I may package them into one Tasker action with a check box for delete actions; we'll see though what looks better.
Not sure when I am going to get to adding this functionality, but it should be within the next week or so.
Thanks for investigation.
When i try to install the apk this is what appear : There was a problem while parsing the package...
I tried another xposed plugin and it work. Can someone upload it in another place?
vali_ics said:
When i try to install the apk this is what appear : There was a problem while parsing the package...
I tried another xposed plugin and it work. Can someone upload it in another place?
Click to expand...
Click to collapse
It only installs on KitKat. You get that message if you try to install on anything less than 4.4 KitKat.
Will be this available for 4.3 ?
Sent from my GT-N7100 using Tapatalk
vali_ics said:
Will be this available for 4.3 ?
Sent from my GT-N7100 using Tapatalk
Click to expand...
Click to collapse
I will investigate at some point and see if the functionality is available for older versions of Android in the com.google.android.deskclock package. I targeted and tested only KitKat and that is why I forced that restriction on the installation. Feel free to download the source from github and make any modifications. If you do make any changes and want them committed just send me a patch and I will more than likely incorporate in a future release.
Source can be obtained here: github.com/mikefero/DismissAlarmTaskerPlugin
NOTE: I noticed a build issue when I recently checked out a clean copy of the source and have already updated the project locally; will commit sometime soon with some other fixes. The issue is with the pathing for the locale-api which I may just rip out this requirement at some point as well in order to make the building simpler with less setup on any other developers end.
Should this work with CM11?
Sent from my Nexus 4 using XDA Premium 4 mobile app
mikefero said:
OK I think I understand what you are looking as far as additional actions for Tasker. When I get a chance I will look into adding the ability to change and delete alarms via two new Tasker actions. I will make it so that if the alarm label is matched then update the alarm with a new time or delete the alarm. If it makes sense I may package them into one Tasker action with a check box for delete actions; we'll see though what looks better.
Not sure when I am going to get to adding this functionality, but it should be within the next week or so.
Click to expand...
Click to collapse
Any progress with this feature?
I tried but don't work on Note 4...it's a very useful plugin of it'll work.
Doesn't work on Lollipop for me. Would be greatly appreciated if you could add support.
Logcats:
Alarm dismissed from alarm screen:
Code:
V/AlarmClock(21153): Setting dismissed state to instance 1
V/AlarmClock(21153): Clearing notifications for alarm instance: 1
V/AlarmClock(21153): Canceling instance 1 timers
I/AlarmClock(21153): Disabling parent alarm: 1
V/AlarmClock(21153): *** notifyChange() id: 1 url content://com.android.deskclock/alarms/1
V/AlarmClock(21153): AlarmService.onStartCommand() with intent: Intent { act=STOP_ALARM dat=content://com.android.deskclock/instances/1 cmp=com.android.deskclock/.alarms.AlarmService }
V/AlarmClock(21153): AlarmService.onDestroy() called
V/AlarmClock(21153): AlarmService.stop with instance: 1
V/AlarmClock(21153): AlarmKlaxon.stop()
V/AlarmClock/AlarmActivity(21153): Received broadcast: com.android.deskclock.ALARM_DONE
V/AlarmClock/AlarmActivity(21153): Ignored broadcast: com.android.deskclock.ALARM_DONE
Alarm snoozed:
Code:
V/AlarmClock(21153): Setting snoozed state to instance 1 for Tue 20:58
V/AlarmClock(21153): *** notifyChange() id: 1 url content://com.android.deskclock/instances/1
V/AlarmClock(21153): Displaying snoozed notification for alarm instance: 1
V/AlarmClock(21153): Scheduling state change 5 to instance 1 at Tue 20:58 (1425412680000)
V/AlarmClock(21153): AlarmService.onStartCommand() with intent: Intent { act=STOP_ALARM dat=content://com.android.deskclock/instances/1 cmp=com.android.deskclock/.alarms.AlarmService }
V/AlarmClock(21153): AlarmService.onDestroy() called
V/AlarmClock(21153): AlarmService.stop with instance: 1
V/AlarmClock(21153): AlarmKlaxon.stop()
V/AlarmClock/AlarmActivity(21153): Received broadcast: com.android.deskclock.ALARM_DONE
V/AlarmClock/AlarmActivity(21153): Ignored broadcast: com.android.deskclock.ALARM_DONE
Alarm dismissed from notification:
Code:
V/AlarmClock(21153): AlarmStateManager received intent Intent { act=change_state cat=[DISMISS_TAG] dat=content://com.android.deskclock/instances/1 flg=0x10000010 cmp=com.android.deskclock/.alarms.AlarmStateManager bnds=[97,208][756,280] (has extras) }
V/AlarmClock(21153): Setting dismissed state to instance 1
V/AlarmClock(21153): AlarmService.onStartCommand() with intent: Intent { act=STOP_ALARM dat=content://com.android.deskclock/instances/1 cmp=com.android.deskclock/.alarms.AlarmService }
V/AlarmClock(21153): AlarmService.onDestroy() called
V/AlarmClock(21153): There is no current alarm to stop
V/AlarmClock(21153): Clearing notifications for alarm instance: 1
V/AlarmClock(21153): Canceling instance 1 timers
W/AlarmManager( 5742): Clear alarm type=4,alarmSeconds=1425412680
I/AlarmClock(21153): Disabling parent alarm: 1
V/AlarmClock(21153): *** notifyChange() id: 1 url content://com.android.deskclock/alarms/1
XlAfbk said:
Doesn't work on Lollipop for me. Would be greatly appreciated if you could add support.
Click to expand...
Click to collapse
Thanks for the logs and the heads up.; I didn't even realize rovo89 updated Xposed to work with ART on Lollipop back in February. With that good news discovered and your test using the module I will dust off the code and look into adding support when I have some free time. Might be a few weeks so if you don't hear anything from me give me a ping.
mikefero said:
Thanks for the logs and the heads up.; I didn't even realize rovo89 updated Xposed to work with ART on Lollipop back in February. With that good news discovered and your test using the module I will dust off the code and look into adding support when I have some free time. Might be a few weeks so if you don't hear anything from me give me a ping.
Click to expand...
Click to collapse
The fix for Lollipop is actually quite trivial:
\fero\xposed\dismissalarm\DismissAlarm.java, line51: com.google.android.deskclock -> com.android.deskclock
I'm not sure whether Google-provided roms still have google in the package name, but Cyanogenmod/AOSP don't. Maybe just look for either to be on the safe side?
Attached is a .apk patched to work with CM12 until there's an official update. Apk is signed with my own keys so you'll have to uninstall the old one first.
@mikefero: If you have a problem with this apk / updated yours then please ping me and I'll remove it.
XlAfbk said:
If you have a problem with this apk / updated yours then please ping me and I'll remove it.
Click to expand...
Click to collapse
@XlAfbk Thanks for providing an updated APK; I have no problem with it. Would it be possible for you to provide a diff patch or create a fork and initiate a pull request so I can merge it in when I get my setup going?
mikefero said:
@XlAfbk Thanks for providing an updated APK; I have no problem with it. Would it be possible for you to provide a diff patch or create a fork and initiate a pull request so I can merge it in when I get my setup going?
Click to expand...
Click to collapse
I actually modded it in .smali as I was too lazy to set up the build environment properly.
Here's what I'm proposing as the change for the java code (quick and dirty):
Code:
--- DismissAlarm.java 2015-04-06 23:12:56.827140600 +0200
+++ DismissAlarm.java 2015-04-06 23:14:04.962882800 +0200
@@ -89,7 +89,7 @@
* Ensure that we are only handling customizations for the alarm/desk
* clock package
*/
- if (loadPackageParam.packageName.equals(ALARM_CLOCK_PACKAGE_NAME)) {
+ if (loadPackageParam.packageName.equals("com.google.android.deskclock") || loadPackageParam.packageName.equals("com.android.deskclock")) {
//Find the AlarmStateManager and AlarmInstance classes
final Class<?> alarmStateManager = XposedHelpers.findClass(ALARM_STATE_MANAGER_CLASS_NAME, loadPackageParam.classLoader);
final Class<?> alarmInstance = XposedHelpers.findClass(ALARM_INSTANCE_CLASS_NAME, loadPackageParam.classLoader);
mikefero said:
Might be a few weeks so if you don't hear anything from me give me a ping.
Click to expand...
Click to collapse
ping
Is this still working with CM 12.1? It seems not to be integrated in Tasker?
Related
Although I do read every post here in this thread, it would make my life easier if people submitted bugs and requested features on CodePlex and saved this thread more for general discussion and peer-to-peer help. Thank you!
Submit bugs on CodePlex: http://www.codeplex.com/ReRemind/WorkItem/List.aspx
Request features on CodePlex: http://www.codeplex.com/ReRemind/Thread/List.aspx
Overview
ReRemind is a simple Windows Mobile service that will play a sound at a specified interval when an event is waiting your attention. This is particularly useful for devices that lack standard amber/green notification LEDs (like the Diamond / Touch Pro), but can be used with any WM device if you want audible notifications.
CodePlex
ReRemind development is hosted at Microsoft CodePlex! http://www.codeplex.com/ReRemind
Tip Jar
Like this app? Want more like it or quicker updates? Tip a buck (or Euro or Pound or whatever) or two to help the author out! Click here to make a safe donation via PayPal.
Current features
- ReRemind will notify you when reminders (calendar) are active, there are missed calls, new voicemails, unread SMS, unread MMS, and/or unread email.
- You can be reminded at any interval you specify, in minutes.
- Rereminders can be turned off during a time span (such as overnight).
- Play any WAV file! But sound must be less than about 10 seconds long, or it may be cut off as the device moves from UNATTENDED power state back to SUSPENDED power state.
- Optionally vibrate device in addition to playing a sound.
- Specify that ReRemind stops reminding after a certain number of rereminders.
- AppToDate support
- Very power efficient. All checks are done using the State and Notification Broker and Named Events in the notification queue. Playback is done (by default) in unattended mode. The service does not periodically "ping" because it waits for events, so it's completely idle as long as the state of the monitored events are not changing.
- Cleans up after itself! Don't you hate it when apps use the notificaton queue but leave stale notification events lying around requiring you to run something like MemMaid to clean it up? ReRemind always checks to see if a notification is waiting when it is signalled to exit. If a notification is waiting, it clears it out.
- TRUE SERVICE! Does NOT use one of the precious few 32 process slots on Windows Mobile. The app you see in the StartUp folder is simply to turn on the service. This is due to unsigned services being unable to autostart.
- Can optionally work around the bug in Windows Phone 6.5 noted here: http://forum.xda-developers.com/showthread.php?t=469186
** If you edit ReRemind's settings in the registry directly, you must restart the service. This is most easily accomplished using the StopReRemindSvc and StartReRemindSvc EXEs in \Program Files\ReRemind
Planned features
- A different WAV for each event
- Maybe custom events by monitoring arbitrary registry locations for changes
Known Issues
- None right now...
History - More details at CodePlex
V7 - Added notification: unread MMS. Config app supports wav and vibration preview. Works around bug in WM6.5 where all-day reminders will not make a sound or vibrate. There are limitations, however: sound file specified in Sounds and Notifications for Reminders MUST be a WAV; AutoSnooze is not supported.
V6.1 - Fixed a bug where VGA devices no longer could see the "select a folder" button.
V6 - Added support for standard devices to use the config app (untested); Fixed a bug where some pre-6.1 devices detected as 6.5 devices, leading to alarm notification problems.
V5 - Startup bug fix, WM 6.5 bug fixes, vibrate support, stop reminding after time (optional), AppToDate support.
V4 - BETA - Fixed SMS/Email notification bugs. Deletes stale notification queue entries on startup/exit for if device crashes. Added 10 second delay to start service on boot.
V3 - BETA - Fixed (very) minor resource leak. Silent service start options.
V2 - ALPHA - Added Unread SMS and Email notifications. Added config app. Added messageboxes for starting/stopping service.
V1 - ALPHA - Initial release
Detailed changelog is available on CodePlex in the notes of each version
Download
CAB Installer: http://www.codeplex.com/ReRemind/Release/ProjectReleases.aspx
Source Code: http://www.codeplex.com/ReRemind/SourceControl/ListDownloadableCommits.aspx
Installation
1. Install the CAB
2. That's it! Seriously!
Requirements
- Windows Mobile 6.0 and newer.
- Standard devices (no touch screen) can use the service but the config app will not work. You will need to edit the registry and restart your device to change settings.
Registry Settings
Settings are stored in HKCU\Software\Avian Waves\ReRemind
NotifyInterval (DWORD) - Minutes between rereminders
UseInactiveTime (DWORD) - Enable the 'do not notify between these hours' setting.
HourInactiveStart (DWORD) - Hour (in 24hr format) for the inactive (do not notify) start time (inclusive).
HourInactiveEnd (DWORD) - Hour (in 24hr format) for the inactive (do not notify) end time (exclusive).
NotifyReminder (DWORD) - Notify with undismissed reminders
NotifyMissedCall (DWORD) - Notify with unread missed calls
NotifyVoiceMail (DWORD) - Notify with unread voicemails
NotifySMS (DWORD) - Notify with unread SMS messages
NotifyMMS (DWORD) - Notify with unread MMS messages
NotifyEmail (DWORD) - Notify with unread emails
NotifyWhileOn (DWORD) - Play notification while device is powered on (screen is on)
PowerOnBeforePlay (DWORD) - Wake device fully before playing sound
StopNotifyAfter (DWORD) - Stop rereminding after this many rereminds (0 = infinite)
Vibrate (DWORD) - Vibrate while playing notification
VibrateLEDIndex (DWORD) - LED index of the vibrator (usually 1)
SoundFile (STRING) - full path to the sound file to play (must be WAV)
AllDayWorkaroundHack (DWORD) - Enable the All Day reminder workaround (see top post)
ReRemind V1 Config Tool
Requirements : .NetCF 2.0!
Overview : a little proggy i coded just now to config ReRemind V1
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
When the app loads, it lists the defaults value in the boxes, so just change it according to your needs
Download Link :
see attached
Ps. excuse the image, its my irfan's view setting, i forgot to change it, and im not in the mood to run the Emulator again, as my device is currently busted ;/
thanks ather for the config tool
@thx, does this work for sms too?
@ather90
i think your conf prog will mess up few keys from dword to string..
or i'm doing something wrong...
hmm, my app just reads the default values, and lets u replace them, dont know about them messing them up
as i said, i only tested in an emulator, not a real device ;/
Well, initially all the keys are dwords except the SoundFile witch is string. After using your conf and press set all keys except HourInactivityStart and NotifyInterval are changed to strings.
If it could also remind me at unread SMS/MMS messages this little tool would be perfect.
Keep on the good work.
fRED
BlockbusterF said:
If it could also remind me at unread SMS/MMS messages this little tool would be perfect.
Keep on the good work.
fRED
Click to expand...
Click to collapse
+1
And of course e-mail...
Neet little app...
Prefer it over missedcallreminders
hmm weird, here is the full code
Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Microsoft.Win32;
namespace ReRemind_V1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
//telling the program to load the current reg entry on startup
RegistryKey rk = Registry.CurrentUser.OpenSubKey(@"\Software\Avian Waves\ReRemind");
textBox1.Text = rk.GetValue("NotifyInterval").ToString();
textBox2.Text = rk.GetValue("UseInactiveTime").ToString();
textBox3.Text = rk.GetValue("HourInactiveStart").ToString();
textBox4.Text = rk.GetValue("HourInactiveEnd").ToString();
textBox5.Text = rk.GetValue("NotifyReminder").ToString();
textBox6.Text = rk.GetValue("NotifyMissedCall").ToString();
textBox7.Text = rk.GetValue("NotifyVoiceMail").ToString();
textBox8.Text = rk.GetValue("NotifyWhileOn").ToString();
textBox9.Text = rk.GetValue("SoundFile").ToString();
textBox10.Text = rk.GetValue("PowerOnBeforePlay").ToString();
}
private void menuItem2_Click(object sender, EventArgs e)
{
RegistryKey rk = Registry.CurrentUser.OpenSubKey(@"\Software\Avian Waves\ReRemind", true);
rk.SetValue("NotifyInterval", textBox1.Text);
rk.SetValue("UseInactiveTime", textBox2.Text);
rk.SetValue("HourInactiveStart", textBox3.Text);
rk.SetValue("HourInactiveEnd", textBox4.Text);
rk.SetValue("NotifyReminder", textBox5.Text);
rk.SetValue("NotifyMissedCall", textBox6.Text);
rk.SetValue("NotifyVoiceMail", textBox7.Text);
rk.SetValue("NotifyWhileOn", textBox8.Text);
rk.SetValue("SoundFile", textBox9.Text);
rk.SetValue("PowerOnBeforePlay", textBox10.Text);
}
private void menuItem1_Click(object sender, EventArgs e)
{
MessageBox.Show("ReRemind V1 by thx1200\nConfig Tool by Ather");
}
}
}
You need to SetValue as a DWORD, which I think in .Net will be rk.SetValue("Name", Integer.Parse(textbox1.Text))
I will have an official configurator soon. But thanks so much for whipping this up in the interim.
p50kombi said:
+1
And of course e-mail...
Neet little app...
Prefer it over missedcallreminders
Click to expand...
Click to collapse
I will add those! keep the suggestions coming...
you'r welcome, i'll see if i can play more with it
What service
thx1200 said:
I will add those! keep the suggestions coming...
Click to expand...
Click to collapse
Good going man, can't wait...
Keep up the good work
V2 posted
Test it out!
Added...
- Config app! (auto restarts service so changes take effect immediately)
- SMS/email notifications
- Message boxes with start/stop service apps, so you know if it worked or failed
EDIT: The icon I used I created in IcoFX in like 30 seconds. lol. If somebody can make me a proper application icon, I would be very grateful. :-D
V3 posted
Enjoy version 3 of ReRemind!
V4 posted
Found a few more bugs and fixed an outstanding issue on codeplex. Enjoy!
I'm testing ReRemind on Diamond - so far so good. I was looking for tool like this for long time... It does one task but does it good.
Thank you very much.
such a great app and no feedbacks yet?? °_° very weird...
btw, this proggy is really attractive, especially the power-saving feature which avoid battery-consuming ping on notifications queue... wow great!!
there's only one thing left that is preventing me from trying this app, nad elect it as my favourite one: why can't I set a different sound for each different event?? should be easy (Ithink) to implement....?
apart from this point, wow you're great!!! if it's really so unique thanks to the ping and battery-saving option, you're the man!! I'll worship you forever!!
cheers
Automatically expand text sequences in any text box in (almost) all apps!
Featured on XDA-portal. Thanks to @Will Verduzco (willverduzco) for the article!
This is an Android Xposed module to perform Macro / Text expansion. The module allows short key sequences to be transformed into other, usually more time-consuming, sequences of keystrokes. This means that frequently used or repetitive sequences of keystrokes can easily be automated. Since it uses Xposed and operates at the text widget level, it works with all factory and third party keyboards, and can be added to user dictionaries for even faster use.
After creating my fun I am Groot module, I thought I'd do something more practical with run-time text processing using Xposed.
Screenshots
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
Requirements
Android 4.0+ with root
Xposed Framework installed
Instructions
Download apk from Xposed Module Repository
Install module as a normal apk
Open Xposed Installer and click checkbox to enable
Reboot device to activate module
Download
v1.2 - Xposed Module Repository
Tips & Hints
It's best to set the macro phrase to a term that is not normally used in conversation, since all instances of this phrase will be replaced.
For example, using the macro 'address' to denote your home address would be a poor choice, since this would change a statement like 'enter your email address' into 'enter your email '123 xyz street'
A better choice is to add a symbol and set the alias to something like '@addr' to prevent inadvertent text expansion.
Changes to macro list require reboot to activate.
AutoHotKey import file notes
Import macro lines that match ::macro::expansion
Does not yet handle AutoHotKey wildcards/regular expressions
Lines containing non-ASCII characters are also ignored
Enable import/restore debug logging to troubleshoot missed macro issues
Any AutoHotKey text file should be importable without modification.
If the module is not able to handle the macro (yet) it will simply ignore the line.
The module does not have an upper limit on the number of macros that can be entered/imported, but performance will degrade on significantly large lists, especially on older devices.
Known Issues
FC issue with MultiAutoCompleteTextViews; temporarily disabled
Not yet working in web browsers & WebViews; work in progress
Macros should be functional with these browsers: Atlas, Dolphin, Now Browser Extended
Limited/no function with these browsers: AOSP, Chrome, Chrome Beta, Now Browser Pro
Support for these in progress
Disclaimer
I try my best to thoroughly test everything I publish, but given the staggering number of devices, ROMs, and apps I cannot make any guarantee that something will go wrong. Use at your own risk!
Source code
This module is open source software, available on my Github page, licensed under the Apache 2.0 license
If you are a developer and want to contribute, fork the repo and submit a pull request.
Credits
@rovo89 and @Tungstwenty for Xposed framework
@GermainZ for code example from @Hodor module
The entire XDA community for being awesome.
Problems/feedback
If you find this useful, click thanks!
If something is broken, let me know and I'll try my best to fix it!
If a feature is missing, suggest it and I'll try to add it!
Changelog
Version 1.2 (current)
Backup/export & restore/import macro list in AutoHotKey & JSON formats
Support for MultiAutoCompleteTextView boxes
Option to disable macro expansion in password boxes
Option to make macro expansion case insensitive
In-app about/support/donation links
Version 1.1
Removed the regular expression restriction from macros
Update minimum SDK for ICS support (API Level: 14 and up)
Version 1.0
Initial release
Mmmm good work, but I will pass, I prefer to fight with my lazyness instead to save sensible data in the phone or third app with root access. Anyways good work dude!.
I was sooo happy when I saw this module tonight, but soon realized that it's not really usable for me. Just because those chars that are forbidden because reg exp.
I use similar app on OS X and BlackBerry has it natively. I replace [email protected] with my email and a number of Skype smiles (cch becomes (chuckle)), but because of those limitations, none of the above examples cannot be actually used.
Could you please explain more in detail what exactly seems to be the problem with those banned chars? Could there be an option to switch them if user needs them?
-V-O-Y-A-G-E-R- said:
I was sooo happy when I saw this module tonight, but soon realized that it's not really usable for me. Just because those chars that are forbidden because reg exp.
Click to expand...
Click to collapse
Thanks for the feedback. I've been able to correct the issue and have removed the regular expression restriction. The updated module has been pushed to the Xposed Module Repository. Let me know if you have any more issues!
I was looking for a way to get the look of disapproval --> ಠ_ಠ into a keyboard emoticon list but now with this mod i can insert it via a macro shortcut.. probably not really the purpose of the module but until I can think of something more productive to add in there it's just for that haha :highfive:
good work!
Nice module and thamxxx for sharing but whatsapp+ is crashing. ☺
Nice, Now I can make shortcut on Swiftkey... but it requires reboot everytime I add new shortcut? Would be nice if we can add on the fly ...
is0l4ted said:
Nice module and thamxxx for sharing but whatsapp+ is crashing. ☺
Click to expand...
Click to collapse
Can you PM me your Xposed logs so I can get this issue fixed?
undaclazz said:
Nice, Now I can make shortcut on Swiftkey... but it requires reboot everytime I add new shortcut? Would be nice if we can add on the fly ...
Click to expand...
Click to collapse
Thanks for the feedback. I'll see if I can remove the reboot requirement!
mikmitch said:
Thanks for the feedback. I've been able to correct the issue and have removed the regular expression restriction.
...
Let me know if you have any more issues!
Click to expand...
Click to collapse
Thanks! Now . and () work, but $ is making problems. :$ gets expanded into : only $ sign is gone.
Fantastic module!
I can foresee this have having some problems with LastPass fill for long, random passwords. Let's say I had @ly as a macro for "love you", those three characters could occur together in a password and when filled, you'll automatically get "love you" in the password field!
oh, want too, want too! But I have only ICS, and the package seems not to be compiled to support it
Could you pretty please make it compatible with ICS, Puuhleeeze
Thanks!
-V-O-Y-A-G-E-R- said:
Thanks! Now . and () work, but $ is making problems. :$ gets expanded into : only $ sign is gone.
Click to expand...
Click to collapse
This is probably due to the significance of '$' in regular expressions (and why the first release of the module didn't permit any regex chars at all!).
Try adding a backslash in front of the dollar sign \$ to make sure it is interpreted as literal text (in the macro editing screen, not when you are actually using the macro). I'll look into a more permanent fix as well.
MattKneale said:
Fantastic module!
I can foresee this have having some problems with LastPass fill for long, random passwords. Let's say I had @ly as a macro for "love you", those three characters could occur together in a password and when filled, you'll automatically get "love you" in the password field!
Click to expand...
Click to collapse
Good point. I'm a LastPass user too and definitely have some long random passwords with special characters that might inadvertently get matched to a macro! I'll see if I can find a way to exclude text that gets filled by specific apps.
chw9999 said:
oh, want too, want too! But I have only ICS, and the package seems not to be compiled to support it
Could you pretty please make it compatible with ICS, Puuhleeeze
Thanks!
Click to expand...
Click to collapse
Re-compiled to support ICS (API Level: 14 and up). Updated version now available now available at the Xposed Module Repository.
mikmitch said:
Try adding a backslash in front of the dollar sign \$ to make sure it is interpreted as literal text (in the macro editing screen, not when you are actually using the macro). I'll look into a more permanent fix as well.
Click to expand...
Click to collapse
It works with $ defined as \$, thank you
mikmitch said:
Good point. I'm a LastPass user too and definitely have some long random passwords with special characters that might inadvertently get matched to a macro! I'll see if I can find a way to exclude text that gets filled by specific apps.
Click to expand...
Click to collapse
Thanks, that'd be great. Might be easier to just implement an 'ignore password fields' option.
I will test thkx
mikmitch said:
Re-compiled to support ICS (API Level: 14 and up). Updated version now available now available at the Xposed Module Repository.
Click to expand...
Click to collapse
big thanks! Works flawlessly on ICS now [emoji1]
Hi guys,
Rumor on the street has it that there is no API for making watchfaces.. Well, that's just plain wrong. I've been working with Daniel "Master of Time" Ortiz, aka @kuronosan. We've worked out a ton of the details in order to make watchface APKs easy! It's as simple as making some png resources and then putting code behind them. You just need a framework and that framework is right here! We are going to squash that "no API" rumor here and now. We've not only got the APis here, we've added nice things like transitions which you won't find on many of the other watches!
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
What's it all about?
This package consists of 2 major parts, the Mobile App, and the Wear App.
mobile app
The mobile app's job is to deploy the Wear app and provide an icon/view which gets installed in the app drawer, allowing the user easy access to uninstallation. After the Wear "MicroApp" App is deployed, this application serves little function. Its a little funny as the MicroApp is much larger than the primary app due to resources
Wear App
The Wear App has two entirely different activities built into it; Analog and Digital. Wear applications are basically live wallpapers. They use the Background Provider permission and they have a few additional properties such as the need to react to the DisplayManager's Screen On, Screen Dim and Screen Off commands. Aside from this, they are simply eye-candy.
Digital
The Digital section of this watch was written entirely from scratch by yours truely. I found that the animations involved in watchfaces can bloat an activity significantly. So, I use Java Inheritance to extend the classes in order to logically separate things in this way
DigitalWatchfaceActivity - Handles setting up the views and intent receivers for date/time/battery and updating the time
DigitalWatchfaceActions - Handles PowerManager commands and aesthetic elements such as animations/transitions.
DigitalWatchfaceApp - Used to launch the activity, reserved for future use.
Analog
Watchface-Gears has provided an awesome starter for Analog Watches. Rather than reinvent the wheel, we've used their base. I had to rework a considerable chunk to add in fading transitions and refactoring for analog/digital separation. When all was said and done, between mine and Daniel Ortiz's work, the only thing that's original is Watchface-Gears library. We kept Watchface-Gears in tact because it is an awesome library. It also set the license used throughout the project. (Apache)
How do I make my own?
Here's how you get started. Being that this is mostly artwork, I can't tell you "how" to do it... But, I can do what to do.
Download the source.
Load it into Android Studio
Modify the package name suffix (watchface/gradle.properties: currentApplicationIdSuffix=MyCustomWatchName), and make it unique string, so when you generate a signed APK it doesn't collide with mine or others. Better yet, you should rename the entire package but that is a detailed operation.
Modify both the Mobile and Wear (watchface/wear/src/main/AndroidManifest.xml & watchface/mobile/src/main/AndroidManifest.xml) files to rename the watch faces and app names for the Wear Picker.
Build the package now to verify it works after you've changed properties.
If you want to customize the Analog watchface app, all you need to do is modify the PNGs in watchface/wear/src/main/res.
If you want to customize the Digital watchface app, you will rework both the wear/src/main/res/layout/digital_watch_layout_awake.xml and the wear/src/main/res/layout/digital_watch_layout_dim.xml. These are standard Android XML layouts.
If you don't want to use the Analog or Digital, remove the AnalogWatchfaceActivity's or DigitalWatchfaceActivity's <activty> entry from watchface/wear/src/main/AndroidManifest.xml
When you're done with the layouts, update the PNG files in watchface/wear/src/main/res/drawable with screenshots for the Background Provider picker (shown near the bottom).
Get creative!
CASUALWear Images
see attached images
Transitioning through Background Providers:
See attachments
Downloads and Source
You can get source here: https://github.com/adamoutler/watchface
Download it free here: https://play.google.com/store/apps/details?id=com.casual_dev.CASUALWatch.release
Get the donate version and give me an excuse for my wife here: https://play.google.com/store/apps/details?id=com.casual_dev.CASUALWatch
Wow!!!!
You guys are awesome... Great to see you two were able to pull this project that is otherwise much needed. Thanks Dan and Adam. =D
excellent. thankyou.
Sent from my D6603 using Tapatalk
Nice and thanks!
BTW any news about the new Android Wear 2 that was due to be released on Nov 3?
great
:good: If Adam wouldnt do it then who will try it . great work Adam
AdamOutler said:
Hi guys,
Rumor on the street has it that there is no API for making watchfaces.. Well, that's just plain wrong. I've been working with Daniel "Master of Time" Ortiz, aka @kuronosan. We've worked out a ton of the details in order to make watchface APKs easy! It's as simple as making some png resources and then putting code behind them. You just need a framework and that framework is right here! We are going to squash that "no API" rumor here and now. We've not only got the APis here, we've added nice things like transitions which you won't find on many of the other watches!
What's it all about?
This package consists of 2 major parts, the Mobile App, and the Wear App.
mobile app
The mobile app's job is to deploy the Wear app and provide an icon/view which gets installed in the app drawer, allowing the user easy access to uninstallation. After the Wear "MicroApp" App is deployed, this application serves little function. Its a little funny as the MicroApp is much larger than the primary app due to resources
Wear App
The Wear App has two entirely different activities built into it; Analog and Digital. Wear applications are basically live wallpapers. They use the Background Provider permission and they have a few additional properties such as the need to react to the DisplayManager's Screen On, Screen Dim and Screen Off commands. Aside from this, they are simply eye-candy.
Digital
The Digital section of this watch was written entirely from scratch by yours truely. I found that the animations involved in watchfaces can bloat an activity significantly. So, I use Java Inheritance to extend the classes in order to logically separate things in this way
DigitalWatchfaceActivity - Handles setting up the views and intent receivers for date/time/battery and updating the time
DigitalWatchfaceActions - Handles PowerManager commands and aesthetic elements such as animations/transitions.
DigitalWatchfaceApp - Used to launch the activity, reserved for future use.
Analog
Watchface-Gears has provided an awesome starter for Analog Watches. Rather than reinvent the wheel, we've used their base. I had to rework a considerable chunk to add in fading transitions and refactoring for analog/digital separation. When all was said and done, between mine and Daniel Ortiz's work, the only thing that's original is Watchface-Gears library. We kept Watchface-Gears in tact because it is an awesome library. It also set the license used throughout the project. (Apache)
How do I make my own?
Here's how you get started. Being that this is mostly artwork, I can't tell you "how" to do it... But, I can do what I can do.
Download the source.
Load it into Android Studio
Modify the package name suffix (watchface/gradle.properties: currentApplicationIdSuffix=MyCustomWatchName), and make it unique string, so when you generate a signed APK it doesn't collide with mine or others. Better yet, you should rename the entire package but that is a detailed operation.
Modify both the Mobile and Wear (watchface/wear/src/main/AndroidManifest.xml & watchface/mobile/src/main/AndroidManifest.xml) files to rename the watch faces and app names for the Wear Picker.
Build the package now to verify it works after you've changed properties.
If you want to customize the Analog watchface app, all you need to do is modify the PNGs in watchface/wear/src/main/res.
If you want to customize the Digital watchface app, you will rework both the wear/src/main/res/layout/digital_watch_layout_awake.xml and the wear/src/main/res/layout/digital_watch_layout_dim.xml. These are standard Android XML layouts.
If you don't want to use the Analog or Digital, remove the AnalogWatchfaceActivity's or DigitalWatchfaceActivity's <activty> entry from watchface/wear/src/main/AndroidManifest.xml
When you're done with the layouts, update the PNG files in watchface/wear/src/main/res/drawable with screenshots for the Background Provider picker (shown near the bottom).
Get creative!
CASUALWear Images
mobile app: http://forum.xda-developers.com/attachment.php?attachmentid=2996683&stc=1&d=1414986371
Digital:
Analog
Transitioning through Background Providers:
See attachments
Downloads and Source
You can get source here: https://github.com/adamoutler/watchface
Download it free here: https://play.google.com/store/apps/details?id=com.casual_dev.CASUALWatch.release
Get the donate version and give me an excuse for my wife here: https://play.google.com/store/apps/details?id=com.casual_dev.CASUALWatch
Click to expand...
Click to collapse
purchased (so the wife is more likely to allow future indulgences)
Does this solve the issue of notifications not being sizeable to a less intrusive size like the default faces?
Thanks Adam
Hi Adam,
I managed to get watchface build and run on a previous version of android studio. Now that I have updated it I'm unable to build it anymore. Damn! I've changed some gradle properties according to:
http://tools.android.com/tech-docs/new-build-system
Renamed a few properties to make things more consistent.
BuildType.runProguard -> minifyEnabled
BuildType.zipAlign -> zipAlignEnabled
BuildType.jniDebugBuild -> jniDebuggable
BuildType.renderscriptDebug -> renderscriptDebuggable
ProductFlavor.renderscriptSupportMode -> renderscriptSupportModeEnabled
ProductFlavor.renderscriptNdkMode -> renderscriptNdkModeEnabled
Click to expand...
Click to collapse
But I'm getting stranded on:
Code:
Error:(27, 0) Could not find property 'outputFile' on com.and[email protected]a49d4b5.
I know I'm not the greatest dev in the world so I need some help here. Please?
Awesome thank you! Now time to bang my head on the keyboard for a while and make this work!
With Android Wear 5.01 this maybe old?
AstroDigital said:
With Android Wear 5.01 this maybe old?
Click to expand...
Click to collapse
Yes, received an email from Google 2 days ago saying I need to update to use API 5.02 otherwise my app will cause problems and stop working after January 31st 2015.
Managed to mangle my way through a Google provided template, but having issues using images instead of drawPaint for the hands....time to learn.
SchmilK said:
Yes, received an email from Google 2 days ago saying I need to update to use API 5.02 otherwise my app will cause problems and stop working after January 31st 2015.
Managed to mangle my way through a Google provided template, but having issues using images instead of drawPaint for the hands....time to learn.
Click to expand...
Click to collapse
Code:
canvas.save(Canvas.MATRIX_SAVE_FLAG); //Saving the canvas and later restoring it so only this image will be rotated.
canvas.rotate(angle);
canvas.drawBitmap(bitmap, left, top, null);
canvas.restore();
This is the method I use to rotate bitmaps.
By the way what do you think about my first watchface: https://dl.dropboxusercontent.com/u/4281191/Line2.apk ?
After some fiddling around I was able to add a settings menu on the watch itself ^^
seahorsepip said:
Code:
canvas.save(Canvas.MATRIX_SAVE_FLAG); //Saving the canvas and later restoring it so only this image will be rotated.
canvas.rotate(angle);
canvas.drawBitmap(bitmap, left, top, null);
canvas.restore();
This is the method I use to rotate bitmaps.
By the way what do you think about my first watchface: https://dl.dropboxusercontent.com/u/4281191/Line2.apk ?
After some fiddling around I was able to add a settings menu on the watch itself ^^
Click to expand...
Click to collapse
I'll have to try that, thanks! All this time I"ve spent trying to hack through sample code, I probably could have learned how to program myself. :-/
Is there any software to hack instagrams on this thing bruh
The power of Xposed meets the power of Tasker. TextInject allows you to inject custom, dynamic text throughout your system.
Create custom variables using the Text Inject Tasker plugin. Insert those values throughout your rom.
(Tasker is not required to use TextInject but is required to set custom variables.)
Use weather variables to display weather with icons.
Go ahead, make your phone awesome!
What kind of customizations can I do?
You can integrate any dynamic custom text right into the systemui. Some example:
Show the weather on your lockscreen or in your statusbar
Change the date/time format
Show your owner info in place of the carrier text
Show how many minutes till your next appointment
Get creative...
What parts of my os does this allow me to customize?
You can change the following text on your throughout your system:
Lockscreen Clock Time
Lockscreen Clock Date
Owner Info
Carrier Text
Statusbar Clock
Notification Drawer Date
Notification Drawer Clock
Lollipop and KitKat supported.
On the Xposed repo: http://repo.xposed.info/module/com.chaimchaikin.textinject
XDA:DevDB Information
TextInject, Xposed for all devices (see above for details)
Contributors
chaimc
Xposed Package Name: com.chaimchaikin.textinject
Version Information
Status: Stable
Current Stable Version: 1.2
Stable Release Date: 2015-10-03
Created 2015-05-19
Last Updated 2015-10-03
Tutorial 1A: Weather with icons
Tutorial 1A: Weather with icons
Inspired by my actual setup this is how to get icons for the weather instead of just text.
This tutorial has been updated to include instructions for using weather icon codes. It's a lot simpler so you might want to try again.
First follow Tutorial 1 for getting the weather in your statusbar.
Then you'll edit the Tasker task that you made to update the weather:
Add a new action (+): Variables > Variable Set
Set it up as follows:
Name: %weathericon
To: $wa%weatherace_weather_id$
Change your Set TextInject Variable action:
Name: stays the same
Value: %weatherace_temp° %weathericon
Run the task again once
Make sure you completed all the other steps in the previous tutorial
Tutorial 1: Weather in your statusbar
Tutorial 1: Weather in your statusbar
Required Apps
TextInject (This module of course)
Xposed
Tasker (https://play.google.com/store/apps/details?id=net.dinglisch.android.taskerm)
Weather ACE (https://play.google.com/store/apps/details?id=mycodefab.aleph.weather)
Weather ACE Tasker Plugin (https://play.google.com/store/apps/details?id=mycodefab.aleph.weather_plugin.locale)
Step One: Setting up Tasker
Open Weather ACE and choose and save your location
Open Tasker and make a new Time profile. Choose From time to be 00:01 (if you've updated Tasker, choose the time 12:01 am) and un-check the To time to make the profile run until midnight. Choose Repeat and set it to be every 20 minutes. (This will control how often the weather us updated. Set it to update more or less often as you wish.)
Now press back and create a New Task. You can call the task Update Weather (or don't call it anything at all if you are so inclined).
Once you in your Task Edit menu, press the add button (+) at the bottom. Choose Plugin > WeatherACE Tasker Plugin
Press the edit button (the pencil) next to Configuration
Leave the options as selected: Location: "Your Location" (Your actual location or AUTO) and Request: Current Conditions and press the tick
Return to the Task Edit menu.
Press the add button (+) at the bottom. Choose Plugin >TextInject and click edit (next to Configuration)
Set the following options: Name: weather and Value: %weatherace_temp° %weatherace_weather_desc
Press the tick and return to the Task Edit menu.
Run the task once and press back until you are out of Tasker
Step Two: Setting up TextInject
Open TextInject and write the following in the Statusbar Time field: #weather (or if you want to also retain the time #weather #o) [You may need to wait a minute until the time updates to see the changes]
That's it!
Tutorial 2: Date/time Parsing
Required apps:
TextInject
Xposed
Setting up TextInject:
For this example we'll make two changes: First we'll add seconds to the lockscreen time. Second we'll add the date to the statusbar.
Next to the Lockscreen Time and Statusbar Time fields click the clock icon (this tells TextInject to parse the field as a date/time)
For the Lockscreen Time enter: hh:mm:ss
For the statusbar enter: MM/dd/yyyy #o (the #o retains the original value of this field. In our case the time.)
Press the tick or leave the TextInject app to save your settings
TextInject uses a Java DateFormat to format the date/time. For a full list of characters you can use see: http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html
Variables and Weather Icons Explained
You don't have to read this to get weather icons - you can just follow Tutorials 1 and 1A above but if you want to know how it works or you having difficulties here is a full explanation:
There are three different types of variables we are dealing with:
Tasker Variables (e.g. %var)
TextInject Variables (e.g. #var)
TextInject Weather Variables (e.g. $var$)
The order of the list above is the order they are processed. Tasker Variables and TextInject Variables can be set by the user. (Tasker variables by adding an action Variable > Set Variable and TextInject variables can be set in Tasker using the action Plugins > Set TextInject Variable). TextInject Weather Variables, on the other hand, can not be set. (Yes, they are actually not variables but constants if you want to be technical.)
To be continued...
chaimc said:
The power of Xposed meets the power of Tasker. TextInject allows you to inject custom, dynamic text throughout your system.
Create custom variables using the Text Inject Tasker plugin. Insert those values throughout your rom.
(Tasker is not required to use TextInject but is required to set custom variables.)
Go ahead, make your phone awesome!
What kind of customizations can I do?
You can integrate any dynamic custom text right into the systemui. Some examples:
Show the weather on your lockscreen
Change the date/time format
Show owner info in place of the carrier text
Show how many minutes till your next appointment
Get creative...
What parts of my os does this allow me to customize?
For now you can change the following text on your lockscreen:
Clock Time
Clock Date
Owner Info
Carrier Text
Statusbar Clock
Notification Drawer Date
Coming soon: you'll be able to change (almost) any text throughout your systemui.
(Android 5 for now, more support coming!)
XDA:DevDB Information
TextInject, Xposed for all devices (see above for details)
Contributors
chaimc
Xposed Package Name: com.chaimchaikin.textinject
Version Information
Status: Beta
Current Beta Version: 0.1
Beta Release Date: 2015-05-18
Created 2015-05-19
Last Updated 2015-05-18
Available at http://repo.xposed.info/module/com.chaimchaikin.textinject
Click to expand...
Click to collapse
great idea, but it isn't working for me
I don't use a lockscreen so I tried the settings for Statusbar Time and Notification Drawer Date. Created a Tasker action to set a # variable, referenced that variable in the TextInject Xposed module, nothing happens. Rebooted, nothing happens
Can you show some screenshots or specify what devices this has been successfully tested on? I tried this on a Sony D5503
Awesome idea!
But I was pretty sad that it wouldn't install...
To prevent confusion I suggest pointing out it only supports android 5 ATM in the xposed download section
Looking forward to the KitKat version
Regards
[size=-4]Sent from my Boeffla powered Slim (4.4.4, AOSP based) GT-I9300[/size]
wyt18 said:
great idea, but it isn't working for me
I don't use a lockscreen so I tried the settings for Statusbar Time and Notification Drawer Date. Created a Tasker action to set a # variable, referenced that variable in the TextInject Xposed module, nothing happens. Rebooted, nothing happens
Can you show some screenshots or specify what devices this has been successfully tested on? I tried this on a Sony D5503
Click to expand...
Click to collapse
What rom are you using? Also can you send me a copy of your xposed log and I will look into it.
I don't like tweeking much ; but this is so cool I'll give it a try
chaimc said:
What rom are you using? Also can you send me a copy of your xposed log and I will look into it.
Click to expand...
Click to collapse
Thanks, I'm on 5.0.2 stock Sony. Will send you my Xposed log shortly. I also have GravityBox so not sure if that interferes with TI
It works for me, but not as expected... I set notifcation drawer date to #o-#nextalarm. When I refresh the value it shows the orginal value + nextalarm... Next time it gets refreshed it shows original value + nextalarm + nextalarm... I think the #o variable is now the real original value and the next alarm together. I hope you can fix this
w0rinal said:
Awesome idea!
But I was pretty sad that it wouldn't install...
To prevent confusion I suggest pointing out it only supports android 5 ATM in the xposed download section
Looking forward to the KitKat version
Regards
[size=-4]Sent from my Boeffla powered Slim (4.4.4, AOSP based) GT-I9300[/size]
Click to expand...
Click to collapse
OK I've edited the xposed description. Thanks.
Ultimous said:
I don't like tweeking much ; but this is so cool I'll give it a try
Click to expand...
Click to collapse
Glad you find this cool. Please let me know how it goes.
MartelKombat said:
It works for me, but not as expected... I set notifcation drawer date to #o-#nextalarm. When I refresh the value it shows the orginal value + nextalarm... Next time it gets refreshed it shows original value + nextalarm + nextalarm... I think the #o variable is now the real original value and the next alarm together. I hope you can fix this
Click to expand...
Click to collapse
Oops
Thanks, I'll fix that.
(In the meantime as a workaround you can set the value of #nextalarm to have the date in set from tasker)
chaimc said:
Oops
Thanks, I'll fix that.
(In the meantime as a workaround you can set the value of #nextalarm to have the date in set from tasker)
Click to expand...
Click to collapse
I think you get your "real" value before the method hook(beforeHookedMethod), I think you only need to grab the real value after the method hook(afterHookedMethod).
PS.: I'm a nooby in java development and only looked on the tutorial from rovo and the source of some modules (my modules failed a lot). I hope my tip was helping/right.
...
MartelKombat said:
It works for me, but not as expected... I set notifcation drawer date to #o-#nextalarm. When I refresh the value it shows the orginal value + nextalarm... Next time it gets refreshed it shows original value + nextalarm + nextalarm... I think the #o variable is now the real original value and the next alarm together. I hope you can fix this
Click to expand...
Click to collapse
Fixed now. Thanks for pointing that out.
w0rinal said:
Awesome idea!
But I was pretty sad that it wouldn't install...
To prevent confusion I suggest pointing out it only supports android 5 ATM in the xposed download section
Looking forward to the KitKat version
Regards
[size=-4]Sent from my Boeffla powered Slim (4.4.4, AOSP based) GT-I9300[/size]
Click to expand...
Click to collapse
KitKat support added. Enjoy
wyt18 said:
Thanks, I'm on 5.0.2 stock Sony. Will send you my Xposed log shortly. I also have GravityBox so not sure if that interferes with TI
Click to expand...
Click to collapse
This issue is possibly fixed in the new version of TextInject (v0.3). Please try and let me know. (You can send me the log again if you still having issues).
chaimc said:
This issue is possibly fixed in the new version of TextInject (v0.3). Please try and let me know. (You can send me the log again if you still having issues).
Click to expand...
Click to collapse
thanks, v0.3 worked for me!
w0rinal said:
Awesome idea!
But I was pretty sad that it wouldn't install...
To prevent confusion I suggest pointing out it only supports android 5 ATM in the xposed download section
Looking forward to the KitKat version
Regards
[size=-4]Sent from my Boeffla powered Slim (4.4.4, AOSP based) GT-I9300[/size]
Click to expand...
Click to collapse
KitKat now fully supported.
Hello,
I have been using Profile 4 Tasker to change the user profiles of CyanogenMod with Tasker ; but now with the latest CM change to profiles management in 2015/06/30 nightly, it doesn't work anymore
http://review.cyanogenmod.org/#/q/topic:profiles-refactor
I found a task on reddit to set a CM profile with Tasker using Java :
https://www.reddit.com/r/TaskerFiles/comments/38tesw/task_activate_a_cyanogenmod_profile_by_name/
Unfortunately, it does not work on my phone with CM12.1 starting from 2015/06/30 nightly. It works fine on my Galaxy Tab 2 with an older version of CyanogenMod (2015-06-07).
When looking at the commits, it looks like CM removed the "profile" public string from Context.java as shown here : http://review.cyanogenmod.org/#/c/101945/7/core/java/android/content/Context.java
So now when the task tries to run the %exists = ps.profileExists(%par1); it returns an error "Java Function: failed to init target class ps".
It looks like there is no "profileExists" function available in the "ps" class.
I'm not used to code Android, only working on Python, but as far as I understand, the CONTEXT.getSystemService(profile); returns nothing as "profile" is not public anymore and there is no corresponding function. So the returned class is empty.
Is there another way to switch system profiles with Tasker with the new profilemanager ?
As I'm not used to Android and Java coding, I'm not able to digg in the CM code to find a solution myself.
Thanks a lot for your help.
Same here, any help?
I found a solution yesterday.
Unfortunately, I still can't change the profile through Tasker, I need to call the Power Menu or go to Quick Settings tiles to change the active profile ; but at least now Tasker detects when there is a profile change, so that I can automate several things at this time.
I attach a zip with some Tasker profiles and tasks I made, you can unzip it to your phone and import it in Tasker to use it as a base.
The profiles are :
- CM Profile Set : this is the main profile, it detects the CM Profile change by listening to the "cyanogenmod.platform.intent.action.PROFILE_SELECTED" intent the system broadcasts when a profile is selected.
- Detect Headset : detects whether a headset with no microphone is plugged in or not.
- Detect Power : detects whether a power source is plugged in or not.
- Profil Automobile : detects if the profile named "Automobile" is active or not, and performs some tasks accordingly.
- Profil Nuit : detects if the profile named "Nuit" is active or not, and performs some tasks accordingly.
The tasks are :
- CMProfileVariableSet : called by "CM Profile Set", this is the main task, it sets the variables %CMProfile and %CMLastProfile with the name of the new CM profile and the name of the previous CM profile, respectively. These variables will be used to activate the corresponding Tasker profiles.
- Automobile Musique : this task is a good example of how to automate the configuration of the phone when a CM profile is selected, depending on if headset and power are plugged in or not. When the CM profile named "Automobile" is selected, it launches the "Kernel Automobile" task to configure the kernel ; if headset is plugged in, it launches the music player and starts playing music ; and if the power source is plugged in it starts Waze for navigation
- Headset No Mic / Headset Out / Power In / Power Out : these tasks set the variables used by other tasks to perform some actions or not.
- Kernel Automobile / Kernel Nuit : when the corresponding Profile is selected in CM, the Tasker profiles run these tasks to send intents to my kernel config app (Boeffla kernel on my S5) to change its configuration.
You may play with the provided profiles and tasks to match your requirements, the main things being "CM Profile Set" and "CMProfileVariableSet", that are setting the variables %CMProfile and %CMLastProfile. By using the two variables, you can then perform whatever you want in you tasks.
I will continue to check how I can trigger a CM profile change directly with Tasker, for example to set a CM profile everyday at the same hour.
ScratMan38 said:
I will continue to check how I can trigger a CM profile change directly with Tasker, for example to set a CM profile everyday at the same hour.
Click to expand...
Click to collapse
I have written and attached a little app that can activate a CM profile from Tasker on today's nightly. Start CMSetProfile with "Launch App" having the profile name in the "Data" argument.
Thanks, it works fine.
Unfortunately, since 1st August niglthy, my method above with listening of intent does not work anymore. It looks like the platform does not send the intent anymore when the profile is selected. :crying:
At least I can switch profiles with tasker thanks to your app.
ScratMan38 said:
Thanks, it works fine.
Unfortunately, since 1st August niglthy, my method above with listening of intent does not work anymore.
Click to expand...
Click to collapse
Yes, there is a bug in CMProfileService: it activates the new profile, but crashes doing that here before the cyanogenmod.platform.intent.action.PROFILE_SELECTED can be broadcasted.
Code:
08-11 10:55:12.724 1572-2958/system_process D/CMProfileService﹕ Set active profile to: 06b50f53-8fb6-408f-8dbf-7bc7a9dd70cc - Night
08-11 10:55:12.780 1572-2958/system_process E/JavaBinder﹕ *** Uncaught remote exception! (Exceptions are not yet supported across processes.)
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
at android.os.Handler.(Handler.java:200)
at android.os.Handler.(Handler.java:114)
at com.android.internal.policy.impl.BarController.(BarController.java:71)
at com.android.internal.policy.impl.PhoneWindowManager.(PhoneWindowManager.java:968)
at com.android.internal.policy.impl.Policy.makeNewWindowManager(Policy.java:68)
at com.android.internal.policy.PolicyManager.makeNewWindowManager(PolicyManager.java:65)
at cyanogenmod.profiles.LockSettings.processOverride(LockSettings.java:107)
at cyanogenmod.app.Profile.doSelect(Profile.java:1194)
at org.cyanogenmod.platform.internal.ProfileManagerService.setActiveProfileInternal(ProfileManagerService.java:591)
at org.cyanogenmod.platform.internal.ProfileManagerService.setActiveProfileInternal(ProfileManagerService.java:562)
at org.cyanogenmod.platform.internal.ProfileManagerService.access$600(ProfileManagerService.java:58)
at org.cyanogenmod.platform.internal.ProfileManagerService$2.setActiveProfile(ProfileManagerService.java:201)
at cyanogenmod.app.IProfileManager$Stub.onTransact(IProfileManager.java:56)
at android.os.Binder.execTransact(Binder.java:446)
EDIT: There is already a fix, not yet merged, but on it's way: http://review.cyanogenmod.org/#/c/105589/
It's working for me.
EDIT2: It's merged. Profile intents should be broadcasted again.
With the fix the intent is correctly broadcasted, thanks. Now I can easily detect the profile change in Tasker.
Do you know if there is a way to call the CM profile picker ? to have a list to select the profile, as we could call it with Power Menu > Profile before devs decided to remove the profiles from power menu.
ScratMan38 said:
Hello,
...
I found a task on reddit to set a CM profile with Tasker using Java :
https://www.reddit.com/r/TaskerFiles/comments/38tesw/task_activate_a_cyanogenmod_profile_by_name/
Unfortunately, it does not work on my phone with CM12.1 starting from 2015/06/30 nightly. It works fine on my Galaxy Tab 2 with an older version of CyanogenMod (2015-06-07).
Click to expand...
Click to collapse
Hi! I'm Kwbmm reddit user that posted the solution you can see in the comments for switching profiles in CM 12.1
Unfortunately, that method doesn't work anymore.
I tried the app posted by @morckx and it works, but I'm still wondering if we can fix my task, as I think it's a cleaner way to change the profile. However, after some digging, I wasn't able to understand what should be changed in my task to make it work correctly again. If (maybe) @morckx can give us a suggestion, as I believe it's a matter of copying the function calls that are made by his app into tasker, this could be solved easily.
Kwbmm, could you fix your task? I'm also looking for a cleaner solution
jobinmaxime said:
Kwbmm, could you fix your task? I'm also looking for a cleaner solution
Click to expand...
Click to collapse
I didn't manage to fix it. In the end I resorted to use CMSetProfile app which was posted some posts before
Inviato dal mio GT-I9505 utilizzando Tapatalk
Is it seamless or you see the app opening?
jobinmaxime said:
Is it seamless or you see the app opening?
Click to expand...
Click to collapse
The app opens and closes immediately after
Ok thanks. I'll probably try updating your task based on this app, I'll let you know if I find something.
morckx said:
I have written and attached a little app that can activate a CM profile from Tasker on today's nightly. Start CMSetProfile with "Launch App" having the profile name in the "Data" argument.
Click to expand...
Click to collapse
Working!
Thanks so much, thought I had to rearrange everything, but now all is well again!
@morckx thanks for the app. Will you be able to get rid of the quick flash? Or maybe change it from white to black, if that's possible. Thanks all the same, I'm glad that my Tasker profile switcher works again. :victory:
voidzero said:
@morckx thanks for the app. Will you be able to get rid of the quick flash? Or maybe change it from white to black, if that's possible. Thanks all the same, I'm glad that my Tasker profile switcher works again. :victory:
Click to expand...
Click to collapse
Attached a new version that should display no GUI, otherwise unchanged. Please have a look, Source Code is here: https://github.com/morckx/CMProfiles
Thanks, new version is working PERFECT
morckx said:
Attached a new version that should display no GUI, otherwise unchanged. Please have a look, Source Code is here: https://github.com/morckx/CMProfiles
Click to expand...
Click to collapse
Thanks! Little App which is essential for me!
morckx said:
Attached a new version that should display no GUI, otherwise unchanged. Please have a look, Source Code is here: https://github.com/morckx/CMProfiles
Click to expand...
Click to collapse
Fantastic. Thanks for both!
@morckx, I made some search on the ProfileManager, and I can successfully select a profile or detect a profile change using intents, in order to automate everything with Tasker, thanks to your app. However, I'm not happy with the method I'm using to select the profile I want directly from the home screen, may I ask you some help ?
I made a Tasker menu to display a choice of profiles, but the issue is that it's ugly, it doesn't match the system, and when I add or remove a profile, I need to edit the menu in Tasker to make it match.
I've seen that there is a "Profile Picker" in CM, which opens a system menu listing all my available profiles.
I managed to make a task which retrieves the active profile UUID and sets it to variable %cm_active_profile_uuid, then send an intent :
Action = cyanogenmod.platform.intent.action.PROFILE_PICKER
Cat = Default
Extra = cyanogenmod.platform.intent.extra.profile.SHOW_NONE:false (this removes the 'None' entry at the top of the list)
Extra = cyanogenmod.platform.intent.extra.profile.EXISTING_UUID:%cm_active_profile_uuid (this allows the profile picker to display which one is active)
This displays the following :
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
I can then select the profile I want to apply, and click OK.
But then, I'm lost.
I can't find a way to get the feed back from the Profile Picker. It does not change the active profile, and it seems it broadcasts no intent.
I tried to monitor the intent cyanogenmod.platform.intent.extra.profile.PICKED_UUID with Tasker, but it doesn't work.
According to the wiki : http://cyanogenmod.github.io/cm_platform_sdk/reference/cyanogenmod/app/ProfileManager.html
the profile picker should return the UUID of the selected profile, but I can't find how to retrieve it.
May I ask for your support please ?
Thanks