Skip to content

Commit

Permalink
refactored main service to dispose commands
Browse files Browse the repository at this point in the history
  • Loading branch information
Nic Jackson committed Jan 25, 2015
1 parent 87f7f4a commit 51d3995
Show file tree
Hide file tree
Showing 17 changed files with 132 additions and 75 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import com.njackson.events.UI.StartButtonTouchedEvent;
import com.njackson.events.UI.StopButtonTouchedEvent;
import com.njackson.events.GoogleFitCommand.GoogleFitStatus;
import com.njackson.events.base.BaseStatus;
import com.njackson.test.application.TestApplication;
import com.njackson.utils.googleplay.IGooglePlayServices;
import com.njackson.utils.services.IServiceStarter;
Expand Down Expand Up @@ -138,7 +139,7 @@ private ConnectionResult createConnectionResult() {
public void testSendsTrackAppOpenedAnalyticsOnCreate() {
_activity = getActivity();

verify(_mockAnalytics,times(1)).trackAppOpened(any(Intent.class));
verify(_mockAnalytics, times(1)).trackAppOpened(any(Intent.class));
}

@SmallTest
Expand All @@ -161,7 +162,7 @@ public void testStartsActivityServiceOnCreateWhenActivityRecognitionPreferenceSe
when(_mockPreferences.getBoolean("ACTIVITY_RECOGNITION",false)).thenReturn(true);
_activity = getActivity();

verify(_mockServiceStarter,times(1)).startActivityService();
verify(_mockServiceStarter, times(1)).startActivityService();
}

@SmallTest
Expand Down Expand Up @@ -213,7 +214,7 @@ public void testOnOtherGoogleFitEventsDoesNothing() throws IntentSender.SendInte

_activity = getActivity();

_bus.post(new GoogleFitStatus(GoogleFitStatus.State.GOOGLEFIT_CONNECTED, createConnectionResult()));
_bus.post(new GoogleFitStatus(BaseStatus.Status.UNABLE_TO_START, createConnectionResult()));

verify(_mockPlayServices,timeout(2000).times(0)).connectionResultHasResolution(any(ConnectionResult.class));
verify(_mockPlayServices,timeout(2000).times(0)).startConnectionResultResolution(any(ConnectionResult.class), any(MainActivity.class));
Expand All @@ -225,7 +226,7 @@ public void testOnGoogleFitConnectionFailedWithNoResolutionShowsErrorDialog() {

_activity = getActivity();

_bus.post(new GoogleFitStatus(GoogleFitStatus.State.GOOGLEFIT_CONNECTION_FAILED, createConnectionResult()));
_bus.post(new GoogleFitStatus(BaseStatus.Status.UNABLE_TO_START, createConnectionResult()));

verify(_mockPlayServices,timeout(2000).times(1)).showConnectionResultErrorDialog(any(ConnectionResult.class), any(MainActivity.class));
}
Expand All @@ -236,9 +237,9 @@ public void testOnGoogleFitConnectionFailedWitResolutionDoesNotShowErrorDialog()

_activity = getActivity();

_bus.post(new GoogleFitStatus(GoogleFitStatus.State.GOOGLEFIT_CONNECTION_FAILED, createConnectionResult()));
_bus.post(new GoogleFitStatus(BaseStatus.Status.UNABLE_TO_START, createConnectionResult()));

verify(_mockPlayServices,timeout(2000).times(0)).showConnectionResultErrorDialog(any(ConnectionResult.class),any(MainActivity.class));
verify(_mockPlayServices,timeout(2000).times(0)).showConnectionResultErrorDialog(any(ConnectionResult.class), any(MainActivity.class));
}

@SmallTest
Expand All @@ -247,7 +248,7 @@ public void testOnGoogleFitConnectionFailedWithResolutionStartsResultResolution(

_activity = getActivity();

_bus.post(new GoogleFitStatus(GoogleFitStatus.State.GOOGLEFIT_CONNECTION_FAILED));
_bus.post(new GoogleFitStatus(BaseStatus.Status.UNABLE_TO_START));

verify(_mockPlayServices,timeout(2000).times(1)).startConnectionResultResolution(any(ConnectionResult.class), any(MainActivity.class));
}
Expand All @@ -258,8 +259,8 @@ public void testOnGoogleFitConnectionFailedWithResolutionReceivedSecondTimeDoesN

