Announcing the Train Status Beta Testers Google+ Community

A beta tester community has been created for Indian Train Status (Android & iOS).  Join the community & check out latest development features:

And after joining the community, to opt – in for Android beta testing, visit:

For iOS, it is  by email invitation, so just send in your email and you will be invited for ‘TestFlight’ beta testing.


Announcing: The Business Card App

Your business card on your phone!

Business Card App - Screenshot

☆ A business card, ready to share anytime, right on your phone.
☆ Works 100% offline with a big, bright QR code that may be scanned using any QR scanner, on any platform.
☆ Can be shared using all available options – including Messaging, Bluetooth & NFC/Android Beam.
☆ Syncs with your phone ‘ME’ contact card for even better sharing (optional).

In short, if you are ever likely to forget your business card – or would like to go paperless – this app is for you!

Get it on Google Play

TravelKhana Android Mobile App – Food in Train – Khana Online

TravelKhana: a place where you can order your food during your train journey. TravelKhana is the largest food delivery provider in train, through out more than 2O0 Indian railway junctions. You can visit from your desktop, mobile to book your khana online, TravelKhana delivery boy will be right your train seat to deliver your order.
TravelKhana LogoTravelKhana understands the need of Indian railway passengers, and that’s why it has introduced some utilities too to make your rail journey better!

TravelKhana has just introduced their android mobile app ( where you can access all TravelKhana services. Get the TravelKhana train food order booking application.

With this app you can book food anywhere in India while traveling in a train. Offers choice of food from Veg, Non Veg, Thalis, Wraps, Pizza. TravelKhana spot your running train status and gets the order delivered fresh near your seat while you are in a train. Use TravelKhana to order food at more than 200 locations across India while traveling in a train.

Multi Courier Tracker: Enhanced

The Multi Courier Tracker Android app from Sasyabook – The Lord of the Shipments: One App to Track Them All!
Multi Courier Tracker


  • Support for no less than one hundred and eleven delivery companies!
  • Complete tracking history with color scheme and tagging for easy identification
  • Smart paste: paste text directly from an SMS or email – even an entire message, or a link – and the tracking number will be searched and pasted
  • Barcode scanning
  • The Magic Star ‘★’ to bring more frequently used couriers to the top of the list
  • Offline saving of track results
  • Sharing & printing of the tracking documents
  • Constantly updated and improved based on user feedback
  • And of course, all from the convenience of your Android device, in the palm of your hand, anytime, anywhere

You really should get it now – if you haven’t already!

Get it on Google Play

Sorting RadioButtons: The Magic Star ‘★’

The Multi Courier Tracker app uses two vertical RadioGroups, with lots of RadioButtons in each, for selecting which courier to track.
Magic Star
Once the number of couriers gradually increased to 50, the question arose how to give an option to bring the more frequently required / used ones to the top.

The simplest solution was to dispense with the RadioButtons and go for a ListView. But there was something nice about the RadioButtons!

How it was done, retaining the RadioButtons:

  1. First, removed all the RadioButtons from the XML layout
  2. Instead, made an array of RadioButtons in code, and also an array of ids, with one integer id for each courier. The names and colors for each courier button was mapped against its id, in two SparseIntArrays.
  3. In the onCreate() Method, looped through the id array to create each RadioButton, and add it to the RB array. Each RadioButton was also mapped to its id, in a global SparseArray.
    int index = 0;
    for (int crid:idarray) {
    RadioButton rbinst = new RadioButton(this);
    //name - Points to a String resource
    int name = nameMap.get(crid);
    int color = colorMaps.get(crid);
    //The Key Step: The id of each RB is set here
    //Global SparseArray mapping each RB to an id
    cridMap.put(crid, rbinst);
  4. The RadioButtons are then added one-by-one to the layout in the onStart() method using a loop and a flag variable to put them into one of the two Radiogroups in tandem:
    boolean odd=true;
    for (int id : idarray) {
    (odd ? rgCR1 : rgCR2).addView(cridMap.get(id));
    odd = !odd;
  5. When the user tracks a courier, the counter for that courier is incremented and stored in a SharedPreference integer value, with the key as the courier id + “_COUNT”
    String COUNT_KEY = CRID+"_COUNT";
    int crcount = sharedpref.getInt(COUNT_KEY, 0);
  6. Each time the activity starts,   the courier tracking counts are retrieved, again in a loop, and mapped to each courier id in a SparseIntArray. The counts are also separately added to an Array, which is then sorted using Arrays.sort(array). The id against each track count is then retrieved in descending order and stored in another array the sorted id array.
    Here is the full method:
    void sortRbs() {
    SparseIntArray crcounts = new SparseIntArray(idarray.length);
    int[] track_counts = new int[idarray.length];
    int index = 0;
    for (int crid:idarray) {
    int crcount = sharedpref.getInt(crid+"_COUNT", 0);
    counts[index++] = crcount;
    crcounts.put(crid, crcount);
    //The Powerhouse: One-line sorting step
    ArrayList cridtemp = new ArrayList(crids.length);
    for (int crid : idarray) {
    index = 0;
    //Descending loop
    for (int i=track_counts.length-1;i>-1;i--) {
    int removedindex = 0;
    for (int j=0;j<cridtemp.size(); j++) {
    int crid = cridtemp.get(j);
    if (crcounts.get(crid)==track_counts[i]){
    //sorted_crids is the global array variable that will hold the sorted ids
    removedindex = j;
  7. A button which toggles its title between the unicode characters ☆ & ★ was added to the view. When clicked, a boolean sort variable is set/unset. The RadioButtons are removed from the RadioGroups and added back.  Depending on the state of the boolean sort variable, the sorted or unsorted id arrays are used to order the added RadioButtons – and thereby achieving the desired result.


Get it on Google Play

ITS for Android: QuickMarks

Indian Train Status v5.71 for Android has a new feature, QuickMarks – for quick, one-click access to any one of:

  • Live status of a train, at station
  • Live status of trains running from one station to another
  • List of trains between two stations.

Here is a short video explaining what this feature is all about:

Get it on Google Play