Merge "TerminalApp: Fixes for RTL" into main
diff --git a/android/TerminalApp/AndroidManifest.xml b/android/TerminalApp/AndroidManifest.xml
index 8ed2f79..aa702a3 100644
--- a/android/TerminalApp/AndroidManifest.xml
+++ b/android/TerminalApp/AndroidManifest.xml
@@ -26,6 +26,7 @@
     <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
     <uses-permission android:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE"/>
     <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
+    <uses-permission android:name="android.permission.RECORD_AUDIO" />
 
     <uses-feature android:name="android.software.virtualization_framework" android:required="true" />
 
diff --git a/android/TerminalApp/assets/js/disable_ctrl_key.js b/android/TerminalApp/assets/js/disable_ctrl_key.js
new file mode 100644
index 0000000..df261f0
--- /dev/null
+++ b/android/TerminalApp/assets/js/disable_ctrl_key.js
@@ -0,0 +1,19 @@
+/*
+ * Copyright (C) 2025 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.
+ */
+
+(function() {
+window.ctrl = false;
+})();
\ No newline at end of file
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.kt b/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.kt
index 0f18261..f6eeff9 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.kt
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.kt
@@ -21,11 +21,9 @@
 import android.content.Intent
 import android.content.pm.ActivityInfo
 import android.content.res.Configuration
-import android.graphics.Bitmap
 import android.graphics.drawable.Icon
 import android.graphics.fonts.FontStyle
 import android.net.Uri
-import android.net.http.SslError
 import android.net.nsd.NsdManager
 import android.net.nsd.NsdServiceInfo
 import android.os.Build
@@ -38,41 +36,32 @@
 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
-import android.webkit.WebChromeClient
-import android.webkit.WebResourceError
-import android.webkit.WebResourceRequest
-import android.webkit.WebSettings
-import android.webkit.WebView
-import android.webkit.WebViewClient
+import android.widget.Button
+import android.widget.HorizontalScrollView
+import android.widget.RelativeLayout
 import androidx.activity.result.ActivityResult
 import androidx.activity.result.ActivityResultCallback
 import androidx.activity.result.ActivityResultLauncher
 import androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult
+import androidx.lifecycle.ViewModelProvider
+import androidx.viewpager2.widget.ViewPager2
 import com.android.internal.annotations.VisibleForTesting
 import com.android.microdroid.test.common.DeviceProperties
 import com.android.system.virtualmachine.flags.Flags.terminalGuiSupport
-import com.android.virtualization.terminal.CertificateUtils.createOrGetKey
-import com.android.virtualization.terminal.CertificateUtils.writeCertificateToFile
 import com.android.virtualization.terminal.ErrorActivity.Companion.start
 import com.android.virtualization.terminal.InstalledImage.Companion.getDefault
 import com.android.virtualization.terminal.VmLauncherService.Companion.run
 import com.android.virtualization.terminal.VmLauncherService.Companion.stop
 import com.android.virtualization.terminal.VmLauncherService.VmLauncherServiceCallback
-import com.google.android.material.appbar.MaterialToolbar
+import com.google.android.material.tabs.TabLayout
+import com.google.android.material.tabs.TabLayoutMediator
 import java.io.IOException
-import java.lang.Exception
 import java.net.MalformedURLException
 import java.net.URL
-import java.security.PrivateKey
-import java.security.cert.X509Certificate
 import java.util.concurrent.ExecutorService
 import java.util.concurrent.Executors
 
@@ -80,17 +69,21 @@
     BaseActivity(),
     VmLauncherServiceCallback,
     AccessibilityManager.AccessibilityStateChangeListener {
+    var displayMenu: Button? = null
+    var tabAddButton: Button? = null
+    val bootCompleted = ConditionVariable()
+    lateinit var modifierKeysController: ModifierKeysController
+    private lateinit var tabScrollView: HorizontalScrollView
     private lateinit var executorService: ExecutorService
     private lateinit var image: InstalledImage
-    private var certificates: Array<X509Certificate>? = null
-    private var privateKey: PrivateKey? = null
-    private lateinit var terminalContainer: ViewGroup
-    private lateinit var terminalView: TerminalView
     private lateinit var accessibilityManager: AccessibilityManager
-    private val bootCompleted = ConditionVariable()
     private lateinit var manageExternalStorageActivityResultLauncher: ActivityResultLauncher<Intent>
-    private lateinit var modifierKeysController: ModifierKeysController
-    private var displayMenu: MenuItem? = null
+    private var ipAddress: String? = null
+    private var port: Int? = null
+    private lateinit var terminalViewModel: TerminalViewModel
+    private lateinit var viewPager: ViewPager2
+    private lateinit var tabLayout: TabLayout
+    private lateinit var terminalTabAdapter: TerminalTabAdapter
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
@@ -100,26 +93,12 @@
 
         val launchInstaller = installIfNecessary()
 
-        setContentView(R.layout.activity_headless)
-
-        val toolbar = findViewById<MaterialToolbar>(R.id.toolbar)
-        setSupportActionBar(toolbar)
-        terminalView = findViewById<TerminalView>(R.id.webview)
-        terminalView.getSettings().setDomStorageEnabled(true)
-        terminalView.getSettings().setJavaScriptEnabled(true)
-        terminalView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE)
-        terminalView.setWebChromeClient(WebChromeClient())
-
-        terminalContainer = terminalView.parent as ViewGroup
-
-        modifierKeysController = ModifierKeysController(this, terminalView, terminalContainer)
+        initializeUi()
 
         accessibilityManager =
             getSystemService<AccessibilityManager>(AccessibilityManager::class.java)
         accessibilityManager.addAccessibilityStateChangeListener(this)
 
-        readClientCertificate()
-
         manageExternalStorageActivityResultLauncher =
             registerForActivityResult<Intent, ActivityResult>(
                 StartActivityForResult(),
@@ -138,6 +117,73 @@
         }
     }
 
