Сравнить коммиты
| Автор | SHA1 | Дата | |
|---|---|---|---|
|
|
e8d5e5c99b | ||
|
|
c3980780d8 | ||
|
|
3c11216334 | ||
|
|
bcde8388d6 | ||
|
|
7f18915514 | ||
|
|
42ad669fca | ||
|
|
3e2b508ea7 | ||
|
|
fd4d616812 | ||
|
|
4f6571e572 | ||
|
|
d3025b437b | ||
|
|
1e861ef0ac | ||
|
|
43afc57114 | ||
|
|
d47783808f | ||
|
|
3ef2272227 | ||
|
|
3625ee42db | ||
|
|
385826c3c1 | ||
|
|
1426926c8e | ||
|
|
4f680d33c9 | ||
|
|
2dad912da5 | ||
|
|
290a7d80eb | ||
|
|
44228feb2f |
+18
-11
@@ -1,16 +1,16 @@
|
||||
apply plugin: 'com.android.application'
|
||||
|
||||
android {
|
||||
compileSdkVersion 27
|
||||
buildToolsVersion '27.0.3'
|
||||
compileSdkVersion 28
|
||||
buildToolsVersion '28.0.2'
|
||||
|
||||
defaultConfig {
|
||||
applicationId "org.traccar.client"
|
||||
buildConfigField "boolean", "HIDDEN_APP", "false"
|
||||
minSdkVersion 15
|
||||
targetSdkVersion 27
|
||||
versionCode 44
|
||||
versionName '5.7'
|
||||
targetSdkVersion 28
|
||||
versionCode 48
|
||||
versionName '5.11'
|
||||
}
|
||||
|
||||
lintOptions {
|
||||
@@ -26,19 +26,26 @@ android {
|
||||
buildConfigField "boolean", "HIDDEN_APP", "true"
|
||||
}
|
||||
}
|
||||
|
||||
testOptions {
|
||||
unitTests {
|
||||
includeAndroidResources = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compile 'com.android.support:design:27.0.2'
|
||||
compile 'com.mapzen.android:lost:3.0.4'
|
||||
testCompile 'junit:junit:4.12'
|
||||
testCompile 'org.robolectric:robolectric:3.6.1'
|
||||
googleCompile 'com.google.firebase:firebase-core:11.8.0'
|
||||
googleCompile 'com.google.firebase:firebase-crash:11.8.0'
|
||||
implementation 'com.android.support:design:28.0.0-rc01'
|
||||
implementation 'com.mapzen.android:lost:3.0.4'
|
||||
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'
|
||||
}
|
||||
|
||||
if (getGradle().getStartParameter().getTaskRequests().toString().contains("Google")) {
|
||||
apply plugin: 'com.google.gms.google-services'
|
||||
apply plugin: 'io.fabric'
|
||||
|
||||
task copyJson(type: Copy) {
|
||||
from '../../traccar-shared/google-services'
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
tools:replace="android:label">
|
||||
|
||||
<activity
|
||||
android:name=".MainActivity">
|
||||
android:name="org.traccar.client.MainActivity">
|
||||
<intent-filter android:label="@string/app_name">
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
|
||||
@@ -9,10 +9,12 @@
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
|
||||
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||||
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
|
||||
|
||||
<application
|
||||
android:allowBackup="true"
|
||||
android:networkSecurityConfig="@xml/network_security_config"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:theme="@style/AppTheme"
|
||||
|
||||
@@ -27,7 +27,7 @@ import java.util.Date;
|
||||
|
||||
public class DatabaseHelper extends SQLiteOpenHelper {
|
||||
|
||||
public static final int DATABASE_VERSION = 2;
|
||||
public static final int DATABASE_VERSION = 3;
|
||||
public static final String DATABASE_NAME = "traccar.db";
|
||||
|
||||
public interface DatabaseHandler<T> {
|
||||
@@ -80,7 +80,8 @@ public class DatabaseHelper extends SQLiteOpenHelper {
|
||||
"speed REAL," +
|
||||
"course REAL," +
|
||||
"accuracy REAL," +
|
||||
"battery REAL)");
|
||||
"battery REAL," +
|
||||
"mock INTEGER)");
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -100,6 +101,7 @@ public class DatabaseHelper extends SQLiteOpenHelper {
|
||||
values.put("course", position.getCourse());
|
||||
values.put("accuracy", position.getAccuracy());
|
||||
values.put("battery", position.getBattery());
|
||||
values.put("mock", position.getMock() ? 1 : 0);
|
||||
|
||||
db.insertOrThrow("position", null, values);
|
||||
}
|
||||
@@ -133,6 +135,7 @@ public class DatabaseHelper extends SQLiteOpenHelper {
|
||||
position.setCourse(cursor.getDouble(cursor.getColumnIndex("course")));
|
||||
position.setAccuracy(cursor.getDouble(cursor.getColumnIndex("accuracy")));
|
||||
position.setBattery(cursor.getDouble(cursor.getColumnIndex("battery")));
|
||||
position.setMock(cursor.getInt(cursor.getColumnIndex("mock")) > 0);
|
||||
|
||||
} else {
|
||||
return null;
|
||||
|
||||
@@ -150,13 +150,6 @@ public class MainFragment extends PreferenceFragment implements OnSharedPreferen
|
||||
}
|
||||
}
|
||||
|
||||
private boolean hasPermission(String permission) {
|
||||
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.LOLLIPOP_MR1) {
|
||||
return true;
|
||||
}
|
||||
return ContextCompat.checkSelfPermission(getActivity(), permission) == PackageManager.PERMISSION_GRANTED;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
@@ -223,10 +216,10 @@ public class MainFragment extends PreferenceFragment implements OnSharedPreferen
|
||||
private void startTrackingService(boolean checkPermission, boolean permission) {
|
||||
if (checkPermission) {
|
||||
Set<String> missingPermissions = new HashSet<>();
|
||||
if (!hasPermission(Manifest.permission.ACCESS_FINE_LOCATION)) {
|
||||
if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
|
||||
missingPermissions.add(Manifest.permission.ACCESS_FINE_LOCATION);
|
||||
}
|
||||
if (!hasPermission(Manifest.permission.ACCESS_COARSE_LOCATION)) {
|
||||
if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
|
||||
missingPermissions.add(Manifest.permission.ACCESS_COARSE_LOCATION);
|
||||
}
|
||||
if (missingPermissions.isEmpty()) {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2015 - 2017 Anton Tananaev (anton.tananaev@gmail.com)
|
||||
* Copyright 2015 - 2018 Anton Tananaev (anton.tananaev@gmail.com)
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -17,6 +17,7 @@ package org.traccar.client;
|
||||
|
||||
import android.location.Location;
|
||||
import android.location.LocationManager;
|
||||
import android.os.Build;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
@@ -37,6 +38,9 @@ public class Position {
|
||||
accuracy = location.getAccuracy();
|
||||
}
|
||||
this.battery = battery;
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
|
||||
this.mock = location.isFromMockProvider();
|
||||
}
|
||||
}
|
||||
|
||||
private long id;
|
||||
@@ -139,4 +143,14 @@ public class Position {
|
||||
this.battery = battery;
|
||||
}
|
||||
|
||||
private boolean mock;
|
||||
|
||||
public boolean getMock() {
|
||||
return mock;
|
||||
}
|
||||
|
||||
public void setMock(boolean mock) {
|
||||
this.mock = mock;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -36,6 +36,10 @@ public class ProtocolFormatter {
|
||||
.appendQueryParameter("accuracy", String.valueOf(position.getAccuracy()))
|
||||
.appendQueryParameter("batt", String.valueOf(position.getBattery()));
|
||||
|
||||
if (position.getMock()) {
|
||||
builder.appendQueryParameter("mock", String.valueOf(position.getMock()));
|
||||
}
|
||||
|
||||
if (alarm != null) {
|
||||
builder.appendQueryParameter("alarm", alarm);
|
||||
}
|
||||
|
||||
@@ -104,6 +104,7 @@ public class ShortcutActivity extends AppCompatActivity implements LostApiClient
|
||||
|
||||
private void sendAlarm() {
|
||||
apiClient = new LostApiClient.Builder(this).addConnectionCallbacks(this).build();
|
||||
apiClient.connect();
|
||||
}
|
||||
|
||||
@SuppressWarnings("MissingPermission")
|
||||
|
||||
@@ -100,7 +100,8 @@ public class TrackingController implements PositionProvider.PositionListener, Ne
|
||||
|
||||
@Override
|
||||
public void onNetworkUpdate(boolean isOnline) {
|
||||
StatusActivity.addMessage(context.getString(R.string.status_connectivity_change));
|
||||
int message = isOnline ? R.string.status_network_online : R.string.status_network_offline;
|
||||
StatusActivity.addMessage(context.getString(message));
|
||||
if (!this.isOnline && isOnline) {
|
||||
read();
|
||||
}
|
||||
|
||||
@@ -21,6 +21,7 @@ import android.app.PendingIntent;
|
||||
import android.app.Service;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.os.Build;
|
||||
import android.os.IBinder;
|
||||
import android.support.v4.app.NotificationCompat;
|
||||
@@ -77,8 +78,11 @@ public class TrackingService extends Service {
|
||||
Log.i(TAG, "service create");
|
||||
StatusActivity.addMessage(getString(R.string.status_service_create));
|
||||
|
||||
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.start();
|
||||
}
|
||||
|
||||
startForeground(NOTIFICATION_ID, createNotification(this));
|
||||
ContextCompat.startForegroundService(this, new Intent(this, HideNotificationService.class));
|
||||
|
||||
@@ -39,7 +39,8 @@
|
||||
<string name="status_send_success">Send successfully</string>
|
||||
<string name="status_send_fail">Send failed</string>
|
||||
<string name="status_location_update">Location update</string>
|
||||
<string name="status_connectivity_change">Connectivity change</string>
|
||||
<string name="status_network_online">Network online</string>
|
||||
<string name="status_network_offline">Network offline</string>
|
||||
<string name="hidden_app_name">Device Settings</string>
|
||||
<string name="hidden_alert">The app has been hidden. To open it again please dial 8722227 (TRACCAR).</string>
|
||||
<string name="error_msg_invalid_url">Please enter a valid http:// or https:// URL</string>
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<network-security-config>
|
||||
<base-config cleartextTrafficPermitted="true" />
|
||||
</network-security-config>
|
||||
+6
-3
@@ -1,16 +1,19 @@
|
||||
buildscript {
|
||||
repositories {
|
||||
google()
|
||||
jcenter()
|
||||
maven { url 'https://maven.fabric.io/public' }
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:3.0.1'
|
||||
classpath 'com.google.gms:google-services:3.1.1'
|
||||
classpath 'com.android.tools.build:gradle:3.1.4'
|
||||
classpath 'com.google.gms:google-services:4.0.2'
|
||||
classpath 'io.fabric.tools:gradle:1.25.4'
|
||||
}
|
||||
}
|
||||
|
||||
allprojects {
|
||||
repositories {
|
||||
jcenter()
|
||||
google()
|
||||
jcenter()
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-4.4.1-all.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-4.5.1-all.zip
|
||||
|
||||
Ссылка в новой задаче
Block a user