Merge "Show in-app keyboard only if ime shows" 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 fdfdc69..cdab321 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.java
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.java
@@ -42,6 +42,7 @@
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
+import android.view.WindowInsets;
import android.view.accessibility.AccessibilityManager;
import android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener;
import android.webkit.ClientCertRequest;
@@ -147,7 +148,14 @@
(ActivityResult result) -> {
startVm();
});
-
+ getWindow()
+ .getDecorView()
+ .getRootView()
+ .setOnApplyWindowInsetsListener(
+ (v, insets) -> {
+ updateKeyboardContainerVisibility();
+ return insets;
+ });
// if installer is launched, it will be handled in onActivityResult
if (!launchInstaller) {
if (!Environment.isExternalStorageManager()) {
@@ -294,8 +302,7 @@
mAccessibilityManager.isEnabled()
? View.GONE
: View.VISIBLE;
- findViewById(R.id.keyboard_container)
- .setVisibility(keyVisibility);
+ updateKeyboardContainerVisibility();
}
}
});
@@ -465,10 +472,22 @@
@Override
public void onAccessibilityStateChanged(boolean enabled) {
- findViewById(R.id.keyboard_container).setVisibility(enabled ? View.GONE : View.VISIBLE);
+ updateKeyboardContainerVisibility();
connectToTerminalService();
}
+ private void updateKeyboardContainerVisibility() {
+ boolean accessibilityEnabled = mAccessibilityManager.isEnabled();
+ boolean imeVisible =
+ this.getWindow()
+ .getDecorView()
+ .getRootWindowInsets()
+ .isVisible(WindowInsets.Type.ime());
+ View keyboardContainer = findViewById(R.id.keyboard_container);
+ keyboardContainer.setVisibility(
+ accessibilityEnabled || !imeVisible ? View.GONE : View.VISIBLE);
+ }
+
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
@@ -547,7 +566,7 @@
.getString(
R.string
.service_notification_settings),
- settingsPendingIntent)
+ settingsPendingIntent)
.build())
.addAction(
new Notification.Action.Builder(