What comes ahead…

It is time for a change.

As some of you may know I have been working as a product manager and project manager at a mid-sized software company somewhere in the german province for nearly nine years. That time was great (well, mostly) as I got the chance to develop two new software systems aiming at the german (and to some extent) swiss music retail market, and in the end both found their fair market shares. I met a lot of fantastic people during that time, some of them I would not only call customers but also real friends. Not to mention my colleagues who were always ready to lend a hand when things refused to follow my plans.

But now I feel that the time has come to start something new, to leave the well-worn path and – once again – to head into the great unknown. Right now I do not have something like a backstage plan, I still do not definitely know if I will just find myself another job (offers and suggestions are welcome, nevertheless) or if I will start again as a freelancer like I did back in 1998. There seem to be so many cool and innovative ideas and projects out there that I would like to work on (actually I am already working on one, stay tuned) – I will see what really lies ahead.

I will leave my current employer by the end of June 2014.

I would like to say thanks to all those people I mentioned above who went the last year’s way with me – I am sure we took the high road at all times.  And even if our paths into the future separate soon I will be glad to hear from you now and then and will happily give advice where I forgot to transfer my knowledge to you. There  have been just too many nitty gritty details to tell you all.

And to all those people that will be accompanying me for the next years and projects: I am looking forward to meeting you.

Goodbye Gingerbread, goodbye Honeycomb

That’s it folks. From now on all my future apps for Android (and updates for existing ones) will no longer support Android versions which are older than Ice Cream Sandwich (4.0.3). Please forgive me if you own an older device, but the effort to support those is too high for me as a hobby developer. Older versions of existing apps are still available on Play Store if you visit it with on Pre-ICS-Device.

The rest, stay tuned – there are new things ahead.

One more thing…

No, not the New New New ipad or something like this, but just another app on Android’s Play Store. It is called “Minimal Bowling Score” and I wrote it to keep some stats for a new hobby. And although it has only a few features ( a lot more will come, I guess) I decided to release it early. So if you like to have a closer look and maybe be take an inspiring part in the future development  : Here it is …

And I wonder…

Hi everybody, and great thanks to everybody leaving comments and ratings on my apps on Google Play. Every opinion is appreciated, may it be positive or negative. Nevertheless, some comments make me wonder – just like today: Someone rated Tempolimit Speed HUD with three stars. And be assured – even if I love receiving five-star ratings, three is just ok. But I would like to know: If you judge the app to be somewhat mediocre, why is your only comment added to the rating the one word ” Good.” ?

Android Basics: Using TouchDelegates

Roman Nurik came up mentioning TouchDelegates in this post on Google Plus. Since he left open how TouchDelegates are used in detail and someone asked me – here is a very simple example. It should be rather self-explaining, if not, feel free to ask… If you like you can download the complete Eclipse project here

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package net.thomasmanthey.touchdelegateexample;

import android.app.Activity;
import android.graphics.Rect;
import android.os.Bundle;
import android.view.TouchDelegate;
import android.view.View;
import android.widget.Toast;

/**
 * This class demonstrates how to use a TouchDelegate to
 * expand the touchable ClickArea of a View within its parent View.
 * The example is quite simple, a Button sits centered in a Fullscreen Linear Layout
 * and gets some extra space to receive TouchEvents
 *
 * All code is licensed under Creative Commons License CC BY 3.0.
 *
 * @author Thomas Manthey
 *
 */

public class TouchDelegateExampleActivity extends Activity {
   
    //The View that delegates its touch events to the delegate
    View parent;
   
    //The Delegate that responds to touch events
    View delegateButton;
   
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        //Get references to the View in the layout
        parent = (View) findViewById(R.id.parent);
        delegateButton = (View) findViewById(R.id.cmdClickMe);
       
         //The TouchDelegate has to be set after everything has been calculated and drawn
        parent.post(getTouchDelegateAction(parent, delegateButton, 50,50,50,50));
    }
   
    /**
     * Adds a touchable padding around a View by constructing a TouchDelegate
     * and adding it to parent View.
     * @param parent The "outer" parent View
     * @param delegate The delegate that handles the TouchEvents
     * @param topPadding Additional touch area in pixels above View
     * @param bootomPadding Additional touch area in pixels below View
     * @param topPadding Additional touch area in pixels left to View
     * @param topPadding Additional touch area in pixels right to View
     * @return A runnable that you can post as action to a Views event queue
     */

    private static Runnable getTouchDelegateAction(final View parent, final View delegate, final int topPadding, final int bottomPadding, final int leftPadding, final int rightPadding) {
        return new Runnable() {
            @Override
            public void run() {
               
                //Construct a new Rectangle and let the Delegate set its values
                Rect touchRect = new Rect();
                delegate.getHitRect(touchRect);
               
                //Modify the dimensions of the Rectangle
                //Padding values below zero are replaced by zeros
                touchRect.top-=Math.max(0, topPadding);
                touchRect.bottom+=Math.max(0, bottomPadding);
                touchRect.left-=Math.max(0, leftPadding);
                touchRect.right+=Math.max(0, rightPadding);
               
                //Now we are going to construct the TouchDelegate
                TouchDelegate touchDelegate = new TouchDelegate(touchRect, delegate);
               
                //And set it on the parent
                parent.setTouchDelegate(touchDelegate);
               
            }
        };
    }
   
    /**
     * Just to show that we hit the target.
     * @param target
     */

    public void cmdClickMe_OnClick(View target) {
        Toast.makeText(this, "You clicked me. Go and save the cheerleader or do something more sensible.",Toast.LENGTH_SHORT).show();
    }
}

Work in progress…

Today I started working on Tempolimit GPS Speed HUD version 6. This will be a complete rewrite which will lead to a software being able to run in the background, to include information from external speed databases and a lot more. Stay tuned – and if you would like to be a beta tester, just comment on this post and I will get back to you…

Read it loud! Premium Version 1.1 available

I just released Version 1.1 of Read it loud! Premium, my SMS reading app available on Android Market. You can now use profile managers like Llama and others that are able to communicate with other apps via Android intent system to activate and deactivate it automatically.

How to? Just configure your profile manager to send the intent

de.exesmobile.messagereaderpremium.ACTIVATE

to activate it. Or send

de.exesmobile.messagereaderpremium.DEACTIVATE

to – well I think you can guess ;-)

Thanks to Joe Kurut who sent me an email with the idea for that feature!