From ea0d6e1e96cc1274a5b721594d343df4ea18cdee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mieszko=20Wrzeszczy=C5=84ski?= Date: Thu, 3 Jan 2019 19:34:55 +0100 Subject: [PATCH] Add save battery mode --- .../findmytutor/activity/BaseActivity.java | 3 +- .../wmi/findmytutor/activity/MapActivity.java | 2 +- .../findmytutor/activity/SharingFragment.java | 2 + .../BackgroundLocalizationService.java | 95 +++++++++---------- .../com/uam/wmi/findmytutor/utils/Const.java | 4 +- app/src/main/res/layout/location_modal.xml | 4 +- app/src/main/res/values-pl/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 8 files changed, 54 insertions(+), 58 deletions(-) diff --git a/app/src/main/java/com/uam/wmi/findmytutor/activity/BaseActivity.java b/app/src/main/java/com/uam/wmi/findmytutor/activity/BaseActivity.java index bed01f5..36f212a 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/activity/BaseActivity.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/activity/BaseActivity.java @@ -53,6 +53,7 @@ import io.reactivex.schedulers.Schedulers; import static com.mapbox.mapboxsdk.Mapbox.getApplicationContext; import static com.uam.wmi.findmytutor.utils.Const.defaultMapZoom; +import static com.uam.wmi.findmytutor.utils.Const.onlineBackgroundLocationInterval; import static com.uam.wmi.findmytutor.utils.Const.searchMapZoom; import static com.uam.wmi.findmytutor.utils.PrefUtils.storeBackgroundLocationStatus; @@ -200,7 +201,6 @@ public abstract class BaseActivity public void stopBackgroundLocalizationTask() { Intent stopIntent = new Intent(getApplicationContext(), BackgroundLocalizationService.class); stopIntent.putExtra("request_stop", true); - Log.e("Localization", "JEstem w stop BG"); stopService(stopIntent); @@ -210,6 +210,7 @@ public abstract class BaseActivity checkPermissions(); Intent startIntent = new Intent(getApplicationContext(), BackgroundLocalizationService.class); + startIntent.putExtra("notify_interval", onlineBackgroundLocationInterval); if (Build.VERSION.SDK_INT > Build.VERSION_CODES.O) { startForegroundService(startIntent); diff --git a/app/src/main/java/com/uam/wmi/findmytutor/activity/MapActivity.java b/app/src/main/java/com/uam/wmi/findmytutor/activity/MapActivity.java index b1e9a32..e0d4309 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/activity/MapActivity.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/activity/MapActivity.java @@ -333,7 +333,7 @@ public class MapActivity extends BaseActivity final AlertDialog alertDialog = alertDialogBuilderUserInput.create(); - EditText modalUserInput = view.findViewById(R.id.feedback_input); + EditText modalUserInput = view.findViewById(R.id.manual_input); alertDialog.setOnShowListener(dialogInterface -> { Button sendButton = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE); diff --git a/app/src/main/java/com/uam/wmi/findmytutor/activity/SharingFragment.java b/app/src/main/java/com/uam/wmi/findmytutor/activity/SharingFragment.java index 1eee441..5755ab7 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/activity/SharingFragment.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/activity/SharingFragment.java @@ -153,6 +153,8 @@ public class SharingFragment extends PreferenceFragment implements SharedPrefere /** Sharing level list **/ locationMode.setOnPreferenceChangeListener((preference, newValue) -> { + ((MapActivity) getActivity()).stopBackgroundLocalizationTask(); + ((MapActivity) getActivity()).startBackgroundLocalizationTask(); PrefUtils.storeLocationMode(getApplicationContext(), locationLevelMapping.get(Integer.parseInt((String) newValue))); diff --git a/app/src/main/java/com/uam/wmi/findmytutor/service/BackgroundLocalizationService.java b/app/src/main/java/com/uam/wmi/findmytutor/service/BackgroundLocalizationService.java index c72a3ce..827c589 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/service/BackgroundLocalizationService.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/service/BackgroundLocalizationService.java @@ -29,13 +29,11 @@ import com.google.android.gms.location.LocationCallback; import com.google.android.gms.location.LocationRequest; import com.google.android.gms.location.LocationResult; import com.google.android.gms.location.LocationServices; - import com.mapbox.geojson.Point; import com.mapbox.mapboxsdk.geometry.LatLng; import com.uam.wmi.findmytutor.model.Coordinate; import com.uam.wmi.findmytutor.network.ApiClient; import com.uam.wmi.findmytutor.utils.ApproximatedLocalization; -import com.uam.wmi.findmytutor.utils.Const; import com.uam.wmi.findmytutor.utils.MapUtils; import com.uam.wmi.findmytutor.utils.PrefUtils; import com.uam.wmi.findmytutor.utils.SharingLevel; @@ -61,11 +59,11 @@ import static java.lang.String.valueOf; public class BackgroundLocalizationService extends Service { private static final String TAG = "MyLocationService"; - private static long notify_interval; - private Boolean highAccuracyMode; - private static long notify_interval_inside_building = onlineBackgroundLocationInterval; - private static long notify_interval_outside_building = offlineBackgroundLocationInterval; + private static Integer notify_interval = onlineBackgroundLocationInterval; + private static Integer notify_interval_inside_building = onlineBackgroundLocationInterval; + private static Integer notify_interval_outside_building = offlineBackgroundLocationInterval; private static int coordinatesHistoryLength = 5; + private Boolean highAccuracyMode; private Location mLastLocation; private Boolean stopService = false; private ArrayList providers = new ArrayList(); @@ -77,7 +75,6 @@ public class BackgroundLocalizationService extends Service { private LocationRequest mLocationRequest; private Location mCurrentLocation; private LocationCallback mLocationCallback; - private Looper myLooper; private LocationListener mLocationListener; public BackgroundLocalizationService() { @@ -103,7 +100,7 @@ public class BackgroundLocalizationService extends Service { if (intent != null) { stopService = intent.getBooleanExtra("request_stop", false); - notify_interval = intent.getLongExtra("notify_interval", onlineBackgroundLocationInterval); + notify_interval = intent.getIntExtra("notify_interval", onlineBackgroundLocationInterval); } if (stopService) { @@ -124,8 +121,7 @@ public class BackgroundLocalizationService extends Service { if (locationResult != null) { mCurrentLocation = locationResult.getLastLocation(); sendCoordinateToBackend(mCurrentLocation); - coordinatesHistory.add(mCurrentLocation); - changeBackgroundMode(); + changeBackgroundMode(); } } }; @@ -144,12 +140,24 @@ public class BackgroundLocalizationService extends Service { startForeground(1001, notification); } - createFusedLocationClient(); + if (!stopService && !PrefUtils.getLocationLevel(getApplicationContext()).equals(SharingLevel.MANUAL.toString())) { + createFusedLocationClient(); + }else if (!stopService && + PrefUtils.getLocationLevel(getApplicationContext()).equals(SharingLevel.MANUAL.toString())) { + mStatusChecker = () -> { + try { + sendCoordinateToBackend(fakeLoc); + } finally { + mHandler.postDelayed(mStatusChecker, notify_interval); + } + }; + + AsyncTask.execute(mStatusChecker); + } } - private void createFusedLocationClient(){ + private void createFusedLocationClient() { Integer saveMode = Long.valueOf(notify_interval).compareTo(Long.valueOf(offlineBackgroundLocationInterval)); - myLooper = Looper.myLooper(); if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { return; @@ -157,9 +165,9 @@ public class BackgroundLocalizationService extends Service { mLocationRequest = new LocationRequest(); - if(saveMode != 0){ + if (saveMode != 0) { mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); - }else{ + } else { mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY); } @@ -171,13 +179,13 @@ public class BackgroundLocalizationService extends Service { if (!stopService) { mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this); mFusedLocationClient.requestLocationUpdates(mLocationRequest, - mLocationCallback, myLooper); + mLocationCallback, Looper.getMainLooper()); } } private void changeBackgroundMode() { if (coordinatesHistory.size() > 4) { - Long prevInterval = notify_interval; + Integer prevInterval = notify_interval; Boolean shouldExtendTimeInterval = Stream.of(coordinatesHistory) .map(MapUtils::checkIfCoordinateIsValid).takeWhile(s -> !s).toList().size() == coordinatesHistory.size(); @@ -191,8 +199,7 @@ public class BackgroundLocalizationService extends Service { } Integer changedMode = Long.valueOf(prevInterval).compareTo(Long.valueOf(notify_interval)); - - if(changedMode != 0){ + if (changedMode != 0) { updateListeners(); } } @@ -218,28 +225,6 @@ public class BackgroundLocalizationService extends Service { startForeground(2, notification); } - private void getLocalizationFromListeners() { - if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { - // TODO: Consider calling - // ActivityCompat#requestPermissions - // here to request the missing permissions, and then overriding - // public void onRequestPermissionsResult(int requestCode, String[] permissions, - // int[] grantResults) - // to handle the case where the user grants the permission. See the documentation - // for ActivityCompat#requestPermissions for more details. - return; - } - - mFusedLocationClient.getLastLocation().addOnSuccessListener( - location -> { - if (location != null) { - mLastLocation = location; - coordinatesHistory.add(location); - sendCoordinateToBackend(location); - } - }); - } - private void sendCoordinateToBackend(Location location) { new Task(location).execute(); } @@ -274,21 +259,21 @@ public class BackgroundLocalizationService extends Service { } } - private void restartService(){ + private void restartService() { - Intent stopIntent = new Intent(getApplicationContext(), BackgroundLocalizationService.class); - stopIntent.putExtra("request_stop", true); + Intent stopIntent = new Intent(getApplicationContext(), BackgroundLocalizationService.class); + stopIntent.putExtra("request_stop", true); - stopService(stopIntent); + stopService(stopIntent); - Intent startIntent = new Intent(getApplicationContext(), BackgroundLocalizationService.class); - startIntent.putExtra("notify_interval", notify_interval); + Intent startIntent = new Intent(getApplicationContext(), BackgroundLocalizationService.class); + startIntent.putExtra("notify_interval", notify_interval); - if (Build.VERSION.SDK_INT > Build.VERSION_CODES.O) { - startForegroundService(startIntent); - } else { - startService(startIntent); - } + if (Build.VERSION.SDK_INT > Build.VERSION_CODES.O) { + startForegroundService(startIntent); + } else { + startService(startIntent); + } } @@ -337,6 +322,12 @@ public class BackgroundLocalizationService extends Service { approximatedBuildingPart = PrefUtils.getManualLocationApproximation(getApplicationContext()); } + Location fakeLoc = new Location(""); + + fakeLoc.setLatitude(latitude); + fakeLoc.setLongitude(longitude); + coordinatesHistory.add(fakeLoc); + try { Coordinate coordinate = new Coordinate( latitude, diff --git a/app/src/main/java/com/uam/wmi/findmytutor/utils/Const.java b/app/src/main/java/com/uam/wmi/findmytutor/utils/Const.java index 21d043b..0590a2f 100644 --- a/app/src/main/java/com/uam/wmi/findmytutor/utils/Const.java +++ b/app/src/main/java/com/uam/wmi/findmytutor/utils/Const.java @@ -7,8 +7,8 @@ import java.util.List; public class Const { public final static String BASE_URL = "https://s416084.projektstudencki.pl/master/"; - public final static Integer onlineBackgroundLocationInterval = 7000; - public final static Integer offlineBackgroundLocationInterval = 14000; + public final static Integer onlineBackgroundLocationInterval = 7000; + public final static Integer offlineBackgroundLocationInterval = 360000; public final static Integer defaultMapZoom = 17; public final static Integer searchMapZoom = 13; public final static Double presenceLatitude = 52.466365; diff --git a/app/src/main/res/layout/location_modal.xml b/app/src/main/res/layout/location_modal.xml index 51949bd..a4af220 100644 --- a/app/src/main/res/layout/location_modal.xml +++ b/app/src/main/res/layout/location_modal.xml @@ -24,14 +24,14 @@ android:textStyle="normal" /> Błąd sieci! Brak wyników! + Nadaj nazwę tej lokalizacji. diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index cc7f5bc..6860e0d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -340,5 +340,6 @@ Only online users Network Error ! Search response is empty! + Insert a name for this localization.