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