_activity = getActivity();

_bus.post(new GoogleFitStatus(GoogleFitStatus.State.GOOGLEFIT_CONNECTION_FAILED));
_bus.post(new GoogleFitStatus(GoogleFitStatus.State.GOOGLEFIT_CONNECTION_FAILED));
_bus.post(new GoogleFitStatus(BaseStatus.Status.UNABLE_TO_START));
_bus.post(new GoogleFitStatus(BaseStatus.Status.UNABLE_TO_START));

verify(_mockPlayServices,timeout(2000).times(1)).startConnectionResultResolution(any(ConnectionResult.class), any(MainActivity.class));
}
Expand All @@ -272,7 +273,7 @@ public void testStopsActivityRecognitionServiceWhenACTIVITY_RECOGNITIONPreferenc

when(_mockPreferences.getBoolean("ACTIVITY_RECOGNITION", false)).thenReturn(false);

_activity.onSharedPreferenceChanged(_mockPreferences,"ACTIVITY_RECOGNITION");
_activity.onSharedPreferenceChanged(_mockPreferences, "ACTIVITY_RECOGNITION");

verify(_mockServiceStarter,times(1)).stopActivityService();
}
Expand All @@ -285,7 +286,7 @@ public void testStartsActivityRecognitionServiceWhenACTIVITY_RECOGNITIONPreferen

when(_mockPreferences.getBoolean("ACTIVITY_RECOGNITION", false)).thenReturn(true);

_activity.onSharedPreferenceChanged(_mockPreferences,"ACTIVITY_RECOGNITION");
_activity.onSharedPreferenceChanged(_mockPreferences, "ACTIVITY_RECOGNITION");

verify(_mockServiceStarter,times(1)).startActivityService();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import com.njackson.events.ActivityRecognitionCommand.ActivityRecognitionStatus;
import com.njackson.events.ActivityRecognitionCommand.NewActivityEvent;
import com.njackson.events.base.BaseChangeState;
import com.njackson.events.base.BaseStatus;
import com.njackson.gps.IForegroundServiceStarter;
import com.njackson.test.application.TestApplication;
import com.njackson.utils.googleplay.IGooglePlayServices;
Expand Down Expand Up @@ -117,7 +118,8 @@ public void testGooglePlayDisableMessageReceived() throws Exception {
_bus.post(new ActivityRecognitionChangeState(BaseChangeState.State.START));
_stateLatch.await(1000, TimeUnit.MILLISECONDS);

assertEquals(ActivityRecognitionStatus.State.PLAY_SERVICES_NOT_AVAILABLE, _activityStatusEvent.getState());
assertEquals(BaseStatus.Status.UNABLE_TO_START, _activityStatusEvent.getStatus());
assertFalse(_activityStatusEvent.playServicesAvailable());
}

@SmallTest
Expand All @@ -128,7 +130,18 @@ public void testServiceStartedMessageReceived() throws Exception {
_bus.post(new ActivityRecognitionChangeState(BaseChangeState.State.START));
_stateLatch.await(1000, TimeUnit.MILLISECONDS);

assertEquals(ActivityRecognitionStatus.State.STARTED, _activityStatusEvent.getState());
assertEquals(BaseStatus.Status.STARTED, _activityStatusEvent.getStatus());
}

@SmallTest
public void testServiceStoppedMessageReceived() throws Exception {
when(_playServices.isGooglePlayServicesAvailable(any(Context.class))).thenReturn(ConnectionResult.SUCCESS);

_command.execute(_app);
_bus.post(new ActivityRecognitionChangeState(BaseChangeState.State.STOP));
_stateLatch.await(1000, TimeUnit.MILLISECONDS);

assertEquals(BaseStatus.Status.STOPPED, _activityStatusEvent.getStatus());
}

