/* * Copyright (C) 2014 Alex Korovyansky. */ package com.alexkorovyansky.wearpomodoro.app.ui; import android.animation.ObjectAnimator; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Bundle; import android.os.Vibrator; import android.support.wearable.view.WatchViewStub; import android.view.View; import android.view.animation.AccelerateDecelerateInterpolator; import android.widget.TextView; import com.alexkorovyansky.wearpomodoro.BuildConfig; import com.alexkorovyansky.wearpomodoro.R; import com.alexkorovyansky.wearpomodoro.app.base.BasePomodoroActivity; import com.alexkorovyansky.wearpomodoro.app.receivers.PomodoroAlarmReceiver; import com.alexkorovyansky.wearpomodoro.helpers.PomodoroMaster; import com.alexkorovyansky.wearpomodoro.helpers.PomodoroUtils; import com.alexkorovyansky.wearpomodoro.helpers.ServiceProvider; import com.alexkorovyansky.wearpomodoro.helpers.UITimer; import com.alexkorovyansky.wearpomodoro.model.ActivityType; import com.felipecsl.gifimageview.library.GifImageView; import hugo.weaving.DebugLog; public class PomodoroTransitionActivity extends BasePomodoroActivity implements SensorEventListener { public static final String EXTRA_NEXT_ACTIVITY_TYPE = BuildConfig.APPLICATION_ID + ".extra.NEXT_ACTIVITY_TYPE"; private PomodoroMaster pomodoroMaster; private UITimer uiTimer; private SensorManager sensorManager; private Vibrator vibrator; private GifImageView awesomeGif; private ActivityType nextActivityType; private int stepSensorTicks; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentViews(R.layout.activity_transite_rect, R.layout.activity_transite_round); this.pomodoroMaster = ServiceProvider.getInstance().getPomodoroMaster(this); this.uiTimer = ServiceProvider.getInstance().getUITimer(); this.sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); this.vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE); this.nextActivityType = ActivityType.fromValue(getIntent().getIntExtra(EXTRA_NEXT_ACTIVITY_TYPE, -1)); } @Override public void onLayoutInflated(WatchViewStub stub) { super.onLayoutInflated(stub); PomodoroAlarmReceiver.completeWakefulIntent(getIntent()); pomodoroMaster.cancelNotification(); vibrator.vibrate(1000); awesomeGif = (GifImageView) stub.findViewById(R.id.transition_awesome_gif); awesomeGif.setBytes(PomodoroUtils.readRawResourceBytes(getResources(), R.raw.pomodoro)); awesomeGif.startAnimation(); if (nextActivityType.isBreak()) { float dp = PomodoroUtils.dipToPixels(this, 1); ObjectAnimator anim = ObjectAnimator.ofFloat(awesomeGif, View.TRANSLATION_X, -8*dp, 8*dp); anim.setDuration(1200); anim.setRepeatMode(ObjectAnimator.REVERSE); anim.setRepeatCount(ObjectAnimator.INFINITE); anim.setInterpolator(new AccelerateDecelerateInterpolator()); anim.start(); } final TextView messageText = (TextView) stub.findViewById(R.id.transition_text); final int eatenPomodoros = pomodoroMaster.getEatenPomodoros(); if (nextActivityType.isBreak()) { int templateId = nextActivityType == ActivityType.LONG_BREAK ? R.string.transition_text_before_long_break_message_template : R.string.transition_text_before_short_break_message_template; messageText.setText(String.format( getString(templateId), eatenPomodoros + 1)); activateStepsCounter(); } else if (nextActivityType.isPomodoro()) { messageText.setText(String.format( getString(R.string.transition_text_before_pomodoro_message_template), eatenPomodoros + 1)); uiTimer.schedule(new UITimer.Task() { @Override public void run() { cancelTask(); finish(); pomodoroMaster.start(ActivityType.POMODORO); } }, 3000, "PomodoroTransitionActivity.DelayTimer"); } } @DebugLog @Override public void onSensorChanged(SensorEvent event) { if (event.sensor.getType() == Sensor.TYPE_STEP_COUNTER) { ++stepSensorTicks; if (stepSensorTicks > 5) { sensorManager.unregisterListener(this); pomodoroMaster.start(nextActivityType); finish(); } } } @DebugLog @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } @Override protected void onDestroy() { super.onDestroy(); awesomeGif.stopAnimation(); sensorManager.unregisterListener(this); uiTimer.cancel("PomodoroTransitionActivity.DelayTimer"); } private void activateStepsCounter() { stepSensorTicks = 0; Sensor stepCountSensor = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER); sensorManager.registerListener(this, stepCountSensor, SensorManager.SENSOR_DELAY_FASTEST); } }