13 giugno 2013

LabelToDo 1.0.3 released

 LabelToDo 1.0.3 on the road!!! Changelog:

Version 1.0.3
★ New widget: Task quick add
★ Larger fonts for notification page
★ Minor bugfixes

Version 1.0.2
★ New widget: Label shortcut on home screen
★ Notification sound choice
★ More options for postpone notifications
★ Bug fixed for landascape screen orientation

Version 1.0.1
★ Custom font size
★ Minor bug fix

Next version
★ New widgets are coming!!!

03 giugno 2013

Android development: shortcut vs widget part 2

Second part of post "Android development: shortcut vs widget", the code.

As from previous post the necessary steps to create a shortcut that user can add to his home screen are 3:
  • create the activity launched when the user adds the shortcut
  • add the previous activity to manifest.xml
  • write the code for previous activity

1. create the activity launched when the user adds the shortcut
This is the simplest task, you have only to create a class that exend Activity, in my case the acticity name is Widget1LabelShortcut.

2. add the previous activity to manifest.xml
You have to add the previous activity Widget1LabelShortcut to manifest.xml. It is a normal activity with an intent-filter as the following code.
Be careful, the shortcut will appear in the list of widgets (or shortcuts depending on the Android version ) with the application name as label . If you want to display a custom name you must add the field label in the manifest, as in the example below. This can be useful for the user to understand what the shortcut makes and if you create multiple shortcuts to avoid confusion.

<activity 
  android:name="com.crbin1.labeltodo.Widget1LabelShortcut"  
  android:configChanges="keyboardHidden|orientation|screenSize"
  android:label="Label shortcut">
  <intent-filter>
    <action android:name="android.intent.action.CREATE_SHORTCUT"/>
    <category android:name="android.intent.category.DEFAULT"/>
  </intent-filter> 
</activity>

3. write the code for activity Widget1LabelShortcut
And now the Activity code to create the shortcut.
In the simplest case this activity is invisible to the user and it only serves to create the shortcut, all the code will be in the method onCreate.
In other cases the activity can have its own ContentView, a layout and respond to user interaction that can customize the shortcut.
The code below with comments should be self explanatory.


  @Override
  protected void onCreate(Bundle savedInstanceState) {
    // You have to create 2 Intents
    
    // Intent #1.  It is the intent that will launch your targer Activity 
    // when user will click the shortcut.
    Intent shortcutIntent = new Intent(this, ActivityTarget.class);
    // You can use this intent to pass parameters to target activity
    // in my app the label id for example
    long labelId; // [...] code to retrieve labelId
    shortcutIntent.putExtra("tid", labelId);
    // Or to set flags
    shortcutIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    shortcutIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
    
    // Intent #2.  It is the intent used to create shortcut.
    Intent intent = new Intent();
    // This intent must have:
    // --- the previous shortcut intent
    intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
    // --- a name showed in home screen
    String name; // [...] code to retrieve name
    intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, name);
    // --- an icon showed in home screen
    ShortcutIconResource ir = 
        Intent.ShortcutIconResource.fromContext(this, R.drawable.w1);
        intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, ir);
        
        // that's all, now you need to set shortcut and finish activity
        setResult(RESULT_OK, intent);
        finish();

    super.onCreate(savedInstanceState);
  }