From d96a511efe016e80ad4617c9a1a3491b27f94b98 Mon Sep 17 00:00:00 2001 From: Kieron Quinn Date: Mon, 13 Nov 2023 09:17:21 +0000 Subject: [PATCH] Implement Smartspacer as an alternative At a Glance provider (#3684) --- AndroidManifest.xml | 7 ++--- build.gradle | 5 +++- lawnchair/AndroidManifest.xml | 1 + lawnchair/res/values/strings.xml | 1 + .../src/app/lawnchair/LawnchairLauncher.kt | 3 +++ .../smartspace/model/SmartspaceMode.kt | 16 +++++++++++ proguard.pro | 3 +++ quickstep/AndroidManifest-launcher.xml | 8 ++++-- res/layout/smartspace_smartspacer.xml | 27 +++++++++++++++++++ 9 files changed, 65 insertions(+), 6 deletions(-) create mode 100644 res/layout/smartspace_smartspacer.xml diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 8844207155..cd8dd39c8c 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -19,9 +19,10 @@ ** Modifications copyright 2021, Lawnchair */ --> - - + + diff --git a/lawnchair/src/app/lawnchair/LawnchairLauncher.kt b/lawnchair/src/app/lawnchair/LawnchairLauncher.kt index 112d059e96..84a70697bc 100644 --- a/lawnchair/src/app/lawnchair/LawnchairLauncher.kt +++ b/lawnchair/src/app/lawnchair/LawnchairLauncher.kt @@ -66,6 +66,7 @@ import com.android.launcher3.util.TouchController import com.android.launcher3.widget.RoundedCornerEnforcement import com.android.systemui.plugins.shared.LauncherOverlayManager import com.android.systemui.shared.system.QuickStepContract +import com.kieronquinn.app.smartspacer.sdk.client.SmartspacerClient import com.patrykmichalik.opto.core.firstBlocking import com.patrykmichalik.opto.core.onEach import dev.kdrag0n.monet.theme.ColorScheme @@ -320,6 +321,8 @@ class LawnchairLauncher : QuickstepLauncher(), LifecycleOwner, override fun onDestroy() { super.onDestroy() lifecycle.handleLifecycleEvent(Lifecycle.Event.ON_DESTROY) + // Only actually closes if required, safe to call if not enabled + SmartspacerClient.close() } @Suppress("OVERRIDE_DEPRECATION") diff --git a/lawnchair/src/app/lawnchair/smartspace/model/SmartspaceMode.kt b/lawnchair/src/app/lawnchair/smartspace/model/SmartspaceMode.kt index 3de6b17c82..5f19ffa7c2 100644 --- a/lawnchair/src/app/lawnchair/smartspace/model/SmartspaceMode.kt +++ b/lawnchair/src/app/lawnchair/smartspace/model/SmartspaceMode.kt @@ -1,6 +1,7 @@ package app.lawnchair.smartspace.model import android.content.Context +import android.os.Build import androidx.annotation.LayoutRes import androidx.annotation.StringRes import app.lawnchair.util.isPackageInstalledAndEnabled @@ -15,6 +16,7 @@ sealed class SmartspaceMode( fun fromString(value: String): SmartspaceMode = when (value) { "google" -> GoogleSmartspace "google_search" -> GoogleSearchSmartspace + "smartspacer" -> Smartspacer else -> LawnchairSmartspace } @@ -25,6 +27,7 @@ sealed class SmartspaceMode( LawnchairSmartspace, GoogleSmartspace, GoogleSearchSmartspace, + Smartspacer, ) } @@ -59,3 +62,16 @@ object GoogleSmartspace : SmartspaceMode( override fun isAvailable(context: Context): Boolean = context.packageManager.isPackageInstalledAndEnabled("com.google.android.googlequicksearchbox") } + +object Smartspacer : SmartspaceMode( + nameResourceId = R.string.smartspace_mode_smartspacer, + layoutResourceId = R.layout.smartspace_smartspacer, +) { + override fun toString(): String = "smartspacer" + + override fun isAvailable(context: Context): Boolean { + // Smartspacer requires Android 10+ + return Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && + context.packageManager.isPackageInstalledAndEnabled("com.kieronquinn.app.smartspacer") + } +} diff --git a/proguard.pro b/proguard.pro index cf0a315758..eb535b851a 100644 --- a/proguard.pro +++ b/proguard.pro @@ -159,3 +159,6 @@ -keep class com.android.** { *; } + +# Keep Smartspacer's client SDK +-keep class com.kieronquinn.app.smartspacer.sdk.** { *; } diff --git a/quickstep/AndroidManifest-launcher.xml b/quickstep/AndroidManifest-launcher.xml index eb59719649..870b3f6a43 100644 --- a/quickstep/AndroidManifest-launcher.xml +++ b/quickstep/AndroidManifest-launcher.xml @@ -20,8 +20,12 @@ */ --> - + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools"> + + +