package com.aviary.android.feather; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import android.app.Activity; import android.os.Bundle; import com.aviary.android.feather.library.tracking.Tracker; // TODO: Auto-generated Javadoc /** * The Class MonitoredActivity. */ public class MonitoredActivity extends Activity { /** The m listeners. */ private final ArrayList<LifeCycleListener> mListeners = new ArrayList<LifeCycleListener>(); protected String mApiKey; /** * The listener interface for receiving lifeCycle events. The class that is interested in processing a lifeCycle event implements * this interface, and the object created with that class is registered with a component using the component's * <code>addLifeCycleListener<code> method. When * the lifeCycle event occurs, that object's appropriate * method is invoked. * * @see LifeCycleEvent */ public static interface LifeCycleListener { /** * Invoked when on activity is created. * * @param activity * the activity */ public void onActivityCreated( MonitoredActivity activity ); /** * On activity destroyed. * * @param activity * the activity */ public void onActivityDestroyed( MonitoredActivity activity ); /** * On activity paused. * * @param activity * the activity */ public void onActivityPaused( MonitoredActivity activity ); /** * On activity resumed. * * @param activity * the activity */ public void onActivityResumed( MonitoredActivity activity ); /** * On activity started. * * @param activity * the activity */ public void onActivityStarted( MonitoredActivity activity ); /** * On activity stopped. * * @param activity * the activity */ public void onActivityStopped( MonitoredActivity activity ); } /** * The Class LifeCycleAdapter. */ public static class LifeCycleAdapter implements LifeCycleListener { @Override public void onActivityCreated( MonitoredActivity activity ) {} @Override public void onActivityDestroyed( MonitoredActivity activity ) {} @Override public void onActivityPaused( MonitoredActivity activity ) {} @Override public void onActivityResumed( MonitoredActivity activity ) {} @Override public void onActivityStarted( MonitoredActivity activity ) {} @Override public void onActivityStopped( MonitoredActivity activity ) {} } /** * Adds the life cycle listener. * * @param listener * the listener */ public void addLifeCycleListener( LifeCycleListener listener ) { if ( mListeners.contains( listener ) ) return; mListeners.add( listener ); } /** * Removes the life cycle listener. * * @param listener * the listener */ public void removeLifeCycleListener( LifeCycleListener listener ) { mListeners.remove( listener ); } /* * (non-Javadoc) * * @see android.app.Activity#onCreate(android.os.Bundle) */ @Override protected void onCreate( Bundle savedInstanceState ) { super.onCreate( savedInstanceState ); for ( LifeCycleListener listener : mListeners ) { listener.onActivityCreated( this ); } Tracker.create( this, getApplicationContext().getPackageName(), getApiKey(), FeatherActivity.SDK_VERSION ); Tracker.open(); Tracker.upload(); } /** * Return the Application specific API-KEY * @return */ public String getApiKey() { if( null == mApiKey ) { try { mApiKey = readApiKey(); } catch ( IOException e ) { e.printStackTrace(); // right now it's only a warning and we will use a // default api key. mApiKey = "MXI5mzSf6Ei6gEQ5eTAOPg"; } } return mApiKey; } /** * Read the API-KEY from the assets/aviary-credentials.txt file * @param context * @return * @throws IOException */ private String readApiKey() throws IOException { InputStream stream = getAssets().open( "aviary-credentials.txt" ); int size = stream.available(); byte[] buffer = new byte[size]; stream.read( buffer ); stream.close(); return new String( buffer ); } /* * (non-Javadoc) * * @see android.app.Activity#onDestroy() */ @Override protected void onDestroy() { super.onDestroy(); for ( LifeCycleListener listener : mListeners ) { listener.onActivityDestroyed( this ); } } /* * (non-Javadoc) * * @see android.app.Activity#onStart() */ @Override protected void onStart() { super.onStart(); for ( LifeCycleListener listener : mListeners ) { listener.onActivityStarted( this ); } } /* * (non-Javadoc) * * @see android.app.Activity#onStop() */ @Override protected void onStop() { super.onStop(); for ( LifeCycleListener listener : mListeners ) { listener.onActivityStopped( this ); } } /* * (non-Javadoc) * * @see android.app.Activity#onPause() */ @Override protected void onPause() { Tracker.close(); Tracker.upload(); super.onPause(); } /* * (non-Javadoc) * * @see android.app.Activity#onResume() */ @Override protected void onResume() { Tracker.open(); super.onResume(); } }