diff --git a/app/src/main/java/eu/ottop/yamlauncher/MainActivity.kt b/app/src/main/java/eu/ottop/yamlauncher/MainActivity.kt index 8805267..3ad1f86 100644 --- a/app/src/main/java/eu/ottop/yamlauncher/MainActivity.kt +++ b/app/src/main/java/eu/ottop/yamlauncher/MainActivity.kt @@ -951,9 +951,12 @@ class MainActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceCh @SuppressLint("NotifyDataSetChanged") override fun onResume() { super.onResume() - if (!permissionUtils.hasContactsPermission(this@MainActivity, Manifest.permission.READ_CONTACTS)) { + if (!permissionUtils.hasPermission(this@MainActivity, Manifest.permission.READ_CONTACTS)) { sharedPreferenceManager.setContactsEnabled(false) } + if (!permissionUtils.hasPermission(this@MainActivity, Manifest.permission.ACCESS_COARSE_LOCATION)) { + sharedPreferenceManager.setWeatherGPS(false) + } if (returnAllowed) { backToHome(0) } diff --git a/app/src/main/java/eu/ottop/yamlauncher/settings/AppMenuSettingsFragment.kt b/app/src/main/java/eu/ottop/yamlauncher/settings/AppMenuSettingsFragment.kt index 7f0d01a..596f25c 100644 --- a/app/src/main/java/eu/ottop/yamlauncher/settings/AppMenuSettingsFragment.kt +++ b/app/src/main/java/eu/ottop/yamlauncher/settings/AppMenuSettingsFragment.kt @@ -17,7 +17,7 @@ class AppMenuSettingsFragment : PreferenceFragmentCompat(), TitleProvider { contactPref = findPreference("contactsEnabled") contactPref?.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _, newValue -> - if (newValue as Boolean && !permissionUtils.hasContactsPermission(requireContext(), Manifest.permission.READ_CONTACTS)) { + if (newValue as Boolean && !permissionUtils.hasPermission(requireContext(), Manifest.permission.READ_CONTACTS)) { (requireActivity() as SettingsActivity).requestContactsPermission() return@OnPreferenceChangeListener false } else { diff --git a/app/src/main/java/eu/ottop/yamlauncher/settings/HomeSettingsFragment.kt b/app/src/main/java/eu/ottop/yamlauncher/settings/HomeSettingsFragment.kt index f06c5ea..8a5d838 100644 --- a/app/src/main/java/eu/ottop/yamlauncher/settings/HomeSettingsFragment.kt +++ b/app/src/main/java/eu/ottop/yamlauncher/settings/HomeSettingsFragment.kt @@ -1,16 +1,20 @@ package eu.ottop.yamlauncher.settings +import android.Manifest import android.os.Bundle import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat import androidx.preference.SwitchPreference import eu.ottop.yamlauncher.R +import eu.ottop.yamlauncher.utils.PermissionUtils import eu.ottop.yamlauncher.utils.UIUtils class HomeSettingsFragment : PreferenceFragmentCompat(), TitleProvider { private lateinit var sharedPreferenceManager: SharedPreferenceManager + private val permissionUtils = PermissionUtils() + private var gpsLocationPref: SwitchPreference? = null private var manualLocationPref: Preference? = null private var leftSwipePref: Preference? = null private var rightSwipePref: Preference? = null @@ -26,20 +30,24 @@ class HomeSettingsFragment : PreferenceFragmentCompat(), TitleProvider { clockApp = findPreference("clockSwipeApp") dateApp = findPreference("dateSwipeApp") - val gpsLocationPref = findPreference("gpsLocation") + gpsLocationPref = findPreference("gpsLocation") manualLocationPref = findPreference("manualLocation") leftSwipePref = findPreference("leftSwipeApp") rightSwipePref = findPreference("rightSwipeApp") // Only enable manual location when gps location is disabled if (gpsLocationPref != null && manualLocationPref != null) { - manualLocationPref?.isEnabled = !gpsLocationPref.isChecked + manualLocationPref?.isEnabled = (gpsLocationPref?.isChecked == false) - gpsLocationPref.onPreferenceChangeListener = + gpsLocationPref?.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _, newValue -> - val isGpsEnabled = newValue as Boolean - manualLocationPref?.isEnabled = !isGpsEnabled - true + if (newValue as Boolean && !permissionUtils.hasPermission(requireContext(), Manifest.permission.ACCESS_COARSE_LOCATION)) { + (requireActivity() as SettingsActivity).requestLocationPermission() + return@OnPreferenceChangeListener false + } else { + manualLocationPref?.isEnabled = !newValue + return@OnPreferenceChangeListener true + } } manualLocationPref?.onPreferenceClickListener = @@ -86,4 +94,9 @@ class HomeSettingsFragment : PreferenceFragmentCompat(), TitleProvider { override fun getTitle(): String { return getString(R.string.home_settings_title) } + + fun setLocationPreference(isEnabled: Boolean) { + manualLocationPref?.isEnabled = !isEnabled + gpsLocationPref?.isChecked = isEnabled + } } \ No newline at end of file diff --git a/app/src/main/java/eu/ottop/yamlauncher/settings/SettingsActivity.kt b/app/src/main/java/eu/ottop/yamlauncher/settings/SettingsActivity.kt index b2d8285..f6dec2d 100644 --- a/app/src/main/java/eu/ottop/yamlauncher/settings/SettingsActivity.kt +++ b/app/src/main/java/eu/ottop/yamlauncher/settings/SettingsActivity.kt @@ -189,10 +189,20 @@ class SettingsActivity : AppCompatActivity() { } } + fun requestLocationPermission() { + try { + ActivityCompat.requestPermissions( + this@SettingsActivity, + arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION), + 0 + ) + } catch(_: Exception) {} + } + fun requestContactsPermission() { try { ActivityCompat.requestPermissions( - this, + this@SettingsActivity, arrayOf(Manifest.permission.READ_CONTACTS), 1 ) @@ -216,8 +226,20 @@ class SettingsActivity : AppCompatActivity() { grantResults: IntArray ) { super.onRequestPermissionsResult(requestCode, permissions, grantResults) - val fragment = supportFragmentManager.findFragmentById(R.id.settingsLayout) as AppMenuSettingsFragment + + + if (requestCode == 0) { + val fragment = supportFragmentManager.findFragmentById(R.id.settingsLayout) as HomeSettingsFragment + if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + fragment.setLocationPreference(true) + } else { + Toast.makeText(this, getString(R.string.permission_denied), Toast.LENGTH_SHORT).show() + fragment.setLocationPreference(false) + } + } + if (requestCode == 1) { + val fragment = supportFragmentManager.findFragmentById(R.id.settingsLayout) as AppMenuSettingsFragment if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) { fragment.setContactPreference(true) } else { @@ -229,9 +251,12 @@ class SettingsActivity : AppCompatActivity() { override fun onResume() { super.onResume() - if (!permissionUtils.hasContactsPermission(this@SettingsActivity, Manifest.permission.READ_CONTACTS)) { + if (!permissionUtils.hasPermission(this@SettingsActivity, Manifest.permission.READ_CONTACTS)) { sharedPreferenceManager.setContactsEnabled(false) } + if (!permissionUtils.hasPermission(this@SettingsActivity, Manifest.permission.ACCESS_COARSE_LOCATION)) { + sharedPreferenceManager.setWeatherGPS(false) + } } } \ No newline at end of file diff --git a/app/src/main/java/eu/ottop/yamlauncher/settings/SharedPreferenceManager.kt b/app/src/main/java/eu/ottop/yamlauncher/settings/SharedPreferenceManager.kt index 4c9294b..542f78a 100644 --- a/app/src/main/java/eu/ottop/yamlauncher/settings/SharedPreferenceManager.kt +++ b/app/src/main/java/eu/ottop/yamlauncher/settings/SharedPreferenceManager.kt @@ -129,6 +129,12 @@ class SharedPreferenceManager (private val context: Context) { return preferences.getBoolean("gpsLocation", false) } + fun setWeatherGPS(isEnabled: Boolean) { + val editor = preferences.edit() + editor.putBoolean("gpsLocation", isEnabled) + editor.apply() + } + fun setWeatherLocation(location: String, region: String?) { val editor = preferences.edit() editor.putString("location", location) diff --git a/app/src/main/java/eu/ottop/yamlauncher/utils/PermissionUtils.kt b/app/src/main/java/eu/ottop/yamlauncher/utils/PermissionUtils.kt index 87d6e28..1164bac 100644 --- a/app/src/main/java/eu/ottop/yamlauncher/utils/PermissionUtils.kt +++ b/app/src/main/java/eu/ottop/yamlauncher/utils/PermissionUtils.kt @@ -6,7 +6,7 @@ import androidx.core.content.ContextCompat class PermissionUtils { - fun hasContactsPermission(context: Context, permission: String): Boolean { + fun hasPermission(context: Context, permission: String): Boolean { return ContextCompat.checkSelfPermission( context, permission diff --git a/app/src/main/java/eu/ottop/yamlauncher/utils/WeatherSystem.kt b/app/src/main/java/eu/ottop/yamlauncher/utils/WeatherSystem.kt index 4b4ac6a..30a1567 100644 --- a/app/src/main/java/eu/ottop/yamlauncher/utils/WeatherSystem.kt +++ b/app/src/main/java/eu/ottop/yamlauncher/utils/WeatherSystem.kt @@ -5,7 +5,6 @@ import android.content.Context import android.content.pm.PackageManager import android.location.Location import android.location.LocationManager -import androidx.core.app.ActivityCompat import androidx.core.content.ContextCompat import eu.ottop.yamlauncher.MainActivity import eu.ottop.yamlauncher.R @@ -23,38 +22,47 @@ class WeatherSystem(private val context: Context) { private val stringUtils = StringUtils() suspend fun setGpsLocation(activity: MainActivity) { + val locationManager = context.getSystemService(Context.LOCATION_SERVICE) as LocationManager if (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { - ActivityCompat.requestPermissions( - activity, - arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION), - 1 - ) return } - locationManager.getCurrentLocation( - LocationManager.GPS_PROVIDER, // Only GPS provider functions on my phone with CalyxOS, so that's what you get. - null, - ContextCompat.getMainExecutor(context) - ) - { location: Location? -> - if (location != null) { - CoroutineScope(Dispatchers.IO).launch { - val latitude = location.latitude - val longitude = location.longitude - sharedPreferenceManager.setWeatherLocation("latitude=${latitude}&longitude=${longitude}", context.getString(R.string.latest_location)) - activity.updateWeatherText() - } - + try { + val provider = if (locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) { + LocationManager.NETWORK_PROVIDER } else { - CoroutineScope(Dispatchers.IO).launch { - activity.updateWeatherText() + LocationManager.GPS_PROVIDER + } + + locationManager.getCurrentLocation( + provider, + null, + ContextCompat.getMainExecutor(context) + ) + + { location: Location? -> + if (location != null) { + CoroutineScope(Dispatchers.IO).launch { + val latitude = location.latitude + val longitude = location.longitude + sharedPreferenceManager.setWeatherLocation( + "latitude=${latitude}&longitude=${longitude}", + context.getString(R.string.latest_location) + ) + activity.updateWeatherText() + } + + } else { + CoroutineScope(Dispatchers.IO).launch { + activity.updateWeatherText() + } } } + } catch(_: Exception) { + return } - } // Run within Dispatchers.IO from the outside (doesn't seem to refresh properly otherwise) diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index f9f3088..836d69f 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -217,14 +217,4 @@ celsius fahrenheit - - - Reply - Reply to all - - - - reply - reply_all - \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 6f3e0e6..f556eb3 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -1,8 +1,4 @@ - #FF000000 - #FFFFFFFF - #FF1B1B1B - \ No newline at end of file diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 2162e37..45e8c74 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -30,18 +30,6 @@ - - - -