diff --git a/lawnchair/res/values/strings.xml b/lawnchair/res/values/strings.xml
index 9ab77fa8b3..e17bf33d25 100644
--- a/lawnchair/res/values/strings.xml
+++ b/lawnchair/res/values/strings.xml
@@ -98,4 +98,7 @@
Follow wallpaper
Recents
Show “Clear all” at bottom
+ Corner radius
+ Custom corner radius
+ If the default doesn\'t match your screen
diff --git a/lawnchair/src/app/lawnchair/preferences/PreferenceManager.kt b/lawnchair/src/app/lawnchair/preferences/PreferenceManager.kt
index 434a34e091..5fac4f5d87 100644
--- a/lawnchair/src/app/lawnchair/preferences/PreferenceManager.kt
+++ b/lawnchair/src/app/lawnchair/preferences/PreferenceManager.kt
@@ -81,6 +81,8 @@ class PreferenceManager private constructor(private val context: Context) : Base
val workspaceDt2s = BoolPref("pref_doubleTap2Sleep", true)
val launcherTheme = StringPref("pref_launcherTheme", "system")
val clearAllAsAction = BoolPref("pref_clearAllAsAction", false)
+ val overrideWindowCornerRadius = BoolPref("pref_overrideWindowCornerRadius", false, recreate)
+ val windowCornerRadius = FloatPref("pref_windowCornerRadius", 1f, recreate)
init {
sp.registerOnSharedPreferenceChangeListener(this)
diff --git a/lawnchair/src/app/lawnchair/ui/preferences/QuickstepPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/QuickstepPreferences.kt
index e48e04a529..b214895c52 100644
--- a/lawnchair/src/app/lawnchair/ui/preferences/QuickstepPreferences.kt
+++ b/lawnchair/src/app/lawnchair/ui/preferences/QuickstepPreferences.kt
@@ -1,19 +1,21 @@
package app.lawnchair.ui.preferences
-import androidx.compose.animation.ExperimentalAnimationApi
+import androidx.compose.animation.*
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
import androidx.compose.ui.res.stringResource
import androidx.navigation.NavGraphBuilder
import app.lawnchair.preferences.getAdapter
+import app.lawnchair.preferences.observeAsState
import app.lawnchair.preferences.preferenceManager
import app.lawnchair.ui.preferences.components.PreferenceGroup
import app.lawnchair.ui.preferences.components.PreferenceLayout
+import app.lawnchair.ui.preferences.components.SliderPreference
import app.lawnchair.ui.preferences.components.SwitchPreference
import app.lawnchair.util.Meta
import app.lawnchair.util.pageMeta
import com.android.launcher3.R
-
@ExperimentalAnimationApi
fun NavGraphBuilder.quickstepGraph(route: String) {
preferenceGraph(route, { QuickstepPreferences() })
@@ -23,13 +25,36 @@ fun NavGraphBuilder.quickstepGraph(route: String) {
@Composable
fun QuickstepPreferences() {
pageMeta.provide(Meta(title = stringResource(id = R.string.quickstep_label)))
+ val prefs = preferenceManager()
PreferenceLayout {
PreferenceGroup(isFirstChild = true) {
SwitchPreference(
- adapter = preferenceManager().clearAllAsAction.getAdapter(),
+ adapter = prefs.clearAllAsAction.getAdapter(),
label = stringResource(id = R.string.clear_all_as_action_label),
showDivider = false
)
}
+ PreferenceGroup(heading = stringResource(id = R.string.window_corner_radius_label)) {
+ val overrideWindowCornerRadius by prefs.overrideWindowCornerRadius.observeAsState()
+ SwitchPreference(
+ adapter = prefs.overrideWindowCornerRadius.getAdapter(),
+ label = stringResource(id = R.string.override_window_corner_radius_label),
+ description = stringResource(id = R.string.override_window_corner_radius_description),
+ showDivider = overrideWindowCornerRadius
+ )
+ AnimatedVisibility(
+ visible = overrideWindowCornerRadius,
+ enter = expandVertically() + fadeIn(),
+ exit = shrinkVertically() + fadeOut()
+ ) {
+ SliderPreference(
+ label = stringResource(id = R.string.window_corner_radius_label),
+ adapter = prefs.windowCornerRadius.getAdapter(),
+ steps = 0,
+ valueRange = 80f..150f,
+ showDivider = false
+ )
+ }
+ }
}
}
diff --git a/lawnchair/src/app/lawnchair/ui/preferences/components/SliderPreference.kt b/lawnchair/src/app/lawnchair/ui/preferences/components/SliderPreference.kt
index 4439be224d..314f2c8c89 100644
--- a/lawnchair/src/app/lawnchair/ui/preferences/components/SliderPreference.kt
+++ b/lawnchair/src/app/lawnchair/ui/preferences/components/SliderPreference.kt
@@ -63,9 +63,9 @@ fun SliderPreference(
) {
Text(
text = if (showAsPercentage) {
- "${(adapter.state.value * 100).roundToInt()}%"
+ "${(sliderValue * 100).roundToInt()}%"
} else {
- "${adapter.state.value.roundToInt()}"
+ "${sliderValue.roundToInt()}"
}
)
}
diff --git a/lawnchair/src/app/lawnchair/util/LawnchairUtils.kt b/lawnchair/src/app/lawnchair/util/LawnchairUtils.kt
index e4957e6352..d7175de021 100644
--- a/lawnchair/src/app/lawnchair/util/LawnchairUtils.kt
+++ b/lawnchair/src/app/lawnchair/util/LawnchairUtils.kt
@@ -21,15 +21,13 @@ import android.app.PendingIntent
import android.content.Context
import android.content.Intent
import android.os.Looper
-
+import app.lawnchair.preferences.PreferenceManager
import com.android.launcher3.util.Executors.MAIN_EXECUTOR
-
+import com.android.systemui.shared.system.QuickStepContract
import java.util.concurrent.Callable
import java.util.concurrent.ExecutionException
-
import kotlin.system.exitProcess
-
fun ensureOnMainThread(creator: (A) -> T): (A) -> T {
return { it ->
if (Looper.myLooper() == Looper.getMainLooper()) {
@@ -79,4 +77,19 @@ fun restartLauncher(context: Context, intent: Intent?) {
fun killLauncher() {
exitProcess(0)
-}
\ No newline at end of file
+}
+
+fun getWindowCornerRadius(context: Context): Float {
+ val prefs = PreferenceManager.getInstance(context)
+ if (prefs.overrideWindowCornerRadius.get()) {
+ return prefs.windowCornerRadius.get()
+ }
+ return QuickStepContract.getWindowCornerRadius(context.resources)
+}
+
+fun supportsRoundedCornersOnWindows(context: Context): Boolean {
+ if (PreferenceManager.getInstance(context).overrideWindowCornerRadius.get()) {
+ return true
+ }
+ return QuickStepContract.supportsRoundedCornersOnWindows(context.resources)
+}
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/util/TaskCornerRadius.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/util/TaskCornerRadius.java
index 3ddf1b60f3..7e25340bc3 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/util/TaskCornerRadius.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/util/TaskCornerRadius.java
@@ -15,7 +15,7 @@
*/
package com.android.quickstep.util;
-import static com.android.systemui.shared.system.QuickStepContract.supportsRoundedCornersOnWindows;
+import static app.lawnchair.util.LawnchairUtilsKt.supportsRoundedCornersOnWindows;
import android.content.Context;
@@ -25,7 +25,7 @@ import com.android.launcher3.util.Themes;
public class TaskCornerRadius {
public static float get(Context context) {
- return supportsRoundedCornersOnWindows(context.getResources()) ?
+ return supportsRoundedCornersOnWindows(context) ?
Themes.getDialogCornerRadius(context):
context.getResources().getDimension(R.dimen.task_corner_radius_small);
}
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskView.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskView.java
index 0bc6e5166f..d53a741ffc 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskView.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskView.java
@@ -104,6 +104,8 @@ import java.util.Collections;
import java.util.List;
import java.util.function.Consumer;
+import app.lawnchair.util.LawnchairUtilsKt;
+
/**
* A task in the Recents view.
*/
@@ -1089,7 +1091,7 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable {
public FullscreenDrawParams(Context context) {
mCornerRadius = TaskCornerRadius.get(context);
- mWindowCornerRadius = QuickStepContract.getWindowCornerRadius(context.getResources());
+ mWindowCornerRadius = LawnchairUtilsKt.getWindowCornerRadius(context);
mCurrentDrawnCornerRadius = mCornerRadius;
}
diff --git a/quickstep/src/com/android/launcher3/QuickstepAppTransitionManagerImpl.java b/quickstep/src/com/android/launcher3/QuickstepAppTransitionManagerImpl.java
index 2d096d1dfe..931d2a5615 100644
--- a/quickstep/src/com/android/launcher3/QuickstepAppTransitionManagerImpl.java
+++ b/quickstep/src/com/android/launcher3/QuickstepAppTransitionManagerImpl.java
@@ -35,8 +35,8 @@ import static com.android.launcher3.dragndrop.DragLayer.ALPHA_INDEX_TRANSITIONS;
import static com.android.launcher3.statehandlers.DepthController.DEPTH;
import static com.android.launcher3.views.FloatingIconView.SHAPE_PROGRESS_DURATION;
import static com.android.quickstep.TaskUtils.taskIsATargetWithMode;
-import static com.android.systemui.shared.system.QuickStepContract.getWindowCornerRadius;
-import static com.android.systemui.shared.system.QuickStepContract.supportsRoundedCornersOnWindows;
+import static app.lawnchair.util.LawnchairUtilsKt.getWindowCornerRadius;
+import static app.lawnchair.util.LawnchairUtilsKt.supportsRoundedCornersOnWindows;
import static com.android.systemui.shared.system.RemoteAnimationTargetCompat.MODE_CLOSING;
import static com.android.systemui.shared.system.RemoteAnimationTargetCompat.MODE_OPENING;
@@ -90,6 +90,8 @@ import com.android.systemui.shared.system.RemoteAnimationTargetCompat;
import com.android.systemui.shared.system.SyncRtSurfaceTransactionApplierCompat.SurfaceParams;
import com.android.systemui.shared.system.WindowManagerWrapper;
+import app.lawnchair.util.LawnchairUtilsKt;
+
/**
* {@link LauncherAppTransitionManager} with Quickstep-specific app transitions for launching from
* home and/or all-apps. Not used for 3p launchers.
@@ -522,10 +524,10 @@ public abstract class QuickstepAppTransitionManagerImpl extends LauncherAppTrans
endCrop = windowTargetBounds.height();
}
- final float initialWindowRadius = supportsRoundedCornersOnWindows(mLauncher.getResources())
+ final float initialWindowRadius = supportsRoundedCornersOnWindows(mLauncher)
? startCrop / 2f : 0f;
final float windowRadius = mDeviceProfile.isMultiWindowMode
- ? 0 : getWindowCornerRadius(mLauncher.getResources());
+ ? 0 : getWindowCornerRadius(mLauncher);
appAnimator.addUpdateListener(new MultiValueUpdateListener() {
FloatProp mDx = new FloatProp(0, dX, 0, xDuration, AGGRESSIVE_EASE);
FloatProp mDy = new FloatProp(0, dY, 0, yDuration, AGGRESSIVE_EASE);
@@ -715,7 +717,7 @@ public abstract class QuickstepAppTransitionManagerImpl extends LauncherAppTrans
ValueAnimator unlockAnimator = ValueAnimator.ofFloat(0, 1);
unlockAnimator.setDuration(CLOSING_TRANSITION_DURATION_MS);
float cornerRadius = mDeviceProfile.isMultiWindowMode ? 0 :
- QuickStepContract.getWindowCornerRadius(mLauncher.getResources());
+ LawnchairUtilsKt.getWindowCornerRadius(mLauncher);
unlockAnimator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationStart(Animator animation) {
@@ -745,7 +747,7 @@ public abstract class QuickstepAppTransitionManagerImpl extends LauncherAppTrans
ValueAnimator closingAnimator = ValueAnimator.ofFloat(0, 1);
int duration = CLOSING_TRANSITION_DURATION_MS;
float windowCornerRadius = mDeviceProfile.isMultiWindowMode
- ? 0 : getWindowCornerRadius(mLauncher.getResources());
+ ? 0 : getWindowCornerRadius(mLauncher);
closingAnimator.setDuration(duration);
closingAnimator.addUpdateListener(new MultiValueUpdateListener() {
FloatProp mDy = new FloatProp(0, mClosingWindowTransY, 0, duration, DEACCEL_1_7);
diff --git a/quickstep/src/com/android/quickstep/RotationTouchHelper.java b/quickstep/src/com/android/quickstep/RotationTouchHelper.java
index 5f3c02205e..6f83586890 100644
--- a/quickstep/src/com/android/quickstep/RotationTouchHelper.java
+++ b/quickstep/src/com/android/quickstep/RotationTouchHelper.java
@@ -38,6 +38,8 @@ import com.android.systemui.shared.system.TaskStackChangeListener;
import java.io.PrintWriter;
import java.util.ArrayList;
+import app.lawnchair.util.LawnchairUtilsKt;
+
public class RotationTouchHelper implements
SysUINavigationMode.NavigationModeChangeListener,
DefaultDisplay.DisplayInfoChangeListener {
@@ -128,7 +130,7 @@ public class RotationTouchHelper implements
mDisplayId = mDefaultDisplay.getInfo().id;
mOrientationTouchTransformer = new OrientationTouchTransformer(resources, mMode,
- () -> QuickStepContract.getWindowCornerRadius(resources));
+ () -> LawnchairUtilsKt.getWindowCornerRadius(context));
// Register for navigation mode changes
onNavigationModeChanged(mSysUiNavMode.addModeChangeListener(this));
diff --git a/quickstep/src/com/android/quickstep/interaction/NavBarGestureHandler.java b/quickstep/src/com/android/quickstep/interaction/NavBarGestureHandler.java
index 81c4d0c7c8..2d441de515 100644
--- a/quickstep/src/com/android/quickstep/interaction/NavBarGestureHandler.java
+++ b/quickstep/src/com/android/quickstep/interaction/NavBarGestureHandler.java
@@ -54,6 +54,8 @@ import com.android.quickstep.util.NavBarPosition;
import com.android.quickstep.util.TriggerSwipeUpTouchTracker;
import com.android.systemui.shared.system.QuickStepContract;
+import app.lawnchair.util.LawnchairUtilsKt;
+
/** Utility class to handle Home and Assistant gestures. */
public class NavBarGestureHandler implements OnTouchListener,
TriggerSwipeUpTouchTracker.OnSwipeUpListener {
@@ -120,7 +122,7 @@ public class NavBarGestureHandler implements OnTouchListener,
mAssistantGestureDetector = new GestureDetector(context, new AssistantGestureListener());
int assistantWidth = resources.getDimensionPixelSize(R.dimen.gestures_assistant_width);
final float assistantHeight = Math.max(mBottomGestureHeight,
- QuickStepContract.getWindowCornerRadius(resources));
+ LawnchairUtilsKt.getWindowCornerRadius(context));
mAssistantLeftRegion.bottom = mAssistantRightRegion.bottom = mDisplaySize.y;
mAssistantLeftRegion.top = mAssistantRightRegion.top = mDisplaySize.y - assistantHeight;
mAssistantLeftRegion.left = 0;
diff --git a/quickstep/src/com/android/quickstep/interaction/SwipeUpGestureTutorialController.java b/quickstep/src/com/android/quickstep/interaction/SwipeUpGestureTutorialController.java
index a15731400e..c3c5f1a25a 100644
--- a/quickstep/src/com/android/quickstep/interaction/SwipeUpGestureTutorialController.java
+++ b/quickstep/src/com/android/quickstep/interaction/SwipeUpGestureTutorialController.java
@@ -59,6 +59,8 @@ import com.android.quickstep.util.TransformParams;
import com.android.systemui.shared.system.QuickStepContract;
import com.android.systemui.shared.system.SyncRtSurfaceTransactionApplierCompat.SurfaceParams;
+import app.lawnchair.util.LawnchairUtilsKt;
+
@TargetApi(Build.VERSION_CODES.R)
abstract class SwipeUpGestureTutorialController extends TutorialController {
private final ViewSwipeUpAnimation mViewSwipeUpAnimation;
@@ -85,7 +87,7 @@ abstract class SwipeUpGestureTutorialController extends TutorialController {
dp.updateInsets(new Rect(insets.left, insets.top, insets.right, insets.bottom));
mViewSwipeUpAnimation.initDp(dp);
- mFakeTaskViewRadius = QuickStepContract.getWindowCornerRadius(mContext.getResources());
+ mFakeTaskViewRadius = LawnchairUtilsKt.getWindowCornerRadius(mContext);
mFakeTaskView.setClipToOutline(true);
mFakeTaskView.setOutlineProvider(new ViewOutlineProvider() {
@Override