Merge "Import translations. DO NOT MERGE ANYWHERE" into main
diff --git a/PREUPLOAD.cfg b/PREUPLOAD.cfg
index 45519d4..d47afc4 100644
--- a/PREUPLOAD.cfg
+++ b/PREUPLOAD.cfg
@@ -6,16 +6,19 @@
jsonlint = true
google_java_format = true
pylint3 = true
+ktfmt = true
rustfmt = true
xmllint = true
[Tool Paths]
google-java-format = ${REPO_ROOT}/prebuilts/tools/common/google-java-format/google-java-format
google-java-format-diff = ${REPO_ROOT}/prebuilts/tools/common/google-java-format/google-java-format-diff.py
+ktfmt = ${REPO_ROOT}/external/ktfmt/ktfmt.sh
[Builtin Hooks Options]
clang_format = --commit ${PREUPLOAD_COMMIT} --style file --extensions c,h,cc,cpp
rustfmt = --config-path=rustfmt.toml
+ktfmt = --kotlinlang-style
[Hook Scripts]
aosp_hook = ${REPO_ROOT}/frameworks/base/tools/aosp/aosp_sha.sh ${PREUPLOAD_COMMIT} "."
diff --git a/android/TerminalApp/AndroidManifest.xml b/android/TerminalApp/AndroidManifest.xml
index a9d6e9d..495598b 100644
--- a/android/TerminalApp/AndroidManifest.xml
+++ b/android/TerminalApp/AndroidManifest.xml
@@ -32,7 +32,7 @@
<application
android:label="@string/app_name"
android:icon="@mipmap/ic_launcher"
- android:theme="@style/Theme.Material3.DayNight.NoActionBar"
+ android:theme="@style/VmTerminalAppTheme"
android:usesCleartextTraffic="true"
android:supportsRtl="true"
android:enabled="false">
@@ -47,9 +47,12 @@
</intent-filter>
</activity>
<activity android:name=".SettingsActivity" />
- <activity android:name=".SettingsDiskResizeActivity" />
- <activity android:name=".SettingsPortForwardingActivity" />
- <activity android:name=".SettingsRecoveryActivity" />
+ <activity android:name=".SettingsDiskResizeActivity"
+ android:label="@string/settings_disk_resize_title" />
+ <activity android:name=".SettingsPortForwardingActivity"
+ android:label="@string/settings_port_forwarding_title" />
+ <activity android:name=".SettingsRecoveryActivity"
+ android:label="@string/settings_recovery_title" />
<activity android:name=".ErrorActivity" />
<property
android:name="android.window.PROPERTY_ACTIVITY_EMBEDDING_SPLITS_ENABLED"
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/BaseActivity.java b/android/TerminalApp/java/com/android/virtualization/terminal/BaseActivity.java
index 66552d5..d6521be 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/BaseActivity.java
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/BaseActivity.java
@@ -17,7 +17,10 @@
package com.android.virtualization.terminal;
import android.Manifest;
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
import android.content.pm.PackageManager;
+import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
@@ -25,6 +28,20 @@
private static final int POST_NOTIFICATIONS_PERMISSION_REQUEST_CODE = 101;
@Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ NotificationManager notificationManager = getSystemService(NotificationManager.class);
+ if (notificationManager.getNotificationChannel(this.getPackageName()) == null) {
+ NotificationChannel channel =
+ new NotificationChannel(
+ this.getPackageName(),
+ getString(R.string.app_name),
+ NotificationManager.IMPORTANCE_DEFAULT);
+ notificationManager.createNotificationChannel(channel);
+ }
+ }
+
+ @Override
public void onResume() {
super.onResume();
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.java b/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.java
index 22f7c4e..0f62984 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.java
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.java
@@ -18,8 +18,6 @@
import static android.webkit.WebSettings.LOAD_NO_CACHE;
import android.app.Notification;
-import android.app.NotificationChannel;
-import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
@@ -106,16 +104,6 @@
mImage = InstalledImage.getDefault(this);
- NotificationManager notificationManager = getSystemService(NotificationManager.class);
- if (notificationManager.getNotificationChannel(this.getPackageName()) == null) {
- NotificationChannel channel =
- new NotificationChannel(
- this.getPackageName(),
- getString(R.string.app_name),
- NotificationManager.IMPORTANCE_DEFAULT);
- notificationManager.createNotificationChannel(channel);
- }
-
boolean launchInstaller = installIfNecessary();
setContentView(R.layout.activity_headless);
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsActivity.kt b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsActivity.kt
index 6a30971..784e740 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsActivity.kt
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsActivity.kt
@@ -18,12 +18,10 @@
import android.os.Bundle
import android.os.Handler
import android.os.Looper
-import android.view.Window
import android.view.WindowManager
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
-
import com.google.android.material.appbar.MaterialToolbar
class SettingsActivity : AppCompatActivity() {
@@ -40,26 +38,27 @@
val toolbar: MaterialToolbar = findViewById(R.id.settings_toolbar)
setSupportActionBar(toolbar)
- val settingsItems = arrayOf(
- SettingsItem(
- resources.getString(R.string.settings_disk_resize_title),
- resources.getString(R.string.settings_disk_resize_sub_title),
- R.drawable.baseline_storage_24,
- SettingsItemEnum.DiskResize
- ),
- SettingsItem(
- resources.getString(R.string.settings_port_forwarding_title),
- resources.getString(R.string.settings_port_forwarding_sub_title),
- R.drawable.baseline_call_missed_outgoing_24,
- SettingsItemEnum.PortForwarding
- ),
- SettingsItem(
- resources.getString(R.string.settings_recovery_title),
- resources.getString(R.string.settings_recovery_sub_title),
- R.drawable.baseline_settings_backup_restore_24,
- SettingsItemEnum.Recovery
- ),
- )
+ val settingsItems =
+ arrayOf(
+ SettingsItem(
+ resources.getString(R.string.settings_disk_resize_title),
+ resources.getString(R.string.settings_disk_resize_sub_title),
+ R.drawable.baseline_storage_24,
+ SettingsItemEnum.DiskResize,
+ ),
+ SettingsItem(
+ resources.getString(R.string.settings_port_forwarding_title),
+ resources.getString(R.string.settings_port_forwarding_sub_title),
+ R.drawable.baseline_call_missed_outgoing_24,
+ SettingsItemEnum.PortForwarding,
+ ),
+ SettingsItem(
+ resources.getString(R.string.settings_recovery_title),
+ resources.getString(R.string.settings_recovery_sub_title),
+ R.drawable.baseline_settings_backup_restore_24,
+ SettingsItemEnum.Recovery,
+ ),
+ )
val settingsListItemAdapter = SettingsItemAdapter(settingsItems)
val recyclerView: RecyclerView = findViewById(R.id.settings_list_recycler_view)
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsDiskResizeActivity.kt b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsDiskResizeActivity.kt
index d9086a4..303a932 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsDiskResizeActivity.kt
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsDiskResizeActivity.kt
@@ -22,16 +22,11 @@
import android.icu.util.Measure
import android.icu.util.MeasureUnit
import android.os.Bundle
-import android.os.FileUtils
-import android.os.Handler
-import android.os.Looper
import android.text.SpannableString
import android.text.Spanned
import android.text.TextUtils
import android.text.style.RelativeSizeSpan
import android.widget.SeekBar
-import android.view.Window
-import android.view.WindowManager
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.isVisible
@@ -49,11 +44,11 @@
private lateinit var diskSizeSlider: SeekBar
private fun bytesToMb(bytes: Long): Long {
- return bytes shr 20;
+ return bytes shr 20
}
private fun mbToBytes(bytes: Long): Long {
- return bytes shl 20;
+ return bytes shl 20
}
private fun mbToProgress(bytes: Long): Int {
@@ -68,29 +63,24 @@
super.onCreate(savedInstanceState)
setContentView(R.layout.settings_disk_resize)
- Handler(Looper.getMainLooper()).post {
- val lp: WindowManager.LayoutParams = getWindow().getAttributes()
- lp.accessibilityTitle = getString(R.string.settings_disk_resize_title)
- getWindow().setAttributes(lp)
- }
-
diskSizeStepMb = 1L shl resources.getInteger(R.integer.disk_size_round_up_step_size_in_mb)
val sharedPref =
this.getSharedPreferences(getString(R.string.preference_file_key), Context.MODE_PRIVATE)
- diskSizeMb = bytesToMb(sharedPref.getLong(
- getString(R.string.preference_disk_size_key),
- /* defValue= */ 0))
+ diskSizeMb =
+ bytesToMb(
+ sharedPref.getLong(getString(R.string.preference_disk_size_key), /* defValue= */ 0)
+ )
val image = InstalledImage.getDefault(this)
- val minDiskSizeMb =
- bytesToMb(image.getSmallestSizePossible())
- .coerceAtMost(diskSizeMb)
+ val minDiskSizeMb = bytesToMb(image.getSmallestSizePossible()).coerceAtMost(diskSizeMb)
diskSizeText = findViewById<TextView>(R.id.settings_disk_resize_resize_gb_assigned)!!
val diskMaxSizeText = findViewById<TextView>(R.id.settings_disk_resize_resize_gb_max)
- diskMaxSizeText.text = getString(R.string.settings_disk_resize_resize_gb_max_format,
- localizedFileSize(maxDiskSizeMb, /* isShort= */ true)
- );
+ diskMaxSizeText.text =
+ getString(
+ R.string.settings_disk_resize_resize_gb_max_format,
+ localizedFileSize(maxDiskSizeMb, /* isShort= */ true),
+ )
diskSizeSlider = findViewById<SeekBar>(R.id.settings_disk_resize_disk_size_slider)!!
val cancelButton = findViewById<MaterialButton>(R.id.settings_disk_resize_cancel_button)
@@ -100,21 +90,23 @@
diskSizeSlider.progress = mbToProgress(diskSizeMb)
updateSliderText(diskSizeMb)
- diskSizeSlider.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
- override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
- updateSliderText(progressToMb(progress))
- cancelButton.isVisible = true
- resizeButton.isVisible = true
- }
+ diskSizeSlider.setOnSeekBarChangeListener(
+ object : SeekBar.OnSeekBarChangeListener {
+ override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
+ updateSliderText(progressToMb(progress))
+ cancelButton.isVisible = true
+ resizeButton.isVisible = true
+ }
- override fun onStartTrackingTouch(seekBar: SeekBar?) {
- // no-op
- }
+ override fun onStartTrackingTouch(seekBar: SeekBar?) {
+ // no-op
+ }
- override fun onStopTrackingTouch(seekBar: SeekBar?) {
- // no-op
+ override fun onStopTrackingTouch(seekBar: SeekBar?) {
+ // no-op
+ }
}
- })
+ )
cancelButton.setOnClickListener {
diskSizeSlider.progress = mbToProgress(diskSizeMb)
@@ -127,10 +119,7 @@
cancelButton.isVisible = false
resizeButton.isVisible = false
val editor = sharedPref.edit()
- editor.putLong(
- getString(R.string.preference_disk_size_key),
- mbToBytes(diskSizeMb)
- )
+ editor.putLong(getString(R.string.preference_disk_size_key), mbToBytes(diskSizeMb))
editor.apply()
// Restart terminal
@@ -143,12 +132,18 @@
}
fun updateSliderText(sizeMb: Long) {
- diskSizeText.text = enlargeFontOfNumber(
- getString(R.string.settings_disk_resize_resize_gb_assigned_format,
- localizedFileSize(sizeMb, /* isShort= */ true)))
+ diskSizeText.text =
+ enlargeFontOfNumber(
+ getString(
+ R.string.settings_disk_resize_resize_gb_assigned_format,
+ localizedFileSize(sizeMb, /* isShort= */ true),
+ )
+ )
diskSizeSlider.stateDescription =
- getString(R.string.settings_disk_resize_resize_gb_assigned_format,
- localizedFileSize(sizeMb, /* isShort= */ false))
+ getString(
+ R.string.settings_disk_resize_resize_gb_assigned_format,
+ localizedFileSize(sizeMb, /* isShort= */ false),
+ )
}
fun localizedFileSize(sizeMb: Long, isShort: Boolean): String {
@@ -160,7 +155,8 @@
numberFormatter.minimumFractionDigits = 1
numberFormatter.maximumFractionDigits = 1
- val formatWidth = if (isShort) MeasureFormat.FormatWidth.SHORT else MeasureFormat.FormatWidth.WIDE
+ val formatWidth =
+ if (isShort) MeasureFormat.FormatWidth.SHORT else MeasureFormat.FormatWidth.WIDE
val measureFormat: MeasureFormat =
MeasureFormat.getInstance(localeFromContext, formatWidth, numberFormatter)
return measureFormat.format(measure)
@@ -171,14 +167,15 @@
return ""
}
- val matcher = numberPattern.matcher(summary);
+ val matcher = numberPattern.matcher(summary)
if (matcher.find()) {
val spannableSummary = SpannableString(summary)
spannableSummary.setSpan(
- RelativeSizeSpan(2f),
- matcher.start(),
- matcher.end(),
- Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
+ RelativeSizeSpan(2f),
+ matcher.start(),
+ matcher.end(),
+ Spanned.SPAN_EXCLUSIVE_EXCLUSIVE,
+ )
return spannableSummary
}
return summary
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsItem.kt b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsItem.kt
index e1723a7..5098ecd 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsItem.kt
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsItem.kt
@@ -16,13 +16,14 @@
package com.android.virtualization.terminal
enum class SettingsItemEnum {
- DiskResize, PortForwarding, Recovery
+ DiskResize,
+ PortForwarding,
+ Recovery,
}
class SettingsItem(
val title: String,
val subTitle: String,
val icon: Int,
- val settingsItemEnum: SettingsItemEnum
-) {
-}
\ No newline at end of file
+ val settingsItemEnum: SettingsItemEnum,
+) {}
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsItemAdapter.kt b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsItemAdapter.kt
index 86f5c92..132d749 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsItemAdapter.kt
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsItemAdapter.kt
@@ -35,8 +35,9 @@
}
override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): ViewHolder {
- val view = LayoutInflater.from(viewGroup.context)
- .inflate(R.layout.settings_list_item, viewGroup, false)
+ val view =
+ LayoutInflater.from(viewGroup.context)
+ .inflate(R.layout.settings_list_item, viewGroup, false)
return ViewHolder(view)
}
@@ -46,17 +47,19 @@
viewHolder.subTitle.text = dataSet[position].subTitle
viewHolder.card.setOnClickListener { view ->
- val intent = Intent(
- viewHolder.itemView.context,
- when (dataSet[position].settingsItemEnum) {
- SettingsItemEnum.DiskResize -> SettingsDiskResizeActivity::class.java
- SettingsItemEnum.PortForwarding -> SettingsPortForwardingActivity::class.java
- SettingsItemEnum.Recovery -> SettingsRecoveryActivity::class.java
- }
- )
+ val intent =
+ Intent(
+ viewHolder.itemView.context,
+ when (dataSet[position].settingsItemEnum) {
+ SettingsItemEnum.DiskResize -> SettingsDiskResizeActivity::class.java
+ SettingsItemEnum.PortForwarding ->
+ SettingsPortForwardingActivity::class.java
+ SettingsItemEnum.Recovery -> SettingsRecoveryActivity::class.java
+ },
+ )
view.context.startActivity(intent)
}
}
override fun getItemCount() = dataSet.size
-}
\ No newline at end of file
+}
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsPortForwardingActivity.kt b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsPortForwardingActivity.kt
index 0377de4..fe693c4 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsPortForwardingActivity.kt
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsPortForwardingActivity.kt
@@ -18,10 +18,6 @@
import android.content.Context
import android.content.SharedPreferences
import android.os.Bundle
-import android.os.Handler
-import android.os.Looper
-import android.view.Window
-import android.view.WindowManager
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
@@ -34,12 +30,6 @@
super.onCreate(savedInstanceState)
setContentView(R.layout.settings_port_forwarding)
- Handler(Looper.getMainLooper()).post {
- val lp: WindowManager.LayoutParams = getWindow().getAttributes()
- lp.accessibilityTitle = getString(R.string.settings_port_forwarding_title)
- getWindow().setAttributes(lp)
- }
-
mSharedPref =
this.getSharedPreferences(getString(R.string.preference_file_key), Context.MODE_PRIVATE)
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsPortForwardingAdapter.kt b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsPortForwardingAdapter.kt
index c3501d4..afe985a 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsPortForwardingAdapter.kt
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsPortForwardingAdapter.kt
@@ -90,8 +90,9 @@
}
override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): ViewHolder {
- val view = LayoutInflater.from(viewGroup.context)
- .inflate(R.layout.settings_port_forwarding_item, viewGroup, false)
+ val view =
+ LayoutInflater.from(viewGroup.context)
+ .inflate(R.layout.settings_port_forwarding_item, viewGroup, false)
return ViewHolder(view)
}
@@ -100,13 +101,16 @@
viewHolder.enabledSwitch.contentDescription = viewHolder.port.text
viewHolder.enabledSwitch.isChecked = mItems[position].enabled
viewHolder.enabledSwitch.setOnCheckedChangeListener { _, isChecked ->
- val sharedPref: SharedPreferences = context.getSharedPreferences(
- context.getString(R.string.preference_file_key), Context.MODE_PRIVATE
- )
+ val sharedPref: SharedPreferences =
+ context.getSharedPreferences(
+ context.getString(R.string.preference_file_key),
+ Context.MODE_PRIVATE,
+ )
val editor = sharedPref.edit()
editor.putBoolean(
- context.getString(R.string.preference_forwarding_port_is_enabled) + viewHolder.port.text,
- isChecked
+ context.getString(R.string.preference_forwarding_port_is_enabled) +
+ viewHolder.port.text,
+ isChecked,
)
editor.apply()
}
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsRecoveryActivity.kt b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsRecoveryActivity.kt
index 3adeece..0d74eb0 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsRecoveryActivity.kt
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsRecoveryActivity.kt
@@ -17,12 +17,8 @@
import android.content.Intent
import android.os.Bundle
-import android.os.Handler
-import android.os.Looper
import android.util.Log
import android.view.View
-import android.view.Window
-import android.view.WindowManager
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.isVisible
import androidx.lifecycle.lifecycleScope
@@ -31,7 +27,6 @@
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.google.android.material.snackbar.Snackbar
import java.io.IOException
-import java.nio.file.Files
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
@@ -41,29 +36,28 @@
super.onCreate(savedInstanceState)
setContentView(R.layout.settings_recovery)
- Handler(Looper.getMainLooper()).post {
- val lp: WindowManager.LayoutParams = getWindow().getAttributes()
- lp.accessibilityTitle = getString(R.string.settings_recovery_title)
- getWindow().setAttributes(lp)
- }
-
val resetCard = findViewById<MaterialCardView>(R.id.settings_recovery_reset_card)
resetCard.setOnClickListener {
var backupRootfs = false
- val dialog = MaterialAlertDialogBuilder(this)
- .setTitle(R.string.settings_recovery_reset_dialog_title)
- .setMultiChoiceItems(arrayOf(getString(R.string.settings_recovery_reset_dialog_backup_option)), booleanArrayOf(backupRootfs)) {_, _, checked ->
- backupRootfs = checked
- }
- .setPositiveButton(R.string.settings_recovery_reset_dialog_confirm) { _, _ ->
- // This coroutine will be killed when the activity is killed. The behavior is both acceptable
- // either removing is done or not
- runInBackgroundAndRestartApp {
- uninstall(backupRootfs)
+ val dialog =
+ MaterialAlertDialogBuilder(this)
+ .setTitle(R.string.settings_recovery_reset_dialog_title)
+ .setMultiChoiceItems(
+ arrayOf(getString(R.string.settings_recovery_reset_dialog_backup_option)),
+ booleanArrayOf(backupRootfs),
+ ) { _, _, checked ->
+ backupRootfs = checked
}
- }
- .setNegativeButton(R.string.settings_recovery_reset_dialog_cancel) { dialog, _ -> dialog.dismiss() }
- .create()
+ .setPositiveButton(R.string.settings_recovery_reset_dialog_confirm) { _, _ ->
+ // This coroutine will be killed when the activity is killed. Either
+ // finishing removing or not is acceptable behavior.
+ runInBackgroundAndRestartApp { uninstall(backupRootfs) }
+ }
+ .setNegativeButton(R.string.settings_recovery_reset_dialog_cancel) { dialog, _
+ ->
+ dialog.dismiss()
+ }
+ .create()
dialog.show()
}
val resetBackupCard = findViewById<View>(R.id.settings_recovery_reset_backup_card)
@@ -71,16 +65,18 @@
resetBackupCard.isVisible = InstalledImage.getDefault(this).hasBackup()
resetBackupCard.setOnClickListener {
- val dialog = MaterialAlertDialogBuilder(this)
- .setTitle(R.string.settings_recovery_remove_backup_title)
- .setMessage(R.string.settings_recovery_remove_backup_sub_title)
- .setPositiveButton(R.string.settings_recovery_reset_dialog_confirm) { _, _ ->
- runInBackgroundAndRestartApp {
- removeBackup()
+ val dialog =
+ MaterialAlertDialogBuilder(this)
+ .setTitle(R.string.settings_recovery_remove_backup_title)
+ .setMessage(R.string.settings_recovery_remove_backup_sub_title)
+ .setPositiveButton(R.string.settings_recovery_reset_dialog_confirm) { _, _ ->
+ runInBackgroundAndRestartApp { removeBackup() }
}
- }
- .setNegativeButton(R.string.settings_recovery_reset_dialog_cancel) { dialog, _ -> dialog.dismiss() }
- .create()
+ .setNegativeButton(R.string.settings_recovery_reset_dialog_cancel) { dialog, _
+ ->
+ dialog.dismiss()
+ }
+ .create()
dialog.show()
}
}
@@ -90,10 +86,11 @@
InstalledImage.getDefault(this).deleteBackup()
} catch (e: IOException) {
Snackbar.make(
- findViewById(android.R.id.content),
- R.string.settings_recovery_error_during_removing_backup,
- Snackbar.LENGTH_SHORT
- ).show();
+ findViewById(android.R.id.content),
+ R.string.settings_recovery_error_during_removing_backup,
+ Snackbar.LENGTH_SHORT,
+ )
+ .show()
Log.e(TAG, "cannot remove backup")
}
}
@@ -109,34 +106,36 @@
image.uninstallFully()
}
} catch (e: IOException) {
- val errorMsgId = if (backupRootfs && !backupDone) R.string.settings_recovery_error_due_to_backup
- else R.string.settings_recovery_error;
- Snackbar.make(
- findViewById(android.R.id.content),
- errorMsgId,
- Snackbar.LENGTH_SHORT
- ).show();
+ val errorMsgId =
+ if (backupRootfs && !backupDone) R.string.settings_recovery_error_due_to_backup
+ else R.string.settings_recovery_error
+ Snackbar.make(findViewById(android.R.id.content), errorMsgId, Snackbar.LENGTH_SHORT)
+ .show()
Log.e(TAG, "cannot recovery ", e)
}
}
- private fun runInBackgroundAndRestartApp(backgroundWork: suspend CoroutineScope.() -> Unit): Unit {
+ private fun runInBackgroundAndRestartApp(
+ backgroundWork: suspend CoroutineScope.() -> Unit
+ ): Unit {
findViewById<View>(R.id.setting_recovery_card_container).visibility = View.INVISIBLE
findViewById<View>(R.id.recovery_boot_progress).visibility = View.VISIBLE
- lifecycleScope.launch(Dispatchers.IO) {
- backgroundWork()
- }.invokeOnCompletion {
- runOnUiThread {
- findViewById<View>(R.id.setting_recovery_card_container).visibility =
- View.VISIBLE
- findViewById<View>(R.id.recovery_boot_progress).visibility = View.INVISIBLE
- // Restart terminal
- val intent =
- baseContext.packageManager.getLaunchIntentForPackage(baseContext.packageName)
- intent?.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
- finish()
- startActivity(intent)
+ lifecycleScope
+ .launch(Dispatchers.IO) { backgroundWork() }
+ .invokeOnCompletion {
+ runOnUiThread {
+ findViewById<View>(R.id.setting_recovery_card_container).visibility =
+ View.VISIBLE
+ findViewById<View>(R.id.recovery_boot_progress).visibility = View.INVISIBLE
+ // Restart terminal
+ val intent =
+ baseContext.packageManager.getLaunchIntentForPackage(
+ baseContext.packageName
+ )
+ intent?.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
+ finish()
+ startActivity(intent)
+ }
}
- }
}
}
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/SplitInitializer.kt b/android/TerminalApp/java/com/android/virtualization/terminal/SplitInitializer.kt
index cb917bd..7562779 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/SplitInitializer.kt
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/SplitInitializer.kt
@@ -30,4 +30,4 @@
override fun dependencies(): List<Class<out Initializer<*>>> {
return emptyList()
}
-}
\ No newline at end of file
+}
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/TerminalView.java b/android/TerminalApp/java/com/android/virtualization/terminal/TerminalView.java
index efee62f..efa3dcc 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/TerminalView.java
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/TerminalView.java
@@ -216,6 +216,8 @@
if (id != View.NO_ID) {
info.setText(null);
info.setContentDescription(getString(R.string.terminal_display));
+ // b/376827536
+ info.setHintText(getString(R.string.double_tap_to_edit_text));
}
// These two lines below are to prevent this WebView element from being
@@ -230,6 +232,8 @@
// Localize the spoken text.
if (isEmptyLine(info)) {
info.setContentDescription(getString(R.string.empty_line));
+ // b/376827536
+ info.setHintText(getString(R.string.double_tap_to_edit_text));
}
break;
case "android.widget.TextView":
diff --git a/android/TerminalApp/res/values/strings.xml b/android/TerminalApp/res/values/strings.xml
index da8ca84..6fb256b 100644
--- a/android/TerminalApp/res/values/strings.xml
+++ b/android/TerminalApp/res/values/strings.xml
@@ -26,29 +26,31 @@
<string name="terminal_input">Cursor</string>
<!-- Description of an empty line in the terminal. This is read by talkback. [CHAR LIMIT=none] -->
<string name="empty_line">Empty line</string>
+ <!-- Description of the hint supported by the terminal UI elements. This is read by talkback. [CHAR LIMIT=none] -->
+ <string name="double_tap_to_edit_text">Double-tap to go to cursor</string>
<!-- Installer activity title [CHAR LIMIT=none] -->
<string name="installer_title_text">Install Linux terminal</string>
<!-- Installer activity description format [CHAR LIMIT=none] -->
- <string name="installer_desc_text_format">To launch Linux terminal, you need to download roughly <xliff:g id="expected_size" example="350GB">%1$s</xliff:g> of data over network.\nWould you proceed?</string>
+ <string name="installer_desc_text_format">To launch Linux terminal, you need to download roughly <xliff:g id="expected_size" example="350GB">%1$s</xliff:g> of data over the network.\nWould you like to proceed?</string>
<!-- Checkbox at the installer activity to download when Wi-Fi is available to prevent from paying network traffic [CHAR LIMIT=none] -->
- <string name="installer_wait_for_wifi_checkbox_text">Download when Wi-Fi is available</string>
+ <string name="installer_wait_for_wifi_checkbox_text">Download using Wi-Fi only</string>
<!-- Button at the installer activity to confirm installation [CHAR LIMIT=16] -->
<string name="installer_install_button_enabled_text">Install</string>
<!-- Button at the installer activity to when installation is already in progress [CHAR LIMIT=16] -->
<string name="installer_install_button_disabled_text">Installing</string>
<!-- Toast message at installer activity when network doesn't meet[CHAR LIMIT=none] -->
- <string name="installer_install_network_error_message">Network error. Check connection and retry.</string>
+ <string name="installer_install_network_error_message">Failed to install due to a network error. Check your connection and try again.</string>
<!-- Notification title for installer [CHAR LIMIT=64] -->
<string name="installer_notif_title_text">Installing Linux terminal</string>
<!-- Notification description for installer [CHAR LIMIT=none] -->
- <string name="installer_notif_desc_text">Linux terminal will be started after finish</string>
+ <string name="installer_notif_desc_text">Linux terminal will start after the installation is finished</string>
<!-- Toast error message for install failure due to the network issue [CHAR LIMIT=none] -->
- <string name="installer_error_network">Failed to install due to the network issue</string>
+ <string name="installer_error_network">Failed to install due to a network issue</string>
<!-- Toast error message for install failure because Wi-Fi isn't available although required [CHAR LIMIT=none] -->
- <string name="installer_error_no_wifi">Failed to install because Wi-Fi isn\'t available</string>
+ <string name="installer_error_no_wifi">Failed to install because Wi-Fi is not available</string>
<!-- Toast error message for install failure due to the unidentified issue [CHAR LIMIT=none] -->
- <string name="installer_error_unknown">Failed to install. Try again.</string>
+ <string name="installer_error_unknown">Failed to install. Please try again</string>
<!-- Action bar icon name for the settings view CHAR LIMIT=none] -->
<string name="action_settings">Settings</string>
@@ -61,9 +63,9 @@
<string name="vm_error_message">Terminal crashed</string>
<!-- Settings memu title for resizing disk of the virtual machine. [CHAR LIMIT=none] -->
- <string name="settings_disk_resize_title">Disk Resize</string>
+ <string name="settings_disk_resize_title">Disk resize</string>
<!-- Settings memu subtitle for resizing disk of the virtual machine. [CHAR LIMIT=none] -->
- <string name="settings_disk_resize_sub_title">Resize / Rootfs</string>
+ <string name="settings_disk_resize_sub_title">Resize the root partition size</string>
<!-- Toast message after new disk size is set. [CHAR LIMIT=none] -->
<string name="settings_disk_resize_resize_message">Disk size set</string>
<!-- Settings menu option description format of the current disk size. [CHAR LIMIT=none] -->
@@ -72,17 +74,17 @@
<string name="settings_disk_resize_resize_gb_max_format"><xliff:g id="max_size" example="256GB">%1$s</xliff:g> max</string>
<!-- Settings menu button to cancel disk resize. [CHAR LIMIT=16] -->
<string name="settings_disk_resize_resize_cancel">Cancel</string>
- <!-- Settings menu button to apply change that requires to restart Terminal app. [CHAR LIMIT=20] -->
+ <!-- Settings menu button to apply change that requires to restart Terminal app. [CHAR LIMIT=40] -->
<string name="settings_disk_resize_resize_restart_vm_to_apply">Restart to apply</string>
<!-- Settings menu title for 'port forwarding' [CHAR LIMIT=none] -->
- <string name="settings_port_forwarding_title">Port Forwarding</string>
+ <string name="settings_port_forwarding_title">Port forwarding</string>
<!-- Settings menu subtitle for 'port forwarding' [CHAR LIMIT=none] -->
<string name="settings_port_forwarding_sub_title">Configure port forwarding</string>
<!-- Notification title for new port forwarding [CHAR LIMIT=none] -->
- <string name="settings_port_forwarding_notification_title">Terminal is trying to open a new port</string>
+ <string name="settings_port_forwarding_notification_title">Terminal is requesting to open a new port</string>
<!-- Notification content for new port forwarding [CHAR LIMIT=none] -->
- <string name="settings_port_forwarding_notification_content">Port requested to be open: <xliff:g id="port_number" example="8080">%d</xliff:g></string>
+ <string name="settings_port_forwarding_notification_content">Port requested: <xliff:g id="port_number" example="8080">%d</xliff:g></string>
<!-- Notification action accept [CHAR LIMIT=none] -->
<string name="settings_port_forwarding_notification_accept">Accept</string>
<!-- Notification action deny [CHAR LIMIT=none] -->
@@ -91,36 +93,36 @@
<!-- Settings menu title for recoverying image [CHAR LIMIT=none] -->
<string name="settings_recovery_title">Recovery</string>
<!-- Settings menu subtitle for recoverying image [CHAR LIMIT=none] -->
- <string name="settings_recovery_sub_title">Partition Recovery options</string>
+ <string name="settings_recovery_sub_title">Partition recovery options</string>
<!-- Settings menu title for resetting the terminal [CHAR LIMIT=none] -->
- <string name="settings_recovery_reset_title">Change to Initial version</string>
+ <string name="settings_recovery_reset_title">Reset to initial version</string>
<!-- Settings menu subtitle for resetting the terminal [CHAR LIMIT=none] -->
- <string name="settings_recovery_reset_sub_title">Remove all</string>
+ <string name="settings_recovery_reset_sub_title">Remove all data</string>
<!-- Dialog title for resetting the terminal [CHAR LIMIT=none] -->
<string name="settings_recovery_reset_dialog_title">Reset terminal</string>
<!-- Dialog message for resetting the terminal [CHAR LIMIT=none] -->
- <string name="settings_recovery_reset_dialog_message">Data will be deleted</string>
+ <string name="settings_recovery_reset_dialog_message">Data will be removed</string>
<!-- Dialog button confirm for resetting the terminal [CHAR LIMIT=16] -->
- <string name="settings_recovery_reset_dialog_confirm">Confirm</string>
+ <string name="settings_recovery_reset_dialog_confirm">Reset</string>
<!-- Dialog button cancel for resetting the terminal [CHAR LIMIT=16] -->
<string name="settings_recovery_reset_dialog_cancel">Cancel</string>
<!-- Dialog option to back up previous image(/mnt/backup is the path which is supposed not to be translated) [CHAR LIMIT=none] -->
<string name="settings_recovery_reset_dialog_backup_option">Back up data to <xliff:g id="path" example="/mnt/backup">/mnt/backup</xliff:g></string>
<!-- Snankbar to indicate recovery error due to backup [CHAR LIMIT=none] -->
- <string name="settings_recovery_error_due_to_backup">Recovery failed because backup failed</string>
+ <string name="settings_recovery_error_due_to_backup">Failed to recover due to a backup error</string>
<!-- Snankbar to indicate recovery error [CHAR LIMIT=none] -->
<string name="settings_recovery_error">Recovery failed</string>
<!-- Snankbar to indicate recovery error during removing backup [CHAR LIMIT=none] -->
- <string name="settings_recovery_error_during_removing_backup">Cannot remove backup file</string>
+ <string name="settings_recovery_error_during_removing_backup">Failed to remove backup data</string>
<!-- Settings menu title for removing backup data [CHAR LIMIT=none] -->
<string name="settings_recovery_remove_backup_title">Remove backup data</string>
<!-- Settings menu sub title for removing backup data(/mnt/backup is the path which is supposed not to be translated) [CHAR LIMIT=none] -->
- <string name="settings_recovery_remove_backup_sub_title">Clean up <xliff:g id="path" example="/mnt/backup">/mnt/backup</xliff:g></string>
+ <string name="settings_recovery_remove_backup_sub_title">Remove <xliff:g id="path" example="/mnt/backup">/mnt/backup</xliff:g></string>
<!-- Error page that shows error page [CHAR LIMIT=none] -->
- <string name="error_title">Unrecoverable Error</string>
+ <string name="error_title">Unrecoverable error</string>
<!-- Error page that shows error page [CHAR LIMIT=none] -->
- <string name="error_desc">Failed to recover from an error.\nYou can try restart the app, or try one of recovery option.</string>
+ <string name="error_desc">Failed to recover from an error.\nYou can try restarting terminal or try one of the recovery options.</string>
<!-- Error page that shows detailed error code (error reason) for bugreport. [CHAR LIMIT=none] -->
<string name="error_code">Error code: <xliff:g id="error_code" example="ACCESS_DENIED">%s</xliff:g></string>
@@ -129,10 +131,10 @@
<!-- Notification title for foreground service notification [CHAR LIMIT=none] -->
<string name="service_notification_title">Terminal is running</string>
<!-- Notification content for foreground service notification [CHAR LIMIT=none] -->
- <string name="service_notification_content">Click to open the terminal</string>
+ <string name="service_notification_content">Click to open terminal</string>
<!-- Notification action button for closing the virtual machine [CHAR LIMIT=20] -->
<string name="service_notification_quit_action">Close</string>
- <!-- VirGL is the name of hardware acceleration for VM, the name is supposed not to be translated. [CHAR LIMIT=20] -->
- <string name="virgl_enabled">VirGL is enabled</string>
+ <!-- This string is for toast message to notify that VirGL is enabled. [CHAR LIMIT=40] -->
+ <string name="virgl_enabled"><xliff:g>VirGL</xliff:g> is enabled</string>
</resources>
diff --git a/android/TerminalApp/res/values/styles.xml b/android/TerminalApp/res/values/styles.xml
index ee80862..3fb8e7d 100644
--- a/android/TerminalApp/res/values/styles.xml
+++ b/android/TerminalApp/res/values/styles.xml
@@ -14,7 +14,7 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<resources>
+<resources xmlns:tools="http://schemas.android.com/tools">
<style name="ModifierKeyStyle" parent="@style/Widget.Material3.Button.TextButton">
<item name="android:textAppearance">?android:attr/textAppearanceSmall</item>
<item name="android:textColor">?android:attr/textColorPrimary</item>
@@ -24,4 +24,7 @@
<item name="android:paddingHorizontal">0dp</item>
<item name="android:hapticFeedbackEnabled">true</item>
</style>
-</resources>
\ No newline at end of file
+ <style name="VmTerminalAppTheme" parent="@style/Theme.Material3.DayNight.NoActionBar">
+ <item name="android:windowLightStatusBar" tools:targetApi="m">?android:attr/isLightTheme</item>
+ </style>
+</resources>
diff --git a/android/TerminalApp/res/xml/main_split_config.xml b/android/TerminalApp/res/xml/main_split_config.xml
index c2da907..437e75a 100644
--- a/android/TerminalApp/res/xml/main_split_config.xml
+++ b/android/TerminalApp/res/xml/main_split_config.xml
@@ -45,7 +45,7 @@
window:splitLayoutDirection="locale"
window:splitMaxAspectRatioInPortrait="alwaysAllow"
window:splitMinWidthDp="@integer/split_min_width"
- window:splitRatio="@dimen/activity_split_ratio">
+ window:splitRatio="@dimen/activity_split_ratio"
window:stickyPlaceholder="false">
<ActivityFilter
window:activityName="com.android.virtualization.terminal.SettingsActivity"/>
diff --git a/android/compos_verify/verify.rs b/android/compos_verify/verify.rs
index b94ebbc..a3f18d5 100644
--- a/android/compos_verify/verify.rs
+++ b/android/compos_verify/verify.rs
@@ -124,7 +124,6 @@
&idsig_manifest_ext_apk,
&VmParameters {
name: String::from("ComposVerify"),
- os: String::from("microdroid"),
cpu_topology: VmCpuTopology::OneCpu, // This VM runs very little work at boot
debug_mode: args.debug,
..Default::default()
diff --git a/android/composd/aidl/android/system/composd/IIsolatedCompilationService.aidl b/android/composd/aidl/android/system/composd/IIsolatedCompilationService.aidl
index 3748899..dde75e1 100644
--- a/android/composd/aidl/android/system/composd/IIsolatedCompilationService.aidl
+++ b/android/composd/aidl/android/system/composd/IIsolatedCompilationService.aidl
@@ -48,6 +48,5 @@
* callback, unless the returned ICompilationTask is cancelled. The caller should maintain
* a reference to the ICompilationTask until compilation completes or is cancelled.
*/
- ICompilationTask startTestCompile(
- ApexSource apexSource, ICompilationTaskCallback callback, String os);
+ ICompilationTask startTestCompile(ApexSource apexSource, ICompilationTaskCallback callback);
}
diff --git a/android/composd/src/instance_manager.rs b/android/composd/src/instance_manager.rs
index cb1f7e4..9e94035 100644
--- a/android/composd/src/instance_manager.rs
+++ b/android/composd/src/instance_manager.rs
@@ -46,12 +46,11 @@
self.start_instance(CURRENT_INSTANCE_DIR, vm_parameters)
}
- pub fn start_test_instance(&self, prefer_staged: bool, os: &str) -> Result<CompOsInstance> {
+ pub fn start_test_instance(&self, prefer_staged: bool) -> Result<CompOsInstance> {
let mut vm_parameters = new_vm_parameters()?;
vm_parameters.name = String::from("ComposdTest");
vm_parameters.debug_mode = true;
vm_parameters.prefer_staged = prefer_staged;
- vm_parameters.os = os.to_owned();
self.start_instance(TEST_INSTANCE_DIR, vm_parameters)
}
diff --git a/android/composd/src/service.rs b/android/composd/src/service.rs
index 3cc40af..49cfd3a 100644
--- a/android/composd/src/service.rs
+++ b/android/composd/src/service.rs
@@ -60,7 +60,6 @@
&self,
apex_source: ApexSource,
callback: &Strong<dyn ICompilationTaskCallback>,
- os: &str,
) -> binder::Result<Strong<dyn ICompilationTask>> {
check_permissions()?;
let prefer_staged = match apex_source {
@@ -68,7 +67,7 @@
ApexSource::PreferStaged => true,
_ => unreachable!("Invalid ApexSource {:?}", apex_source),
};
- to_binder_result(self.do_start_test_compile(prefer_staged, callback, os))
+ to_binder_result(self.do_start_test_compile(prefer_staged, callback))
}
}
@@ -94,12 +93,9 @@
&self,
prefer_staged: bool,
callback: &Strong<dyn ICompilationTaskCallback>,
- os: &str,
) -> Result<Strong<dyn ICompilationTask>> {
- let comp_os = self
- .instance_manager
- .start_test_instance(prefer_staged, os)
- .context("Starting CompOS")?;
+ let comp_os =
+ self.instance_manager.start_test_instance(prefer_staged).context("Starting CompOS")?;
let target_dir_name = TEST_ARTIFACTS_SUBDIR.to_owned();
let task = OdrefreshTask::start(
diff --git a/android/composd_cmd/composd_cmd.rs b/android/composd_cmd/composd_cmd.rs
index 6281bd0..6d096a1 100644
--- a/android/composd_cmd/composd_cmd.rs
+++ b/android/composd_cmd/composd_cmd.rs
@@ -46,10 +46,6 @@
/// If any APEX is staged, prefer the staged version.
#[clap(long)]
prefer_staged: bool,
-
- /// OS for the VM.
- #[clap(long, default_value = "microdroid")]
- os: String,
},
}
@@ -60,7 +56,7 @@
match action {
Actions::StagedApexCompile {} => run_staged_apex_compile()?,
- Actions::TestCompile { prefer_staged, os } => run_test_compile(prefer_staged, &os)?,
+ Actions::TestCompile { prefer_staged } => run_test_compile(prefer_staged)?,
}
println!("All Ok!");
@@ -120,9 +116,9 @@
run_async_compilation(|service, callback| service.startStagedApexCompile(callback))
}
-fn run_test_compile(prefer_staged: bool, os: &str) -> Result<()> {
+fn run_test_compile(prefer_staged: bool) -> Result<()> {
let apex_source = if prefer_staged { ApexSource::PreferStaged } else { ApexSource::NoStaged };
- run_async_compilation(|service, callback| service.startTestCompile(apex_source, callback, os))
+ run_async_compilation(|service, callback| service.startTestCompile(apex_source, callback))
}
fn run_async_compilation<F>(start_compile_fn: F) -> Result<()>
diff --git a/build/debian/build.sh b/build/debian/build.sh
index 1e43b60..dfcffb6 100755
--- a/build/debian/build.sh
+++ b/build/debian/build.sh
@@ -238,6 +238,7 @@
)
# TODO(b/365955006): remove these lines when uboot supports x86_64 EFI application
elif [[ "$arch" == "x86_64" ]]; then
+ rm -f vmlinuz initrd.img
virt-get-kernel -a "${built_image}"
mv vmlinuz* vmlinuz
mv initrd.img* initrd.img
diff --git a/build/debian/build_in_container.sh b/build/debian/build_in_container.sh
index d5680e0..ef64254 100755
--- a/build/debian/build_in_container.sh
+++ b/build/debian/build_in_container.sh
@@ -23,6 +23,8 @@
esac
done
-docker run --privileged -it --workdir /root/Virtualization/build/debian -v \
- "$ANDROID_BUILD_TOP/packages/modules/Virtualization:/root/Virtualization" -v \
- /dev:/dev ubuntu:22.04 /root/Virtualization/build/debian/build.sh -a "$arch" $release_flag
+docker run --privileged -it -v /dev:/dev \
+ -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"
diff --git a/libs/libcompos_common/compos_client.rs b/libs/libcompos_common/compos_client.rs
index 6872582..316eaa9 100644
--- a/libs/libcompos_common/compos_client.rs
+++ b/libs/libcompos_common/compos_client.rs
@@ -58,8 +58,6 @@
pub struct VmParameters {
/// The name of VM for identifying.
pub name: String,
- /// The OS of VM.
- pub os: String,
/// Whether the VM should be debuggable.
pub debug_mode: bool,
/// CPU topology of the VM. Defaults to 1 vCPU.
@@ -131,7 +129,6 @@
let config = VirtualMachineConfig::AppConfig(VirtualMachineAppConfig {
name: parameters.name.clone(),
- osName: parameters.os.clone(),
apk: Some(apk_fd),
idsig: Some(idsig_fd),
instanceId: instance_id,