@SmallTest
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import com.njackson.events.GoogleFitCommand.GoogleFitChangeState;
import com.njackson.events.GoogleFitCommand.GoogleFitStatus;
import com.njackson.events.base.BaseChangeState;
import com.njackson.events.base.BaseStatus;
import com.njackson.fit.GoogleFitServiceCommand;
import com.njackson.test.application.TestApplication;
import com.njackson.utils.googleplay.IGoogleFitSessionManager;
Expand Down Expand Up @@ -104,7 +105,7 @@ public void testOnStartSendsServiceStarted() throws Exception {
_bus.post(new GoogleFitChangeState(BaseChangeState.State.START));
_stateLatch.await(1000, TimeUnit.MILLISECONDS);

assertEquals(GoogleFitStatus.State.SERVICE_STARTED, _state.getState());
assertEquals(BaseStatus.Status.STARTED, _state.getStatus());
}

@SmallTest
Expand All @@ -113,7 +114,7 @@ public void testOnStopSendsServiceStopped() throws Exception {
_bus.post(new GoogleFitChangeState(BaseChangeState.State.STOP));
_stateLatch.await(1000, TimeUnit.MILLISECONDS);

assertEquals(GoogleFitStatus.State.SERVICE_STOPPED, _state.getState());
assertEquals(BaseStatus.Status.STOPPED, _state.getStatus());
}

@SmallTest
Expand Down Expand Up @@ -190,7 +191,7 @@ public void testOnConnectionFailedPostsEvent() throws Exception {

_stateLatch.await(2000,TimeUnit.MILLISECONDS);

assertEquals(GoogleFitStatus.State.GOOGLEFIT_CONNECTION_FAILED, _state.getState());
assertEquals(BaseStatus.Status.UNABLE_TO_START, _state.getStatus());
}

@SmallTest
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -183,4 +183,12 @@ public void testDoesNotStopAutomaticallyWhenCommandsRunning() throws Exception {

verify(_mockBus,timeout(1000).times(1)).post(any(MainServiceStatus.class));
}

