diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 277ff612..9773c473 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -55,7 +55,7 @@ android { defaultConfig { minSdk = 31 - targetSdk = 35 // 29 wifi switch not working + targetSdk = 37 applicationId = "com.anod.car.home.free" versionCode = 3_41004 diff --git a/app/src/main/java/com/anod/car/home/incar/AcceptCallActivity.kt b/app/src/main/java/com/anod/car/home/incar/AcceptCallActivity.kt index 9feb950d..59db4331 100644 --- a/app/src/main/java/com/anod/car/home/incar/AcceptCallActivity.kt +++ b/app/src/main/java/com/anod/car/home/incar/AcceptCallActivity.kt @@ -11,7 +11,6 @@ import android.os.Build import android.os.Bundle import android.telephony.TelephonyManager import android.view.KeyEvent -import android.view.WindowManager import info.anodsplace.applog.AppLog import java.io.IOException @@ -68,15 +67,12 @@ class AcceptCallActivity : Activity() { private fun updateWindowFlags() { if (keyguardManager!!.isKeyguardLocked) { - window.addFlags( - WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD or - WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON or - WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED) + setShowWhenLocked(true) + setTurnScreenOn(true) + keyguardManager!!.requestDismissKeyguard(this, null) } else { - window.clearFlags( - WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD or - WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON or - WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED) + setShowWhenLocked(false) + setTurnScreenOn(false) } } diff --git a/app/src/main/java/com/anod/car/home/incar/ModeDetector.kt b/app/src/main/java/com/anod/car/home/incar/ModeDetector.kt index 78fc0cb7..f517a91f 100644 --- a/app/src/main/java/com/anod/car/home/incar/ModeDetector.kt +++ b/app/src/main/java/com/anod/car/home/incar/ModeDetector.kt @@ -5,6 +5,7 @@ import android.bluetooth.BluetoothAdapter import android.bluetooth.BluetoothDevice import android.content.Context import android.content.Intent +import androidx.core.content.IntentCompat import com.anod.car.home.BuildConfig import com.anod.car.home.getKoin import com.anod.car.home.utils.Power @@ -172,7 +173,7 @@ object ModeDetector { if (BluetoothDevice.ACTION_ACL_CONNECTED == action) { val devices = prefs.btDevices if (devices.isNotEmpty()) { - val device: BluetoothDevice? = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE) + val device: BluetoothDevice? = IntentCompat.getParcelableExtra(intent, BluetoothDevice.EXTRA_DEVICE, BluetoothDevice::class.java) if (device != null && devices.containsKey(device.address)) { sEventState[FLAG_BLUETOOTH] = true return @@ -189,7 +190,7 @@ object ModeDetector { if (BluetoothDevice.ACTION_ACL_DISCONNECTED == action) { val devices = prefs.btDevices if (devices.isNotEmpty()) { - val device: BluetoothDevice? = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE) + val device: BluetoothDevice? = IntentCompat.getParcelableExtra(intent, BluetoothDevice.EXTRA_DEVICE, BluetoothDevice::class.java) if (device != null && devices.containsKey(device.address)) { sEventState[FLAG_BLUETOOTH] = false return diff --git a/app/src/main/java/com/anod/car/home/incar/ModeService.kt b/app/src/main/java/com/anod/car/home/incar/ModeService.kt index 42c7bc41..9c9670b0 100644 --- a/app/src/main/java/com/anod/car/home/incar/ModeService.kt +++ b/app/src/main/java/com/anod/car/home/incar/ModeService.kt @@ -8,6 +8,7 @@ import android.os.IBinder import android.os.PowerManager import android.telephony.PhoneStateListener import android.telephony.TelephonyManager +import androidx.core.app.ServiceCompat import com.anod.car.home.appwidget.Provider import com.anod.car.home.notifications.InCarModeNotificationFactory import info.anodsplace.applog.AppLog @@ -26,7 +27,7 @@ class ModeService : Service(), KoinComponent { private var forceState: Boolean = false override fun onDestroy() { - stopForeground(true) + ServiceCompat.stopForeground(this, ServiceCompat.STOP_FOREGROUND_REMOVE) val prefs = get() if (forceState) { diff --git a/baselineProfile/build.gradle.kts b/baselineProfile/build.gradle.kts index ddf8b872..f5ced163 100644 --- a/baselineProfile/build.gradle.kts +++ b/baselineProfile/build.gradle.kts @@ -13,7 +13,7 @@ android { defaultConfig { minSdk = 31 - targetSdk = 36 + targetSdk = 37 testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } diff --git a/build.gradle.kts b/build.gradle.kts index 31419310..fd28a573 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -10,3 +10,11 @@ plugins { alias(libs.plugins.baselineprofile) apply false alias(libs.plugins.compose.compiler) apply false } + +subprojects { + // Robolectric 4.17 on JDK 17+ reflects into jdk.internal.access (FileDescriptor shadow at API 37+). + // The JPMS blocks this by default, so open the package to the forked unit-test JVM. + tasks.withType().configureEach { + jvmArgs("--add-opens=java.base/jdk.internal.access=ALL-UNNAMED") + } +} diff --git a/compose/src/androidMain/kotlin/info/anodsplace/carwidget/appwidget/EditWidgetViewModel.kt b/compose/src/androidMain/kotlin/info/anodsplace/carwidget/appwidget/EditWidgetViewModel.kt index 7a25a396..574c01fa 100644 --- a/compose/src/androidMain/kotlin/info/anodsplace/carwidget/appwidget/EditWidgetViewModel.kt +++ b/compose/src/androidMain/kotlin/info/anodsplace/carwidget/appwidget/EditWidgetViewModel.kt @@ -2,8 +2,8 @@ package info.anodsplace.carwidget.appwidget import android.app.Application import android.content.Context +import android.os.Bundle import androidx.compose.runtime.Immutable -import androidx.core.os.bundleOf import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import coil3.ImageLoader @@ -58,19 +58,19 @@ class EditWidgetViewModel( context = application, title = application.getString(R.string.pref_settings_transparent), iconRes = skinProperties.settingsButtonRes, - extras = bundleOf("button" to WidgetInterface.WIDGET_BUTTON_SETTINGS) + extras = Bundle().apply { putInt("button", WidgetInterface.WIDGET_BUTTON_SETTINGS) } ), ChooserEntry( context = application, title = application.getString(R.string.pref_incar_transparent), iconRes = skinProperties.inCarButtonEnterRes, - extras = bundleOf("button" to WidgetInterface.WIDGET_BUTTON_INCAR) + extras = Bundle().apply { putInt("button", WidgetInterface.WIDGET_BUTTON_INCAR) } ), ChooserEntry( context = application, title = application.getString(R.string.hidden), iconRes = skinProperties.buttonAlternativeHiddenResId, - extras = bundleOf("button" to WidgetInterface.WIDGET_BUTTON_HIDDEN) + extras = Bundle().apply { putInt("button", WidgetInterface.WIDGET_BUTTON_HIDDEN) } ) ) ) diff --git a/compose/src/androidMain/kotlin/info/anodsplace/carwidget/shortcut/ShortcutEditViewModel.kt b/compose/src/androidMain/kotlin/info/anodsplace/carwidget/shortcut/ShortcutEditViewModel.kt index fb6e8633..9b649739 100644 --- a/compose/src/androidMain/kotlin/info/anodsplace/carwidget/shortcut/ShortcutEditViewModel.kt +++ b/compose/src/androidMain/kotlin/info/anodsplace/carwidget/shortcut/ShortcutEditViewModel.kt @@ -6,6 +6,7 @@ import android.content.Intent.ShortcutIconResource import android.graphics.Bitmap import android.net.Uri import androidx.compose.runtime.Immutable +import androidx.core.content.IntentCompat import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewModelScope @@ -215,7 +216,7 @@ class ShortcutEditViewModel( } if (intent.hasExtra("icon")) { - val bitmap: Bitmap? = intent.getParcelableExtra("icon") + val bitmap: Bitmap? = IntentCompat.getParcelableExtra(intent, "icon", Bitmap::class.java) if (bitmap != null) { val shortcutIcon = ShortcutIcon.forCustomIcon(viewState.shortcutId, bitmap) return shortcutIcon diff --git a/content/src/androidMain/kotlin/info/anodsplace/carwidget/content/shortcuts/ShortcutInfoFactory.kt b/content/src/androidMain/kotlin/info/anodsplace/carwidget/content/shortcuts/ShortcutInfoFactory.kt index 7ea1051c..d1469f46 100644 --- a/content/src/androidMain/kotlin/info/anodsplace/carwidget/content/shortcuts/ShortcutInfoFactory.kt +++ b/content/src/androidMain/kotlin/info/anodsplace/carwidget/content/shortcuts/ShortcutInfoFactory.kt @@ -12,6 +12,7 @@ import android.content.res.Resources import android.graphics.Bitmap import android.graphics.drawable.Drawable import android.os.Parcelable +import androidx.core.content.IntentCompat import androidx.core.content.res.ResourcesCompat import androidx.core.graphics.drawable.toDrawable import androidx.core.net.toUri @@ -48,17 +49,17 @@ class ShortcutIntent(val data: Intent, val isApp: Boolean) { val hasIntent: Boolean get() = data.hasExtra(Intent.EXTRA_SHORTCUT_INTENT) val intent: Intent? - get() = data.getParcelableExtra(Intent.EXTRA_SHORTCUT_INTENT) + get() = IntentCompat.getParcelableExtra(data, Intent.EXTRA_SHORTCUT_INTENT, Intent::class.java) val name: String? get() = data.getStringExtra(Intent.EXTRA_SHORTCUT_NAME) val icon: Parcelable? - get() = data.getParcelableExtra(Intent.EXTRA_SHORTCUT_ICON) + get() = IntentCompat.getParcelableExtra(data, Intent.EXTRA_SHORTCUT_ICON, Parcelable::class.java) val iconResource: Parcelable? - get() = data.getParcelableExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE) + get() = IntentCompat.getParcelableExtra(data, Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Parcelable::class.java) val preferIconResource: Boolean get() = data.getBooleanExtra(ShortcutExtra.EXTRA_PREFER_ICON_RESOURCE, false) val pinItemRequest: LauncherApps.PinItemRequest? - get() = data.getParcelableExtra(LauncherApps.EXTRA_PIN_ITEM_REQUEST) + get() = IntentCompat.getParcelableExtra(data, LauncherApps.EXTRA_PIN_ITEM_REQUEST, LauncherApps.PinItemRequest::class.java) } object ShortcutInfoFactory { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 839a23cc..97262165 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -35,7 +35,7 @@ profileinstaller = "1.4.1" window = "1.5.1" palette = "1.0.0" annotation = "1.10.0" -robolectric = "4.16.1" +robolectric = "4.17-beta-2" androidx-test-core = "1.7.0" nav3Core = "1.1.4" lifecycleViewmodelNav3 = "2.11.0" diff --git a/lib b/lib index 4601f8be..0bd0fdf3 160000 --- a/lib +++ b/lib @@ -1 +1 @@ -Subproject commit 4601f8be1e39be434c3ee487072433df90d820f8 +Subproject commit 0bd0fdf371e2fab4d672e7aa06b863992b5943df