tabbar
This commit is contained in:
@@ -1,9 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- This AndroidManifest.xml template was generated by Skip -->
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">
|
||||
<!-- example permissions for using device 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_COARSE_LOCATION"/>
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
|
||||
|
||||
<!-- permissions needed for using the internet or an embedded WebKit browser -->
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
|
||||
@@ -8,6 +8,9 @@ import skip.ui.*
|
||||
import android.Manifest
|
||||
import android.app.Application
|
||||
import android.graphics.Color as AndroidColor
|
||||
import android.content.pm.PackageManager
|
||||
import android.location.Location
|
||||
import android.location.LocationManager
|
||||
import androidx.activity.compose.setContent
|
||||
import androidx.activity.enableEdgeToEdge
|
||||
import androidx.activity.SystemBarStyle
|
||||
@@ -26,6 +29,7 @@ import androidx.compose.ui.graphics.luminance
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.core.app.ActivityCompat
|
||||
import androidx.core.content.ContextCompat
|
||||
|
||||
internal val logger: SkipLogger = SkipLogger(subsystem = "pedi.foods", category = "PediFoods")
|
||||
|
||||
@@ -50,6 +54,11 @@ open class AndroidAppMain: Application {
|
||||
|
||||
/// AndroidAppMain is initial `androidx.appcompat.app.AppCompatActivity`, and must match `activity android:name` in the AndroidMainfest.xml file.
|
||||
open class MainActivity: AppCompatActivity {
|
||||
private val locationRequestCode = 4201
|
||||
private val locationPermissionDeniedKey = "location_permission_denied"
|
||||
private val locationLatitudeKey = "last_location_lat"
|
||||
private val locationLongitudeKey = "last_location_lng"
|
||||
|
||||
constructor() {
|
||||
}
|
||||
|
||||
@@ -68,17 +77,7 @@ open class MainActivity: AppCompatActivity {
|
||||
}
|
||||
|
||||
AppDelegate.shared.onLaunch()
|
||||
|
||||
// Example of requesting permissions on startup.
|
||||
// These must match the permissions in the AndroidManifest.xml file.
|
||||
//let permissions = listOf(
|
||||
// Manifest.permission.ACCESS_COARSE_LOCATION,
|
||||
// Manifest.permission.ACCESS_FINE_LOCATION
|
||||
// Manifest.permission.CAMERA,
|
||||
// Manifest.permission.WRITE_EXTERNAL_STORAGE,
|
||||
//)
|
||||
//let requestTag = 1
|
||||
//ActivityCompat.requestPermissions(self, permissions.toTypedArray(), requestTag)
|
||||
requestLocationPermissionsIfNeeded()
|
||||
}
|
||||
|
||||
override fun onStart() {
|
||||
@@ -127,6 +126,65 @@ open class MainActivity: AppCompatActivity {
|
||||
override fun onRequestPermissionsResult(requestCode: Int, permissions: kotlin.Array<String>, grantResults: IntArray) {
|
||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
|
||||
logger.info("onRequestPermissionsResult: ${requestCode}")
|
||||
if (requestCode == locationRequestCode) {
|
||||
val granted = grantResults.isNotEmpty() && grantResults.all { it == PackageManager.PERMISSION_GRANTED }
|
||||
val prefs = getSharedPreferences("${packageName}_preferences", MODE_PRIVATE)
|
||||
prefs.edit().putBoolean(locationPermissionDeniedKey, !granted).apply()
|
||||
if (granted) {
|
||||
cacheLastKnownLocation()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun requestLocationPermissionsIfNeeded() {
|
||||
val fine = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
|
||||
val coarse = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)
|
||||
val granted = fine == PackageManager.PERMISSION_GRANTED || coarse == PackageManager.PERMISSION_GRANTED
|
||||
if (granted) {
|
||||
val prefs = getSharedPreferences("${packageName}_preferences", MODE_PRIVATE)
|
||||
prefs.edit().putBoolean(locationPermissionDeniedKey, false).apply()
|
||||
cacheLastKnownLocation()
|
||||
return
|
||||
}
|
||||
|
||||
ActivityCompat.requestPermissions(
|
||||
this,
|
||||
arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION),
|
||||
locationRequestCode
|
||||
)
|
||||
}
|
||||
|
||||
private fun cacheLastKnownLocation() {
|
||||
val manager = getSystemService(LOCATION_SERVICE) as? LocationManager ?: return
|
||||
val fineGranted = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
|
||||
val coarseGranted = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED
|
||||
if (!fineGranted && !coarseGranted) {
|
||||
return
|
||||
}
|
||||
|
||||
val providers = listOf(LocationManager.GPS_PROVIDER, LocationManager.NETWORK_PROVIDER)
|
||||
var best: Location? = null
|
||||
for (provider in providers) {
|
||||
val candidate = try {
|
||||
manager.getLastKnownLocation(provider)
|
||||
} catch (_: SecurityException) {
|
||||
null
|
||||
} catch (_: Exception) {
|
||||
null
|
||||
}
|
||||
if (candidate != null && (best == null || candidate.accuracy < best!!.accuracy)) {
|
||||
best = candidate
|
||||
}
|
||||
}
|
||||
|
||||
if (best != null) {
|
||||
val prefs = getSharedPreferences("${packageName}_preferences", MODE_PRIVATE)
|
||||
prefs.edit()
|
||||
.putString(locationLatitudeKey, best.latitude.toString())
|
||||
.putString(locationLongitudeKey, best.longitude.toString())
|
||||
.putBoolean(locationPermissionDeniedKey, false)
|
||||
.apply()
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
||||
Reference in New Issue
Block a user