diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5cd76b5..8520763 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -5,6 +5,7 @@
+
diff --git a/app/src/main/java/eu/ottop/yamlauncher/MainActivity.kt b/app/src/main/java/eu/ottop/yamlauncher/MainActivity.kt
index 346694e..704ffdb 100644
--- a/app/src/main/java/eu/ottop/yamlauncher/MainActivity.kt
+++ b/app/src/main/java/eu/ottop/yamlauncher/MainActivity.kt
@@ -5,6 +5,7 @@ import android.content.Context
import android.content.Intent
import android.content.pm.LauncherActivityInfo
import android.content.pm.LauncherApps
+import android.content.pm.PackageManager
import android.os.Build
import android.os.Bundle
import android.os.Handler
@@ -24,6 +25,8 @@ import android.widget.Toast
import androidx.activity.OnBackPressedCallback
import androidx.annotation.RequiresApi
import androidx.appcompat.app.AppCompatActivity
+import androidx.core.app.ActivityCompat
+import androidx.core.content.ContextCompat
import androidx.core.content.res.ResourcesCompat
import androidx.recyclerview.widget.RecyclerView
import eu.ottop.yamlauncher.databinding.ActivityMainBinding
@@ -150,7 +153,7 @@ class MainActivity : AppCompatActivity(), AppMenuAdapter.OnItemClickListener, Ap
val statusBarManager: Class<*> = Class.forName("android.app.StatusBarManager")
val expandMethod: Method = statusBarManager.getMethod("expandNotificationsPanel")
expandMethod.invoke(statusBarService)
- weatherSystem.getWeather()
+ weatherSystem.getWeatherForCurrentLocation(this@MainActivity)
}
// Detect swipe left
@@ -377,11 +380,21 @@ class MainActivity : AppCompatActivity(), AppMenuAdapter.OnItemClickListener, Ap
animations.backgroundOut(this@MainActivity)
val handler = Handler(Looper.getMainLooper())
handler.postDelayed({
- binding.menutitle.visibility = View.VISIBLE
- searchView.setText("")
+ try {
+ binding.menutitle.visibility = View.VISIBLE
+ searchView.setText("")
+ }
+ catch (_: UninitializedPropertyAccessException) {
+
+ }
}, 100)
handler.postDelayed({
- recyclerView.scrollToPosition(0)
+ try {
+ recyclerView.scrollToPosition(0)
+ }
+ catch (_: UninitializedPropertyAccessException) {
+
+ }
CoroutineScope(Dispatchers.Default).launch {
refreshAppMenu()
}
@@ -485,7 +498,20 @@ class MainActivity : AppCompatActivity(), AppMenuAdapter.OnItemClickListener, Ap
val oldSet = oldList.map { Pair(it.first.applicationInfo.packageName, it.second.second) }.toSet()
val newSet = newList.map { Pair(it.first.applicationInfo.packageName, it.second.second) }.toSet()
- //Detect updates
+ // Detect removals
+ oldList.forEachIndexed { index, oldItem ->
+ if (!newSet.contains(Pair(oldItem.first.applicationInfo.packageName, oldItem.second.second))) {
+ removalChanges.add(Change(ChangeType.REMOVE, index))
+ }
+ }
+
+ // Detect insertions
+ newList.forEachIndexed { index, newItem ->
+ if (!oldSet.contains(Pair(newItem.first.applicationInfo.packageName, newItem.second.second))) {
+ changes.add(Change(ChangeType.INSERT, index))
+ }
+ }
+
oldList.forEachIndexed { index, oldItem ->
if (newSet.contains(Pair(oldItem.first.applicationInfo.packageName, oldItem.second.second))) {
val newIndex = newList.indexOfFirst { it.first.applicationInfo.packageName == oldItem.first.applicationInfo.packageName && it.second.second == oldItem.second.second }
@@ -502,20 +528,6 @@ class MainActivity : AppCompatActivity(), AppMenuAdapter.OnItemClickListener, Ap
}
}
- // Detect removals
- oldList.forEachIndexed { index, oldItem ->
- if (!newSet.contains(Pair(oldItem.first.applicationInfo.packageName, oldItem.second.second))) {
- removalChanges.add(Change(ChangeType.REMOVE, index))
- }
- }
-
- // Detect insertions
- newList.forEachIndexed { index, newItem ->
- if (!oldSet.contains(Pair(newItem.first.applicationInfo.packageName, newItem.second.second))) {
- changes.add(Change(ChangeType.INSERT, index))
- }
- }
-
changes.addAll(removalChanges.reversed())
return changes
diff --git a/app/src/main/java/eu/ottop/yamlauncher/WeatherSystem.kt b/app/src/main/java/eu/ottop/yamlauncher/WeatherSystem.kt
index e96a801..d3c452a 100644
--- a/app/src/main/java/eu/ottop/yamlauncher/WeatherSystem.kt
+++ b/app/src/main/java/eu/ottop/yamlauncher/WeatherSystem.kt
@@ -1,31 +1,82 @@
package eu.ottop.yamlauncher
+import android.Manifest
+import android.app.Activity
+import android.content.Context
+import android.content.pm.PackageManager
+import android.location.Criteria
+import android.location.Location
+import android.location.LocationListener
+import android.location.LocationManager
+import android.os.Bundle
+import androidx.core.app.ActivityCompat
+import androidx.core.content.ContextCompat
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import org.json.JSONObject
import java.net.HttpURLConnection
import java.net.URL
+import java.util.function.Consumer
class WeatherSystem {
+
fun getWeather() {
- CoroutineScope(Dispatchers.IO).launch {
- val url = URL("https://api.open-meteo.com/v1/forecast?latitude=60.16&longitude=24.93¤t=temperature_2m")
- with(url.openConnection() as HttpURLConnection) {
- requestMethod = "GET"
+ getTempForLocation("latitude=60.16&longitude=24.93")
+ }
- inputStream.bufferedReader().use {
- val response = it.readText()
+ fun getWeatherForCurrentLocation(activity: Activity) {
+ val locationManager = activity.getSystemService(Context.LOCATION_SERVICE) as LocationManager
- // Parse the JSON response
- val jsonObject = JSONObject(response)
-
- // Access specific fields or nested objects
- val currentData = jsonObject.getJSONObject("current")
- val currentWeather = currentData.getInt("temperature_2m")
-
- println("Field1: $currentWeather")
+ val locationListener = object : LocationListener {
+ override fun onLocationChanged(location: Location) {
+ println(location)
+ locationManager.removeUpdates(this)
}
- }}
+
+ override fun onStatusChanged(provider: String?, status: Int, extras: Bundle?) {}
+ override fun onProviderEnabled(provider: String) {}
+ override fun onProviderDisabled(provider: String) {}
+ }
+
+ // Check for location permissions
+ if (ContextCompat.checkSelfPermission(activity, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
+ // Permissions are not granted
+
+ return
+ }
+
+ // Request location updates from both providers
+ locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0f, locationListener)
+
+
+ // Try to get the last known location from both providers as a fallback
+ val currentLocation = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER)
+
+
+ if (currentLocation != null) {
+ getTempForLocation("latitude=${currentLocation.latitude}&longitude=${currentLocation.longitude}")
+ }
+
+
+ }
+
+ private fun getTempForLocation(location: String) {
+ CoroutineScope(Dispatchers.IO).launch {
+ val url = URL("https://api.open-meteo.com/v1/forecast?$location¤t=temperature_2m")
+ with(url.openConnection() as HttpURLConnection) {
+ requestMethod = "GET"
+
+ inputStream.bufferedReader().use {
+ val response = it.readText()
+
+ val jsonObject = JSONObject(response)
+
+ val currentData = jsonObject.getJSONObject("current")
+ val currentWeather = currentData.getInt("temperature_2m")
+
+ println("Field1: $currentWeather")
+ }
+ }}
}
}
\ No newline at end of file