Сравнить коммиты
| Автор | SHA1 | Дата | |
|---|---|---|---|
|
|
d2f653034d | ||
|
|
ab5aec9721 | ||
|
|
1b0559c98a | ||
|
|
2e0e7ea453 | ||
|
|
ac6d677ff4 | ||
|
|
cbfe90757d |
@@ -9,8 +9,8 @@ android {
|
|||||||
buildConfigField "boolean", "HIDDEN_APP", "false"
|
buildConfigField "boolean", "HIDDEN_APP", "false"
|
||||||
minSdkVersion 15
|
minSdkVersion 15
|
||||||
targetSdkVersion 28
|
targetSdkVersion 28
|
||||||
versionCode 50
|
versionCode 53
|
||||||
versionName '5.13'
|
versionName '5.16'
|
||||||
}
|
}
|
||||||
|
|
||||||
lintOptions {
|
lintOptions {
|
||||||
@@ -35,10 +35,10 @@ android {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation 'com.android.support:design:28.0.0-rc02'
|
implementation 'com.android.support:design:28.0.0'
|
||||||
testImplementation 'junit:junit:4.12'
|
testImplementation 'junit:junit:4.12'
|
||||||
testImplementation 'org.robolectric:robolectric:3.8'
|
testImplementation 'org.robolectric:robolectric:3.8'
|
||||||
googleImplementation 'com.google.firebase:firebase-core:16.0.3'
|
googleImplementation 'com.google.firebase:firebase-core:16.0.5'
|
||||||
googleImplementation 'com.crashlytics.sdk.android:crashlytics:2.9.5'
|
googleImplementation 'com.crashlytics.sdk.android:crashlytics:2.9.5'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,9 @@
|
|||||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||||||
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
|
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
|
||||||
|
|
||||||
|
<uses-feature android:name="android.hardware.location.network" />
|
||||||
|
<uses-feature android:name="android.hardware.location.gps" />
|
||||||
|
|
||||||
<application
|
<application
|
||||||
android:allowBackup="true"
|
android:allowBackup="true"
|
||||||
android:networkSecurityConfig="@xml/network_security_config"
|
android:networkSecurityConfig="@xml/network_security_config"
|
||||||
@@ -20,6 +23,10 @@
|
|||||||
android:theme="@style/AppTheme"
|
android:theme="@style/AppTheme"
|
||||||
android:name=".MainApplication">
|
android:name=".MainApplication">
|
||||||
|
|
||||||
|
<meta-data
|
||||||
|
android:name="google_analytics_adid_collection_enabled"
|
||||||
|
android:value="false" />
|
||||||
|
|
||||||
<activity
|
<activity
|
||||||
android:name=".MainActivity"
|
android:name=".MainActivity"
|
||||||
android:launchMode="singleTask" />
|
android:launchMode="singleTask" />
|
||||||
|
|||||||
@@ -215,19 +215,11 @@ public class MainFragment extends PreferenceFragment implements OnSharedPreferen
|
|||||||
|
|
||||||
private void startTrackingService(boolean checkPermission, boolean permission) {
|
private void startTrackingService(boolean checkPermission, boolean permission) {
|
||||||
if (checkPermission) {
|
if (checkPermission) {
|
||||||
Set<String> missingPermissions = new HashSet<>();
|
if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
|
||||||
if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
|
|
||||||
missingPermissions.add(Manifest.permission.ACCESS_FINE_LOCATION);
|
|
||||||
}
|
|
||||||
if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
|
|
||||||
missingPermissions.add(Manifest.permission.ACCESS_COARSE_LOCATION);
|
|
||||||
}
|
|
||||||
if (missingPermissions.isEmpty()) {
|
|
||||||
permission = true;
|
permission = true;
|
||||||
} else {
|
} else {
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||||
requestPermissions(missingPermissions.toArray(new String[missingPermissions.size()]),
|
requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, PERMISSIONS_REQUEST_LOCATION);
|
||||||
PERMISSIONS_REQUEST_LOCATION);
|
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,13 +20,11 @@ import android.content.Context;
|
|||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.IntentFilter;
|
import android.content.IntentFilter;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.location.Criteria;
|
|
||||||
import android.location.Location;
|
import android.location.Location;
|
||||||
import android.location.LocationListener;
|
import android.location.LocationListener;
|
||||||
import android.location.LocationManager;
|
import android.location.LocationManager;
|
||||||
import android.os.BatteryManager;
|
import android.os.BatteryManager;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Looper;
|
|
||||||
import android.preference.PreferenceManager;
|
import android.preference.PreferenceManager;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
@@ -72,31 +70,22 @@ public class PositionProvider implements LocationListener {
|
|||||||
public void startUpdates() {
|
public void startUpdates() {
|
||||||
try {
|
try {
|
||||||
locationManager.requestLocationUpdates(
|
locationManager.requestLocationUpdates(
|
||||||
distance > 0 || angle > 0 ? MINIMUM_INTERVAL : interval, 0,
|
getProvider(preferences.getString(MainFragment.KEY_ACCURACY, "medium")),
|
||||||
getCriteria(preferences.getString(MainFragment.KEY_ACCURACY, "medium")),
|
distance > 0 || angle > 0 ? MINIMUM_INTERVAL : interval, 0, this);
|
||||||
this, Looper.myLooper());
|
|
||||||
} catch (RuntimeException e) {
|
} catch (RuntimeException e) {
|
||||||
Toast.makeText(context, e.getMessage(), Toast.LENGTH_LONG).show();
|
Toast.makeText(context, e.getMessage(), Toast.LENGTH_LONG).show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Criteria getCriteria(String accuracy) {
|
public static String getProvider(String accuracy) {
|
||||||
Criteria criteria = new Criteria();
|
|
||||||
switch (accuracy) {
|
switch (accuracy) {
|
||||||
case "high":
|
case "high":
|
||||||
criteria.setHorizontalAccuracy(Criteria.ACCURACY_HIGH);
|
return LocationManager.GPS_PROVIDER;
|
||||||
criteria.setPowerRequirement(Criteria.POWER_HIGH);
|
|
||||||
break;
|
|
||||||
case "low":
|
case "low":
|
||||||
criteria.setHorizontalAccuracy(Criteria.ACCURACY_LOW);
|
return LocationManager.PASSIVE_PROVIDER;
|
||||||
criteria.setPowerRequirement(Criteria.POWER_LOW);
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
criteria.setHorizontalAccuracy(Criteria.ACCURACY_MEDIUM);
|
return LocationManager.NETWORK_PROVIDER;
|
||||||
criteria.setPowerRequirement(Criteria.POWER_MEDIUM);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
return criteria;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -108,15 +108,15 @@ public class ShortcutActivity extends AppCompatActivity {
|
|||||||
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
|
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
|
||||||
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
|
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
|
||||||
|
|
||||||
Criteria criteria = PositionProvider.getCriteria(
|
String provider = PositionProvider.getProvider(
|
||||||
preferences.getString(MainFragment.KEY_ACCURACY, "medium"));
|
preferences.getString(MainFragment.KEY_ACCURACY, "medium"));
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Location location = locationManager.getLastKnownLocation(locationManager.getBestProvider(criteria, true));
|
Location location = locationManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER);
|
||||||
if (location != null) {
|
if (location != null) {
|
||||||
sendAlarmLocation(location);
|
sendAlarmLocation(location);
|
||||||
} else {
|
} else {
|
||||||
locationManager.requestSingleUpdate(criteria, new LocationListener() {
|
locationManager.requestSingleUpdate(provider, new LocationListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onLocationChanged(Location location) {
|
public void onLocationChanged(Location location) {
|
||||||
sendAlarmLocation(location);
|
sendAlarmLocation(location);
|
||||||
@@ -185,8 +185,7 @@ public class ShortcutActivity extends AppCompatActivity {
|
|||||||
Toast.makeText(this, R.string.status_service_destroy, Toast.LENGTH_SHORT).show();
|
Toast.makeText(this, R.string.status_service_destroy, Toast.LENGTH_SHORT).show();
|
||||||
break;
|
break;
|
||||||
case ACTION_SOS:
|
case ACTION_SOS:
|
||||||
if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
|
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();
|
sendAlarm();
|
||||||
} else {
|
} else {
|
||||||
Toast.makeText(this, R.string.status_send_fail, Toast.LENGTH_SHORT).show();
|
Toast.makeText(this, R.string.status_send_fail, Toast.LENGTH_SHORT).show();
|
||||||
|
|||||||
@@ -80,8 +80,7 @@ public class TrackingService extends Service {
|
|||||||
|
|
||||||
startForeground(NOTIFICATION_ID, createNotification(this));
|
startForeground(NOTIFICATION_ID, createNotification(this));
|
||||||
|
|
||||||
if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
|
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) {
|
|
||||||
trackingController = new TrackingController(this);
|
trackingController = new TrackingController(this);
|
||||||
trackingController.start();
|
trackingController.start();
|
||||||
}
|
}
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user