package cz.destil.glasquare.activity;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.PowerManager;
import android.view.MotionEvent;
import android.view.View;
import com.google.android.glass.touchpad.Gesture;
import com.google.android.glass.touchpad.GestureDetector;
import butterknife.ButterKnife;
import cz.destil.glasquare.api.Auth;
/**
* Base activity which handles common stuff like analytics.
*
* @author David 'Destil' Vavra (david@vavra.me)
*/
abstract public class BaseActivity extends Activity {
private GestureDetector mGestureDetector;
private PowerManager.WakeLock wakeLock;
/**
* Override in children.
*/
protected int getLayoutId() {
return -1;
}
/**
* Override in children.
*/
protected View getLayoutView() {
return null;
}
/**
* Override in children
*/
protected void loadData() {
}
/**
* You can override this in child. Default implemention is to open options menu.
*/
protected void onTap() {
openOptionsMenu();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
boolean hasUi = false;
if (getLayoutId() == -1) {
if (getLayoutView() != null) {
setContentView(getLayoutView());
hasUi = true;
}
} else {
setContentView(getLayoutId());
hasUi = true;
}
if (hasUi) {
ButterKnife.inject(this);
loadData();
mGestureDetector = createGestureDetector(this);
}
}
/*
Temporarily disabling Google Analytics, because it crashes on XE16
@Override
public void onStart() {
super.onStart();
if (!BuildConfig.DEBUG) {
EasyTracker.getInstance(this).activityStart(this);
}
}
@Override
public void onStop() {
super.onStop();
if (!BuildConfig.DEBUG) {
EasyTracker.getInstance(this).activityStop(this);
}
}*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == LoginActivity.REQUEST_CODE) {
if (resultCode == RESULT_OK) {
Auth.saveToken(data.getStringExtra(LoginActivity.EXTRA_TOKEN));
loadData();
} else {
finish();
}
}
}
private GestureDetector createGestureDetector(Context context) {
GestureDetector gestureDetector = new GestureDetector(context);
gestureDetector.setBaseListener(new GestureDetector.BaseListener() {
@Override
public boolean onGesture(Gesture gesture) {
if (gesture == Gesture.TAP) {
onTap();
return true;
}
return false;
}
});
return gestureDetector;
}
/*
* Send generic motion events to the gesture detector
*/
@Override
public boolean onGenericMotionEvent(MotionEvent event) {
if (mGestureDetector != null) {
return mGestureDetector.onMotionEvent(event);
}
return false;
}
public void acquireWakeLock() {
if (wakeLock == null) {
PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
wakeLock = powerManager.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "glasquare");
wakeLock.acquire();
}
}
public void releaseWakeLock() {
if (wakeLock != null) {
if (wakeLock.isHeld()) {
wakeLock.release();
wakeLock = null;
}
}
}
}