+    private fun initializeUi() {
+        terminalViewModel = ViewModelProvider(this)[TerminalViewModel::class.java]
+        setContentView(R.layout.activity_headless)
+        tabLayout = findViewById<TabLayout>(R.id.tab_layout)
+        displayMenu = findViewById<Button>(R.id.display_button)
+        tabAddButton = findViewById<Button>(R.id.tab_add_button)
+        tabScrollView = findViewById<HorizontalScrollView>(R.id.tab_scrollview)
+        val modifierKeysContainerView =
+            findViewById<RelativeLayout>(R.id.modifier_keys_container) as ViewGroup
+
+        findViewById<Button>(R.id.settings_button).setOnClickListener {
+            val intent = Intent(this, SettingsActivity::class.java)
+            this.startActivity(intent)
+        }
+
+        displayMenu?.also {
+            it.visibility = if (terminalGuiSupport()) View.VISIBLE else View.GONE
+            it.setEnabled(false)
+            if (terminalGuiSupport()) {
+                it.setOnClickListener {
+                    val intent = Intent(this, DisplayActivity::class.java)
+                    intent.flags =
+                        intent.flags or
+                            Intent.FLAG_ACTIVITY_NEW_TASK or
+                            Intent.FLAG_ACTIVITY_CLEAR_TASK
+                    this.startActivity(intent)
+                }
+            }
+        }
+
+        modifierKeysController = ModifierKeysController(this, modifierKeysContainerView)
+
+        terminalTabAdapter = TerminalTabAdapter(this)
+        viewPager = findViewById(R.id.pager)
+        viewPager.adapter = terminalTabAdapter
+        viewPager.isUserInputEnabled = false
+        viewPager.offscreenPageLimit = 2
+
+        TabLayoutMediator(tabLayout, viewPager, false, false) { _: TabLayout.Tab?, _: Int -> }
+            .attach()
+
+        addTerminalTab()
+
+        tabAddButton?.setOnClickListener { addTerminalTab() }
+    }
+
+    private fun addTerminalTab() {
+        val tab = tabLayout.newTab()
+        tab.setCustomView(R.layout.tabitem_terminal)
+        viewPager.offscreenPageLimit += 1
+        terminalTabAdapter.addTab()
+        tab.customView!!
+            .findViewById<Button>(R.id.tab_close_button)
+            .setOnClickListener(
+                View.OnClickListener { _: View? ->
+                    if (terminalTabAdapter.tabs.size == 1) {
+                        finishAndRemoveTask()
+                    }
+                    viewPager.offscreenPageLimit -= 1
+                    terminalTabAdapter.deleteTab(tab.position)
+                    tabLayout.removeTab(tab)
+                }
+            )
+        // Add and select the tab
+        tabLayout.addTab(tab, true)
+    }
+
     private fun lockOrientationIfNecessary() {
         val hasHwQwertyKeyboard = resources.configuration.keyboard == Configuration.KEYBOARD_QWERTY
         if (hasHwQwertyKeyboard) {
@@ -175,7 +221,7 @@
 
     private fun getTerminalServiceUrl(ipAddress: String?, port: Int): URL? {
         val config = resources.configuration
-
+        // TODO: Always enable screenReaderMode (b/395845063)
         val query =
             ("?fontSize=" +
                 (config.fontScale * FONT_SIZE_DEFAULT).toInt() +
@@ -196,105 +242,12 @@
         }
     }
 
-    private fun readClientCertificate() {
-        val pke = createOrGetKey()
-        writeCertificateToFile(this, pke.certificate)
-        privateKey = pke.privateKey
-        certificates = arrayOf<X509Certificate>(pke.certificate as X509Certificate)
-    }
-
-    private fun connectToTerminalService() {
-        terminalView.setWebViewClient(
-            object : WebViewClient() {
-                private var loadFailed = false
-                private var requestId: Long = 0
-
-                override fun shouldOverrideUrlLoading(
-                    view: WebView?,
-                    request: WebResourceRequest?,
-                ): Boolean {
-                    val intent = Intent(Intent.ACTION_VIEW, request?.url)
-                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
-                    startActivity(intent)
-                    return true
-                }
-
-                override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
-                    loadFailed = false
-                }
-
-                override fun onReceivedError(
-                    view: WebView,
-                    request: WebResourceRequest,
-                    error: WebResourceError,
-                ) {
-                    loadFailed = true
-                    when (error.getErrorCode()) {
-                        ERROR_CONNECT,
-                        ERROR_HOST_LOOKUP,
-                        ERROR_FAILED_SSL_HANDSHAKE,
-                        ERROR_TIMEOUT -> {
-                            view.reload()
-                            return
-                        }
-
-                        else -> {
-                            val url: String? = request.getUrl().toString()
-                            val msg = error.getDescription()
-                            Log.e(TAG, "Failed to load $url: $msg")
-                        }
-                    }
-                }
-
-                override fun onPageFinished(view: WebView, url: String?) {
-                    if (loadFailed) {
-                        return
-                    }
-
-                    requestId++
-                    view.postVisualStateCallback(
-                        requestId,
-                        object : WebView.VisualStateCallback() {
-                            override fun onComplete(completedRequestId: Long) {
-                                if (completedRequestId == requestId) {
-                                    Trace.endAsyncSection("executeTerminal", 0)
-                                    findViewById<View?>(R.id.boot_progress).visibility = View.GONE
-                                    terminalContainer.visibility = View.VISIBLE
-                                    if (terminalGuiSupport()) {
-                                        displayMenu?.setVisible(true)
-                                        displayMenu?.setEnabled(true)
-                                    }
-                                    bootCompleted.open()
-                                    modifierKeysController.update()
-                                    terminalView.mapTouchToMouseEvent()
-                                }
-                            }
-                        },
-                    )
-                }
-
-                override fun onReceivedClientCertRequest(
-                    view: WebView?,
-                    request: ClientCertRequest,
-                ) {
-                    if (privateKey != null && certificates != null) {
-                        request.proceed(privateKey, certificates)
-                        return
-                    }
-                    super.onReceivedClientCertRequest(view, request)
-                }
-
-                override fun onReceivedSslError(
-                    view: WebView?,
-                    handler: SslErrorHandler,
-                    error: SslError?,
-                ) {
-                    // ttyd uses self-signed certificate
-                    handler.proceed()
-                }
-            }
-        )
-
+    fun connectToTerminalService(terminalView: TerminalView) {
+        if (ipAddress != null && port != null) {
+            val url = getTerminalServiceUrl(ipAddress, port!!)
+            terminalView.loadUrl(url.toString())
+            return
+        }
         // TODO: refactor this block as a method
         val nsdManager = getSystemService<NsdManager>(NsdManager::class.java)
         val info = NsdServiceInfo()
@@ -314,10 +267,10 @@
 
                 override fun onServiceUpdated(info: NsdServiceInfo) {
                     Log.i(TAG, "Service found: $info")
-                    val ipAddress = info.hostAddresses[0].hostAddress
-                    val port = info.port
-                    val url = getTerminalServiceUrl(ipAddress, port)
                     if (!loaded) {
+                        ipAddress = info.hostAddresses[0].hostAddress
+                        port = info.port
+                        val url = getTerminalServiceUrl(ipAddress, port!!)
                         loaded = true
                         nsdManager.unregisterServiceInfoCallback(this)
                         runOnUiThread(Runnable { terminalView.loadUrl(url.toString()) })
@@ -350,34 +303,10 @@
         start(this, Exception("onVmError"))
     }
 
-    override fun onCreateOptionsMenu(menu: Menu?): Boolean {
-        menuInflater.inflate(R.menu.main_menu, menu)
-        displayMenu =
-            menu?.findItem(R.id.menu_item_display).also {
-                it?.setVisible(terminalGuiSupport())
-                it?.setEnabled(false)
-            }
-        return true
-    }
-
-    override fun onOptionsItemSelected(item: MenuItem): Boolean {
-        val id = item.getItemId()
-        if (id == R.id.menu_item_settings) {
-            val intent = Intent(this, SettingsActivity::class.java)
-            this.startActivity(intent)
-            return true
-        } else if (id == R.id.menu_item_display) {
-            val intent = Intent(this, DisplayActivity::class.java)
-            intent.flags =
-                intent.flags or Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
-            this.startActivity(intent)
-            return true
-        }
-        return super.onOptionsItemSelected(item)
-    }
-
     override fun onAccessibilityStateChanged(enabled: Boolean) {
-        connectToTerminalService()
+        terminalViewModel.terminalViews.forEach { terminalView ->
+            connectToTerminalService(terminalView)
+        }
     }
 
     private val installerLauncher =
@@ -462,7 +391,6 @@
 
         Trace.beginAsyncSection("executeTerminal", 0)
         run(this, this, notification, getDisplayInfo())
-        connectToTerminalService()
     }
 
     @VisibleForTesting
@@ -499,21 +427,6 @@
                     20000 // 20 sec
                 }
         }
-
-        private val BTN_KEY_CODE_MAP =
-            mapOf(
-                R.id.btn_tab to KeyEvent.KEYCODE_TAB, // Alt key sends ESC keycode
-                R.id.btn_alt to KeyEvent.KEYCODE_ESCAPE,
-                R.id.btn_esc to KeyEvent.KEYCODE_ESCAPE,
-                R.id.btn_left to KeyEvent.KEYCODE_DPAD_LEFT,
-                R.id.btn_right to KeyEvent.KEYCODE_DPAD_RIGHT,
-                R.id.btn_up to KeyEvent.KEYCODE_DPAD_UP,
-                R.id.btn_down to KeyEvent.KEYCODE_DPAD_DOWN,
-                R.id.btn_home to KeyEvent.KEYCODE_MOVE_HOME,
-                R.id.btn_end to KeyEvent.KEYCODE_MOVE_END,
-                R.id.btn_pgup to KeyEvent.KEYCODE_PAGE_UP,
-                R.id.btn_pgdn to KeyEvent.KEYCODE_PAGE_DOWN,
-            )
     }
 
     fun getDisplayInfo(): DisplayInfo {
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/ModifierKeysController.kt b/android/TerminalApp/java/com/android/virtualization/terminal/ModifierKeysController.kt
index f8f30f9..ed340d2 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/ModifierKeysController.kt
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/ModifierKeysController.kt
@@ -15,7 +15,6 @@
  */
 package com.android.virtualization.terminal
 
-import android.app.Activity
 import android.content.res.Configuration
 import android.view.KeyEvent
 import android.view.LayoutInflater
@@ -23,20 +22,16 @@
 import android.view.ViewGroup
 import android.view.WindowInsets
 
-class ModifierKeysController(
-    val activity: Activity,
-    val terminalView: TerminalView,
-    val parent: ViewGroup,
-) {
+class ModifierKeysController(val activity: MainActivity, val parent: ViewGroup) {
     private val window = activity.window
     private val keysSingleLine: View
     private val keysDoubleLine: View
-
+    private var activeTerminalView: TerminalView? = null
     private var keysInSingleLine: Boolean = false
 
     init {
-        // Prepare the two modifier keys layout, but don't add them yet because we don't know which
-        // layout will be needed.
+        // Prepare the two modifier keys layout, but only attach the double line one since the
+        // keysInSingleLine is set to true by default
         val layout = LayoutInflater.from(activity)
         keysSingleLine = layout.inflate(R.layout.modifier_keys_singleline, parent, false)
         keysDoubleLine = layout.inflate(R.layout.modifier_keys_doubleline, parent, false)
@@ -46,14 +41,25 @@
 
         keysSingleLine.visibility = View.GONE
         keysDoubleLine.visibility = View.GONE
+        parent.addView(keysDoubleLine)
 
         // Setup for the update to be called when needed
         window.decorView.rootView.setOnApplyWindowInsetsListener { _: View?, insets: WindowInsets ->
             update()
             insets
         }
+    }
 
-        terminalView.setOnFocusChangeListener { _: View, _: Boolean -> update() }
+    fun addTerminalView(terminalView: TerminalView) {
+        terminalView.setOnFocusChangeListener { _: View, onFocus: Boolean ->
+            if (onFocus) {
+                activeTerminalView = terminalView
+            } else {
+                activeTerminalView = null
+                terminalView.disableCtrlKey()
+            }
+            update()
+        }
     }
 
     private fun addClickListeners(keys: View) {
@@ -61,15 +67,15 @@
         keys
             .findViewById<View>(R.id.btn_ctrl)
             .setOnClickListener({
-                terminalView.mapCtrlKey()
-                terminalView.enableCtrlKey()
+                activeTerminalView!!.mapCtrlKey()
+                activeTerminalView!!.enableCtrlKey()
             })
 
         val listener =
             View.OnClickListener { v: View ->
                 BTN_KEY_CODE_MAP[v.id]?.also { keyCode ->
-                    terminalView.dispatchKeyEvent(KeyEvent(KeyEvent.ACTION_DOWN, keyCode))
-                    terminalView.dispatchKeyEvent(KeyEvent(KeyEvent.ACTION_UP, keyCode))
+                    activeTerminalView!!.dispatchKeyEvent(KeyEvent(KeyEvent.ACTION_DOWN, keyCode))
+                    activeTerminalView!!.dispatchKeyEvent(KeyEvent(KeyEvent.ACTION_UP, keyCode))
                 }
             }
 
@@ -79,38 +85,40 @@
     }
 
     fun update() {
-        // select single line or double line
-        val needSingleLine = needsKeysInSingleLine()
-        if (keysInSingleLine != needSingleLine) {
-            if (needSingleLine) {
-                parent.removeView(keysDoubleLine)
-                parent.addView(keysSingleLine)
-            } else {
-                parent.removeView(keysSingleLine)
-                parent.addView(keysDoubleLine)
+        // Pass if no TerminalView focused.
+        if (activeTerminalView == null) {
+            val keys = if (keysInSingleLine) keysSingleLine else keysDoubleLine
+            keys.visibility = View.GONE
+        } else {
+            // select single line or double line
+            val needSingleLine = needsKeysInSingleLine()
+            if (keysInSingleLine != needSingleLine) {
+                if (needSingleLine) {
+                    parent.removeView(keysDoubleLine)
+                    parent.addView(keysSingleLine)
+                } else {
+                    parent.removeView(keysSingleLine)
+                    parent.addView(keysDoubleLine)
+                }
+                keysInSingleLine = needSingleLine
             }
-            keysInSingleLine = needSingleLine
+            // set visibility
+            val needShow = needToShowKeys()
+            val keys = if (keysInSingleLine) keysSingleLine else keysDoubleLine
+            keys.visibility = if (needShow) View.VISIBLE else View.GONE
         }
-
-        // set visibility
-        val needShow = needToShowKeys()
-        val keys = if (keysInSingleLine) keysSingleLine else keysDoubleLine
-        keys.visibility = if (needShow) View.VISIBLE else View.GONE
     }
 
     // Modifier keys are required only when IME is shown and the HW qwerty keyboard is not present
-    private fun needToShowKeys(): Boolean {
-        val imeShown = activity.window.decorView.rootWindowInsets.isVisible(WindowInsets.Type.ime())
-        val hasFocus = terminalView.hasFocus()
-        val hasHwQwertyKeyboard =
-            activity.resources.configuration.keyboard == Configuration.KEYBOARD_QWERTY
-        return imeShown && hasFocus && !hasHwQwertyKeyboard
-    }
+    private fun needToShowKeys(): Boolean =
+        activity.window.decorView.rootWindowInsets.isVisible(WindowInsets.Type.ime()) &&
+            activeTerminalView!!.hasFocus() &&
+            !(activity.resources.configuration.keyboard == Configuration.KEYBOARD_QWERTY)
 
     // If terminal's height is less than 30% of the screen height, we need to show modifier keys in
     // a single line to save the vertical space
     private fun needsKeysInSingleLine(): Boolean =
-        (terminalView.height / activity.window.decorView.height.toFloat()) < 0.3f
+        activeTerminalView!!.height.div(activity.window.decorView.height.toFloat()) < 0.3f
 
     companion object {
         private val BTN_KEY_CODE_MAP =
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/TerminalTabAdapter.kt b/android/TerminalApp/java/com/android/virtualization/terminal/TerminalTabAdapter.kt
new file mode 100644
index 0000000..9c3cd12
--- /dev/null
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/TerminalTabAdapter.kt
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2025 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.
+ */
+package com.android.virtualization.terminal
+
+import androidx.core.os.bundleOf
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentActivity
+import androidx.viewpager2.adapter.FragmentStateAdapter
+import java.util.UUID
+
+class TabMetadata(val id: String)
+
+class TerminalTabAdapter(fragmentActivity: FragmentActivity) :
+    FragmentStateAdapter(fragmentActivity) {
+    val tabs = ArrayList<TabMetadata>()
+
+    override fun createFragment(position: Int): Fragment {
+        val terminalTabFragment = TerminalTabFragment()
+
+        terminalTabFragment.arguments = bundleOf("id" to tabs[position].id)
+        return terminalTabFragment
+    }
+
+    override fun getItemCount(): Int {
+        return tabs.size
+    }
+
+    override fun getItemId(position: Int): Long {
+        return tabs[position].id.hashCode().toLong()
+    }
+
+    override fun containsItem(itemId: Long): Boolean {
+        return tabs.any { it.id.hashCode().toLong() == itemId }
+    }
+
+    fun addTab(): String {
+        val id = UUID.randomUUID().toString()
+        tabs.add(TabMetadata(id))
+        return id
+    }
+
+    fun deleteTab(position: Int) {
+        if (position in 0 until tabs.size) {
+            tabs.removeAt(position)
+        }
+    }
+}
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/TerminalTabFragment.kt b/android/TerminalApp/java/com/android/virtualization/terminal/TerminalTabFragment.kt
new file mode 100644
index 0000000..5c01ead
--- /dev/null
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/TerminalTabFragment.kt
@@ -0,0 +1,202 @@
+/*
+ * Copyright (C) 2025 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.
+ */
+package com.android.virtualization.terminal
+
+import android.content.Intent
+import android.graphics.Bitmap
+import android.net.http.SslError
+import android.os.Bundle
+import android.os.Trace
+import android.util.Log
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.webkit.ClientCertRequest
+import android.webkit.SslErrorHandler
+import android.webkit.WebChromeClient
+import android.webkit.WebResourceError
+import android.webkit.WebResourceRequest
+import android.webkit.WebSettings
+import android.webkit.WebView
+import android.webkit.WebViewClient
+import androidx.fragment.app.Fragment
+import androidx.lifecycle.ViewModelProvider
+import com.android.system.virtualmachine.flags.Flags.terminalGuiSupport
+import com.android.virtualization.terminal.CertificateUtils.createOrGetKey
+import com.android.virtualization.terminal.CertificateUtils.writeCertificateToFile
+import java.security.PrivateKey
+import java.security.cert.X509Certificate
+
+class TerminalTabFragment() : Fragment() {
+    private lateinit var terminalView: TerminalView
+    private lateinit var bootProgressView: View
+    private lateinit var id: String
+    private var certificates: Array<X509Certificate>? = null
+    private var privateKey: PrivateKey? = null
+    private lateinit var terminalViewModel: TerminalViewModel
+
+    override fun onCreateView(
+        inflater: LayoutInflater,
+        container: ViewGroup?,
+        savedInstanceState: Bundle?,
+    ): View {
+        val view = inflater.inflate(R.layout.fragment_terminal_tab, container, false)
+        arguments?.let { id = it.getString("id")!! }
+        return view
+    }
+
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+        super.onViewCreated(view, savedInstanceState)
+        terminalViewModel = ViewModelProvider(this)[TerminalViewModel::class.java]
+        terminalView = view.findViewById(R.id.webview)
+        bootProgressView = view.findViewById(R.id.boot_progress)
+        initializeWebView()
+        readClientCertificate()
+
+        terminalView.webViewClient = TerminalWebViewClient()
+
+        if (savedInstanceState != null) {
+            terminalView.restoreState(savedInstanceState)
+        } else {
+            (activity as MainActivity).connectToTerminalService(terminalView)
+        }
+    }
+
+    override fun onSaveInstanceState(outState: Bundle) {
+        super.onSaveInstanceState(outState)
+        terminalView.saveState(outState)
+    }
+
+    private fun initializeWebView() {
+        terminalView.settings.databaseEnabled = true
+        terminalView.settings.domStorageEnabled = true
+        terminalView.settings.javaScriptEnabled = true
+        terminalView.settings.cacheMode = WebSettings.LOAD_DEFAULT
+
+        terminalView.webChromeClient = WebChromeClient()
+        terminalView.webViewClient = TerminalWebViewClient()
+
+        (activity as MainActivity).modifierKeysController.addTerminalView(terminalView)
+        terminalViewModel.terminalViews.add(terminalView)
+    }
+
+    private inner class TerminalWebViewClient : WebViewClient() {
+        private var loadFailed = false
+        private var requestId: Long = 0
+
+        override fun shouldOverrideUrlLoading(
+            view: WebView?,
+            request: WebResourceRequest?,
+        ): Boolean {
+            val intent = Intent(Intent.ACTION_VIEW, request?.url)
+            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+            startActivity(intent)
+            return true
+        }
+
+        override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
+            loadFailed = false
+        }
+
+        override fun onReceivedError(
+            view: WebView,
+            request: WebResourceRequest,
+            error: WebResourceError,
+        ) {
+            loadFailed = true
+            when (error.getErrorCode()) {
+                ERROR_CONNECT,
+                ERROR_HOST_LOOKUP,
+                ERROR_FAILED_SSL_HANDSHAKE,
+                ERROR_TIMEOUT -> {
+                    view.reload()
+                    return
+                }
+
+                else -> {
+                    val url: String? = request.getUrl().toString()
+                    val msg = error.getDescription()
+                    Log.e(MainActivity.TAG, "Failed to load $url: $msg")
+                }
+            }
+        }
+
+        override fun onPageFinished(view: WebView, url: String?) {
+            if (loadFailed) {
+                return
+            }
+
+            requestId++
+            view.postVisualStateCallback(
+                requestId,
+                object : WebView.VisualStateCallback() {
+                    override fun onComplete(completedRequestId: Long) {
+                        if (completedRequestId == requestId) {
+                            Trace.endAsyncSection("executeTerminal", 0)
+                            bootProgressView.visibility = View.GONE
+                            terminalView.visibility = View.VISIBLE
+                            terminalView.mapTouchToMouseEvent()
+                            updateMainActivity()
+                        }
+                    }
+                },
+            )
+        }
+
+        override fun onReceivedClientCertRequest(view: WebView?, request: ClientCertRequest) {
+            if (privateKey != null && certificates != null) {
+                request.proceed(privateKey, certificates)
+                return
+            }
+            super.onReceivedClientCertRequest(view, request)
+        }
+
+        override fun onReceivedSslError(
+            view: WebView?,
+            handler: SslErrorHandler,
+            error: SslError?,
+        ) {
+            // ttyd uses self-signed certificate
+            handler.proceed()
+        }
+    }
+
+    private fun updateMainActivity() {
+        val mainActivity = (activity as MainActivity)
+        if (terminalGuiSupport()) {
+            mainActivity.displayMenu!!.visibility = View.VISIBLE
+            mainActivity.displayMenu!!.isEnabled = true
+        }
+        mainActivity.tabAddButton!!.isEnabled = true
+        mainActivity.bootCompleted.open()
+    }
+
+    private fun readClientCertificate() {
+        val pke = createOrGetKey()
+        writeCertificateToFile(activity!!, pke.certificate)
+        privateKey = pke.privateKey
+        certificates = arrayOf<X509Certificate>(pke.certificate as X509Certificate)
+    }
+
+    companion object {
+        const val TAG: String = "VmTerminalApp"
+    }
+
+    override fun onDestroy() {
+        terminalViewModel.terminalViews.remove(terminalView)
+        super.onDestroy()
+    }
+}
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/TerminalView.kt b/android/TerminalApp/java/com/android/virtualization/terminal/TerminalView.kt
index 4d9a89d..4b11c1d 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/TerminalView.kt
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/TerminalView.kt
@@ -40,6 +40,7 @@
     AccessibilityManager.TouchExplorationStateChangeListener {
     private val ctrlKeyHandler: String = readAssetAsString(context, "js/ctrl_key_handler.js")
     private val enableCtrlKey: String = readAssetAsString(context, "js/enable_ctrl_key.js")
+    private val disableCtrlKey: String = readAssetAsString(context, "js/disable_ctrl_key.js")
     private val touchToMouseHandler: String =
         readAssetAsString(context, "js/touch_to_mouse_handler.js")
     private val a11yManager =
@@ -65,6 +66,10 @@
         this.evaluateJavascript(enableCtrlKey, null)
     }
 
+    fun disableCtrlKey() {
+        this.evaluateJavascript(disableCtrlKey, null)
+    }
+
     override fun onAccessibilityStateChanged(enabled: Boolean) {
         Log.d(TAG, "accessibility $enabled")
         adjustToA11yStateChange()
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/TerminalViewModel.kt b/android/TerminalApp/java/com/android/virtualization/terminal/TerminalViewModel.kt
new file mode 100644
index 0000000..4a69f75
--- /dev/null
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/TerminalViewModel.kt
@@ -0,0 +1,22 @@
+/*
+ * Copyright (C) 2025 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.
+ */
+package com.android.virtualization.terminal
+
+import androidx.lifecycle.ViewModel
+
+class TerminalViewModel : ViewModel() {
+    val terminalViews: MutableSet<TerminalView> = mutableSetOf()
+}
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/VmLauncherService.kt b/android/TerminalApp/java/com/android/virtualization/terminal/VmLauncherService.kt
index ecb01c0..6301da4 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/VmLauncherService.kt
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/VmLauncherService.kt
@@ -34,6 +34,7 @@
 import android.os.Trace
 import android.system.virtualmachine.VirtualMachine
 import android.system.virtualmachine.VirtualMachineCustomImageConfig
+import android.system.virtualmachine.VirtualMachineCustomImageConfig.AudioConfig
 import android.system.virtualmachine.VirtualMachineException
 import android.util.Log
 import android.widget.Toast
@@ -105,6 +106,13 @@
         val configBuilder = json.toConfigBuilder(this)
         val customImageConfigBuilder = json.toCustomImageConfigBuilder(this)
         val displaySize = intent.getParcelableExtra(EXTRA_DISPLAY_INFO, DisplayInfo::class.java)
+
+        customImageConfigBuilder.setAudioConfig(
+            AudioConfig.Builder()
+                .setUseSpeaker(true)
+                .setUseMicrophone(true)
+                .build()
+        )
         if (overrideConfigIfNecessary(customImageConfigBuilder, displaySize)) {
             configBuilder.setCustomImageConfig(customImageConfigBuilder.build())
         }
diff --git a/android/TerminalApp/res/drawable/background_tabitem_selected.xml b/android/TerminalApp/res/drawable/background_tabitem_selected.xml
new file mode 100644
index 0000000..8784304
--- /dev/null
+++ b/android/TerminalApp/res/drawable/background_tabitem_selected.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--  Copyright 2025 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.
+ -->
+
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <corners
+        android:topLeftRadius="10dp"
+        android:topRightRadius="10dp" />
+</shape>
diff --git a/android/TerminalApp/res/layout/activity_headless.xml b/android/TerminalApp/res/layout/activity_headless.xml
index e18aa5c..b4c013f 100644
--- a/android/TerminalApp/res/layout/activity_headless.xml
+++ b/android/TerminalApp/res/layout/activity_headless.xml
@@ -14,51 +14,87 @@
      limitations under the License.
  -->
 
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/terminal_container"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:orientation="vertical"
     android:fitsSystemWindows="true"
     tools:context=".MainActivity">
-    <com.google.android.material.appbar.MaterialToolbar
-        android:id="@+id/toolbar"
+
+    <HorizontalScrollView
+        android:id="@+id/tab_scrollview"
         android:layout_width="match_parent"
-        android:layout_height="?attr/actionBarSize"
-        app:layout_constraintTop_toTopOf="parent"/>
-    <FrameLayout
-        android:layout_width="match_parent"
-        android:layout_height="match_parent">
+        android:layout_height="wrap_content"
+        android:layout_alignParentStart="true"
+        android:layout_alignParentTop="true"
+        android:layout_toStartOf="@id/menu_container"
+        android:scrollbars="none">
+
         <LinearLayout
-            android:id="@+id/boot_progress"
-            android:orientation="vertical"
-            android:gravity="center"
-            android:layout_gravity="center"
             android:layout_width="wrap_content"
-            android:layout_height="wrap_content">
-            <com.google.android.material.textview.MaterialTextView
-                android:text="@string/vm_creation_message"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal">
+
+            <com.google.android.material.tabs.TabLayout
+                android:id="@+id/tab_layout"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:layout_marginBottom="5dp"/>
-            <com.google.android.material.progressindicator.CircularProgressIndicator
-                android:indeterminate="true"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"/>
-        </LinearLayout>
-        <LinearLayout
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:layout_marginBottom="5dp"
-            android:orientation="vertical"
-            android:visibility="gone" >
-            <com.android.virtualization.terminal.TerminalView
-                android:id="@+id/webview"
-                android:layout_width="match_parent"
-                android:layout_height="0dp"
-                android:layout_weight="1" />
-        </LinearLayout>
-    </FrameLayout>
+                android:elevation="0dp"
+                app:tabIndicator="@drawable/background_tabitem_selected"
+                app:tabIndicatorColor="@color/material_on_surface_stroke"
+                app:tabRippleColor="@null"
+                app:tabIndicatorHeight="48dp"
+                app:tabPaddingStart="0dp"
+                app:tabPaddingEnd="0dp"/>
 
-</LinearLayout>
+            <Button
+                android:id="@+id/tab_add_button"
+                style="?attr/materialIconButtonStyle"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:enabled="false"
+                app:icon="@drawable/ic_add" />
+        </LinearLayout>
+    </HorizontalScrollView>
+
+    <LinearLayout
+        android:id="@+id/menu_container"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentTop="true"
+        android:layout_alignParentEnd="true"
+        android:orientation="horizontal">
+        <Button
+            android:id="@+id/settings_button"
+            style="?attr/materialIconButtonStyle"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            app:icon="@drawable/ic_settings" />
+        <Button
+            android:id="@+id/display_button"
+            style="?attr/materialIconButtonStyle"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:visibility="gone"
+            app:icon="@drawable/ic_display" />
+    </LinearLayout>
+
+
+    <androidx.viewpager2.widget.ViewPager2
+        android:id="@+id/pager"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_alignParentStart="true"
+        android:layout_above="@+id/modifier_keys_container"
+        android:layout_below="@id/menu_container"/>
+
+    <LinearLayout
+        android:id="@+id/modifier_keys_container"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_alignParentBottom="true"
+        android:layout_alignParentStart="true"
+        android:orientation="vertical"/>
+</RelativeLayout>
diff --git a/android/TerminalApp/res/layout/fragment_terminal_tab.xml b/android/TerminalApp/res/layout/fragment_terminal_tab.xml
new file mode 100644
index 0000000..bdf3d83
--- /dev/null
+++ b/android/TerminalApp/res/layout/fragment_terminal_tab.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--  Copyright 2025 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.
+ -->
+
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+    <LinearLayout
+        android:id="@+id/boot_progress"
+        android:orientation="vertical"
+        android:gravity="center"
+        android:layout_gravity="center"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content">
+        <com.google.android.material.textview.MaterialTextView
+            android:text="@string/vm_creation_message"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginBottom="5dp"/>
+        <com.google.android.material.progressindicator.CircularProgressIndicator
+            android:indeterminate="true"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"/>
+    </LinearLayout>
+    <com.android.virtualization.terminal.TerminalView
+        android:id="@+id/webview"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:visibility="gone"
+        android:layout_marginBottom="5dp"/>
+</FrameLayout>
\ No newline at end of file
diff --git a/android/TerminalApp/res/layout/tabitem_terminal.xml b/android/TerminalApp/res/layout/tabitem_terminal.xml
new file mode 100644
index 0000000..92e3802
--- /dev/null
+++ b/android/TerminalApp/res/layout/tabitem_terminal.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--  Copyright 2025 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.
+ -->
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="200dp"
+    android:layout_height="48dp">
+
+  <TextView
+      android:id="@+id/tab_title"
+      android:layout_width="match_parent"
+      android:layout_height="match_parent"
+      android:layout_alignParentStart="true"
+      android:layout_alignParentTop="true"
+      android:layout_toStartOf="@id/tab_close_button"
+      android:gravity="center"
+      android:padding="8dp"
+      android:text="@string/tab_default_title"/>
+
+  <Button
+      style="?attr/materialIconButtonStyle"
+      android:id="@+id/tab_close_button"
+      android:layout_width="wrap_content"
+      android:layout_height="wrap_content"
+      android:layout_alignParentTop="true"
+      android:layout_alignParentEnd="true"
+      app:icon="@drawable/ic_close"
+      android:clickable="true"
+      android:focusable="true"/>
+
+</RelativeLayout>
\ No newline at end of file
diff --git a/android/TerminalApp/res/menu/main_menu.xml b/android/TerminalApp/res/menu/main_menu.xml
deleted file mode 100644
index dbb788c..0000000
--- a/android/TerminalApp/res/menu/main_menu.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?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.
- -->
-
-<menu xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto">
-    <item android:id="@+id/menu_item_settings"
-        android:icon="@drawable/ic_settings"
-        android:title="@string/action_settings"
-        app:showAsAction="always"/>
-    <item android:id="@+id/menu_item_display"
-        android:icon="@drawable/ic_display"
-        android:enabled="false"
-        android:title="@string/action_display"
-        app:showAsAction="always"/>
-</menu>
diff --git a/android/TerminalApp/res/values-af/strings.xml b/android/TerminalApp/res/values-af/strings.xml
index b395cf2..143d957 100644
--- a/android/TerminalApp/res/values-af/strings.xml
+++ b/android/TerminalApp/res/values-af/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> is geaktiveer"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Take wat lank neem"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Stelselgebeurtenisse"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-am/strings.xml b/android/TerminalApp/res/values-am/strings.xml
index 6b2610d..f6cec87 100644
--- a/android/TerminalApp/res/values-am/strings.xml
+++ b/android/TerminalApp/res/values-am/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> ነቅቷል"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"ረዥም የሚያሄዱ ተግባሮች"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"የሥርዓት ክስተቶች"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-ar/strings.xml b/android/TerminalApp/res/values-ar/strings.xml
index d67feb6..5fe49ec 100644
--- a/android/TerminalApp/res/values-ar/strings.xml
+++ b/android/TerminalApp/res/values-ar/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"تم تفعيل <xliff:g id="ID_1">VirGL</xliff:g>"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"المهام الطويلة المدى"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"أحداث النظام"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-as/strings.xml b/android/TerminalApp/res/values-as/strings.xml
index d9ba74c..81d87e3 100644
--- a/android/TerminalApp/res/values-as/strings.xml
+++ b/android/TerminalApp/res/values-as/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> সক্ষম কৰা আছে"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"দীঘলীয়া সময় জুৰি চলা কাৰ্য"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"ছিষ্টেমৰ ঘটনা"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-az/strings.xml b/android/TerminalApp/res/values-az/strings.xml
index b3f45fc..0ba4116 100644
--- a/android/TerminalApp/res/values-az/strings.xml
+++ b/android/TerminalApp/res/values-az/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> aktivləşdirilib"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Uzunmüddətli tapşırıqlar"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Sistem tədbirləri"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-b+sr+Latn/strings.xml b/android/TerminalApp/res/values-b+sr+Latn/strings.xml
index 490bc0a..fc0af18 100644
--- a/android/TerminalApp/res/values-b+sr+Latn/strings.xml
+++ b/android/TerminalApp/res/values-b+sr+Latn/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> je omogućen"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Dugotrajni zadaci"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Sistemski događaji"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-be/strings.xml b/android/TerminalApp/res/values-be/strings.xml
index 236ffc8..4ab472c 100644
--- a/android/TerminalApp/res/values-be/strings.xml
+++ b/android/TerminalApp/res/values-be/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"Модуль <xliff:g id="ID_1">VirGL</xliff:g> уключаны"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Працяглыя задачы"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Сістэмныя падзеі"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-bg/strings.xml b/android/TerminalApp/res/values-bg/strings.xml
index 40943a6..7009eb3 100644
--- a/android/TerminalApp/res/values-bg/strings.xml
+++ b/android/TerminalApp/res/values-bg/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> е активирано"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Продължителни задачи"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Системни събития"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-bn/strings.xml b/android/TerminalApp/res/values-bn/strings.xml
index a2d9095..08207cf 100644
--- a/android/TerminalApp/res/values-bn/strings.xml
+++ b/android/TerminalApp/res/values-bn/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> চালু করা আছে"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"দীর্ঘ সময় ধরে চালানো টাস্ক"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"সিস্টেম ইভেন্ট"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-bs/strings.xml b/android/TerminalApp/res/values-bs/strings.xml
index fd4a460..45be635 100644
--- a/android/TerminalApp/res/values-bs/strings.xml
+++ b/android/TerminalApp/res/values-bs/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"Omogućeno: <xliff:g id="ID_1">VirGL</xliff:g>"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Dugotrajni zadaci"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Događaji sistema"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-ca/strings.xml b/android/TerminalApp/res/values-ca/strings.xml
index 1180208..11f3ce5 100644
--- a/android/TerminalApp/res/values-ca/strings.xml
+++ b/android/TerminalApp/res/values-ca/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> està activat"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Tasques de llarga durada"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Esdeveniments del sistema"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-cs/strings.xml b/android/TerminalApp/res/values-cs/strings.xml
index a164818..fc3afaf 100644
--- a/android/TerminalApp/res/values-cs/strings.xml
+++ b/android/TerminalApp/res/values-cs/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"Modul <xliff:g id="ID_1">VirGL</xliff:g> je aktivován"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Dlouho spuštěné úlohy"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Systémové události"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-da/strings.xml b/android/TerminalApp/res/values-da/strings.xml
index f3a499b..a6c211e 100644
--- a/android/TerminalApp/res/values-da/strings.xml
+++ b/android/TerminalApp/res/values-da/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> er aktiveret"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Længerevarende opgaver"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Systemhændelser"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-de/strings.xml b/android/TerminalApp/res/values-de/strings.xml
index 107f275..3123008 100644
--- a/android/TerminalApp/res/values-de/strings.xml
+++ b/android/TerminalApp/res/values-de/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> ist aktiviert"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Aufgaben mit langer Ausführungszeit"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Systemereignisse"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-el/strings.xml b/android/TerminalApp/res/values-el/strings.xml
index bcb7256..0cc1ad3 100644
--- a/android/TerminalApp/res/values-el/strings.xml
+++ b/android/TerminalApp/res/values-el/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"Το <xliff:g id="ID_1">VirGL</xliff:g> είναι ενεργοποιημένο"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Εργασίες μεγάλης διάρκειας"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Συμβάντα συστήματος"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-en-rAU/strings.xml b/android/TerminalApp/res/values-en-rAU/strings.xml
index 0403b74..3d9e5a8 100644
--- a/android/TerminalApp/res/values-en-rAU/strings.xml
+++ b/android/TerminalApp/res/values-en-rAU/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> is enabled"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Long-running tasks"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"System events"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-en-rCA/strings.xml b/android/TerminalApp/res/values-en-rCA/strings.xml
index 5842cb2..9ac492a 100644
--- a/android/TerminalApp/res/values-en-rCA/strings.xml
+++ b/android/TerminalApp/res/values-en-rCA/strings.xml
@@ -90,4 +90,5 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> is enabled"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Long running tasks"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"System events"</string>
+    <string name="tab_default_title" msgid="2300417689389397930">"Tab"</string>
 </resources>
diff --git a/android/TerminalApp/res/values-en-rGB/strings.xml b/android/TerminalApp/res/values-en-rGB/strings.xml
index 0403b74..3d9e5a8 100644
--- a/android/TerminalApp/res/values-en-rGB/strings.xml
+++ b/android/TerminalApp/res/values-en-rGB/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> is enabled"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Long-running tasks"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"System events"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-en-rIN/strings.xml b/android/TerminalApp/res/values-en-rIN/strings.xml
index 0403b74..3d9e5a8 100644
--- a/android/TerminalApp/res/values-en-rIN/strings.xml
+++ b/android/TerminalApp/res/values-en-rIN/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> is enabled"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Long-running tasks"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"System events"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-es-rUS/strings.xml b/android/TerminalApp/res/values-es-rUS/strings.xml
index e25e5c5..4764e78 100644
--- a/android/TerminalApp/res/values-es-rUS/strings.xml
+++ b/android/TerminalApp/res/values-es-rUS/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"Se habilitó <xliff:g id="ID_1">VirGL</xliff:g>"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Tareas extensas"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Eventos del sistema"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-es/strings.xml b/android/TerminalApp/res/values-es/strings.xml
index 5a9a3c6..2569f43 100644
--- a/android/TerminalApp/res/values-es/strings.xml
+++ b/android/TerminalApp/res/values-es/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> se ha habilitado"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Tareas de larga duración"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Eventos del sistema"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-et/strings.xml b/android/TerminalApp/res/values-et/strings.xml
index 30916ca..a8a6d72 100644
--- a/android/TerminalApp/res/values-et/strings.xml
+++ b/android/TerminalApp/res/values-et/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> on lubatud"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Pikalt kestvad ülesanded"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Süsteemisündmused"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-eu/strings.xml b/android/TerminalApp/res/values-eu/strings.xml
index 19284a2..c84cdaf 100644
--- a/android/TerminalApp/res/values-eu/strings.xml
+++ b/android/TerminalApp/res/values-eu/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> gaituta dago"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Luze exekutatzen diren zereginak"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Sistemako gertaerak"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-fa/strings.xml b/android/TerminalApp/res/values-fa/strings.xml
index d4ebb2b..6b98dd4 100644
--- a/android/TerminalApp/res/values-fa/strings.xml
+++ b/android/TerminalApp/res/values-fa/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"‫<xliff:g id="ID_1">VirGL</xliff:g> فعال شد"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"تکالیف بلندمدت"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"رویدادهای سیستم"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-fi/strings.xml b/android/TerminalApp/res/values-fi/strings.xml
index 526ae93..9c62084 100644
--- a/android/TerminalApp/res/values-fi/strings.xml
+++ b/android/TerminalApp/res/values-fi/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> on käytössä"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Pitkäkestoiset tehtävät"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Järjestelmätapahtumat"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-fr-rCA/strings.xml b/android/TerminalApp/res/values-fr-rCA/strings.xml
index 47e1d41..affea77 100644
--- a/android/TerminalApp/res/values-fr-rCA/strings.xml
+++ b/android/TerminalApp/res/values-fr-rCA/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> est activé"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Tâches de longue durée"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Événements système"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-fr/strings.xml b/android/TerminalApp/res/values-fr/strings.xml
index 83a2ce4..65cb9e3 100644
--- a/android/TerminalApp/res/values-fr/strings.xml
+++ b/android/TerminalApp/res/values-fr/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> est activé"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Tâches de longue durée"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Événements système"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-gl/strings.xml b/android/TerminalApp/res/values-gl/strings.xml
index 61b71ae..4af29a7 100644
--- a/android/TerminalApp/res/values-gl/strings.xml
+++ b/android/TerminalApp/res/values-gl/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"Activouse <xliff:g id="ID_1">VirGL</xliff:g>"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Tarefas de longa duración"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Eventos do sistema"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-gu/strings.xml b/android/TerminalApp/res/values-gu/strings.xml
index 9136302..bb0240e 100644
--- a/android/TerminalApp/res/values-gu/strings.xml
+++ b/android/TerminalApp/res/values-gu/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> ચાલુ કરેલું છે"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"લાંબો સમય ચાલનારા કાર્યો"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"સિસ્ટમ ઇવેન્ટ"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-hi/strings.xml b/android/TerminalApp/res/values-hi/strings.xml
index bd5756b..3b106bd 100644
--- a/android/TerminalApp/res/values-hi/strings.xml
+++ b/android/TerminalApp/res/values-hi/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> चालू है"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"लंबे समय तक चलने वाले टास्क"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"सिस्टम इवेंट"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-hr/strings.xml b/android/TerminalApp/res/values-hr/strings.xml
index 27e51e3..93f321d 100644
--- a/android/TerminalApp/res/values-hr/strings.xml
+++ b/android/TerminalApp/res/values-hr/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"Omogućeno je: <xliff:g id="ID_1">VirGL</xliff:g>"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Dugotrajni zadaci"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Događaji sustava"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-hu/strings.xml b/android/TerminalApp/res/values-hu/strings.xml
index 046081e..d04b71e 100644
--- a/android/TerminalApp/res/values-hu/strings.xml
+++ b/android/TerminalApp/res/values-hu/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"A(z) <xliff:g id="ID_1">VirGL</xliff:g> engedélyezve van"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Hosszan futó feladatok"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Rendszeresemények"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-hy/strings.xml b/android/TerminalApp/res/values-hy/strings.xml
index 6026fae..670d778 100644
--- a/android/TerminalApp/res/values-hy/strings.xml
+++ b/android/TerminalApp/res/values-hy/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g>-ը միացված է"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Երկար աշխատող առաջադրանքներ"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Համակարգի իրադարձություններ"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-in/strings.xml b/android/TerminalApp/res/values-in/strings.xml
index b114246..4485173 100644
--- a/android/TerminalApp/res/values-in/strings.xml
+++ b/android/TerminalApp/res/values-in/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> diaktifkan"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Tugas yang berjalan lama"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Peristiwa sistem"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-is/strings.xml b/android/TerminalApp/res/values-is/strings.xml
index 9bb0df4..949b5cd 100644
--- a/android/TerminalApp/res/values-is/strings.xml
+++ b/android/TerminalApp/res/values-is/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"Kveikt er á <xliff:g id="ID_1">VirGL</xliff:g>"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Langvarandi verkefni"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Kerfistilvik"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-it/strings.xml b/android/TerminalApp/res/values-it/strings.xml
index a8848ed..870cf60 100644
--- a/android/TerminalApp/res/values-it/strings.xml
+++ b/android/TerminalApp/res/values-it/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> è abilitata"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Attività di lunga durata"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Eventi di sistema"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-iw/strings.xml b/android/TerminalApp/res/values-iw/strings.xml
index 6156a1c..1a57334 100644
--- a/android/TerminalApp/res/values-iw/strings.xml
+++ b/android/TerminalApp/res/values-iw/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"‫<xliff:g id="ID_1">VirGL</xliff:g> מופעל"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"משימות ממושכות"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"אירועי מערכת"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-ja/strings.xml b/android/TerminalApp/res/values-ja/strings.xml
index d28c957..5117e5a 100644
--- a/android/TerminalApp/res/values-ja/strings.xml
+++ b/android/TerminalApp/res/values-ja/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g>は有効です"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"長時間実行タスク"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"システム イベント"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-ka/strings.xml b/android/TerminalApp/res/values-ka/strings.xml
index 5eb5bbf..3c33a95 100644
--- a/android/TerminalApp/res/values-ka/strings.xml
+++ b/android/TerminalApp/res/values-ka/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> ჩართულია"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"ხანგრძლივად გაშვებული ამოცანები"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"სისტემური მოვლენები"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-kk/strings.xml b/android/TerminalApp/res/values-kk/strings.xml
index c40ba60..7c51a60 100644
--- a/android/TerminalApp/res/values-kk/strings.xml
+++ b/android/TerminalApp/res/values-kk/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> қосылды."</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Ұзақ орындалатын тапсырмалар"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Жүйе оқиғалары"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-km/strings.xml b/android/TerminalApp/res/values-km/strings.xml
index b5b3ffa..feacc58 100644
--- a/android/TerminalApp/res/values-km/strings.xml
+++ b/android/TerminalApp/res/values-km/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> ត្រូវបានបើក"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"កិច្ចការដែលដំណើរការរយៈពេលយូរ"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"ព្រឹត្តិការណ៍ប្រព័ន្ធ"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-kn/strings.xml b/android/TerminalApp/res/values-kn/strings.xml
index 46b2d24..17b9ba4 100644
--- a/android/TerminalApp/res/values-kn/strings.xml
+++ b/android/TerminalApp/res/values-kn/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"ದೀರ್ಘಾವಧಿಯ ಕಾರ್ಯಗಳು"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"ಸಿಸ್ಟಮ್ ಈವೆಂಟ್‌ಗಳು"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-ko/strings.xml b/android/TerminalApp/res/values-ko/strings.xml
index ab523e2..49d015a 100644
--- a/android/TerminalApp/res/values-ko/strings.xml
+++ b/android/TerminalApp/res/values-ko/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g>이(가) 사용 설정되었습니다."</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"장기 실행 태스크"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"시스템 이벤트"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-ky/strings.xml b/android/TerminalApp/res/values-ky/strings.xml
index 3e4a3e4..b66eebd 100644
--- a/android/TerminalApp/res/values-ky/strings.xml
+++ b/android/TerminalApp/res/values-ky/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> иштетилди"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Узак тапшырмалар"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Тутумдук иш-чаралар"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-lo/strings.xml b/android/TerminalApp/res/values-lo/strings.xml
index 440d757..9d0ba5a 100644
--- a/android/TerminalApp/res/values-lo/strings.xml
+++ b/android/TerminalApp/res/values-lo/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"ເປີດການນຳໃຊ້ <xliff:g id="ID_1">VirGL</xliff:g> ແລ້ວ"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"ວຽກທີ່ດຳເນີນເປັນເວລາດົນ"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"ກິດຈະກຳລະບົບ"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-lt/strings.xml b/android/TerminalApp/res/values-lt/strings.xml
index 4abcd2d..f90c677 100644
--- a/android/TerminalApp/res/values-lt/strings.xml
+++ b/android/TerminalApp/res/values-lt/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"„<xliff:g id="ID_1">VirGL</xliff:g>“ įgalinta"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Ilgai vykdomos užduotys"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Sistemos įvykiai"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-lv/strings.xml b/android/TerminalApp/res/values-lv/strings.xml
index 0d017d1..326e443 100644
--- a/android/TerminalApp/res/values-lv/strings.xml
+++ b/android/TerminalApp/res/values-lv/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> ir iespējots"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Ilgstoši uzdevumi"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Sistēmas notikumi"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-mk/strings.xml b/android/TerminalApp/res/values-mk/strings.xml
index 3db6614..8660c50 100644
--- a/android/TerminalApp/res/values-mk/strings.xml
+++ b/android/TerminalApp/res/values-mk/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"Овозможено: <xliff:g id="ID_1">VirGL</xliff:g>"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Задачи што се извршуваат долго"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Системски настани"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-ml/strings.xml b/android/TerminalApp/res/values-ml/strings.xml
index 1117979..c0c3861 100644
--- a/android/TerminalApp/res/values-ml/strings.xml
+++ b/android/TerminalApp/res/values-ml/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> പ്രവർത്തനക്ഷമമാക്കി"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"ദീർഘസമയം റൺ ചെയ്യുന്ന ടാസ്ക്കുകൾ"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"സിസ്റ്റം ഇവന്റുകൾ"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-mn/strings.xml b/android/TerminalApp/res/values-mn/strings.xml
index 4c8305b..4b1110c 100644
--- a/android/TerminalApp/res/values-mn/strings.xml
+++ b/android/TerminalApp/res/values-mn/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> идэвхэжсэн"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Удаан ажиллаж буй ажил"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Системийн үйл явдал"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-mr/strings.xml b/android/TerminalApp/res/values-mr/strings.xml
index eff919f..147baeb 100644
--- a/android/TerminalApp/res/values-mr/strings.xml
+++ b/android/TerminalApp/res/values-mr/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> सुरू केले आहे"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"दीर्घवेळ रन होणाऱ्या टास्क"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"सिस्टीम इव्‍हेंट"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-ms/strings.xml b/android/TerminalApp/res/values-ms/strings.xml
index fb88ff1..215919e 100644
--- a/android/TerminalApp/res/values-ms/strings.xml
+++ b/android/TerminalApp/res/values-ms/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> didayakan"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Tugasan yang memakan masa yang lama"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Peristiwa sistem"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-my/strings.xml b/android/TerminalApp/res/values-my/strings.xml
index 08ca00c..0124ecf 100644
--- a/android/TerminalApp/res/values-my/strings.xml
+++ b/android/TerminalApp/res/values-my/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> ဖွင့်ထားသည်"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"အချိန်ကြာသော လုပ်ဆောင်စရာများ"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"စနစ်ဖြစ်စဉ်များ"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-nb/strings.xml b/android/TerminalApp/res/values-nb/strings.xml
index 2016678..327de8c 100644
--- a/android/TerminalApp/res/values-nb/strings.xml
+++ b/android/TerminalApp/res/values-nb/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> er aktivert"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Langvarige oppgaver"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Systemhendelser"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-ne/strings.xml b/android/TerminalApp/res/values-ne/strings.xml
index 9e3b9e6..dc84699 100644
--- a/android/TerminalApp/res/values-ne/strings.xml
+++ b/android/TerminalApp/res/values-ne/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> अन गरिएको छ"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"लामो समयसम्म चलिरहने कार्यहरू"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"सिस्टमसम्बन्धी गतिविधिहरू"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-nl/strings.xml b/android/TerminalApp/res/values-nl/strings.xml
index eaea8a2..6ce1949 100644
--- a/android/TerminalApp/res/values-nl/strings.xml
+++ b/android/TerminalApp/res/values-nl/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> staat aan"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Langlopende taken"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Systeemgebeurtenissen"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-or/strings.xml b/android/TerminalApp/res/values-or/strings.xml
index 5383645..6cf8617 100644
--- a/android/TerminalApp/res/values-or/strings.xml
+++ b/android/TerminalApp/res/values-or/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g>କୁ ସକ୍ଷମ କରାଯାଇଛି"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"ଅଧିକ ସମୟ ଚାଲୁଥିବା ଟାସ୍କ"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"ସିଷ୍ଟମ ଇଭେଣ୍ଟ"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-pa/strings.xml b/android/TerminalApp/res/values-pa/strings.xml
index 0ff2a0d..ced3359 100644
--- a/android/TerminalApp/res/values-pa/strings.xml
+++ b/android/TerminalApp/res/values-pa/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> ਚਾਲੂ ਹੈ"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"ਲੰਬੇ ਸਮੇਂ ਤੱਕ ਚੱਲਣ ਵਾਲੇ ਕਾਰਜ"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"ਸਿਸਟਮ ਇਵੈਂਟ"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-pl/strings.xml b/android/TerminalApp/res/values-pl/strings.xml
index fe29d91..64c94c7 100644
--- a/android/TerminalApp/res/values-pl/strings.xml
+++ b/android/TerminalApp/res/values-pl/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"Układ <xliff:g id="ID_1">VirGL</xliff:g> jest włączony"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Długotrwałe zadania"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Zdarzenia systemowe"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-pt-rPT/strings.xml b/android/TerminalApp/res/values-pt-rPT/strings.xml
index 8dece3d..7d6c007 100644
--- a/android/TerminalApp/res/values-pt-rPT/strings.xml
+++ b/android/TerminalApp/res/values-pt-rPT/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"A <xliff:g id="ID_1">VirGL</xliff:g> está ativada"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Tarefas de longa duração"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Eventos do sistema"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-pt/strings.xml b/android/TerminalApp/res/values-pt/strings.xml
index ec0df78..da8d436 100644
--- a/android/TerminalApp/res/values-pt/strings.xml
+++ b/android/TerminalApp/res/values-pt/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"O <xliff:g id="ID_1">VirGL</xliff:g> está ativado"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Tarefas de longa duração"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Eventos do sistema"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-ro/strings.xml b/android/TerminalApp/res/values-ro/strings.xml
index fec9562..a57a5e5 100644
--- a/android/TerminalApp/res/values-ro/strings.xml
+++ b/android/TerminalApp/res/values-ro/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> este activat"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Activități de durată"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Evenimente de sistem"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-ru/strings.xml b/android/TerminalApp/res/values-ru/strings.xml
index eda9850..b371f03 100644
--- a/android/TerminalApp/res/values-ru/strings.xml
+++ b/android/TerminalApp/res/values-ru/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g>: включено."</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Длительные задачи"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Системные события"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-si/strings.xml b/android/TerminalApp/res/values-si/strings.xml
index 4ad9a5f..cf735c1 100644
--- a/android/TerminalApp/res/values-si/strings.xml
+++ b/android/TerminalApp/res/values-si/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> සබලයි"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"දිගු කාලයක් ධාවනය වන කාර්යයන්"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"පද්ධති සිදුවීම්"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-sk/strings.xml b/android/TerminalApp/res/values-sk/strings.xml
index a700b93..e8eb6e7 100644
--- a/android/TerminalApp/res/values-sk/strings.xml
+++ b/android/TerminalApp/res/values-sk/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"Procesor <xliff:g id="ID_1">VirGL</xliff:g> je aktivovaný"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Dlho spustené úlohy"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Systémové udalosti"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-sl/strings.xml b/android/TerminalApp/res/values-sl/strings.xml
index f6580aa..5b794a4 100644
--- a/android/TerminalApp/res/values-sl/strings.xml
+++ b/android/TerminalApp/res/values-sl/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> je omogočen"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Dolgotrajna opravila"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Sistemski dogodki"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-sq/strings.xml b/android/TerminalApp/res/values-sq/strings.xml
index 6edfd85..2dd85ae 100644
--- a/android/TerminalApp/res/values-sq/strings.xml
+++ b/android/TerminalApp/res/values-sq/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> është aktivizuar"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Detyrat afatgjata"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Ngjarjet e sistemit"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-sr/strings.xml b/android/TerminalApp/res/values-sr/strings.xml
index eb9a58b..40ae1b5 100644
--- a/android/TerminalApp/res/values-sr/strings.xml
+++ b/android/TerminalApp/res/values-sr/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> је омогућен"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Дуготрајни задаци"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Системски догађаји"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-sv/strings.xml b/android/TerminalApp/res/values-sv/strings.xml
index 6ca94c3..b248b37 100644
--- a/android/TerminalApp/res/values-sv/strings.xml
+++ b/android/TerminalApp/res/values-sv/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> har aktiverats"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Långvariga uppgifter"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Systemhändelser"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-sw/strings.xml b/android/TerminalApp/res/values-sw/strings.xml
index f0da173..34d044e 100644
--- a/android/TerminalApp/res/values-sw/strings.xml
+++ b/android/TerminalApp/res/values-sw/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> imewashwa"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Majukumu yanayodumu zaidi"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Matukio ya mfumo"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-ta/strings.xml b/android/TerminalApp/res/values-ta/strings.xml
index 4942b27..96e25fb 100644
--- a/android/TerminalApp/res/values-ta/strings.xml
+++ b/android/TerminalApp/res/values-ta/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> இயக்கப்பட்டது"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"நீண்ட நேரம் இயங்கும் பணிகள்"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"சிஸ்டம் நிகழ்வுகள்"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-te/strings.xml b/android/TerminalApp/res/values-te/strings.xml
index bce8c4d..b6d98ea 100644
--- a/android/TerminalApp/res/values-te/strings.xml
+++ b/android/TerminalApp/res/values-te/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> ప్రారంభించబడింది"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"ఎక్కువసేపు రన్ అయ్యే టాస్క్‌లు"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"సిస్టమ్ ఈవెంట్‌లు"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-th/strings.xml b/android/TerminalApp/res/values-th/strings.xml
index 9fb2a92..0fecd1a 100644
--- a/android/TerminalApp/res/values-th/strings.xml
+++ b/android/TerminalApp/res/values-th/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"เปิดใช้งาน <xliff:g id="ID_1">VirGL</xliff:g> แล้ว"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"งานที่ใช้เวลานาน"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"เหตุการณ์ของระบบ"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-tl/strings.xml b/android/TerminalApp/res/values-tl/strings.xml
index 5cdb3e7..71de5d4 100644
--- a/android/TerminalApp/res/values-tl/strings.xml
+++ b/android/TerminalApp/res/values-tl/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"Na-enable ang <xliff:g id="ID_1">VirGL</xliff:g>"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Mga gawaing matagal gawin"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Mga event ng system"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-tr/strings.xml b/android/TerminalApp/res/values-tr/strings.xml
index 780826a..df679d4 100644
--- a/android/TerminalApp/res/values-tr/strings.xml
+++ b/android/TerminalApp/res/values-tr/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> etkinleştirildi"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Uzun süredir çalışan görevler"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Sistem etkinlikleri"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-uk/strings.xml b/android/TerminalApp/res/values-uk/strings.xml
index 55bdcf3..838545a 100644
--- a/android/TerminalApp/res/values-uk/strings.xml
+++ b/android/TerminalApp/res/values-uk/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> увімкнено"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Довготривалі завдання"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Події системи"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-ur/strings.xml b/android/TerminalApp/res/values-ur/strings.xml
index c1bf900..87f2cb2 100644
--- a/android/TerminalApp/res/values-ur/strings.xml
+++ b/android/TerminalApp/res/values-ur/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"‫<xliff:g id="ID_1">VirGL</xliff:g> فعال ہے"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"لمبے وقت تک چلنے والے ٹاسکس"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"سسٹم ایونٹس"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-uz/strings.xml b/android/TerminalApp/res/values-uz/strings.xml
index 8fecef9..f4bd27c 100644
--- a/android/TerminalApp/res/values-uz/strings.xml
+++ b/android/TerminalApp/res/values-uz/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> yoniq"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Uzoq davom etuvchi vazifalar"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Tizim tadbirlari"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-vi/strings.xml b/android/TerminalApp/res/values-vi/strings.xml
index 867d534..f3130e8 100644
--- a/android/TerminalApp/res/values-vi/strings.xml
+++ b/android/TerminalApp/res/values-vi/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> đã được bật"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Tác vụ chạy trong thời gian dài"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Sự kiện hệ thống"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-zh-rCN/strings.xml b/android/TerminalApp/res/values-zh-rCN/strings.xml
index 2c4d653..a42dd4c 100644
--- a/android/TerminalApp/res/values-zh-rCN/strings.xml
+++ b/android/TerminalApp/res/values-zh-rCN/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> 已启用"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"长时间运行的任务"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"系统事件"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-zh-rHK/strings.xml b/android/TerminalApp/res/values-zh-rHK/strings.xml
index 062dc2d..a320685 100644
--- a/android/TerminalApp/res/values-zh-rHK/strings.xml
+++ b/android/TerminalApp/res/values-zh-rHK/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"已啟用 <xliff:g id="ID_1">VirGL</xliff:g>"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"長時間執行的工作"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"系統活動"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-zh-rTW/strings.xml b/android/TerminalApp/res/values-zh-rTW/strings.xml
index 352784c..cd2c4b7 100644
--- a/android/TerminalApp/res/values-zh-rTW/strings.xml
+++ b/android/TerminalApp/res/values-zh-rTW/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> 已啟用"</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"長時間執行的工作"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"系統事件"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-zu/strings.xml b/android/TerminalApp/res/values-zu/strings.xml
index 641fea0..b4213c5 100644
--- a/android/TerminalApp/res/values-zu/strings.xml
+++ b/android/TerminalApp/res/values-zu/strings.xml
@@ -90,4 +90,6 @@
     <string name="virgl_enabled" msgid="5242525588039698086">"I-<xliff:g id="ID_1">VirGL</xliff:g> inikwe amandla."</string>
     <string name="notification_channel_long_running_name" msgid="7916541360369402952">"Imisebenzi esebenza isikhathi eside"</string>
     <string name="notification_channel_system_events_name" msgid="1004951444029742137">"Imicimbi yesistimu"</string>
+    <!-- no translation found for tab_default_title (2300417689389397930) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values/strings.xml b/android/TerminalApp/res/values/strings.xml
index 228700c..a6d461e 100644
--- a/android/TerminalApp/res/values/strings.xml
+++ b/android/TerminalApp/res/values/strings.xml
@@ -181,4 +181,7 @@
 
     <!-- This is the name of the notification channel for system events [CHAR LIMIT=none] -->
     <string name="notification_channel_system_events_name">System events</string>
+
+    <!-- Default title of a terminal tab [CHAR LIMIT=10] -->
+    <string name="tab_default_title">Tab</string>
 </resources>
diff --git a/android/virtmgr/src/aidl.rs b/android/virtmgr/src/aidl.rs
index b5cf643..1a263bd 100644
--- a/android/virtmgr/src/aidl.rs
+++ b/android/virtmgr/src/aidl.rs
@@ -707,6 +707,12 @@
             config
                 .disks
                 .iter()
+                .flat_map(|disk| disk.image.as_ref())
+                .try_for_each(|image| check_label_for_file(image, "disk image", calling_partition))
+                .or_service_specific_exception(-1)?;
+            config
+                .disks
+                .iter()
                 .flat_map(|disk| disk.partitions.iter())
                 .filter(|partition| {
                     if is_app_config {
@@ -1582,7 +1588,7 @@
     Ok(())
 }
 fn check_label_for_file(
-    file: &File,
+    file: &impl AsRawFd,
     name: &str,
     calling_partition: CallingPartition,
 ) -> Result<()> {
diff --git a/android/virtualizationservice/src/aidl.rs b/android/virtualizationservice/src/aidl.rs
index 0f16291..f4e64e3 100644
--- a/android/virtualizationservice/src/aidl.rs
+++ b/android/virtualizationservice/src/aidl.rs
@@ -412,8 +412,12 @@
     }
 
     fn isRemoteAttestationSupported(&self) -> binder::Result<bool> {
-        Ok(is_remote_provisioning_hal_declared()?
-            && remote_provisioning::is_remote_attestation_supported())
+        if is_remote_provisioning_hal_declared()? {
+            Ok(remote_provisioning::is_remote_attestation_supported())
+        } else {
+            warn!("AVF IRemotelyProvisionedComponent HAL is not declared");
+            Ok(false)
+        }
     }
 
     fn getAssignableDevices(&self) -> binder::Result<Vec<AssignableDevice>> {
diff --git a/build/debian/build.sh b/build/debian/build.sh
index 616dd00..63035ae 100755
--- a/build/debian/build.sh
+++ b/build/debian/build.sh
@@ -13,7 +13,7 @@
 	echo "Options:"
 	echo "-h         Print usage and this help message and exit."
 	echo "-a ARCH    Architecture of the image [default is host arch: $(uname -m)]"
-	echo "-k         Build and use our custom kernel [default is cloud kernel]"
+	echo "-g         Use Debian generic kernel [default is our custom kernel]"
 	echo "-r         Release mode build"
 	echo "-w         Save temp work directory [for debugging]"
 }
@@ -25,7 +25,7 @@
 }
 
 parse_options() {
-	while getopts "a:hkrw" option; do
+	while getopts "a:ghrw" option; do
 		case ${option} in
 			h)
 				show_help ; exit
@@ -33,8 +33,8 @@
 			a)
 				arch="$OPTARG"
 				;;
-			k)
-				use_custom_kernel=1
+			g)
+				use_generic_kernel=1
 				;;
 			r)
 				mode=release
@@ -122,7 +122,7 @@
 		)
 	fi
 
-	if [[ "$use_custom_kernel" -eq 1 ]]; then
+	if [[ "$use_generic_kernel" != 1 ]]; then
 		packages+=(
 			bc
 			bison
@@ -215,20 +215,20 @@
 }
 
 package_custom_kernel() {
-	if [[ "$use_custom_kernel" != 1 ]]; then
-		# NOTE: Install generic headers for the default Debian kernel.
+	if [[ "$use_generic_kernel" == 1 ]]; then
+		# NOTE: For bpfcc-tools, install generic headers for the generic kernel.
 		cat > "${config_space}/package_config/LAST" <<EOF
 PACKAGES install
 linux-headers-generic
 EOF
 		return
-	else
-		# NOTE: Prevent FAI from installing a default Debian kernel, by removing
-		#       linux-image meta package names from arch-specific class files.
-		sed -i "/linux-image.*-${debian_arch}/d" \
-		    "${config_space}/package_config/${debian_arch^^}"
 	fi
 
+	# NOTE: Prevent FAI from installing a default Debian kernel, by removing
+	#       linux-image meta package names from arch-specific class files.
+	sed -i "/linux-image.*-${debian_arch}/d" \
+	    "${config_space}/package_config/${debian_arch^^}"
+
 	local deb_base_url="https://deb.debian.org/debian"
 	local deb_security_base_url="https://security.debian.org/debian-security"
 
@@ -344,6 +344,11 @@
 	losetup -d "${loop}"
 
 	cp ${vm_config} vm_config.json
+	# TODO(b/363985291): remove this when ballooning is supported on generic kernel
+	if [[ "$use_generic_kernel" == 1 ]] && [[ "$arch" == "aarch64" ]]; then
+		sed -i 's/"auto_memory_balloon": true/"auto_memory_balloon": false/g' vm_config.json
+	fi
+
 	sed -i "s/{root_part_guid}/$(sfdisk --part-uuid $raw_disk_image $root_partition_num)/g" vm_config.json
 	if [[ "$arch" == "x86_64" ]]; then
 		sed -i "s/{bios_part_guid}/$(sfdisk --part-uuid $raw_disk_image $bios_partition_num)/g" vm_config.json
@@ -395,7 +400,7 @@
 arch="$(uname -m)"
 mode=debug
 save_workdir=0
-use_custom_kernel=0
+use_generic_kernel=0
 
 parse_options "$@"
 check_sudo
diff --git a/build/debian/build_in_container.sh b/build/debian/build_in_container.sh
index e3adcae..739d2dd 100755
--- a/build/debian/build_in_container.sh
+++ b/build/debian/build_in_container.sh
@@ -6,7 +6,7 @@
   echo "Options:"
   echo "-h         Print usage and this help message and exit."
   echo "-a ARCH    Architecture of the image [default is host arch: $(uname -m)]"
-  echo "-k         Build and use our custom kernel [default is cloud kernel]"
+  echo "-g         Use Debian generic kernel [default is our custom kernel]"
   echo "-r         Release mode build"
   echo "-s         Leave a shell open [default: only if the build fails]"
   echo "-w         Save temp work directory in the container [for debugging]"
@@ -18,17 +18,17 @@
 save_workdir_flag=
 shell_condition="||"
 
-while getopts "a:hkrsw" option; do
+while getopts "a:ghrsw" option; do
   case ${option} in
     a)
       arch="$OPTARG"
       ;;
+    g)
+      kernel_flag="-g"
+      ;;
     h)
       show_help ; exit
       ;;
