Loading libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedController.java +2 −1 Original line number Original line Diff line number Diff line Loading @@ -218,7 +218,7 @@ public class OneHandedController implements RemoteCallable<OneHandedController> OneHandedTimeoutHandler timeoutHandler = new OneHandedTimeoutHandler(mainExecutor); OneHandedTimeoutHandler timeoutHandler = new OneHandedTimeoutHandler(mainExecutor); OneHandedState transitionState = new OneHandedState(); OneHandedState transitionState = new OneHandedState(); OneHandedTutorialHandler tutorialHandler = new OneHandedTutorialHandler(context, OneHandedTutorialHandler tutorialHandler = new OneHandedTutorialHandler(context, windowManager, mainExecutor); displayLayout, windowManager, mainExecutor); OneHandedAnimationController animationController = OneHandedAnimationController animationController = new OneHandedAnimationController(context); new OneHandedAnimationController(context); OneHandedTouchHandler touchHandler = new OneHandedTouchHandler(timeoutHandler, OneHandedTouchHandler touchHandler = new OneHandedTouchHandler(timeoutHandler, Loading Loading @@ -453,6 +453,7 @@ public class OneHandedController implements RemoteCallable<OneHandedController> final DisplayLayout newDisplayLayout = mDisplayController.getDisplayLayout(displayId); final DisplayLayout newDisplayLayout = mDisplayController.getDisplayLayout(displayId); mDisplayAreaOrganizer.setDisplayLayout(newDisplayLayout); mDisplayAreaOrganizer.setDisplayLayout(newDisplayLayout); mGestureHandler.onDisplayChanged(newDisplayLayout); mGestureHandler.onDisplayChanged(newDisplayLayout); mTutorialHandler.onDisplayChanged(newDisplayLayout); } } private ContentObserver getObserver(Runnable onChangeRunnable) { private ContentObserver getObserver(Runnable onChangeRunnable) { Loading libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedTutorialHandler.java +28 −13 Original line number Original line Diff line number Diff line Loading @@ -33,6 +33,7 @@ import android.widget.FrameLayout; import androidx.annotation.NonNull; import androidx.annotation.NonNull; import com.android.wm.shell.R; import com.android.wm.shell.R; import com.android.wm.shell.common.DisplayLayout; import com.android.wm.shell.common.ShellExecutor; import com.android.wm.shell.common.ShellExecutor; import java.io.PrintWriter; import java.io.PrintWriter; Loading @@ -50,9 +51,10 @@ public class OneHandedTutorialHandler implements OneHandedTransitionCallback { private static final int MAX_TUTORIAL_SHOW_COUNT = 2; private static final int MAX_TUTORIAL_SHOW_COUNT = 2; private final WindowManager mWindowManager; private final WindowManager mWindowManager; private final String mPackageName; private final String mPackageName; private final Rect mDisplaySize; private final float mTutorialHeightRatio; private Context mContext; private Context mContext; private Rect mDisplayBounds; private View mTutorialView; private View mTutorialView; private ContentResolver mContentResolver; private ContentResolver mContentResolver; private boolean mCanShowTutorial; private boolean mCanShowTutorial; Loading Loading @@ -94,23 +96,22 @@ public class OneHandedTutorialHandler implements OneHandedTransitionCallback { } } }; }; public OneHandedTutorialHandler(Context context, WindowManager windowManager, public OneHandedTutorialHandler(Context context, DisplayLayout displayLayout, ShellExecutor mainExecutor) { WindowManager windowManager, ShellExecutor mainExecutor) { mContext = context; mContext = context; mWindowManager = windowManager; mWindowManager = windowManager; mDisplaySize = windowManager.getCurrentWindowMetrics().getBounds(); mPackageName = context.getPackageName(); mPackageName = context.getPackageName(); mContentResolver = context.getContentResolver(); mContentResolver = context.getContentResolver(); mCanShowTutorial = (Settings.Secure.getInt(mContentResolver, Settings.Secure.ONE_HANDED_TUTORIAL_SHOW_COUNT, 0) >= MAX_TUTORIAL_SHOW_COUNT) ? false : true; mIsOneHandedMode = false; final float offsetPercentageConfig = context.getResources().getFraction( final float offsetPercentageConfig = context.getResources().getFraction( R.fraction.config_one_handed_offset, 1, 1); R.fraction.config_one_handed_offset, 1, 1); final int sysPropPercentageConfig = SystemProperties.getInt( final int sysPropPercentageConfig = SystemProperties.getInt( ONE_HANDED_MODE_OFFSET_PERCENTAGE, Math.round(offsetPercentageConfig * 100.0f)); ONE_HANDED_MODE_OFFSET_PERCENTAGE, Math.round(offsetPercentageConfig * 100.0f)); mTutorialAreaHeight = Math.round( mTutorialHeightRatio = sysPropPercentageConfig / 100.0f; mDisplaySize.height() * (sysPropPercentageConfig / 100.0f)); onDisplayChanged(displayLayout); mCanShowTutorial = (Settings.Secure.getInt(mContentResolver, Settings.Secure.ONE_HANDED_TUTORIAL_SHOW_COUNT, 0) >= MAX_TUTORIAL_SHOW_COUNT) ? false : true; mIsOneHandedMode = false; mainExecutor.execute(() -> { mainExecutor.execute(() -> { recreateTutorialView(mContext); recreateTutorialView(mContext); Loading @@ -131,6 +132,20 @@ public class OneHandedTutorialHandler implements OneHandedTransitionCallback { mTriggerState = ONE_HANDED_TRIGGER_STATE.UNSET; mTriggerState = ONE_HANDED_TRIGGER_STATE.UNSET; } } /** * Called when onDisplayAdded() or onDisplayRemoved() callback * @param displayLayout The latest {@link DisplayLayout} representing current displayId */ public void onDisplayChanged(DisplayLayout displayLayout) { // Ensure the mDisplayBounds is portrait, due to OHM only support on portrait if (displayLayout.height() > displayLayout.width()) { mDisplayBounds = new Rect(0, 0, displayLayout.width(), displayLayout.height()); } else { mDisplayBounds = new Rect(0, 0, displayLayout.height(), displayLayout.width()); } mTutorialAreaHeight = Math.round(mDisplayBounds.height() * mTutorialHeightRatio); } private void recreateTutorialView(Context context) { private void recreateTutorialView(Context context) { mTutorialView = LayoutInflater.from(context).inflate(R.layout.one_handed_tutorial, mTutorialView = LayoutInflater.from(context).inflate(R.layout.one_handed_tutorial, null); null); Loading Loading @@ -190,7 +205,7 @@ public class OneHandedTutorialHandler implements OneHandedTransitionCallback { */ */ private WindowManager.LayoutParams getTutorialTargetLayoutParams() { private WindowManager.LayoutParams getTutorialTargetLayoutParams() { final WindowManager.LayoutParams lp = new WindowManager.LayoutParams( final WindowManager.LayoutParams lp = new WindowManager.LayoutParams( mDisplaySize.width(), mTutorialAreaHeight, 0, 0, mDisplayBounds.width(), mTutorialAreaHeight, 0, 0, WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL, WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL, WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, Loading @@ -207,8 +222,8 @@ public class OneHandedTutorialHandler implements OneHandedTransitionCallback { pw.println(TAG + " states: "); pw.println(TAG + " states: "); pw.print(innerPrefix + "mTriggerState="); pw.print(innerPrefix + "mTriggerState="); pw.println(mTriggerState); pw.println(mTriggerState); pw.print(innerPrefix + "mDisplaySize="); pw.print(innerPrefix + "mDisplayBounds="); pw.println(mDisplaySize); pw.println(mDisplayBounds); pw.print(innerPrefix + "mTutorialAreaHeight="); pw.print(innerPrefix + "mTutorialAreaHeight="); pw.println(mTutorialAreaHeight); pw.println(mTutorialAreaHeight); } } Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedController.java +2 −1 Original line number Original line Diff line number Diff line Loading @@ -218,7 +218,7 @@ public class OneHandedController implements RemoteCallable<OneHandedController> OneHandedTimeoutHandler timeoutHandler = new OneHandedTimeoutHandler(mainExecutor); OneHandedTimeoutHandler timeoutHandler = new OneHandedTimeoutHandler(mainExecutor); OneHandedState transitionState = new OneHandedState(); OneHandedState transitionState = new OneHandedState(); OneHandedTutorialHandler tutorialHandler = new OneHandedTutorialHandler(context, OneHandedTutorialHandler tutorialHandler = new OneHandedTutorialHandler(context, windowManager, mainExecutor); displayLayout, windowManager, mainExecutor); OneHandedAnimationController animationController = OneHandedAnimationController animationController = new OneHandedAnimationController(context); new OneHandedAnimationController(context); OneHandedTouchHandler touchHandler = new OneHandedTouchHandler(timeoutHandler, OneHandedTouchHandler touchHandler = new OneHandedTouchHandler(timeoutHandler, Loading Loading @@ -453,6 +453,7 @@ public class OneHandedController implements RemoteCallable<OneHandedController> final DisplayLayout newDisplayLayout = mDisplayController.getDisplayLayout(displayId); final DisplayLayout newDisplayLayout = mDisplayController.getDisplayLayout(displayId); mDisplayAreaOrganizer.setDisplayLayout(newDisplayLayout); mDisplayAreaOrganizer.setDisplayLayout(newDisplayLayout); mGestureHandler.onDisplayChanged(newDisplayLayout); mGestureHandler.onDisplayChanged(newDisplayLayout); mTutorialHandler.onDisplayChanged(newDisplayLayout); } } private ContentObserver getObserver(Runnable onChangeRunnable) { private ContentObserver getObserver(Runnable onChangeRunnable) { Loading
libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedTutorialHandler.java +28 −13 Original line number Original line Diff line number Diff line Loading @@ -33,6 +33,7 @@ import android.widget.FrameLayout; import androidx.annotation.NonNull; import androidx.annotation.NonNull; import com.android.wm.shell.R; import com.android.wm.shell.R; import com.android.wm.shell.common.DisplayLayout; import com.android.wm.shell.common.ShellExecutor; import com.android.wm.shell.common.ShellExecutor; import java.io.PrintWriter; import java.io.PrintWriter; Loading @@ -50,9 +51,10 @@ public class OneHandedTutorialHandler implements OneHandedTransitionCallback { private static final int MAX_TUTORIAL_SHOW_COUNT = 2; private static final int MAX_TUTORIAL_SHOW_COUNT = 2; private final WindowManager mWindowManager; private final WindowManager mWindowManager; private final String mPackageName; private final String mPackageName; private final Rect mDisplaySize; private final float mTutorialHeightRatio; private Context mContext; private Context mContext; private Rect mDisplayBounds; private View mTutorialView; private View mTutorialView; private ContentResolver mContentResolver; private ContentResolver mContentResolver; private boolean mCanShowTutorial; private boolean mCanShowTutorial; Loading Loading @@ -94,23 +96,22 @@ public class OneHandedTutorialHandler implements OneHandedTransitionCallback { } } }; }; public OneHandedTutorialHandler(Context context, WindowManager windowManager, public OneHandedTutorialHandler(Context context, DisplayLayout displayLayout, ShellExecutor mainExecutor) { WindowManager windowManager, ShellExecutor mainExecutor) { mContext = context; mContext = context; mWindowManager = windowManager; mWindowManager = windowManager; mDisplaySize = windowManager.getCurrentWindowMetrics().getBounds(); mPackageName = context.getPackageName(); mPackageName = context.getPackageName(); mContentResolver = context.getContentResolver(); mContentResolver = context.getContentResolver(); mCanShowTutorial = (Settings.Secure.getInt(mContentResolver, Settings.Secure.ONE_HANDED_TUTORIAL_SHOW_COUNT, 0) >= MAX_TUTORIAL_SHOW_COUNT) ? false : true; mIsOneHandedMode = false; final float offsetPercentageConfig = context.getResources().getFraction( final float offsetPercentageConfig = context.getResources().getFraction( R.fraction.config_one_handed_offset, 1, 1); R.fraction.config_one_handed_offset, 1, 1); final int sysPropPercentageConfig = SystemProperties.getInt( final int sysPropPercentageConfig = SystemProperties.getInt( ONE_HANDED_MODE_OFFSET_PERCENTAGE, Math.round(offsetPercentageConfig * 100.0f)); ONE_HANDED_MODE_OFFSET_PERCENTAGE, Math.round(offsetPercentageConfig * 100.0f)); mTutorialAreaHeight = Math.round( mTutorialHeightRatio = sysPropPercentageConfig / 100.0f; mDisplaySize.height() * (sysPropPercentageConfig / 100.0f)); onDisplayChanged(displayLayout); mCanShowTutorial = (Settings.Secure.getInt(mContentResolver, Settings.Secure.ONE_HANDED_TUTORIAL_SHOW_COUNT, 0) >= MAX_TUTORIAL_SHOW_COUNT) ? false : true; mIsOneHandedMode = false; mainExecutor.execute(() -> { mainExecutor.execute(() -> { recreateTutorialView(mContext); recreateTutorialView(mContext); Loading @@ -131,6 +132,20 @@ public class OneHandedTutorialHandler implements OneHandedTransitionCallback { mTriggerState = ONE_HANDED_TRIGGER_STATE.UNSET; mTriggerState = ONE_HANDED_TRIGGER_STATE.UNSET; } } /** * Called when onDisplayAdded() or onDisplayRemoved() callback * @param displayLayout The latest {@link DisplayLayout} representing current displayId */ public void onDisplayChanged(DisplayLayout displayLayout) { // Ensure the mDisplayBounds is portrait, due to OHM only support on portrait if (displayLayout.height() > displayLayout.width()) { mDisplayBounds = new Rect(0, 0, displayLayout.width(), displayLayout.height()); } else { mDisplayBounds = new Rect(0, 0, displayLayout.height(), displayLayout.width()); } mTutorialAreaHeight = Math.round(mDisplayBounds.height() * mTutorialHeightRatio); } private void recreateTutorialView(Context context) { private void recreateTutorialView(Context context) { mTutorialView = LayoutInflater.from(context).inflate(R.layout.one_handed_tutorial, mTutorialView = LayoutInflater.from(context).inflate(R.layout.one_handed_tutorial, null); null); Loading Loading @@ -190,7 +205,7 @@ public class OneHandedTutorialHandler implements OneHandedTransitionCallback { */ */ private WindowManager.LayoutParams getTutorialTargetLayoutParams() { private WindowManager.LayoutParams getTutorialTargetLayoutParams() { final WindowManager.LayoutParams lp = new WindowManager.LayoutParams( final WindowManager.LayoutParams lp = new WindowManager.LayoutParams( mDisplaySize.width(), mTutorialAreaHeight, 0, 0, mDisplayBounds.width(), mTutorialAreaHeight, 0, 0, WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL, WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL, WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, Loading @@ -207,8 +222,8 @@ public class OneHandedTutorialHandler implements OneHandedTransitionCallback { pw.println(TAG + " states: "); pw.println(TAG + " states: "); pw.print(innerPrefix + "mTriggerState="); pw.print(innerPrefix + "mTriggerState="); pw.println(mTriggerState); pw.println(mTriggerState); pw.print(innerPrefix + "mDisplaySize="); pw.print(innerPrefix + "mDisplayBounds="); pw.println(mDisplaySize); pw.println(mDisplayBounds); pw.print(innerPrefix + "mTutorialAreaHeight="); pw.print(innerPrefix + "mTutorialAreaHeight="); pw.println(mTutorialAreaHeight); pw.println(mTutorialAreaHeight); } } Loading