JumpnRoll update

After a really long break, I finally made a big update again for my very first Android App JupmnRoll :D

The changes include support for the google play games online highscore, therefore you can now compare your scores with your friends and the whole world online. In addition to that, there are also lots of bugfixes and improvements, support for the Android 4.4 immversive mode, a refined tablet layout and much more!

Unfortunately the codebase of JumpnRoll is already really old and looking back, I realize that I implemented many things badly or at least not really maintainable. From todays point of view, I would make nearly everything different and the app would have to be completely rewritten in order to make bigger updates without too much additional effort. For this reason – and because I have many other projects at the moment – at least in the near future, there won’t be any bigger updates!

Nevertheless I would really appreciate if you try out the newest version and of course I would also like to hear your feedback ;)

Android L API changes

I recently installed the Android L developer preview on my Nexus 5 and had to discover some really strange API changes.

The first thing I noticed was that IntelliScreen or, to be specific, it’s detection of the current foreground App didn’t work anymore. As this is necessary for App specific rules which are one of IntelliScreens main features, I definitely had to fix this and after some research I found this: https://developer.android.com/preview/api-overview.html#BehaviorGetRecentTasks
It seems, that the API to determine the current foreground App got deprecated in L and doesn’t work anymore because of privacy concerns. On the one hand that’s understandable but on the other hand, this is a really bad restriction because many apps like IntelliScreen rely on this API and it even had it’s own permission! Luckily I found a workaround:

appProcesses = activityManager.getRunningAppProcesses();
for (RunningAppProcessInfo rap : appProcesses) {
	if (rap.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
		//Foreground App found!
	}
}

This code just gets all running processes and then looks which of them have foreground importance. It doesn’t work as reliable as the old method and there are many unnecessary processes included but at least it works! Nevertheless this leads to the question why is this method still working? And more importantly will it still work in the final Android L release?
It really doesn’t make sense to remove one API for privacy concerns but still leave other (although more complicated) methods available. So I hope that Google fixes this in some way, preferably by reintroducing the old API or something similar.

Another strange thing is that lockscreen widgets got – at least in the preview build – removed! They were only shortly introduced in Android 4.2 and should now get removed again after slightly more than a year? That really doesn’t seem as they have a good long time planning! In addition to that, I found them really useful and DashClock – especially in conjunction with my custom extension ;) – was one of my favorite apps with a fix place on my first lockscreen page. Of course you can continue to use DashClock as a normal homescreen widget but on the Lockscreen it was even more useful!

Luckily Android L is still a developer preview and none of the changes are final. So lets hope that Google fixes this and all the other problems for the final version because apart from that, Android L is really great :D

DashClock and the problem with the worldReadable flag

As of DashClock version 1.5 a new optional “worldReadable” flag was introduced to the DashClock API. Here is the Manifest declaration:

 <meta-data android:name="worldReadable" android:value="true" />

This flag indicates whether only the official DashClock app (signed by Roman Nurik) or all apps can access an extension. Basically this is a good idea, because if your extension has some sensitive data not every app should be allowed to access this data.

Unfortunately this also brings some problems. When I first updated my app DashClock custom extension to use the newest DashClock API I hadn’t set this flag, because I simply didn’t knew that it exists. For this reason the flag automatically had a value of “false” and this brought some trouble.

After the update I got a lot of negative reviews from people who are using custom roms, that the extension isn’t visible for them. It took me a lot of time to figure out that the problem had to do with the worldReadable flag. For whatever reason some custom roms (e.g. Slimbean or Carbon rom) include their own version of DashClock as a system app in the rom. As this isn’t the official DashClock app and I hadn’t set the worldReadable flag the extension (as intended) didn’t show up for those people!

For my app the solution is really easy. As custom extension doesn’t show any sensible data, I just set the worldReadable flag to true and everything works as expected now. Nevertheless if there is an extension which really shows sensitive data, this is a problem! On the one hand, If it doesn’t set the worldReadable flag it disappoints lots of customers but on the other hand, if the flag is set to true, this is a potential security risk!

Summing up, the worldReadable flag is basically a good idea but in it’s current form it’s more a big problem! As it’s default value is false and only very few developers know of this flag when they are creating their first extension, this produces lots of trouble and annoyance because the extension doesn’t work for apparently no reason. We can only hope that the flag gets either replaced or that custom roms are shipping the official DashClock app in the future.

unnamed

IntelliScreen – great update to version 3.0

After a long time since the last update (we are mainly working on other apps already) IntelliScreen has got a great new Update again. Beside some bugfixes and improvements there are also cool new features like an interactive help (just click on the questionmark in the top right corner) and app specific screen brightness settings available now. In addition to that, there is a brand new tablet layout and a quick setup included in the update!

Here is the full Changelog:

  • Optimized function for detecting the active foreground app
  • Added integrated help system
  • Added option for setting app specific display brightness
  • From now, all rules are disabled when the lockscreen is in foreground
  • Different Bug fixes and improved translations
  • added optimised layout for tablets
  • integrated Google Backup Service
  • added “instant off” functionality for proximity sensor
  • added Quick-Setup
  • improved help functionality
  • different Bugfixes and layout optimisations

So lets go to the Play Store and download the update ;-)

toggle_plugin_logo

Toggle plugin for custom extension

Today I released a new Update to DashClock custom extension which (beside a few other great new features) enables it to use toggles!:-)

I haven’t integrated the toggle functionality directly into custom extension because many users appreciate that the app doesn’ need any additional permission. Instead I made an extra app (the toggle plugin) which has to be installed first in order to use toggles. I think thats a good compromise!

Unfortunately it isn’t possible to toggle actions without unlocking the screen. This is a restriction of the DashClock API and I will change it as soon as it’s possible!

The currently available toggles are:

  • Toggle Bluetooth
  • Toggle Wifi
  • Toggle Wifi tethering
  • Toggle Silent mode
  • Toggle Vibration mode
  • Toggle Auto screen rotation