package com.ptrprograms.stayawake.Activities;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.Notification;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.v4.app.NotificationCompat;
import android.support.v4.app.NotificationManagerCompat;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.wearable.Wearable;
import com.ptrprograms.stayawake.Models.IterationListItem;
import com.ptrprograms.stayawake.R;
import com.ptrprograms.stayawake.Services.TimerService;
import com.ptrprograms.stayawake.Utils.TimeUtil;
import java.util.ArrayList;
public class IterationActivity extends Activity
implements AdapterView.OnItemClickListener,
GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener
{
public static final String EXTRA_DURATION_SECONDS = "extra_duration_seconds";
public static final String ACTION_REMOVE_TIMER = "action_remove_timer";
public static final String ACTION_SHOW_ALARM = "action_show_alarm";
public static final String SAVED_STATE_SELECTED_DURATION = "saved_state_selected_duration";
private static final int MAX_ITERATION_SECONDS = 1200;
private ListView mListView;
private ArrayList<IterationListItem> mIterationTimes = new ArrayList<IterationListItem>();
private GoogleApiClient mGoogleApiClient;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if ( getIntent().getIntExtra( EXTRA_DURATION_SECONDS, 0 ) > 0 && getIntent().getIntExtra( EXTRA_DURATION_SECONDS, 0 ) <= MAX_ITERATION_SECONDS ) {
setupTimer( getIntent().getIntExtra( EXTRA_DURATION_SECONDS, 0 ) * 1000 );
finish();
return;
}
if( ( getIntent().getFlags() & Intent.FLAG_ACTIVITY_NEW_TASK ) == Intent.FLAG_ACTIVITY_NEW_TASK ) {
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences( this );
long duration = pref.getLong( SAVED_STATE_SELECTED_DURATION, 0 );
if( duration != 0 ) {
setupTimer( duration );
finish();
return;
}
}
setupIterationArray();
setContentView( R.layout.activity_iteration );
initList();
initGoogleApiClient();
}
private void setupIterationArray() {
int[] minutes = getResources().getIntArray( R.array.interation_minutes );
for( int i = 0; i < minutes.length; i++ ) {
IterationListItem item = new IterationListItem( getResources().getQuantityString( R.plurals.label_minutes, minutes[i], minutes[i] ),
minutes[i] * 60 * 1000 );
mIterationTimes.add( item );
}
}
private void initList() {
mListView = (ListView) findViewById( R.id.list_view );
mListView.setAdapter( new ArrayAdapter<IterationListItem>( this,
R.layout.simple_list_item, mIterationTimes ) );
mListView.setOnItemClickListener( this );
}
private void initGoogleApiClient() {
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi( Wearable.API )
.addConnectionCallbacks( this )
.addOnConnectionFailedListener( this )
.build();
}
private void setupTimer( long duration ) {
NotificationManagerCompat notificationManager = NotificationManagerCompat.from( this );
notificationManager.cancel( 1 );
notificationManager.notify( 1, buildNotification( duration ) );
registerAlarmManager(duration);
finish();
}
private Notification buildNotification( long duration ) {
Intent removeIntent = new Intent( ACTION_REMOVE_TIMER, null, this, TimerService.class );
PendingIntent pendingRemoveIntent = PendingIntent.getService( this, 0, removeIntent, PendingIntent.FLAG_UPDATE_CURRENT );
return new NotificationCompat.Builder( this )
.setSmallIcon( R.drawable.ic_launcher )
.setContentTitle( "Stay Awake" )
.setContentText(TimeUtil.getTimeString( duration ) )
.setUsesChronometer( true )
.setLargeIcon( BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher ) )
.setWhen( System.currentTimeMillis() + duration )
.addAction( R.drawable.ic_launcher, "Remove Timer", pendingRemoveIntent )
.setDeleteIntent( pendingRemoveIntent )
.setLocalOnly( true )
.build();
}
private void registerAlarmManager( long duration ) {
AlarmManager alarmManager = (AlarmManager) getSystemService( Context.ALARM_SERVICE );
Intent intent = new Intent( ACTION_SHOW_ALARM, null, this, TimerService.class );
PendingIntent pendingIntent = PendingIntent.getService( this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT );
long time = System.currentTimeMillis() + duration;
alarmManager.setExact( AlarmManager.RTC_WAKEUP, time, pendingIntent );
}
@Override
public void onConnected(Bundle bundle) {
}
@Override
protected void onStart() {
super.onStart();
if( mGoogleApiClient != null )
mGoogleApiClient.connect();
}
@Override
protected void onStop() {
super.onStop();
if( mGoogleApiClient != null && mGoogleApiClient.isConnected() )
mGoogleApiClient.disconnect();
}
@Override
protected void onDestroy() {
super.onDestroy();
}
@Override
public void onConnectionSuspended(int i) {
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences( this );
SharedPreferences.Editor editor = pref.edit();
editor.putLong( SAVED_STATE_SELECTED_DURATION, mIterationTimes.get( position ).getDuration() );
editor.commit();
setupTimer( mIterationTimes.get( position ).getDuration() );
}
}