Force Portrait mode only if there is no hw keyboard
(handled mod key visibility case as well)
Bug: 381386402
Test: try rotation with keyboard
Change-Id: I453939a04d24a7a4bfb504606a5aee6db91b0d1c
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.java b/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.java
index 382ae42..d27aa99 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.java
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.java
@@ -53,6 +53,7 @@
import androidx.activity.result.ActivityResult;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
+import androidx.annotation.NonNull;
import com.android.internal.annotations.VisibleForTesting;
@@ -102,9 +103,7 @@
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- if (getResources().getBoolean(R.bool.terminal_portrait_only)) {
- setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
- }
+ lockOrientationIfNecessary();
mImage = InstalledImage.getDefault(this);
@@ -152,6 +151,23 @@
}
}
+ private void lockOrientationIfNecessary() {
+ boolean hasHwQwertyKeyboard =
+ getResources().getConfiguration().keyboard == Configuration.KEYBOARD_QWERTY;
+ if (hasHwQwertyKeyboard) {
+ setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
+ } else if (getResources().getBoolean(R.bool.terminal_portrait_only)) {
+ setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
+ }
+ }
+
+ @Override
+ public void onConfigurationChanged(@NonNull Configuration newConfig) {
+ super.onConfigurationChanged(newConfig);
+ lockOrientationIfNecessary();
+ updateModifierKeysVisibility();
+ }
+
private void setupModifierKeys() {
// Only ctrl key is special, it communicates with xtermjs to modify key event with ctrl key
findViewById(R.id.btn_ctrl)