-    k)
-      kernel_flag="-k"
-      ;;
     r)
       release_flag="-r"
       ;;
diff --git a/build/debian/fai_config/package_config/AVF b/build/debian/fai_config/package_config/AVF
index ec68434..3aa8ab0 100644
--- a/build/debian/fai_config/package_config/AVF
+++ b/build/debian/fai_config/package_config/AVF
@@ -13,3 +13,4 @@
 mesa-vulkan-drivers
 libvulkan1
 vulkan-tools
+pulseaudio
diff --git a/build/debian/kernel/config b/build/debian/kernel/config
index 1ba603c..58e783a 100644
--- a/build/debian/kernel/config
+++ b/build/debian/kernel/config
@@ -1 +1,4 @@
 CONFIG_DRM=m
+CONFIG_SND_VIRTIO=y
+CONFIG_SND=y
+CONFIG_SOUND=y
diff --git a/build/debian/kokoro/gcp_ubuntu_docker/aarch64/build.sh b/build/debian/kokoro/gcp_ubuntu_docker/aarch64/build.sh
index 7476fc3..d9d1e8f 100644
--- a/build/debian/kokoro/gcp_ubuntu_docker/aarch64/build.sh
+++ b/build/debian/kokoro/gcp_ubuntu_docker/aarch64/build.sh
@@ -5,7 +5,7 @@
 cd "${KOKORO_ARTIFACTS_DIR}/git/avf/build/debian/"
 sudo losetup -D
 grep vmx /proc/cpuinfo || true
