tracking button state gets restored after rotation
This commit is contained in:
parent
07b5716e69
commit
7b793fc9dd
3 changed files with 97 additions and 48 deletions
|
@ -62,10 +62,14 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys {
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
|
// set state of tracking
|
||||||
mTracking = false;
|
mTracking = false;
|
||||||
mPermissionsGranted = false;
|
if (savedInstanceState != null) {
|
||||||
|
mTracking = savedInstanceState.getBoolean(INSTANCE_TRACKING_STARTED, false);
|
||||||
|
}
|
||||||
|
|
||||||
// check permissions on Android 6 and higher
|
// check permissions on Android 6 and higher
|
||||||
|
mPermissionsGranted = false;
|
||||||
if (Build.VERSION.SDK_INT >= 23) {
|
if (Build.VERSION.SDK_INT >= 23) {
|
||||||
// check permissions
|
// check permissions
|
||||||
mMissingPermissions = checkPermissions();
|
mMissingPermissions = checkPermissions();
|
||||||
|
@ -109,6 +113,22 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onSaveInstanceState(Bundle outState) {
|
||||||
|
outState.putBoolean(INSTANCE_TRACKING_STARTED, mTracking);
|
||||||
|
super.onSaveInstanceState(outState);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onResume() {
|
||||||
|
super.onResume();
|
||||||
|
|
||||||
|
// set state of FloatingActionButton
|
||||||
|
setFloatingActionButtonState();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
|
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
|
||||||
switch (requestCode) {
|
switch (requestCode) {
|
||||||
|
@ -193,9 +213,6 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys {
|
||||||
mFloatingActionButton.setImageResource(R.drawable.ic_fiber_manual_record_white_24dp);
|
mFloatingActionButton.setImageResource(R.drawable.ic_fiber_manual_record_white_24dp);
|
||||||
mTracking = false;
|
mTracking = false;
|
||||||
|
|
||||||
// re-start preliminary tracking
|
|
||||||
// startFindingLocation();
|
|
||||||
|
|
||||||
// stop tracker service
|
// stop tracker service
|
||||||
Intent intent = new Intent(this, TrackerService.class);
|
Intent intent = new Intent(this, TrackerService.class);
|
||||||
intent.setAction(ACTION_STOP);
|
intent.setAction(ACTION_STOP);
|
||||||
|
@ -221,6 +238,16 @@ public class MainActivity extends AppCompatActivity implements TrackbookKeys {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Set state of FloatingActionButton */
|
||||||
|
private void setFloatingActionButtonState() {
|
||||||
|
if (mTracking) {
|
||||||
|
mFloatingActionButton.setImageResource(R.drawable.ic_fiber_manual_record_red_24dp);
|
||||||
|
} else {
|
||||||
|
mFloatingActionButton.setImageResource(R.drawable.ic_fiber_manual_record_white_24dp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Check which permissions have been granted */
|
/* Check which permissions have been granted */
|
||||||
private List<String> checkPermissions() {
|
private List<String> checkPermissions() {
|
||||||
List<String> permissions = new ArrayList<>();
|
List<String> permissions = new ArrayList<>();
|
||||||
|
|
|
@ -52,11 +52,12 @@ public class TrackerService extends Service implements TrackbookKeys {
|
||||||
@Override
|
@Override
|
||||||
public int onStartCommand(Intent intent, int flags, int startId) {
|
public int onStartCommand(Intent intent, int flags, int startId) {
|
||||||
|
|
||||||
|
// acquire reference to Location Manager
|
||||||
|
mLocationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
|
||||||
|
|
||||||
// checking for empty intent
|
// checking for empty intent
|
||||||
if (intent == null) {
|
if (intent == null) {
|
||||||
Log.v(LOG_TAG, "Null-Intent received. Stopping self.");
|
Log.v(LOG_TAG, "Null-Intent received. Stopping self.");
|
||||||
// remove notification
|
|
||||||
stopForeground(true);
|
|
||||||
stopSelf();
|
stopSelf();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -67,25 +68,10 @@ public class TrackerService extends Service implements TrackbookKeys {
|
||||||
// create a new track
|
// create a new track
|
||||||
mTrack = new Track(getApplicationContext());
|
mTrack = new Track(getApplicationContext());
|
||||||
|
|
||||||
// acquire reference to Location Manager
|
// create gps and network location listeners
|
||||||
mLocationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
|
createListeners();
|
||||||
|
|
||||||
// listeners that responds to location updates
|
|
||||||
mGPSListener = createLocationListener();
|
|
||||||
mNetworkListener = createLocationListener();
|
|
||||||
|
|
||||||
// register location listeners and request updates
|
|
||||||
try {
|
|
||||||
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mGPSListener);
|
|
||||||
} catch (SecurityException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mNetworkListener);
|
|
||||||
} catch (SecurityException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
// set a timer to prevent endless tracking
|
||||||
mTimer = new CountDownTimer(CONSTANT_MAXIMAL_DURATION, CONSTANT_TRACKING_INTERVAL) {
|
mTimer = new CountDownTimer(CONSTANT_MAXIMAL_DURATION, CONSTANT_TRACKING_INTERVAL) {
|
||||||
@Override
|
@Override
|
||||||
public void onTick(long l) {
|
public void onTick(long l) {
|
||||||
|
@ -102,18 +88,10 @@ public class TrackerService extends Service implements TrackbookKeys {
|
||||||
|
|
||||||
// ACTION STOP
|
// ACTION STOP
|
||||||
else if (intent.getAction().equals(ACTION_STOP)) {
|
else if (intent.getAction().equals(ACTION_STOP)) {
|
||||||
// remove listeners
|
|
||||||
try {
|
|
||||||
mLocationManager.removeUpdates(mGPSListener);
|
|
||||||
} catch (SecurityException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
mLocationManager.removeUpdates(mNetworkListener);
|
|
||||||
} catch (SecurityException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
Log.v(LOG_TAG, "Service received command: STOP");
|
Log.v(LOG_TAG, "Service received command: STOP");
|
||||||
|
|
||||||
|
// remove listeners
|
||||||
|
removeListeners();
|
||||||
}
|
}
|
||||||
|
|
||||||
// START_STICKY is used for services that are explicitly started and stopped as needed
|
// START_STICKY is used for services that are explicitly started and stopped as needed
|
||||||
|
@ -130,24 +108,15 @@ public class TrackerService extends Service implements TrackbookKeys {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDestroy() {
|
public void onDestroy() {
|
||||||
super.onDestroy();
|
Log.v(LOG_TAG, "onDestroy called.");
|
||||||
|
|
||||||
// remove listeners
|
// remove listeners
|
||||||
try {
|
removeListeners();
|
||||||
mLocationManager.removeUpdates(mGPSListener);
|
|
||||||
} catch (SecurityException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
mLocationManager.removeUpdates(mNetworkListener);
|
|
||||||
} catch (SecurityException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
Log.v(LOG_TAG, "onDestroy called.");
|
|
||||||
|
|
||||||
// cancel notification
|
// cancel notification
|
||||||
stopForeground(true);
|
stopForeground(true);
|
||||||
|
|
||||||
|
super.onDestroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -184,4 +153,56 @@ public class TrackerService extends Service implements TrackbookKeys {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Creates gps and network location listeners */
|
||||||
|
private void createListeners() {
|
||||||
|
Log.v(LOG_TAG, "Setting up location listeners.");
|
||||||
|
|
||||||
|
// listeners that responds to location updates
|
||||||
|
mGPSListener = createLocationListener();
|
||||||
|
mNetworkListener = createLocationListener();
|
||||||
|
|
||||||
|
// register location listeners and request updates
|
||||||
|
try {
|
||||||
|
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mGPSListener);
|
||||||
|
} catch (SecurityException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mNetworkListener);
|
||||||
|
} catch (SecurityException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Removes gps and network location listeners */
|
||||||
|
private void removeListeners() {
|
||||||
|
Log.v(LOG_TAG, "Removing location listeners.");
|
||||||
|
|
||||||
|
// remove gps listener
|
||||||
|
if (mGPSListener != null) {
|
||||||
|
Log.v(LOG_TAG, "Removing GPS location listener.");
|
||||||
|
try {
|
||||||
|
mLocationManager.removeUpdates(mGPSListener);
|
||||||
|
} catch (SecurityException e) {
|
||||||
|
// catches permission problems
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// remove network listener
|
||||||
|
if (mNetworkListener != null) {
|
||||||
|
Log.v(LOG_TAG, "Removing network location listener.");
|
||||||
|
try {
|
||||||
|
mLocationManager.removeUpdates(mNetworkListener);
|
||||||
|
} catch (SecurityException e) {
|
||||||
|
// catches permission problems
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,6 +49,7 @@ public interface TrackbookKeys {
|
||||||
public static final String INSTANCE_LONGITUDE = "longitude";
|
public static final String INSTANCE_LONGITUDE = "longitude";
|
||||||
public static final String INSTANCE_ZOOM_LEVEL = "zoomLevel";
|
public static final String INSTANCE_ZOOM_LEVEL = "zoomLevel";
|
||||||
public static final String INSTANCE_CURRENT_LOCATION = "currentLocation";
|
public static final String INSTANCE_CURRENT_LOCATION = "currentLocation";
|
||||||
|
public static final String INSTANCE_TRACKING_STARTED = "trackingStarted";
|
||||||
|
|
||||||
/* RESULTS */
|
/* RESULTS */
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue