Merge "build/debian: Fix typo in variable name in build.sh" into main
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>
diff --git a/build/debian/build.sh b/build/debian/build.sh
index 1d39652..a74d971 100755
--- a/build/debian/build.sh
+++ b/build/debian/build.sh
@@ -12,6 +12,7 @@
echo "-h Print usage and this help message and exit."
echo "-a ARCH Architecture of the image [default is aarch64]"
echo "-r Release mode build"
+ echo "-w Save temp work directory (for debugging)"
}
check_sudo() {
@@ -22,7 +23,7 @@
}
parse_options() {
- while getopts "hra:" option; do
+ while getopts "a:hrw" option; do
case ${option} in
h)
show_help
@@ -40,6 +41,9 @@
r)
mode=release
;;
+ w)
+ save_workdir=1
+ ;;
*)
echo "Invalid option: $OPTARG"
exit
@@ -213,7 +217,7 @@
}
clean_up() {
- rm -rf "${workdir}"
+ [ "$save_workdir" -eq 0 ] || rm -rf "${workdir}"
}
set -e
@@ -229,6 +233,7 @@
arch=aarch64
debian_arch=arm64
mode=debug
+save_workdir=0
parse_options "$@"
check_sudo
diff --git a/build/debian/build_in_container.sh b/build/debian/build_in_container.sh
index ef64254..7fd4c00 100755
--- a/build/debian/build_in_container.sh
+++ b/build/debian/build_in_container.sh
@@ -4,7 +4,9 @@
arch=aarch64
release_flag=
-while getopts "ra:" option; do
+save_workdir_flag=
+
+while getopts "a:rw" option; do
case ${option} in
a)
if [[ "$OPTARG" != "aarch64" && "$OPTARG" != "x86_64" ]]; then
@@ -16,6 +18,9 @@
r)
release_flag="-r"
;;
+ w)
+ save_workdir_flag="-w"
+ ;;
*)
echo "Invalid option: $OPTARG"
exit
@@ -27,4 +32,4 @@
-v "$ANDROID_BUILD_TOP/packages/modules/Virtualization:/root/Virtualization" \
--workdir /root/Virtualization/build/debian \
ubuntu:22.04 \
- bash -c "/root/Virtualization/build/debian/build.sh -a "$arch" $release_flag || bash"
+ bash -c "/root/Virtualization/build/debian/build.sh -a $arch $release_flag $save_workdir_flag || bash"