Let display activity occupy full screen
Bug: 389524419
Test: run display activity
Change-Id: I8d6451ee8cbd665949013006cc2e7c85fe2a7d04
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.kt b/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.kt
index 71f10f9..1daeadb 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.kt
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.kt
@@ -35,12 +35,14 @@
import android.os.SystemProperties
import android.os.Trace
import android.provider.Settings
+import android.util.DisplayMetrics
import android.util.Log
import android.view.KeyEvent
import android.view.Menu
import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
+import android.view.WindowManager
import android.view.accessibility.AccessibilityManager
import android.webkit.ClientCertRequest
import android.webkit.SslErrorHandler
@@ -457,7 +459,7 @@
.build()
Trace.beginAsyncSection("executeTerminal", 0)
- run(this, this, notification)
+ run(this, this, notification, getDisplayInfo())
connectToTerminalService()
}
@@ -511,4 +513,18 @@
R.id.btn_pgdn to KeyEvent.KEYCODE_PAGE_DOWN,
)
}
+
+ fun getDisplayInfo(): DisplayInfo {
+ val wm = getSystemService<WindowManager>(WindowManager::class.java)
+ val metrics = wm.currentWindowMetrics
+ val dispBounds = metrics.bounds
+
+ // For now, display activity runs as landscape mode
+ val height = Math.min(dispBounds.right, dispBounds.bottom)
+ val width = Math.max(dispBounds.right, dispBounds.bottom)
+ var dpi = (DisplayMetrics.DENSITY_DEFAULT * metrics.density).toInt()
+ var refreshRate = display.refreshRate.toInt()
+
+ return DisplayInfo(width, height, dpi, refreshRate)
+ }
}
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/VmLauncherService.kt b/android/TerminalApp/java/com/android/virtualization/terminal/VmLauncherService.kt
index 346056a..ecb01c0 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/VmLauncherService.kt
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/VmLauncherService.kt
@@ -29,6 +29,7 @@
import android.os.IBinder
import android.os.Looper
import android.os.Parcel
+import android.os.Parcelable
import android.os.ResultReceiver
import android.os.Trace
import android.system.virtualmachine.VirtualMachine
@@ -103,7 +104,8 @@
val json = ConfigJson.from(this, image.configPath)
val configBuilder = json.toConfigBuilder(this)
val customImageConfigBuilder = json.toCustomImageConfigBuilder(this)
- if (overrideConfigIfNecessary(customImageConfigBuilder)) {
+ val displaySize = intent.getParcelableExtra(EXTRA_DISPLAY_INFO, DisplayInfo::class.java)
+ if (overrideConfigIfNecessary(customImageConfigBuilder, displaySize)) {
configBuilder.setCustomImageConfig(customImageConfigBuilder.build())
}
val config = configBuilder.build()
@@ -198,7 +200,8 @@
}
private fun overrideConfigIfNecessary(
- builder: VirtualMachineCustomImageConfig.Builder
+ builder: VirtualMachineCustomImageConfig.Builder,
+ displayInfo: DisplayInfo?,
): Boolean {
var changed = false
// TODO: check if ANGLE is enabled for the app.
@@ -218,13 +221,17 @@
changed = true
}
- // TODO(jeongik): let it configurable
- if (terminalGuiSupport()) {
+ // Set the initial display size
+ // TODO(jeongik): set up the display size on demand
+ if (terminalGuiSupport() && displayInfo != null) {
builder
.setDisplayConfig(
VirtualMachineCustomImageConfig.DisplayConfig.Builder()
- .setWidth(1920)
- .setHeight(1080)
+ .setWidth(displayInfo.width)
+ .setHeight(displayInfo.height)
+ .setHorizontalDpi(displayInfo.dpi)
+ .setVerticalDpi(displayInfo.dpi)
+ .setRefreshRate(displayInfo.refreshRate)
.build()
)
.useKeyboard(true)
@@ -322,7 +329,7 @@
private const val EXTRA_NOTIFICATION = "EXTRA_NOTIFICATION"
private const val ACTION_START_VM_LAUNCHER_SERVICE =
"android.virtualization.START_VM_LAUNCHER_SERVICE"
-
+ const val EXTRA_DISPLAY_INFO = "EXTRA_DISPLAY_INFO"
const val ACTION_STOP_VM_LAUNCHER_SERVICE: String =
"android.virtualization.STOP_VM_LAUNCHER_SERVICE"
@@ -338,6 +345,7 @@
context: Context,
callback: VmLauncherServiceCallback?,
notification: Notification?,
+ displayInfo: DisplayInfo,
) {
val i = getMyIntent(context)
val resultReceiver: ResultReceiver =
@@ -355,6 +363,7 @@
}
i.putExtra(Intent.EXTRA_RESULT_RECEIVER, getResultReceiverForIntent(resultReceiver))
i.putExtra(EXTRA_NOTIFICATION, notification)
+ i.putExtra(EXTRA_DISPLAY_INFO, displayInfo)
context.startForegroundService(i)
}
@@ -372,3 +381,29 @@
}
}
}
+
+data class DisplayInfo(val width: Int, val height: Int, val dpi: Int, val refreshRate: Int) :
+ Parcelable {
+ constructor(
+ source: Parcel
+ ) : this(source.readInt(), source.readInt(), source.readInt(), source.readInt())
+
+ override fun describeContents(): Int = 0
+
+ override fun writeToParcel(dest: Parcel, flags: Int) {
+ dest.writeInt(width)
+ dest.writeInt(height)
+ dest.writeInt(dpi)
+ dest.writeInt(refreshRate)
+ }
+
+ companion object {
+ @JvmField
+ val CREATOR =
+ object : Parcelable.Creator<DisplayInfo> {
+ override fun createFromParcel(source: Parcel): DisplayInfo = DisplayInfo(source)
+
+ override fun newArray(size: Int) = arrayOfNulls<DisplayInfo>(size)
+ }
+ }
+}
diff --git a/android/TerminalApp/res/layout/activity_display.xml b/android/TerminalApp/res/layout/activity_display.xml
index 48e49fe..2d7d847 100644
--- a/android/TerminalApp/res/layout/activity_display.xml
+++ b/android/TerminalApp/res/layout/activity_display.xml
@@ -27,8 +27,8 @@
<!-- the size should be match_parent -->
<SurfaceView
android:id="@+id/surface_view"
- android:layout_width="1920px"
- android:layout_height="1080px"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
android:focusable="true"
android:focusableInTouchMode="true"
android:focusedByDefault="true"