@SmallTest
public void testDisposeCommandsOnDestroy() throws Exception {
startService();
shutdownService();

verify(_mockServiceCommand,timeout(1000).times(3)).dispose();
}
}
5 changes: 3 additions & 2 deletions app/src/main/java/com/njackson/activities/MainActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import com.njackson.events.UI.StartButtonTouchedEvent;
import com.njackson.events.UI.StopButtonTouchedEvent;
import com.njackson.events.GoogleFitCommand.GoogleFitStatus;
import com.njackson.events.base.BaseStatus;
import com.njackson.utils.googleplay.IGooglePlayServices;
import com.njackson.utils.services.IServiceStarter;
import com.squareup.otto.Bus;
Expand Down Expand Up @@ -47,13 +48,13 @@ public void onStopButtonTouched(StopButtonTouchedEvent event) {

@Subscribe
public void onRecognitionState(ActivityRecognitionStatus event) {
if(event.getState().compareTo(ActivityRecognitionStatus.State.PLAY_SERVICES_NOT_AVAILABLE) == 0)
if(event.getStatus().compareTo(ActivityRecognitionStatus.Status.UNABLE_TO_START) == 0)
Log.d(TAG, "PLAY_NOT_AVIALABLE");
}

@Subscribe
public void onGoogleFitStatusChanged(GoogleFitStatus event) {
if(event.getState() == GoogleFitStatus.State.GOOGLEFIT_CONNECTION_FAILED) {
if(event.getStatus() == BaseStatus.Status.UNABLE_TO_START) {
if(!_playServices.connectionResultHasResolution(event.getConnectionResult())) {
_playServices.showConnectionResultErrorDialog(event.getConnectionResult(), this);
return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ public class ActivityRecognitionServiceCommand implements IServiceCommand,
public static final int DETECTION_INTERVAL_MILLISECONDS = MILLISECONDS_PER_SECOND * DETECTION_INTERVAL_SECONDS;

private PendingIntent _activityRecognitionPendingIntent;
private BaseStatus _currentStatus;
private BaseStatus.Status _currentStatus;

@Subscribe
public void onNewActivityEvent(NewActivityEvent event) {
Expand Down Expand Up @@ -84,35 +84,44 @@ public void execute(IInjectionContainer container) {
_bus.register(this);
}

@Override
public void dispose() {
_bus.unregister(this);
}

@Override
public BaseStatus.Status getStatus() {
return null;
return _currentStatus;
}

public void start() {
Log.d(TAG,"Started Activity Recognition Service");

if(!checkGooglePlayServices()) {
_bus.post(new ActivityRecognitionStatus(ActivityRecognitionStatus.State.PLAY_SERVICES_NOT_AVAILABLE));
_currentStatus = BaseStatus.Status.UNABLE_TO_START;
_bus.post(new ActivityRecognitionStatus(_currentStatus, false));
return;
}

registerRecognitionCallbacks();
createIntentService();
connectToGooglePlayServices();

_bus.post(new ActivityRecognitionStatus(ActivityRecognitionStatus.State.STARTED));
_currentStatus = BaseStatus.Status.STARTED;
_bus.post(new ActivityRecognitionStatus(_currentStatus));
}

public void stop (){
Log.d(TAG,"Destroy Activity Recognition Service");

_bus.unregister(this);
_recognitionClient.unregisterConnectionCallbacks(this);
_recognitionClient.unregisterConnectionFailedListener(this);

_googlePlay.removeActivityUpdates(_recognitionClient,_activityRecognitionPendingIntent);
_recognitionClient.disconnect();

_currentStatus = BaseStatus.Status.STOPPED;
_bus.post(new ActivityRecognitionStatus(_currentStatus));
}

private void createIntentService() {
Expand Down Expand Up @@ -154,6 +163,5 @@ private boolean checkGooglePlayServices() {
public void handleTimeout() {
Log.d(TAG,"Stopping location");
_serviceStarter.stopLocationServices();

}
}
Original file line number Diff line number Diff line change
@@ -1,21 +1,23 @@
package com.njackson.events.ActivityRecognitionCommand;

import com.njackson.events.base.BaseStatus;

/**
* Created by server on 21/03/2014.
*/
public class ActivityRecognitionStatus {
public class ActivityRecognitionStatus extends BaseStatus {

public enum State {
STARTED,
STOPPED,
PLAY_SERVICES_NOT_AVAILABLE, DISABLED
private boolean _playServicesAvailable = true;
public boolean playServicesAvailable() {
return _playServicesAvailable;
}

public State _state;
public State getState() { return _state; }

public ActivityRecognitionStatus(State state) {
this._state = state;
public ActivityRecognitionStatus(Status status) {
super(status);
}

public ActivityRecognitionStatus(Status status, boolean playServicesAvailable) {
super(status);
_playServicesAvailable = playServicesAvailable;
}
}
Original file line number Diff line number Diff line change
@@ -1,34 +1,23 @@
package com.njackson.events.GoogleFitCommand;

import com.google.android.gms.common.ConnectionResult;
import com.njackson.events.base.BaseStatus;

/**
* Created by server on 21/03/2014.
*/
public class GoogleFitStatus {

public enum State {
SERVICE_STARTED,
SERVICE_STOPPED,
SERVICE_DISABLED,
GOOGLEFIT_CONNECTED,
GOOGLEFIT_CONNECTION_FAILED,
GOOGLEFIT_DISCONNECTED
}

private State _state;
public State getState() { return _state; }
public class GoogleFitStatus extends BaseStatus{

private ConnectionResult _connectionResult = null;
public ConnectionResult getConnectionResult() { return _connectionResult; }

public GoogleFitStatus(State state) {
this._state = state;
public GoogleFitStatus(Status status) {
super(status);
}

public GoogleFitStatus(State state, ConnectionResult connectionResult) {
_state = state;
public GoogleFitStatus(Status status, ConnectionResult connectionResult) {
super(status);
_connectionResult = connectionResult;
}

public ConnectionResult getConnectionResult() { return _connectionResult; }
}
Original file line number Diff line number Diff line change
@@ -1,18 +1,9 @@
package com.njackson.events.LiveServiceCommand;

public class LiveStatus {
import com.njackson.events.base.BaseStatus;

public enum State {
STARTED,
STOPPED,
DISABLED
public class LiveStatus extends BaseStatus{
public LiveStatus(Status status) {
super(status);
}

public State _state;
public State getState() { return _state; }

public LiveStatus(State state) {
this._state = state;
}

}
3 changes: 2 additions & 1 deletion app/src/main/java/com/njackson/events/base/BaseStatus.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@ public class BaseStatus {
public enum Status {
STARTED,
STOPPED,
DISABLED
DISABLED,
UNABLE_TO_START
}

public Status _status;
Expand Down

0 comments on commit 51d3995

Please sign in to comment.