From 07aee7155c4741f735d398f7cf60f0d35a4d19a3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 14 Sep 2024 09:26:29 +0800 Subject: [PATCH 1/6] Update dependency org.jetbrains.kotlinx:kotlinx-coroutines-android to v1.9.0 (#4814) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index f976ea78529..40a308abde3 100644 --- a/build.gradle +++ b/build.gradle @@ -362,7 +362,7 @@ dependencies { implementation "androidx.recyclerview:recyclerview:1.3.2" implementation "androidx.preference:preference-ktx:1.2.1" - implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1' + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0' implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.2' implementation 'com.github.ChickenHook:RestrictionBypass:2.2' implementation 'dev.rikka.tools.refine:runtime:4.4.0' From a5b11e2c543bd4644bcf749e64c073a30569d892 Mon Sep 17 00:00:00 2001 From: Zongle Wang Date: Fri, 13 Sep 2024 21:26:57 -0400 Subject: [PATCH 2/6] Make BaseActivity extends ComponentActivity (#4803) We don't have to maintain ComponentActivity like behaviors in LawnchairLauncher anymore. --- .../src/app/lawnchair/LawnchairLauncher.kt | 153 +----------------- src/com/android/launcher3/BaseActivity.java | 3 +- src/com/android/launcher3/Launcher.java | 5 +- 3 files changed, 6 insertions(+), 155 deletions(-) diff --git a/lawnchair/src/app/lawnchair/LawnchairLauncher.kt b/lawnchair/src/app/lawnchair/LawnchairLauncher.kt index ee905509f56..6f4ea68e133 100644 --- a/lawnchair/src/app/lawnchair/LawnchairLauncher.kt +++ b/lawnchair/src/app/lawnchair/LawnchairLauncher.kt @@ -19,34 +19,14 @@ package app.lawnchair import android.app.ActivityOptions import android.content.Context import android.content.Intent -import android.content.IntentSender import android.graphics.drawable.Drawable import android.os.Bundle -import android.os.Handler -import android.os.Looper import android.view.Display import android.view.View import android.view.ViewTreeObserver -import androidx.activity.OnBackPressedDispatcher -import androidx.activity.OnBackPressedDispatcherOwner -import androidx.activity.result.ActivityResultRegistry -import androidx.activity.result.ActivityResultRegistryOwner -import androidx.activity.result.IntentSenderRequest -import androidx.activity.result.contract.ActivityResultContract -import androidx.activity.result.contract.ActivityResultContracts.RequestMultiplePermissions -import androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult -import androidx.activity.result.contract.ActivityResultContracts.StartIntentSenderForResult -import androidx.core.app.ActivityCompat -import androidx.core.app.ActivityOptionsCompat import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsControllerCompat -import androidx.lifecycle.Lifecycle -import androidx.lifecycle.LifecycleOwner -import androidx.lifecycle.LifecycleRegistry import androidx.lifecycle.lifecycleScope -import androidx.savedstate.SavedStateRegistry -import androidx.savedstate.SavedStateRegistryController -import androidx.savedstate.SavedStateRegistryOwner import app.lawnchair.LawnchairApp.Companion.showQuickstepWarningIfNecessary import app.lawnchair.compat.LawnchairQuickstepCompat import app.lawnchair.factory.LawnchairWidgetHolder @@ -82,7 +62,6 @@ import com.android.launcher3.util.RunnableList import com.android.launcher3.util.SystemUiController.UI_STATE_BASE_WINDOW import com.android.launcher3.util.Themes import com.android.launcher3.util.TouchController -import com.android.launcher3.views.ComposeInitializer import com.android.launcher3.views.FloatingSurfaceView import com.android.launcher3.widget.LauncherWidgetHolder import com.android.launcher3.widget.RoundedCornerEnforcement @@ -98,14 +77,7 @@ import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch -class LawnchairLauncher : - QuickstepLauncher(), - LifecycleOwner, - SavedStateRegistryOwner, - ActivityResultRegistryOwner, - OnBackPressedDispatcherOwner { - - private val savedStateRegistryController = SavedStateRegistryController.create(this) +class LawnchairLauncher : QuickstepLauncher() { private val defaultOverlay by unsafeLazy { OverlayCallbackImpl(this) } private val prefs by unsafeLazy { PreferenceManager.getInstance(this) } private val preferenceManager2 by unsafeLazy { PreferenceManager2.getInstance(this) } @@ -136,92 +108,9 @@ class LawnchairLauncher : val gestureController by unsafeLazy { GestureController(this) } - override val savedStateRegistry: SavedStateRegistry = savedStateRegistryController.savedStateRegistry - override val activityResultRegistry = object : ActivityResultRegistry() { - override fun onLaunch( - requestCode: Int, - contract: ActivityResultContract, - input: I, - options: ActivityOptionsCompat?, - ) { - val activity = this@LawnchairLauncher - - // Immediate result path - val synchronousResult = contract.getSynchronousResult(activity, input) - if (synchronousResult != null) { - Handler(Looper.getMainLooper()).post { - dispatchResult( - requestCode, - synchronousResult.value, - ) - } - return - } - - // Start activity path - val intent = contract.createIntent(activity, input) - var optionsBundle: Bundle? = null - // If there are any extras, we should defensively set the classLoader - if (intent.extras != null && intent.extras!!.classLoader == null) { - intent.setExtrasClassLoader(activity.classLoader) - } - if (intent.hasExtra(StartActivityForResult.EXTRA_ACTIVITY_OPTIONS_BUNDLE)) { - optionsBundle = - intent.getBundleExtra(StartActivityForResult.EXTRA_ACTIVITY_OPTIONS_BUNDLE) - intent.removeExtra(StartActivityForResult.EXTRA_ACTIVITY_OPTIONS_BUNDLE) - } else if (options != null) { - optionsBundle = options.toBundle() - } - if (RequestMultiplePermissions.ACTION_REQUEST_PERMISSIONS == intent.action) { - // requestPermissions path - var permissions = - intent.getStringArrayExtra(RequestMultiplePermissions.EXTRA_PERMISSIONS) - if (permissions == null) { - permissions = arrayOfNulls(0) - } - ActivityCompat.requestPermissions(activity, permissions, requestCode) - } else if (StartIntentSenderForResult.ACTION_INTENT_SENDER_REQUEST == intent.action) { - val request: IntentSenderRequest = - intent.getParcelableExtra(StartIntentSenderForResult.EXTRA_INTENT_SENDER_REQUEST)!! - try { - // startIntentSenderForResult path - ActivityCompat.startIntentSenderForResult( - activity, - request.intentSender, - requestCode, - request.fillInIntent, - request.flagsMask, - request.flagsValues, - 0, - optionsBundle, - ) - } catch (e: IntentSender.SendIntentException) { - Handler(Looper.getMainLooper()).post { - dispatchResult( - requestCode, - RESULT_CANCELED, - Intent() - .setAction(StartIntentSenderForResult.ACTION_INTENT_SENDER_REQUEST) - .putExtra(StartIntentSenderForResult.EXTRA_SEND_INTENT_EXCEPTION, e), - ) - } - } - } else { - // startActivityForResult path - ActivityCompat.startActivityForResult(activity, intent, requestCode, optionsBundle) - } - } - } - override val onBackPressedDispatcher = OnBackPressedDispatcher { - super.onBackPressed() - } - override val lifecycle: LifecycleRegistry = LifecycleRegistry(this) - override fun onCreate(savedInstanceState: Bundle?) { layoutInflater.factory2 = LawnchairLayoutFactory(this) - savedStateRegistryController.performRestore(savedInstanceState) super.onCreate(savedInstanceState) - lifecycle.handleLifecycleEvent(Lifecycle.Event.ON_CREATE) prefs.launcherTheme.subscribeChanges(this, ::updateTheme) prefs.feedProvider.subscribeChanges(this, defaultOverlay::reconnect) @@ -297,11 +186,6 @@ class LawnchairLauncher : reloadIconsIfNeeded() } - override fun setupViews() { - super.setupViews() - ComposeInitializer.initCompose(this) - } - override fun collectStateHandlers(out: MutableList>) { super.collectStateHandlers(out) out.add(SearchBarStateHandler(this)) @@ -427,14 +311,8 @@ class LawnchairLauncher : return ActivityOptionsWrapper(options, callback) } - override fun onStart() { - super.onStart() - lifecycle.handleLifecycleEvent(Lifecycle.Event.ON_START) - } - override fun onResume() { super.onResume() - lifecycle.handleLifecycleEvent(Lifecycle.Event.ON_RESUME) restartIfPending() dragLayer.viewTreeObserver.addOnDrawListener(object : ViewTreeObserver.OnDrawListener { @@ -454,41 +332,12 @@ class LawnchairLauncher : }) } - override fun onPause() { - super.onPause() - lifecycle.handleLifecycleEvent(Lifecycle.Event.ON_PAUSE) - } - - override fun onStop() { - super.onStop() - lifecycle.handleLifecycleEvent(Lifecycle.Event.ON_STOP) - } - 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") - override fun onBackPressed() { - onBackPressedDispatcher.onBackPressed() - } - - override fun onSaveInstanceState(outState: Bundle) { - super.onSaveInstanceState(outState) - savedStateRegistryController.performSave(outState) - } - - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - if (activityResultRegistry.dispatchResult(requestCode, resultCode, data)) { - mPendingActivityRequestCode = -1 - } else { - super.onActivityResult(requestCode, resultCode, data) - } - } - override fun getDefaultOverlay(): LauncherOverlayManager = defaultOverlay fun recreateIfNotScheduled() { diff --git a/src/com/android/launcher3/BaseActivity.java b/src/com/android/launcher3/BaseActivity.java index 05a6452d2e0..c405ab494ea 100644 --- a/src/com/android/launcher3/BaseActivity.java +++ b/src/com/android/launcher3/BaseActivity.java @@ -32,6 +32,7 @@ import android.view.View; import android.window.OnBackInvokedDispatcher; +import androidx.activity.ComponentActivity; import androidx.annotation.IntDef; import com.android.launcher3.DeviceProfile.OnDeviceProfileChangeListener; @@ -52,7 +53,7 @@ /** * Launcher BaseActivity */ -public abstract class BaseActivity extends Activity implements ActivityContext { +public abstract class BaseActivity extends ComponentActivity implements ActivityContext { private static final String TAG = "BaseActivity"; static final boolean DEBUG = false; diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index b802c691755..1eff126cb67 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -1336,7 +1336,7 @@ private void restoreState(Bundle savedState) { LauncherState[] stateValues = LauncherState.values(); LauncherState state = stateValues[stateOrdinal]; - NonConfigInstance lastInstance = (NonConfigInstance) getLastNonConfigurationInstance(); + NonConfigInstance lastInstance = (NonConfigInstance) getLastCustomNonConfigurationInstance(); boolean forceRestore = lastInstance != null && (lastInstance.config.diff(mOldConfig) & CONFIG_UI_MODE) != 0; if (forceRestore || !state.shouldDisableRestore()) { @@ -1612,8 +1612,9 @@ public void onDetachedFromWindow() { closeContextMenu(); } + @Nullable @Override - public Object onRetainNonConfigurationInstance() { + public Object onRetainCustomNonConfigurationInstance() { NonConfigInstance instance = new NonConfigInstance(); instance.config = new Configuration(mOldConfig); return instance; From 3a1e4ecad8d8fc8ece60bccf34f0dc4b8676ba4a Mon Sep 17 00:00:00 2001 From: Unofficial Life <118039878+Unofficial-Life@users.noreply.github.com> Date: Sat, 14 Sep 2024 07:03:39 +0530 Subject: [PATCH 3/6] Add Firefox and Iceraven supports for QSB (#4793) --- lawnchair/res/drawable/ic_firefox.xml | 12 +++++++++ lawnchair/res/drawable/ic_firefox_tinted.xml | 12 +++++++++ lawnchair/res/drawable/ic_iceraven.xml | 14 +++++++++++ lawnchair/res/drawable/ic_iceraven_tinted.xml | 14 +++++++++++ lawnchair/res/values/strings.xml | 2 ++ .../app/lawnchair/qsb/providers/Firefox.kt | 25 +++++++++++++++++++ .../app/lawnchair/qsb/providers/Iceraven.kt | 25 +++++++++++++++++++ .../qsb/providers/QsbSearchProvider.kt | 2 ++ 8 files changed, 106 insertions(+) create mode 100644 lawnchair/res/drawable/ic_firefox.xml create mode 100644 lawnchair/res/drawable/ic_firefox_tinted.xml create mode 100644 lawnchair/res/drawable/ic_iceraven.xml create mode 100644 lawnchair/res/drawable/ic_iceraven_tinted.xml create mode 100644 lawnchair/src/app/lawnchair/qsb/providers/Firefox.kt create mode 100644 lawnchair/src/app/lawnchair/qsb/providers/Iceraven.kt diff --git a/lawnchair/res/drawable/ic_firefox.xml b/lawnchair/res/drawable/ic_firefox.xml new file mode 100644 index 00000000000..247d797bcfe --- /dev/null +++ b/lawnchair/res/drawable/ic_firefox.xml @@ -0,0 +1,12 @@ + + + + + + diff --git a/lawnchair/res/drawable/ic_firefox_tinted.xml b/lawnchair/res/drawable/ic_firefox_tinted.xml new file mode 100644 index 00000000000..4beb0fdbdac --- /dev/null +++ b/lawnchair/res/drawable/ic_firefox_tinted.xml @@ -0,0 +1,12 @@ + + + + + + diff --git a/lawnchair/res/drawable/ic_iceraven.xml b/lawnchair/res/drawable/ic_iceraven.xml new file mode 100644 index 00000000000..7308766f81f --- /dev/null +++ b/lawnchair/res/drawable/ic_iceraven.xml @@ -0,0 +1,14 @@ + + + + diff --git a/lawnchair/res/drawable/ic_iceraven_tinted.xml b/lawnchair/res/drawable/ic_iceraven_tinted.xml new file mode 100644 index 00000000000..72268352ec1 --- /dev/null +++ b/lawnchair/res/drawable/ic_iceraven_tinted.xml @@ -0,0 +1,14 @@ + + + + \ No newline at end of file diff --git a/lawnchair/res/values/strings.xml b/lawnchair/res/values/strings.xml index a7e27c999eb..026e9360de8 100644 --- a/lawnchair/res/values/strings.xml +++ b/lawnchair/res/values/strings.xml @@ -566,6 +566,8 @@ YouTube Pixel Search Yandex + Firefox + Iceraven %1$s and Lawnchair have a revenue share agreement.\n\nSearching with %1$s helps support Lawnchair. diff --git a/lawnchair/src/app/lawnchair/qsb/providers/Firefox.kt b/lawnchair/src/app/lawnchair/qsb/providers/Firefox.kt new file mode 100644 index 00000000000..99c610793ad --- /dev/null +++ b/lawnchair/src/app/lawnchair/qsb/providers/Firefox.kt @@ -0,0 +1,25 @@ +package app.lawnchair.qsb.providers + +import android.content.Intent +import app.lawnchair.qsb.ThemingMethod +import com.android.launcher3.R + +data object Firefox : QsbSearchProvider( + id = "Firefox", + name = R.string.search_provider_firefox, + icon = R.drawable.ic_firefox, + themedIcon = R.drawable.ic_firefox_tinted, + themingMethod = ThemingMethod.TINT, + packageName = "org.mozilla.firefox", + action = "org.mozilla.fenix.OPEN_TAB", + className = "org.mozilla.fenix.IntentReceiverActivity", + website = "https://play.google.com/store/apps/details?id=org.mozilla.firefox", + type = QsbSearchProviderType.APP, + supportVoiceIntent = false, +) { + + override fun handleCreateVoiceIntent(): Intent = + Intent(action) + .addFlags(INTENT_FLAGS) + .setClassName(packageName, "org.chromium.chrome.browser.VoiceSearchActivity") +} diff --git a/lawnchair/src/app/lawnchair/qsb/providers/Iceraven.kt b/lawnchair/src/app/lawnchair/qsb/providers/Iceraven.kt new file mode 100644 index 00000000000..c51b0e00b43 --- /dev/null +++ b/lawnchair/src/app/lawnchair/qsb/providers/Iceraven.kt @@ -0,0 +1,25 @@ +package app.lawnchair.qsb.providers + +import android.content.Intent +import app.lawnchair.qsb.ThemingMethod +import com.android.launcher3.R + +data object Iceraven : QsbSearchProvider( + id = "Iceraven", + name = R.string.search_provider_iceraven, + icon = R.drawable.ic_iceraven, + themedIcon = R.drawable.ic_iceraven_tinted, + themingMethod = ThemingMethod.TINT, + packageName = "io.github.forkmaintainers.iceraven", + action = "org.mozilla.fenix.OPEN_TAB", + className = "org.mozilla.fenix.IntentReceiverActivity", + website = "github.com/fork-maintainers/iceraven-browser/releases/latest", + type = QsbSearchProviderType.APP, + supportVoiceIntent = true, +) { + + override fun handleCreateVoiceIntent(): Intent = + Intent(action) + .addFlags(INTENT_FLAGS) + .setClassName(packageName, "org.chromium.chrome.browser.VoiceSearchActivity") +} diff --git a/lawnchair/src/app/lawnchair/qsb/providers/QsbSearchProvider.kt b/lawnchair/src/app/lawnchair/qsb/providers/QsbSearchProvider.kt index 585b8f5f911..1020c1fa082 100644 --- a/lawnchair/src/app/lawnchair/qsb/providers/QsbSearchProvider.kt +++ b/lawnchair/src/app/lawnchair/qsb/providers/QsbSearchProvider.kt @@ -133,6 +133,8 @@ sealed class QsbSearchProvider( Bing, Brave, Yandex, + Firefox, + Iceraven, Startpage, ) From 419304a3d0170dd33086ea0ead36ce53f3b90897 Mon Sep 17 00:00:00 2001 From: tgex0 <160293965+tgex0@users.noreply.github.com> Date: Sat, 14 Sep 2024 02:35:59 +0100 Subject: [PATCH 4/6] Fix floating point arithmetic error (#4795) * Fix floating point arithmetic error * Change variable name --- .../preferences/components/controls/SliderPreference.kt | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/controls/SliderPreference.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/controls/SliderPreference.kt index 0b2ae921576..030b0014152 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/components/controls/SliderPreference.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/components/controls/SliderPreference.kt @@ -138,10 +138,11 @@ fun SliderPreference( fun getSteps(valueRange: ClosedFloatingPointRange, step: Float): Int { if (step == 0f) return 0 - val start = valueRange.start - val end = valueRange.endInclusive - val steps = ((end - start) / step).toInt() - require(start + step * steps == end) { + val start = valueRange.start.toBigDecimal() + val end = valueRange.endInclusive.toBigDecimal() + val decimalSteps = (end - start) / step.toBigDecimal() + val steps = decimalSteps.toInt() + require(decimalSteps.compareTo(steps.toBigDecimal()) == 0) { "value range must be a multiple of step" } return steps - 1 From feac7a5810a43ff5aef1721c4c997db757318408 Mon Sep 17 00:00:00 2001 From: tgex0 <160293965+tgex0@users.noreply.github.com> Date: Sat, 14 Sep 2024 02:37:02 +0100 Subject: [PATCH 5/6] Fix calculator search precision and rounding errors (#4796) * Fix calculator search precision and rounding errors * Ensure equation is updated in search result tile * Update lawnchair/src/app/lawnchair/search/algorithms/data/Calculation.kt --------- Co-authored-by: Zongle Wang --- .../search/adapter/SearchTargetFactory.kt | 4 +++- .../search/algorithms/data/Calculation.kt | 16 +++++++++++++--- .../algorithms/data/calculator/Expressions.kt | 4 ++-- .../data/calculator/internal/Evaluator.kt | 2 +- 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/lawnchair/src/app/lawnchair/search/adapter/SearchTargetFactory.kt b/lawnchair/src/app/lawnchair/search/adapter/SearchTargetFactory.kt index 0b270645963..b9a769dde07 100644 --- a/lawnchair/src/app/lawnchair/search/adapter/SearchTargetFactory.kt +++ b/lawnchair/src/app/lawnchair/search/adapter/SearchTargetFactory.kt @@ -37,6 +37,7 @@ import java.io.IOException import java.io.InputStream import java.security.MessageDigest import java.util.Locale +import java.util.UUID import okio.ByteString class SearchTargetFactory( @@ -93,7 +94,8 @@ class SearchTargetFactory( ): SearchTargetCompat { val result = calculation.result val equation = calculation.equation - val id = "calculator:$result" + val uuid = UUID.randomUUID().toString() + val id = "calculator:$uuid" val action = SearchActionCompat.Builder(id, result) .setIcon( Icon.createWithResource(context, R.drawable.calculator) diff --git a/lawnchair/src/app/lawnchair/search/algorithms/data/Calculation.kt b/lawnchair/src/app/lawnchair/search/algorithms/data/Calculation.kt index dcd21f8f084..e05585b32f0 100644 --- a/lawnchair/src/app/lawnchair/search/algorithms/data/Calculation.kt +++ b/lawnchair/src/app/lawnchair/search/algorithms/data/Calculation.kt @@ -1,6 +1,8 @@ package app.lawnchair.search.algorithms.data import app.lawnchair.search.algorithms.data.calculator.Expressions +import java.math.BigDecimal +import java.math.MathContext data class Calculation( val equation: String, @@ -12,9 +14,17 @@ fun calculateEquationFromString( query: String, ): Calculation { return try { - val result = Expressions() - .eval(query) - .toString() + val evaluatedValue = Expressions().eval(query) + val roundedValue = evaluatedValue.round(MathContext.DECIMAL64) + val formattedValue = roundedValue.stripTrailingZeros() + val absoluteValue = formattedValue.abs() + val threshold = BigDecimal("9999999999999999") + + val result = if (absoluteValue > threshold) { + formattedValue.toString() + } else { + formattedValue.toPlainString() + } Calculation( equation = query, diff --git a/lawnchair/src/app/lawnchair/search/algorithms/data/calculator/Expressions.kt b/lawnchair/src/app/lawnchair/search/algorithms/data/calculator/Expressions.kt index 4f258bb73f1..d4e89ea4f7a 100644 --- a/lawnchair/src/app/lawnchair/search/algorithms/data/calculator/Expressions.kt +++ b/lawnchair/src/app/lawnchair/search/algorithms/data/calculator/Expressions.kt @@ -18,8 +18,8 @@ class Expressions { private val evaluator = Evaluator() init { - define("pi", Math.PI) - define("e", Math.E) + define("pi", BigDecimal(Math.PI).setScale(33, RoundingMode.HALF_EVEN)) + define("e", BigDecimal(Math.E).setScale(33, RoundingMode.HALF_EVEN)) evaluator.addFunction("abs") { arguments -> if (arguments.size != 1) { diff --git a/lawnchair/src/app/lawnchair/search/algorithms/data/calculator/internal/Evaluator.kt b/lawnchair/src/app/lawnchair/search/algorithms/data/calculator/internal/Evaluator.kt index 9eb51e91917..8e9ff478ae6 100644 --- a/lawnchair/src/app/lawnchair/search/algorithms/data/calculator/internal/Evaluator.kt +++ b/lawnchair/src/app/lawnchair/search/algorithms/data/calculator/internal/Evaluator.kt @@ -23,7 +23,7 @@ import java.util.Locale import kotlin.math.pow internal class Evaluator : ExprVisitor { - internal var mathContext: MathContext = MathContext.DECIMAL64 + internal var mathContext: MathContext = MathContext.DECIMAL128 private val variables: LinkedHashMap = linkedMapOf() private val functions: MutableMap = mutableMapOf() From 4030308c0d686c15ed3b511eb3c91379500e2461 Mon Sep 17 00:00:00 2001 From: GitGitro <108683123+GitGitro@users.noreply.github.com> Date: Sat, 14 Sep 2024 01:43:13 +0000 Subject: [PATCH 6/6] Add Mull to QSB providers (#4815) Co-authored-by: Zongle Wang --- lawnchair/res/values/strings.xml | 1 + .../src/app/lawnchair/qsb/providers/Mull.kt | 25 ++++++++ .../qsb/providers/QsbSearchProvider.kt | 1 + res/drawable/ic_mull.xml | 59 +++++++++++++++++++ res/drawable/ic_mull_tinted.xml | 46 +++++++++++++++ 5 files changed, 132 insertions(+) create mode 100644 lawnchair/src/app/lawnchair/qsb/providers/Mull.kt create mode 100644 res/drawable/ic_mull.xml create mode 100644 res/drawable/ic_mull_tinted.xml diff --git a/lawnchair/res/values/strings.xml b/lawnchair/res/values/strings.xml index 026e9360de8..a0669d6a6bc 100644 --- a/lawnchair/res/values/strings.xml +++ b/lawnchair/res/values/strings.xml @@ -568,6 +568,7 @@ Yandex Firefox Iceraven + Mull %1$s and Lawnchair have a revenue share agreement.\n\nSearching with %1$s helps support Lawnchair. diff --git a/lawnchair/src/app/lawnchair/qsb/providers/Mull.kt b/lawnchair/src/app/lawnchair/qsb/providers/Mull.kt new file mode 100644 index 00000000000..7842b101d93 --- /dev/null +++ b/lawnchair/src/app/lawnchair/qsb/providers/Mull.kt @@ -0,0 +1,25 @@ +package app.lawnchair.qsb.providers + +import android.content.Intent +import app.lawnchair.qsb.ThemingMethod +import com.android.launcher3.R + +data object Mull : QsbSearchProvider( + id = "Mull", + name = R.string.search_provider_mull, + icon = R.drawable.ic_mull, + themedIcon = R.drawable.ic_mull_tinted, + themingMethod = ThemingMethod.TINT, + packageName = "us.spotco.fennec_dos", + action = "org.mozilla.fenix.OPEN_TAB", + className = "org.mozilla.fenix.IntentReceiverActivity", + website = "gitlab.com/divested-mobile/mull-fenix", + type = QsbSearchProviderType.APP, + supportVoiceIntent = true, +) { + + override fun handleCreateVoiceIntent(): Intent = + Intent(action) + .addFlags(INTENT_FLAGS) + .setClassName(packageName, "org.chromium.chrome.browser.VoiceSearchActivity") +} diff --git a/lawnchair/src/app/lawnchair/qsb/providers/QsbSearchProvider.kt b/lawnchair/src/app/lawnchair/qsb/providers/QsbSearchProvider.kt index 1020c1fa082..1409194c9cb 100644 --- a/lawnchair/src/app/lawnchair/qsb/providers/QsbSearchProvider.kt +++ b/lawnchair/src/app/lawnchair/qsb/providers/QsbSearchProvider.kt @@ -136,6 +136,7 @@ sealed class QsbSearchProvider( Firefox, Iceraven, Startpage, + Mull, ) /** diff --git a/res/drawable/ic_mull.xml b/res/drawable/ic_mull.xml new file mode 100644 index 00000000000..079ee421235 --- /dev/null +++ b/res/drawable/ic_mull.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + diff --git a/res/drawable/ic_mull_tinted.xml b/res/drawable/ic_mull_tinted.xml new file mode 100644 index 00000000000..44768626f3e --- /dev/null +++ b/res/drawable/ic_mull_tinted.xml @@ -0,0 +1,46 @@ + + + + + + + + + +