Pasterino is released.
Programmed in essentially a single day, Pasterino serves as a global text paster.
Awesome.
Gonna go write Power Manager now.
========================
Follow pyamsoft around the Web for updates and announcements about the newest applications!
Like what I do?
Send me an email at: pyam.soft@gmail.com
Or find me online at: https://pyamsoft.blogspot.com
Follow my FaceBook Page
Follow my Google+ Page
=========================
Wednesday, June 22, 2016
Saturday, June 18, 2016
Copy Pasterino
So I don't actually know when this began, but never the less.
It seems like recently, you are not allowed to use Copy-Paste functionality into the text entry field for the Google Play purchasing dialog.
This means that if you are like me and use a password manager application to handle your credentials, and like me you do not actually know all of your passwords, then like me you have been unable to purchase items on Google Play due to this change.
I know that the change was added for security. And security is good. But so is choice.
Because I was left without the choice to paste text into this field and enter my password into the purchase dialog, I did what any developer would do in this situation.
I built a work around.
Enter Pasterino.
It's quite simple. It runs an AccessibilityService, monitors for the views that you are currently focusing on (like text entry and such) and allows you to paste the contents of the clipboard when you press a simple notification button. Awesome.
And that's it.
The basic functionality is already done, more or less, and was coded up in about 30 minutes plus some additional time spent reading the AccessibilityService documentation (which is admittedly sparse). I still need to add tests and flesh out the UI and some basic options but overall, the application is finished and should be published soon.
But hey, it's something.
As always, open source, ad-free, and up on GitHub for your viewing pleasure.
========================
Follow pyamsoft around the Web for updates and announcements about the newest applications!
Like what I do?
Send me an email at: pyam.soft@gmail.com
Or find me online at: https://pyamsoft.blogspot.com
Follow my FaceBook Page
Follow my Google+ Page
=========================
It seems like recently, you are not allowed to use Copy-Paste functionality into the text entry field for the Google Play purchasing dialog.
This means that if you are like me and use a password manager application to handle your credentials, and like me you do not actually know all of your passwords, then like me you have been unable to purchase items on Google Play due to this change.
I know that the change was added for security. And security is good. But so is choice.
Because I was left without the choice to paste text into this field and enter my password into the purchase dialog, I did what any developer would do in this situation.
I built a work around.
Enter Pasterino.
It's quite simple. It runs an AccessibilityService, monitors for the views that you are currently focusing on (like text entry and such) and allows you to paste the contents of the clipboard when you press a simple notification button. Awesome.
And that's it.
The basic functionality is already done, more or less, and was coded up in about 30 minutes plus some additional time spent reading the AccessibilityService documentation (which is admittedly sparse). I still need to add tests and flesh out the UI and some basic options but overall, the application is finished and should be published soon.
But hey, it's something.
As always, open source, ad-free, and up on GitHub for your viewing pleasure.
========================
Follow pyamsoft around the Web for updates and announcements about the newest applications!
Like what I do?
Send me an email at: pyam.soft@gmail.com
Or find me online at: https://pyamsoft.blogspot.com
Follow my FaceBook Page
Follow my Google+ Page
=========================
Thursday, June 16, 2016
Managing Power
So nobody asked.
But I did anyway.
Power Manager is being re(-re)-written (again) to be better at doing the things.
The next version 6.0.0 will remove Ads.
I have removed the old code which required two different services to run to handle simple screen events. It has instead been replaced with a job queue which relies on the Google Play Services GCM scheduler for devices below Lollipop, and uses the Framework JobScheduler for Lollipop and above.
Even though the GCM scheduler requires the Internet permission, rest assured that Power Manager does not actually access the network in any way. The GCM scheduler should also not actually access the Internet, and only uses that permission to check if the network is available when it is needed for Job requests.
RxJava will once again drive the train here as far as multi-threading requests go. The APK should also be much smaller as it does not rely on the entire Ad SDK (though it was never too large to begin with).
It won't look all too different from version 5, since even though its been a while since I last updated Power Manager, I liked the colors and the flow of the application.
As always, its open on GitHub. The master branch will show you the old code for Power Manager 5, and the dev branch holds the current version 6 in development. I hope to put it out before too long, but we'll see.
========================
Follow pyamsoft around the Web for updates and announcements about the newest applications!
Like what I do?
Send me an email at: pyam.soft@gmail.com
Or find me online at: https://pyamsoft.blogspot.com
Follow my FaceBook Page
Follow my Google+ Page
=========================
But I did anyway.
Power Manager is being re(-re)-written (again) to be better at doing the things.
The next version 6.0.0 will remove Ads.
I have removed the old code which required two different services to run to handle simple screen events. It has instead been replaced with a job queue which relies on the Google Play Services GCM scheduler for devices below Lollipop, and uses the Framework JobScheduler for Lollipop and above.
Even though the GCM scheduler requires the Internet permission, rest assured that Power Manager does not actually access the network in any way. The GCM scheduler should also not actually access the Internet, and only uses that permission to check if the network is available when it is needed for Job requests.
RxJava will once again drive the train here as far as multi-threading requests go. The APK should also be much smaller as it does not rely on the entire Ad SDK (though it was never too large to begin with).
It won't look all too different from version 5, since even though its been a while since I last updated Power Manager, I liked the colors and the flow of the application.
As always, its open on GitHub. The master branch will show you the old code for Power Manager 5, and the dev branch holds the current version 6 in development. I hope to put it out before too long, but we'll see.
========================
Follow pyamsoft around the Web for updates and announcements about the newest applications!
Like what I do?
Send me an email at: pyam.soft@gmail.com
Or find me online at: https://pyamsoft.blogspot.com
Follow my FaceBook Page
Follow my Google+ Page
=========================
Wednesday, June 8, 2016
Things I should have done before
Surprise, that's right. Tests.
Unit tests. Instrumentation tests. UI tests.
I'm working on it, I promise (the last couple commits should show that).
Right now, I'm using Robolectric so that I can run Android tests on the JVM (because my presenters are badly designed). The reason for this is, one, its faster than booting up the emulator. And two, my application data repository is the device's package manager. You need the Android classes to invoke the package manager (even though I end up having to fake it for tests).
By mocking the rest of the classes that would normally be injected by dagger, I'm able to write tests to handle things like the presenters, and the interactors to make sure that any new code I add (see: removing view pager for fragment) does not introduce any regressions.
Once I get a test battery which works against and validates the existing code base, I will start adding tests for new code as I write them. This way, the application will be smoothly tested while it is being developed.
I hope to include tests in PadLock, ZapTorch, and SoftGlow when they are next updated, but we will see as time permits.
After some pain in figuring out how to shadow the PackageManager, I've been able to really get testing underway for PadLock. ZapTorch will arguably be more difficult, since its feature relies on hardware in the device itself. I will have to mock up situations of both success and failure and hope for the best.
More to come.
========================
Follow pyamsoft around the Web for updates and announcements about the newest applications!
Like what I do?
Send me an email at: pyam.soft@gmail.com
Or find me online at: https://pyamsoft.blogspot.com
Follow my FaceBook Page
Follow my Google+ Page
=========================
Unit tests. Instrumentation tests. UI tests.
I'm working on it, I promise (the last couple commits should show that).
Right now, I'm using Robolectric so that I can run Android tests on the JVM (because my presenters are badly designed). The reason for this is, one, its faster than booting up the emulator. And two, my application data repository is the device's package manager. You need the Android classes to invoke the package manager (even though I end up having to fake it for tests).
By mocking the rest of the classes that would normally be injected by dagger, I'm able to write tests to handle things like the presenters, and the interactors to make sure that any new code I add (see: removing view pager for fragment) does not introduce any regressions.
Once I get a test battery which works against and validates the existing code base, I will start adding tests for new code as I write them. This way, the application will be smoothly tested while it is being developed.
I hope to include tests in PadLock, ZapTorch, and SoftGlow when they are next updated, but we will see as time permits.
After some pain in figuring out how to shadow the PackageManager, I've been able to really get testing underway for PadLock. ZapTorch will arguably be more difficult, since its feature relies on hardware in the device itself. I will have to mock up situations of both success and failure and hope for the best.
More to come.
========================
Follow pyamsoft around the Web for updates and announcements about the newest applications!
Like what I do?
Send me an email at: pyam.soft@gmail.com
Or find me online at: https://pyamsoft.blogspot.com
Follow my FaceBook Page
Follow my Google+ Page
=========================
Monday, June 6, 2016
Android N and Padlock
PadLock is meant to restrict access to applications that the user deems sensitive. And when there is only one application running on the screen at a time, this works reasonably well.
When there are two, a hole different problem emerges.
PadLock, by design, only launches a single Lock Screen which is the almighty in this context, and handles the restriction of all sensitive applications. Perhaps this is bad design, but nevertheless, this is how things work and the design is now stable and in production.
When two applications take the screen then, it is expected that PadLock will only be able to lock one of them, usually the first one. This effectively breaks PadLock, as it allows a user to avoid the restriction without knowing the passcode. That's not good.
A working patch on the dev branch seeks to fix this issue by allowing multiple instances of the LockScreenActivity to be launched. This allows PadLock to restrict multiple applications on the screen at the same time. Beautiful.
However, not all is easy. Normally, allowing multiple LockScreenActivity instances would create duplicates in the Recent Activity stack. I have changed the way that the LockScreenActivity cleans up after itself, which should hopefully avoid this issue.
I will be pushing the patch forward far before the release of Android N. Do note then, that the oldest version of PadLock that will "work" on Android N is the to-be-release 1.4.0. If you are running on an older version of PadLock at the time you upgrade to Android N, you will enter multi-window hell.
Also note that if you do not use an ignore-time for PadLock, that by design, when switching focus between multi-window apps, PadLock will re-lock the application. This can be very frequent (and also very annoying). This is by design - since as the user you have requested there be no buffer time where a passcode is not asked. If you would wish to avoid this scenario, configure PadLock to use a non-zero ignore time value, like 5 minutes or - in the future - a user configured value.
Android N is the future. And the future is looking very cool. Hopefully PadLock, and all of the other pyamsoft applications, can be similarly chilly.
========================
Follow pyamsoft around the Web for updates and announcements about the newest applications!
Like what I do?
Send me an email at: pyam.soft@gmail.com
Or find me online at: https://pyamsoft.blogspot.com
Follow my FaceBook Page
Follow my Google+ Page
=========================
When there are two, a hole different problem emerges.
PadLock, by design, only launches a single Lock Screen which is the almighty in this context, and handles the restriction of all sensitive applications. Perhaps this is bad design, but nevertheless, this is how things work and the design is now stable and in production.
When two applications take the screen then, it is expected that PadLock will only be able to lock one of them, usually the first one. This effectively breaks PadLock, as it allows a user to avoid the restriction without knowing the passcode. That's not good.
A working patch on the dev branch seeks to fix this issue by allowing multiple instances of the LockScreenActivity to be launched. This allows PadLock to restrict multiple applications on the screen at the same time. Beautiful.
However, not all is easy. Normally, allowing multiple LockScreenActivity instances would create duplicates in the Recent Activity stack. I have changed the way that the LockScreenActivity cleans up after itself, which should hopefully avoid this issue.
I will be pushing the patch forward far before the release of Android N. Do note then, that the oldest version of PadLock that will "work" on Android N is the to-be-release 1.4.0. If you are running on an older version of PadLock at the time you upgrade to Android N, you will enter multi-window hell.
Also note that if you do not use an ignore-time for PadLock, that by design, when switching focus between multi-window apps, PadLock will re-lock the application. This can be very frequent (and also very annoying). This is by design - since as the user you have requested there be no buffer time where a passcode is not asked. If you would wish to avoid this scenario, configure PadLock to use a non-zero ignore time value, like 5 minutes or - in the future - a user configured value.
Android N is the future. And the future is looking very cool. Hopefully PadLock, and all of the other pyamsoft applications, can be similarly chilly.
========================
Follow pyamsoft around the Web for updates and announcements about the newest applications!
Like what I do?
Send me an email at: pyam.soft@gmail.com
Or find me online at: https://pyamsoft.blogspot.com
Follow my FaceBook Page
Follow my Google+ Page
=========================
Tuesday, May 31, 2016
Quick updates
Hope you all enjoyed the weekend.
PadLock was updated to 1.3.1 which removes the tab view pager interface in favor of just separate screens per fragment. This should give more vertical screen real-estate when using the application in landscape modes.
Also cleaned up a lot of the application with those annotations I love so much, hopefully when things crash I can expect them to now.
ZapTorch also was updated to 1.1.2 which allows for switching which Camera API controls the flashlight at runtime. It will also be nicer about displaying error dialogs regarding permissions or just plain errors.
SoftGlow rewrite for version 3.0.0 has begun, but no real progress has been made on it other than some cleanup and updating dependencies. I hope to get more serious work done on it later in the week.
Brief today. More later.
========================
Follow pyamsoft around the Web for updates and announcements about the newest applications!
Like what I do?
Send me an email at: pyam.soft@gmail.com
Or find me online at: https://pyamsoft.blogspot.com
Follow my FaceBook Page
Follow my Google+ Page
=========================
PadLock was updated to 1.3.1 which removes the tab view pager interface in favor of just separate screens per fragment. This should give more vertical screen real-estate when using the application in landscape modes.
Also cleaned up a lot of the application with those annotations I love so much, hopefully when things crash I can expect them to now.
ZapTorch also was updated to 1.1.2 which allows for switching which Camera API controls the flashlight at runtime. It will also be nicer about displaying error dialogs regarding permissions or just plain errors.
SoftGlow rewrite for version 3.0.0 has begun, but no real progress has been made on it other than some cleanup and updating dependencies. I hope to get more serious work done on it later in the week.
Brief today. More later.
========================
Follow pyamsoft around the Web for updates and announcements about the newest applications!
Like what I do?
Send me an email at: pyam.soft@gmail.com
Or find me online at: https://pyamsoft.blogspot.com
Follow my FaceBook Page
Follow my Google+ Page
=========================
Wednesday, May 25, 2016
Firejailing Steam
firejail is an application sandbox that uses technologies I don't understand to make using my computer more difficult. It also provides a basic security sandbox and helps protect me from malicious applications.
Remember that by default Linux is rather secure, but depending on the user's needs there may be situations where more fine grained control is desired. Firejail allows a novice user (like myself) to apply all of these existing security technologies already built into the kernel to give them a safety net should an application go rogue. It does so via profiles, which control how much - or how little - additional securities should be applied to an application.
There is a steam.profile, which ships with the firejail application as a supported profile. For 90% of games, this profile works fine, but there is a single instance that I have observed so far where applying this steam.profile crashed the game. The game in question, is Unturned.
I am not placing blame on either developer here, I am just stating what I noticed and what worked for me.
Remember that by default Linux is rather secure, but depending on the user's needs there may be situations where more fine grained control is desired. Firejail allows a novice user (like myself) to apply all of these existing security technologies already built into the kernel to give them a safety net should an application go rogue. It does so via profiles, which control how much - or how little - additional securities should be applied to an application.
There is a steam.profile, which ships with the firejail application as a supported profile. For 90% of games, this profile works fine, but there is a single instance that I have observed so far where applying this steam.profile crashed the game. The game in question, is Unturned.
I am not placing blame on either developer here, I am just stating what I noticed and what worked for me.
Unturned crashes for whatever reason when the default steam.profile is applied via firejail. The crash can be worked around by ignoring the protocol line in the steam.profile file, which limits the application to using only the Unix socket protocol, and IPv4 IPv6 protocols. Unturned apparently needs something more, and even adding all of the protocols available into the steam.profile did not fix the crash. But, by ignoring the protocol line by passing the --ignore option when running firejail, Unturned launches fine. Beautiful.
Go grow a tomato farm and kill some zombers you. It's free.
On an unrelated Linux steam note, the microphone in CS:GO just does not work. The game also hard crashes if you try to load a map using changelevel <map> instead of map <map> in the console. Valve plz fix.
========================
Follow pyamsoft around the Web for updates and announcements about the newest applications!
Like what I do?
Send me an email at: pyam.soft@gmail.com
Or find me online at: https://pyamsoft.blogspot.com
Follow my FaceBook Page
Follow my Google+ Page
=========================
$ firejail --ignore=protocol steam On an unrelated Linux steam note, the microphone in CS:GO just does not work. The game also hard crashes if you try to load a map using changelevel <map> instead of map <map> in the console. Valve plz fix.
========================
Follow pyamsoft around the Web for updates and announcements about the newest applications!
Like what I do?
Send me an email at: pyam.soft@gmail.com
Or find me online at: https://pyamsoft.blogspot.com
Follow my FaceBook Page
Follow my Google+ Page
=========================
AsyncTasks and You
Let's talk about threading (again), and about AsyncTasks. I am not going to explain them, but rather assume that you are an Android developer who has just stumbled across this class in the framework and are trying to use them to do all the things.
As with all parts of the framework, you must always understand where it ties into the lifecycle. So first, let's leak some memory (prepare for some handwritten, from memory code).
Alright, so this leaks. If the instance of MyActivity is destroyed, the AsyncTask does not stop doing its background task. The AsyncTask holds an implicit reference to the MyActivity context, which leaks the entire activity. Blah blah, all things you've heard before.
You've also probably heard to avoid AsyncTask because they are bad and all that other fun stuff too. Well, sometimes you can't just use something else, or ship with RxJava or anything nice like that. Sometimes, all you've got is the Android framework. So take a moment to learn about AsyncTasks.
One of the easiest things you can do is to never create anonymous, non-static AsnycTask instances. Instead, you can create a static inner class which extends AsyncTask, or create the anonymous AsyncTask in a static function. This will prevent the AsyncTask from capturing the implicit reference to your Activity and should plug the hole on a major source of AsyncTask memory leaks.
The other thing would be to add checks during any long running doInBackground() code to see if the AsyncTask isCancelled(). If it is, you can stop the background operation and the AsyncTask would be able to be cleaned up at that point. In order to make this worthwhile though you would need to hold a strong reference to the AsyncTask itself in your Activity and call cancel() on it during onDestroy(). It is more work, and this should generally only be used if you really need to reference something in your Activity itself like an ImageView, and it should always be used along with the advice above about static classes or functions.
Finally, if you are holding an ImageView for example in your AsyncTask so that you can modify it onPostExecute(), you should always try to not hold a strong reference to it. The ImageView will also be held by the Activity itself, so your AsyncTask can get away with holding a WeakReference to it. If you are holding a Context, see if you can hold the Application context instead of the Activity context.
Finally finally, remember that on modern Android, AsyncTasks are run one after the other. This means that there may be cases where your task leaks just because it is waiting for the other one to finish its long running operation. Sometimes you are able to apply a parallel executor to the AsyncTasks, sometimes you are not. There is no silver bullet for AsyncTasks, you must remember to test and verify that your AsyncTasks work as intended and do not leak any precious memory.
========================
Follow pyamsoft around the Web for updates and announcements about the newest applications!
Like what I do?
Send me an email at: pyam.soft@gmail.com
Or find me online at: https://pyamsoft.blogspot.com
Follow my FaceBook Page
Follow my Google+ Page
=========================
As with all parts of the framework, you must always understand where it ties into the lifecycle. So first, let's leak some memory (prepare for some handwritten, from memory code).
public class MyActivity extends Activity {
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
new AsyncTask<Void, Void, Void>() { @Override protected Void doInBackground(Void... params) { while (true) { // Loop forever. } return null; } }.execute(); }}Alright, so this leaks. If the instance of MyActivity is destroyed, the AsyncTask does not stop doing its background task. The AsyncTask holds an implicit reference to the MyActivity context, which leaks the entire activity. Blah blah, all things you've heard before.
You've also probably heard to avoid AsyncTask because they are bad and all that other fun stuff too. Well, sometimes you can't just use something else, or ship with RxJava or anything nice like that. Sometimes, all you've got is the Android framework. So take a moment to learn about AsyncTasks.
One of the easiest things you can do is to never create anonymous, non-static AsnycTask instances. Instead, you can create a static inner class which extends AsyncTask, or create the anonymous AsyncTask in a static function. This will prevent the AsyncTask from capturing the implicit reference to your Activity and should plug the hole on a major source of AsyncTask memory leaks.
The other thing would be to add checks during any long running doInBackground() code to see if the AsyncTask isCancelled(). If it is, you can stop the background operation and the AsyncTask would be able to be cleaned up at that point. In order to make this worthwhile though you would need to hold a strong reference to the AsyncTask itself in your Activity and call cancel() on it during onDestroy(). It is more work, and this should generally only be used if you really need to reference something in your Activity itself like an ImageView, and it should always be used along with the advice above about static classes or functions.
Finally, if you are holding an ImageView for example in your AsyncTask so that you can modify it onPostExecute(), you should always try to not hold a strong reference to it. The ImageView will also be held by the Activity itself, so your AsyncTask can get away with holding a WeakReference to it. If you are holding a Context, see if you can hold the Application context instead of the Activity context.
Finally finally, remember that on modern Android, AsyncTasks are run one after the other. This means that there may be cases where your task leaks just because it is waiting for the other one to finish its long running operation. Sometimes you are able to apply a parallel executor to the AsyncTasks, sometimes you are not. There is no silver bullet for AsyncTasks, you must remember to test and verify that your AsyncTasks work as intended and do not leak any precious memory.
========================
Follow pyamsoft around the Web for updates and announcements about the newest applications!
Like what I do?
Send me an email at: pyam.soft@gmail.com
Or find me online at: https://pyamsoft.blogspot.com
Follow my FaceBook Page
Follow my Google+ Page
=========================
Tuesday, May 24, 2016
Testing in Production
Ramble mode engage.
--
I like you guys.
You're like my own little slice of users who, at this point, don't really expect all too much out of my applications and things that I make. So its neat then, because when I release something that's really bad, I get to see how it all pans out. I get to test in production, basically. And you; you're all a part of my little group of testers.
In the coming months, here's what will be happening.
I will be (as previously announced) removing advertisements from everything. Everything I can update in time. I probably won't get around to working on Power Manager, I'm saying it now. It's the largest (oldest (ugliest) ) application I have so far, even though that isn't saying much, and I have invested so much time into it that I want to work on other projects at the moment. I do hope to address SoftGlow though (also as noted before). Sounds good? Good. Moving on.
I will be experimenting with the idea of prompting for reviews. Don't be afraid, let me explain.
Most people have opinions about the applications they use whether they are vocal about them or not. Most people are just too lazy to voice their opinion as a review because they cannot be tasked with going to the store page and writing it up. I will be looking to interact better with my audience by prompting them a single time when the application is freshly updated or installed, to rate the application on the Play Store.
Voice concerns. Report bugs. Say thanks. Insult my family. Whatever you want to do, that small paragraph of text is yours to do it in.
The rating prompt will be in the form of a single dialog. It will only show up once, it will not badger you for five stars. It will give you only two options, either rate the application on the Play Store, or don't. That's it. Easy peasy. In fact, so easy, I will be planning on putting it into the applications I can update in time. Consider this like the "Empire Strikes Back" only the Empire returns in the form of a non intrusive dialog prompt instead of a crummy advertisement, and the Empire in this case is, well, me. The developer giveth, and the developer taketh away.
Market research shows that just by simply prompting a user to give feedback, the amount of feedback grows exponentially. I am wondering if this is the case, even for my very very tiny community of users.
Sorry, testers. And since you are now an official pyamsoft tester, I guess some congratulations are in order.
So.
Congratulations, you're hired! You start tomorrow.
========================
Follow pyamsoft around the Web for updates and announcements about the newest applications!
Like what I do?
Send me an email at: pyam.soft@gmail.com
Or find me online at: https://pyamsoft.blogspot.com
Follow my FaceBook Page
Follow my Google+ Page
=========================
--
I like you guys.
You're like my own little slice of users who, at this point, don't really expect all too much out of my applications and things that I make. So its neat then, because when I release something that's really bad, I get to see how it all pans out. I get to test in production, basically. And you; you're all a part of my little group of testers.
In the coming months, here's what will be happening.
I will be (as previously announced) removing advertisements from everything. Everything I can update in time. I probably won't get around to working on Power Manager, I'm saying it now. It's the largest (oldest (ugliest) ) application I have so far, even though that isn't saying much, and I have invested so much time into it that I want to work on other projects at the moment. I do hope to address SoftGlow though (also as noted before). Sounds good? Good. Moving on.
I will be experimenting with the idea of prompting for reviews. Don't be afraid, let me explain.
Most people have opinions about the applications they use whether they are vocal about them or not. Most people are just too lazy to voice their opinion as a review because they cannot be tasked with going to the store page and writing it up. I will be looking to interact better with my audience by prompting them a single time when the application is freshly updated or installed, to rate the application on the Play Store.
Voice concerns. Report bugs. Say thanks. Insult my family. Whatever you want to do, that small paragraph of text is yours to do it in.
The rating prompt will be in the form of a single dialog. It will only show up once, it will not badger you for five stars. It will give you only two options, either rate the application on the Play Store, or don't. That's it. Easy peasy. In fact, so easy, I will be planning on putting it into the applications I can update in time. Consider this like the "Empire Strikes Back" only the Empire returns in the form of a non intrusive dialog prompt instead of a crummy advertisement, and the Empire in this case is, well, me. The developer giveth, and the developer taketh away.
Market research shows that just by simply prompting a user to give feedback, the amount of feedback grows exponentially. I am wondering if this is the case, even for my very very tiny community of users.
Sorry, testers. And since you are now an official pyamsoft tester, I guess some congratulations are in order.
So.
Congratulations, you're hired! You start tomorrow.
========================
Follow pyamsoft around the Web for updates and announcements about the newest applications!
Like what I do?
Send me an email at: pyam.soft@gmail.com
Or find me online at: https://pyamsoft.blogspot.com
Follow my FaceBook Page
Follow my Google+ Page
=========================
What Up
Long time no post.
pstate-frequency was updated to version 3.3.3 (.3.3.3.3.3.3) which brings support (again) for acpi-cpufreq. It wasn't that hard to support the older driver, although I did run into some bugs from releasing without adequate testing, but they should hopefully be fixed now. If there are bugs, or something doesn't quite work the way you expect, file a GitHub issue.
steam-wrapper was updated to version 0.2.6, which brings some new behavior. By default it will not remove any of the outdated steam runtime libraries, but rather will override the LD_PRELOAD path to point to the newer libraries instead. The older destructive functionality still exists by passing the -d | --delete-stale flag to steam-wrapper if that's more your thing. The linking of the flash 32 bit library will be removed in the next version, user be warned.
update-hosts got updated (haha.) to a new version whose number escapes me at the moment, but it adds in hosts file sources from the disconnect project as well as a new list from the malwaredomains tracking site, the zeus project, and a ransomware tracker. So hopefully more things will be caught. That being said, I don't want to block too many things, as this may end up breaking legitimate sites as well. I have tried to maintain the whitelist to mirror the uBlock Origin Unbreak list, but seeing as we are dealing with a very binary all-or-nothing style of filtering hosts, it is obviously not as robust. It is also updated by hand, meaning I will miss things along the way. Open a GitHub issue if you see anything that I have missed.
PadLock will get a small update that filters out all window events for only those that come from Activity instances. This should clean up the actual LockService code and hopefully make locking more reliable. I will also be adding an option (off by default) that will check for a lock entry every time the activity class changes. This is to combat a potential security issue where, if the main entry point of the Application (usually launcher activity) is left unlocked, then the entire application is potentially view-able as long as the currently observed package does not change. Check the source, while I have not actually tried to produce the bug, it is theoretically possible. The reason that the option is left off by default is due to the fact that when the application is "properly" locked, causing a new lock request on each activity change only makes things more annoying.
Finally work has begun on re-working basically all of SoftGlow as I am curious to see how it will perform in a more modern Android environment. Of course, with the announced changes to how background services are being restricted in the future Android versions, I will need to go back to the drawing board regarding how the application actually works.
More to come.
========================
Follow pyamsoft around the Web for updates and announcements about the newest applications!
Like what I do?
Send me an email at: pyam.soft@gmail.com
Or find me online at: https://pyamsoft.blogspot.com
Follow my FaceBook Page
Follow my Google+ Page
=========================
pstate-frequency was updated to version 3.3.3 (.3.3.3.3.3.3) which brings support (again) for acpi-cpufreq. It wasn't that hard to support the older driver, although I did run into some bugs from releasing without adequate testing, but they should hopefully be fixed now. If there are bugs, or something doesn't quite work the way you expect, file a GitHub issue.
steam-wrapper was updated to version 0.2.6, which brings some new behavior. By default it will not remove any of the outdated steam runtime libraries, but rather will override the LD_PRELOAD path to point to the newer libraries instead. The older destructive functionality still exists by passing the -d | --delete-stale flag to steam-wrapper if that's more your thing. The linking of the flash 32 bit library will be removed in the next version, user be warned.
update-hosts got updated (haha.) to a new version whose number escapes me at the moment, but it adds in hosts file sources from the disconnect project as well as a new list from the malwaredomains tracking site, the zeus project, and a ransomware tracker. So hopefully more things will be caught. That being said, I don't want to block too many things, as this may end up breaking legitimate sites as well. I have tried to maintain the whitelist to mirror the uBlock Origin Unbreak list, but seeing as we are dealing with a very binary all-or-nothing style of filtering hosts, it is obviously not as robust. It is also updated by hand, meaning I will miss things along the way. Open a GitHub issue if you see anything that I have missed.
PadLock will get a small update that filters out all window events for only those that come from Activity instances. This should clean up the actual LockService code and hopefully make locking more reliable. I will also be adding an option (off by default) that will check for a lock entry every time the activity class changes. This is to combat a potential security issue where, if the main entry point of the Application (usually launcher activity) is left unlocked, then the entire application is potentially view-able as long as the currently observed package does not change. Check the source, while I have not actually tried to produce the bug, it is theoretically possible. The reason that the option is left off by default is due to the fact that when the application is "properly" locked, causing a new lock request on each activity change only makes things more annoying.
Finally work has begun on re-working basically all of SoftGlow as I am curious to see how it will perform in a more modern Android environment. Of course, with the announced changes to how background services are being restricted in the future Android versions, I will need to go back to the drawing board regarding how the application actually works.
More to come.
========================
Follow pyamsoft around the Web for updates and announcements about the newest applications!
Like what I do?
Send me an email at: pyam.soft@gmail.com
Or find me online at: https://pyamsoft.blogspot.com
Follow my FaceBook Page
Follow my Google+ Page
=========================
Subscribe to:
Posts (Atom)