package cz.destil.glasquare.activity;
import android.content.Context;
import android.media.AudioManager;
import android.view.Menu;
import android.view.View;
import android.widget.TextView;
import com.google.android.glass.media.Sounds;
import butterknife.InjectView;
import butterknife.Optional;
import cz.destil.glasquare.R;
import cz.destil.glasquare.util.BaseAsyncTask;
import cz.destil.glasquare.view.ProgressBar;
/**
* Base activity which handles showing progress.
*
* @author David 'Destil' Vavra (david@vavra.me)
*/
public abstract class BaseProgressActivity extends BaseActivity {
private static final int GRACE_PERIOD_DURATION = 4; // in seconds
@InjectView(R.id.progress_bar)
ProgressBar vProgressBar;
@InjectView(R.id.progress_text)
TextView vProgressText;
@Optional
@InjectView(R.id.grace_period_text)
TextView vGracePeriodText;
private int gracePeriodResourceId;
private GracePeriodListener gracePeriodListener;
private BaseAsyncTask graceTask;
private boolean mGraceGone = false;
protected boolean mMenuItemSelected = false;
@Override
public void onStop() {
interruptGrace();
super.onStop();
}
@Override
protected void onTap() {
if (!mGraceGone) {
interruptGrace();
super.onTap(); // opens option menu
}
}
@Override
public void onOptionsMenuClosed(Menu menu) {
super.onOptionsMenuClosed(menu);
if (!mMenuItemSelected && !mGraceGone) {
restartGrace();
}
}
protected void restartGrace() {
if (graceTask != null) {
showGracePeriod(gracePeriodResourceId, gracePeriodListener);
}
}
private void interruptGrace() {
if (graceTask != null) {
graceTask.cancel(true);
vProgressBar.stopProgress();
vProgressBar.setVisibility(View.GONE);
if (vGracePeriodText != null) {
vGracePeriodText.setVisibility(View.GONE);
}
releaseWakeLock();
}
}
protected void showProgress(int resourceId) {
vProgressText.setText(resourceId);
vProgressBar.setVisibility(View.VISIBLE);
vProgressBar.startIndeterminate();
vProgressText.setVisibility(View.VISIBLE);
if (vGracePeriodText != null) {
vGracePeriodText.setVisibility(View.GONE);
}
acquireWakeLock();
}
protected void showSuccess(int resourceId) {
vProgressText.setText(resourceId);
vProgressBar.setVisibility(View.GONE);
vProgressText.setVisibility(View.VISIBLE);
AudioManager audio = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
audio.playSoundEffect(Sounds.SUCCESS);
if (vGracePeriodText != null) {
vGracePeriodText.setVisibility(View.GONE);
}
releaseWakeLock();
}
protected void hideProgress() {
vProgressBar.setVisibility(View.GONE);
vProgressText.setVisibility(View.GONE);
AudioManager audio = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
audio.playSoundEffect(Sounds.SUCCESS);
if (vGracePeriodText != null) {
vGracePeriodText.setVisibility(View.GONE);
}
releaseWakeLock();
}
protected void showError(int resourceId) {
vProgressText.setText(resourceId);
vProgressBar.setVisibility(View.GONE);
vProgressText.setVisibility(View.VISIBLE);
if (vGracePeriodText != null) {
vGracePeriodText.setVisibility(View.GONE);
}
AudioManager audio = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
audio.playSoundEffect(Sounds.ERROR);
releaseWakeLock();
}
protected void showGracePeriod(int resourceId, final GracePeriodListener listener) {
gracePeriodResourceId = resourceId;
gracePeriodListener = listener;
vProgressText.setText(resourceId);
vProgressBar.startProgress(GRACE_PERIOD_DURATION * 1000);
vProgressBar.setVisibility(View.VISIBLE);
vProgressText.setVisibility(View.VISIBLE);
vGracePeriodText.setVisibility(View.VISIBLE);
mGraceGone = false;
mMenuItemSelected = false;
acquireWakeLock();
graceTask = new BaseAsyncTask() {
@Override
public void inBackground() {
try {
Thread.sleep(GRACE_PERIOD_DURATION * 1000);
} catch (InterruptedException e) {
// ignore
}
}
@Override
public void postExecute() {
vGracePeriodText.setVisibility(View.GONE);
releaseWakeLock();
mGraceGone = true;
listener.onGracePeriodCompleted();
}
};
graceTask.start();
}
protected interface GracePeriodListener {
void onGracePeriodCompleted();
}
}