Do the resizing inside of the service
It's still done in the main thread. It shall be off-loaded to a worker
thread in a follow-up change.
Bug: N/A
Test: try resizing
Change-Id: Ifddf62e01d726bcd88f1a66a0383e9b49f9640c5
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.kt b/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.kt
index 80f403b..390ae00 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.kt
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.kt
@@ -56,7 +56,6 @@
import com.android.virtualization.terminal.VmLauncherService.VmLauncherServiceCallback
import com.google.android.material.tabs.TabLayout
import com.google.android.material.tabs.TabLayoutMediator
-import java.io.IOException
import java.net.MalformedURLException
import java.net.URL
import java.util.concurrent.CompletableFuture
@@ -313,8 +312,6 @@
return
}
- resizeDiskIfNecessary(image)
-
val tapIntent = Intent(this, MainActivity::class.java)
tapIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP or Intent.FLAG_ACTIVITY_CLEAR_TOP)
val tapPendingIntent =
@@ -361,7 +358,9 @@
.build()
)
.build()
- run(this, this, notification, getDisplayInfo()).onFailure {
+
+ val diskSize = intent.getLongExtra(KEY_DISK_SIZE, image.getSize())
+ run(this, this, notification, getDisplayInfo(), diskSize).onFailure {
Log.e(TAG, "Failed to start VM.", it)
finish()
}
@@ -372,16 +371,6 @@
return bootCompleted.block(timeoutMillis)
}
- private fun resizeDiskIfNecessary(image: InstalledImage) {
- try {
- // TODO(b/382190982): Show snackbar message instead when it's recoverable.
- image.resize(intent.getLongExtra(KEY_DISK_SIZE, image.getSize()))
- } catch (e: IOException) {
- start(this, Exception("Failed to resize disk", e))
- return
- }
- }
-
companion object {
const val TAG: String = "VmTerminalApp"
const val KEY_DISK_SIZE: String = "disk_size"
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/VmLauncherService.kt b/android/TerminalApp/java/com/android/virtualization/terminal/VmLauncherService.kt
index deccae5..198cf6b 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/VmLauncherService.kt
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/VmLauncherService.kt
@@ -127,6 +127,11 @@
val customImageConfigBuilder = json.toCustomImageConfigBuilder(this)
val displaySize = intent.getParcelableExtra(EXTRA_DISPLAY_INFO, DisplayInfo::class.java)
+ // Note: this doesn't always do the resizing. If the current image size is the same as the
+ // requested size which is rounded up to the page alignment, resizing is not done.
+ val diskSize = intent.getLongExtra(EXTRA_DISK_SIZE, image.getSize())
+ image.resize(diskSize)
+
customImageConfigBuilder.setAudioConfig(
AudioConfig.Builder().setUseSpeaker(true).setUseMicrophone(true).build()
)
@@ -396,6 +401,7 @@
private const val ACTION_START_VM_LAUNCHER_SERVICE =
"android.virtualization.START_VM_LAUNCHER_SERVICE"
const val EXTRA_DISPLAY_INFO = "EXTRA_DISPLAY_INFO"
+ const val EXTRA_DISK_SIZE = "EXTRA_DISK_SIZE"
const val ACTION_SHUTDOWN_VM: String = "android.virtualization.ACTION_SHUTDOWN_VM"
private const val RESULT_START = 0
@@ -428,6 +434,7 @@
callback: VmLauncherServiceCallback?,
notification: Notification?,
displayInfo: DisplayInfo,
+ diskSize: Long?,
): Result<Unit> {
val i = getMyIntent(context)
val resultReceiver: ResultReceiver =
@@ -451,6 +458,9 @@
i.putExtra(Intent.EXTRA_RESULT_RECEIVER, getResultReceiverForIntent(resultReceiver))
i.putExtra(EXTRA_NOTIFICATION, notification)
i.putExtra(EXTRA_DISPLAY_INFO, displayInfo)
+ if (diskSize != null) {
+ i.putExtra(EXTRA_DISK_SIZE, diskSize)
+ }
return try {
context.startForegroundService(i)
Result.success(Unit)