-sudo ./build.sh -a aarch64 -k -r
+sudo ./build.sh -a aarch64 -r
 sudo mv images.tar.gz ${KOKORO_ARTIFACTS_DIR} || true
 mkdir -p ${KOKORO_ARTIFACTS_DIR}/logs
 sudo cp -r /var/log/fai/* ${KOKORO_ARTIFACTS_DIR}/logs || true
diff --git a/build/debian/kokoro/gcp_ubuntu_docker/x86_64/build.sh b/build/debian/kokoro/gcp_ubuntu_docker/x86_64/build.sh
index a935591..a22e194 100644
--- a/build/debian/kokoro/gcp_ubuntu_docker/x86_64/build.sh
+++ b/build/debian/kokoro/gcp_ubuntu_docker/x86_64/build.sh
@@ -5,7 +5,7 @@
 cd "${KOKORO_ARTIFACTS_DIR}/git/avf/build/debian/"
 sudo losetup -D
 grep vmx /proc/cpuinfo || true
-sudo ./build.sh -a x86_64 -k -r
+sudo ./build.sh -a x86_64 -r
 sudo mv images.tar.gz ${KOKORO_ARTIFACTS_DIR} || true
 mkdir -p ${KOKORO_ARTIFACTS_DIR}/logs
 sudo cp -r /var/log/fai/* ${KOKORO_ARTIFACTS_DIR}/logs || true
diff --git a/guest/trusty/security_vm/vm/Android.bp b/guest/trusty/security_vm/vm/Android.bp
index a348699..cc01d1c 100644
--- a/guest/trusty/security_vm/vm/Android.bp
+++ b/guest/trusty/security_vm/vm/Android.bp
@@ -34,6 +34,7 @@
     ],
     visibility: [
         "//packages/modules/Virtualization/guest/trusty/test_vm/vm",
+        "//vendor:__subpackages__",
     ],
 }
 
diff --git a/tests/testapk/Android.bp b/tests/testapk/Android.bp
index d9f74dc..cc0015d 100644
--- a/tests/testapk/Android.bp
+++ b/tests/testapk/Android.bp
@@ -28,6 +28,9 @@
     use_embedded_native_libs: true,
     // We only support 64-bit ABI, but CTS demands all APKs to be multi-ABI.
     compile_multilib: "both",
+    lint: {
+        error_checks: ["NewApi"],
+    },
 }
 
 java_defaults {