Android Open Source - irish_rail_next Station Update Alarm






From Project

Back to project page irish_rail_next.

License

The source code is released under:

MIT License

If you think the Android project irish_rail_next listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package rdcl.ie.pebbleirishrailnext.api;
//from   w  ww  .ja  v a2s. c  om
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

import com.getpebble.android.kit.PebbleKit;
import com.getpebble.android.kit.util.PebbleDictionary;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.UUID;

import rdcl.ie.pebbleirishrailnext.R;

/**
 * Created by Warren on 17/11/2014.
 */
public class StationUpdateAlarm extends BroadcastReceiver
{
  /// Alarm Manager
  private static AlarmManager alarmManager   = null;
  /// Pending Intent
  private static PendingIntent pending     = null;

  // Station Data Parameters
  private static final String PARAM_STATION_NAME   = "rdcl.ie.pebbleirishrailnext.service.extra.STATION_NAME";
  private static final String PARAM_STATION_CODE   = "rdcl.ie.pebbleirishrailnext.service.extra.STATION_CODE";
  private static final String PARAM_STATION_LAT   = "rdcl.ie.pebbleirishrailnext.service.extra.STATION_LAT";
  private static final String PARAM_STATION_LON   = "rdcl.ie.pebbleirishrailnext.service.extra.STATION_LON";

  private static final int MAX_DISPLAYED_TRAINS   = 4;

  /**
   * Begin or continue the update loop
   * @param context  Application Context
   * @param station  Subject Station
   */
  public static void set( Context context, IrishRailApi.StationInfo station )
  {
    if( alarmManager == null )
    {
      alarmManager = ( AlarmManager ) context.getSystemService( Context.ALARM_SERVICE );

    }

    alarmManager.cancel( pending );

    Intent intent = new Intent( context, StationUpdateAlarm.class );

    intent.putExtra( PARAM_STATION_NAME, station.name );
    intent.putExtra( PARAM_STATION_CODE, station.code );
    intent.putExtra( PARAM_STATION_LAT, station.latitude );
    intent.putExtra( PARAM_STATION_LON, station.longitude );

    pending = PendingIntent.getBroadcast( context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT );
    alarmManager.setInexactRepeating( AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 20000, pending );
  }

  /**
   * Stop any pending updates, halting the update loop
   * @param context  Application Context
   */
  public static void stop( Context context )
  {
    if( alarmManager != null )
    {
      alarmManager.cancel( pending );
    }
    UUID uuid = UUID.fromString( context.getString( R.string.pebble_app_uuid ) );
    updatePebble( context, uuid, "Select Station", null );
  }

  public static void updatePebble( Context context, UUID uuid, String station, List<IrishRailApi.TrainInfo> trains )
  {
    PebbleDictionary dictionary = new PebbleDictionary();
    dictionary.addString( 0, station );

    if( trains == null )
    {
      trains = new ArrayList<IrishRailApi.TrainInfo>();
    }

    int index = 1;

    for( int i = 0; i < MAX_DISPLAYED_TRAINS; i++ )
    {
      if( i < trains.size() )
      {
        dictionary.addString( index++, trains.get( i ).destination );
        dictionary.addInt32( index++, trains.get( i ).due );
        dictionary.addInt32( index++, trains.get( i ).direction == IrishRailApi.TrainInfo.Direction.NORTH ? 0 : 1 );
      }
      else
      {
        dictionary.addString( index++,   "" );
        dictionary.addInt32( index++,   -1 );
        dictionary.addInt32( index++,   2 );
      }
    }

    PebbleKit.sendDataToPebble( context, uuid, dictionary );
  }

  /**
   * Send train information for the specified station to the connected Pebble Watch
   * @param context  Application Context
   * @param station  Subject Station
   */
  public static void send( final Context context, IrishRailApi.StationInfo station )
  {
    IrishRailApi api = new IrishRailApi( context );

    api.getTrainList( station, new IrishRailApi.OnTrainListReceivedListener()
    {
      @Override
      public void onTrainListReceived( IrishRailApi api, IrishRailApi.StationInfo station, List<IrishRailApi.TrainInfo> trains )
      {
        if( PebbleKit.isWatchConnected( context ) == false )
        {
          stop( context );
          return;
        }

        Log.d( "Station Update Alarm", "Received " + trains.size() + " Trains!" );
        Collections.sort( trains );

        UUID uuid = UUID.fromString( context.getString( R.string.pebble_app_uuid ) );
        updatePebble( context, uuid, station.name, trains );
      }

      @Override
      public void onTrainListingError( IrishRailApi api, Exception exception )
      {}
    } );
  }

  @Override
  public void onReceive( final Context context, Intent intent )
  {
    IrishRailApi.StationInfo station = new IrishRailApi.StationInfo();
    station.name     = intent.getStringExtra( PARAM_STATION_NAME );
    station.code     = intent.getStringExtra( PARAM_STATION_CODE );
    station.latitude  = intent.getDoubleExtra( PARAM_STATION_LAT, 0.0 );
    station.longitude  = intent.getDoubleExtra( PARAM_STATION_LON, 0.0 );

    send( context, station );
  }
}




Java Source Code List

rdcl.ie.pebbleirishrailnext.ApplicationTest.java
rdcl.ie.pebbleirishrailnext.MainActivity.java
rdcl.ie.pebbleirishrailnext.api.IrishRailApi.java
rdcl.ie.pebbleirishrailnext.api.StationListingXMLParser.java
rdcl.ie.pebbleirishrailnext.api.StationUpdateAlarm.java
rdcl.ie.pebbleirishrailnext.api.TrainListingXMLParser.java
rdcl.ie.pebbleirishrailnext.service.StationUpdateService.java