Merge changes I85a89553,I453939a0,Iff7a015a,Id8f542ae into main
* changes:
Remove unused code
Force Portrait mode only if there is no hw keyboard
Portrait-mode if it's a phone or small tablet
Don't show modifier keys when HW qwerty keyboard is present
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.java b/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.java
index 0f62984..eab737b 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.java
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.java
@@ -22,6 +22,7 @@
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
+import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.graphics.drawable.Icon;
@@ -52,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;
@@ -101,6 +103,7 @@
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ lockOrientationIfNecessary();
mImage = InstalledImage.getDefault(this);
@@ -135,7 +138,7 @@
.getRootView()
.setOnApplyWindowInsetsListener(
(v, insets) -> {
- updateKeyboardContainerVisibility();
+ updateModifierKeysVisibility();
return insets;
});
// if installer is launched, it will be handled in onActivityResult
@@ -148,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)
@@ -279,12 +299,7 @@
findViewById(R.id.webview_container)
.setVisibility(View.VISIBLE);
mBootCompleted.open();
- // TODO(b/376813452): support talkback as well
- int keyVisibility =
- mAccessibilityManager.isEnabled()
- ? View.GONE
- : View.VISIBLE;
- updateKeyboardContainerVisibility();
+ updateModifierKeysVisibility();
}
}
});
@@ -384,14 +399,15 @@
connectToTerminalService();
}
- private void updateKeyboardContainerVisibility() {
- boolean imeVisible =
- this.getWindow()
- .getDecorView()
- .getRootWindowInsets()
- .isVisible(WindowInsets.Type.ime());
- View keyboardContainer = findViewById(R.id.keyboard_container);
- keyboardContainer.setVisibility(!imeVisible ? View.GONE : View.VISIBLE);
+ private void updateModifierKeysVisibility() {
+ boolean imeShown =
+ getWindow().getDecorView().getRootWindowInsets().isVisible(WindowInsets.Type.ime());
+ boolean hasHwQwertyKeyboard =
+ getResources().getConfiguration().keyboard == Configuration.KEYBOARD_QWERTY;
+ boolean showModifierKeys = imeShown && !hasHwQwertyKeyboard;
+
+ View modifierKeys = findViewById(R.id.modifier_keys);
+ modifierKeys.setVisibility(showModifierKeys ? View.VISIBLE : View.GONE);
}
@Override
diff --git a/android/TerminalApp/res/layout/activity_headless.xml b/android/TerminalApp/res/layout/activity_headless.xml
index 0bcfbea..b4a65cc 100644
--- a/android/TerminalApp/res/layout/activity_headless.xml
+++ b/android/TerminalApp/res/layout/activity_headless.xml
@@ -59,7 +59,7 @@
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
- <include layout="@layout/layout_keyboard" />
+ <include layout="@layout/layout_modifier_keys" />
</LinearLayout>
</FrameLayout>
diff --git a/android/TerminalApp/res/layout/layout_keyboard.xml b/android/TerminalApp/res/layout/layout_modifier_keys.xml
similarity index 98%
rename from android/TerminalApp/res/layout/layout_keyboard.xml
rename to android/TerminalApp/res/layout/layout_modifier_keys.xml
index d8b7e11..ff0b341 100644
--- a/android/TerminalApp/res/layout/layout_keyboard.xml
+++ b/android/TerminalApp/res/layout/layout_modifier_keys.xml
@@ -17,7 +17,7 @@
<!--TODO(b/376813452): we might want tablet UI for that-->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/keyboard_container"
+ android:id="@+id/modifier_keys"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
@@ -79,4 +79,4 @@
android:id="@+id/btn_pgdn"
android:text="@string/btn_pgdn_text" />
</LinearLayout>
-</LinearLayout>
\ No newline at end of file
+</LinearLayout>
diff --git a/android/TerminalApp/res/values-sw720dp/config.xml b/android/TerminalApp/res/values-sw720dp/config.xml
new file mode 100644
index 0000000..be731da
--- /dev/null
+++ b/android/TerminalApp/res/values-sw720dp/config.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright 2024 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <bool name="terminal_portrait_only">false</bool>
+</resources>
diff --git a/android/TerminalApp/res/values/config.xml b/android/TerminalApp/res/values/config.xml
index ea762fc..6440ee6 100644
--- a/android/TerminalApp/res/values/config.xml
+++ b/android/TerminalApp/res/values/config.xml
@@ -19,4 +19,6 @@
<string name="preference_disk_size_key" translatable="false">PREFERENCE_DISK_SIZE_KEY</string>
<string name="preference_forwarding_ports" translatable="false">PREFERENCE_FORWARDING_PORTS</string>
<string name="preference_forwarding_port_is_enabled" translatable="false">PREFERENCE_FORWARDING_PORT_IS_ENABLED_</string>
+
+ <bool name="terminal_portrait_only">true</bool>
</resources>