package cz.destil.wearsquare.core;
import android.app.Activity;
import android.os.Bundle;
import com.google.android.gms.common.api.ResultCallback;
import com.google.android.gms.wearable.NodeApi;
import com.google.android.gms.wearable.Wearable;
import com.mariux.teleport.lib.TeleportClient;
import com.squareup.otto.Subscribe;
import cz.destil.wearsquare.event.ExceptionEvent;
import cz.destil.wearsquare.event.ExitEvent;
import cz.destil.wearsquare.util.ExceptionHandler;
/**
* Base activity for all others, handles Teleport, Otto and detecting connected state.
*
* @author David Vávra (david@vavra.me)
*/
public abstract class BaseActivity extends Activity {
private GlobalSubscription mGlobalSubscription;
private TeleportClient mTeleportClient;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
App.bus().register(this);
mGlobalSubscription = new GlobalSubscription();
App.bus().register(mGlobalSubscription);
mTeleportClient = new TeleportClient(this);
}
@Override
protected void onDestroy() {
App.bus().unregister(this);
App.bus().unregister(mGlobalSubscription);
super.onDestroy();
}
@Override
protected void onStart() {
super.onStart();
mTeleportClient.connect();
Wearable.NodeApi.getConnectedNodes(mTeleportClient.getGoogleApiClient()).setResultCallback(new ResultCallback
<NodeApi
.GetConnectedNodesResult>() {
@Override
public void onResult(NodeApi.GetConnectedNodesResult getConnectedNodesResult) {
if (getConnectedNodesResult.getNodes().size() > 0) {
startConnected();
} else {
startDisconnected();
}
}
});
}
/**
* Override in child to handle disconnected state.
*/
protected void startDisconnected() {
}
/**
* Override in child to handle connected state.
*/
protected void startConnected() {
}
@Override
protected void onStop() {
super.onStop();
mTeleportClient.disconnect();
}
public TeleportClient teleport() {
return mTeleportClient;
}
public void finishOtherActivities() {
App.bus().post(new ExitEvent());
}
private class GlobalSubscription {
@Subscribe
public void onException(ExceptionEvent e) {
ExceptionHandler.sendExceptionToPhone(e.getException(), mTeleportClient);
}
}
}