From 2a36e1aa6d8038793f2f968d915af56f3763e54a Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Wed, 12 Sep 2018 13:55:30 +1200 Subject: [PATCH] Remove Lost library --- app/build.gradle | 7 +- .../org/traccar/client/PositionProvider.java | 72 +++++++------- .../org/traccar/client/ShortcutActivity.java | 98 +++++++++++-------- 3 files changed, 97 insertions(+), 80 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 5b51c8c..cdaa2ee 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -35,12 +35,11 @@ android { } dependencies { - implementation 'com.android.support:design:28.0.0-rc01' - implementation 'com.mapzen.android:lost:3.0.4' + implementation 'com.android.support:design:28.0.0-rc02' testImplementation 'junit:junit:4.12' testImplementation 'org.robolectric:robolectric:3.8' - googleImplementation 'com.google.firebase:firebase-core:16.0.1' - googleImplementation 'com.crashlytics.sdk.android:crashlytics:2.9.4' + googleImplementation 'com.google.firebase:firebase-core:16.0.3' + googleImplementation 'com.crashlytics.sdk.android:crashlytics:2.9.5' } if (getGradle().getStartParameter().getTaskRequests().toString().contains("Google")) { diff --git a/app/src/main/java/org/traccar/client/PositionProvider.java b/app/src/main/java/org/traccar/client/PositionProvider.java index a88d6fb..1133129 100644 --- a/app/src/main/java/org/traccar/client/PositionProvider.java +++ b/app/src/main/java/org/traccar/client/PositionProvider.java @@ -20,17 +20,17 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.SharedPreferences; +import android.location.Criteria; import android.location.Location; +import android.location.LocationListener; +import android.location.LocationManager; import android.os.BatteryManager; +import android.os.Bundle; +import android.os.Looper; import android.preference.PreferenceManager; import android.util.Log; -import com.mapzen.android.lost.api.LocationListener; -import com.mapzen.android.lost.api.LocationRequest; -import com.mapzen.android.lost.api.LocationServices; -import com.mapzen.android.lost.api.LostApiClient; - -public class PositionProvider implements LostApiClient.ConnectionCallbacks, LocationListener { +public class PositionProvider implements LocationListener { private static final String TAG = PositionProvider.class.getSimpleName(); @@ -44,7 +44,7 @@ public class PositionProvider implements LostApiClient.ConnectionCallbacks, Loca private final Context context; private SharedPreferences preferences; - private LostApiClient apiClient; + private LocationManager locationManager; private String deviceId; private long interval; @@ -53,12 +53,12 @@ public class PositionProvider implements LostApiClient.ConnectionCallbacks, Loca private Location lastLocation; - private boolean started; - public PositionProvider(Context context, PositionListener listener) { this.context = context; this.listener = listener; + locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); + preferences = PreferenceManager.getDefaultSharedPreferences(context); deviceId = preferences.getString(MainFragment.KEY_DEVICE, "undefined"); @@ -67,34 +67,31 @@ public class PositionProvider implements LostApiClient.ConnectionCallbacks, Loca angle = Integer.parseInt(preferences.getString(MainFragment.KEY_ANGLE, "0")); } + @SuppressLint("MissingPermission") public void startUpdates() { - started = true; - apiClient = new LostApiClient.Builder(context).addConnectionCallbacks(this).build(); - apiClient.connect(); + locationManager.requestLocationUpdates( + distance > 0 || angle > 0 ? MINIMUM_INTERVAL : interval, 0, + getCriteria(preferences.getString(MainFragment.KEY_ACCURACY, "medium")), + this, Looper.myLooper()); } - private int getPriority(String accuracy) { + public static Criteria getCriteria(String accuracy) { + Criteria criteria = new Criteria(); switch (accuracy) { case "high": - return LocationRequest.PRIORITY_HIGH_ACCURACY; + criteria.setHorizontalAccuracy(Criteria.ACCURACY_HIGH); + criteria.setPowerRequirement(Criteria.POWER_HIGH); + break; case "low": - return LocationRequest.PRIORITY_LOW_POWER; + criteria.setHorizontalAccuracy(Criteria.ACCURACY_LOW); + criteria.setPowerRequirement(Criteria.POWER_LOW); + break; default: - return LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY; - } - } - - @SuppressLint("MissingPermission") - @Override - public void onConnected() { - if (started) { - LocationRequest request = LocationRequest.create() - .setPriority(getPriority(preferences.getString(MainFragment.KEY_ACCURACY, "medium"))) - .setInterval(distance > 0 || angle > 0 ? MINIMUM_INTERVAL : interval); - LocationServices.FusedLocationApi.requestLocationUpdates(apiClient, request, this); - } else { - apiClient.disconnect(); + criteria.setHorizontalAccuracy(Criteria.ACCURACY_MEDIUM); + criteria.setPowerRequirement(Criteria.POWER_MEDIUM); + break; } + return criteria; } @Override @@ -112,16 +109,19 @@ public class PositionProvider implements LostApiClient.ConnectionCallbacks, Loca } @Override - public void onConnectionSuspended() { - Log.i(TAG, "lost client suspended"); + public void onStatusChanged(String provider, int status, Bundle extras) { + } + + @Override + public void onProviderEnabled(String provider) { + } + + @Override + public void onProviderDisabled(String provider) { } public void stopUpdates() { - if (apiClient.isConnected()) { - LocationServices.FusedLocationApi.removeLocationUpdates(apiClient, this); - apiClient.disconnect(); - } - started = false; + locationManager.removeUpdates(this); } public static double getBatteryLevel(Context context) { diff --git a/app/src/main/java/org/traccar/client/ShortcutActivity.java b/app/src/main/java/org/traccar/client/ShortcutActivity.java index 53328a2..6560ee1 100644 --- a/app/src/main/java/org/traccar/client/ShortcutActivity.java +++ b/app/src/main/java/org/traccar/client/ShortcutActivity.java @@ -15,10 +15,16 @@ */ package org.traccar.client; +import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; +import android.content.pm.PackageManager; +import android.location.Criteria; import android.location.Location; +import android.location.LocationListener; +import android.location.LocationManager; import android.os.Bundle; +import android.os.Looper; import android.preference.PreferenceManager; import android.support.annotation.DrawableRes; import android.support.v4.content.ContextCompat; @@ -32,10 +38,7 @@ import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; -import com.mapzen.android.lost.api.LocationServices; -import com.mapzen.android.lost.api.LostApiClient; - -public class ShortcutActivity extends AppCompatActivity implements LostApiClient.ConnectionCallbacks { +public class ShortcutActivity extends AppCompatActivity { public static final String EXTRA_ACTION = "action"; public static final String ACTION_START = "start"; @@ -44,8 +47,6 @@ public class ShortcutActivity extends AppCompatActivity implements LostApiClient private static final String ALARM_SOS = "sos"; - private LostApiClient apiClient; - @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -102,47 +103,59 @@ public class ShortcutActivity extends AppCompatActivity implements LostApiClient setResult(RESULT_OK, ShortcutManagerCompat.createShortcutResultIntent(this, shortcut)); } + @SuppressWarnings("MissingPermission") private void sendAlarm() { - apiClient = new LostApiClient.Builder(this).addConnectionCallbacks(this).build(); - apiClient.connect(); + SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); + LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); + + Criteria criteria = PositionProvider.getCriteria( + preferences.getString(MainFragment.KEY_ACCURACY, "medium")); + + Location location = locationManager.getLastKnownLocation(locationManager.getBestProvider(criteria, true)); + if (location != null) { + sendAlarmLocation(location); + } else { + locationManager.requestSingleUpdate(criteria, new LocationListener() { + @Override + public void onLocationChanged(Location location) { + sendAlarmLocation(location); + } + + @Override + public void onStatusChanged(String provider, int status, Bundle extras) { + } + + @Override + public void onProviderEnabled(String provider) { + } + + @Override + public void onProviderDisabled(String provider) { + } + }, Looper.myLooper()); + } } - @SuppressWarnings("MissingPermission") - @Override - public void onConnected() { + private void sendAlarmLocation(Location location) { SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); - Location location = LocationServices.FusedLocationApi.getLastLocation(apiClient); + Position position = new Position( + preferences.getString(MainFragment.KEY_DEVICE, null), + location, PositionProvider.getBatteryLevel(this)); - if (location != null) { + String request = ProtocolFormatter.formatRequest( + preferences.getString(MainFragment.KEY_URL, null), position, ALARM_SOS); - Position position = new Position( - preferences.getString(MainFragment.KEY_DEVICE, null), - location, PositionProvider.getBatteryLevel(this)); - - String request = ProtocolFormatter.formatRequest( - preferences.getString(MainFragment.KEY_URL, null), position, ALARM_SOS); - - RequestManager.sendRequestAsync(request, new RequestManager.RequestHandler() { - @Override - public void onComplete(boolean success) { - if (success) { - Toast.makeText(ShortcutActivity.this, R.string.status_send_success, Toast.LENGTH_SHORT).show(); - } else { - Toast.makeText(ShortcutActivity.this, R.string.status_send_fail, Toast.LENGTH_SHORT).show(); - } + RequestManager.sendRequestAsync(request, new RequestManager.RequestHandler() { + @Override + public void onComplete(boolean success) { + if (success) { + Toast.makeText(ShortcutActivity.this, R.string.status_send_success, Toast.LENGTH_SHORT).show(); + } else { + Toast.makeText(ShortcutActivity.this, R.string.status_send_fail, Toast.LENGTH_SHORT).show(); } - }); - - } else { - Toast.makeText(this, R.string.status_send_fail, Toast.LENGTH_SHORT).show(); - } - - apiClient.disconnect(); - } - - @Override - public void onConnectionSuspended() { + } + }); } private boolean executeAction(Intent intent) { @@ -168,7 +181,12 @@ public class ShortcutActivity extends AppCompatActivity implements LostApiClient Toast.makeText(this, R.string.status_service_destroy, Toast.LENGTH_SHORT).show(); break; case ACTION_SOS: - sendAlarm(); + if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED + && ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) { + sendAlarm(); + } else { + Toast.makeText(this, R.string.status_send_fail, Toast.LENGTH_SHORT).show(); + } break; } finish();