Сравнить коммиты
| Автор | SHA1 | Дата | |
|---|---|---|---|
|
|
ec85edd56f | ||
|
|
c5ab10919e | ||
|
|
3e8ba9a603 | ||
|
|
826d638ea3 | ||
|
|
1b687bd075 |
@@ -9,8 +9,8 @@ android {
|
|||||||
buildConfigField 'boolean', 'HIDDEN_APP', 'false'
|
buildConfigField 'boolean', 'HIDDEN_APP', 'false'
|
||||||
minSdkVersion 16
|
minSdkVersion 16
|
||||||
targetSdkVersion 31
|
targetSdkVersion 31
|
||||||
versionCode 74
|
versionCode 76
|
||||||
versionName '6.13'
|
versionName '6.15'
|
||||||
multiDexEnabled true
|
multiDexEnabled true
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -47,11 +47,11 @@ android {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation 'com.google.android.material:material:1.5.0-alpha04'
|
implementation 'com.google.android.material:material:1.5.0-alpha05'
|
||||||
implementation 'androidx.multidex:multidex:2.0.1'
|
implementation 'androidx.multidex:multidex:2.0.1'
|
||||||
implementation 'androidx.preference:preference-ktx:1.1.1'
|
implementation 'androidx.preference:preference-ktx:1.1.1'
|
||||||
implementation 'androidx.test:core-ktx:1.4.0'
|
implementation 'androidx.test:core-ktx:1.4.0'
|
||||||
implementation 'androidx.core:core-ktx:1.6.0'
|
implementation 'androidx.core:core-ktx:1.7.0'
|
||||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
|
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
|
||||||
implementation 'com.github.judemanutd:autostarter:1.1.0'
|
implementation 'com.github.judemanutd:autostarter:1.1.0'
|
||||||
implementation('dev.doubledot.doki:library:0.0.1@aar') {
|
implementation('dev.doubledot.doki:library:0.0.1@aar') {
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
|
|
||||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
||||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
||||||
|
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
|
||||||
<uses-permission android:name="android.permission.INTERNET" />
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
|
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ class BatteryOptimizationHelper {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun requestException(context: Context) {
|
fun requestException(context: Context): Boolean {
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||||
val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context)
|
val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context)
|
||||||
if (!sharedPreferences.getBoolean(KEY_EXCEPTION_REQUESTED, false)) {
|
if (!sharedPreferences.getBoolean(KEY_EXCEPTION_REQUESTED, false)) {
|
||||||
@@ -80,12 +80,19 @@ class BatteryOptimizationHelper {
|
|||||||
requestVendorException(context)
|
requestVendorException(context)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return true
|
||||||
}
|
}
|
||||||
} else if (!sharedPreferences.getBoolean(KEY_AUTOSTART_REQUESTED, false)) {
|
} else if (!sharedPreferences.getBoolean(KEY_AUTOSTART_REQUESTED, false)) {
|
||||||
sharedPreferences.edit().putBoolean(KEY_AUTOSTART_REQUESTED, true).apply()
|
sharedPreferences.edit().putBoolean(KEY_AUTOSTART_REQUESTED, true).apply()
|
||||||
AutoStartPermissionHelper.getInstance().getAutoStartPermission(context)
|
try {
|
||||||
|
if (AutoStartPermissionHelper.getInstance().getAutoStartPermission(context)) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
} catch (e: SecurityException) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ class MainFragment : PreferenceFragmentCompat(), OnSharedPreferenceChangeListene
|
|||||||
private lateinit var sharedPreferences: SharedPreferences
|
private lateinit var sharedPreferences: SharedPreferences
|
||||||
private lateinit var alarmManager: AlarmManager
|
private lateinit var alarmManager: AlarmManager
|
||||||
private lateinit var alarmIntent: PendingIntent
|
private lateinit var alarmIntent: PendingIntent
|
||||||
|
private var requestingPermissions: Boolean = false
|
||||||
|
|
||||||
@SuppressLint("UnspecifiedImmutableFlag")
|
@SuppressLint("UnspecifiedImmutableFlag")
|
||||||
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
|
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
|
||||||
@@ -154,6 +155,13 @@ class MainFragment : PreferenceFragmentCompat(), OnSharedPreferenceChangeListene
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onStart() {
|
||||||
|
super.onStart()
|
||||||
|
if (requestingPermissions) {
|
||||||
|
requestingPermissions = BatteryOptimizationHelper().requestException(requireContext())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
sharedPreferences.registerOnSharedPreferenceChangeListener(this)
|
sharedPreferences.registerOnSharedPreferenceChangeListener(this)
|
||||||
@@ -214,6 +222,19 @@ class MainFragment : PreferenceFragmentCompat(), OnSharedPreferenceChangeListene
|
|||||||
findPreference<Preference>(KEY_DEVICE)?.summary = sharedPreferences.getString(KEY_DEVICE, null)
|
findPreference<Preference>(KEY_DEVICE)?.summary = sharedPreferences.getString(KEY_DEVICE, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun showBackgroundLocationDialog(context: Context, onSuccess: () -> Unit) {
|
||||||
|
val builder = AlertDialog.Builder(context)
|
||||||
|
val option = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
||||||
|
context.packageManager.backgroundPermissionOptionLabel
|
||||||
|
} else {
|
||||||
|
context.getString(R.string.request_background_option)
|
||||||
|
}
|
||||||
|
builder.setMessage(context.getString(R.string.request_background, option))
|
||||||
|
builder.setPositiveButton(android.R.string.ok) { _, _ -> onSuccess() }
|
||||||
|
builder.setNegativeButton(android.R.string.cancel, null)
|
||||||
|
builder.show()
|
||||||
|
}
|
||||||
|
|
||||||
private fun startTrackingService(checkPermission: Boolean, initialPermission: Boolean) {
|
private fun startTrackingService(checkPermission: Boolean, initialPermission: Boolean) {
|
||||||
var permission = initialPermission
|
var permission = initialPermission
|
||||||
if (checkPermission) {
|
if (checkPermission) {
|
||||||
@@ -224,10 +245,7 @@ class MainFragment : PreferenceFragmentCompat(), OnSharedPreferenceChangeListene
|
|||||||
permission = requiredPermissions.isEmpty()
|
permission = requiredPermissions.isEmpty()
|
||||||
if (!permission) {
|
if (!permission) {
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||||
requestPermissions(
|
requestPermissions(requiredPermissions.toTypedArray(), PERMISSIONS_REQUEST_LOCATION)
|
||||||
requiredPermissions.toTypedArray(),
|
|
||||||
PERMISSIONS_REQUEST_LOCATION
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -239,7 +257,16 @@ class MainFragment : PreferenceFragmentCompat(), OnSharedPreferenceChangeListene
|
|||||||
AlarmManager.ELAPSED_REALTIME_WAKEUP,
|
AlarmManager.ELAPSED_REALTIME_WAKEUP,
|
||||||
ALARM_MANAGER_INTERVAL.toLong(), ALARM_MANAGER_INTERVAL.toLong(), alarmIntent
|
ALARM_MANAGER_INTERVAL.toLong(), ALARM_MANAGER_INTERVAL.toLong(), alarmIntent
|
||||||
)
|
)
|
||||||
BatteryOptimizationHelper().requestException(requireContext())
|
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q
|
||||||
|
&& ContextCompat.checkSelfPermission(requireContext(), Manifest.permission.ACCESS_BACKGROUND_LOCATION) != PackageManager.PERMISSION_GRANTED) {
|
||||||
|
requestingPermissions = true
|
||||||
|
showBackgroundLocationDialog(requireContext()) {
|
||||||
|
requestPermissions(arrayOf(Manifest.permission.ACCESS_BACKGROUND_LOCATION), PERMISSIONS_REQUEST_BACKGROUND_LOCATION)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
requestingPermissions = BatteryOptimizationHelper().requestException(requireContext())
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
sharedPreferences.edit().putBoolean(KEY_STATUS, false).apply()
|
sharedPreferences.edit().putBoolean(KEY_STATUS, false).apply()
|
||||||
val preference = findPreference<TwoStatePreference>(KEY_STATUS)
|
val preference = findPreference<TwoStatePreference>(KEY_STATUS)
|
||||||
@@ -292,6 +319,7 @@ class MainFragment : PreferenceFragmentCompat(), OnSharedPreferenceChangeListene
|
|||||||
const val KEY_BUFFER = "buffer"
|
const val KEY_BUFFER = "buffer"
|
||||||
const val KEY_WAKELOCK = "wakelock"
|
const val KEY_WAKELOCK = "wakelock"
|
||||||
private const val PERMISSIONS_REQUEST_LOCATION = 2
|
private const val PERMISSIONS_REQUEST_LOCATION = 2
|
||||||
|
private const val PERMISSIONS_REQUEST_BACKGROUND_LOCATION = 3
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,4 +48,6 @@
|
|||||||
<string name="hidden_alert">The app has been hidden. To open it again please dial 8722227 (TRACCAR).</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>
|
<string name="error_msg_invalid_url">Please enter a valid http:// or https:// URL</string>
|
||||||
<string name="request_exception">To continuously collect location data please turn off battery optimization for the app.</string>
|
<string name="request_exception">To continuously collect location data please turn off battery optimization for the app.</string>
|
||||||
|
<string name="request_background">To continuously collect location data please enable \"%s\" permission.</string>
|
||||||
|
<string name="request_background_option">Allow all the time</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
+2
-2
@@ -5,9 +5,9 @@ buildscript {
|
|||||||
mavenCentral()
|
mavenCentral()
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.android.tools.build:gradle:7.0.2'
|
classpath 'com.android.tools.build:gradle:7.0.3'
|
||||||
classpath 'com.google.gms:google-services:4.3.10'
|
classpath 'com.google.gms:google-services:4.3.10'
|
||||||
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.7.1'
|
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.0'
|
||||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user