Merge "Implement secretkeeper HAL v2" into main
diff --git a/PREUPLOAD.cfg b/PREUPLOAD.cfg
index 45519d4..d47afc4 100644
--- a/PREUPLOAD.cfg
+++ b/PREUPLOAD.cfg
@@ -6,16 +6,19 @@
 jsonlint = true
 google_java_format = true
 pylint3 = true
+ktfmt = true
 rustfmt = true
 xmllint = true
 
 [Tool Paths]
 google-java-format = ${REPO_ROOT}/prebuilts/tools/common/google-java-format/google-java-format
 google-java-format-diff = ${REPO_ROOT}/prebuilts/tools/common/google-java-format/google-java-format-diff.py
+ktfmt = ${REPO_ROOT}/external/ktfmt/ktfmt.sh
 
 [Builtin Hooks Options]
 clang_format = --commit ${PREUPLOAD_COMMIT} --style file --extensions c,h,cc,cpp
 rustfmt = --config-path=rustfmt.toml
+ktfmt = --kotlinlang-style
 
 [Hook Scripts]
 aosp_hook = ${REPO_ROOT}/frameworks/base/tools/aosp/aosp_sha.sh ${PREUPLOAD_COMMIT} "."
diff --git a/android/TerminalApp/.gitignore b/android/TerminalApp/.gitignore
index e81da29..e69de29 100644
--- a/android/TerminalApp/.gitignore
+++ b/android/TerminalApp/.gitignore
@@ -1,2 +0,0 @@
-assets/*
-!assets/.gitkeep
diff --git a/android/TerminalApp/Android.bp b/android/TerminalApp/Android.bp
index 2711af0..4bb9703 100644
--- a/android/TerminalApp/Android.bp
+++ b/android/TerminalApp/Android.bp
@@ -8,8 +8,8 @@
         "java/**/*.java",
         "java/**/*.kt",
     ],
-    resource_dirs: ["res"],
     asset_dirs: ["assets"],
+    resource_dirs: ["res"],
     static_libs: [
         "androidx-constraintlayout_constraintlayout",
         "androidx.window_window",
diff --git a/android/TerminalApp/AndroidManifest.xml b/android/TerminalApp/AndroidManifest.xml
index dad07ee..7dab58d 100644
--- a/android/TerminalApp/AndroidManifest.xml
+++ b/android/TerminalApp/AndroidManifest.xml
@@ -32,7 +32,7 @@
     <application
         android:label="@string/app_name"
         android:icon="@mipmap/ic_launcher"
-        android:theme="@style/Theme.Material3.DayNight.NoActionBar"
+        android:theme="@style/VmTerminalAppTheme"
         android:usesCleartextTraffic="true"
         android:supportsRtl="true"
         android:enabled="false">
@@ -46,10 +46,14 @@
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
         </activity>
-        <activity android:name=".SettingsActivity" />
-        <activity android:name=".SettingsDiskResizeActivity" />
-        <activity android:name=".SettingsPortForwardingActivity" />
-        <activity android:name=".SettingsRecoveryActivity" />
+        <activity android:name=".SettingsActivity"
+            android:label="@string/action_settings" />
+        <activity android:name=".SettingsDiskResizeActivity"
+            android:label="@string/settings_disk_resize_title" />
+        <activity android:name=".SettingsPortForwardingActivity"
+            android:label="@string/settings_port_forwarding_title" />
+        <activity android:name=".SettingsRecoveryActivity"
+            android:label="@string/settings_recovery_title" />
         <activity android:name=".ErrorActivity" />
         <property
             android:name="android.window.PROPERTY_ACTIVITY_EMBEDDING_SPLITS_ENABLED"
@@ -83,10 +87,6 @@
             <property
                 android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE"
                 android:value="Run VM instances" />
-            <intent-filter>
-                <action android:name="android.virtualization.START_VM_LAUNCHER_SERVICE" />
-                <category android:name="android.intent.category.DEFAULT" />
-            </intent-filter>
         </service>
     </application>
 
diff --git a/android/TerminalApp/assets/.gitkeep b/android/TerminalApp/assets/.gitkeep
deleted file mode 100644
index e69de29..0000000
--- a/android/TerminalApp/assets/.gitkeep
+++ /dev/null
diff --git a/android/TerminalApp/assets/client.p12 b/android/TerminalApp/assets/client.p12
deleted file mode 100644
index f1f5820..0000000
--- a/android/TerminalApp/assets/client.p12
+++ /dev/null
Binary files differ
diff --git a/android/TerminalApp/assets/js/ctrl_key_handler.js b/android/TerminalApp/assets/js/ctrl_key_handler.js
new file mode 100644
index 0000000..de901fc
--- /dev/null
+++ b/android/TerminalApp/assets/js/ctrl_key_handler.js
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 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.
+ */
+
+(function() {
+// keyCode 229 means composing text, so get the last character in
+// e.target.value.
+// keycode 64(@)-95(_) is mapped to a ctrl code
+// keycode 97(A)-122(Z) is converted to a small letter, and mapped to ctrl code
+window.term.attachCustomKeyEventHandler((e) => {
+  if (window.ctrl) {
+    keyCode = e.keyCode;
+    if (keyCode === 229) {
+      keyCode = e.target.value.charAt(e.target.selectionStart - 1).charCodeAt();
+    }
+    if (64 <= keyCode && keyCode <= 95) {
+      input = String.fromCharCode(keyCode - 64);
+    } else if (97 <= keyCode && keyCode <= 122) {
+      input = String.fromCharCode(keyCode - 96);
+    } else {
+      return true;
+    }
+    if (e.type === 'keyup') {
+      window.term.input(input);
+      e.target.value = e.target.value.slice(0, -1);
+      window.ctrl = false;
+    }
+    return false;
+  } else {
+    return true;
+  }
+});
+})();
\ No newline at end of file
diff --git a/android/TerminalApp/assets/js/enable_ctrl_key.js b/android/TerminalApp/assets/js/enable_ctrl_key.js
new file mode 100644
index 0000000..4aedcfe
--- /dev/null
+++ b/android/TerminalApp/assets/js/enable_ctrl_key.js
@@ -0,0 +1,19 @@
+/*
+ * Copyright (C) 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.
+ */
+
+(function() {
+window.ctrl = true;
+})();
\ No newline at end of file
diff --git a/android/TerminalApp/assets/js/touch_to_mouse_handler.js b/android/TerminalApp/assets/js/touch_to_mouse_handler.js
new file mode 100644
index 0000000..fce03d6
--- /dev/null
+++ b/android/TerminalApp/assets/js/touch_to_mouse_handler.js
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 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.
+ */
+
+(function() {
+// TODO(b/375326606): consider contribution on
+// upstream(https://github.com/xtermjs/xterm.js/issues/3727)
+let convertTouchToMouse = false;
+function touchHandler(event) {
+  const contextmenuByTouch =
+      event.type === 'contextmenu' && event.pointerType === 'touch';
+  // Only proceed for long touches (contextmenu) or when converting touch to
+  // mouse
+  if (!contextmenuByTouch && !convertTouchToMouse) {
+    return;
+  }
+
+  const touch = event.changedTouches ? event.changedTouches[0] : event;
+
+  let type;
+  switch (event.type) {
+    case 'contextmenu':
+      convertTouchToMouse = true;
+      type = 'mousedown';
+      break;
+    case 'touchmove':
+      type = 'mousemove';
+      break;
+    case 'touchend':
+      convertTouchToMouse = false;
+      type = 'mouseup';
+      break;
+    default:
+      convertTouchToMouse = false;
+      return;
+  }
+
+  const simulatedEvent = new MouseEvent(type, {
+    bubbles: true,
+    cancelable: true,
+    view: window,
+    detail: 1,
+    screenX: touch.screenX,
+    screenY: touch.screenY,
+    clientX: touch.clientX,
+    clientY: touch.clientY,
+    button: 0,  // left click
+  });
+
+  touch.target.dispatchEvent(simulatedEvent);
+
+  // Prevent default behavior for touch events (except contextmenu)
+  if (event.type !== 'contextmenu') {
+    event.preventDefault();
+    event.stopPropagation();
+  }
+}
+const eventOptions = {
+  capture: true,
+  passive: false
+};
+document.addEventListener('touchstart', touchHandler, eventOptions);
+document.addEventListener('touchmove', touchHandler, eventOptions);
+document.addEventListener('touchend', touchHandler, eventOptions);
+document.addEventListener('touchcancel', touchHandler, eventOptions);
+document.addEventListener('contextmenu', touchHandler, eventOptions);
+})();
\ No newline at end of file
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/BaseActivity.java b/android/TerminalApp/java/com/android/virtualization/terminal/BaseActivity.java
index 66552d5..d6521be 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/BaseActivity.java
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/BaseActivity.java
@@ -17,7 +17,10 @@
 package com.android.virtualization.terminal;
 
 import android.Manifest;
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
 import android.content.pm.PackageManager;
+import android.os.Bundle;
 
 import androidx.appcompat.app.AppCompatActivity;
 
@@ -25,6 +28,20 @@
     private static final int POST_NOTIFICATIONS_PERMISSION_REQUEST_CODE = 101;
 
     @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        NotificationManager notificationManager = getSystemService(NotificationManager.class);
+        if (notificationManager.getNotificationChannel(this.getPackageName()) == null) {
+            NotificationChannel channel =
+                    new NotificationChannel(
+                            this.getPackageName(),
+                            getString(R.string.app_name),
+                            NotificationManager.IMPORTANCE_DEFAULT);
+            notificationManager.createNotificationChannel(channel);
+        }
+    }
+
+    @Override
     public void onResume() {
         super.onResume();
 
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/CertificateUtils.java b/android/TerminalApp/java/com/android/virtualization/terminal/CertificateUtils.java
index 01d2afa..fa5c382 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/CertificateUtils.java
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/CertificateUtils.java
@@ -16,6 +16,8 @@
 
 package com.android.virtualization.terminal;
 
+import static com.android.virtualization.terminal.MainActivity.TAG;
+
 import android.content.Context;
 import android.security.keystore.KeyGenParameterSpec;
 import android.security.keystore.KeyProperties;
@@ -37,8 +39,6 @@
 import java.security.cert.X509Certificate;
 
 public class CertificateUtils {
-    private static final String TAG = "CertificateUtils";
-
     private static final String ALIAS = "ttyd";
 
     public static KeyStore.PrivateKeyEntry createOrGetKey() {
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/ConfigJson.java b/android/TerminalApp/java/com/android/virtualization/terminal/ConfigJson.java
index e1342e9..bd1af49 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/ConfigJson.java
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/ConfigJson.java
@@ -16,6 +16,7 @@
 
 package com.android.virtualization.terminal;
 
+
 import android.content.Context;
 import android.content.pm.PackageManager.NameNotFoundException;
 import android.graphics.Rect;
@@ -35,9 +36,17 @@
 import com.google.gson.Gson;
 import com.google.gson.annotations.SerializedName;
 
+import java.io.BufferedReader;
 import java.io.FileReader;
+import java.io.IOException;
+import java.io.Reader;
+import java.nio.file.Files;
+import java.nio.file.Path;
 import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 /** This class and its inner classes model vm_config.json. */
 class ConfigJson {
@@ -69,14 +78,40 @@
     private GpuJson gpu;
 
     /** Parses JSON file at jsonPath */
-    static ConfigJson from(String jsonPath) {
-        try (FileReader r = new FileReader(jsonPath)) {
-            return new Gson().fromJson(r, ConfigJson.class);
+    static ConfigJson from(Context context, Path jsonPath) {
+        try (FileReader fileReader = new FileReader(jsonPath.toFile())) {
+            String content = replaceKeywords(fileReader, context);
+            return new Gson().fromJson(content, ConfigJson.class);
         } catch (Exception e) {
             throw new RuntimeException("Failed to parse " + jsonPath, e);
         }
     }
 
+    private static String replaceKeywords(Reader r, Context context) throws IOException {
+        Map<String, String> rules = new HashMap<>();
+        rules.put("\\$PAYLOAD_DIR", InstalledImage.getDefault(context).getInstallDir().toString());
+        rules.put("\\$USER_ID", String.valueOf(context.getUserId()));
+        rules.put("\\$PACKAGE_NAME", context.getPackageName());
+        String appDataDir = context.getDataDir().toString();
+        // TODO: remove this hack
+        if (context.getUserId() == 0) {
+            appDataDir = "/data/data/" + context.getPackageName();
+        }
+        rules.put("\\$APP_DATA_DIR", appDataDir);
+
+        try (BufferedReader br = new BufferedReader(r)) {
+            return br.lines()
+                    .map(
+                            line -> {
+                                for (Map.Entry<String, String> rule : rules.entrySet()) {
+                                    line = line.replaceAll(rule.getKey(), rule.getValue());
+                                }
+                                return line;
+                            })
+                    .collect(Collectors.joining("\n"));
+        }
+    }
+
     private int getCpuTopology() {
         switch (cpu_topology) {
             case "one_cpu":
@@ -176,13 +211,26 @@
                                 GUEST_GID,
                                 0007,
                                 "android",
-                                "android");
+                                "android",
+                                false, /* app domain is set to false so that crosvm is spin up as child of virtmgr */
+                                "");
                     }
                     return null;
                 }
+                Path socketPath = context.getFilesDir().toPath().resolve("internal.virtiofs");
+                Files.deleteIfExists(socketPath);
                 return new SharedPath(
-                        sharedPath, terminalUid, terminalUid, 0, 0, 0007, "internal", "internal");
-            } catch (NameNotFoundException e) {
+                        sharedPath,
+                        terminalUid,
+                        terminalUid,
+                        0,
+                        0,
+                        0007,
+                        "internal",
+                        "internal",
+                        true, /* app domain is set to true so that crosvm is spin up from app context */
+                        socketPath.toString());
+            } catch (NameNotFoundException | IOException e) {
                 return null;
             }
         }
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/DebianServiceImpl.java b/android/TerminalApp/java/com/android/virtualization/terminal/DebianServiceImpl.java
index 0b65cf6..d167da3 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/DebianServiceImpl.java
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/DebianServiceImpl.java
@@ -16,8 +16,9 @@
 
 package com.android.virtualization.terminal;
 
+import static com.android.virtualization.terminal.MainActivity.TAG;
+
 import android.content.Context;
-import android.content.SharedPreferences;
 import android.util.Log;
 
 import androidx.annotation.Keep;
@@ -32,21 +33,13 @@
 
 import io.grpc.stub.StreamObserver;
 
-import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
 
 final class DebianServiceImpl extends DebianServiceGrpc.DebianServiceImplBase {
-    public static final String TAG = "DebianService";
-    private static final String PREFERENCE_FILE_KEY =
-            "com.android.virtualization.terminal.PREFERENCE_FILE_KEY";
-    private static final String PREFERENCE_FORWARDING_PORTS = "PREFERENCE_FORWARDING_PORTS";
-    private static final String PREFERENCE_FORWARDING_PORT_IS_ENABLED_PREFIX =
-            "PREFERENCE_FORWARDING_PORT_IS_ENABLED_";
-
     private final Context mContext;
-    private final SharedPreferences mSharedPref;
-    private SharedPreferences.OnSharedPreferenceChangeListener mPortForwardingListener;
+    private final PortsStateManager mPortsStateManager;
+    private PortsStateManager.Listener mPortsStateListener;
     private final DebianServiceCallback mCallback;
 
     static {
@@ -57,29 +50,15 @@
         super();
         mCallback = callback;
         mContext = context;
-        mSharedPref = mContext.getSharedPreferences(PREFERENCE_FILE_KEY, Context.MODE_PRIVATE);
+        mPortsStateManager = PortsStateManager.getInstance(mContext);
     }
 
     @Override
     public void reportVmActivePorts(
             ReportVmActivePortsRequest request,
             StreamObserver<ReportVmActivePortsResponse> responseObserver) {
-        Log.d(DebianServiceImpl.TAG, "reportVmActivePorts: " + request.toString());
-
-        SharedPreferences.Editor editor = mSharedPref.edit();
-        Set<String> ports = new HashSet<>();
-        for (int port : request.getPortsList()) {
-            ports.add(Integer.toString(port));
-            if (!mSharedPref.contains(
-                    PREFERENCE_FORWARDING_PORT_IS_ENABLED_PREFIX + Integer.toString(port))) {
-                editor.putBoolean(
-                        PREFERENCE_FORWARDING_PORT_IS_ENABLED_PREFIX + Integer.toString(port),
-                        false);
-            }
-        }
-        editor.putStringSet(PREFERENCE_FORWARDING_PORTS, ports);
-        editor.apply();
-
+        Log.d(TAG, "reportVmActivePorts: " + request.toString());
+        mPortsStateManager.updateActivePorts(new HashSet<>(request.getPortsList()));
         ReportVmActivePortsResponse reply =
                 ReportVmActivePortsResponse.newBuilder().setSuccess(true).build();
         responseObserver.onNext(reply);
@@ -89,7 +68,7 @@
     @Override
     public void reportVmIpAddr(
             IpAddr request, StreamObserver<ReportVmIpAddrResponse> responseObserver) {
-        Log.d(DebianServiceImpl.TAG, "reportVmIpAddr: " + request.toString());
+        Log.d(TAG, "reportVmIpAddr: " + request.toString());
         mCallback.onIpAddressAvailable(request.getAddr());
         ReportVmIpAddrResponse reply = ReportVmIpAddrResponse.newBuilder().setSuccess(true).build();
         responseObserver.onNext(reply);
@@ -99,19 +78,16 @@
     @Override
     public void openForwardingRequestQueue(
             QueueOpeningRequest request, StreamObserver<ForwardingRequestItem> responseObserver) {
-        Log.d(DebianServiceImpl.TAG, "OpenForwardingRequestQueue");
-        mPortForwardingListener =
-                new SharedPreferences.OnSharedPreferenceChangeListener() {
+        Log.d(TAG, "OpenForwardingRequestQueue");
+        mPortsStateListener =
+                new PortsStateManager.Listener() {
                     @Override
-                    public void onSharedPreferenceChanged(
-                            SharedPreferences sharedPreferences, String key) {
-                        if (key.startsWith(PREFERENCE_FORWARDING_PORT_IS_ENABLED_PREFIX)
-                                || key.equals(PREFERENCE_FORWARDING_PORTS)) {
-                            updateListeningPorts();
-                        }
+                    public void onPortsStateUpdated(
+                            Set<Integer> oldActivePorts, Set<Integer> newActivePorts) {
+                        updateListeningPorts();
                     }
                 };
-        mSharedPref.registerOnSharedPreferenceChangeListener(mPortForwardingListener);
+        mPortsStateManager.registerListener(mPortsStateListener);
         updateListeningPorts();
         runForwarderHost(request.getCid(), new ForwarderHostCallback(responseObserver));
         responseObserver.onCompleted();
@@ -140,26 +116,22 @@
     private static native void terminateForwarderHost();
 
     void killForwarderHost() {
-        Log.d(DebianServiceImpl.TAG, "Stopping port forwarding");
-        if (mPortForwardingListener != null) {
-            mSharedPref.unregisterOnSharedPreferenceChangeListener(mPortForwardingListener);
-            terminateForwarderHost();
+        Log.d(TAG, "Stopping port forwarding");
+        if (mPortsStateListener != null) {
+            mPortsStateManager.unregisterListener(mPortsStateListener);
+            mPortsStateListener = null;
         }
+        terminateForwarderHost();
     }
 
     private static native void updateListeningPorts(int[] ports);
 
     private void updateListeningPorts() {
+        Set<Integer> activePorts = mPortsStateManager.getActivePorts();
+        Set<Integer> enabledPorts = mPortsStateManager.getEnabledPorts();
         updateListeningPorts(
-                mSharedPref
-                        .getStringSet(PREFERENCE_FORWARDING_PORTS, Collections.emptySet())
-                        .stream()
-                        .filter(
-                                port ->
-                                        mSharedPref.getBoolean(
-                                                PREFERENCE_FORWARDING_PORT_IS_ENABLED_PREFIX + port,
-                                                false))
-                        .map(Integer::valueOf)
+                activePorts.stream()
+                        .filter(port -> enabledPorts.contains(port))
                         .mapToInt(Integer::intValue)
                         .toArray());
     }
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/ErrorActivity.java b/android/TerminalApp/java/com/android/virtualization/terminal/ErrorActivity.java
index ee1f1ad..44dcce5 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/ErrorActivity.java
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/ErrorActivity.java
@@ -16,6 +16,7 @@
 
 package com.android.virtualization.terminal;
 
+import android.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
 import android.view.View;
@@ -25,7 +26,14 @@
 import androidx.annotation.Nullable;
 
 public class ErrorActivity extends BaseActivity {
-    public static final String EXTRA_CAUSE = "cause";
+    private static final String EXTRA_CAUSE = "cause";
+
+    public static void start(Context context, Exception e) {
+        Intent intent = new Intent(context, ErrorActivity.class);
+        intent.putExtra(EXTRA_CAUSE, e);
+        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
+        context.startActivity(intent);
+    }
 
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/ImageArchive.java b/android/TerminalApp/java/com/android/virtualization/terminal/ImageArchive.java
new file mode 100644
index 0000000..7f14179
--- /dev/null
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/ImageArchive.java
@@ -0,0 +1,175 @@
+/*
+ * Copyright (C) 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.
+ */
+
+package com.android.virtualization.terminal;
+
+import static com.android.virtualization.terminal.MainActivity.TAG;
+
+import android.os.Build;
+import android.os.Environment;
+import android.util.Log;
+
+import org.apache.commons.compress.archivers.ArchiveEntry;
+import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
+import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream;
+
+import java.io.BufferedInputStream;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.StandardCopyOption;
+import java.util.Arrays;
+import java.util.function.Function;
+
+/**
+ * ImageArchive models the archive file (images.tar.gz) where VM payload files are in. This class
+ * provides methods for handling the archive file, most importantly installing it.
+ */
+class ImageArchive {
+    private static final String DIR_IN_SDCARD = "linux";
+    private static final String ARCHIVE_NAME = "images.tar.gz";
+    private static final String BUILD_TAG = "latest"; // TODO: use actual tag name
+    private static final String HOST_URL = "https://dl.google.com/android/ferrochrome/" + BUILD_TAG;
+
+    // Only one can be non-null
+    private final URL mUrl;
+    private final Path mPath;
+
+    private ImageArchive(URL url) {
+        mUrl = url;
+        mPath = null;
+    }
+
+    private ImageArchive(Path path) {
+        mUrl = null;
+        mPath = path;
+    }
+
+    public static Path getSdcardPathForTesting() {
+        return Environment.getExternalStoragePublicDirectory(DIR_IN_SDCARD).toPath();
+    }
+
+    /** Creates ImageArchive which is located in the sdcard. This archive is for testing only. */
+    public static ImageArchive fromSdCard() {
+        Path file = getSdcardPathForTesting().resolve(ARCHIVE_NAME);
+        return new ImageArchive(file);
+    }
+
+    /** Creates ImageArchive which is hosted in the Google server. This is the official archive. */
+    public static ImageArchive fromInternet() {
+        String arch = Arrays.asList(Build.SUPPORTED_ABIS).contains("x86_64") ? "x86_64" : "aarch64";
+        try {
+            URL url = new URL(HOST_URL + "/" + arch + "/" + ARCHIVE_NAME);
+            return new ImageArchive(url);
+        } catch (MalformedURLException e) {
+            // cannot happen
+            throw new RuntimeException(e);
+        }
+    }
+
+    /**
+     * Creates ImageArchive from either SdCard or Internet. SdCard is used only when the build is
+     * debuggable and the file actually exists.
+     */
+    public static ImageArchive getDefault() {
+        ImageArchive archive = fromSdCard();
+        if (Build.isDebuggable() && archive.exists()) {
+            return archive;
+        } else {
+            return fromInternet();
+        }
+    }
+
+    /** Tests if ImageArchive exists on the medium. */
+    public boolean exists() {
+        if (mPath != null) {
+            return Files.exists(mPath);
+        } else {
+            // TODO
+            return true;
+        }
+    }
+
+    /** Returns size of the archive in bytes */
+    public long getSize() throws IOException {
+        if (!exists()) {
+            throw new IllegalStateException("Cannot get size of non existing archive");
+        }
+        if (mPath != null) {
+            return Files.size(mPath);
+        } else {
+            HttpURLConnection conn = null;
+            try {
+                conn = (HttpURLConnection) mUrl.openConnection();
+                conn.setRequestMethod("HEAD");
+                conn.getInputStream();
+                return conn.getContentLength();
+            } finally {
+                if (conn != null) {
+                    conn.disconnect();
+                }
+            }
+        }
+    }
+
+    private InputStream getInputStream(Function<InputStream, InputStream> filter)
+            throws IOException {
+        InputStream is = mPath != null ? new FileInputStream(mPath.toFile()) : mUrl.openStream();
+        BufferedInputStream bufStream = new BufferedInputStream(is);
+        return filter == null ? bufStream : filter.apply(bufStream);
+    }
+
+    /**
+     * Installs this ImageArchive to a directory pointed by path. filter can be supplied to provide
+     * an additional input stream which will be used during the installation.
+     */
+    public void installTo(Path dir, Function<InputStream, InputStream> filter) throws IOException {
+        String source = mPath != null ? mPath.toString() : mUrl.toString();
+        Log.d(TAG, "Installing. source: " + source + ", destination: " + dir.toString());
+        try (InputStream stream = getInputStream(filter);
+                GzipCompressorInputStream gzStream = new GzipCompressorInputStream(stream);
+                TarArchiveInputStream tarStream = new TarArchiveInputStream(gzStream)) {
+
+            Files.createDirectories(dir);
+            ArchiveEntry entry;
+            while ((entry = tarStream.getNextEntry()) != null) {
+                Path to = dir.resolve(entry.getName());
+                if (Files.isDirectory(to)) {
+                    Files.createDirectories(to);
+                    continue;
+                }
+                Files.copy(tarStream, to, StandardCopyOption.REPLACE_EXISTING);
+            }
+        }
+        commitInstallationAt(dir);
+    }
+
+    private void commitInstallationAt(Path dir) throws IOException {
+        // To save storage, delete the source archive on the disk.
+        if (mPath != null) {
+            Files.deleteIfExists(mPath);
+        }
+
+        // Mark the completion
+        Path marker = dir.resolve(InstalledImage.MARKER_FILENAME);
+        Files.createFile(marker);
+    }
+}
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/InstallUtils.java b/android/TerminalApp/java/com/android/virtualization/terminal/InstallUtils.java
deleted file mode 100644
index b17e636..0000000
--- a/android/TerminalApp/java/com/android/virtualization/terminal/InstallUtils.java
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
- * Copyright (C) 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.
- */
-package com.android.virtualization.terminal;
-
-import android.content.Context;
-import android.os.Environment;
-import android.os.FileUtils;
-import android.util.Log;
-
-import com.android.internal.annotations.VisibleForTesting;
-
-import org.apache.commons.compress.archivers.ArchiveEntry;
-import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
-import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream;
-
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.StandardCopyOption;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.function.Function;
-
-public class InstallUtils {
-    private static final String TAG = InstallUtils.class.getSimpleName();
-
-    private static final String VM_CONFIG_FILENAME = "vm_config.json";
-    private static final String COMPRESSED_PAYLOAD_FILENAME = "images.tar.gz";
-    private static final String ROOTFS_FILENAME = "root_part";
-    private static final String BACKUP_FILENAME = "root_part_backup";
-    private static final String INSTALLATION_COMPLETED_FILENAME = "completed";
-    private static final String PAYLOAD_DIR = "linux";
-
-    public static String getVmConfigPath(Context context) {
-        return getInternalStorageDir(context).toPath().resolve(VM_CONFIG_FILENAME).toString();
-    }
-
-    public static boolean isImageInstalled(Context context) {
-        return Files.exists(getInstallationCompletedPath(context));
-    }
-
-    public static void backupRootFs(Context context) throws IOException {
-        Files.move(
-                getRootfsFile(context).toPath(),
-                getBackupFile(context).toPath(),
-                StandardCopyOption.REPLACE_EXISTING);
-    }
-
-    public static boolean createInstalledMarker(Context context) {
-        try {
-            File file = new File(getInstallationCompletedPath(context).toString());
-            return file.createNewFile();
-        } catch (IOException e) {
-            Log.e(TAG, "Failed to mark install completed", e);
-            return false;
-        }
-    }
-
-    @VisibleForTesting
-    public static void deleteInstallation(Context context) {
-        FileUtils.deleteContentsAndDir(getInternalStorageDir(context));
-    }
-
-    private static Path getPayloadPath() {
-        File payloadDir = Environment.getExternalStoragePublicDirectory(PAYLOAD_DIR);
-        if (payloadDir == null) {
-            Log.d(TAG, "no payload dir: " + payloadDir);
-            return null;
-        }
-        Path payloadPath = payloadDir.toPath().resolve(COMPRESSED_PAYLOAD_FILENAME);
-        return payloadPath;
-    }
-
-    public static boolean payloadFromExternalStorageExists() {
-        return Files.exists(getPayloadPath());
-    }
-
-    public static File getInternalStorageDir(Context context) {
-        return new File(context.getFilesDir(), PAYLOAD_DIR);
-    }
-
-    public static File getBackupFile(Context context) {
-        return new File(context.getFilesDir(), BACKUP_FILENAME);
-    }
-
-    private static Path getInstallationCompletedPath(Context context) {
-        return getInternalStorageDir(context).toPath().resolve(INSTALLATION_COMPLETED_FILENAME);
-    }
-
-    public static boolean installImageFromExternalStorage(Context context) {
-        if (!payloadFromExternalStorageExists()) {
-            Log.d(TAG, "no artifact file from external storage");
-            return false;
-        }
-        Path payloadPath = getPayloadPath();
-        try (BufferedInputStream inputStream =
-                        new BufferedInputStream(Files.newInputStream(payloadPath));
-                TarArchiveInputStream tar =
-                        new TarArchiveInputStream(new GzipCompressorInputStream(inputStream))) {
-            ArchiveEntry entry;
-            Path baseDir = new File(context.getFilesDir(), PAYLOAD_DIR).toPath();
-            Files.createDirectories(baseDir);
-            while ((entry = tar.getNextEntry()) != null) {
-                Path extractTo = baseDir.resolve(entry.getName());
-                if (entry.isDirectory()) {
-                    Files.createDirectories(extractTo);
-                } else {
-                    Files.copy(tar, extractTo, StandardCopyOption.REPLACE_EXISTING);
-                }
-            }
-        } catch (IOException e) {
-            Log.e(TAG, "installation failed", e);
-            return false;
-        }
-        if (!resolvePathInVmConfig(context)) {
-            Log.d(TAG, "resolving path failed");
-            try {
-                Files.deleteIfExists(Path.of(getVmConfigPath(context)));
-            } catch (IOException e) {
-                return false;
-            }
-            return false;
-        }
-
-        // remove payload if installation is done.
-        try {
-            Files.deleteIfExists(payloadPath);
-        } catch (IOException e) {
-            Log.d(TAG, "failed to remove installed payload", e);
-        }
-
-        // Create marker for installation done.
-        return createInstalledMarker(context);
-    }
-
-    private static Function<String, String> getReplacer(Context context) {
-        Map<String, String> rules = new HashMap<>();
-        rules.put("\\$PAYLOAD_DIR", new File(context.getFilesDir(), PAYLOAD_DIR).toString());
-        rules.put("\\$USER_ID", String.valueOf(context.getUserId()));
-        rules.put("\\$PACKAGE_NAME", context.getPackageName());
-        String appDataDir = context.getDataDir().toString();
-        // TODO: remove this hack
-        if (context.getUserId() == 0) {
-            appDataDir = "/data/data/" + context.getPackageName();
-        }
-        rules.put("\\$APP_DATA_DIR", appDataDir);
-        return (s) -> {
-            for (Map.Entry<String, String> rule : rules.entrySet()) {
-                s = s.replaceAll(rule.getKey(), rule.getValue());
-            }
-            return s;
-        };
-    }
-
-    public static boolean resolvePathInVmConfig(Context context) {
-        try {
-            String replacedVmConfig =
-                    String.join(
-                            "\n",
-                            Files.readAllLines(Path.of(getVmConfigPath(context))).stream()
-                                    .map(getReplacer(context))
-                                    .toList());
-            Files.write(Path.of(getVmConfigPath(context)), replacedVmConfig.getBytes());
-            return true;
-        } catch (IOException e) {
-            return false;
-        }
-    }
-
-    public static File getRootfsFile(Context context) throws FileNotFoundException {
-        File file = new File(getInternalStorageDir(context), ROOTFS_FILENAME);
-        if (!file.exists()) {
-            Log.d(TAG, file.getAbsolutePath() + " - file not found");
-            throw new FileNotFoundException("File not found: " + ROOTFS_FILENAME);
-        }
-        return file;
-    }
-}
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/InstalledImage.java b/android/TerminalApp/java/com/android/virtualization/terminal/InstalledImage.java
new file mode 100644
index 0000000..318f49a
--- /dev/null
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/InstalledImage.java
@@ -0,0 +1,212 @@
+/*
+ * Copyright (C) 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.
+ */
+package com.android.virtualization.terminal;
+
+import static com.android.virtualization.terminal.MainActivity.TAG;
+
+import android.content.Context;
+import android.os.FileUtils;
+import android.system.ErrnoException;
+import android.system.Os;
+import android.util.Log;
+
+import java.io.BufferedReader;
+import java.io.FileDescriptor;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.RandomAccessFile;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.StandardCopyOption;
+
+/** Collection of files that consist of a VM image. */
+class InstalledImage {
+    private static final String INSTALL_DIRNAME = "linux";
+    private static final String ROOTFS_FILENAME = "root_part";
+    private static final String BACKUP_FILENAME = "root_part_backup";
+    private static final String CONFIG_FILENAME = "vm_config.json";
+    private static final String BUILD_ID_FILENAME = "build_id";
+    static final String MARKER_FILENAME = "completed";
+
+    public static final long RESIZE_STEP_BYTES = 4 << 20; // 4 MiB
+
+    private final Path mDir;
+    private final Path mRootPartition;
+    private final Path mBackup;
+    private final Path mConfig;
+    private final Path mMarker;
+    private String mBuildId;
+
+    /** Returns InstalledImage for a given app context */
+    public static InstalledImage getDefault(Context context) {
+        Path installDir = context.getFilesDir().toPath().resolve(INSTALL_DIRNAME);
+        return new InstalledImage(installDir);
+    }
+
+    private InstalledImage(Path dir) {
+        mDir = dir;
+        mRootPartition = dir.resolve(ROOTFS_FILENAME);
+        mBackup = dir.resolve(BACKUP_FILENAME);
+        mConfig = dir.resolve(CONFIG_FILENAME);
+        mMarker = dir.resolve(MARKER_FILENAME);
+    }
+
+    public Path getInstallDir() {
+        return mDir;
+    }
+
+    /** Tests if this InstalledImage is actually installed. */
+    public boolean isInstalled() {
+        return Files.exists(mMarker);
+    }
+
+    /** Fully understalls this InstalledImage by deleting everything. */
+    public void uninstallFully() throws IOException {
+        FileUtils.deleteContentsAndDir(mDir.toFile());
+    }
+
+    /** Returns the path to the VM config file. */
+    public Path getConfigPath() {
+        return mConfig;
+    }
+
+    /** Returns the build ID of the installed image */
+    public String getBuildId() {
+        if (mBuildId == null) {
+            mBuildId = readBuildId();
+        }
+        return mBuildId;
+    }
+
+    private String readBuildId() {
+        Path file = mDir.resolve(BUILD_ID_FILENAME);
+        if (!Files.exists(file)) {
+            return "<no build id>";
+        }
+        try (BufferedReader r = new BufferedReader(new FileReader(file.toFile()))) {
+            return r.readLine();
+        } catch (IOException e) {
+            throw new RuntimeException("Failed to read build ID", e);
+        }
+    }
+
+    public Path uninstallAndBackup() throws IOException {
+        Files.delete(mMarker);
+        Files.move(mRootPartition, mBackup, StandardCopyOption.REPLACE_EXISTING);
+        return mBackup;
+    }
+
+    public Path getBackupFile() {
+        return mBackup;
+    }
+
+    public boolean hasBackup() {
+        return Files.exists(mBackup);
+    }
+
+    public void deleteBackup() throws IOException {
+        Files.deleteIfExists(mBackup);
+    }
+
+    public long getSize() throws IOException {
+        return Files.size(mRootPartition);
+    }
+
+    public long getSmallestSizePossible() throws IOException {
+        runE2fsck(mRootPartition);
+        String p = mRootPartition.toAbsolutePath().toString();
+        String result = runCommand("/system/bin/resize2fs", "-P", p);
+        // The return value is the number of 4k block
+        try {
+            long minSize =
+                    Long.parseLong(result.lines().toArray(String[]::new)[1].substring(42))
+                            * 4
+                            * 1024;
+            return roundUp(minSize);
+        } catch (NumberFormatException e) {
+            Log.e(TAG, "Failed to parse min size, p=" + p + ", result=" + result);
+            throw new IOException(e);
+        }
+    }
+
+    public long resize(long desiredSize) throws IOException {
+        desiredSize = roundUp(desiredSize);
+        final long curSize = getSize();
+
+        if (desiredSize == curSize) {
+            return desiredSize;
+        }
+
+        runE2fsck(mRootPartition);
+        if (desiredSize > curSize) {
+            allocateSpace(mRootPartition, desiredSize);
+        }
+        resizeFilesystem(mRootPartition, desiredSize);
+        return getSize();
+    }
+
+    private static void allocateSpace(Path path, long sizeInBytes) throws IOException {
+        try {
+            RandomAccessFile raf = new RandomAccessFile(path.toFile(), "rw");
+            FileDescriptor fd = raf.getFD();
+            Os.posix_fallocate(fd, 0, sizeInBytes);
+            raf.close();
+            Log.d(TAG, "Allocated space to: " + sizeInBytes + " bytes");
+        } catch (ErrnoException e) {
+            Log.e(TAG, "Failed to allocate space", e);
+            throw new IOException("Failed to allocate space", e);
+        }
+    }
+
+    private static void runE2fsck(Path path) throws IOException {
+        String p = path.toAbsolutePath().toString();
+        runCommand("/system/bin/e2fsck", "-y", "-f", p);
+        Log.d(TAG, "e2fsck completed: " + path);
+    }
+
+    private static void resizeFilesystem(Path path, long sizeInBytes) throws IOException {
+        long sizeInMB = sizeInBytes / (1024 * 1024);
+        if (sizeInMB == 0) {
+            Log.e(TAG, "Invalid size: " + sizeInBytes + " bytes");
+            throw new IllegalArgumentException("Size cannot be zero MB");
+        }
+        String sizeArg = sizeInMB + "M";
+        String p = path.toAbsolutePath().toString();
+        runCommand("/system/bin/resize2fs", p, sizeArg);
+        Log.d(TAG, "resize2fs completed: " + path + ", size: " + sizeArg);
+    }
+
+    private static String runCommand(String... command) throws IOException {
+        try {
+            Process process = new ProcessBuilder(command).redirectErrorStream(true).start();
+            process.waitFor();
+            String result = new String(process.getInputStream().readAllBytes());
+            if (process.exitValue() != 0) {
+                Log.w(TAG, "Process returned with error, command=" + String.join(" ", command)
+                    + ", exitValue=" + process.exitValue() + ", result=" + result);
+            }
+            return result;
+        } catch (InterruptedException e) {
+            Thread.currentThread().interrupt();
+            throw new IOException("Command interrupted", e);
+        }
+    }
+
+    private static long roundUp(long bytes) {
+        // Round up every diskSizeStep MB
+        return (long) Math.ceil(((double) bytes) / RESIZE_STEP_BYTES) * RESIZE_STEP_BYTES;
+    }
+}
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/InstallerActivity.java b/android/TerminalApp/java/com/android/virtualization/terminal/InstallerActivity.java
index 45da73c..1c62572 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/InstallerActivity.java
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/InstallerActivity.java
@@ -16,6 +16,8 @@
 
 package com.android.virtualization.terminal;
 
+import static com.android.virtualization.terminal.MainActivity.TAG;
+
 import android.annotation.MainThread;
 import android.content.ComponentName;
 import android.content.Context;
@@ -39,11 +41,10 @@
 import com.google.android.material.progressindicator.LinearProgressIndicator;
 import com.google.android.material.snackbar.Snackbar;
 
+import java.io.IOException;
 import java.lang.ref.WeakReference;
 
 public class InstallerActivity extends BaseActivity {
-    private static final String TAG = "LinuxInstaller";
-
     private static final long ESTIMATED_IMG_SIZE_BYTES = FileUtils.parseSize("550MB");
 
     private CheckBox mWaitForWifiCheckbox;
@@ -63,12 +64,8 @@
         mInstallProgressListener = new InstallProgressListener(this);
 
         setContentView(R.layout.activity_installer);
-
-        TextView desc = (TextView) findViewById(R.id.installer_desc);
-        desc.setText(
-                getString(
-                        R.string.installer_desc_text_format,
-                        Formatter.formatShortFileSize(this, ESTIMATED_IMG_SIZE_BYTES)));
+        updateSizeEstimation(ESTIMATED_IMG_SIZE_BYTES);
+        measureImageSizeAndUpdateDescription();
 
         mWaitForWifiCheckbox = (CheckBox) findViewById(R.id.installer_wait_for_wifi_checkbox);
         mInstallButton = (TextView) findViewById(R.id.installer_install_button);
@@ -85,11 +82,38 @@
         }
     }
 
+    private void updateSizeEstimation(long est) {
+        String desc =
+                getString(
+                        R.string.installer_desc_text_format,
+                        Formatter.formatShortFileSize(this, est));
+        runOnUiThread(
+                () -> {
+                    TextView view = (TextView) findViewById(R.id.installer_desc);
+                    view.setText(desc);
+                });
+    }
+
+    private void measureImageSizeAndUpdateDescription() {
+        new Thread(
+                        () -> {
+                            long est;
+                            try {
+                                est = ImageArchive.getDefault().getSize();
+                            } catch (IOException e) {
+                                Log.w(TAG, "Failed to measure image size.", e);
+                                return;
+                            }
+                            updateSizeEstimation(est);
+                        })
+                .start();
+    }
+
     @Override
     public void onResume() {
         super.onResume();
 
-        if (Build.isDebuggable() && InstallUtils.payloadFromExternalStorageExists()) {
+        if (Build.isDebuggable() && ImageArchive.fromSdCard().exists()) {
             showSnackbar("Auto installing", Snackbar.LENGTH_LONG);
             requestInstall();
         }
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/InstallerService.java b/android/TerminalApp/java/com/android/virtualization/terminal/InstallerService.java
index 5d4c4ad..ac05d78 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/InstallerService.java
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/InstallerService.java
@@ -16,6 +16,8 @@
 
 package com.android.virtualization.terminal;
 
+import static com.android.virtualization.terminal.MainActivity.TAG;
+
 import android.app.Notification;
 import android.app.PendingIntent;
 import android.app.Service;
@@ -26,7 +28,6 @@
 import android.net.NetworkCapabilities;
 import android.os.Build;
 import android.os.IBinder;
-import android.os.SELinux;
 import android.util.Log;
 
 import androidx.annotation.NonNull;
@@ -34,39 +35,19 @@
 
 import com.android.internal.annotations.GuardedBy;
 
-import org.apache.commons.compress.archivers.ArchiveEntry;
-import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
-import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream;
-
-import java.io.BufferedInputStream;
-import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.lang.ref.WeakReference;
 import java.net.SocketException;
-import java.net.URL;
 import java.net.UnknownHostException;
-import java.nio.file.Files;
 import java.nio.file.Path;
-import java.nio.file.StandardCopyOption;
 import java.util.Arrays;
-import java.util.Objects;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
 public class InstallerService extends Service {
-    private static final String TAG = "InstallerService";
-
     private static final int NOTIFICATION_ID = 1313; // any unique number among notifications
 
-    private static final String IMAGE_URL =
-            Arrays.asList(Build.SUPPORTED_ABIS).contains("x86_64")
-                    ? "https://dl.google.com/android/ferrochrome/latest/x86_64/images.tar.gz"
-                    : "https://dl.google.com/android/ferrochrome/latest/aarch64/images.tar.gz";
-
-    private static final String SELINUX_FILE_CONTEXT =
-            "u:object_r:virtualizationservice_data_file:";
-
     private final Object mLock = new Object();
 
     private Notification mNotification;
@@ -162,9 +143,6 @@
         mExecutorService.execute(
                 () -> {
                     boolean success = downloadFromSdcard() || downloadFromUrl(isWifiOnly);
-                    if (success) {
-                        reLabelImagesSELinuxContext();
-                    }
                     stopForeground(STOP_FOREGROUND_REMOVE);
 
                     synchronized (mLock) {
@@ -176,34 +154,21 @@
                 });
     }
 
-    private void reLabelImagesSELinuxContext() {
-        File payloadFolder = InstallUtils.getInternalStorageDir(this);
-
-        // The context should be u:object_r:privapp_data_file:s0:c35,c257,c512,c768
-        // and we want to get s0:c35,c257,c512,c768 part
-        String level = SELinux.getFileContext(payloadFolder.toString()).split(":", 4)[3];
-        String targetContext = SELINUX_FILE_CONTEXT + level;
-
-        File[] files = payloadFolder.listFiles();
-        for (File file : files) {
-            if (file.isFile() &&
-                    !Objects.equals(SELinux.getFileContext(file.toString()),
-                            targetContext)) {
-                SELinux.setFileContext(file.toString(), targetContext);
-            }
-        }
-    }
-
     private boolean downloadFromSdcard() {
+        ImageArchive archive = ImageArchive.fromSdCard();
+
         // Installing from sdcard is preferred, but only supported only in debuggable build.
-        if (Build.isDebuggable()) {
+        if (Build.isDebuggable() && archive.exists()) {
             Log.i(TAG, "trying to install /sdcard/linux/images.tar.gz");
 
-            if (InstallUtils.installImageFromExternalStorage(this)) {
+            Path dest = InstalledImage.getDefault(this).getInstallDir();
+            try {
+                archive.installTo(dest, null);
                 Log.i(TAG, "image is installed from /sdcard/linux/images.tar.gz");
                 return true;
+            } catch (IOException e) {
+                Log.i(TAG, "Failed to install /sdcard/linux/images.tar.gz", e);
             }
-            Log.i(TAG, "Failed to install /sdcard/linux/images.tar.gz");
         } else {
             Log.i(TAG, "Non-debuggable build doesn't support installation from /sdcard/linux");
         }
@@ -221,31 +186,22 @@
 
     // TODO(b/374015561): Support pause/resume download
     private boolean downloadFromUrl(boolean isWifiOnly) {
-        Log.i(TAG, "trying to download from " + IMAGE_URL);
-
         if (!checkForWifiOnly(isWifiOnly)) {
             Log.e(TAG, "Install isn't started because Wifi isn't available");
             notifyError(getString(R.string.installer_error_no_wifi));
             return false;
         }
 
-        try (BufferedInputStream inputStream =
-                        new BufferedInputStream(new URL(IMAGE_URL).openStream());
-                WifiCheckInputStream wifiInputStream =
-                        new WifiCheckInputStream(inputStream, isWifiOnly);
-                TarArchiveInputStream tar =
-                        new TarArchiveInputStream(new GzipCompressorInputStream(wifiInputStream))) {
-            ArchiveEntry entry;
-            Path baseDir = InstallUtils.getInternalStorageDir(this).toPath();
-            Files.createDirectories(baseDir);
-            while ((entry = tar.getNextEntry()) != null) {
-                Path extractTo = baseDir.resolve(entry.getName());
-                if (entry.isDirectory()) {
-                    Files.createDirectories(extractTo);
-                } else {
-                    Files.copy(tar, extractTo, StandardCopyOption.REPLACE_EXISTING);
-                }
-            }
+        Path dest = InstalledImage.getDefault(this).getInstallDir();
+        try {
+            ImageArchive.fromInternet()
+                    .installTo(
+                            dest,
+                            is -> {
+                                WifiCheckInputStream filter = new WifiCheckInputStream(is);
+                                filter.setWifiOnly(isWifiOnly);
+                                return filter;
+                            });
         } catch (WifiCheckInputStream.NoWifiException e) {
             Log.e(TAG, "Install failed because of Wi-Fi is gone");
             notifyError(getString(R.string.installer_error_no_wifi));
@@ -260,12 +216,7 @@
             notifyError(getString(R.string.installer_error_unknown));
             return false;
         }
-
-        if (!InstallUtils.resolvePathInVmConfig(this)) {
-            notifyError(getString(R.string.installer_error_unknown));
-            return false;
-        }
-        return InstallUtils.createInstalledMarker(this);
+        return true;
     }
 
     private void notifyError(String displayText) {
@@ -339,7 +290,7 @@
         public boolean isInstalled() {
             InstallerService service = ensureServiceConnected();
             synchronized (service.mLock) {
-                return !service.mIsInstalling && InstallUtils.isImageInstalled(service);
+                return !service.mIsInstalling && InstalledImage.getDefault(service).isInstalled();
             }
         }
     }
@@ -348,11 +299,14 @@
         private static final int READ_BYTES = 1024;
 
         private final InputStream mInputStream;
-        private final boolean mIsWifiOnly;
+        private boolean mIsWifiOnly;
 
-        public WifiCheckInputStream(InputStream is, boolean isWifiOnly) {
+        public WifiCheckInputStream(InputStream is) {
             super();
             mInputStream = is;
+        }
+
+        public void setWifiOnly(boolean isWifiOnly) {
             mIsWifiOnly = isWifiOnly;
         }
 
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.java b/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.java
index 8448349..cfb1cbe 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.java
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.java
@@ -15,13 +15,14 @@
  */
 package com.android.virtualization.terminal;
 
+import static android.webkit.WebSettings.LOAD_NO_CACHE;
+
 import android.app.Notification;
-import android.app.NotificationChannel;
-import android.app.NotificationManager;
 import android.app.PendingIntent;
 import android.content.Context;
 import android.content.Intent;
 import android.content.SharedPreferences;
+import android.content.pm.ActivityInfo;
 import android.content.res.Configuration;
 import android.graphics.Bitmap;
 import android.graphics.drawable.Icon;
@@ -33,13 +34,12 @@
 import android.os.ConditionVariable;
 import android.os.Environment;
 import android.provider.Settings;
-import android.system.ErrnoException;
-import android.system.Os;
 import android.util.Log;
 import android.view.KeyEvent;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
+import android.view.WindowInsets;
 import android.view.accessibility.AccessibilityManager;
 import android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener;
 import android.webkit.ClientCertRequest;
@@ -53,16 +53,13 @@
 import androidx.activity.result.ActivityResult;
 import androidx.activity.result.ActivityResultLauncher;
 import androidx.activity.result.contract.ActivityResultContracts;
+import androidx.annotation.NonNull;
 
 import com.android.internal.annotations.VisibleForTesting;
 
 import com.google.android.material.appbar.MaterialToolbar;
 
-import java.io.File;
-import java.io.FileDescriptor;
-import java.io.FileNotFoundException;
 import java.io.IOException;
-import java.io.RandomAccessFile;
 import java.net.InetAddress;
 import java.net.MalformedURLException;
 import java.net.URL;
@@ -70,57 +67,65 @@
 import java.security.KeyStore;
 import java.security.PrivateKey;
 import java.security.cert.X509Certificate;
+import java.util.Map;
 
 public class MainActivity extends BaseActivity
-        implements VmLauncherServices.VmLauncherServiceCallback, AccessibilityStateChangeListener {
+        implements VmLauncherService.VmLauncherServiceCallback, AccessibilityStateChangeListener {
     static final String TAG = "VmTerminalApp";
     private static final String VM_ADDR = "192.168.0.2";
     private static final int TTYD_PORT = 7681;
     private static final int REQUEST_CODE_INSTALLER = 0x33;
     private static final int FONT_SIZE_DEFAULT = 13;
 
+    private InstalledImage mImage;
     private X509Certificate[] mCertificates;
     private PrivateKey mPrivateKey;
-    private WebView mWebView;
+    private TerminalView mTerminalView;
     private AccessibilityManager mAccessibilityManager;
     private ConditionVariable mBootCompleted = new ConditionVariable();
     private static final int POST_NOTIFICATIONS_PERMISSION_REQUEST_CODE = 101;
     private ActivityResultLauncher<Intent> mManageExternalStorageActivityResultLauncher;
-    private static int diskSizeStep;
+    private static final Map<Integer, Integer> BTN_KEY_CODE_MAP =
+            Map.ofEntries(
+                    Map.entry(R.id.btn_tab, KeyEvent.KEYCODE_TAB),
+                    // Alt key sends ESC keycode
+                    Map.entry(R.id.btn_alt, KeyEvent.KEYCODE_ESCAPE),
+                    Map.entry(R.id.btn_esc, KeyEvent.KEYCODE_ESCAPE),
+                    Map.entry(R.id.btn_left, KeyEvent.KEYCODE_DPAD_LEFT),
+                    Map.entry(R.id.btn_right, KeyEvent.KEYCODE_DPAD_RIGHT),
+                    Map.entry(R.id.btn_up, KeyEvent.KEYCODE_DPAD_UP),
+                    Map.entry(R.id.btn_down, KeyEvent.KEYCODE_DPAD_DOWN),
+                    Map.entry(R.id.btn_home, KeyEvent.KEYCODE_MOVE_HOME),
+                    Map.entry(R.id.btn_end, KeyEvent.KEYCODE_MOVE_END),
+                    Map.entry(R.id.btn_pgup, KeyEvent.KEYCODE_PAGE_UP),
+                    Map.entry(R.id.btn_pgdn, KeyEvent.KEYCODE_PAGE_DOWN));
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
+        lockOrientationIfNecessary();
 
-        NotificationManager notificationManager = getSystemService(NotificationManager.class);
-        if (notificationManager.getNotificationChannel(this.getPackageName()) == null) {
-            NotificationChannel channel =
-                    new NotificationChannel(
-                            this.getPackageName(),
-                            getString(R.string.app_name),
-                            NotificationManager.IMPORTANCE_DEFAULT);
-            notificationManager.createNotificationChannel(channel);
-        }
+        mImage = InstalledImage.getDefault(this);
 
         boolean launchInstaller = installIfNecessary();
 
         setContentView(R.layout.activity_headless);
-        diskSizeStep = getResources().getInteger(
-                R.integer.disk_size_round_up_step_size_in_mb) << 20;
 
         MaterialToolbar toolbar = (MaterialToolbar) findViewById(R.id.toolbar);
         setSupportActionBar(toolbar);
-        mWebView = (WebView) findViewById(R.id.webview);
-        mWebView.getSettings().setDatabaseEnabled(true);
-        mWebView.getSettings().setDomStorageEnabled(true);
-        mWebView.getSettings().setJavaScriptEnabled(true);
-        mWebView.setWebChromeClient(new WebChromeClient());
+        mTerminalView = (TerminalView) findViewById(R.id.webview);
+        mTerminalView.getSettings().setDatabaseEnabled(true);
+        mTerminalView.getSettings().setDomStorageEnabled(true);
+        mTerminalView.getSettings().setJavaScriptEnabled(true);
+        mTerminalView.getSettings().setCacheMode(LOAD_NO_CACHE);
+        mTerminalView.setWebChromeClient(new WebChromeClient());
+
+        setupModifierKeys();
 
         mAccessibilityManager = getSystemService(AccessibilityManager.class);
         mAccessibilityManager.addAccessibilityStateChangeListener(this);
 
         readClientCertificate();
-        connectToTerminalService();
 
         mManageExternalStorageActivityResultLauncher =
                 registerForActivityResult(
@@ -128,7 +133,14 @@
                         (ActivityResult result) -> {
                             startVm();
                         });
-
+        getWindow()
+                .getDecorView()
+                .getRootView()
+                .setOnApplyWindowInsetsListener(
+                        (v, insets) -> {
+                            updateModifierKeysVisibility();
+                            return insets;
+                        });
         // if installer is launched, it will be handled in onActivityResult
         if (!launchInstaller) {
             if (!Environment.isExternalStorageManager()) {
@@ -139,11 +151,54 @@
         }
     }
 
+    private void lockOrientationIfNecessary() {
+        boolean hasHwQwertyKeyboard =
+                getResources().getConfiguration().keyboard == Configuration.KEYBOARD_QWERTY;
+        if (hasHwQwertyKeyboard) {
+            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
+        } else if (getResources().getBoolean(R.bool.terminal_portrait_only)) {
+            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
+        }
+    }
+
+    @Override
+    public void onConfigurationChanged(@NonNull Configuration newConfig) {
+        super.onConfigurationChanged(newConfig);
+        lockOrientationIfNecessary();
+        updateModifierKeysVisibility();
+    }
+
+    private void setupModifierKeys() {
+        // Only ctrl key is special, it communicates with xtermjs to modify key event with ctrl key
+        findViewById(R.id.btn_ctrl)
+                .setOnClickListener(
+                        (v) -> {
+                            mTerminalView.mapCtrlKey();
+                            mTerminalView.enableCtrlKey();
+                        });
+
+        View.OnClickListener modifierButtonClickListener =
+                v -> {
+                    if (BTN_KEY_CODE_MAP.containsKey(v.getId())) {
+                        int keyCode = BTN_KEY_CODE_MAP.get(v.getId());
+                        mTerminalView.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, keyCode));
+                        mTerminalView.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, keyCode));
+                    }
+                };
+
+        for (int btn : BTN_KEY_CODE_MAP.keySet()) {
+            View v = findViewById(btn);
+            if (v != null) {
+                v.setOnClickListener(modifierButtonClickListener);
+            }
+        }
+    }
+
     @Override
     public boolean dispatchKeyEvent(KeyEvent event) {
         if (Build.isDebuggable() && event.getKeyCode() == KeyEvent.KEYCODE_UNKNOWN) {
             if (event.getAction() == KeyEvent.ACTION_UP) {
-                launchErrorActivity(new Exception("Debug: KeyEvent.KEYCODE_UNKNOWN"));
+                ErrorActivity.start(this, new Exception("Debug: KeyEvent.KEYCODE_UNKNOWN"));
             }
             return true;
         }
@@ -191,7 +246,7 @@
 
     private void connectToTerminalService() {
         Log.i(TAG, "URL=" + getTerminalServiceUrl().toString());
-        mWebView.setWebViewClient(
+        mTerminalView.setWebViewClient(
                 new WebViewClient() {
                     private boolean mLoadFailed = false;
                     private long mRequestId = 0;
@@ -215,6 +270,7 @@
                             case WebViewClient.ERROR_CONNECT:
                             case WebViewClient.ERROR_HOST_LOOKUP:
                             case WebViewClient.ERROR_FAILED_SSL_HANDSHAKE:
+                            case WebViewClient.ERROR_TIMEOUT:
                                 view.reload();
                                 return;
                             default:
@@ -240,8 +296,11 @@
                                             android.os.Trace.endAsyncSection("executeTerminal", 0);
                                             findViewById(R.id.boot_progress)
                                                     .setVisibility(View.GONE);
-                                            view.setVisibility(View.VISIBLE);
+                                            findViewById(R.id.webview_container)
+                                                    .setVisibility(View.VISIBLE);
                                             mBootCompleted.open();
+                                            updateModifierKeysVisibility();
+                                            mTerminalView.mapTouchToMouseEvent();
                                         }
                                     }
                                 });
@@ -268,85 +327,13 @@
                         () -> {
                             waitUntilVmStarts();
                             runOnUiThread(
-                                    () -> mWebView.loadUrl(getTerminalServiceUrl().toString()));
+                                    () ->
+                                            mTerminalView.loadUrl(
+                                                    getTerminalServiceUrl().toString()));
                         })
                 .start();
     }
 
-    private void diskResize(File file, long sizeInBytes) throws IOException {
-        try {
-            if (sizeInBytes == 0) {
-                return;
-            }
-            String filePath = file.getAbsolutePath();
-            Log.d(TAG, "Disk-resize in progress for partition: " + filePath);
-
-            long currentSize = Os.stat(filePath).st_size;
-            runE2fsck(filePath);
-            if (sizeInBytes > currentSize) {
-                allocateSpace(file, sizeInBytes);
-            }
-
-            resizeFilesystem(filePath, sizeInBytes);
-        } catch (ErrnoException e) {
-            Log.e(TAG, "ErrnoException during disk resize", e);
-            throw new IOException("ErrnoException during disk resize", e);
-        } catch (IOException e) {
-            Log.e(TAG, "Failed to resize disk", e);
-            throw e;
-        }
-    }
-
-    private static void allocateSpace(File file, long sizeInBytes) throws IOException {
-        try {
-            RandomAccessFile raf = new RandomAccessFile(file, "rw");
-            FileDescriptor fd = raf.getFD();
-            Os.posix_fallocate(fd, 0, sizeInBytes);
-            raf.close();
-            Log.d(TAG, "Allocated space to: " + sizeInBytes + " bytes");
-        } catch (ErrnoException e) {
-            Log.e(TAG, "Failed to allocate space", e);
-            throw new IOException("Failed to allocate space", e);
-        }
-    }
-
-    private static void runE2fsck(String filePath) throws IOException {
-        try {
-            runCommand("/system/bin/e2fsck", "-y", "-f", filePath);
-            Log.d(TAG, "e2fsck completed: " + filePath);
-        } catch (IOException e) {
-            Log.e(TAG, "Failed to run e2fsck", e);
-            throw e;
-        }
-    }
-
-    private static void resizeFilesystem(String filePath, long sizeInBytes) throws IOException {
-        long sizeInMB = sizeInBytes / (1024 * 1024);
-        if (sizeInMB == 0) {
-            Log.e(TAG, "Invalid size: " + sizeInBytes + " bytes");
-            throw new IllegalArgumentException("Size cannot be zero MB");
-        }
-        String sizeArg = sizeInMB + "M";
-        try {
-            runCommand("/system/bin/resize2fs", filePath, sizeArg);
-            Log.d(TAG, "resize2fs completed: " + filePath + ", size: " + sizeArg);
-        } catch (IOException e) {
-            Log.e(TAG, "Failed to run resize2fs", e);
-            throw e;
-        }
-    }
-
-    private static String runCommand(String... command) throws IOException {
-        try {
-            Process process = new ProcessBuilder(command).redirectErrorStream(true).start();
-            process.waitFor();
-            return new String(process.getInputStream().readAllBytes());
-        } catch (InterruptedException e) {
-            Thread.currentThread().interrupt();
-            throw new IOException("Command interrupted", e);
-        }
-    }
-
     private static void waitUntilVmStarts() {
         InetAddress addr = null;
         try {
@@ -366,7 +353,7 @@
     @Override
     protected void onDestroy() {
         getSystemService(AccessibilityManager.class).removeAccessibilityStateChangeListener(this);
-        VmLauncherServices.stopVmLauncherService(this);
+        VmLauncherService.stop(this);
         super.onDestroy();
     }
 
@@ -384,7 +371,8 @@
     @Override
     public void onVmError() {
         Log.i(TAG, "onVmError()");
-        launchErrorActivity(new Exception("onVmError"));
+        // TODO: error cause is too simple.
+        ErrorActivity.start(this, new Exception("onVmError"));
     }
 
     @Override
@@ -414,6 +402,17 @@
         connectToTerminalService();
     }
 
+    private void updateModifierKeysVisibility() {
+        boolean imeShown =
+                getWindow().getDecorView().getRootWindowInsets().isVisible(WindowInsets.Type.ime());
+        boolean hasHwQwertyKeyboard =
+                getResources().getConfiguration().keyboard == Configuration.KEYBOARD_QWERTY;
+        boolean showModifierKeys = imeShown && !hasHwQwertyKeyboard;
+
+        View modifierKeys = findViewById(R.id.modifier_keys);
+        modifierKeys.setVisibility(showModifierKeys ? View.VISIBLE : View.GONE);
+    }
+
     @Override
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
         super.onActivityResult(requestCode, resultCode, data);
@@ -431,17 +430,10 @@
         }
     }
 
-    private void launchErrorActivity(Exception e) {
-        Intent intent = new Intent(this, ErrorActivity.class);
-        intent.putExtra(ErrorActivity.EXTRA_CAUSE, e);
-        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
-        this.startActivity(intent);
-    }
-
     private boolean installIfNecessary() {
         // If payload from external storage exists(only for debuggable build) or there is no
         // installed image, launch installer activity.
-        if (!InstallUtils.isImageInstalled(this)) {
+        if (!mImage.isInstalled()) {
             Intent intent = new Intent(this, InstallerActivity.class);
             startActivityForResult(intent, REQUEST_CODE_INSTALLER);
             return true;
@@ -450,16 +442,17 @@
     }
 
     private void startVm() {
-        if (!InstallUtils.isImageInstalled(this)) {
+        InstalledImage image = InstalledImage.getDefault(this);
+        if (!image.isInstalled()) {
             return;
         }
 
-        resizeDiskIfNecessary();
+        resizeDiskIfNecessary(image);
 
         Intent tapIntent = new Intent(this, MainActivity.class);
         tapIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
-        PendingIntent tapPendingIntent = PendingIntent.getActivity(this, 0, tapIntent,
-                PendingIntent.FLAG_IMMUTABLE);
+        PendingIntent tapPendingIntent =
+                PendingIntent.getActivity(this, 0, tapIntent, PendingIntent.FLAG_IMMUTABLE);
 
         Intent settingsIntent = new Intent(this, SettingsActivity.class);
         settingsIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
@@ -468,7 +461,7 @@
 
         Intent stopIntent = new Intent();
         stopIntent.setClass(this, VmLauncherService.class);
-        stopIntent.setAction(VmLauncherServices.ACTION_STOP_VM_LAUNCHER_SERVICE);
+        stopIntent.setAction(VmLauncherService.ACTION_STOP_VM_LAUNCHER_SERVICE);
         PendingIntent stopPendingIntent =
                 PendingIntent.getService(
                         this,
@@ -492,7 +485,7 @@
                                                         .getString(
                                                                 R.string
                                                                         .service_notification_settings),
-                                        settingsPendingIntent)
+                                                settingsPendingIntent)
                                         .build())
                         .addAction(
                                 new Notification.Action.Builder(
@@ -506,7 +499,8 @@
                         .build();
 
         android.os.Trace.beginAsyncSection("executeTerminal", 0);
-        VmLauncherServices.startVmLauncherService(this, this, notification);
+        VmLauncherService.run(this, this, notification);
+        connectToTerminalService();
     }
 
     @VisibleForTesting
@@ -514,52 +508,19 @@
         return mBootCompleted.block(timeoutMillis);
     }
 
-    private static long roundUpDiskSize(long diskSize) {
-        // Round up every diskSizeStep MB
-        return (long) Math.ceil(((double) diskSize) / diskSizeStep) * diskSizeStep;
-    }
-
-    public static long getMinFilesystemSize(File file) throws IOException, NumberFormatException {
+    private void resizeDiskIfNecessary(InstalledImage image) {
+        String prefKey = getString(R.string.preference_file_key);
+        String key = getString(R.string.preference_disk_size_key);
+        SharedPreferences sharedPref = this.getSharedPreferences(prefKey, Context.MODE_PRIVATE);
         try {
-            runE2fsck(file.getAbsolutePath());
-            String result = runCommand("/system/bin/resize2fs", "-P", file.getAbsolutePath());
-            // The return value is the number of 4k block
-            long minSize = Long.parseLong(
-                    result.lines().toArray(String[]::new)[1].substring(42)) * 4 * 1024;
-            return roundUpDiskSize(minSize);
-        } catch (IOException | NumberFormatException e) {
-            Log.e(TAG, "Failed to get filesystem size", e);
-            throw e;
-        }
-    }
-
-    private static long getFilesystemSize(File file) throws ErrnoException {
-        return Os.stat(file.getAbsolutePath()).st_size;
-    }
-
-    private void resizeDiskIfNecessary() {
-        try {
-            File file = InstallUtils.getRootfsFile(this);
-            SharedPreferences sharedPref = this.getSharedPreferences(
-                    getString(R.string.preference_file_key), Context.MODE_PRIVATE);
-            SharedPreferences.Editor editor = sharedPref.edit();
-
-            long currentDiskSize = getFilesystemSize(file);
-            long newSizeInBytes = sharedPref.getLong(getString(R.string.preference_disk_size_key),
-                    roundUpDiskSize(currentDiskSize));
-            editor.putLong(getString(R.string.preference_disk_size_key), newSizeInBytes);
-            editor.apply();
-
-            Log.d(TAG, "Current disk size: " + currentDiskSize);
-            Log.d(TAG, "Targeting disk size: " + newSizeInBytes);
-
-            if (newSizeInBytes != currentDiskSize) {
-                diskResize(file, newSizeInBytes);
-            }
-        } catch (FileNotFoundException e) {
-            Log.d(TAG, "No partition file");
-        } catch (IOException | ErrnoException | NumberFormatException e) {
+            // Use current size as default value to ensure if its size is multiple of 4096
+            long newSize = sharedPref.getLong(key, image.getSize());
+            Log.d(TAG, "Resizing disk to " + newSize + " bytes");
+            newSize = image.resize(newSize);
+            sharedPref.edit().putLong(key, newSize).apply();
+        } catch (IOException e) {
             Log.e(TAG, "Failed to resize disk", e);
+            return;
         }
     }
 }
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/PortNotifier.java b/android/TerminalApp/java/com/android/virtualization/terminal/PortNotifier.java
new file mode 100644
index 0000000..0d70ab9
--- /dev/null
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/PortNotifier.java
@@ -0,0 +1,146 @@
+/*
+ * Copyright (C) 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.
+ */
+
+package com.android.virtualization.terminal;
+
+import static com.android.virtualization.terminal.MainActivity.TAG;
+
+import android.app.Notification;
+import android.app.Notification.Action;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.graphics.drawable.Icon;
+
+import java.util.HashSet;
+import java.util.Locale;
+import java.util.Set;
+
+/**
+ * PortNotifier is responsible for posting a notification when a new open port is detected. User can
+ * enable or disable forwarding of the port in notification panel.
+ */
+class PortNotifier {
+    private static final String ACTION_PORT_FORWARDING = "android.virtualization.PORT_FORWARDING";
+    private static final String KEY_PORT = "port";
+    private static final String KEY_ENABLED = "enabled";
+
+    private final Context mContext;
+    private final NotificationManager mNotificationManager;
+    private final BroadcastReceiver mReceiver;
+    private final PortsStateManager mPortsStateManager;
+    private final PortsStateManager.Listener mPortsStateListener;
+
+    public PortNotifier(Context context) {
+        mContext = context;
+        mNotificationManager = mContext.getSystemService(NotificationManager.class);
+        mReceiver = new PortForwardingRequestReceiver();
+
+        mPortsStateManager = PortsStateManager.getInstance(mContext);
+        mPortsStateListener =
+                new PortsStateManager.Listener() {
+                    @Override
+                    public void onPortsStateUpdated(
+                            Set<Integer> oldActivePorts, Set<Integer> newActivePorts) {
+                        Set<Integer> union = new HashSet<>(oldActivePorts);
+                        union.addAll(newActivePorts);
+                        for (int port : union) {
+                            if (!oldActivePorts.contains(port)) {
+                                showNotificationFor(port);
+                            } else if (!newActivePorts.contains(port)) {
+                                discardNotificationFor(port);
+                            }
+                        }
+                    }
+                };
+        mPortsStateManager.registerListener(mPortsStateListener);
+
+        IntentFilter intentFilter = new IntentFilter(ACTION_PORT_FORWARDING);
+        mContext.registerReceiver(mReceiver, intentFilter, Context.RECEIVER_NOT_EXPORTED);
+    }
+
+    public void stop() {
+        mPortsStateManager.unregisterListener(mPortsStateListener);
+        mContext.unregisterReceiver(mReceiver);
+    }
+
+    private String getString(int resId) {
+        return mContext.getString(resId);
+    }
+
+    private PendingIntent getPendingIntentFor(int port, boolean enabled) {
+        Intent intent = new Intent(ACTION_PORT_FORWARDING);
+        intent.setPackage(mContext.getPackageName());
+        intent.setIdentifier(String.format(Locale.ROOT, "%d_%b", port, enabled));
+        intent.putExtra(KEY_PORT, port);
+        intent.putExtra(KEY_ENABLED, enabled);
+        return PendingIntent.getBroadcast(mContext, 0, intent, PendingIntent.FLAG_IMMUTABLE);
+    }
+
+    private void showNotificationFor(int port) {
+        Intent tapIntent = new Intent(mContext, SettingsPortForwardingActivity.class);
+        tapIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
+        PendingIntent tapPendingIntent =
+                PendingIntent.getActivity(mContext, 0, tapIntent, PendingIntent.FLAG_IMMUTABLE);
+
+        String title = getString(R.string.settings_port_forwarding_notification_title);
+        String content =
+                mContext.getString(R.string.settings_port_forwarding_notification_content, port);
+        String acceptText = getString(R.string.settings_port_forwarding_notification_accept);
+        String denyText = getString(R.string.settings_port_forwarding_notification_deny);
+        Icon icon = Icon.createWithResource(mContext, R.drawable.ic_launcher_foreground);
+
+        Action acceptAction =
+                new Action.Builder(icon, acceptText, getPendingIntentFor(port, true /* enabled */))
+                        .build();
+        Action denyAction =
+                new Action.Builder(icon, denyText, getPendingIntentFor(port, false /* enabled */))
+                        .build();
+        Notification notification =
+                new Notification.Builder(mContext, mContext.getPackageName())
+                        .setSmallIcon(R.drawable.ic_launcher_foreground)
+                        .setContentTitle(title)
+                        .setContentText(content)
+                        .setContentIntent(tapPendingIntent)
+                        .addAction(acceptAction)
+                        .addAction(denyAction)
+                        .build();
+        mNotificationManager.notify(TAG, port, notification);
+    }
+
+    private void discardNotificationFor(int port) {
+        mNotificationManager.cancel(TAG, port);
+    }
+
+    private final class PortForwardingRequestReceiver extends BroadcastReceiver {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            if (ACTION_PORT_FORWARDING.equals(intent.getAction())) {
+                performActionPortForwarding(context, intent);
+            }
+        }
+
+        private void performActionPortForwarding(Context context, Intent intent) {
+            int port = intent.getIntExtra(KEY_PORT, 0);
+            boolean enabled = intent.getBooleanExtra(KEY_ENABLED, false);
+            mPortsStateManager.updateEnabledPort(port, enabled);
+            discardNotificationFor(port);
+        }
+    }
+}
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/PortsStateManager.java b/android/TerminalApp/java/com/android/virtualization/terminal/PortsStateManager.java
new file mode 100644
index 0000000..56ecd96
--- /dev/null
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/PortsStateManager.java
@@ -0,0 +1,146 @@
+/*
+ * Copyright (C) 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.
+ */
+
+package com.android.virtualization.terminal;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+
+import com.android.internal.annotations.GuardedBy;
+
+import java.util.HashSet;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * PortsStateManager is responsible for communicating with shared preferences and managing state of
+ * ports.
+ */
+public class PortsStateManager {
+    private static final String PREFS_NAME = ".PORTS";
+    private static final int FLAG_ENABLED = 1;
+
+    private static PortsStateManager mInstance;
+    private final Object mLock = new Object();
+
+    private final SharedPreferences mSharedPref;
+
+    @GuardedBy("mLock")
+    private Set<Integer> mActivePorts;
+
+    @GuardedBy("mLock")
+    private final Set<Integer> mEnabledPorts;
+
+    @GuardedBy("mLock")
+    private final Set<Listener> mListeners;
+
+    private PortsStateManager(SharedPreferences sharedPref) {
+        mSharedPref = sharedPref;
+        mEnabledPorts =
+                mSharedPref.getAll().entrySet().stream()
+                        .filter(entry -> entry.getValue() instanceof Integer)
+                        .filter(entry -> ((int) entry.getValue() & FLAG_ENABLED) == FLAG_ENABLED)
+                        .map(entry -> entry.getKey())
+                        .filter(
+                                key -> {
+                                    try {
+                                        Integer.parseInt(key);
+                                        return true;
+                                    } catch (NumberFormatException e) {
+                                        return false;
+                                    }
+                                })
+                        .map(Integer::parseInt)
+                        .collect(Collectors.toSet());
+        mActivePorts = new HashSet<>();
+        mListeners = new HashSet<>();
+    }
+
+    static synchronized PortsStateManager getInstance(Context context) {
+        if (mInstance == null) {
+            SharedPreferences sharedPref =
+                    context.getSharedPreferences(
+                            context.getPackageName() + PREFS_NAME, Context.MODE_PRIVATE);
+            mInstance = new PortsStateManager(sharedPref);
+        }
+        return mInstance;
+    }
+
+    Set<Integer> getActivePorts() {
+        synchronized (mLock) {
+            return new HashSet<>(mActivePorts);
+        }
+    }
+
+    Set<Integer> getEnabledPorts() {
+        synchronized (mLock) {
+            return new HashSet<>(mEnabledPorts);
+        }
+    }
+
+    void updateActivePorts(Set<Integer> ports) {
+        Set<Integer> oldPorts;
+        synchronized (mLock) {
+            oldPorts = mActivePorts;
+            mActivePorts = ports;
+        }
+        notifyPortsStateUpdated(oldPorts, ports);
+    }
+
+    void updateEnabledPort(int port, boolean enabled) {
+        Set<Integer> activePorts;
+        synchronized (mLock) {
+            SharedPreferences.Editor editor = mSharedPref.edit();
+            editor.putInt(String.valueOf(port), enabled ? FLAG_ENABLED : 0);
+            editor.apply();
+            if (enabled) {
+                mEnabledPorts.add(port);
+            } else {
+                mEnabledPorts.remove(port);
+            }
+            activePorts = mActivePorts;
+        }
+        notifyPortsStateUpdated(activePorts, activePorts);
+    }
+
+    void registerListener(Listener listener) {
+        synchronized (mLock) {
+            mListeners.add(listener);
+        }
+    }
+
+    void unregisterListener(Listener listener) {
+        synchronized (mLock) {
+            mListeners.remove(listener);
+        }
+    }
+
+    private void notifyPortsStateUpdated(Set<Integer> oldActivePorts, Set<Integer> newActivePorts) {
+        Set<Listener> listeners;
+        synchronized (mLock) {
+            listeners = new HashSet<>(mListeners);
+        }
+        for (Listener listener : listeners) {
+            listener.onPortsStateUpdated(
+                    new HashSet<>(oldActivePorts), new HashSet<>(newActivePorts));
+        }
+    }
+
+    interface Listener {
+        default void onPortsStateUpdated(
+                Set<Integer> oldActivePorts, Set<Integer> newActivePorts) {}
+    }
+}
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/Runner.java b/android/TerminalApp/java/com/android/virtualization/terminal/Runner.java
index a2247b1..4094025 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/Runner.java
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/Runner.java
@@ -16,6 +16,8 @@
 
 package com.android.virtualization.terminal;
 
+import static com.android.virtualization.terminal.MainActivity.TAG;
+
 import android.content.Context;
 import android.system.virtualmachine.VirtualMachine;
 import android.system.virtualmachine.VirtualMachineCallback;
@@ -30,7 +32,6 @@
 
 /** Utility class for creating a VM and waiting for it to finish. */
 class Runner {
-    private static final String TAG = Runner.class.getSimpleName();
     private final VirtualMachine mVirtualMachine;
     private final Callback mCallback;
 
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsActivity.kt b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsActivity.kt
index 73bb0b9..a4a0a84 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsActivity.kt
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsActivity.kt
@@ -19,7 +19,6 @@
 import androidx.appcompat.app.AppCompatActivity
 import androidx.recyclerview.widget.LinearLayoutManager
 import androidx.recyclerview.widget.RecyclerView
-
 import com.google.android.material.appbar.MaterialToolbar
 
 class SettingsActivity : AppCompatActivity() {
@@ -30,30 +29,31 @@
 
         val toolbar: MaterialToolbar = findViewById(R.id.settings_toolbar)
         setSupportActionBar(toolbar)
-        val settingsItems = arrayOf(
-            SettingsItem(
-                resources.getString(R.string.settings_disk_resize_title),
-                resources.getString(R.string.settings_disk_resize_sub_title),
-                R.drawable.baseline_storage_24,
-                SettingsItemEnum.DiskResize
-            ),
-            SettingsItem(
-                resources.getString(R.string.settings_port_forwarding_title),
-                resources.getString(R.string.settings_port_forwarding_sub_title),
-                R.drawable.baseline_call_missed_outgoing_24,
-                SettingsItemEnum.PortForwarding
-            ),
-            SettingsItem(
-                resources.getString(R.string.settings_recovery_title),
-                resources.getString(R.string.settings_recovery_sub_title),
-                R.drawable.baseline_settings_backup_restore_24,
-                SettingsItemEnum.Recovery
-            ),
-        )
+        val settingsItems =
+            arrayOf(
+                SettingsItem(
+                    resources.getString(R.string.settings_disk_resize_title),
+                    resources.getString(R.string.settings_disk_resize_sub_title),
+                    R.drawable.baseline_storage_24,
+                    SettingsItemEnum.DiskResize,
+                ),
+                SettingsItem(
+                    resources.getString(R.string.settings_port_forwarding_title),
+                    resources.getString(R.string.settings_port_forwarding_sub_title),
+                    R.drawable.baseline_call_missed_outgoing_24,
+                    SettingsItemEnum.PortForwarding,
+                ),
+                SettingsItem(
+                    resources.getString(R.string.settings_recovery_title),
+                    resources.getString(R.string.settings_recovery_sub_title),
+                    R.drawable.baseline_settings_backup_restore_24,
+                    SettingsItemEnum.Recovery,
+                ),
+            )
         val settingsListItemAdapter = SettingsItemAdapter(settingsItems)
 
         val recyclerView: RecyclerView = findViewById(R.id.settings_list_recycler_view)
         recyclerView.layoutManager = LinearLayoutManager(this)
         recyclerView.adapter = settingsListItemAdapter
     }
-}
\ No newline at end of file
+}
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsDiskResizeActivity.kt b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsDiskResizeActivity.kt
index 817808f..30475f5 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsDiskResizeActivity.kt
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsDiskResizeActivity.kt
@@ -17,111 +17,171 @@
 
 import android.content.Context
 import android.content.Intent
+import android.content.SharedPreferences
+import android.icu.text.MeasureFormat
+import android.icu.text.NumberFormat
+import android.icu.util.Measure
+import android.icu.util.MeasureUnit
 import android.os.Bundle
-import android.os.FileUtils
 import android.text.SpannableString
 import android.text.Spanned
 import android.text.TextUtils
-import android.text.format.Formatter
 import android.text.style.RelativeSizeSpan
+import android.view.View
+import android.widget.SeekBar
 import android.widget.TextView
 import androidx.appcompat.app.AppCompatActivity
 import androidx.core.view.isVisible
-import com.google.android.material.button.MaterialButton
-import com.google.android.material.slider.Slider
+import com.google.android.material.dialog.MaterialAlertDialogBuilder
+import java.util.Locale
 import java.util.regex.Pattern
 
 class SettingsDiskResizeActivity : AppCompatActivity() {
-    private val maxDiskSizeMb: Float = (16 shl 10).toFloat()
-    private val numberPattern: Pattern = Pattern.compile("[\\d]*[\\٫.,]?[\\d]+");
+    private val maxDiskSizeMb: Long = 16 shl 10
+    private val numberPattern: Pattern = Pattern.compile("[\\d]*[\\٫.,]?[\\d]+")
+
+    private var diskSizeStepMb: Long = 0
+    private var diskSizeMb: Long = 0
+    private lateinit var sharedPref: SharedPreferences
+    private lateinit var buttons: View
+    private lateinit var cancelButton: View
+    private lateinit var resizeButton: View
+    private lateinit var diskSizeText: TextView
+    private lateinit var diskSizeSlider: SeekBar
 
     private fun bytesToMb(bytes: Long): Long {
-        return bytes shr 20;
+        return bytes shr 20
     }
 
     private fun mbToBytes(bytes: Long): Long {
-        return bytes shl 20;
+        return bytes shl 20
+    }
+
+    private fun mbToProgress(bytes: Long): Int {
+        return (bytes / diskSizeStepMb).toInt()
+    }
+
+    private fun progressToMb(progress: Int): Long {
+        return progress * diskSizeStepMb
     }
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         setContentView(R.layout.settings_disk_resize)
-        val sharedPref =
+
+        diskSizeStepMb = 1L shl resources.getInteger(R.integer.disk_size_round_up_step_size_in_mb)
+
+        sharedPref =
             this.getSharedPreferences(getString(R.string.preference_file_key), Context.MODE_PRIVATE)
-        var diskSizeMb =
+        diskSizeMb =
             bytesToMb(
-                sharedPref.getLong(
-                    getString(R.string.preference_disk_size_key),
-                    0
-                )
-            ).toFloat();
-        val partition = InstallUtils.getRootfsFile(this)
-        val minDiskSizeMb =
-            bytesToMb(MainActivity.getMinFilesystemSize(partition)).toFloat()
-                .coerceAtMost(diskSizeMb)
-
-        val diskSizeText = findViewById<TextView>(R.id.settings_disk_resize_resize_gb_assigned)
-        val diskMaxSizeText = findViewById<TextView>(R.id.settings_disk_resize_resize_gb_max)
-        diskMaxSizeText.text = getString(R.string.settings_disk_resize_resize_gb_max_format,
-            localizedFileSize(maxDiskSizeMb)
-        );
-
-        val diskSizeSlider = findViewById<Slider>(R.id.settings_disk_resize_disk_size_slider)
-        diskSizeSlider.setValueTo(maxDiskSizeMb)
-        val cancelButton = findViewById<MaterialButton>(R.id.settings_disk_resize_cancel_button)
-        val resizeButton = findViewById<MaterialButton>(R.id.settings_disk_resize_resize_button)
-        diskSizeSlider.valueFrom = minDiskSizeMb
-        diskSizeSlider.valueTo = maxDiskSizeMb
-        diskSizeSlider.value = diskSizeMb
-        diskSizeSlider.stepSize =
-            resources.getInteger(R.integer.disk_size_round_up_step_size_in_mb).toFloat()
-        diskSizeSlider.setLabelFormatter { value: Float ->
-            localizedFileSize(value)
-        }
-        diskSizeText.text = enlargeFontOfNumber(
-            getString(R.string.settings_disk_resize_resize_gb_assigned_format,
-                localizedFileSize(diskSizeMb)
+                sharedPref.getLong(getString(R.string.preference_disk_size_key), /* defValue= */ 0)
             )
+        val image = InstalledImage.getDefault(this)
+        val minDiskSizeMb = bytesToMb(image.getSmallestSizePossible()).coerceAtMost(diskSizeMb)
+
+        diskSizeText = findViewById<TextView>(R.id.settings_disk_resize_resize_gb_assigned)!!
+        val diskMaxSizeText = findViewById<TextView>(R.id.settings_disk_resize_resize_gb_max)
+        diskMaxSizeText.text =
+            getString(
+                R.string.settings_disk_resize_resize_gb_max_format,
+                localizedFileSize(maxDiskSizeMb, /* isShort= */ true),
+            )
+
+        buttons = findViewById<View>(R.id.buttons)
+        diskSizeSlider = findViewById<SeekBar>(R.id.settings_disk_resize_disk_size_slider)!!
+        cancelButton = findViewById<View>(R.id.settings_disk_resize_cancel_button)
+        resizeButton = findViewById<View>(R.id.settings_disk_resize_resize_button)
+        diskSizeSlider.min = mbToProgress(minDiskSizeMb)
+        diskSizeSlider.max = mbToProgress(maxDiskSizeMb)
+        diskSizeSlider.progress = mbToProgress(diskSizeMb)
+        updateSliderText(diskSizeMb)
+
+        diskSizeSlider.setOnSeekBarChangeListener(
+            object : SeekBar.OnSeekBarChangeListener {
+                override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
+                    updateSliderText(progressToMb(progress))
+                    buttons.isVisible = true
+                    cancelButton.isVisible = true
+                    resizeButton.isVisible = true
+                }
+
+                override fun onStartTrackingTouch(seekBar: SeekBar?) {
+                    // no-op
+                }
+
+                override fun onStopTrackingTouch(seekBar: SeekBar?) {
+                    // no-op
+                }
+            }
         )
 
-        diskSizeSlider.addOnChangeListener { _, value, _ ->
-            diskSizeText.text = enlargeFontOfNumber(
-                getString(R.string.settings_disk_resize_resize_gb_assigned_format,
-                localizedFileSize(value)))
-            cancelButton.isVisible = true
-            resizeButton.isVisible = true
-        }
-        cancelButton.setOnClickListener {
-            diskSizeSlider.value = diskSizeMb
-            cancelButton.isVisible = false
-            resizeButton.isVisible = false
-        }
+        cancelButton.setOnClickListener { cancel() }
 
-        resizeButton.setOnClickListener {
-            diskSizeMb = diskSizeSlider.value
-            cancelButton.isVisible = false
-            resizeButton.isVisible = false
-            val editor = sharedPref.edit()
-            editor.putLong(
-                getString(R.string.preference_disk_size_key),
-                mbToBytes(diskSizeMb.toLong())
-            )
-            editor.apply()
-
-            // Restart terminal
-            val intent =
-                baseContext.packageManager.getLaunchIntentForPackage(baseContext.packageName)
-            intent?.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
-            finish()
-            startActivity(intent)
-        }
+        resizeButton.setOnClickListener { showConfirmationDialog() }
     }
 
-    fun localizedFileSize(sizeMb: Float): String {
-        // formatShortFileSize() uses SI unit (i.e. kB = 1000 bytes),
-        // so covert sizeMb with "MB" instead of "MIB".
-        val bytes = FileUtils.parseSize(sizeMb.toLong().toString() + "MB")
-        return Formatter.formatShortFileSize(this, bytes)
+    fun cancel() {
+        diskSizeSlider.progress = mbToProgress(diskSizeMb)
+        buttons.isVisible = false
+    }
+
+    fun showConfirmationDialog() {
+        MaterialAlertDialogBuilder(this)
+            .setTitle(R.string.settings_disk_resize_title)
+            .setMessage(R.string.settings_disk_resize_resize_confirm_dialog_message)
+            .setPositiveButton(R.string.settings_disk_resize_resize_confirm_dialog_confirm) { _, _
+                ->
+                resize()
+            }
+            .setNegativeButton(R.string.settings_disk_resize_resize_cancel) { _, _ -> cancel() }
+            .create()
+            .show()
+    }
+
+    fun resize() {
+        diskSizeMb = progressToMb(diskSizeSlider.progress)
+        buttons.isVisible = false
+        val editor = sharedPref.edit()
+        editor.putLong(getString(R.string.preference_disk_size_key), mbToBytes(diskSizeMb))
+        editor.apply()
+
+        // Restart terminal
+        val intent = baseContext.packageManager.getLaunchIntentForPackage(baseContext.packageName)
+        intent?.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
+        finish()
+        startActivity(intent)
+    }
+
+    fun updateSliderText(sizeMb: Long) {
+        diskSizeText.text =
+            enlargeFontOfNumber(
+                getString(
+                    R.string.settings_disk_resize_resize_gb_assigned_format,
+                    localizedFileSize(sizeMb, /* isShort= */ true),
+                )
+            )
+        diskSizeSlider.stateDescription =
+            getString(
+                R.string.settings_disk_resize_resize_gb_assigned_format,
+                localizedFileSize(sizeMb, /* isShort= */ false),
+            )
+    }
+
+    fun localizedFileSize(sizeMb: Long, isShort: Boolean): String {
+        val sizeGb = sizeMb / (1 shl 10).toFloat()
+        val measure = Measure(sizeGb, MeasureUnit.GIGABYTE)
+
+        val localeFromContext: Locale = resources.configuration.locales[0]
+        val numberFormatter: NumberFormat = NumberFormat.getInstance(localeFromContext)
+        numberFormatter.minimumFractionDigits = 1
+        numberFormatter.maximumFractionDigits = 1
+
+        val formatWidth =
+            if (isShort) MeasureFormat.FormatWidth.SHORT else MeasureFormat.FormatWidth.WIDE
+        val measureFormat: MeasureFormat =
+            MeasureFormat.getInstance(localeFromContext, formatWidth, numberFormatter)
+        return measureFormat.format(measure)
     }
 
     fun enlargeFontOfNumber(summary: CharSequence): CharSequence {
@@ -129,16 +189,17 @@
             return ""
         }
 
-        val matcher = numberPattern.matcher(summary);
+        val matcher = numberPattern.matcher(summary)
         if (matcher.find()) {
             val spannableSummary = SpannableString(summary)
             spannableSummary.setSpan(
-                    RelativeSizeSpan(2f),
-                    matcher.start(),
-                    matcher.end(),
-                    Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
+                RelativeSizeSpan(2f),
+                matcher.start(),
+                matcher.end(),
+                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE,
+            )
             return spannableSummary
         }
         return summary
     }
-}
\ No newline at end of file
+}
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsItem.kt b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsItem.kt
index e1723a7..5098ecd 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsItem.kt
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsItem.kt
@@ -16,13 +16,14 @@
 package com.android.virtualization.terminal
 
 enum class SettingsItemEnum {
-    DiskResize, PortForwarding, Recovery
+    DiskResize,
+    PortForwarding,
+    Recovery,
 }
 
 class SettingsItem(
     val title: String,
     val subTitle: String,
     val icon: Int,
-    val settingsItemEnum: SettingsItemEnum
-) {
-}
\ No newline at end of file
+    val settingsItemEnum: SettingsItemEnum,
+) {}
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsItemAdapter.kt b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsItemAdapter.kt
index 86f5c92..132d749 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsItemAdapter.kt
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsItemAdapter.kt
@@ -35,8 +35,9 @@
     }
 
     override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): ViewHolder {
-        val view = LayoutInflater.from(viewGroup.context)
-            .inflate(R.layout.settings_list_item, viewGroup, false)
+        val view =
+            LayoutInflater.from(viewGroup.context)
+                .inflate(R.layout.settings_list_item, viewGroup, false)
         return ViewHolder(view)
     }
 
@@ -46,17 +47,19 @@
         viewHolder.subTitle.text = dataSet[position].subTitle
 
         viewHolder.card.setOnClickListener { view ->
-            val intent = Intent(
-                viewHolder.itemView.context,
-                when (dataSet[position].settingsItemEnum) {
-                    SettingsItemEnum.DiskResize -> SettingsDiskResizeActivity::class.java
-                    SettingsItemEnum.PortForwarding -> SettingsPortForwardingActivity::class.java
-                    SettingsItemEnum.Recovery -> SettingsRecoveryActivity::class.java
-                }
-            )
+            val intent =
+                Intent(
+                    viewHolder.itemView.context,
+                    when (dataSet[position].settingsItemEnum) {
+                        SettingsItemEnum.DiskResize -> SettingsDiskResizeActivity::class.java
+                        SettingsItemEnum.PortForwarding ->
+                            SettingsPortForwardingActivity::class.java
+                        SettingsItemEnum.Recovery -> SettingsRecoveryActivity::class.java
+                    },
+                )
             view.context.startActivity(intent)
         }
     }
 
     override fun getItemCount() = dataSet.size
-}
\ No newline at end of file
+}
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsPortForwardingActivity.kt b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsPortForwardingActivity.kt
index a1509ad..d64c267 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsPortForwardingActivity.kt
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsPortForwardingActivity.kt
@@ -15,95 +15,34 @@
  */
 package com.android.virtualization.terminal
 
-import android.Manifest
-import android.app.Notification
-import android.app.NotificationManager
-import android.app.PendingIntent
-import android.content.Context
-import android.content.Intent
-import android.content.pm.PackageManager
-import android.graphics.drawable.Icon
 import android.os.Bundle
 import androidx.appcompat.app.AppCompatActivity
-import androidx.core.app.ActivityCompat
 import androidx.recyclerview.widget.LinearLayoutManager
 import androidx.recyclerview.widget.RecyclerView
 
 class SettingsPortForwardingActivity : AppCompatActivity() {
-    val TAG: String = "VmTerminalApp"
+    private lateinit var mPortsStateManager: PortsStateManager
+    private lateinit var mAdapter: SettingsPortForwardingAdapter
+
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         setContentView(R.layout.settings_port_forwarding)
 
-        val settingsPortForwardingItems = ArrayList<SettingsPortForwardingItem>()
-
-        val sharedPref = this.getSharedPreferences(
-            getString(R.string.preference_file_key), Context.MODE_PRIVATE
-        )
-
-        val ports =
-            sharedPref.getStringSet(
-                getString(R.string.preference_forwarding_ports),
-                HashSet<String>()
-            )
-
-        for (port in ports!!) {
-            val enabled =
-                sharedPref.getBoolean(
-                    getString(R.string.preference_forwarding_port_is_enabled) + port,
-                    false
-                )
-            settingsPortForwardingItems.add(SettingsPortForwardingItem(port.toInt(), enabled));
-        }
-
-        val settingsPortForwardingAdapter =
-            SettingsPortForwardingAdapter(settingsPortForwardingItems, this)
+        mPortsStateManager = PortsStateManager.getInstance(this)
+        mAdapter = SettingsPortForwardingAdapter(mPortsStateManager)
 
         val recyclerView: RecyclerView = findViewById(R.id.settings_port_forwarding_recycler_view)
         recyclerView.layoutManager = LinearLayoutManager(this)
-        recyclerView.adapter = settingsPortForwardingAdapter
-
-        // TODO: implement intent for accept, deny and tap to the notification
-        // Currently show a mock notification of a port opening
-        val terminalIntent = Intent()
-        val pendingIntent = PendingIntent.getActivity(
-            this, 0, terminalIntent,
-            PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
-        )
-        val notification =
-            Notification.Builder(this, TAG)
-                .setChannelId(TAG)
-                .setSmallIcon(R.drawable.ic_launcher_foreground)
-                .setContentTitle(resources.getString(R.string.settings_port_forwarding_notification_title))
-                .setContentText(
-                    resources.getString(
-                        R.string.settings_port_forwarding_notification_content,
-                        8080
-                    )
-                )
-                .addAction(
-                    Notification.Action.Builder(
-                        Icon.createWithResource(resources, R.drawable.ic_launcher_foreground),
-                        resources.getString(R.string.settings_port_forwarding_notification_accept),
-                        pendingIntent
-                    ).build()
-                )
-                .addAction(
-                    Notification.Action.Builder(
-                        Icon.createWithResource(resources, R.drawable.ic_launcher_foreground),
-                        resources.getString(R.string.settings_port_forwarding_notification_deny),
-                        pendingIntent
-                    ).build()
-                )
-                .build()
-
-        with(NotificationManager.from(this)) {
-            if (ActivityCompat.checkSelfPermission(
-                    this@SettingsPortForwardingActivity, Manifest.permission.POST_NOTIFICATIONS
-                ) == PackageManager.PERMISSION_GRANTED
-            ) {
-                notify(0, notification)
-            }
-        }
+        recyclerView.adapter = mAdapter
     }
-}
\ No newline at end of file
+
+    override fun onResume() {
+        super.onResume()
+        mAdapter.registerPortsStateListener()
+    }
+
+    override fun onPause() {
+        mAdapter.unregisterPortsStateListener()
+        super.onPause()
+    }
+}
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsPortForwardingAdapter.kt b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsPortForwardingAdapter.kt
index 904f7f6..8282910 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsPortForwardingAdapter.kt
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsPortForwardingAdapter.kt
@@ -15,21 +15,69 @@
  */
 package com.android.virtualization.terminal
 
-import android.content.Context
-import android.content.SharedPreferences
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
 import android.widget.TextView
 import androidx.recyclerview.widget.RecyclerView
+import androidx.recyclerview.widget.SortedList
+import androidx.recyclerview.widget.SortedListAdapterCallback
 import com.google.android.material.materialswitch.MaterialSwitch
 
-class SettingsPortForwardingAdapter(
-    private val dataSet: ArrayList<SettingsPortForwardingItem>,
-    private val context: Context
-) :
+class SettingsPortForwardingAdapter(private val mPortsStateManager: PortsStateManager) :
     RecyclerView.Adapter<SettingsPortForwardingAdapter.ViewHolder>() {
 
+    private var mItems: SortedList<SettingsPortForwardingItem>
+    private val mPortsStateListener: Listener
+
+    init {
+        mItems =
+            SortedList(
+                SettingsPortForwardingItem::class.java,
+                object : SortedListAdapterCallback<SettingsPortForwardingItem>(this) {
+                    override fun compare(
+                        o1: SettingsPortForwardingItem,
+                        o2: SettingsPortForwardingItem,
+                    ): Int {
+                        return o1.port - o2.port
+                    }
+
+                    override fun areContentsTheSame(
+                        o1: SettingsPortForwardingItem,
+                        o2: SettingsPortForwardingItem,
+                    ): Boolean {
+                        return o1.port == o2.port && o1.enabled == o2.enabled
+                    }
+
+                    override fun areItemsTheSame(
+                        o1: SettingsPortForwardingItem,
+                        o2: SettingsPortForwardingItem,
+                    ): Boolean {
+                        return o1.port == o2.port
+                    }
+                },
+            )
+        mItems.addAll(getCurrentSettingsPortForwardingItem())
+        mPortsStateListener = Listener()
+    }
+
+    fun registerPortsStateListener() {
+        mPortsStateManager.registerListener(mPortsStateListener)
+        mItems.replaceAll(getCurrentSettingsPortForwardingItem())
+    }
+
+    fun unregisterPortsStateListener() {
+        mPortsStateManager.unregisterListener(mPortsStateListener)
+    }
+
+    private fun getCurrentSettingsPortForwardingItem(): ArrayList<SettingsPortForwardingItem> {
+        val enabledPorts = mPortsStateManager.getEnabledPorts()
+        return mPortsStateManager
+            .getActivePorts()
+            .map { SettingsPortForwardingItem(it, enabledPorts.contains(it)) }
+            .toCollection(ArrayList())
+    }
+
     class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
         val enabledSwitch: MaterialSwitch =
             view.findViewById(R.id.settings_port_forwarding_item_enabled_switch)
@@ -37,26 +85,27 @@
     }
 
     override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): ViewHolder {
-        val view = LayoutInflater.from(viewGroup.context)
-            .inflate(R.layout.settings_port_forwarding_item, viewGroup, false)
+        val view =
+            LayoutInflater.from(viewGroup.context)
+                .inflate(R.layout.settings_port_forwarding_item, viewGroup, false)
         return ViewHolder(view)
     }
 
     override fun onBindViewHolder(viewHolder: ViewHolder, position: Int) {
-        viewHolder.port.text = dataSet[position].port.toString()
-        viewHolder.enabledSwitch.isChecked = dataSet[position].enabled
+        val port = mItems[position].port
+        viewHolder.port.text = port.toString()
+        viewHolder.enabledSwitch.contentDescription = viewHolder.port.text
+        viewHolder.enabledSwitch.isChecked = mItems[position].enabled
         viewHolder.enabledSwitch.setOnCheckedChangeListener { _, isChecked ->
-            val sharedPref: SharedPreferences = context.getSharedPreferences(
-                context.getString(R.string.preference_file_key), Context.MODE_PRIVATE
-            )
-            val editor = sharedPref.edit()
-            editor.putBoolean(
-                context.getString(R.string.preference_forwarding_port_is_enabled) + viewHolder.port.text,
-                isChecked
-            )
-            editor.apply()
+            mPortsStateManager.updateEnabledPort(port, isChecked)
         }
     }
 
-    override fun getItemCount() = dataSet.size
-}
\ No newline at end of file
+    override fun getItemCount() = mItems.size()
+
+    private inner class Listener : PortsStateManager.Listener {
+        override fun onPortsStateUpdated(oldActivePorts: Set<Int>, newActivePorts: Set<Int>) {
+            mItems.replaceAll(getCurrentSettingsPortForwardingItem())
+        }
+    }
+}
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsRecoveryActivity.kt b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsRecoveryActivity.kt
index ef76e03..0d74eb0 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsRecoveryActivity.kt
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsRecoveryActivity.kt
@@ -22,6 +22,7 @@
 import androidx.appcompat.app.AppCompatActivity
 import androidx.core.view.isVisible
 import androidx.lifecycle.lifecycleScope
+import com.android.virtualization.terminal.MainActivity.TAG
 import com.google.android.material.card.MaterialCardView
 import com.google.android.material.dialog.MaterialAlertDialogBuilder
 import com.google.android.material.snackbar.Snackbar
@@ -30,97 +31,111 @@
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.launch
 
-const val TAG: String = "VmTerminalApp"
-
 class SettingsRecoveryActivity : AppCompatActivity() {
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         setContentView(R.layout.settings_recovery)
+
         val resetCard = findViewById<MaterialCardView>(R.id.settings_recovery_reset_card)
         resetCard.setOnClickListener {
             var backupRootfs = false
-            val dialog = MaterialAlertDialogBuilder(this)
-                .setTitle(R.string.settings_recovery_reset_dialog_title)
-                .setMultiChoiceItems(arrayOf(getString(R.string.settings_recovery_reset_dialog_backup_option)), booleanArrayOf(backupRootfs)) {_, _, checked ->
-                    backupRootfs = checked
-                }
-                .setPositiveButton(R.string.settings_recovery_reset_dialog_confirm) { _, _ ->
-                    // This coroutine will be killed when the activity is killed. The behavior is both acceptable
-                    // either removing is done or not
-                    runInBackgroundAndRestartApp {
-                        uninstall(backupRootfs)
+            val dialog =
+                MaterialAlertDialogBuilder(this)
+                    .setTitle(R.string.settings_recovery_reset_dialog_title)
+                    .setMultiChoiceItems(
+                        arrayOf(getString(R.string.settings_recovery_reset_dialog_backup_option)),
+                        booleanArrayOf(backupRootfs),
+                    ) { _, _, checked ->
+                        backupRootfs = checked
                     }
-                }
-                .setNegativeButton(R.string.settings_recovery_reset_dialog_cancel) { dialog, _ -> dialog.dismiss() }
-                .create()
+                    .setPositiveButton(R.string.settings_recovery_reset_dialog_confirm) { _, _ ->
+                        // This coroutine will be killed when the activity is killed. Either
+                        // finishing removing or not is acceptable behavior.
+                        runInBackgroundAndRestartApp { uninstall(backupRootfs) }
+                    }
+                    .setNegativeButton(R.string.settings_recovery_reset_dialog_cancel) { dialog, _
+                        ->
+                        dialog.dismiss()
+                    }
+                    .create()
             dialog.show()
         }
         val resetBackupCard = findViewById<View>(R.id.settings_recovery_reset_backup_card)
-        resetBackupCard.isVisible = InstallUtils.getBackupFile(this).exists()
+
+        resetBackupCard.isVisible = InstalledImage.getDefault(this).hasBackup()
 
         resetBackupCard.setOnClickListener {
-            val dialog = MaterialAlertDialogBuilder(this)
-                .setTitle(R.string.settings_recovery_remove_backup_title)
-                .setMessage(R.string.settings_recovery_remove_backup_sub_title)
-                .setPositiveButton(R.string.settings_recovery_reset_dialog_confirm) { _, _ ->
-                    runInBackgroundAndRestartApp {
-                        removeBackup()
+            val dialog =
+                MaterialAlertDialogBuilder(this)
+                    .setTitle(R.string.settings_recovery_remove_backup_title)
+                    .setMessage(R.string.settings_recovery_remove_backup_sub_title)
+                    .setPositiveButton(R.string.settings_recovery_reset_dialog_confirm) { _, _ ->
+                        runInBackgroundAndRestartApp { removeBackup() }
                     }
-                }
-                .setNegativeButton(R.string.settings_recovery_reset_dialog_cancel) { dialog, _ -> dialog.dismiss() }
-                .create()
+                    .setNegativeButton(R.string.settings_recovery_reset_dialog_cancel) { dialog, _
+                        ->
+                        dialog.dismiss()
+                    }
+                    .create()
             dialog.show()
         }
     }
 
     private fun removeBackup(): Unit {
-        if (!InstallUtils.getBackupFile(this@SettingsRecoveryActivity).delete()) {
+        try {
+            InstalledImage.getDefault(this).deleteBackup()
+        } catch (e: IOException) {
             Snackbar.make(
-                findViewById(android.R.id.content),
-                R.string.settings_recovery_error_during_removing_backup,
-                Snackbar.LENGTH_SHORT
-            ).show();
+                    findViewById(android.R.id.content),
+                    R.string.settings_recovery_error_during_removing_backup,
+                    Snackbar.LENGTH_SHORT,
+                )
+                .show()
             Log.e(TAG, "cannot remove backup")
         }
     }
 
     private fun uninstall(backupRootfs: Boolean): Unit {
         var backupDone = false
+        val image = InstalledImage.getDefault(this)
         try {
             if (backupRootfs) {
-                InstallUtils.backupRootFs(this@SettingsRecoveryActivity)
+                image.uninstallAndBackup()
                 backupDone = true
+            } else {
+                image.uninstallFully()
             }
-            InstallUtils.deleteInstallation(this@SettingsRecoveryActivity)
         } catch (e: IOException) {
-            val errorMsgId = if (backupRootfs && !backupDone) R.string.settings_recovery_error_due_to_backup
-                    else R.string.settings_recovery_error;
-            Snackbar.make(
-                findViewById(android.R.id.content),
-                errorMsgId,
-                Snackbar.LENGTH_SHORT
-            ).show();
+            val errorMsgId =
+                if (backupRootfs && !backupDone) R.string.settings_recovery_error_due_to_backup
+                else R.string.settings_recovery_error
+            Snackbar.make(findViewById(android.R.id.content), errorMsgId, Snackbar.LENGTH_SHORT)
+                .show()
             Log.e(TAG, "cannot recovery ", e)
         }
     }
 
-    private fun runInBackgroundAndRestartApp(backgroundWork: suspend CoroutineScope.() -> Unit): Unit {
+    private fun runInBackgroundAndRestartApp(
+        backgroundWork: suspend CoroutineScope.() -> Unit
+    ): Unit {
         findViewById<View>(R.id.setting_recovery_card_container).visibility = View.INVISIBLE
         findViewById<View>(R.id.recovery_boot_progress).visibility = View.VISIBLE
-        lifecycleScope.launch(Dispatchers.IO) {
-            backgroundWork()
-        }.invokeOnCompletion {
-            runOnUiThread {
-                findViewById<View>(R.id.setting_recovery_card_container).visibility =
-                    View.VISIBLE
-                findViewById<View>(R.id.recovery_boot_progress).visibility = View.INVISIBLE
-                // Restart terminal
-                val intent =
-                    baseContext.packageManager.getLaunchIntentForPackage(baseContext.packageName)
-                intent?.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
-                finish()
-                startActivity(intent)
+        lifecycleScope
+            .launch(Dispatchers.IO) { backgroundWork() }
+            .invokeOnCompletion {
+                runOnUiThread {
+                    findViewById<View>(R.id.setting_recovery_card_container).visibility =
+                        View.VISIBLE
+                    findViewById<View>(R.id.recovery_boot_progress).visibility = View.INVISIBLE
+                    // Restart terminal
+                    val intent =
+                        baseContext.packageManager.getLaunchIntentForPackage(
+                            baseContext.packageName
+                        )
+                    intent?.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
+                    finish()
+                    startActivity(intent)
+                }
             }
-        }
     }
-}
\ No newline at end of file
+}
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/SplitInitializer.kt b/android/TerminalApp/java/com/android/virtualization/terminal/SplitInitializer.kt
index cb917bd..7562779 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/SplitInitializer.kt
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/SplitInitializer.kt
@@ -30,4 +30,4 @@
     override fun dependencies(): List<Class<out Initializer<*>>> {
         return emptyList()
     }
-}
\ No newline at end of file
+}
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/TerminalView.java b/android/TerminalApp/java/com/android/virtualization/terminal/TerminalView.java
index 2ba6e74..c57c4c0 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/TerminalView.java
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/TerminalView.java
@@ -38,6 +38,8 @@
 import android.view.inputmethod.InputConnection;
 import android.webkit.WebView;
 
+import java.io.IOException;
+import java.io.InputStream;
 import java.util.List;
 
 public class TerminalView extends WebView
@@ -46,6 +48,10 @@
     // arbitrarily set. We may want to adjust this in the future.
     private static final int TEXT_TOO_LONG_TO_ANNOUNCE = 200;
 
+    private final String CTRL_KEY_HANDLER;
+    private final String ENABLE_CTRL_KEY;
+    private final String TOUCH_TO_MOUSE_HANDLER;
+
     private final AccessibilityManager mA11yManager;
 
     public TerminalView(Context context, AttributeSet attrs) {
@@ -55,6 +61,32 @@
         mA11yManager.addTouchExplorationStateChangeListener(this);
         mA11yManager.addAccessibilityStateChangeListener(this);
         adjustToA11yStateChange();
+        try {
+            CTRL_KEY_HANDLER = readAssetAsString(context, "js/ctrl_key_handler.js");
+            ENABLE_CTRL_KEY = readAssetAsString(context, "js/enable_ctrl_key.js");
+            TOUCH_TO_MOUSE_HANDLER = readAssetAsString(context, "js/touch_to_mouse_handler.js");
+        } catch (IOException e) {
+            // It cannot happen
+            throw new IllegalArgumentException("cannot read code from asset", e);
+        }
+    }
+
+    private String readAssetAsString(Context context, String filePath) throws IOException {
+        try (InputStream is = context.getAssets().open(filePath)) {
+            return new String(is.readAllBytes());
+        }
+    }
+
+    public void mapTouchToMouseEvent() {
+        this.evaluateJavascript(TOUCH_TO_MOUSE_HANDLER, null);
+    }
+
+    public void mapCtrlKey() {
+        this.evaluateJavascript(CTRL_KEY_HANDLER, null);
+    }
+
+    public void enableCtrlKey() {
+        this.evaluateJavascript(ENABLE_CTRL_KEY, null);
     }
 
     @Override
@@ -183,6 +215,8 @@
                             if (id != View.NO_ID) {
                                 info.setText(null);
                                 info.setContentDescription(getString(R.string.terminal_display));
+                                // b/376827536
+                                info.setHintText(getString(R.string.double_tap_to_edit_text));
                             }
 
                             // These two lines below are to prevent this WebView element from being
@@ -197,6 +231,8 @@
                             // Localize the spoken text.
                             if (isEmptyLine(info)) {
                                 info.setContentDescription(getString(R.string.empty_line));
+                                // b/376827536
+                                info.setHintText(getString(R.string.double_tap_to_edit_text));
                             }
                             break;
                         case "android.widget.TextView":
@@ -211,6 +247,7 @@
                             info.getBoundsInScreen(rect);
                             if (rect.width() == 0) {
                                 info.setText(null);
+                                info.setContentDescription(getString(R.string.empty_line));
                             }
                             info.setScreenReaderFocusable(false);
                             break;
@@ -269,10 +306,7 @@
     public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
         InputConnection inputConnection = super.onCreateInputConnection(outAttrs);
         if (outAttrs != null) {
-            // TODO(b/378642568): consider using InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
-            // here..
-            outAttrs.inputType =
-                    InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS;
+            outAttrs.inputType |= InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS;
         }
         return inputConnection;
     }
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/VmLauncherService.java b/android/TerminalApp/java/com/android/virtualization/terminal/VmLauncherService.java
index 25afcb7..a82c688 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/VmLauncherService.java
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/VmLauncherService.java
@@ -16,11 +16,18 @@
 
 package com.android.virtualization.terminal;
 
+import static com.android.virtualization.terminal.MainActivity.TAG;
+
 import android.app.Notification;
+import android.app.NotificationManager;
 import android.app.Service;
+import android.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
+import android.os.Handler;
 import android.os.IBinder;
+import android.os.Looper;
+import android.os.Parcel;
 import android.os.ResultReceiver;
 import android.system.virtualmachine.VirtualMachine;
 import android.system.virtualmachine.VirtualMachineConfig;
@@ -28,6 +35,7 @@
 import android.system.virtualmachine.VirtualMachineCustomImageConfig.Disk;
 import android.system.virtualmachine.VirtualMachineException;
 import android.util.Log;
+import android.widget.Toast;
 
 import io.grpc.Grpc;
 import io.grpc.InsecureServerCredentials;
@@ -43,14 +51,20 @@
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.net.InetSocketAddress;
+import java.nio.file.Files;
 import java.nio.file.Path;
 import java.util.Objects;
+import java.util.Set;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
 public class VmLauncherService extends Service implements DebianServiceImpl.DebianServiceCallback {
-    public static final String EXTRA_NOTIFICATION = "EXTRA_NOTIFICATION";
-    private static final String TAG = "VmLauncherService";
+    private static final String EXTRA_NOTIFICATION = "EXTRA_NOTIFICATION";
+    private static final String ACTION_START_VM_LAUNCHER_SERVICE =
+            "android.virtualization.START_VM_LAUNCHER_SERVICE";
+
+    public static final String ACTION_STOP_VM_LAUNCHER_SERVICE =
+            "android.virtualization.STOP_VM_LAUNCHER_SERVICE";
 
     private static final int RESULT_START = 0;
     private static final int RESULT_STOP = 1;
@@ -63,20 +77,73 @@
     private ResultReceiver mResultReceiver;
     private Server mServer;
     private DebianServiceImpl mDebianService;
+    private PortNotifier mPortNotifier;
+
+    private static Intent getMyIntent(Context context) {
+        return new Intent(context.getApplicationContext(), VmLauncherService.class);
+    }
+
+    public interface VmLauncherServiceCallback {
+        void onVmStart();
+
+        void onVmStop();
+
+        void onVmError();
+
+        void onIpAddrAvailable(String ipAddr);
+    }
+
+    public static void run(
+            Context context, VmLauncherServiceCallback callback, Notification notification) {
+        Intent i = getMyIntent(context);
+        if (i == null) {
+            return;
+        }
+        ResultReceiver resultReceiver =
+                new ResultReceiver(new Handler(Looper.myLooper())) {
+                    @Override
+                    protected void onReceiveResult(int resultCode, Bundle resultData) {
+                        if (callback == null) {
+                            return;
+                        }
+                        switch (resultCode) {
+                            case RESULT_START:
+                                callback.onVmStart();
+                                return;
+                            case RESULT_STOP:
+                                callback.onVmStop();
+                                return;
+                            case RESULT_ERROR:
+                                callback.onVmError();
+                                return;
+                            case RESULT_IPADDR:
+                                callback.onIpAddrAvailable(resultData.getString(KEY_VM_IP_ADDR));
+                                return;
+                        }
+                    }
+                };
+        i.putExtra(Intent.EXTRA_RESULT_RECEIVER, getResultReceiverForIntent(resultReceiver));
+        i.putExtra(VmLauncherService.EXTRA_NOTIFICATION, notification);
+        context.startForegroundService(i);
+    }
+
+    private static ResultReceiver getResultReceiverForIntent(ResultReceiver r) {
+        Parcel parcel = Parcel.obtain();
+        r.writeToParcel(parcel, 0);
+        parcel.setDataPosition(0);
+        r = ResultReceiver.CREATOR.createFromParcel(parcel);
+        parcel.recycle();
+        return r;
+    }
 
     @Override
     public IBinder onBind(Intent intent) {
         return null;
     }
 
-    private void startForeground(Notification notification) {
-        startForeground(this.hashCode(), notification);
-    }
-
     @Override
     public int onStartCommand(Intent intent, int flags, int startId) {
-        if (Objects.equals(
-                intent.getAction(), VmLauncherServices.ACTION_STOP_VM_LAUNCHER_SERVICE)) {
+        if (Objects.equals(intent.getAction(), ACTION_STOP_VM_LAUNCHER_SERVICE)) {
             stopSelf();
             return START_NOT_STICKY;
         }
@@ -86,13 +153,12 @@
         }
         mExecutorService = Executors.newCachedThreadPool();
 
-        ConfigJson json = ConfigJson.from(InstallUtils.getVmConfigPath(this));
+        InstalledImage image = InstalledImage.getDefault(this);
+        ConfigJson json = ConfigJson.from(this, image.getConfigPath());
         VirtualMachineConfig.Builder configBuilder = json.toConfigBuilder(this);
         VirtualMachineCustomImageConfig.Builder customImageConfigBuilder =
                 json.toCustomImageConfigBuilder(this);
-        File backupFile = InstallUtils.getBackupFile(this);
-        if (backupFile.exists()) {
-            customImageConfigBuilder.addDisk(Disk.RWDisk(backupFile.getPath()));
+        if (overrideConfigIfNecessary(customImageConfigBuilder)) {
             configBuilder.setCustomImageConfig(customImageConfigBuilder.build());
         }
         VirtualMachineConfig config = configBuilder.build();
@@ -126,32 +192,41 @@
         Notification notification =
                 intent.getParcelableExtra(EXTRA_NOTIFICATION, Notification.class);
 
-        startForeground(notification);
+        startForeground(this.hashCode(), notification);
 
         mResultReceiver.send(RESULT_START, null);
 
+        mPortNotifier = new PortNotifier(this);
         startDebianServer();
 
         return START_NOT_STICKY;
     }
 
-    @Override
-    public void onDestroy() {
-        super.onDestroy();
-        stopDebianServer();
-        if (mVirtualMachine != null) {
-            if (mVirtualMachine.getStatus() == VirtualMachine.STATUS_RUNNING) {
-                try {
-                    mVirtualMachine.stop();
-                    stopForeground(STOP_FOREGROUND_REMOVE);
-                } catch (VirtualMachineException e) {
-                    Log.e(TAG, "failed to stop a VM instance", e);
-                }
-            }
-            mExecutorService.shutdownNow();
-            mExecutorService = null;
-            mVirtualMachine = null;
+    private boolean overrideConfigIfNecessary(VirtualMachineCustomImageConfig.Builder builder) {
+        boolean changed = false;
+        // TODO: check if ANGLE is enabled for the app.
+        if (Files.exists(ImageArchive.getSdcardPathForTesting().resolve("virglrenderer"))) {
+            builder.setGpuConfig(
+                    new VirtualMachineCustomImageConfig.GpuConfig.Builder()
+                            .setBackend("virglrenderer")
+                            .setRendererUseEgl(true)
+                            .setRendererUseGles(true)
+                            .setRendererUseGlx(false)
+                            .setRendererUseSurfaceless(true)
+                            .setRendererUseVulkan(false)
+                            .setContextTypes(new String[] {"virgl2"})
+                            .build());
+            Toast.makeText(this, R.string.virgl_enabled, Toast.LENGTH_SHORT).show();
+            changed = true;
         }
+
+        InstalledImage image = InstalledImage.getDefault(this);
+        if (image.hasBackup()) {
+            Path backup = image.getBackupFile();
+            builder.addDisk(Disk.RWDisk(backup.toString()));
+            changed = true;
+        }
+        return changed;
     }
 
     private void startDebianServer() {
@@ -208,6 +283,40 @@
                 });
     }
 
+    @Override
+    public void onIpAddressAvailable(String ipAddr) {
+        android.os.Trace.endAsyncSection("debianBoot", 0);
+        Bundle b = new Bundle();
+        b.putString(VmLauncherService.KEY_VM_IP_ADDR, ipAddr);
+        mResultReceiver.send(VmLauncherService.RESULT_IPADDR, b);
+    }
+
+    public static void stop(Context context) {
+        Intent i = getMyIntent(context);
+        context.stopService(i);
+    }
+
+    @Override
+    public void onDestroy() {
+        mPortNotifier.stop();
+        getSystemService(NotificationManager.class).cancelAll();
+        stopDebianServer();
+        if (mVirtualMachine != null) {
+            if (mVirtualMachine.getStatus() == VirtualMachine.STATUS_RUNNING) {
+                try {
+                    mVirtualMachine.stop();
+                    stopForeground(STOP_FOREGROUND_REMOVE);
+                } catch (VirtualMachineException e) {
+                    Log.e(TAG, "failed to stop a VM instance", e);
+                }
+            }
+            mExecutorService.shutdownNow();
+            mExecutorService = null;
+            mVirtualMachine = null;
+        }
+        super.onDestroy();
+    }
+
     private void stopDebianServer() {
         if (mDebianService != null) {
             mDebianService.killForwarderHost();
@@ -216,12 +325,4 @@
             mServer.shutdown();
         }
     }
-
-    @Override
-    public void onIpAddressAvailable(String ipAddr) {
-        android.os.Trace.endAsyncSection("debianBoot", 0);
-        Bundle b = new Bundle();
-        b.putString(VmLauncherService.KEY_VM_IP_ADDR, ipAddr);
-        mResultReceiver.send(VmLauncherService.RESULT_IPADDR, b);
-    }
 }
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/VmLauncherServices.java b/android/TerminalApp/java/com/android/virtualization/terminal/VmLauncherServices.java
deleted file mode 100644
index d6c6786..0000000
--- a/android/TerminalApp/java/com/android/virtualization/terminal/VmLauncherServices.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright (C) 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.
- */
-
-package com.android.virtualization.terminal;
-
-import android.app.Notification;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.Looper;
-import android.os.Parcel;
-import android.os.ResultReceiver;
-import android.util.Log;
-
-import java.util.List;
-
-public class VmLauncherServices {
-    private static final String TAG = "VmLauncherServices";
-
-    private static final String ACTION_START_VM_LAUNCHER_SERVICE =
-            "android.virtualization.START_VM_LAUNCHER_SERVICE";
-
-    public static final String ACTION_STOP_VM_LAUNCHER_SERVICE =
-            "android.virtualization.STOP_VM_LAUNCHER_SERVICE";
-    private static final int RESULT_START = 0;
-    private static final int RESULT_STOP = 1;
-    private static final int RESULT_ERROR = 2;
-    private static final int RESULT_IPADDR = 3;
-    private static final String KEY_VM_IP_ADDR = "ip_addr";
-
-    private static Intent buildVmLauncherServiceIntent(Context context) {
-        Intent i = new Intent();
-        i.setAction(ACTION_START_VM_LAUNCHER_SERVICE);
-
-        Intent intent = new Intent(ACTION_START_VM_LAUNCHER_SERVICE);
-        PackageManager pm = context.getPackageManager();
-        List<ResolveInfo> resolveInfos =
-                pm.queryIntentServices(intent, PackageManager.MATCH_DEFAULT_ONLY);
-        if (resolveInfos == null || resolveInfos.size() != 1) {
-            Log.e(TAG, "cannot find a service to handle ACTION_START_VM_LAUNCHER_SERVICE");
-            return null;
-        }
-        String packageName = resolveInfos.get(0).serviceInfo.packageName;
-
-        i.setPackage(packageName);
-        return i;
-    }
-
-    public static void stopVmLauncherService(Context context) {
-        Intent i = buildVmLauncherServiceIntent(context);
-        context.stopService(i);
-    }
-
-    public static void startVmLauncherService(
-            Context context, VmLauncherServiceCallback callback, Notification notification) {
-        Intent i = buildVmLauncherServiceIntent(context);
-        if (i == null) {
-            return;
-        }
-        ResultReceiver resultReceiver =
-                new ResultReceiver(new Handler(Looper.myLooper())) {
-                    @Override
-                    protected void onReceiveResult(int resultCode, Bundle resultData) {
-                        if (callback == null) {
-                            return;
-                        }
-                        switch (resultCode) {
-                            case RESULT_START:
-                                callback.onVmStart();
-                                return;
-                            case RESULT_STOP:
-                                callback.onVmStop();
-                                return;
-                            case RESULT_ERROR:
-                                callback.onVmError();
-                                return;
-                            case RESULT_IPADDR:
-                                callback.onIpAddrAvailable(resultData.getString(KEY_VM_IP_ADDR));
-                                return;
-                        }
-                    }
-                };
-        i.putExtra(Intent.EXTRA_RESULT_RECEIVER, getResultReceiverForIntent(resultReceiver));
-        i.putExtra(VmLauncherService.EXTRA_NOTIFICATION, notification);
-        context.startForegroundService(i);
-    }
-
-    public interface VmLauncherServiceCallback {
-        void onVmStart();
-
-        void onVmStop();
-
-        void onVmError();
-
-        void onIpAddrAvailable(String ipAddr);
-    }
-
-    private static ResultReceiver getResultReceiverForIntent(ResultReceiver r) {
-        Parcel parcel = Parcel.obtain();
-        r.writeToParcel(parcel, 0);
-        parcel.setDataPosition(0);
-        r = ResultReceiver.CREATOR.createFromParcel(parcel);
-        parcel.recycle();
-        return r;
-    }
-}
diff --git a/android/TerminalApp/res/layout/activity_headless.xml b/android/TerminalApp/res/layout/activity_headless.xml
index 3b01179..b4a65cc 100644
--- a/android/TerminalApp/res/layout/activity_headless.xml
+++ b/android/TerminalApp/res/layout/activity_headless.xml
@@ -47,13 +47,20 @@
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"/>
         </LinearLayout>
-        <com.android.virtualization.terminal.TerminalView
-            android:id="@+id/webview"
-            android:layout_marginBottom="5dp"
-            android:layout_gravity="fill"
+        <LinearLayout
+            android:id="@+id/webview_container"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
-            android:visibility="invisible"/>
+            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" />
+            <include layout="@layout/layout_modifier_keys" />
+        </LinearLayout>
     </FrameLayout>
 
 </LinearLayout>
diff --git a/android/TerminalApp/res/layout/layout_modifier_keys.xml b/android/TerminalApp/res/layout/layout_modifier_keys.xml
new file mode 100644
index 0000000..ff0b341
--- /dev/null
+++ b/android/TerminalApp/res/layout/layout_modifier_keys.xml
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ * Copyright (C) 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.
+ -->
+<!--TODO(b/376813452): we might want tablet UI for that-->
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/modifier_keys"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical" >
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal">
+        <Button
+            style="@style/ModifierKeyStyle"
+            android:id="@+id/btn_esc"
+            android:text="@string/btn_esc_text" />
+        <Button
+            style="@style/ModifierKeyStyle"
+            android:id="@+id/btn_tab"
+            android:text="@string/btn_tab_text" />
+        <Button
+            style="@style/ModifierKeyStyle"
+            android:id="@+id/btn_home"
+            android:text="@string/btn_home_text" />
+        <Button
+            style="@style/ModifierKeyStyle"
+            android:id="@+id/btn_up"
+            android:text="@string/btn_up_text" />
+        <Button
+            style="@style/ModifierKeyStyle"
+            android:id="@+id/btn_end"
+            android:text="@string/btn_end_text" />
+        <Button
+            style="@style/ModifierKeyStyle"
+            android:id="@+id/btn_pgup"
+            android:text="@string/btn_pgup_text" />
+    </LinearLayout>
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal">
+        <Button
+            style="@style/ModifierKeyStyle"
+            android:id="@+id/btn_ctrl"
+            android:text="@string/btn_ctrl_text" />
+        <Button
+            style="@style/ModifierKeyStyle"
+            android:id="@+id/btn_alt"
+            android:text="@string/btn_alt_text" />
+        <Button
+            style="@style/ModifierKeyStyle"
+            android:id="@+id/btn_left"
+            android:text="@string/btn_left_text" />
+        <Button
+            style="@style/ModifierKeyStyle"
+            android:id="@+id/btn_down"
+            android:text="@string/btn_down_text" />
+        <Button
+            style="@style/ModifierKeyStyle"
+            android:id="@+id/btn_right"
+            android:text="@string/btn_right_text" />
+        <Button
+            style="@style/ModifierKeyStyle"
+            android:id="@+id/btn_pgdn"
+            android:text="@string/btn_pgdn_text" />
+    </LinearLayout>
+</LinearLayout>
diff --git a/android/TerminalApp/res/layout/settings_disk_resize.xml b/android/TerminalApp/res/layout/settings_disk_resize.xml
index 7b8b9fc..55fb7af 100644
--- a/android/TerminalApp/res/layout/settings_disk_resize.xml
+++ b/android/TerminalApp/res/layout/settings_disk_resize.xml
@@ -57,23 +57,26 @@
             app:layout_constraintEnd_toEndOf="parent"
             app:layout_constraintBottom_toTopOf="@+id/settings_disk_resize_disk_size_slider"/>
 
-        <com.google.android.material.slider.Slider
+        <SeekBar
             android:id="@+id/settings_disk_resize_disk_size_slider"
-            android:layout_height="wrap_content"
+            android:layout_height="40dp"
             android:layout_width="match_parent"
             android:layout_marginBottom="36dp"
-            app:tickVisible="false"
             app:layout_constraintTop_toTopOf="parent"
             app:layout_constraintBottom_toBottomOf="parent" />
 
+        <androidx.constraintlayout.widget.Group
+            android:id="@+id/buttons"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:visibility="invisible"
+            app:constraint_referenced_ids="settings_disk_resize_cancel_button,settings_disk_resize_resize_button" />
+
         <com.google.android.material.button.MaterialButton
             android:id="@+id/settings_disk_resize_cancel_button"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:maxWidth="150sp"
-            android:hyphenationFrequency="full"
             android:text="@string/settings_disk_resize_resize_cancel"
-            android:visibility="invisible"
             android:layout_marginTop="48dp"
             android:layout_marginHorizontal="8dp"
             app:layout_constraintTop_toTopOf="@+id/settings_disk_resize_disk_size_slider"
@@ -84,10 +87,7 @@
             android:id="@+id/settings_disk_resize_resize_button"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:maxWidth="150sp"
-            android:hyphenationFrequency="full"
             android:text="@string/settings_disk_resize_resize_restart_vm_to_apply"
-            android:visibility="invisible"
             android:layout_marginTop="48dp"
             app:layout_constraintTop_toTopOf="@+id/settings_disk_resize_disk_size_slider"
             app:layout_constraintBottom_toBottomOf="parent"
diff --git a/android/TerminalApp/res/layout/settings_list_item.xml b/android/TerminalApp/res/layout/settings_list_item.xml
index 645efbb..ce595ff 100644
--- a/android/TerminalApp/res/layout/settings_list_item.xml
+++ b/android/TerminalApp/res/layout/settings_list_item.xml
@@ -22,7 +22,7 @@
     app:cardCornerRadius="28dp"
     app:checkedIcon="@null"
     android:focusable="true"
-    android:checkable="true"
+    android:longClickable="false"
     android:layout_height="wrap_content"
     android:layout_width="match_parent">
 
@@ -66,4 +66,4 @@
             app:layout_constraintStart_toEndOf="@id/settings_list_item_icon"
             app:layout_constraintEnd_toEndOf="parent" />
     </androidx.constraintlayout.widget.ConstraintLayout>
-</com.google.android.material.card.MaterialCardView>
\ No newline at end of file
+</com.google.android.material.card.MaterialCardView>
diff --git a/android/TerminalApp/res/layout/settings_recovery.xml b/android/TerminalApp/res/layout/settings_recovery.xml
index d33f9a3..3ace35c 100644
--- a/android/TerminalApp/res/layout/settings_recovery.xml
+++ b/android/TerminalApp/res/layout/settings_recovery.xml
@@ -53,7 +53,7 @@
                 app:cardCornerRadius="0dp"
                 app:checkedIcon="@null"
                 android:focusable="true"
-                android:checkable="true"
+                android:longClickable="false"
                 android:layout_height="wrap_content"
                 android:layout_width="match_parent">
                 <androidx.constraintlayout.widget.ConstraintLayout
@@ -91,7 +91,7 @@
                 app:cardCornerRadius="0dp"
                 app:checkedIcon="@null"
                 android:focusable="true"
-                android:checkable="true"
+                android:longClickable="false"
                 android:layout_height="wrap_content"
                 android:layout_width="match_parent">
                 <androidx.constraintlayout.widget.ConstraintLayout
diff --git a/android/TerminalApp/res/values-af/strings.xml b/android/TerminalApp/res/values-af/strings.xml
index 03a65a4..0e4309e 100644
--- a/android/TerminalApp/res/values-af/strings.xml
+++ b/android/TerminalApp/res/values-af/strings.xml
@@ -17,47 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Terminaal"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Terminaalskerm"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Skermpyltjie"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Leë reël"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Installeer Linux-terminaal"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"As jy Linux-terminaal wil begin, moet jy omtrent <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> se data oor die netwerk aflaai.\nWil jy voortgaan?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Laai af wanneer wi-fi beskikbaar is"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Installeer"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Installeer tans"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Netwerkfout. Gaan verbinding na en probeer weer."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Linus-terminaal word tans geïnstalleer"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Linux-terminaal sal begin wanneer jy klaar is"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Kon weens die netwerkkwessie nie installeer nie"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Kon nie installeer nie. Probeer weer."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Instellings"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Maak terminaal gereed"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Stop tans terminaal"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Terminaal het omgeval"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Verander grootte van skyf"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Verander grootte / Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Skyfgrootte is gestel"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> toegewys"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"<xliff:g id="MAX_SIZE">%1$s</xliff:g> maks."</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Kanselleer"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Poortaanstuur"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Stel poortaanstuur op"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"Terminaal probeer om ’n nuwe poort oop te maak"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Poort versoek om oop te wees: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Aanvaar"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Weier"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Herwin"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Afdelingherwinningopsies"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Verander na aanvanklike weergawe"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Verwyder almal"</string>
-    <!-- no translation found for settings_recovery_reset_dialog_title (874946981716251094) -->
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
     <skip />
-    <!-- no translation found for settings_recovery_reset_dialog_message (6392681199895696206) -->
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
     <skip />
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Bevestig"</string>
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
+    <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Stel terminaal terug"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Kanselleer"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Rugsteun data na <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Kon nie terugstel nie"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Verwyder rugsteundata"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Foutkode: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Instellings"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"Terminaal loop tans"</string>
-    <!-- no translation found for service_notification_content (3579923802797824545) -->
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
     <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Maak toe"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-am/strings.xml b/android/TerminalApp/res/values-am/strings.xml
index 60f2124..289d2b9 100644
--- a/android/TerminalApp/res/values-am/strings.xml
+++ b/android/TerminalApp/res/values-am/strings.xml
@@ -17,47 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"ተርሚናል"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"ተርሚናል ማሳያ"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"ጠቋሚ"</string>
+    <string name="empty_line" msgid="5012067143408427178">"ባዶ መስመር"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Linux ተርሚናልን ይጫኑ"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Linux ተርሚናልን ለማስጀመር በአውታረ መረብ <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> የሚገመት ውሂብ ማውረድ ያስፈልግዎታል። \nይቀጥላሉ?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Wi-Fi ሲገኝ አውርድ"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"ጫን"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"በመጫን ላይ"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"የአውታረ መረብ ስህተት። ግንኙነት ይፈትሹ እና እንደገና ይሞክሩ።"</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Linux ተርሚናልን በመጫን ላይ"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Linux ተርሚናል ከጨረሰ በኋላ ይጀምራል"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"በአውታረ መረብ ችግር ምክንያት መጫን አልተሳካም"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"መጫን አልተሳካም። እንደገና ይሞክሩ።"</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"ቅንብሮች"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"ተርሚናልን በማዘጋጀት ላይ"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"ተርሚናልን በማቆም ላይ"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"ተርሚናል ተበላሽቷል"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"የዲስክ መጠን ቀይር"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"መጠን ቀይር / Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"የዲስክ መጠን ተቀናብሯል"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> ተመድቧል"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"<xliff:g id="MAX_SIZE">%1$s</xliff:g> ከፍተኛ"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"ይቅር"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"ወደብ ማስተላለፍ"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"ወደብ ማስተላለፍን ያዋቅሩ"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"ተርሚናል አዲስ ወደብ ለመክፈት እየሞከረ ነው"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"እንዲከፈት የተጠየቀ ወደብ፦ <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"ተቀበል"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"ከልክል"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"መልሶ ማግኘት"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"የክፍልፋይ መልሶ ማግኛ አማራጮች"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"ወደ የመጀመሪያ ሥሪት ለውጥ"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"ሁሉንም አስወግድ"</string>
-    <!-- no translation found for settings_recovery_reset_dialog_title (874946981716251094) -->
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
     <skip />
-    <!-- no translation found for settings_recovery_reset_dialog_message (6392681199895696206) -->
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
     <skip />
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"አረጋግጥ"</string>
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
+    <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"ተርሚናልን ዳግም አስጀምር"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"ይቅር"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"ውሂብን ወደ <xliff:g id="PATH">/mnt/backup</xliff:g> ምትኬ አስቀምጥ"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"መልሶ ማግኘት አልተሳካም"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"ምትኬ ውሂብን አስወግድ"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"የስሕተት ኮድ፦ <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"ቅንብሮች"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"ተርሚናል በመሄድ ላይ ነው"</string>
-    <!-- no translation found for service_notification_content (3579923802797824545) -->
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
     <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"ዝጋ"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-ar/strings.xml b/android/TerminalApp/res/values-ar/strings.xml
index 1c47648..e8f7fc5 100644
--- a/android/TerminalApp/res/values-ar/strings.xml
+++ b/android/TerminalApp/res/values-ar/strings.xml
@@ -17,44 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Terminal"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"شاشة الوحدة الطرفية"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"المؤشر"</string>
+    <string name="empty_line" msgid="5012067143408427178">"سطر فارغ"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"تثبيت الوحدة الطرفية بنظام التشغيل Linux"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"لتشغيل الوحدة الطرفية بنظام التشغيل Linux، عليك تنزيل <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> من البيانات تقريبًا عبر الشبكة.\nهل تريد المتابعة؟"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"التنزيل عند توفُّر شبكة Wi-Fi"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"تثبيت"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"جارٍ التثبيت"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"حدث خطأ في الشبكة. يُرجى التحقُّق من الاتصال وإعادة المحاولة."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"جارٍ تثبيت الوحدة الطرفية بنظام التشغيل Linux"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"سيتم تشغيل الوحدة الطرفية بنظام التشغيل Linux بعد الانتهاء"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"تعذَّر التثبيت بسبب مشكلة في الشبكة"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"تعذَّر التثبيت. يُرجى إعادة المحاولة."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"الإعدادات"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"جارٍ تحضير Terminal"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"جارٍ إيقاف Terminal"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"تعطَّل Terminal"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"تغيير حجم القرص"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"تغيير الحجم / Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"تم ضبط حجم القرص"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"تم تخصيص <xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"‫<xliff:g id="MAX_SIZE">%1$s</xliff:g> كحد أقصى"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"إلغاء"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"إعادة توجيه المنفذ"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"ضبط إعادة توجيه المنفذ"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"تحاول الوحدة الطرفية فتح منفذ جديد"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"المنفذ المطلوب فتحه: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"قبول"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"رفض"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"الاسترداد"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"خيارات استرداد القسم"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"التبديل إلى الإصدار الأولي"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"إزالة الكل"</string>
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"إعادة ضبط الوحدة الطرفية"</string>
-    <string name="settings_recovery_reset_dialog_message" msgid="6392681199895696206">"سيتم حذف البيانات"</string>
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"تأكيد"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"إلغاء"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"الاحتفاظ بنسخة احتياطية من البيانات في <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"تعذّر الاسترداد"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"إزالة بيانات النسخة الاحتياطية"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"رمز الخطأ: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"الإعدادات"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"الوحدة الطرفية قيد التشغيل"</string>
-    <string name="service_notification_content" msgid="3579923802797824545">"انقر لفتح الوحدة الطرفية"</string>
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
+    <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"إغلاق"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-as/strings.xml b/android/TerminalApp/res/values-as/strings.xml
index 4ff9c33..5c0c6b5 100644
--- a/android/TerminalApp/res/values-as/strings.xml
+++ b/android/TerminalApp/res/values-as/strings.xml
@@ -17,44 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"টাৰ্মিনেল"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"টাৰ্মিনেল ডিছপ্লে’"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"কাৰ্ছৰ"</string>
+    <string name="empty_line" msgid="5012067143408427178">"খালী শাৰী"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Linux টাৰ্মিনেল ইনষ্টল কৰক"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Linux টাৰ্মিনেল লঞ্চ কৰিবলৈ, আপুনি নেটৱৰ্কত প্ৰায় <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> ডেটা ডাউনল’ড কৰিব লাগিব।\nআপুনি আগবাঢ়িবনে?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"ৱাই-ফাই সেৱা উপলব্ধ হ’লে ডাউনল’ড কৰক"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"ইনষ্টল কৰক"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"ইনষ্টল কৰি থকা হৈছে"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"নেটৱৰ্কৰ আসোঁৱাহ। সংযোগ পৰীক্ষা কৰক আৰু পুনৰ চেষ্টা কৰক।"</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Linux টাৰ্মিনেল ইনষ্টল কৰি থকা হৈছে"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"সমাপ্ত হোৱাৰ পাছত Linux টাৰ্মিনেল আৰম্ভ কৰা হ’ব"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"নেটৱৰ্ক সম্পৰ্কীয় সমস্যাৰ বাবে ইনষ্টল কৰিব পৰা নগ’ল"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"ইনষ্টল কৰিব পৰা নগ’ল। পুনৰ চেষ্টা কৰক।"</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"ছেটিং"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"টাৰ্মিনেল সাজু কৰি থকা হৈছে"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"টাৰ্মিনেল বন্ধ কৰি থকা হৈছে"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"টাৰ্মিনেল ক্ৰেশ্ব হৈছে"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"ডিস্কৰ আকাৰ সলনি কৰক"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"আকাৰ সলনি কৰক / Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"ডিস্কৰ আকাৰ ছেট কৰা হৈছে"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> আৱণ্টন কৰা হৈছে"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"সৰ্বাধিক <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"বাতিল কৰক"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"প’ৰ্ট ফৰৱাৰ্ডিং"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"প’ৰ্ট ফৰৱাৰ্ডিং কনফিগাৰ কৰক"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"টাৰ্মিনেলটোৱে এটা নতুন প’ৰ্ট খুলিবলৈ চেষ্টা কৰি আছে"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"প’ৰ্ট খোলা ৰখাৰ বাবে অনুৰোধ কৰা হৈছে: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"গ্ৰহণ কৰক"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"অস্বীকাৰ কৰক"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"পুনৰুদ্ধাৰ"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"পাৰ্টিশ্বন পুনৰুদ্ধাৰৰ বিকল্প"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"প্ৰাৰম্ভিক সংস্কৰণলৈ সলনি কৰক"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"আটাইবোৰ আঁতৰাওক"</string>
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"টাৰ্মিনেল ৰিছেট কৰক"</string>
-    <string name="settings_recovery_reset_dialog_message" msgid="6392681199895696206">"ডেটাখিনি মচা হ’ব"</string>
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"নিশ্চিত কৰক"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"বাতিল কৰক"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"<xliff:g id="PATH">/mnt/backup</xliff:g>লৈ ডেটাৰ বেকআপ লওক"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"পুনৰুদ্ধাৰ কৰিব পৰা নগ’ল"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"বেকআপ লোৱা ডেটা আঁতৰাওক"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"আসোঁৱাহ ক’ড: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"ছেটিং"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"টাৰ্মিনেলটো চলি আছে"</string>
-    <string name="service_notification_content" msgid="3579923802797824545">"টাৰ্মিনেলটো খুলিবলৈ ক্লিক কৰক"</string>
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
+    <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"বন্ধ কৰক"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-az/strings.xml b/android/TerminalApp/res/values-az/strings.xml
index de953f5..b255b43 100644
--- a/android/TerminalApp/res/values-az/strings.xml
+++ b/android/TerminalApp/res/values-az/strings.xml
@@ -17,47 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Terminal"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Terminal displeyi"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Kursor"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Boş sətir"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Linux terminalını quraşdırın"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Linux terminalını işə salmaq üçün şəbəkə vasitəsilə təxminən <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> həcmində data endirməlisiniz.\nDavam etmək istəyirsiniz?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Wi-Fi əlçatan olduqda endirin"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Quraşdırın"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Quraşdırılır"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Şəbəkə xətası. Bağlantını yoxlayıb yenidən cəhd edin."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Linux terminalı quraşdırılır"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Tamamlandıqan sonra Linux terminalı işə salınacaq"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Şəbəkə problemi səbəbilə quraşdırmaq alınmadı"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Quraşdırmaq alınmadı. Yenidən cəhd edin."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Ayarlar"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Terminal hazırlanır"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Terminal dayandırılır"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Terminal çökdü"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Disk ölçüsü dəyişdirilməsi"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Yenidən ölçüləndirin / Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Disk ölçüsü ayarlandı"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> təyin edildi"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"maks <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Ləğv edin"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Port yönləndirməsi"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Port yönləndirməsini konfiqurasiya edin"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"Terminal yeni port açmağa çalışır"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Portun açıq olması tələb edildi: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Qəbul edin"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Rədd edin"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Bərpa"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Bölmə üzrə bərpa seçimləri"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"İlkin versiyaya dəyişin"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Hamısını silin"</string>
-    <!-- no translation found for settings_recovery_reset_dialog_title (874946981716251094) -->
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
     <skip />
-    <!-- no translation found for settings_recovery_reset_dialog_message (6392681199895696206) -->
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
     <skip />
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Təsdiq edin"</string>
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
+    <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Terminalı sıfırlayın"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Ləğv edin"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Datanı buraya yedəkləyin: <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Bərpa etmək alınmadı"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Yedək datanı silin"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Xəta kodu: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Ayarlar"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"Terminal işləyir"</string>
-    <!-- no translation found for service_notification_content (3579923802797824545) -->
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
     <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Bağlayın"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <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 0b53ab3..9a7da82 100644
--- a/android/TerminalApp/res/values-b+sr+Latn/strings.xml
+++ b/android/TerminalApp/res/values-b+sr+Latn/strings.xml
@@ -17,47 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Terminal"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Prikaz terminala"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Kursor"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Prazan red"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Instalirajte Linux terminal"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Da biste pokrenuli Linux terminal, treba da preuzmete oko <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> podataka preko mreže.\nŽelite da nastavite?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Preuzmi kada WiFi bude dostupan"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Instaliraj"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Instalira se"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Greška na mreži. Proverite vezu i probajte ponovo."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Instalira se Linux terminal"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Linux terminal će se pokrenuti posle završetka"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Instaliranje nije uspelo zbog problema sa mrežom"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Instaliranje nije uspelo. Probajte ponovo."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Podešavanja"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Terminal se priprema"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Terminal se zaustavlja"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Terminal je otkazao"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Promena veličine diska"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Promenite veličinu / Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Veličina diska je podešena"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"Dodeljeno <xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"Maks. <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Otkaži"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Prosleđivanje porta"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Konfigurišite prosleđivanje porta"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"Terminal pokušava da otvori novi port"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Port čije je otvaranje traženo: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Prihvati"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Odbij"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Oporavak"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Opcije oporavka particija"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Promeni na početnu verziju"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Uklonite sve"</string>
-    <!-- no translation found for settings_recovery_reset_dialog_title (874946981716251094) -->
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
     <skip />
-    <!-- no translation found for settings_recovery_reset_dialog_message (6392681199895696206) -->
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
     <skip />
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Potvrdi"</string>
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
+    <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Resetujte terminal"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Otkaži"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Napravi rezervnu kopiju podataka na <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Oporavak nije uspeo"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Uklonite rezervnu kopiju"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Kôd greške: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Podešavanja"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"Terminal je aktivan"</string>
-    <!-- no translation found for service_notification_content (3579923802797824545) -->
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
     <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Zatvori"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-be/strings.xml b/android/TerminalApp/res/values-be/strings.xml
index 3f8d8c3..5aea50e 100644
--- a/android/TerminalApp/res/values-be/strings.xml
+++ b/android/TerminalApp/res/values-be/strings.xml
@@ -17,44 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Тэрмінал"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Дысплэй тэрмінала"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Курсор"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Пусты радок"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Усталяванне тэрмінала Linux"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Каб запусціць тэрмінал Linux, трэба спампаваць каля <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> даных па сетцы.\nПрацягнуць?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Спампаваць, калі будзе даступная сетка Wi-Fi"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Усталяваць"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Ідзе ўсталяванне"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Памылка сеткі. Праверце падключэнне і паўтарыце спробу."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Ідзе ўсталяванне тэрмінала Linux"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Тэрмінал Linux будзе запушчаны пасля завяршэння"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Не ўдалося ўсталяваць з-за праблемы з сеткай"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Не ўдалося ўсталяваць. Паўтарыце спробу."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Налады"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Ідзе падрыхтоўка тэрмінала"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Спыненне тэрмінала"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Збой тэрмінала"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Змяніць памер дыска"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Змяніць памер / Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Памер дыска зададзены"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"Прызначана <xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"Максімальны памер: <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Скасаваць"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Пераадрасацыя партоў"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Наладзіць пераадрасацыю партоў"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"Тэрмінал спрабуе адкрыць новы порт"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Запыт адкрыць порт: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Прыняць"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Адмовіць"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Аднаўленне"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Варыянты аднаўлення раздзела"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Змяніць на зыходную версію"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Выдаліць усе"</string>
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Скінуць тэрмінал"</string>
-    <string name="settings_recovery_reset_dialog_message" msgid="6392681199895696206">"Даныя будуць выдалены"</string>
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Пацвердзіць"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Скасаваць"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Стварыць рэзервовую копію даных у <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Не ўдалося аднавіць"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Выдаліць даныя рэзервовай копіі"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Код памылкі: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Налады"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"Тэрмінал запушчаны"</string>
-    <string name="service_notification_content" msgid="3579923802797824545">"Націсніце, каб адкрыць тэрмінал"</string>
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
+    <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Закрыць"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-bg/strings.xml b/android/TerminalApp/res/values-bg/strings.xml
index b769b70..1761bf1 100644
--- a/android/TerminalApp/res/values-bg/strings.xml
+++ b/android/TerminalApp/res/values-bg/strings.xml
@@ -17,44 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Терминал"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Екран на Терминал"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Курсор"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Празен ред"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Инсталиране на терминала на Linux"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"За да стартирате терминала на Linux, трябва да изтеглите около <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> данни през мрежата.\nИскате ли да продължите?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Изтегляне, когато е налице Wi-Fi"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Инсталиране"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Инсталира се"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Грешка в мрежата. Проверете връзката и опитайте отново."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Терминалът на Linux се инсталира"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Терминалът на Linux ще бъде стартиран след завършване"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Инсталирането не бе успешно поради проблем с мрежата"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Инсталирането не бе успешно. Опитайте отново."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Настройки"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Терминалът се подготвя"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Терминалът спира"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Терминалът претърпя срив"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Преоразмеряване на диска"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Преоразмеряване/Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Размерът на диска е зададен"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"Зададено: <xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"Макс.: <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Отказ"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Пренасочване на портове"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Конфигуриране на пренасочването на портове"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"Терминалът се опитва да отвори нов порт"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Заявено отваряне на порта: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Приемам"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Отказ"</string>
-    <string name="settings_recovery_title" msgid="6586840079226383285">"Възстановяване"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Опции за възстановяване на дяловете"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Промяна към първоначалната версия"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Премахване на всички"</string>
+    <string name="settings_recovery_title" msgid="6586840079226383285">"Възстановя­ване"</string>
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Нулиране на терминала"</string>
-    <string name="settings_recovery_reset_dialog_message" msgid="6392681199895696206">"Данните ще бъдат изтрити"</string>
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Потвърждаване"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Отказ"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Създаване на резервно копие на данните в(ъв) <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Възстановяването не бе успешно"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Премахване на резервното копие на данните"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Код на грешката: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Настройки"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"Терминалът работи"</string>
-    <string name="service_notification_content" msgid="3579923802797824545">"Кликнете, за да отворите терминала"</string>
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
+    <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Затваряне"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-bn/strings.xml b/android/TerminalApp/res/values-bn/strings.xml
index c2b0591..1a967ec 100644
--- a/android/TerminalApp/res/values-bn/strings.xml
+++ b/android/TerminalApp/res/values-bn/strings.xml
@@ -17,47 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"টার্মিনাল"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"টার্মিনাল ডিসপ্লে"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"কার্সর"</string>
+    <string name="empty_line" msgid="5012067143408427178">"খালি লাইন"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Linux টার্মিনাল ইনস্টল করুন"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Linux টার্মিনাল চালু করার জন্য আপনাকে নেটওয়ার্কের মাধ্যমে মোটামুটিভাবে <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> ডেটা ডাউনলোড করতে হবে।\nআপনি কি চালিয়ে যাবেন?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"ওয়াই-ফাই পাওয়া গেলে ডাউনলোড করুন"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"ইনস্টল করুন"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"ইনস্টল করা হচ্ছে"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"নেটওয়ার্কের সমস্যা। কানেকশন চেক করে আবার চেষ্টা করুন।"</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Linux টার্মিনাল ইনস্টল করা হচ্ছে"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"শেষ হয়ে গেলে Linux টার্মিনাল ইনস্টল করা শুরু হবে।"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"নেটওয়ার্কে সমস্যা থাকায় ইনস্টল করা যায়নি"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"ইনস্টল করা যায়নি। আবার চেষ্টা করুন।"</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"সেটিংস"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"টার্মিনাল তৈরি করা হচ্ছে"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"টার্মিনাল বন্ধ করা হচ্ছে"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"টার্মিনাল ক্র্যাশ করেছে"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"ডিস্ক ছোট বড় করা"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"ছোট বড় করুন / Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"ডিস্কের সাইজ সেট করা হয়েছে"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> অ্যাসাইন করা হয়েছে"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"সর্বাধিক <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"বাতিল করুন"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"পোর্ট ফরওয়ার্ড করা"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"পোর্ট ফরওয়ার্ড করা কনফিগার করুন"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"টার্মিনাল নতুন পোর্ট খোলার চেষ্টা করছে"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"পোর্ট খোলার অনুরোধ করা হয়েছে: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"সম্মতি দিন"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"বাতিল করুন"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"আগের অবস্থায় ফেরানো"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"পার্টিশন আগের অবস্থায় ফেরানোর বিকল্প"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"প্রাথমিক ভার্সনে পরিবর্তন করুন"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"সবকটি সরান"</string>
-    <!-- no translation found for settings_recovery_reset_dialog_title (874946981716251094) -->
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
     <skip />
-    <!-- no translation found for settings_recovery_reset_dialog_message (6392681199895696206) -->
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
     <skip />
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"কনফার্ম করুন"</string>
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
+    <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"টার্মিনাল রিসেট করুন"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"বাতিল করুন"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"<xliff:g id="PATH">/mnt/backup</xliff:g>-এ ডেটা ব্যাক-আপ নিন"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"আগের অবস্থায় ফেরানো যায়নি"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"ব্যাকআপ ডেটা সরান"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"এরর কোড: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"সেটিংস"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"টার্মিনাল চলছে"</string>
-    <!-- no translation found for service_notification_content (3579923802797824545) -->
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
     <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"বন্ধ করুন"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-bs/strings.xml b/android/TerminalApp/res/values-bs/strings.xml
index be174f4..f4d000c 100644
--- a/android/TerminalApp/res/values-bs/strings.xml
+++ b/android/TerminalApp/res/values-bs/strings.xml
@@ -17,44 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Terminal"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Ekran terminala"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Kursor"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Prazan red"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Instalirajte Linux terminal"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Da pokrenete Linux terminal, trebate preuzeti otprilike <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> podataka putem mreže.\nŽelite li nastaviti?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Preuzmi kada je WiFi dostupan"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Instaliraj"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Instaliranje"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Greška na mreži. Provjeriti vezu i pokušajte ponovo."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Instaliranje Linux terminala"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Linux terminal će se pokrenuti nakon završetka"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Instaliranje nije uspjelo zbog problema s mrežom"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Instaliranje nije uspjelo. Pokušajte ponovo."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Postavke"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Priprema terminala"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Zaustavljanje terminala"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Terminal je pao"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Promjena veličine diska"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Promijenite veličinu / rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Veličina diska je postavljena"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"Dodijeljeno: <xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"Maksimalno <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Otkaži"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Prosljeđivanje priključka"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Konfigurirajte prosljeđivanje priključka"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"Terminal pokušava otvoriti novi priključak"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Priključak je zatražio otvaranje: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Prihvati"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Odbij"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Oporavak"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Opcije za oporavak particije"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Promijeni u početnu verziju"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Ukloni sve"</string>
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Poništite terminal"</string>
-    <string name="settings_recovery_reset_dialog_message" msgid="6392681199895696206">"Podaci će se izbrisati"</string>
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Potvrdi"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Otkaži"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Napravi sigurnosnu kopiju podataka na <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Oporavak nije uspio"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Ukloni podatke sigurnosne kopije"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Kȏd greške: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Postavke"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"Terminal je pokrenut"</string>
-    <string name="service_notification_content" msgid="3579923802797824545">"Kliknite da otvorite terminal"</string>
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
+    <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Zatvori"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-ca/strings.xml b/android/TerminalApp/res/values-ca/strings.xml
index 05402d1..80ad29b 100644
--- a/android/TerminalApp/res/values-ca/strings.xml
+++ b/android/TerminalApp/res/values-ca/strings.xml
@@ -17,47 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Terminal"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Pantalla del terminal"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Cursor"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Línia buida"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Instal·la el terminal de Linux"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Per iniciar el terminal de Linux, has de baixar uns <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> de dades a través de la xarxa.\nVols continuar?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Baixa quan hi hagi una Wi‐Fi disponible"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Instal·la"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Instal·lant"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Error de la xarxa. Comprova la connexió i torna-ho a provar."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"S\'està instal·lant el terminal de Linux"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"El terminal de Linux s\'iniciarà quan hagi acabat"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"No s\'ha pogut instal·lar a causa d\'un problema de la xarxa"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"No s\'ha pogut instal·lar. Torna-ho a provar."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Configuració"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"S\'està preparant el terminal"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"S\'està aturant el terminal"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"El terminal s\'ha bloquejat"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Canvia la mida del disc"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Canvia la mida / Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Mida del disc definida"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> assignats"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"<xliff:g id="MAX_SIZE">%1$s</xliff:g> màx."</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Cancel·la"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Redirecció de ports"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Configura la redirecció de ports"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"El terminal està provant d\'obrir un port nou"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Port que se sol·licita obrir: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Accepta"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Denega"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Recuperació"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Opcions de recuperació de la partició"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Canvia a la versió inicial"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Suprimeix-ho tot"</string>
-    <!-- no translation found for settings_recovery_reset_dialog_title (874946981716251094) -->
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
     <skip />
-    <!-- no translation found for settings_recovery_reset_dialog_message (6392681199895696206) -->
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
     <skip />
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Confirma"</string>
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
+    <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Restableix el terminal"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Cancel·la"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Crea una còpia de seguretat de les dades a <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"La recuperació ha fallat"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Suprimeix les dades de la còpia de seguretat"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Codi d\'error: <xliff:g id="ERROR_CODE">%s</xliff:g>."</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Configuració"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"El terminal s\'està executant"</string>
-    <!-- no translation found for service_notification_content (3579923802797824545) -->
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
     <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Tanca"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-cs/strings.xml b/android/TerminalApp/res/values-cs/strings.xml
index 411cf45..fcd661d 100644
--- a/android/TerminalApp/res/values-cs/strings.xml
+++ b/android/TerminalApp/res/values-cs/strings.xml
@@ -17,44 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Terminál"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Zobrazení terminálu"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Kurzor"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Prázdný řádek"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Instalovat terminál Linux"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Ke spuštění terminálu Linux si musíte přes datovou síť stáhnout přibližně <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> dat.\nChcete pokračovat?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Stáhnout, když bude dostupná Wi-Fi"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Instalovat"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Instalování"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Chyba sítě. Zkontrolujte připojení a zkuste to znovu."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Instalace terminálu Linux"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Terminál Linux bude spuštěn po dokončení"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Instalace se nezdařila kvůli problému se sítí"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Instalace se nezdařila. Zkuste to znovu."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Nastavení"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Probíhá příprava terminálu"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Ukončování terminálu"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Terminál selhal"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Změna velikosti disku"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Změnit velikost"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Velikost disku nastavena"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"Přiděleno <xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"Max. <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Zrušit"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Přesměrování portů"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Nakonfigurovat přesměrování portů"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"Terminál se pokouší otevřít nový port"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Vyžádáno otevření portu: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Přijmout"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Zamítnout"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Obnovení"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Možnosti obnovení oddílu"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Změnit na původní verzi"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Odstranit vše"</string>
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Resetovat terminál"</string>
-    <string name="settings_recovery_reset_dialog_message" msgid="6392681199895696206">"Data budou smazána"</string>
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Potvrdit"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Zrušit"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Zálohovat data do <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Obnovení se nezdařilo"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Odstranit data zálohy"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Kód chyby: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Nastavení"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"Terminál běží"</string>
-    <string name="service_notification_content" msgid="3579923802797824545">"Kliknutím otevřete terminál"</string>
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
+    <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Zavřít"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-da/strings.xml b/android/TerminalApp/res/values-da/strings.xml
index d29f9d4..bd01cf3 100644
--- a/android/TerminalApp/res/values-da/strings.xml
+++ b/android/TerminalApp/res/values-da/strings.xml
@@ -17,47 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Terminal"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Terminalskærm"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Markør"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Tom linje"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Installer Linux-terminalen"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Du skal downloade ca. <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> data via netværket for at åbne Linux-terminalen.\nVil du fortsætte?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Download, når du har Wi-Fi-forbindelse"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Installer"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Installerer"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Netværksfejl. Tjek forbindelsen, og prøv igen."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Linux-terminalen installeres"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Linux-terminalen startes, når installationen er gennemført"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Installationen mislykkedes på grund af et netværksproblem"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Installationen mislykkedes. Prøv igen."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Indstillinger"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Forbereder terminal"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Stopper terminal"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Terminalen er gået ned"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Tilpas diskens størrelse"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Tilpas størrelse/Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Diskstørrelsen er angivet"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"Tildelt: <xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"Maks.: <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Annuller"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Omdirigering af port"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Konfigurer omdirigering af port"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"Terminalen forsøger at åbne en ny port"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Porten, der anmodes om at være åben: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Acceptér"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Afvis"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Gendannelse"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Muligheder for gendannelse af partition"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Skift til oprindelig version"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Fjern alle"</string>
-    <!-- no translation found for settings_recovery_reset_dialog_title (874946981716251094) -->
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
     <skip />
-    <!-- no translation found for settings_recovery_reset_dialog_message (6392681199895696206) -->
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
     <skip />
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Bekræft"</string>
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
+    <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Nulstil terminalen"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Annuller"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Sikkerhedskopiér data til <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Gendannelsen mislykkedes"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Fjern data for sikkerhedskopi"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Fejlkode: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Indstillinger"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"Terminalen kører"</string>
-    <!-- no translation found for service_notification_content (3579923802797824545) -->
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
     <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Luk"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-de/strings.xml b/android/TerminalApp/res/values-de/strings.xml
index cb1a209..63c59f0 100644
--- a/android/TerminalApp/res/values-de/strings.xml
+++ b/android/TerminalApp/res/values-de/strings.xml
@@ -17,44 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Terminal"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Terminalanzeige"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Cursor"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Leere Zeile"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Linux-Terminal installieren"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Damit du das Linux-Terminal starten kannst, musst du ungefähr <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> an Daten über das Netzwerk herunterladen.\nMöchtest du fortfahren?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Herunterladen, wenn WLAN verfügbar ist"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Installieren"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Wird installiert"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Netzwerkfehler. Prüfe die Verbindung und versuche es noch einmal."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Linux-Terminal wird installiert"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Linux-Terminal wird nach der Installation gestartet"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Die Installation ist aufgrund eines Netzwerkproblems fehlgeschlagen"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Die Installation ist fehlgeschlagen. Versuche es noch einmal."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Einstellungen"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Terminal wird vorbereitet"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Terminal wird beendet"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Terminal ist abgestürzt"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Größe des Laufwerks anpassen"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Größe anpassen / Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Größe des Laufwerks wurde festgelegt"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> zugewiesen"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"Maximal <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Abbrechen"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Portweiterleitung"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Portweiterleitung konfigurieren"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"Terminal versucht, einen neuen Port zu öffnen"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Port, der geöffnet werden soll: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Akzeptieren"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Ablehnen"</string>
-    <string name="settings_recovery_title" msgid="6586840079226383285">"Wiederherstellung"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Optionen für die Partitionswiederherstellung"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Zur ersten Version wechseln"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Alle entfernen"</string>
+    <string name="settings_recovery_title" msgid="6586840079226383285">"Wieder­herstellung"</string>
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Terminal zurücksetzen"</string>
-    <string name="settings_recovery_reset_dialog_message" msgid="6392681199895696206">"Daten werden gelöscht"</string>
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Bestätigen"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Abbrechen"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Daten unter <xliff:g id="PATH">/mnt/backup</xliff:g> sichern"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Wiederherstellung fehlgeschlagen"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Sicherungsdaten entfernen"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Fehlercode: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Einstellungen"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"Terminal wird ausgeführt"</string>
-    <string name="service_notification_content" msgid="3579923802797824545">"Zum Öffnen des Terminals klicken"</string>
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
+    <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Schließen"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-el/strings.xml b/android/TerminalApp/res/values-el/strings.xml
index 6df21e4..d445ec8 100644
--- a/android/TerminalApp/res/values-el/strings.xml
+++ b/android/TerminalApp/res/values-el/strings.xml
@@ -17,44 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Τερματικό"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Προβολή τερματικού"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Δείκτης"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Κενή γραμμή"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Εγκατάσταση τερματικού Linux"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Για την εκκίνηση του τερματικού Linux, πρέπει να κατεβάσετε περίπου <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> δεδομένων μέσω δικτύου.\nΘέλετε να συνεχίσετε;"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Λήψη όταν υπάρχει διαθέσιμο Wi-Fi"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Εγκατάσταση"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Εγκατάσταση"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Σφάλμα δικτύου. Ελέγξτε τη σύνδεση και δοκιμάστε ξανά."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Γίνεται εγκατάσταση τερματικού Linux"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Το τερματικό Linux θα ξεκινήσει μετά την ολοκλήρωση"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Η εγκατάσταση απέτυχε λόγω προβλήματος δικτύου"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Η εγκατάσταση απέτυχε. Δοκιμάστε ξανά."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Ρυθμίσεις"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Προετοιμασία τερματικού σε εξέλιξη"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Διακοπή τερματικού σε εξέλιξη"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Το τερματικό παρουσίασε σφάλμα"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Αλλαγή μεγέθους δίσκου"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Αλλαγή μεγέθους/Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Το μέγεθος δίσκου έχει οριστεί"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"Ανατέθηκαν <xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"Έως <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Ακύρωση"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Προώθηση θύρας"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Διαμόρφωση προώθησης θύρας"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"Το τερματικό προσπαθεί να ανοίξει μια νέα θύρα"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Υποβλήθηκε αίτημα για άνοιγμα της θύρας: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Αποδοχή"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Απόρριψη"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Ανάκτηση"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Επιλογές ανάκτησης διαμερισμάτων"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Αλλαγή σε αρχική έκδοση"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Κατάργηση όλων"</string>
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Επαναφορά τερματικού"</string>
-    <string name="settings_recovery_reset_dialog_message" msgid="6392681199895696206">"Τα δεδομένα θα διαγραφούν"</string>
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Επιβεβαίωση"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Ακύρωση"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Δημιουργία αντιγράφου ασφαλείας δεδομένων στο <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Αποτυχία ανάκτησης"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Κατάργηση δεδομένων αντιγράφου ασφαλείας"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Κωδικός σφάλματος: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Ρυθμίσεις"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"Το τερματικό εκτελείται"</string>
-    <string name="service_notification_content" msgid="3579923802797824545">"Κάντε κλικ για άνοιγμα του τερματικού"</string>
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
+    <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Κλείσιμο"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-en-rAU/strings.xml b/android/TerminalApp/res/values-en-rAU/strings.xml
index 9723565..5168e3c 100644
--- a/android/TerminalApp/res/values-en-rAU/strings.xml
+++ b/android/TerminalApp/res/values-en-rAU/strings.xml
@@ -17,47 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Terminal"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Terminal display"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Cursor"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Empty line"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Install Linux terminal"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"To launch a Linux terminal, you need to download roughly <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> of data over the network.\nWould you like to proceed?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Download when Wi-Fi is available"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Install"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Installing"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Network error. Check connection and retry."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Installing Linux terminal"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Linux terminal will be started after finish"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Failed to install due to the network issue"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Failed to install. Try again."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Settings"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Preparing terminal"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Stopping terminal"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Terminal crashed"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Disk resize"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Resize/Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Disk size set"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> assigned"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"<xliff:g id="MAX_SIZE">%1$s</xliff:g> max"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Cancel"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Port forwarding"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Configure port forwarding"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"Terminal is trying to open a new port"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Port requested to be open: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Accept"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Deny"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Recovery"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Partition recovery options"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Change to initial version"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Remove all"</string>
-    <!-- no translation found for settings_recovery_reset_dialog_title (874946981716251094) -->
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
     <skip />
-    <!-- no translation found for settings_recovery_reset_dialog_message (6392681199895696206) -->
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
     <skip />
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Confirm"</string>
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
+    <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Reset terminal"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Cancel"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Back up data to <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Recovery failed"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Remove backup data"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Error code: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Settings"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"Terminal is running"</string>
-    <!-- no translation found for service_notification_content (3579923802797824545) -->
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
     <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Close"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-en-rCA/strings.xml b/android/TerminalApp/res/values-en-rCA/strings.xml
index 39eb287..b605681 100644
--- a/android/TerminalApp/res/values-en-rCA/strings.xml
+++ b/android/TerminalApp/res/values-en-rCA/strings.xml
@@ -17,43 +17,60 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Terminal"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Terminal display"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Cursor"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Empty line"</string>
+    <string name="double_tap_to_edit_text" msgid="7380095045491399890">"Double-tap to go to cursor"</string>
     <string name="installer_title_text" msgid="500663060973466805">"Install Linux terminal"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"To launch Linux terminal, you need to download roughly <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> of data over network.\nWould you proceed?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Download when Wi-Fi is available"</string>
+    <string name="installer_desc_text_format" msgid="5935117404303982823">"To launch Linux terminal, you need to download roughly <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> of data over the network.\nWould you like to proceed?"</string>
+    <string name="installer_wait_for_wifi_checkbox_text" msgid="5812378362605046639">"Download using Wi-Fi only"</string>
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Install"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Installing"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Network error. Check connection and retry."</string>
+    <string name="installer_install_network_error_message" msgid="6483202005746623398">"Failed to install due to a network error. Check your connection and try again."</string>
     <string name="installer_notif_title_text" msgid="471160690081159042">"Installing Linux terminal"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Linux terminal will be started after finish"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Failed to install due to the network issue"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Failed to install. Try again."</string>
+    <string name="installer_notif_desc_text" msgid="2353770076549425837">"Linux terminal will start after the installation is finished"</string>
+    <string name="installer_error_network" msgid="5627330072955876676">"Failed to install due to a network issue"</string>
+    <string name="installer_error_no_wifi" msgid="1180164894845030969">"Failed to install because Wi-Fi is not available"</string>
+    <string name="installer_error_unknown" msgid="5657920711470180224">"Failed to install. Please try again"</string>
     <string name="action_settings" msgid="5729342767795123227">"Settings"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Preparing terminal"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Stopping terminal"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Terminal crashed"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Disk Resize"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Resize / Rootfs"</string>
+    <string name="settings_disk_resize_title" msgid="8648082439414122069">"Disk resize"</string>
+    <string name="settings_disk_resize_sub_title" msgid="568100064927028058">"Resize the root partition size"</string>
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Disk size set"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> assigned"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"<xliff:g id="MAX_SIZE">%1$s</xliff:g> max"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Cancel"</string>
-    <string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="83303619015991908">"Restart to apply"</string>
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Port Forwarding"</string>
+    <string name="settings_disk_resize_resize_restart_vm_to_apply" msgid="6651018335906339973">"Apply"</string>
+    <string name="settings_disk_resize_resize_confirm_dialog_message" msgid="6906352501525496328">"Terminal will be restarted to resize disk"</string>
+    <string name="settings_disk_resize_resize_confirm_dialog_confirm" msgid="7347432999245803583">"Confirm"</string>
+    <string name="settings_port_forwarding_title" msgid="4911743992816071205">"Port forwarding"</string>
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Configure port forwarding"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"Terminal is trying to open a new port"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Port requested to be open: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <string name="settings_port_forwarding_notification_title" msgid="6950621555592547524">"Terminal is requesting to open a new port"</string>
+    <string name="settings_port_forwarding_notification_content" msgid="5072621159244211971">"Port requested: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Accept"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Deny"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Recovery"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Partition Recovery options"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Change to Initial version"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Remove all"</string>
+    <string name="settings_recovery_sub_title" msgid="3906996270508262595">"Partition recovery options"</string>
+    <string name="settings_recovery_reset_title" msgid="5388842560910568731">"Reset to initial version"</string>
+    <string name="settings_recovery_reset_sub_title" msgid="1079896907344675995">"Remove all data"</string>
     <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Reset terminal"</string>
-    <string name="settings_recovery_reset_dialog_message" msgid="6392681199895696206">"Data will be deleted"</string>
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Confirm"</string>
+    <string name="settings_recovery_reset_dialog_message" msgid="851530339815113000">"Data will be removed"</string>
+    <string name="settings_recovery_reset_dialog_confirm" msgid="6916237820754131902">"Reset"</string>
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Cancel"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Back up data to <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <string name="settings_recovery_error_due_to_backup" msgid="9034741074141274096">"Failed to recover due to a backup error"</string>
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Recovery failed"</string>
+    <string name="settings_recovery_error_during_removing_backup" msgid="2447990797766248691">"Failed to remove backup data"</string>
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Remove backup data"</string>
+    <string name="settings_recovery_remove_backup_sub_title" msgid="7791375988320242059">"Remove <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <string name="error_title" msgid="405150657301906598">"Unrecoverable error"</string>
+    <string name="error_desc" msgid="1984714179775053347">"Failed to recover from an error.\nYou can try restarting terminal or try one of the recovery options."</string>
+    <string name="error_code" msgid="3585291676855383649">"Error code: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Settings"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"Terminal is running"</string>
-    <string name="service_notification_content" msgid="3579923802797824545">"Click to open the terminal"</string>
+    <string name="service_notification_content" msgid="5772901142342308273">"Click to open terminal"</string>
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Close"</string>
+    <string name="virgl_enabled" msgid="5242525588039698086">"<xliff:g id="ID_1">VirGL</xliff:g> is enabled"</string>
 </resources>
diff --git a/android/TerminalApp/res/values-en-rGB/strings.xml b/android/TerminalApp/res/values-en-rGB/strings.xml
index 9723565..5168e3c 100644
--- a/android/TerminalApp/res/values-en-rGB/strings.xml
+++ b/android/TerminalApp/res/values-en-rGB/strings.xml
@@ -17,47 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Terminal"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Terminal display"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Cursor"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Empty line"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Install Linux terminal"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"To launch a Linux terminal, you need to download roughly <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> of data over the network.\nWould you like to proceed?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Download when Wi-Fi is available"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Install"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Installing"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Network error. Check connection and retry."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Installing Linux terminal"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Linux terminal will be started after finish"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Failed to install due to the network issue"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Failed to install. Try again."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Settings"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Preparing terminal"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Stopping terminal"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Terminal crashed"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Disk resize"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Resize/Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Disk size set"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> assigned"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"<xliff:g id="MAX_SIZE">%1$s</xliff:g> max"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Cancel"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Port forwarding"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Configure port forwarding"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"Terminal is trying to open a new port"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Port requested to be open: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Accept"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Deny"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Recovery"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Partition recovery options"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Change to initial version"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Remove all"</string>
-    <!-- no translation found for settings_recovery_reset_dialog_title (874946981716251094) -->
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
     <skip />
-    <!-- no translation found for settings_recovery_reset_dialog_message (6392681199895696206) -->
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
     <skip />
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Confirm"</string>
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
+    <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Reset terminal"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Cancel"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Back up data to <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Recovery failed"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Remove backup data"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Error code: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Settings"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"Terminal is running"</string>
-    <!-- no translation found for service_notification_content (3579923802797824545) -->
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
     <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Close"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-en-rIN/strings.xml b/android/TerminalApp/res/values-en-rIN/strings.xml
index 9723565..5168e3c 100644
--- a/android/TerminalApp/res/values-en-rIN/strings.xml
+++ b/android/TerminalApp/res/values-en-rIN/strings.xml
@@ -17,47 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Terminal"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Terminal display"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Cursor"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Empty line"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Install Linux terminal"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"To launch a Linux terminal, you need to download roughly <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> of data over the network.\nWould you like to proceed?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Download when Wi-Fi is available"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Install"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Installing"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Network error. Check connection and retry."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Installing Linux terminal"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Linux terminal will be started after finish"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Failed to install due to the network issue"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Failed to install. Try again."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Settings"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Preparing terminal"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Stopping terminal"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Terminal crashed"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Disk resize"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Resize/Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Disk size set"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> assigned"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"<xliff:g id="MAX_SIZE">%1$s</xliff:g> max"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Cancel"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Port forwarding"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Configure port forwarding"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"Terminal is trying to open a new port"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Port requested to be open: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Accept"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Deny"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Recovery"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Partition recovery options"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Change to initial version"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Remove all"</string>
-    <!-- no translation found for settings_recovery_reset_dialog_title (874946981716251094) -->
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
     <skip />
-    <!-- no translation found for settings_recovery_reset_dialog_message (6392681199895696206) -->
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
     <skip />
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Confirm"</string>
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
+    <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Reset terminal"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Cancel"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Back up data to <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Recovery failed"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Remove backup data"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Error code: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Settings"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"Terminal is running"</string>
-    <!-- no translation found for service_notification_content (3579923802797824545) -->
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
     <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Close"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-es-rUS/strings.xml b/android/TerminalApp/res/values-es-rUS/strings.xml
index aabc20d..545d0af 100644
--- a/android/TerminalApp/res/values-es-rUS/strings.xml
+++ b/android/TerminalApp/res/values-es-rUS/strings.xml
@@ -17,44 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Terminal"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Pantalla de la terminal"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Cursor"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Línea vacía"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Instala la terminal de Linux"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Para iniciar la terminal de Linux, debes descargar aproximadamente <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> de datos a través de la red.\n¿Quieres continuar?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Descargar cuando haya una red Wi-Fi disponible"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Instalar"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Instalando"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Error de red. Comprueba la conexión y vuelve a intentarlo."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Instalando la terminal de Linux"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Se iniciará la terminal de Linux después de finalizar"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"No se pudo instalar debido a un problema de red"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"No se pudo instalar. Vuelve a intentarlo."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Configuración"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Preparando la terminal"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Deteniendo la terminal"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Se produjo un error en la terminal"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Cambiar el tamaño del disco"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Cambiar el tamaño/Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Se estableció el tamaño del disco"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> asignados"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"<xliff:g id="MAX_SIZE">%1$s</xliff:g> máx."</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Cancelar"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Redirección de puertos"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Configurar la redirección de puertos"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"La terminal está intentando abrir un puerto nuevo"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Puerto solicitado para abrir: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Aceptar"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Rechazar"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Recuperación"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Opciones de recuperación de particiones"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Cambiar a la versión inicial"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Quitar todos"</string>
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Restablecer terminal"</string>
-    <string name="settings_recovery_reset_dialog_message" msgid="6392681199895696206">"Se borrarán los datos"</string>
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Confirmar"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Cancelar"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Crear una copia de seguridad de los datos en <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Falló la recuperación"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Quitar datos de copia de seguridad"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Código de error: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Configuración"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"Se está ejecutando la terminal"</string>
-    <string name="service_notification_content" msgid="3579923802797824545">"Haz clic para abrir la terminal"</string>
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
+    <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Cerrar"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-es/strings.xml b/android/TerminalApp/res/values-es/strings.xml
index b239646..60b6ba4 100644
--- a/android/TerminalApp/res/values-es/strings.xml
+++ b/android/TerminalApp/res/values-es/strings.xml
@@ -17,47 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Terminal"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Pantalla del terminal"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Cursor"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Línea vacía"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Instala el terminal de Linux"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Para iniciar el terminal de Linux, debes descargar unos <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> de datos a través de la red.\n¿Quieres continuar?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Descargar cuando haya una red Wi-Fi disponible"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Instalar"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Instalando"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Error de red. Comprueba la conexión y vuelve a intentarlo."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Instalando terminal de Linux"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"El terminal de Linux se iniciará cuando finalice"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"No se ha podido instalar debido a un problema de red"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"No se ha podido instalar. Inténtalo de nuevo."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Ajustes"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Preparando terminal"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Deteniendo terminal"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Fallo del terminal"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Cambiar tamaño de disco"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Cambiar tamaño/Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Tamaño de disco definido"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> asignados"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"<xliff:g id="MAX_SIZE">%1$s</xliff:g> como máximo"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Cancelar"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Redirección de puertos"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Configurar la redirección de puertos"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"El terminal está intentando abrir un nuevo puerto"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Puerto que se solicita que esté abierto: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Aceptar"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Denegar"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Recuperación"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Opciones de recuperación de particiones"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Cambiar a versión inicial"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Quitar todo"</string>
-    <!-- no translation found for settings_recovery_reset_dialog_title (874946981716251094) -->
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
     <skip />
-    <!-- no translation found for settings_recovery_reset_dialog_message (6392681199895696206) -->
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
     <skip />
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Confirmar"</string>
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
+    <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Restablecer terminal"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Cancelar"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Crear copia de seguridad de los datos en <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"No se ha podido recuperar"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Eliminar datos de copia de seguridad"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Código de error: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Ajustes"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"El terminal se está ejecutando"</string>
-    <!-- no translation found for service_notification_content (3579923802797824545) -->
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
     <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Cerrar"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-et/strings.xml b/android/TerminalApp/res/values-et/strings.xml
index fd6b997..d7dd8bf 100644
--- a/android/TerminalApp/res/values-et/strings.xml
+++ b/android/TerminalApp/res/values-et/strings.xml
@@ -17,44 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Terminal"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Terminali ekraan"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Kursor"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Tühi rida"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Linuxi terminali installimine"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Linuxi terminali käivitamiseks tuleb teil võrgu kaudu alla laadida umbes <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> andmeid.\nKas soovite jätkata?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Laadi alla, kui WiFi on saadaval"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Installi"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Installimine"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Võrgu viga. Kontrollige ühendust ja proovige uuesti."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Linuxi terminali installimine"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Linuxi terminal käivitatakse pärast lõpetamist"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Installimine ebaõnnestus võrguprobleemi tõttu"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Installimine ebaõnnestus. Proovige uuesti."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Seaded"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Terminali ettevalmistamine"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Terminali peatamine"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Terminal jooksis kokku"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Ketta suuruse muutmine"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Suuruse muutmine / Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Ketta suurus on määratud"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> on määratud"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"Max <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Tühista"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Pordisiire"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Konfigureerige pordisiire"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"Terminal üritab uut porti avada"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Port, mille avamist taotleti: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Nõustu"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Keela"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Taastamine"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Sektsiooni taastevalikud"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Muutke algsele versioonile"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Eemaldage kõik"</string>
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Terminali lähtestamine"</string>
-    <string name="settings_recovery_reset_dialog_message" msgid="6392681199895696206">"Andmed kustutatakse"</string>
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Kinnita"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Tühista"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Varunda andmed asukohta <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Taastamine ebaõnnestus"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Varundusandmete eemaldamine"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Veakood: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Seaded"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"Terminal töötab"</string>
-    <string name="service_notification_content" msgid="3579923802797824545">"Klõpsake terminali avamiseks"</string>
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
+    <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Sule"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-eu/strings.xml b/android/TerminalApp/res/values-eu/strings.xml
index 99cb7b4..1807ab9 100644
--- a/android/TerminalApp/res/values-eu/strings.xml
+++ b/android/TerminalApp/res/values-eu/strings.xml
@@ -17,47 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Terminala"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Terminalaren pantaila"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Kurtsorea"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Lerro hutsa"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Instalatu Linux-en terminala"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Linux-en terminala exekutatzeko, gutxi gorabehera <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> datu deskargatu behar dituzu sarearen bidez.\nAurrera egin nahi duzu?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Deskargatu wifi-sare bat erabilgarri dagoenean"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Instalatu"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Instalatzen"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Sareko errorea. Egiaztatu konektatuta zaudela eta saiatu berriro."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Linux-en terminala instalatzen"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Prozesua amaitu ondoren abiaraziko da Linux-en terminala"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Ezin izan da instalatu, sarean arazo bat dagoelako"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Ezin izan da instalatu. Saiatu berriro."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Ezarpenak"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Terminala prestatzen"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Terminala geldiarazten"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Terminalak huts egin du"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Aldatu diskoaren tamaina"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Aldatu tamaina / Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Ezarri da diskoaren tamaina"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> esleituta"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"Gehienez ere <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Utzi"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Ataka-birbideratzea"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Konfiguratu ataka-birbideratzea"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"Terminala beste ataka bat irekitzen saiatzen ari da"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Ataka hau irekitzeko eskatu da: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Onartu"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Ukatu"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Berreskuratzea"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Partizioa berreskuratzeko aukerak"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Aldatu hasierako bertsiora"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Kendu guztiak"</string>
-    <!-- no translation found for settings_recovery_reset_dialog_title (874946981716251094) -->
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
     <skip />
-    <!-- no translation found for settings_recovery_reset_dialog_message (6392681199895696206) -->
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
     <skip />
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Berretsi"</string>
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
+    <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Berrezarri terminala"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Utzi"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Egin datuen babeskopiak hemen: <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Ezin izan da berreskuratu"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Kendu babeskopien datuak"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Errore-kodea: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Ezarpenak"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"Terminala abian da"</string>
-    <!-- no translation found for service_notification_content (3579923802797824545) -->
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
     <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Itxi"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-fa/strings.xml b/android/TerminalApp/res/values-fa/strings.xml
index a07b722..7248bc2 100644
--- a/android/TerminalApp/res/values-fa/strings.xml
+++ b/android/TerminalApp/res/values-fa/strings.xml
@@ -17,44 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"پایانه"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"نمایشگر پایانه"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"مکان‌نما"</string>
+    <string name="empty_line" msgid="5012067143408427178">"خط خالی"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"نصب پایانه Linux"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"برای راه‌اندازی پایانه Linux، باید تقریباً <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> داده ازطریق شبکه بارگیری کنید.\nادامه می‌دهید؟"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"هنگام دسترسی به Wi-Fi بارگیری شود"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"نصب"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"درحال نصب"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"خطای شبکه. اتصال را بررسی و سپس دوباره امتحان کنید."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"درحال نصب پایانه Linux"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"پایانه Linux بعداز اتمام شروع خواهد شد"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"به‌دلیل خطای شبکه نصب نشد"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"نصب نشد. دوباره امتحان کنید."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"تنظیمات"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"درحال آماده‌سازی پایانه"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"پایانه درحال توقف است"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"پایانه ازکار افتاد"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"تغییر اندازه دیسک"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"تغییر اندازه / روت فایل سیستم"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"تنظیم اندازه دیسک"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"‫<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> اختصاص یافته است"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"حداکثر <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"لغو"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"بازارسال درگاه"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"پیکربندی بازارسال درگاه"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"پایانه می‌خواهد درگاه جدیدی باز کند"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"درگاهی که درخواست شده است باز شود: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"پذیرفتن"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"رد کردن"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"بازیابی"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"گزینه‌های بازیابی پارتیشن"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"تغییر به نسخه ابتدایی"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"برداشتن همه"</string>
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"بازنشانی پایانه"</string>
-    <string name="settings_recovery_reset_dialog_message" msgid="6392681199895696206">"داده‌ها حذف خواهد شد"</string>
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"تأیید کردن"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"لغو کردن"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"پشتیبان‌گیری از داده‌ها در <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"بازیابی انجام نشد"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"حذف داده‌های پشتیبان"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"کد خطا: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"تنظیمات"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"پایانه درحال اجرا است"</string>
-    <string name="service_notification_content" msgid="3579923802797824545">"برای باز کردن پایانه، کلیک کنید"</string>
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
+    <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"بستن"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-fi/strings.xml b/android/TerminalApp/res/values-fi/strings.xml
index 8f98d19..2702419 100644
--- a/android/TerminalApp/res/values-fi/strings.xml
+++ b/android/TerminalApp/res/values-fi/strings.xml
@@ -17,47 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Pääte"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Terminaalinäyttö"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Kohdistin"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Tyhjä rivi"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Asenna Linux-pääte"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Linux-päätteen käynnistäminen edellyttää, että lataat noin <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> dataa verkon kautta.\nHaluatko jatkaa?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Lataa, kun Wi-Fi on käytettävissä"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Asenna"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Asennetaan"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Verkkovirhe. Tarkista yhteys ja yritä uudelleen."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Linux-päätettä asennetaan"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Linux-pääte käynnistetään, kun se on valmis"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Asennus epäonnistui verkkovirheen vuoksi"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Asennus epäonnistui. Yritä uudelleen."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Asetukset"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Valmistellaan päätettä"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Pysäytetään terminaalia"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Terminaali kaatui"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Muuta levyn kokoa"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Muuta kokoa / Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Levyn koko asetettu"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> määritetty"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"Enintään <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Peru"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Porttiohjaus"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Määritä porttiohjaus"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"Pääte yrittää avata uuden portin"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Avattavaksi pyydetty portti: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Hyväksy"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Hylkää"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Palautus"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Osion palautusvaihtoehdot"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Vaihda ensimmäiseen versioon"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Poista kaikki"</string>
-    <!-- no translation found for settings_recovery_reset_dialog_title (874946981716251094) -->
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
     <skip />
-    <!-- no translation found for settings_recovery_reset_dialog_message (6392681199895696206) -->
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
     <skip />
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Vahvista"</string>
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
+    <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Nollaa terminaali"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Peru"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Varmuuskopioi data tänne: <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Palautus epäonnistui"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Poista varmuuskopiodata"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Virhekoodi: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Asetukset"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"Pääte on käynnissä"</string>
-    <!-- no translation found for service_notification_content (3579923802797824545) -->
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
     <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Sulje"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-fr-rCA/strings.xml b/android/TerminalApp/res/values-fr-rCA/strings.xml
index 743129d..121d9c9 100644
--- a/android/TerminalApp/res/values-fr-rCA/strings.xml
+++ b/android/TerminalApp/res/values-fr-rCA/strings.xml
@@ -17,44 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Terminal"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Écran du terminal"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Curseur"</string>
+    <string name="empty_line" msgid="5012067143408427178">"La ligne est vide"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Installer le terminal Linux"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Pour lancer un terminal Linux, vous devez télécharger environ <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> de données sur le réseau.\nSouhaitez-vous continuer?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Télécharger lorsque le Wi-Fi est accessible"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Installer"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Installation…"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Erreur de réseau. Vérifiez la connexion et réessayez."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Installation du terminal Linux en cours…"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Le terminal Linux démarrera une fois l\'installation terminée"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Échec de l\'installation en raison d\'un problème de réseau"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Échec de l\'installation. Réessayez."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Paramètres"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Préparation du terminal en cours…"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Arrêt du terminal en cours…"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Le terminal a planté"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Redimensionnement du disque"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Redimensionnement/Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Taille du disque définie"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> attribués"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"<xliff:g id="MAX_SIZE">%1$s</xliff:g> maximum"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Annuler"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Redirection de port"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Configurez la redirection de port"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"Le terminal tente d\'ouvrir un nouveau port"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Port dont l\'ouverture est demandée : <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Accepter"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Refuser"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Récupération"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Options de récupération de partition"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Passer à la version initiale"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Tout retirer"</string>
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Réinitialiser le terminal"</string>
-    <string name="settings_recovery_reset_dialog_message" msgid="6392681199895696206">"Les données seront supprimées"</string>
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Confirmer"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Annuler"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Sauvegarder les données sur <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Échec de la récupération"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Retirer les données de sauvegarde"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Code d\'erreur : <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Paramètres"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"Le terminal fonctionne"</string>
-    <string name="service_notification_content" msgid="3579923802797824545">"Cliquez pour ouvrir le terminal"</string>
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
+    <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Fermer"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-fr/strings.xml b/android/TerminalApp/res/values-fr/strings.xml
index 429d51f..b2015c4 100644
--- a/android/TerminalApp/res/values-fr/strings.xml
+++ b/android/TerminalApp/res/values-fr/strings.xml
@@ -17,44 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Terminal"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Affichage du terminal"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Curseur"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Ligne vide"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Installer le terminal Linux"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Pour lancer le terminal Linux, vous devez télécharger environ <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> de données via le réseau.\nVoulez-vous continuer ?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Télécharger lorsque le Wi-Fi sera disponible"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Installer"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Installation…"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Erreur réseau. Vérifiez la connexion et réessayez."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Installation du terminal Linux…"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Le terminal Linux sera lancé une fois l\'opération terminée"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Échec de l\'installation en raison d\'un problème réseau"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Échec de l\'installation. Réessayez."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Paramètres"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Préparation du terminal"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Arrêt du terminal"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Le terminal a planté"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Redimensionnement du disque"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Redimensionner/Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Taille du disque définie"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> attribués"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"<xliff:g id="MAX_SIZE">%1$s</xliff:g> maximum"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Annuler"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Transfert de port"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Configurer le transfert de port"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"Le terminal essaie d\'ouvrir un nouveau port"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Demande d\'ouverture du port suivant : <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Accepter"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Refuser"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Récupération"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Options de récupération de la partition"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Revenir à la version initiale"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Tout supprimer"</string>
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Réinitialiser le terminal"</string>
-    <string name="settings_recovery_reset_dialog_message" msgid="6392681199895696206">"Les données seront supprimées"</string>
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Confirmer"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Annuler"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Sauvegarder les données dans <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Échec de la récupération"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Supprimer les données de sauvegarde"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Code d\'erreur : <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Paramètres"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"Terminal en cours d\'exécution"</string>
-    <string name="service_notification_content" msgid="3579923802797824545">"Cliquez pour ouvrir le terminal"</string>
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
+    <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Fermer"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-gl/strings.xml b/android/TerminalApp/res/values-gl/strings.xml
index f81759f..5e21fd6 100644
--- a/android/TerminalApp/res/values-gl/strings.xml
+++ b/android/TerminalApp/res/values-gl/strings.xml
@@ -17,47 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Terminal"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Pantalla do terminal"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Cursor"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Liña baleira"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Instalar o terminal de Linux"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Para iniciar o terminal de Linux, tes que descargar uns <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> de datos a través da rede.\nQueres continuar?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Descargar cando haxa wifi dispoñible"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Instalar"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Instalando"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Produciuse un erro da rede. Comproba a conexión e téntao de novo."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Instalando terminal de Linux"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"O terminal de Linux iniciarase en canto remate a instalación"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Produciuse un erro durante instalación por un problema coa rede"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Produciuse un erro durante a instalación. Téntao de novo."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Configuración"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Preparando terminal"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Parando terminal"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Produciuse un fallo no terminal"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Cambiar tamaño do disco"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Cambia o tamaño/Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Definiuse o tamaño do disco"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"Tamaño asignado: <xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"<xliff:g id="MAX_SIZE">%1$s</xliff:g> como máximo"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Cancelar"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Encamiñamento de porto"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Configura o encamiñamento de porto"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"O terminal está tentando abrir outro porto"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Porto que se solicitou abrir: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Aceptar"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Denegar"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Recuperación"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Opcións de recuperación da partición"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Cambiar á versión inicial"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Quita todo"</string>
-    <!-- no translation found for settings_recovery_reset_dialog_title (874946981716251094) -->
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
     <skip />
-    <!-- no translation found for settings_recovery_reset_dialog_message (6392681199895696206) -->
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
     <skip />
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Confirmar"</string>
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
+    <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Restablecer o terminal"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Cancelar"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Facer unha copia de seguranza dos datos en <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Produciuse un erro na recuperación"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Quitar datos da copia de seguranza"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Código de erro: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Configuración"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"O terminal está en funcionamento"</string>
-    <!-- no translation found for service_notification_content (3579923802797824545) -->
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
     <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Pechar"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-gu/strings.xml b/android/TerminalApp/res/values-gu/strings.xml
index c93040a..280b509 100644
--- a/android/TerminalApp/res/values-gu/strings.xml
+++ b/android/TerminalApp/res/values-gu/strings.xml
@@ -17,44 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"ટર્મિનલ"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"ટર્મિનલ ડિસ્પ્લે"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"કર્સર"</string>
+    <string name="empty_line" msgid="5012067143408427178">"ખાલી લાઇન"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Linux ટર્મિનલ ઇન્સ્ટૉલ કરો"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Linux ટર્મિનલ લૉન્ચ કરવા માટે, તમારે નેટવર્ક પર આશરે <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> ડેટા ડાઉનલોડ કરવાની જરૂર છે.\nશું તમારે આગળ વધવું છે?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"જ્યારે વાઇ-ફાઇ ઉપલબ્ધ હોય, ત્યારે ડાઉનલોડ કરો"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"ઇન્સ્ટૉલ કરો"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"ઇન્સ્ટૉલ કરી રહ્યાં છીએ"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"નેટવર્ક ભૂલ. કનેક્શન ચેક કરો અને ફરી પ્રયાસ કરો."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Linux ટર્મિનલ ઇન્સ્ટૉલ કરી રહ્યાં છીએ"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"પ્રક્રિયા સમાપ્ત થયા પછી Linux ટર્મિનલ શરૂ થશે"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"નેટવર્કની સમસ્યાને કારણે ઇન્સ્ટૉલ કરવામાં નિષ્ફળ રહ્યાં"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"ઇન્સ્ટૉલ કરવામાં નિષ્ફળ રહ્યાં. ફરી પ્રયાસ કરો."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"સેટિંગ"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"ટર્મિનલ તૈયાર કરી રહ્યાં છીએ"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"ટર્મિનલ બંધ કરી રહ્યાં છીએ"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"ટર્મિનલ ક્રૅશ થયું"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"ડિસ્કનું કદ બદલવું"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"કદ બદલો / Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"ડિસ્કનું કદ સેટ કર્યું"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> સોંપ્યું છે"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"મહત્તમ <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"રદ કરો"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"પોર્ટ ફૉરવર્ડિંગ"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"પોર્ટ ફૉરવર્ડિંગનું કન્ફિગ્યુરેશન કરો"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"ટર્મિનલ નવું પોર્ટ ખોલવાનો પ્રયાસ કરી રહ્યું છે"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"પોર્ટને ખોલવાની વિનંતી કરવામાં આવી: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"સ્વીકારો"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"નકારો"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"રિકવરી"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"પાર્ટિશન રિકવરીના વિકલ્પો"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"બદલીને પ્રારંભિક વર્ઝન કરો"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"તમામ કાઢી નાખો"</string>
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"ટર્મિનલ રીસેટ કરો"</string>
-    <string name="settings_recovery_reset_dialog_message" msgid="6392681199895696206">"ડેટા ડિલીટ કરવામાં આવશે"</string>
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"કન્ફર્મ કરો"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"રદ કરો"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"<xliff:g id="PATH">/mnt/backup</xliff:g> પર ડેટાનું બૅકઅપ લો"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"રિકવરી નિષ્ફળ રહી"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"બૅકઅપ ડેટા કાઢી નાખો"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"ભૂલનો કોડ: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"સેટિંગ"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"ટર્મિનલ ચાલી રહ્યું છે"</string>
-    <string name="service_notification_content" msgid="3579923802797824545">"ટર્મિનલ ખોલવા માટે ક્લિક કરો"</string>
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
+    <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"બંધ કરો"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-hi/strings.xml b/android/TerminalApp/res/values-hi/strings.xml
index e626f28..7357b7f 100644
--- a/android/TerminalApp/res/values-hi/strings.xml
+++ b/android/TerminalApp/res/values-hi/strings.xml
@@ -17,44 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"टर्मिनल"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"टर्मिनल डिसप्ले"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"कर्सर."</string>
+    <string name="empty_line" msgid="5012067143408427178">"खाली लाइन"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Linux टर्मिनल ऐप्लिकेशन इंस्टॉल करें"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Linux टर्मिनल ऐप्लिकेशन को लॉन्च करने के लिए, आपको इंटरनेट से <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> डेटा डाउनलोड करना होगा.\nक्या आपको आगे बढ़ना है?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"वाई-फ़ाई उपलब्ध होने पर डाउनलोड करें"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"इंस्टॉल करें"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"इंस्टॉल हो रहा"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"नेटवर्क की गड़बड़ी हुई. इंटरनेट कनेक्शन की जांच करें और फिर से कोशिश करें."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Linux टर्मिनल ऐप्लिकेशन इंस्टॉल हो रहा है"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"प्रोसेस पूरी होने के बाद, Linux टर्मिनल ऐप्लिकेशन, इस्तेमाल किया जा सकेगा"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"नेटवर्क की समस्या की वजह से, इंस्टॉल नहीं किया जा सका"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"इंस्टॉल नहीं किया जा सका. फिर से कोशिश करें."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"सेटिंग"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"टर्मिनल तैयार किया जा रहा है"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"टर्मिनल को रोका जा रहा है"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"टर्मिनल क्रैश हो गया"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"डिस्क का साइज़ बदलें"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"साइज़ बदलें / Rootfs"</string>
-    <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"डिस्क का साइज़ सेट किया गया"</string>
-    <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"असाइन किया गया साइज़: <xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g>"</string>
-    <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"ज़्यादा से ज़्यादा साइज़: <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
-    <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"रद्द करें"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"पोर्ट फ़ॉरवर्डिंग"</string>
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
+    <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"डिस्क का साइज़ सेट किया गया"</string>
+    <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> असाइन किया गया"</string>
+    <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"मैक्सिमम <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
+    <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"रद्द करें"</string>
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"पोर्ट फ़ॉरवर्डिंग को कॉन्फ़िगर करें"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"टर्मिनल, एक नया पोर्ट खोलने की कोशिश कर रहा है"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"पोर्ट को खोलने का अनुरोध किया गया: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"स्वीकार करें"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"अस्वीकार करें"</string>
-    <string name="settings_recovery_title" msgid="6586840079226383285">"इमेज को रिकवर करें"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"इमेज के हिस्से को रिकवर करने के विकल्प"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"शुरुआती वर्शन पर स्विच करें"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"वीएम की सभी इमेज हटाएं"</string>
+    <string name="settings_recovery_title" msgid="6586840079226383285">"इमेज रिकवर करें"</string>
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"टर्मिनल रीसेट करें"</string>
-    <string name="settings_recovery_reset_dialog_message" msgid="6392681199895696206">"डेटा मिटा दिया जाएगा"</string>
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"पुष्टि करें"</string>
-    <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"रद्द करें"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
+    <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"अभी नहीं"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"<xliff:g id="PATH">/mnt/backup</xliff:g> पर डेटा का बैक अप लें"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"रिकवर नहीं किया जा सका"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"बैकअप डेटा हटाएं"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"गड़बड़ी का कोड: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"सेटिंग"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"टर्मिनल चालू है"</string>
-    <string name="service_notification_content" msgid="3579923802797824545">"टर्मिनल खोलने के लिए क्लिक करें"</string>
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
+    <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"बंद करें"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-hr/strings.xml b/android/TerminalApp/res/values-hr/strings.xml
index d08d24b..2fcb2b5 100644
--- a/android/TerminalApp/res/values-hr/strings.xml
+++ b/android/TerminalApp/res/values-hr/strings.xml
@@ -17,47 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Terminal"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Zaslon terminala"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Pokazivač"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Prazan redak"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Instalirajte Linux terminal"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Da biste pokrenuli Linux terminal, trebate preuzeti otprilike <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> podataka putem mreže.\nŽelite li nastaviti?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Preuzmi kada Wi-Fi bude dostupan"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Instaliraj"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Instaliranje"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Mrežna pogreška. Provjerite vezu i pokušajte ponovo."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Instaliranje Linux terminala"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Linux terminal pokrenut će se nakon završetka"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Instalacija nije uspjela zbog problema s mrežom"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Instaliranje nije uspjelo. Pokušajte ponovo."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Postavke"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Priprema terminala"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Zaustavljanje terminala"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Terminal se srušio"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Promjena veličine diska"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Promjena veličine/rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Veličina diska je postavljena"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"Dodijeljeno: <xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"Maks. <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Odustani"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Prosljeđivanje priključka"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Konfiguriranje prosljeđivanja priključka"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"Terminal pokušava otvoriti novi priključak"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Zatraženo je otvaranje priključka: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Prihvati"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Odbij"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Oporavak"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Opcije oporavka particije"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Vrati na početnu verziju"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Ukloni sve"</string>
-    <!-- no translation found for settings_recovery_reset_dialog_title (874946981716251094) -->
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
     <skip />
-    <!-- no translation found for settings_recovery_reset_dialog_message (6392681199895696206) -->
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
     <skip />
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Potvrdi"</string>
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
+    <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Poništavanje terminala"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Odustani"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Sigurnosno kopiranje podataka u <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Oporavak nije uspio"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Ukloni podatke sigurnosne kopije"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Kôd pogreške: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Postavke"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"Terminal je pokrenut"</string>
-    <!-- no translation found for service_notification_content (3579923802797824545) -->
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
     <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Zatvori"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-hu/strings.xml b/android/TerminalApp/res/values-hu/strings.xml
index 1c2bf7c..5f28e74 100644
--- a/android/TerminalApp/res/values-hu/strings.xml
+++ b/android/TerminalApp/res/values-hu/strings.xml
@@ -17,47 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Terminál"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Terminálkijelző"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Kurzor"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Üres sor"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Linux-terminál telepítése"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"A Linux-terminál elindításához körülbelül <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> adatmennyiséget kell letöltenie a hálózaton keresztül.\nFolytatja?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Letöltés, ha rendelkezésre áll Wi-Fi-kapcsolat"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Telepítés"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Telepítés…"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Hálózati hiba. Ellenőrizze a kapcsolatot, majd próbálja újra."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Linux-terminál telepítése…"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"A Linux-terminál a befejezés után indul el"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Hálózati probléma miatt nem sikerült a telepítés"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Nem sikerült a telepítés. Próbálkozzon újra."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Beállítások"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"A terminál előkészítése…"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"A terminál leállítása…"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"A terminál összeomlott"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Lemez átméretezése"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Átméretezés/Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Lemezméret beállítva"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> hozzárendelve"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"Maximum: <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Mégse"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Portátirányítás"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Portátirányítás konfigurálása"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"A Terminal új portot próbál megnyitni"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"A megnyitni kívánt port: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Elfogadás"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Elutasítás"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Helyreállítás"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Partíció-helyreállítási lehetőségek"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Váltás az eredeti verzióra"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Az összes eltávolítása"</string>
-    <!-- no translation found for settings_recovery_reset_dialog_title (874946981716251094) -->
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
     <skip />
-    <!-- no translation found for settings_recovery_reset_dialog_message (6392681199895696206) -->
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
     <skip />
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Megerősítés"</string>
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
+    <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Terminál visszaállítása"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Mégse"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Adatok biztonsági mentése ide: <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Sikertelen helyreállítás"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Biztonsági másolat adatainak eltávolítása"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Hibakód: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Beállítások"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"A terminál fut"</string>
-    <!-- no translation found for service_notification_content (3579923802797824545) -->
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
     <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Bezárás"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-hy/strings.xml b/android/TerminalApp/res/values-hy/strings.xml
index cfaf8ce..549a5b8 100644
--- a/android/TerminalApp/res/values-hy/strings.xml
+++ b/android/TerminalApp/res/values-hy/strings.xml
@@ -17,44 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Տերմինալ"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Տերմինալի էկրան"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Նշորդ"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Դատարկ տող"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Լինուքս տերմինալի տեղադրում"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Լինուքս տերմինալը գործարկելու համար անհրաժեշտ է ցանցի միջոցով ներբեռնել մոտ <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> տվյալ։\nՇարունակե՞լ։"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Ներբեռնել, երբ սարքը միանա Wi-Fi-ին"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Տեղադրել"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Տեղադրվում է"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Ցանցի սխալ։ Ստուգեք կապը և նորից փորձեք։"</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Լինուքս տերմինալը տեղադրվում է"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Ավարտից հետո Լինուքս տերմինալը կգործարկվի"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Տեղադրումը ձախողվեց ցանցի հետ կապված խնդրի պատճառով"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Չհաջողվեց տեղադրել: Նորից փորձեք։"</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Կարգավորումներ"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Տերմինալի նախապատրաստում"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Տերմինալը կանգնեցվում է"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Տերմինալը խափանվել է"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Սկավառակի չափափոխում"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Չափափոխում / Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Սկավառակի չափսը սահմանված է"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"Հատկացված է <xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"Առավելագույնը՝ <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Չեղարկել"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Միացքի փոխանցում"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Միացքի փոխանցման կազմաձևում"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"Տերմինալը փորձում է նոր միացք բացել"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Միացքը, որը պահանջվում է բացել՝ <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Ընդունել"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Մերժել"</string>
-    <string name="settings_recovery_title" msgid="6586840079226383285">"Վերականգնում"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Բաժնի վերականգնման տարբերակներ"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Նախնական տարբերակի վերականգնում"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Հեռացնել բոլորը"</string>
+    <string name="settings_recovery_title" msgid="6586840079226383285">"Վերականգ­նում"</string>
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Տերմինալի վերակայում"</string>
-    <string name="settings_recovery_reset_dialog_message" msgid="6392681199895696206">"Տվյալները կջնջվեն"</string>
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Հաստատել"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Չեղարկել"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Պահուստավորել տվյալները այստեղ՝ <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Չհաջողվեց վերականգնել"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Հեռացնել պահուստավորված տվյալները"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Սխալի կոդը՝ <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Կարգավորումներ"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"Տերմինալն աշխատում է"</string>
-    <string name="service_notification_content" msgid="3579923802797824545">"Սեղմեք՝ տերմինալը բացելու համար"</string>
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
+    <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Փակել"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-in/strings.xml b/android/TerminalApp/res/values-in/strings.xml
index fc0990a..3586e33 100644
--- a/android/TerminalApp/res/values-in/strings.xml
+++ b/android/TerminalApp/res/values-in/strings.xml
@@ -17,47 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Terminal"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Tampilan terminal"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Kursor"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Baris kosong"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Instal terminal Linux"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Untuk meluncurkan terminal Linux, Anda perlu mendownload sekitar <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> data melalui jaringan.\nApakah Anda ingin melanjutkan?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Download saat Wi-Fi tersedia"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Instal"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Menginstal"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Error jaringan. Periksa koneksi dan coba lagi."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Menginstal terminal Linux"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Terminal Linux akan dimulai setelah penginstalan selesai"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Gagal menginstal karena ada masalah jaringan"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Gagal menginstal. Coba lagi."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Setelan"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Menyiapkan terminal"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Menghentikan terminal"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Terminal error"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Ubah Ukuran Disk"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Ubah ukuran / Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Ukuran disk ditetapkan"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> ditetapkan"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"Maks <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Batal"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Penerusan Port"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Konfigurasi penerusan port"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"Terminal mencoba membuka port baru"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Port yang diminta untuk dibuka: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Terima"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Tolak"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Pemulihan"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Opsi Pemulihan Partisi"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Ubah ke Versi awal"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Hapus semua"</string>
-    <!-- no translation found for settings_recovery_reset_dialog_title (874946981716251094) -->
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
     <skip />
-    <!-- no translation found for settings_recovery_reset_dialog_message (6392681199895696206) -->
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
     <skip />
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Konfirmasi"</string>
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
+    <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Reset terminal"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Batal"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Cadangkan data ke <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Pemulihan gagal"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Hapus data cadangan"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Kode error: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Setelan"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"Terminal sedang berjalan"</string>
-    <!-- no translation found for service_notification_content (3579923802797824545) -->
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
     <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Tutup"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-is/strings.xml b/android/TerminalApp/res/values-is/strings.xml
index 61ae876..6f2fb13 100644
--- a/android/TerminalApp/res/values-is/strings.xml
+++ b/android/TerminalApp/res/values-is/strings.xml
@@ -17,47 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Útstöð"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Skjár útstöðvar"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Bendill"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Auð lína"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Setja upp Linux-útstöð"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Til að ræsa Linux-útstöð þarftu að sækja um <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> af gögnum yfir netkerfi.\nViltu halda áfram?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Sækja þegar Wi-Fi er tiltækt"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Setja upp"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Setur upp"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Netkerfisvilla. Athugaðu tenginguna og reyndu aftur."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Setur upp Linux-útstöð"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Linux-útstöð verður ræst þegar því lýkur"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Tókst ekki að setja upp vegna netkerfisvandamáls"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Tókst ekki að setja upp. Reyndu aftur."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Stillingar"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Undirbýr útstöð"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Stöðvar tengi"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Tengi hrundi"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Breyta stærð disks"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Breyta stærð / Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Stærð disks stillt"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> úthlutað"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"<xliff:g id="MAX_SIZE">%1$s</xliff:g> hámark"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Hætta við"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Framsending gáttar"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Stilla framsendingu gáttar"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"Útstöð er að reyna að opna nýtt tengi"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Tengi sem beðið er um að sé opið: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Samþykkja"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Hafna"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Endurheimt"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Endurheimtarkostir deildar"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Breyta í upphaflega útgáfu"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Fjarlægja allt"</string>
-    <!-- no translation found for settings_recovery_reset_dialog_title (874946981716251094) -->
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
     <skip />
-    <!-- no translation found for settings_recovery_reset_dialog_message (6392681199895696206) -->
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
     <skip />
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Staðfesta"</string>
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
+    <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Endurstilla útstöð"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Hætta við"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Afrita gögn á <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Endurheimt mistókst"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Fjarlægja afrituð gögn"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Villukóði: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Stillingar"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"Útstöð er í gangi"</string>
-    <!-- no translation found for service_notification_content (3579923802797824545) -->
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
     <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Loka"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-it/strings.xml b/android/TerminalApp/res/values-it/strings.xml
index f25c4f9..279c7e1 100644
--- a/android/TerminalApp/res/values-it/strings.xml
+++ b/android/TerminalApp/res/values-it/strings.xml
@@ -17,44 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Terminale"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Display terminale"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Cursore"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Riga vuota"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Installa terminale Linux"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Per avviare il terminale Linux, devi scaricare circa <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> di dati tramite la rete.\nContinuare?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Scarica quando è disponibile una rete Wi-Fi"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Installa"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Installazione"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Errore di rete. Controlla la connessione e riprova."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Installazione del terminale Linux in corso…"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Il terminale Linux verrà avviato al termine"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Installazione non riuscita a causa di un problema di rete"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Installazione non riuscita. Riprova."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Impostazioni"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Preparazione terminale in corso…"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Arresto del terminale in corso…"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Arresto anomalo del terminale"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Ridimensionamento disco"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Ridimensiona/rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Dimensioni disco impostate"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"Assegnato: <xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"Massimo: <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Annulla"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Port forwarding"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Configura port forwarding"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"Il terminale sta tentando di aprire una nuova porta"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Porta di cui è stata richiesta l\'apertura: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Accetta"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Rifiuta"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Ripristino"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Opzioni ripristino partizione"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Torna alla versione iniziale"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Rimuovi tutto"</string>
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Reimposta il terminale"</string>
-    <string name="settings_recovery_reset_dialog_message" msgid="6392681199895696206">"I dati verranno eliminati"</string>
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Conferma"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Annulla"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Esegui il backup dei dati su <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Recupero non riuscito"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Rimuovi i dati di backup"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Codice di errore: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Impostazioni"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"Il terminale è in esecuzione"</string>
-    <string name="service_notification_content" msgid="3579923802797824545">"Tocca per aprire il terminale"</string>
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
+    <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Chiudi"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-iw/strings.xml b/android/TerminalApp/res/values-iw/strings.xml
index 63207c6..a57f95a 100644
--- a/android/TerminalApp/res/values-iw/strings.xml
+++ b/android/TerminalApp/res/values-iw/strings.xml
@@ -17,47 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"טרמינל"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"תצוגת טרמינל"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"סמן"</string>
+    <string name="empty_line" msgid="5012067143408427178">"שורה ריקה"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"התקנה של טרמינל Linux"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"כדי להפעיל את טרמינל Linux, צריך להוריד נתונים בנפח של בערך <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> דרך הרשת.\nלהמשיך?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"הורדה כשיהיה חיבור ל-Wi-Fi"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"התקנה"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"בתהליך התקנה"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"שגיאה בחיבור לרשת. צריך לבדוק את החיבור ולנסות שוב."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"מתבצעת התקנה של טרמינל Linux"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"טרמינל Linux יופעל אחרי שההתקנה תסתיים"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"ההתקנה נכשלה בגלל בעיה ברשת"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"ההתקנה נכשלה. אפשר לנסות שוב."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"הגדרות"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"הטרמינל בהכנה"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"המערכת עוצרת את הטרמינל"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"הטרמינל קרס"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"שינוי הגודל של הדיסק"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"שינוי הגודל / Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"גודל הדיסק הוגדר"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"הוקצו <xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"מקסימום <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"ביטול"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"העברה ליציאה אחרת"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"הגדרת העברה ליציאה אחרת"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"הטרמינל מנסה לפתוח יציאה חדשה"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"נשלחה בקשה לפתיחת היציאה: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"אישור"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"דחייה"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"שחזור"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"אפשרויות שחזור של המחיצה"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"שינוי לגרסה הראשונית"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"הסרת הכול"</string>
-    <!-- no translation found for settings_recovery_reset_dialog_title (874946981716251094) -->
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
     <skip />
-    <!-- no translation found for settings_recovery_reset_dialog_message (6392681199895696206) -->
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
     <skip />
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"אישור"</string>
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
+    <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"אתחול הטרמינל"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"ביטול"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"גיבוי הנתונים בנתיב <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"השחזור נכשל"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"הסרת נתוני הגיבוי"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"קוד שגיאה: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"הגדרות"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"הטרמינל פועל"</string>
-    <!-- no translation found for service_notification_content (3579923802797824545) -->
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
     <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"סגירה"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-ja/strings.xml b/android/TerminalApp/res/values-ja/strings.xml
index fd06f1e..25aa19f 100644
--- a/android/TerminalApp/res/values-ja/strings.xml
+++ b/android/TerminalApp/res/values-ja/strings.xml
@@ -17,44 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"ターミナル"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"ターミナルの表示"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"カーソル"</string>
+    <string name="empty_line" msgid="5012067143408427178">"空の行"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Linux ターミナルをインストールする"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Linux ターミナルを起動するには、ネットワーク経由で約 <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> のデータのダウンロードが必要です。\n続行しますか?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Wi-Fi 接続時にダウンロード"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"インストール"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"インストール中"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"ネットワーク エラーです。接続を確認し、もう一度お試しください。"</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Linux ターミナルのインストール"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"完了後に Linux ターミナルが起動します"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"ネットワークの問題によりインストールできませんでした"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"インストールできませんでした。もう一度お試しください。"</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"設定"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"ターミナルを準備しています"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"ターミナルを停止しています"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"ターミナルがクラッシュしました"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"ディスクサイズを変更"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"サイズ変更 / Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"ディスクサイズを設定しました"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> 割り当て済み"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"最大 <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"キャンセル"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"ポート転送"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"ポート転送を設定する"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"ターミナルが新しいポートを開こうとしています"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"開くようリクエストされたポート: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"許可する"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"許可しない"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"リカバリ"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"パーティション復元オプション"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"最初のバージョンに変更"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"すべて削除"</string>
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"ターミナルのリセット"</string>
-    <string name="settings_recovery_reset_dialog_message" msgid="6392681199895696206">"データは削除されます"</string>
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"確認"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"キャンセル"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"<xliff:g id="PATH">/mnt/backup</xliff:g> にデータをバックアップする"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"復元できませんでした"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"バックアップ データの削除"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"エラーコード: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"設定"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"ターミナルは実行中です"</string>
-    <string name="service_notification_content" msgid="3579923802797824545">"クリックするとターミナルが開きます"</string>
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
+    <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"閉じる"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-ka/strings.xml b/android/TerminalApp/res/values-ka/strings.xml
index 4c15040..d09021d 100644
--- a/android/TerminalApp/res/values-ka/strings.xml
+++ b/android/TerminalApp/res/values-ka/strings.xml
@@ -17,44 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"ტერმინალი"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"ტერმინალის წარმოჩენა"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"კურსორი"</string>
+    <string name="empty_line" msgid="5012067143408427178">"ცარიელი სტრიქონი"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Linux ტერმინალის ინსტალაცია"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Linux ტერმინალის გაშვებისთვის საჭიროა ქსელიდან ჩამოტვირთოთ დაახლოებით <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> ზომის მონაცემები.\nგსურთ გაგრძელება?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"ჩამოტვირთვა Wi-Fi კავშირის ხელმისაწვდომობისას"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"ინსტალაცია"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"ინსტალირდება"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"ქსელის შეცდომა. შეამოწმეთ კავშირი და ცადეთ ხელახლა."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"მიმდინარეობს Linux ტერმინალის ინსტალაცია"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"დასრულების შემდეგ დაიწყება Linux ტერმინალის ინსტალაცია"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"ქსელის შეცდომის გამო ვერ მოხერხდა ინსტალაცია"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"ვერ მოახერხდა ინსტალაცია. ცადეთ ხელახლა."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"პარამეტრები"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"მიმდინარეობს ტერმინალის მომზადება"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"მიმდინარეობს ტერმინალის შეწყვეტა"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"ტერმინალი გაჭედილია"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"დისკის ზომის შეცვლა"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"ზომის შეცვლა / Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"დისკის ზომა დაყენებულია"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> მიმაგრებულია"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"მაქსიმალური ზომა: <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"გაუქმება"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"პორტის გადამისამართება"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"პორტის გადამისამართების კონფიგურაცია"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"ტერმინალი ცდილობს ახალი პორტის გახსნას"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"პორტმა მოითხოვა, რომ იყოს გახსნილი: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"დათანხმება"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"უარყოფა"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"აღდგენა"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"დანაყოფის აღდგენის ვარიანტები"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"საწყის ვერსიაზე შეცვლა"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"ყველას ამოშლა"</string>
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"ტერმინალის გადაყენება"</string>
-    <string name="settings_recovery_reset_dialog_message" msgid="6392681199895696206">"მონაცემები წაიშლება"</string>
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"დადასტურება"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"გაუქმება"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"მონაცემების სარეზერვო ასლის შექმნა <xliff:g id="PATH">/mnt/backup</xliff:g>-ზე"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"აღდგენა ვერ მოხერხდა"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"სარეზერვო ასლის მონაცემების ამოშლა"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"შეცდომის კოდი: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"პარამეტრები"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"ტერმინალი გაშვებულია"</string>
-    <string name="service_notification_content" msgid="3579923802797824545">"დააწკაპუნეთ ტერმინალის გასახსნელად"</string>
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
+    <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"დახურვა"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-kk/strings.xml b/android/TerminalApp/res/values-kk/strings.xml
index ef81f12..5058ea2 100644
--- a/android/TerminalApp/res/values-kk/strings.xml
+++ b/android/TerminalApp/res/values-kk/strings.xml
@@ -17,47 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Терминал"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Терминал дисплейі"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Курсор"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Бос жол"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Linux терминалын орнату"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Linux терминалын іске қосу үшін желі арқылы шамамен <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> деректі жүктеп алу қажет.\nЖалғастырасыз ба?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Wi-Fi желісі пайда болғанда жүктеп алу"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Орнату"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Орнатылып жатыр"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Желі қатесі орын алды. Байланысты тексеріңіз де, қайталап көріңіз."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Linux терминалы орнатылып жатыр"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Linux терминалы орнату аяқталғаннан кейін іске қосылады."</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Желі мәселесіне байланысты орнату мүмкін болмады."</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Орнату мүмкін болмады. Қайталап көріңіз."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Параметрлер"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Терминал дайындалып жатыр."</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Терминал тоқтатылып жатыр."</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Терминал бұзылды."</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Диск көлемін өзгерту"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Көлемін өзгерту / Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Диск көлемі орнатылды."</string>
-    <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> тағайындалды."</string>
+    <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> тағайындалды"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"Ең көбі <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Бас тарту"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Портты бағыттау"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Портты бағыттауды конфигурациялау"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"Терминал жаңа порт ашайын деп жатыр"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Портты ашуға сұрау жіберілді: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Қабылдау"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Қабылдамау"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Қалпына келтіру"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Бөлікті қалпына келтіру опциялары"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Бастапқы нұсқаға өзгерту"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Барлығын өшіру"</string>
-    <!-- no translation found for settings_recovery_reset_dialog_title (874946981716251094) -->
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
     <skip />
-    <!-- no translation found for settings_recovery_reset_dialog_message (6392681199895696206) -->
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
     <skip />
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Растау"</string>
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
+    <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Терминалды бастапқы күйге қайтару"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Бас тарту"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Деректердің сақтық көшірмесін <xliff:g id="PATH">/mnt/backup</xliff:g> жолына сақтау"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Қалпына келтірілмеді."</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Сақтық көшірме дерегін өшіру"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Қате коды: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Параметрлер"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"Терминал іске қосылып тұр"</string>
-    <!-- no translation found for service_notification_content (3579923802797824545) -->
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
     <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Жабу"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-km/strings.xml b/android/TerminalApp/res/values-km/strings.xml
index af0ec75..289032d 100644
--- a/android/TerminalApp/res/values-km/strings.xml
+++ b/android/TerminalApp/res/values-km/strings.xml
@@ -17,44 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"ទែមីណាល់"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"ផ្ទាំងអេក្រង់ទែមីណាល់"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"ទស្សន៍ទ្រនិច"</string>
+    <string name="empty_line" msgid="5012067143408427178">"ជួរទទេ"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"ដំឡើងទែមីណាល់ Linux"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"ដើម្បីបើកដំណើរការទែមីណាល់ Linux អ្នកត្រូវទាញយកទិន្នន័យប្រហែលជា <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> នៅលើបណ្តាញ។\nតើអ្នកចង់បន្តដែរឬទេ?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"ទាញ​យកនៅពេលមាន Wi-Fi"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"ដំឡើង"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"កំពុងដំឡើង"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"មានបញ្ហាបណ្ដាញ។ ពិនិត្យមើលការតភ្ជាប់ រួចព្យាយាមម្ដងទៀត។"</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"កំពុងដំឡើងទែមីណាល់ Linux"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"ទែមីណាល់ Linux នឹងត្រូវបានចាប់ផ្ដើមបន្ទាប់ពីបញ្ចប់"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"មិនអាច​ដំឡើងបានទេ ដោយសារបញ្ហាបណ្ដាញ"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"មិនអាច​ដំឡើងបានទេ។ សូមព្យាយាមម្ដងទៀត។"</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"ការកំណត់"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"កំពុងរៀបចំទែមីណាល់"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"កំពុងបញ្ឈប់ទែមីណាល់"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"ទែមីណាល់បានគាំង"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"ប្ដូរ​ទំហំថាស"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"ប្ដូរ​ទំហំ / Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"បានកំណត់ទំហំ​ថាស"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"បានកំណត់ <xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"អតិបរមា <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"បោះបង់"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"ការបញ្ជូនច្រកបន្ត"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"កំណត់រចនាសម្ព័ន្ធ​ការបញ្ជូនច្រកបន្ត"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"ទែមីណាល់កំពុងព្យាយាមបើកច្រកថ្មី"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"បានស្នើសុំឱ្យបើកច្រក៖ <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"ទទួលយក"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"បដិសេធ"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"ស្ដារ"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"ជម្រើសស្ដារផ្នែក"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"ប្ដូរ​ទៅ​កំណែ​ដំបូង"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"ដកចេញទាំងអស់"</string>
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"កំណត់ទែមីណាល់ឡើងវិញ"</string>
-    <string name="settings_recovery_reset_dialog_message" msgid="6392681199895696206">"ទិន្នន័យនឹងត្រូវបានលុប"</string>
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"បញ្ជាក់"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"បោះបង់"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"បម្រុងទុកទិន្នន័យទៅ <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"ការស្ដារឡើងវិញមិនបានសម្រេច"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"ដកទិន្នន័យបម្រុងទុកចេញ"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"លេខ​កូដ​បញ្ហា៖ <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"ការកំណត់"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"ទែមីណាល់កំពុងដំណើរការ"</string>
-    <string name="service_notification_content" msgid="3579923802797824545">"ចុចដើម្បីបើកទែមីណាល់"</string>
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
+    <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"បិទ"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-kn/strings.xml b/android/TerminalApp/res/values-kn/strings.xml
index b6d52ef..c451ab6 100644
--- a/android/TerminalApp/res/values-kn/strings.xml
+++ b/android/TerminalApp/res/values-kn/strings.xml
@@ -17,44 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"ಟರ್ಮಿನಲ್‌"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"ಟರ್ಮಿನಲ್‌ ಪ್ರದರ್ಶನ"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"ಕರ್ಸರ್‌"</string>
+    <string name="empty_line" msgid="5012067143408427178">"ಖಾಲಿ ಸಾಲು"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Linux ಟರ್ಮಿನಲ್ ಅನ್ನು ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಿ"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Linux ಟರ್ಮಿನಲ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸಲು, ನೀವು ನೆಟ್‌ವರ್ಕ್‌ನಲ್ಲಿ ಸುಮಾರು <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> ಡೇಟಾವನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಬೇಕಾಗುತ್ತದೆ.\nನೀವು ಮುಂದುವರಿಸಲು ಬಯಸುತ್ತೀರಾ?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"ವೈ-ಫೈ ಲಭ್ಯವಿದ್ದಾಗ ಡೌನ್‌ಲೋಡ್ ಮಾಡಿ"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಿ"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"ಇನ್‌ಸ್ಟಾಲ್"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"ನೆಟ್‌ವರ್ಕ್ ದೋಷ. ಕನೆಕ್ಷನ್ ಅನ್ನು ಪರಿಶೀಲಿಸಿ ಮತ್ತು ಪುನಃ ಪ್ರಯತ್ನಿಸಿ."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Linux ಟರ್ಮಿನಲ್ ಅನ್ನು ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಲಾಗುತ್ತಿದೆ"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"ಮುಗಿದ ಮೇಲೆ Linux ಟರ್ಮಿನಲ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸಲಾಗುತ್ತದೆ"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"ನೆಟ್‌ವರ್ಕ್ ಸಮಸ್ಯೆಯಿಂದಾಗಿ ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ. ಪುನಃ ಪ್ರಯತ್ನಿಸಿ."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"ಟರ್ಮಿನಲ್‌ ಅನ್ನು ಸಿದ್ಧಪಡಿಸಲಾಗುತ್ತಿದೆ"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"ಟರ್ಮಿನಲ್ ಅನ್ನು ನಿಲ್ಲಿಸಲಾಗುತ್ತಿದೆ"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"ಟರ್ಮಿನಲ್ ಕ್ರ್ಯಾಶ್ ಆಗಿದೆ"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"ಡಿಸ್ಕ್ ಅನ್ನು ಮರುಗಾತ್ರಗೊಳಿಸಿ"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"ಮರುಗಾತ್ರಗೊಳಿಸಿ / Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"ಡಿಸ್ಕ್ ಗಾತ್ರವನ್ನು ಸೆಟ್ ಮಾಡಲಾಗಿದೆ"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> ನಿಯೋಜಿಸಲಾಗಿದೆ"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"ಗರಿಷ್ಠ <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"ರದ್ದುಮಾಡಿ"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"ಪೋರ್ಟ್ ಫಾರ್ವರ್ಡ್ ಮಾಡುವಿಕೆ"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"ಪೋರ್ಟ್ ಫಾರ್ವರ್ಡ್ ಮಾಡುವಿಕೆಯನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಿ"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"ಟರ್ಮಿನಲ್‌ ಹೊಸ ಪೋರ್ಟ್‌ ಅನ್ನು ತೆರೆಯಲು ಪ್ರಯತ್ನಿಸುತ್ತಿದೆ"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"ಪೋರ್ಟ್‌ ಅನ್ನು ತೆರೆಯಲು ವಿನಂತಿಸಲಾಗಿದೆ: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"ಸಮ್ಮತಿಸಿ"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"ನಿರಾಕರಿಸಿ"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"ರಿಕವರಿ"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"ಪಾರ್ಟಿಶನ್ ರಿಕವರಿ ಆಯ್ಕೆಗಳು"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"ಆರಂಭಿಕ ಆವೃತ್ತಿಗೆ ಬದಲಾಯಿಸಿ"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"ಎಲ್ಲವನ್ನೂ ತೆಗೆದುಹಾಕಿ"</string>
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"ಟರ್ಮಿನಲ್‌ ಅನ್ನು ರೀಸೆಟ್‌ ಮಾಡಿ"</string>
-    <string name="settings_recovery_reset_dialog_message" msgid="6392681199895696206">"ಡೇಟಾವನ್ನು ಅಳಿಸಲಾಗುತ್ತದೆ"</string>
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"ದೃಢೀಕರಿಸಿ"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"ರದ್ದುಮಾಡಿ"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"ಡೇಟಾವನ್ನು <xliff:g id="PATH">/mnt/backup</xliff:g> ಗೆ ಬ್ಯಾಕಪ್‌ ಮಾಡಿ"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"ರಿಕವರಿ ವಿಫಲವಾಗಿದೆ"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"ಬ್ಯಾಕಪ್‌ ಡೇಟಾವನ್ನು ತೆಗೆದುಹಾಕಿ"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"ದೋಷ ಕೋಡ್‌: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"ಟರ್ಮಿನಲ್‌ ರನ್‌ ಆಗುತ್ತಿದೆ"</string>
-    <string name="service_notification_content" msgid="3579923802797824545">"ಟರ್ಮಿನಲ್‌ ಅನ್ನು ತೆರೆಯಲು ಕ್ಲಿಕ್‌ ಮಾಡಿ"</string>
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
+    <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"ಮುಚ್ಚಿರಿ"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-ko/strings.xml b/android/TerminalApp/res/values-ko/strings.xml
index 897f2bf..c853c1a 100644
--- a/android/TerminalApp/res/values-ko/strings.xml
+++ b/android/TerminalApp/res/values-ko/strings.xml
@@ -17,47 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"터미널"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"터미널 디스플레이"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"커서"</string>
+    <string name="empty_line" msgid="5012067143408427178">"빈 줄"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Linux 터미널 설치"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Linux 터미널을 실행하려면 네트워크를 통해 약 <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g>의 데이터를 다운로드해야 합니다.\n계속하시겠습니까?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Wi-Fi 연결 시 다운로드"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"설치"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"설치 중"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"네트워크 오류입니다. 연결을 확인한 후 다시 시도해 주세요."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Linux 터미널 설치 중"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"완료 후 Linux 터미널이 시작됩니다"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"네트워크 문제로 인해 설치할 수 없습니다"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"설치할 수 없습니다. 다시 시도하세요."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"설정"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"터미널 준비 중"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"터미널 중지 중"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"터미널 다운됨"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"디스크 크기 조정"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"크기 조정/Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"디스크 크기 설정됨"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> 할당됨"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"최대 <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"취소"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"포트 전달"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"포트 전달 구성"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"터미널에서 새 포트를 열려고 합니다"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"포트 개방 요청: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"수락"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"거부"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"복구"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"파티션 복구 옵션"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"최초 버전으로 변경"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"전체 삭제"</string>
-    <!-- no translation found for settings_recovery_reset_dialog_title (874946981716251094) -->
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
     <skip />
-    <!-- no translation found for settings_recovery_reset_dialog_message (6392681199895696206) -->
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
     <skip />
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"확인"</string>
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
+    <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"터미널 재설정"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"취소"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"<xliff:g id="PATH">/mnt/backup</xliff:g>에 데이터 백업"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"복구 실패"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"백업 데이터 삭제"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"오류 코드: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"설정"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"터미널이 실행 중입니다"</string>
-    <!-- no translation found for service_notification_content (3579923802797824545) -->
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
     <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"닫기"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-ky/strings.xml b/android/TerminalApp/res/values-ky/strings.xml
index dde2665..9d6d7ef 100644
--- a/android/TerminalApp/res/values-ky/strings.xml
+++ b/android/TerminalApp/res/values-ky/strings.xml
@@ -17,47 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Терминал"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Терминалдын дисплейи"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Курсор"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Бош сап"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Linux терминалын орнотуу"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Linux терминалын иштетүү үчүн болжол менен <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> жүктөп алышыңыз керек.\nУлантасызбы?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Wi-Fi жеткиликтүү болгондо жүктөп алуу"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Орнотуу"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Орнотулууда"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Тармакта ката кетти. Байланышты текшерип, кайра аракет кылыңыз."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Linux терминалы орнотулууда"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Бүткөндөн кийин Linux терминалы иштеп баштайт"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Тармактагы маселеден улам орнотулбай калды"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Орнотулган жок. Кайра аракет кылыңыз."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Параметрлер"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Терминал даярдалууда"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Терминал токтотулууда"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Терминал бузулду"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Дисктин өлчөмүн өзгөртүү"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Өлчөмүн өзгөртүү / Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Дисктин өлчөмү коюлду"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> дайындалды"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"Эң көп <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Жокко чыгаруу"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Оюкчаны багыттоо"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Оюкчаны багыттоону конфигурациялоо"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"Терминал жаңы портту ачканы жатат"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Төмөнкү портту ачуу сурамы жөнөтүлдү: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Кабыл алуу"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Четке кагуу"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Калыбына келтирүү"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Катуу диск бөлүгүн калыбына келтирүү параметрлери"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Баштапкы версияга өзгөртүү"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Баарын өчүрүү"</string>
-    <!-- no translation found for settings_recovery_reset_dialog_title (874946981716251094) -->
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
     <skip />
-    <!-- no translation found for settings_recovery_reset_dialog_message (6392681199895696206) -->
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
     <skip />
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Ырастоо"</string>
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
+    <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Терминалды баштапкы абалга келтирүү"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Жокко чыгаруу"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Маалыматтын камдык көчүрмөсүн төмөнкүгө сактоо: <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Калыбына келтирилген жок"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Маалыматтын камдык көчүрмөсүн өчүрүү"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Ката коду: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Параметрлер"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"Терминал иштеп жатат"</string>
-    <!-- no translation found for service_notification_content (3579923802797824545) -->
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
     <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Жабуу"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-lo/strings.xml b/android/TerminalApp/res/values-lo/strings.xml
index 3fff30b..d7233f5 100644
--- a/android/TerminalApp/res/values-lo/strings.xml
+++ b/android/TerminalApp/res/values-lo/strings.xml
@@ -17,44 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"ສະຖານີ"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"ຈໍສະແດງຜົນ Terminal"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"ເຄີເຊີ"</string>
+    <string name="empty_line" msgid="5012067143408427178">"ແຖວຫວ່າງເປົ່າ"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"ຕິດຕັ້ງເທີມິນອນ Linux"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"ເພື່ອເປີດໃຊ້ເທີມິນອນ Linux, ທ່ານຕ້ອງດາວໂຫຼດຂໍ້ມູນປະມານ <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> ຜ່ານເຄືອຂ່າຍ.\nທ່ານຕ້ອງການດຳເນີນການຕໍ່ບໍ?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"ດາວໂຫຼດເມື່ອມີການເຊື່ອມຕໍ່ Wi-Fi"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"ຕິດຕັ້ງ"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"ກຳລັງຕິດຕັ້ງ"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"ເຄືອຂ່າຍຜິດພາດ. ກວດສອບການເຊື່ອມຕໍ່ແລ້ວລອງໃໝ່."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"ກຳລັງຕິດຕັ້ງເທີມິນອນ Linux"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"ເທີມິນອນ Linux ຈະເລີ່ມຕົ້ນຫຼັງຈາກສຳເລັດ"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"ຕິດຕັ້ງບໍ່ສຳເລັດເນື່ອງຈາກບັນຫາເຄືອຂ່າຍ"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"ຕິດຕັ້ງບໍ່ສໍາເລັດ. ກະລຸນາລອງໃໝ່."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"ການຕັ້ງຄ່າ"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"ກຳລັງກະກຽມເທີມິນອນ"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"ກຳລັງຢຸດເທີມິນອນ"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"ເທີມິນອນຫຼົ້ມ"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"ປັບຂະໜາດດິສ"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"ປັບຂະໜາດ / Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"ຕັ້ງຂະໜາດດິສ"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"ມອບໝາຍແລ້ວ <xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"ສູງສຸດ <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"ຍົກເລີກ"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"ການ​ສົ່ງ​ຕໍ່​ຜອດ"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"ຕັ້ງຄ່າການ​ສົ່ງ​ຕໍ່​ຜອດ"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"ເທີມິນອນກຳລັງພະຍາຍາມເປີດ​ຜອດໃໝ່"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"ຮ້ອງຂໍໃຫ້ເປີດ​ຜອດ: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"ຍອມຮັບ"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"ປະຕິເສດ"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"ການກູ້ຄືນ"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"ຕົວເລືອກການກູ້ຄືນພາທິຊັນ"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"ປ່ຽນເປັນເວີຊັນເລີ່ມຕົ້ນ"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"ລຶບທັງໝົດອອກ"</string>
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"ຣີເຊັດເທີມິນອນ"</string>
-    <string name="settings_recovery_reset_dialog_message" msgid="6392681199895696206">"ຂໍ້ມູນຈະຖືກລຶບ"</string>
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"ຢືນຢັນ"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"ຍົກເລີກ"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"ສຳຮອງຂໍ້ມູນໃສ່ <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"ການກູ້ຄືນບໍ່ສຳເລັດ"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"ລຶບການສຳຮອງຂໍ້ມູນອອກ"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"ລະຫັດຂໍ້ຜິດພາດ: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"ການຕັ້ງຄ່າ"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"ເທີມິນອນກຳລັງເຮັດວຽກຢູ່"</string>
-    <string name="service_notification_content" msgid="3579923802797824545">"ຄລິກເພື່ອເປີດເທີມິນອນ"</string>
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
+    <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"ປິດ"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-lt/strings.xml b/android/TerminalApp/res/values-lt/strings.xml
index 4cb3326..2152608 100644
--- a/android/TerminalApp/res/values-lt/strings.xml
+++ b/android/TerminalApp/res/values-lt/strings.xml
@@ -17,44 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Terminalas"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Terminalo ekranas"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Žymeklis"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Tuščia eilutė"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"„Linux“ terminalo diegimas"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Norėdami paleisti „Linux“ terminalą, per tinklą turite atsisiųsti apytiksliai <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> duomenų.\nAr norite tęsti?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Atsisiųsti, kai pasiekiamas „Wi-Fi“"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Įdiegti"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Diegiama"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Tinklo klaida. Patikrinkite ryšį ir bandykite dar kartą."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Diegiamas „Linux“ terminalas"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"„Linux“ terminalas bus paleistas pabaigus"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Nepavyko įdiegti dėl tinklo problemos"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Nepavyko įdiegti Bandykite dar kartą."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Nustatymai"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Ruošiamas terminalas"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Terminalas sustabdomas"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Terminalas užstrigo"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Disko dydžio keitimas"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Dydžio keitimas / „Rootfs“"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Disko dydis nustatytas"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"Priskirta <xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"Maks. <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Atšaukti"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Prievado numerio persiuntimas"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Prievado numerio persiuntimo konfigūravimas"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"Terminalas bando atidaryti naują prievadą"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Prievadas, dėl kurio atidarymo pateikta užklausa: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Sutikti"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Atmesti"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Atkūrimas"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Skaidinio atkūrimo parinktys"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Keitimas į pradinę versiją"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Pašalinti viską"</string>
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Terminalo nustatymas iš naujo"</string>
-    <string name="settings_recovery_reset_dialog_message" msgid="6392681199895696206">"Duomenys bus ištrinti"</string>
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Patvirtinti"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Atšaukti"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Sukurti atsarginę duomenų kopiją čia: <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Nepavyko atkurti"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Pašalinti atsarginės kopijos duomenis"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Klaidos kodas: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Nustatymai"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"Terminalas veikia"</string>
-    <string name="service_notification_content" msgid="3579923802797824545">"Spustelėkite, kad atidarytumėte terminalą"</string>
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
+    <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Uždaryti"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-lv/strings.xml b/android/TerminalApp/res/values-lv/strings.xml
index ceaaae6..a6bd003 100644
--- a/android/TerminalApp/res/values-lv/strings.xml
+++ b/android/TerminalApp/res/values-lv/strings.xml
@@ -17,47 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Terminālis"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Termināļa displejs"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Kursors"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Tukša rinda"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Linux termināļa instalēšana"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Lai palaistu Linux termināli, jums jālejupielādē aptuveni <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> datu, izmantojot tīklu.\nVai vēlaties turpināt?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Lejupielādēt, kad ir pieejams Wi-Fi savienojums"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Instalēt"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Instalē"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Tīkla kļūda. Pārbaudiet savienojumu un mēģiniet vēlreiz."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Notiek Linux termināļa instalēšana…"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Linux terminālis tiks palaists pēc pabeigšanas"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Tīkla problēmas dēļ neizdevās instalēt"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Neizdevās instalēt. Mēģiniet vēlreiz."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Iestatījumi"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Notiek termināļa sagatavošana."</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Notiek termināļa apturēšana."</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Terminālis avarēja."</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Diska lieluma mainīšana"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Mainīt lielumu / Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Diska lielums ir iestatīts."</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"Piešķirtais lielums: <xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"Maksimālais lielums: <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Atcelt"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Porta pārsūtīšana"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Konfigurēt porta pārsūtīšanu"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"Terminālis mēģina atvērt jaunu portu"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Ports, kura atvēršana pieprasīta: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Piekrist"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Noraidīt"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Atkopšana"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Nodalījuma atkopšanas opcijas"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Mainīšana uz sākotnējo versiju"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Noņemt visu"</string>
-    <!-- no translation found for settings_recovery_reset_dialog_title (874946981716251094) -->
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
     <skip />
-    <!-- no translation found for settings_recovery_reset_dialog_message (6392681199895696206) -->
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
     <skip />
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Apstiprināt"</string>
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
+    <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Termināļa atiestatīšana"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Atcelt"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Dublēt datus ceļā <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Atkopšana neizdevās"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Dublējuma datu noņemšana"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Kļūdas kods: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Iestatījumi"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"Terminālis darbojas"</string>
-    <!-- no translation found for service_notification_content (3579923802797824545) -->
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
     <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Aizvērt"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-mk/strings.xml b/android/TerminalApp/res/values-mk/strings.xml
index 86fd666..ffc6f49 100644
--- a/android/TerminalApp/res/values-mk/strings.xml
+++ b/android/TerminalApp/res/values-mk/strings.xml
@@ -17,47 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Терминал"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Екран на терминал"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Курсор"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Празен ред"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Инсталирајте го Linux-терминалот"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"За да го стартувате Linux-терминалот, треба да преземете податоци од приближно <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> преку мрежата.\nДали сакате да продолжите?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Преземете кога има Wi-Fi"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Инсталирај"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Се инсталира"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Грешка на мрежата. Проверете ја врската и обидете се повторно."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Linux-терминалот се инсталира"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Linux-терминалот ќе се стартува по довршувањето"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Не можеше да се инсталира поради проблем со мрежата"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Не можеше да се инсталира. Обидете се повторно."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Поставки"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Терминалот се подготвува"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Терминалот се сопира"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Терминалот падна"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Променување на големината на дискот"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Променување големина/Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Големината на дискот е поставена"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"Доделено: <xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"Макс.: <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Откажи"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Проследување порти"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Конфигурирајте го проследувањето порти"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"Терминалот се обидува да отвори нова порта"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Порта што е побарано да се отвори: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Прифати"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Одбиј"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Враќање"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Опции за враќање партиции"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Промени на првата верзија"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Отстрани ги сите"</string>
-    <!-- no translation found for settings_recovery_reset_dialog_title (874946981716251094) -->
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
     <skip />
-    <!-- no translation found for settings_recovery_reset_dialog_message (6392681199895696206) -->
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
     <skip />
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Потврди"</string>
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
+    <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Ресетирајте го терминалот"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Откажи"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Направете бекап на податоците на <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Враќањето не успеа"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Отстранете ги податоците од бекапот"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Код за грешка: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Поставки"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"Терминалот е активен"</string>
-    <!-- no translation found for service_notification_content (3579923802797824545) -->
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
     <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Затвори"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-ml/strings.xml b/android/TerminalApp/res/values-ml/strings.xml
index 232aba7..0d941f4 100644
--- a/android/TerminalApp/res/values-ml/strings.xml
+++ b/android/TerminalApp/res/values-ml/strings.xml
@@ -17,44 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"ടെർമിനൽ"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"ടെർമിനൽ ഡിസ്‌പ്ലേ"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"കഴ്‌സർ"</string>
+    <string name="empty_line" msgid="5012067143408427178">"ശൂന്യമായ ലൈൻ"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Linux ടെർമിനൽ ഇൻസ്റ്റാൾ ചെയ്യുക"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Linux ടെർമിനൽ ലോഞ്ച് ചെയ്യാൻ, നിങ്ങൾക്ക് നെറ്റ്‌വർക്കിലൂടെ ഏകദേശം <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> ഡാറ്റ ഡൗൺലോഡ് ചെയ്യേണ്ടതുണ്ട്.\nനിങ്ങൾക്ക് തുടരണോ?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"വൈഫൈ ലഭ്യമാകുമ്പോൾ ഡൗൺലോഡ് ചെയ്യുക"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"ഇൻസ്റ്റാൾ ചെയ്യൂ"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"ഇൻസ്റ്റാൾ ചെയ്യുന്നു"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"നെറ്റ്‌വർക്ക് പിശക്. കണക്ഷൻ പരിശോധിച്ച് വീണ്ടും ശ്രമിക്കുക."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Linux ടെർമിനൽ ഇൻസ്റ്റാൾ ചെയ്യുന്നു"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"പൂർത്തിയായിക്കഴിഞ്ഞാൽ, Linux ടെർമിനൽ ഇൻസ്റ്റാൾ ചെയ്യാൻ ആരംഭിക്കും"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"നെറ്റ്‌വർക്കുമായി ബന്ധപ്പെട്ട് പ്രശ്‌നമുണ്ടായതിനാൽ ഇൻസ്റ്റാൾ ചെയ്യാനായില്ല"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"ഇൻസ്റ്റാൾ ചെയ്യാനായില്ല. വീണ്ടും ശ്രമിക്കുക."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"ക്രമീകരണം"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"ടെർമിനൽ തയ്യാറാക്കുന്നു"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"ടെർമിനൽ നിർത്തുന്നു"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"ടെർമിനൽ ക്രാഷായി"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"ഡിസ്‌ക് വലുപ്പം മാറ്റുക"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"വലുപ്പം മാറ്റുക / Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"ഡിസ്‌ക് വലുപ്പം സജ്ജീകരിച്ചു"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> അസൈൻ ചെയ്‌തു"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"പരമാവധി <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"റദ്ദാക്കുക"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"പോർട്ട് ഫോർവേഡിങ്"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"പോർട്ട് ഫോർവേഡിങ് കോൺഫിഗർ ചെയ്യുക"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"ഒരു പുതിയ പോർട്ട് തുറക്കാൻ ടെർമിനൽ ശ്രമിക്കുന്നു"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"പോർട്ട് തുറക്കാൻ അഭ്യർത്ഥിച്ചു: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"അംഗീകരിക്കുക"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"നിരസിക്കുക"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"വീണ്ടെടുക്കുക"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"പാർട്ടീഷൻ വീണ്ടെടുക്കൽ ഓപ്‌ഷനുകൾ"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"പ്രാരംഭ പതിപ്പിലേക്ക് മാറ്റുക"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"എല്ലാം നീക്കം ചെയ്യുക"</string>
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"ടെർമിനൽ റീസെറ്റ് ചെയ്യുക"</string>
-    <string name="settings_recovery_reset_dialog_message" msgid="6392681199895696206">"ഡാറ്റ ഇല്ലാതാക്കും"</string>
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"സ്ഥിരീകരിക്കുക"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"റദ്ദാക്കുക"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"<xliff:g id="PATH">/mnt/backup</xliff:g> എന്നതിലേക്ക് ഡാറ്റ ബാക്കപ്പെടുക്കുക"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"വീണ്ടെടുക്കാനായില്ല"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"ബാക്കപ്പ് ഡാറ്റ നീക്കം ചെയ്യുക"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"പിശക് കോഡ്: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"ക്രമീകരണം"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"ടെർമിനൽ റൺ ചെയ്യുന്നു"</string>
-    <string name="service_notification_content" msgid="3579923802797824545">"ടെർമിനൽ തുറക്കാൻ ക്ലിക്ക് ചെയ്യുക"</string>
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
+    <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"അടയ്ക്കുക"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-mn/strings.xml b/android/TerminalApp/res/values-mn/strings.xml
index 63a8e76..46a9ef2 100644
--- a/android/TerminalApp/res/values-mn/strings.xml
+++ b/android/TerminalApp/res/values-mn/strings.xml
@@ -17,47 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Терминал"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Терминалын дэлгэц"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Курсор"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Хоосон мөр"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Linux terminal-г суулгах"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Linux терминалыг эхлүүлэхийн тулд та сүлжээгээр барагцаагаар <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g>-н өгөгдөл татах шаардлагатай.\nТа үргэлжлүүлэх үү?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Wi-Fi боломжтой үед татах"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Суулгах"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Суулгаж байна"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Сүлжээний алдаа гарлаа. Холболтыг шалгаж, дахин оролдоно уу."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Linux терминалыг суулгаж байна"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Дууссаны дараа Linux терминал эхэлнэ"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Сүлжээний асуудлын улмаас суулгаж чадсангүй"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Суулгаж чадсангүй. Дахин оролдоно уу."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Тохиргоо"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Терминалыг бэлтгэж байна"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Терминалыг зогсоож байна"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Терминал гэмтсэн"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Дискийн хэмжээг өөрчлөх"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Хэмжээг өөрчлөх / Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Дискийн хэмжээг тохируулсан"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> оноосон"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"Дээд тал нь <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Цуцлах"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Порт дамжуулах"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Порт дамжуулахыг тохируулах"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"Терминал шинэ порт нээхээр оролдож байна"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Нээхийг хүссэн порт: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Зөвшөөрөх"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Татгалзах"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Сэргээх"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Хуваалтыг сэргээх сонголтууд"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Анхны хувилбар луу өөрчлөх"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Бүгдийг хасах"</string>
-    <!-- no translation found for settings_recovery_reset_dialog_title (874946981716251094) -->
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
     <skip />
-    <!-- no translation found for settings_recovery_reset_dialog_message (6392681199895696206) -->
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
     <skip />
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Баталгаажуулах"</string>
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
+    <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Терминалыг шинэчлэх"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Цуцлах"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Өгөгдлийг <xliff:g id="PATH">/mnt/backup</xliff:g>-д нөөцлөх"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Сэргээж чадсангүй"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Нөөц өгөгдлийг устгах"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Алдааны код: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Тохиргоо"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"Терминал ажиллаж байна"</string>
-    <!-- no translation found for service_notification_content (3579923802797824545) -->
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
     <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Хаах"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-mr/strings.xml b/android/TerminalApp/res/values-mr/strings.xml
index 854af10..4b0533e 100644
--- a/android/TerminalApp/res/values-mr/strings.xml
+++ b/android/TerminalApp/res/values-mr/strings.xml
@@ -17,44 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"टर्मिनल"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"टर्मिनल डिस्प्ले"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"कर्सर"</string>
+    <string name="empty_line" msgid="5012067143408427178">"रिकामी ओळ"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Linux टर्मिनल इंस्टॉल करा"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Linux टर्मिनल लाँच करण्यासाठी, तुम्ही नेटवर्कवरून अंदाजे <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> डेटा डाउनलोड करणे आवश्यक आहे.\nतुम्हाला पुढे सुरू ठेवायचे आहे का?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"वाय-फाय उपलब्ध असताना डाउनलोड करा"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"इंस्टॉल करा"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"इंस्टॉल करत आहे"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"नेटवर्क एरर. कनेक्शन तपासून पुन्हा प्रयत्न करा."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Linux टर्मिनल इंस्टॉल करत आहे"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"पूर्ण झाल्यानंतर Linux टर्मिनल सुरू होईल"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"नेटवर्कच्या समस्येमुळे इंस्टॉल करता आले नाही"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"इंस्टॉल करता आले नाही. पुन्हा प्रयत्न करा."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"सेटिंग्ज"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"टर्मिनल तयार करत आहे"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"टर्मिनल थांबवत आहे"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"टर्मिनल क्रॅश झाले आहे"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"डिस्कचा आकार बदला"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"आकार बदला / Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"डिस्कचा आकार सेट केला आहे"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> असाइन केले आहे"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"कमाल <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"रद्द करा"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"पोर्ट फॉरवर्डिंग"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"पोर्ट फॉरवर्डिंग कॉन्फिगर करा"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"टर्मिनल नवीन पोर्ट उघडण्याचा प्रयत्न करत आहे"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"उघडण्याची विनंती केलेला पोर्ट: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"स्वीकारा"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"नकार द्या"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"रिकव्हरी"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"पार्टिशनचे रिकव्हरी पर्याय"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"मूळ आवृत्तीवर बदला"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"सर्व काढून टाका"</string>
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"टर्मिनल रीसेट करा"</string>
-    <string name="settings_recovery_reset_dialog_message" msgid="6392681199895696206">"डेटा हटवला जाईल"</string>
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"कन्फर्म करा"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"रद्द करा"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"<xliff:g id="PATH">/mnt/backup</xliff:g> वर डेटाचा बॅकअप घ्या."</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"रिकव्हरी करता आली नाही"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"बॅकअप डेटा काढून टाका"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"एरर कोड: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"सेटिंग्ज"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"टर्मिनल रन होत आहे"</string>
-    <string name="service_notification_content" msgid="3579923802797824545">"टर्मिनल उघडण्यासाठी क्लिक करा"</string>
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
+    <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"बंद करा"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-ms/strings.xml b/android/TerminalApp/res/values-ms/strings.xml
index fcbe880..94a0afb 100644
--- a/android/TerminalApp/res/values-ms/strings.xml
+++ b/android/TerminalApp/res/values-ms/strings.xml
@@ -17,44 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Terminal"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Paparan terminal"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Kursor"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Baris kosong"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Pasang terminal Linux"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Untuk melancarkan terminal Linux, anda perlu memuat turun anggaran <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> data melalui rangkaian.\nAdakah anda mahu meneruskan proses?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Muat turun apabila Wi-Fi tersedia"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Pasang"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Memasang"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Ralat rangkaian. Semak sambungan dan cuba lagi."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Memasang terminal Linux"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Terminal Linux akan dimulakan selepas selesai"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Gagal melakukan pemasangan disebabkan oleh masalah rangkaian"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Gagal melakukan pemasangan. Cuba lagi."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Tetapan"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Menyediakan terminal"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Menghentikan terminal"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Terminal ranap"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Ubah Saiz Cakera"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Ubah saiz / Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Set saiz cakera"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> ditetapkan"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"Maksimum <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Batal"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Kiriman Semula Port"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Konfigurasikan kiriman semula port"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"Terminal sedang cuba membuka port baharu"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Port diminta untuk dibuka : <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Terima"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Tolak"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Pemulihan"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Pilihan pemulihan Pemetakan"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Tukar kepada Versi awal"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Alih keluar semua"</string>
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Tetapkan semula terminal"</string>
-    <string name="settings_recovery_reset_dialog_message" msgid="6392681199895696206">"Data akan dipadamkan"</string>
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Sahkan"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Batal"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Sandarkan data kepada <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Pemulihan gagal"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Alih keluar data sandaran"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Kod ralat: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Tetapan"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"Terminal sedang dijalankan"</string>
-    <string name="service_notification_content" msgid="3579923802797824545">"Klik untuk membuka terminal"</string>
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
+    <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Tutup"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-my/strings.xml b/android/TerminalApp/res/values-my/strings.xml
index 7793026..6fea239 100644
--- a/android/TerminalApp/res/values-my/strings.xml
+++ b/android/TerminalApp/res/values-my/strings.xml
@@ -17,44 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"တာမီနယ်"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"တာမီနယ် ပြကွက်"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"ကာဆာ"</string>
+    <string name="empty_line" msgid="5012067143408427178">"လိုင်းကို ရှင်းရန်"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Linux တာမီနယ် ထည့်သွင်းခြင်း"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Linux တာမီနယ် စတင်ရန် ကွန်ရက်ပေါ်တွင် ဒေတာ <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> ခန့်ကို ဒေါင်းလုဒ်လုပ်ရမည်။\nရှေ့ဆက်လိုပါသလား။"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Wi-Fi ရသည့်အခါ ဒေါင်းလုဒ်လုပ်ရန်"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"ထည့်သွင်းရန်"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"ထည့်သွင်းနေသည်"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"ကွန်ရက် အမှားအယွင်း။ ချိတ်ဆက်မှုကို စစ်ဆေးပြီး ထပ်စမ်းကြည့်ပါ။"</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Linux တာမီနယ်ကို ထည့်သွင်းနေသည်"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"ပြီးသွားပါက Linux တာမီနယ်ကို စတင်ပါမည်"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"ကွန်ရက်ပြဿနာကြောင့် ထည့်သွင်း၍ မရလိုက်ပါ"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"ထည့်သွင်း၍ မရလိုက်ပါ။ ထပ်စမ်းကြည့်ပါ။"</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"ဆက်တင်များ"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"တာမီနယ်ကို ပြင်ဆင်နေသည်"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"တာမီနယ်ကို ရပ်နေသည်"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"တာမီနယ် ရပ်တန့်သွားသည်"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"ဒစ်ခ်အရွယ်ပြင်ခြင်း"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"/ Rootfs အရွယ်ပြင်ရန်"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"ဒစ်ခ်အရွယ်အစား သတ်မှတ်လိုက်သည်"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> သတ်မှတ်ထားသည်"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"အများဆုံး <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"မလုပ်တော့"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"ပို့တ်ထပ်ဆင့်ပို့ခြင်း"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"ပို့တ်ထပ်ဆင့်ပို့ခြင်းကို စီစဉ်သတ်မှတ်ပါ"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"တာမီနယ်က ပို့တ်အသစ်ကိုဖွင့်ရန် ကြိုးပမ်းနေသည်"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"ဖွင့်ရန်တောင်းဆိုထားသည့် ပို့တ်- <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"လက်ခံရန်"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"ငြင်းပယ်ရန်"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"ပြန်လည်ရယူခြင်း"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"အကန့်ပြန်ရယူရေး နည်းလမ်းများ"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"ကနဦးဗားရှင်းသို့ ပြောင်းရန်"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"အားလုံး ဖယ်ရှားရန်"</string>
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"တာမီနယ်ကို ပြင်ဆင်သတ်မှတ်ခြင်း"</string>
-    <string name="settings_recovery_reset_dialog_message" msgid="6392681199895696206">"ဒေတာကို ဖျက်ပါမည်"</string>
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"အတည်ပြုရန်"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"မလုပ်တော့"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"<xliff:g id="PATH">/mnt/backup</xliff:g> တွင် ဒေတာအရန်သိမ်းရန်"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"ပြန်လည်ရယူမှု မအောင်မြင်ပါ"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"အရန်ဒေတာ ဖယ်ရှားခြင်း"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"အမှားကုဒ်- <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"ဆက်တင်များ"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"တာမီနယ်ကို ဖွင့်ထားသည်"</string>
-    <string name="service_notification_content" msgid="3579923802797824545">"တာမီနယ်ဖွင့်ရန် နှိပ်ပါ"</string>
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
+    <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"ပိတ်ရန်"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-nb/strings.xml b/android/TerminalApp/res/values-nb/strings.xml
index 3178000..f7a17b8 100644
--- a/android/TerminalApp/res/values-nb/strings.xml
+++ b/android/TerminalApp/res/values-nb/strings.xml
@@ -17,47 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Terminal"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Terminalskjerm"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Markør"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Tom linje"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Installer Linux-terminalen"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"For å starte Linux-terminalen må du laste ned omtrent <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> data via nettverket.\nVil du fortsette?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Last ned når wifi er tilgjengelig"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Installer"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Installerer"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Nettverksfeil. Sjekk tilkoblingen og prøv på nytt."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Installerer Linux-terminalen"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Linux-terminalen startes når prosessen er ferdig"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Kunne ikke installere på grunn av et nettverksproblem"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Installasjonen mislyktes. Prøv på nytt."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Innstillinger"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Forbereder terminalen"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Stopper terminalen"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Terminalen krasjet"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Endre diskstørrelse"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Endre størrelse / Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Diskstørrelsen er angitt"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> er tildelt"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"<xliff:g id="MAX_SIZE">%1$s</xliff:g> maks"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Avbryt"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Viderekobling av porter"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Konfigurer viderekobling av porter"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"Terminalen prøver å åpne en ny port"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Porten som er forespurt åpnet: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Godta"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Avvis"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Gjenoppretting"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Gjenopprettingsalternativer for partisjoner"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Bytt til første versjon"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Fjern alle"</string>
-    <!-- no translation found for settings_recovery_reset_dialog_title (874946981716251094) -->
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
     <skip />
-    <!-- no translation found for settings_recovery_reset_dialog_message (6392681199895696206) -->
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
     <skip />
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Bekreft"</string>
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
+    <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Tilbakestill terminalen"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Avbryt"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Sikkerhetskopier data til <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Gjenopprettingen mislyktes"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Fjern sikkerhetskopierte data"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Feilkode: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Innstillinger"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"Terminalen kjører"</string>
-    <!-- no translation found for service_notification_content (3579923802797824545) -->
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
     <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Lukk"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-ne/strings.xml b/android/TerminalApp/res/values-ne/strings.xml
index 3646528..6b44555 100644
--- a/android/TerminalApp/res/values-ne/strings.xml
+++ b/android/TerminalApp/res/values-ne/strings.xml
@@ -17,47 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"टर्मिनल"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"टर्मिनल डिस्प्ले"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"कर्सर"</string>
+    <string name="empty_line" msgid="5012067143408427178">"खाली लाइन"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Linux टर्मिनल इन्स्टल गर्नुहोस्"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Linux टर्मिनल लन्च गर्नका निम्ति, तपाईंले नेटवर्क प्रयोग गरेर लगभग <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> जति डेटा डाउनलोड गर्नु पर्ने हुन्छ।\nतपाईं अघि बढ्नुहुन्छ?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Wi-Fi उपलब्ध हुँदा डाउनलोड गर्नुहोस्"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"इन्स्टल गर्नुहोस्"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"इन्स्टल गरिँदै छ"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"नेटवर्कसम्बन्धी त्रुटि। कनेक्सन जाँच गर्नुहोस् र फेरि प्रयास गर्नुहोस्।"</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Linux टर्मिनल इन्स्टल गरिँदै छ"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"पूरा भइसकेपछि Linux टर्मिनल सुरु हुने छ"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"नेटवर्कसम्बन्धी समस्याका कारण इन्स्टल गर्न सकिएन"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"इन्स्टल गर्न सकिएन। फेरि प्रयास गर्नुहोस्।"</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"सेटिङ"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"टर्मिनल तयार पारिँदै छ"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"टर्मिनल रोकिँदै छ"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"टर्मिनल क्र्यास भयो"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"डिस्कको आकार बदल्नुहोस्"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"आकार बदल्नुहोस् / Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"डिस्कको आकारको सेट गरियो"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"असाइन गरिएको: <xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"अधिकतम <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"रद्द गर्नुहोस्"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"पोर्ट फर्वार्डिङ"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"पोर्ट फर्वार्डिङ कन्फिगर गर्नुहोस्"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"टर्मिनलले एउटा नयाँ पोर्ट खोल्न खोजिरहेको छ"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"खोल्न अनुरोध गरिएको पोर्ट: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"स्वीकार गर्नुहोस्"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"अस्वीकार गर्नुहोस्"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"रिकभरी"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"पार्टिसन रिकभरीसम्बन्धी विकल्पहरू"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"यो संस्करण बदलेर सुरुको संस्करण बनाउनुहोस्"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"सबै हटाउनुहोस्"</string>
-    <!-- no translation found for settings_recovery_reset_dialog_title (874946981716251094) -->
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
     <skip />
-    <!-- no translation found for settings_recovery_reset_dialog_message (6392681199895696206) -->
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
     <skip />
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"पुष्टि गर्नुहोस्"</string>
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
+    <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"टर्मिनल रिसेट गर्नुहोस्"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"रद्द गर्नुहोस्"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"<xliff:g id="PATH">/mnt/backup</xliff:g> मा डेटा ब्याकअप गर्नुहोस्"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"रिकभर गर्न सकिएन"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"ब्याकअप डेटा हटाउनुहोस्"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"त्रुटिको कोड: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"सेटिङ"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"टर्मिनल चलिरहेको छ"</string>
-    <!-- no translation found for service_notification_content (3579923802797824545) -->
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
     <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"बन्द गर्नुहोस्"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-nl/strings.xml b/android/TerminalApp/res/values-nl/strings.xml
index c06ea33..4b47434 100644
--- a/android/TerminalApp/res/values-nl/strings.xml
+++ b/android/TerminalApp/res/values-nl/strings.xml
@@ -17,44 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Terminal"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Terminalweergave"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Cursor"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Lege regel"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Linux-terminal installeren"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Als je Linux-terminal wilt starten, moet je ongeveer <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> aan data downloaden via het netwerk.\nWil je doorgaan?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Downloaden als wifi beschikbaar is"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Installeren"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Installeren"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Netwerkfout. Check de verbinding en probeer het opnieuw."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Linux-terminal installeren"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Linux-terminal wordt gestart na afronding"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Kan niet installeren vanwege het netwerkprobleem"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Installatie mislukt. Probeer het opnieuw."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Instellingen"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Terminal voorbereiden"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Terminal stoppen"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Terminal gecrasht"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Formaat van schijf aanpassen"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Formaat aanpassen/Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Schijfgrootte ingesteld"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> toegewezen"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"<xliff:g id="MAX_SIZE">%1$s</xliff:g> max."</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Annuleren"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Poort­doorschakeling"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Poortdoorschakeling instellen"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"Terminal probeert een nieuwe poort te openen"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Poort die moet worden geopend: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Accepteren"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Weigeren"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Herstel"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Herstelopties voor partities"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Wijzigen naar eerste versie"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Alles verwijderen"</string>
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Terminal resetten"</string>
-    <string name="settings_recovery_reset_dialog_message" msgid="6392681199895696206">"Gegevens worden verwijderd"</string>
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Bevestigen"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Annuleren"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Back-up van gegevens maken in <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Herstel is mislukt"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Back-upgegevens verwijderen"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Foutcode: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Instellingen"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"Terminal wordt uitgevoerd"</string>
-    <string name="service_notification_content" msgid="3579923802797824545">"Klik om de terminal te openen"</string>
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
+    <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Sluiten"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-or/strings.xml b/android/TerminalApp/res/values-or/strings.xml
index 00c9f85..c1e8941 100644
--- a/android/TerminalApp/res/values-or/strings.xml
+++ b/android/TerminalApp/res/values-or/strings.xml
@@ -17,47 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"ଟର୍ମିନାଲ"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"ଟର୍ମିନାଲ ଡିସପ୍ଲେ"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"କର୍ସର"</string>
+    <string name="empty_line" msgid="5012067143408427178">"ଖାଲି ଲାଇନ"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Linux ଟର୍ମିନାଲକୁ ଇନଷ୍ଟଲ କରନ୍ତୁ"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Linux ଟର୍ମିନାଲ ଲଞ୍ଚ କରିବାକୁ ଆପଣଙ୍କୁ ନେଟୱାର୍କ ମାଧ୍ୟମରେ ପ୍ରାୟ <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g>ର ଡାଟା ଡାଉନଲୋଡ କରିବାକୁ ହେବ।\nଆପଣ ଆଗକୁ ବଢ଼ିବେ?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"ୱାଇ-ଫାଇ ଉପଲବ୍ଧ ହେଲେ ଡାଉନଲୋଡ କରନ୍ତୁ"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"ଇନଷ୍ଟଲ କରନ୍ତୁ"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"ଇନଷ୍ଟଲ କରାଯାଉଛି"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"ନେଟୱାର୍କ ତ୍ରୁଟି। କନେକ୍ସନ ଯାଞ୍ଚ କରି ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Linux ଟର୍ମିନାଲକୁ ଇନଷ୍ଟଲ କରାଯାଉଛି"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"ପ୍ରକ୍ରିୟା ସମ୍ପୂର୍ଣ୍ଣ ହେବା ପରେ Linux ଟର୍ମିନାଲ ଆରମ୍ଭ ହେବ"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"ନେଟୱାର୍କ ସମସ୍ୟା ଯୋଗୁଁ ଇନଷ୍ଟଲ କରିବାରେ ବିଫଳ ହୋଇଛି"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"ଇନଷ୍ଟଲ କରିବାରେ ବିଫଳ ହୋଇଛି। ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"ସେଟିଂସ"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"ଟର୍ମିନାଲକୁ ପ୍ରସ୍ତୁତ କରାଯାଉଛି"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Terminalକୁ ବନ୍ଦ କରାଯାଉଛି"</string>
-    <string name="vm_error_message" msgid="5231867246177661525">"Terminal କ୍ରାସ ହୋଇଛି"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"ଡିସ୍କ ରିସାଇଜ କରନ୍ତୁ"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"ରିସାଇଜ କରନ୍ତୁ / Rootfs"</string>
+    <string name="vm_error_message" msgid="5231867246177661525">"ଟର୍ମିନାଲ କ୍ରାସ ହୋଇଛି"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"ଡିସ୍କ ସାଇଜ ସେଟ ହୋଇଛି"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> ଆସାଇନ କରାଯାଇଛି"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"ସର୍ବାଧିକ <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"ବାତିଲ କରନ୍ତୁ"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"ପୋର୍ଟ ଫରୱାର୍ଡିଂ"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"ପୋର୍ଟ ଫରୱାର୍ଡିଂକୁ କନଫିଗର କରନ୍ତୁ"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"ଏକ ନୂଆ ପୋର୍ଟ ଖୋଲିବାକୁ ଟର୍ମିନାଲ ଅନୁରୋଧ କରୁଛି"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"ଏହି ପୋର୍ଟକୁ ଖୋଲା ରଖିବା ପାଇଁ ଅନୁରୋଧ କରାଯାଇଛି: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"ଗ୍ରହଣ କରନ୍ତୁ"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"ଅଗ୍ରାହ୍ୟ କରନ୍ତୁ"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"ରିକଭରି"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"ପାର୍ଟିସନ ରିକଭରି ବିକଳ୍ପ"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"ପ୍ରାରମ୍ଭିକ ଭର୍ସନକୁ ପରିବର୍ତ୍ତନ କରନ୍ତୁ"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"ସବୁ କାଢ଼ି ଦିଅନ୍ତୁ"</string>
-    <!-- no translation found for settings_recovery_reset_dialog_title (874946981716251094) -->
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
     <skip />
-    <!-- no translation found for settings_recovery_reset_dialog_message (6392681199895696206) -->
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
     <skip />
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"ସୁନିଶ୍ଚିତ କରନ୍ତୁ"</string>
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
+    <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"ଟର୍ମିନାଲ ରିସେଟ କରନ୍ତୁ"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"ବାତିଲ କରନ୍ତୁ"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"<xliff:g id="PATH">/mnt/backup</xliff:g>ରେ ଡାଟାର ବେକଅପ ନିଅନ୍ତୁ"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"ରିକଭରି ବିଫଳ ହୋଇଛି"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"ବେକଅପ ଡାଟାକୁ କାଢ଼ି ଦିଅନ୍ତୁ"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"ତ୍ରୁଟି କୋଡ: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"ସେଟିଂସ"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"ଟର୍ମିନାଲ ଚାଲୁ ଅଛି"</string>
-    <!-- no translation found for service_notification_content (3579923802797824545) -->
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
     <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"ବନ୍ଦ କରନ୍ତୁ"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-pa/strings.xml b/android/TerminalApp/res/values-pa/strings.xml
index 47f7aa6..cad7822 100644
--- a/android/TerminalApp/res/values-pa/strings.xml
+++ b/android/TerminalApp/res/values-pa/strings.xml
@@ -17,44 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"ਟਰਮੀਨਲ"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"ਟਰਮੀਨਲ ਡਿਸਪਲੇ"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"ਕਰਸਰ"</string>
+    <string name="empty_line" msgid="5012067143408427178">"ਖਾਲੀ ਲਾਈਨ"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Linux ਟਰਮੀਨਲ ਐਪ ਸਥਾਪਤ ਕਰੋ"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Linux ਟਰਮੀਨਲ ਐਪ ਨੂੰ ਲਾਂਚ ਕਰਨ ਲਈ, ਤੁਹਾਨੂੰ ਨੈੱਟਵਰਕ \'ਤੇ ਲਗਭਗ <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> ਡਾਟਾ ਡਾਊਨਲੋਡ ਕਰਨ ਦੀ ਲੋੜ ਹੈ।\nਕੀ ਅੱਗੇ ਵਧਣਾ ਹੈ?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"ਵਾਈ-ਫਾਈ ਦੇ ਉਪਲਬਧ ਹੋਣ \'ਤੇ ਡਾਊਨਲੋਡ ਕਰੋ"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"ਸਥਾਪਤ ਕਰੋ"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"ਸਥਾਪਤ ਹੋ ਰਹੀ ਹੈ"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"ਨੈੱਟਵਰਕ ਗੜਬੜ। ਕਨੈਕਸ਼ਨ ਦੀ ਜਾਂਚ ਕਰ ਕੇ ਮੁੜ-ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Linux ਟਰਮੀਨਲ ਐਪ ਸਥਾਪਤ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"ਪ੍ਰਕਿਰਿਆ ਪੂਰੀ ਹੋਣ ਤੋਂ ਬਾਅਦ, Linux ਟਰਮੀਨਲ ਐਪ ਸ਼ੁਰੂ ਹੋ ਜਾਵੇਗੀ"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"ਨੈੱਟਵਰਕ ਸੰਬੰਧੀ ਸਮੱਸਿਆ ਕਾਰਨ ਸਥਾਪਤ ਕਰਨਾ ਅਸਫਲ ਰਿਹਾ"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"ਸਥਾਪਤ ਕਰਨਾ ਅਸਫਲ ਰਿਹਾ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"ਸੈਟਿੰਗਾਂ"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"ਟਰਮੀਨਲ ਨੂੰ ਤਿਆਰ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"ਟਰਮੀਨਲ ਨੂੰ ਬੰਦ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"ਟਰਮੀਨਲ ਕ੍ਰੈਸ਼ ਹੋ ਗਿਆ"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"ਡਿਸਕ ਦਾ ਆਕਾਰ ਬਦਲੋ"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"ਆਕਾਰ ਬਦਲੋ / Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"ਡਿਸਕ ਸਾਈਜ਼ ਸੈੱਟ ਕੀਤਾ ਗਿਆ"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> ਜ਼ਿੰਮੇ ਲਗਾਇਆ ਗਿਆ"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"ਵੱਧੋ-ਵੱਧ <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"ਰੱਦ ਕਰੋ"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"ਪੋਰਟ ਫਾਰਵਰਡਿੰਗ"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"ਪੋਰਟ ਫਾਰਵਰਡਿੰਗ ਦਾ ਸੰਰੂਪਣ ਕਰੋ"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"ਟਰਮੀਨਲ ਇੱਕ ਨਵੇਂ ਪੋਰਟ ਨੂੰ ਖੋਲ੍ਹਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰ ਰਿਹਾ ਹੈ"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"ਪੋਰਟ ਨੂੰ ਖੋਲ੍ਹਣ ਦੀ ਬੇਨਤੀ ਕੀਤੀ ਗਈ: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"ਸਵੀਕਾਰ ਕਰੋ"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"ਅਸਵੀਕਾਰ ਕਰੋ"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"ਰਿਕਵਰੀ"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"ਪਾਰਟੀਸ਼ਨ ਰਿਕਵਰੀ ਦੇ ਵਿਕਲਪ"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"ਸ਼ੁਰੂਆਤੀ ਵਰਜਨ \'ਤੇ ਬਦਲੋ"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"ਸਭ ਹਟਾਓ"</string>
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"ਟਰਮੀਨਲ ਨੂੰ ਰੀਸੈੱਟ ਕਰੋ"</string>
-    <string name="settings_recovery_reset_dialog_message" msgid="6392681199895696206">"ਡਾਟਾ ਮਿਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ"</string>
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"ਤਸਦੀਕ ਕਰੋ"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"ਰੱਦ ਕਰੋ"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"<xliff:g id="PATH">/mnt/backup</xliff:g> \'ਤੇ ਡਾਟੇ ਦਾ ਬੈਕਅੱਪ ਲਓ"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"ਮੁੜ-ਹਾਸਲ ਕਰਨਾ ਅਸਫਲ ਰਿਹਾ"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"ਬੈਕਅੱਪ ਡਾਟਾ ਹਟਾਓ"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"ਗੜਬੜ ਕੋਡ: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"ਸੈਟਿੰਗਾਂ"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"ਟਰਮੀਨਲ ਚਾਲੂ ਹੈ"</string>
-    <string name="service_notification_content" msgid="3579923802797824545">"ਟਰਮੀਨਲ ਨੂੰ ਖੋਲ੍ਹਣ ਲਈ ਕਲਿੱਕ ਕਰੋ"</string>
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
+    <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"ਬੰਦ ਕਰੋ"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-pl/strings.xml b/android/TerminalApp/res/values-pl/strings.xml
index 0f561c8..8cac85b 100644
--- a/android/TerminalApp/res/values-pl/strings.xml
+++ b/android/TerminalApp/res/values-pl/strings.xml
@@ -17,44 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Terminal"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Ekran terminala"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Kursor"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Pusty wiersz"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Zainstaluj terminal Linuxa"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Aby uruchomić terminal Linuxa, musisz pobrać przez sieć około <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> danych.\nChcesz kontynuować?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Pobierz, gdy będzie dostępna sieć Wi-Fi"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Zainstaluj"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Instaluję"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Błąd sieci. Sprawdź połączenie i spróbuj ponownie."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Instaluję terminal Linuxa"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Po zakończeniu zostanie uruchomiony terminal Linuxa"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Nie udało się zainstalować z powodu problemu z siecią"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Nie udało się zainstalować. Spróbuj ponownie."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Ustawienia"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Przygotowuję terminal"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Zatrzymuję terminal"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Terminal uległ awarii"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Zmień rozmiar dysku"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Zmień rozmiar / rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Rozmiar dysku został ustawiony"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"Przypisano <xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"Maksymalny rozmiar <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Anuluj"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Przekierowanie portów"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Skonfiguruj przekierowanie portów"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"Terminal próbuje otworzyć nowy port"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Port, który ma być otwarty: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Zaakceptuj"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Odrzuć"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Odzyskiwanie"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Opcje odzyskiwania partycji"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Zmień na wersję początkową"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Usuń wszystko"</string>
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Zresetuj terminal"</string>
-    <string name="settings_recovery_reset_dialog_message" msgid="6392681199895696206">"Dane zostaną usunięte"</string>
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Potwierdź"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Anuluj"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Utwórz kopię zapasową w lokalizacji <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Nie udało się przywrócić"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Usuń dane kopii zapasowej"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Kod błędu: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Ustawienia"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"Terminal jest uruchomiony"</string>
-    <string name="service_notification_content" msgid="3579923802797824545">"Kliknij, aby otworzyć terminal"</string>
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
+    <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Zamknij"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-pt-rPT/strings.xml b/android/TerminalApp/res/values-pt-rPT/strings.xml
index ab08a1d..0e0395a 100644
--- a/android/TerminalApp/res/values-pt-rPT/strings.xml
+++ b/android/TerminalApp/res/values-pt-rPT/strings.xml
@@ -17,44 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Terminal"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Ecrã do terminal"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Cursor"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Linha vazia"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Instale o terminal do Linux"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Para iniciar o terminal do Linux, tem de transferir cerca de <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> de dados através da rede.\nQuer continuar?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Transferir quando estiver disponível uma rede Wi-Fi"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Instalar"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"A instalar…"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Erro de rede. Verifique a ligação e tente novamente."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"A instalar o terminal do Linux"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"O terminal do Linux vai ser iniciado após a conclusão"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Falha ao instalar devido a um problema de rede"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Falha ao instalar. Tente novamente."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Definições"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"A preparar o terminal"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"A parar o terminal"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"O terminal falhou"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Redimensionamento do disco"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Redimensionamento/Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Tamanho do disco definido"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"Tamanho atribuído: <xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"Tamanho máx.: <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Cancelar"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Encaminhamento de portas"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Configure o encaminhamento de portas"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"O terminal está a tentar abrir uma nova porta"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Porta com pedido de abertura: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Aceitar"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Recusar"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Recuperação"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Opções de recuperação de partições"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Altere para a versão inicial"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Remova tudo"</string>
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Reponha o terminal"</string>
-    <string name="settings_recovery_reset_dialog_message" msgid="6392681199895696206">"Os dados vão ser eliminados"</string>
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Confirmar"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Cancelar"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Fazer uma cópia de segurança dos dados para <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Falha na recuperação"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Remova os dados da cópia de segurança"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Código de erro: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Definições"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"O terminal está em execução"</string>
-    <string name="service_notification_content" msgid="3579923802797824545">"Clique para abrir o terminal"</string>
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
+    <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Fechar"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-pt/strings.xml b/android/TerminalApp/res/values-pt/strings.xml
index 5848f9a..9fe771f 100644
--- a/android/TerminalApp/res/values-pt/strings.xml
+++ b/android/TerminalApp/res/values-pt/strings.xml
@@ -17,47 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Terminal"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Tela do terminal"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Cursor"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Linha vazia"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Instalar terminal Linux"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Para iniciar o terminal Linux, é necessário baixar cerca de <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> de dados pela rede.\nVocê quer continuar?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Baixar quando o Wi-Fi estiver disponível"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Instalar"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Instalando"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Erro de rede. Verifique a conexão e tente de novo."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Instalando terminal Linux"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"O terminal Linux será iniciado após a instalação"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Falha ao instalar devido a um problema de rede"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Falha ao instalar. Tente de novo."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Configurações"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Preparando o terminal"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Interrompendo o terminal"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"O terminal falhou"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Redimensionamento de disco"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Redimensionar / Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Tamanho do disco definido"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"Atribuído: <xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"Máximo: <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Cancelar"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Encaminhamento de portas"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Configurar o encaminhamento de portas"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"O terminal está tentando abrir uma nova porta"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Porta a ser aberta: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Aceitar"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Negar"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Recuperação"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Opções de recuperação da partição"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Mudar para a versão inicial"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Remover tudo"</string>
-    <!-- no translation found for settings_recovery_reset_dialog_title (874946981716251094) -->
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
     <skip />
-    <!-- no translation found for settings_recovery_reset_dialog_message (6392681199895696206) -->
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
     <skip />
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Confirmar"</string>
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
+    <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Redefinir terminal"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Cancelar"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Fazer backup dos dados em <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Falha na recuperação"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Remover dados de backup"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Código do erro: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Configurações"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"O terminal está em execução"</string>
-    <!-- no translation found for service_notification_content (3579923802797824545) -->
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
     <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Fechar"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-ro/strings.xml b/android/TerminalApp/res/values-ro/strings.xml
index 0a4e791..79395db 100644
--- a/android/TerminalApp/res/values-ro/strings.xml
+++ b/android/TerminalApp/res/values-ro/strings.xml
@@ -17,47 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Terminal"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Afișaj terminal"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Cursor"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Linie goală"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Instalează terminalul Linux"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Pentru a lansa terminalul Linux, trebuie să descarci aproximativ <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> de date prin rețea.\nVrei să continui?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Descarcă atunci când este disponibilă o conexiune Wi-Fi"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Instalează"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Se instalează"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Eroare de rețea. Verifică-ți conexiunea și încearcă din nou."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Se instalează terminalul Linux"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Terminalul Linux va porni după încheiere"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Nu s-a putut instala din cauza unei probleme de rețea"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Nu s-a instalat. Încearcă din nou."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Setări"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Se pregătește terminalul"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Se oprește terminalul"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Terminalul s-a blocat"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Redimensionarea discului"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Redimensionează / Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Dimensiunea discului este setată"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"S-au alocat <xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"<xliff:g id="MAX_SIZE">%1$s</xliff:g> max."</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Anulează"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Redirecționare de port"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Configurează redirecționarea de port"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"Terminalul încearcă să deschidă un nou port"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Portul solicitat să fie deschis: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Acceptă"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Refuză"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Recuperare"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Opțiuni de recuperare a partițiilor"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Schimbă la versiunea inițială"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Elimină-le pe toate"</string>
-    <!-- no translation found for settings_recovery_reset_dialog_title (874946981716251094) -->
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
     <skip />
-    <!-- no translation found for settings_recovery_reset_dialog_message (6392681199895696206) -->
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
     <skip />
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Confirmă"</string>
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
+    <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Resetează terminalul"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Anulează"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Fă backup datelor în <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Nu s-a putut recupera"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Elimină datele din backup"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Cod de eroare: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Setări"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"Terminalul rulează"</string>
-    <!-- no translation found for service_notification_content (3579923802797824545) -->
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
     <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Închide"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-ru/strings.xml b/android/TerminalApp/res/values-ru/strings.xml
index 3fd6ed5..01b006e 100644
--- a/android/TerminalApp/res/values-ru/strings.xml
+++ b/android/TerminalApp/res/values-ru/strings.xml
@@ -17,47 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Терминал"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Экран терминала"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Курсор"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Пустая строка"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Установка терминала Linux"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Для запуска терминала Linux нужно скачать примерно <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> данных по сети.\nПродолжить?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Скачать только через Wi-Fi"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Установить"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Установка"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Ошибка сети. Проверьте подключение и повторите попытку."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Установка терминала Linux"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"После окончания будет запущен терминал Linux."</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Не удалось выполнить установку из-за ошибки сети."</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Сбой установки. Повторите попытку."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Настройки"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Терминал подготавливается."</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Работа терминала останавливается."</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Произошел сбой терминала."</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Изменение размера диска"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Rootfs и изменение размера"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Размер диска задан."</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"Выделено <xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"Максимум <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Отмена"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Переадресация портов"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Настроить переадресацию портов"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"Терминал пытается открыть новый порт"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Запрашивается разрешение открыть порт <xliff:g id="PORT_NUMBER">%d</xliff:g>."</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Разрешить"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Не разрешать"</string>
-    <string name="settings_recovery_title" msgid="6586840079226383285">"Восстановление"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Варианты восстановления разделов"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Восстановить первоначальную версию"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Удалить все"</string>
-    <!-- no translation found for settings_recovery_reset_dialog_title (874946981716251094) -->
+    <string name="settings_recovery_title" msgid="6586840079226383285">"Восста­но­вле­ние"</string>
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
     <skip />
-    <!-- no translation found for settings_recovery_reset_dialog_message (6392681199895696206) -->
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
     <skip />
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Подтвердить"</string>
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
+    <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Сброс настроек терминала"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Отмена"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Сохранить резервную копию в <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Ошибка восстановления."</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Удалить данные резервного копирования"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Код ошибки: <xliff:g id="ERROR_CODE">%s</xliff:g>."</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Настройки"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"Терминал запущен"</string>
-    <!-- no translation found for service_notification_content (3579923802797824545) -->
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
     <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Закрыть"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-si/strings.xml b/android/TerminalApp/res/values-si/strings.xml
index 9132eeb..c1966d7 100644
--- a/android/TerminalApp/res/values-si/strings.xml
+++ b/android/TerminalApp/res/values-si/strings.xml
@@ -17,44 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"ටර්මිනලය"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"ටර්මිනල සංදර්ශකය"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"කර්සරය"</string>
+    <string name="empty_line" msgid="5012067143408427178">"හිස් රේඛාව"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Linux ටර්මිනලය ස්ථාපනය කරන්න"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Linux ටර්මිනලය දියත් කිරීමට, ඔබට ජාලය හරහා දත්ත <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> පමණ බාගත කිරීමට අවශ්‍ය වේ.\nඔබ ඉදිරියට යනවා ද?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Wi-Fi ලබා ගත හැකි විට බාගන්න"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"ස්ථාපනය කරන්න"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"ස්ථාපනය කරමින්"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"ජාල දෝෂයකි. සම්බන්ධතාවය පරීක්ෂා කර යළි උත්සාහ කරන්න."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Linux ටර්මිනලය ස්ථාපනය කරමින්"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Linux ටර්මිනලය අවසන් වූ පසු ආරම්භ වනු ඇත"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"ජාල ගැටලුවක් හේතුවෙන් ස්ථාපනය කිරීමට අසමත් විය"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"ස්ථාපනය කිරීමට අසමත් විය. නැවත උත්සාහ කරන්න."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"සැකසීම්"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"ටර්මිනලය සූදානම් කිරීම"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"ටර්මිනලය නතර කිරීම"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"ටර්මිනලය බිඳ වැටුණි"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"තැටි ප්‍රමාණය වෙනස් කිරීම"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"ප්‍රතිප්‍රමාණ කරන්න / Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"තැටි ප්‍රමාණය සැකසිණි"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> පවරන ලදි"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"<xliff:g id="MAX_SIZE">%1$s</xliff:g> උපරිමය"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"අවලංගු කරන්න"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"පෝටය යොමු කිරීම"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"පෝටය යොමු කිරීම වින්‍යාස කරන්න"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"ටර්මිනලය නව පෝටයක් විවෘත කිරීමට උත්සාහ කරයි"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"පෝටය විවෘත කිරීමට ඉල්ලා ඇත: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"පිළිගන්න"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"ප්‍රතික්ෂේප කරන්න"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"ප්‍රතිසාධනය"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"කොටස් ප්‍රතිසාන විකල්ප"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"ආරම්භක අනුවාදයට වෙනස් කරන්න"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"සියල්ල ඉවත් කරන්න"</string>
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"ටර්මිනලය යළි සකසන්න"</string>
-    <string name="settings_recovery_reset_dialog_message" msgid="6392681199895696206">"දත්ත මකනු ඇත"</string>
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"තහවුරු කරන්න"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"අවලංගු කරන්න"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"<xliff:g id="PATH">/mnt/backup</xliff:g> වෙත දත්ත උපස්ථ කරන්න"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"ප්‍රතිසාධනය අසමත් විය"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"උපස්ථ දත්ත ඉවත් කරන්න"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"දෝෂ කේතය: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"සැකසීම්"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"පර්යන්තය ධාවනය වේ"</string>
-    <string name="service_notification_content" msgid="3579923802797824545">"ටර්මිනලය විවෘත කිරීමට ක්ලික් කරන්න"</string>
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
+    <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"වසන්න"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-sk/strings.xml b/android/TerminalApp/res/values-sk/strings.xml
index f5e4ff7..3b206c5 100644
--- a/android/TerminalApp/res/values-sk/strings.xml
+++ b/android/TerminalApp/res/values-sk/strings.xml
@@ -17,47 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Terminál"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Zobrazenie terminálu"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Kurzor"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Prázdny riadok"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Inštalácia terminálu systému Linux"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Ak chcete spustiť terminál systému Linux, musíte cez sieť stiahnuť približne <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> dát.\nChcete pokračovať?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Stiahnuť, keď bude k dispozícii Wi‑Fi"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Inštalovať"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Inštaluje sa"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Chyba siete. Skontrolujte pripojenie a skúste to znova."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Inštaluje sa terminál systému Linux"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Terminál systému Linux sa spustí po dokončení"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Nepodarilo sa nainštalovať pre problém so sieťou"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Nepodarilo sa nainštalovať. Skúste to znova."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Nastavenia"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Terminál sa pripravuje"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Terminál sa zastavuje"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Terminál spadol"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Zmena veľkosti disku"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Zmeniť veľkosť / Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Veľkosť disku je nastavená"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"Pridelené <xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"Max. <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Zrušiť"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Presmerovanie portov"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Nakonfigurovať presmerovanie portov"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"Terminál sa pokúša otvoriť nový port"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Vyžaduje sa otvorenie portu: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Prijať"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Zamietnuť"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Obnovenie"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Možnosti obnovenia oddielu"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Zmena na pôvodnú verziu"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Odstrániť všetko"</string>
-    <!-- no translation found for settings_recovery_reset_dialog_title (874946981716251094) -->
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
     <skip />
-    <!-- no translation found for settings_recovery_reset_dialog_message (6392681199895696206) -->
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
     <skip />
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Potvrdiť"</string>
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
+    <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Resetovanie terminálu"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Zrušiť"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Zálohovať údaje do <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Obnovenie sa nepodarilo"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Odstrániť údaje zálohy"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Kód chyby: <xliff:g id="ERROR_CODE">%s</xliff:g>."</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Nastavenia"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"Terminál je spustený"</string>
-    <!-- no translation found for service_notification_content (3579923802797824545) -->
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
     <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Zavrieť"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-sl/strings.xml b/android/TerminalApp/res/values-sl/strings.xml
index 5701219..9cd43b4 100644
--- a/android/TerminalApp/res/values-sl/strings.xml
+++ b/android/TerminalApp/res/values-sl/strings.xml
@@ -17,44 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Terminal"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Prikaz terminala"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Kazalec"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Prazna vrstica"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Namestitev terminala Linux"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Če želite zagnati terminal Linux, morate prek omrežja prenesti približno <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> podatkov.\nAli želite nadaljevati?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Prenesi, ko bo na voljo Wi-Fi"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Namesti"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Nameščanje"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Omrežna napaka. Preverite povezavo in poskusite znova."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Nameščanje terminala Linux"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Terminal Linux se bo zagnal po končani namestitvi"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Namestitev ni uspela zaradi težave z omrežjem"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Namestitev ni uspela. Poskusite znova."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Nastavitve"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Pripravljanje terminala"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Ustavljanje terminala"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Terminal se je zrušil"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Spreminjanje velikosti diska"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Spreminjanje velikosti/korenski datotečni sistem"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Velikost diska je nastavljena"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"Dodeljeno: <xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"Največja velikost: <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Prekliči"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Posredovanje vrat"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Konfiguriranje posredovanja vrat"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"Terminal poskuša odpreti nova vrata"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Zahtevano je odprtje teh vrat: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Sprejmi"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Zavrni"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Obnovitev"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Možnosti obnovitve particije"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Spremeni v začetno različico"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Odstrani vse"</string>
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Ponastavitev terminala"</string>
-    <string name="settings_recovery_reset_dialog_message" msgid="6392681199895696206">"Podatki bodo izbrisani"</string>
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Potrdi"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Prekliči"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Varnostno kopiranje podatkov v <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Obnovitev ni uspela"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Odstranitev varnostno kopiranih podatkov"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Koda napake: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Nastavitve"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"Terminal se izvaja"</string>
-    <string name="service_notification_content" msgid="3579923802797824545">"Kliknite, če želite odpreti terminal"</string>
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
+    <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Zapri"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-sq/strings.xml b/android/TerminalApp/res/values-sq/strings.xml
index afc9e8d..1739698 100644
--- a/android/TerminalApp/res/values-sq/strings.xml
+++ b/android/TerminalApp/res/values-sq/strings.xml
@@ -17,47 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Terminali"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Ekrani i terminalit"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Kursori"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Rresht bosh"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Instalo terminalin e Linux"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Për të hapur terminalin e Linux, duhet të shkarkosh afërsisht <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> të dhëna nëpërmjet rrjetit.\nDëshiron të vazhdosh?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Shkarko kur të ofrohet Wi-Fi"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Instalo"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Po instalohet"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Gabim në rrjet. Kontrollo lidhjen dhe provo përsëri."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Terminali i Linux po instalohet"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Terminali i Linux do të niset pas përfundimit"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Instalimi dështoi për shkak të një problemi të rrjetit"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Instalimi dështoi. Provo përsëri."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Cilësimet"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Terminali po përgatitet"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Terminali po ndalohet"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Terminali u ndërpre aksidentalisht"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Ndryshimi i përmasave të diskut"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Ndrysho përmasat / Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Madhësia e diskut u caktua"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"Caktuar: <xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"Maksimumi: <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Anulo"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Transferimi i portës"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Konfiguro transferimin e portës"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"Terminali po përpiqet të hapë një portë të re"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Porta që kërkohet të hapet: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Prano"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Refuzo"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Rikuperimi"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Opsionet e rikuperimit të ndarjes"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Ndrysho në versionin fillestar"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Hiqi të gjitha"</string>
-    <!-- no translation found for settings_recovery_reset_dialog_title (874946981716251094) -->
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
     <skip />
-    <!-- no translation found for settings_recovery_reset_dialog_message (6392681199895696206) -->
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
     <skip />
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Konfirmo"</string>
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
+    <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Rivendos terminalin"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Anulo"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Rezervo të dhënat te <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Rikuperimi dështoi"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Hiq të dhënat e rezervimit"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Kodi i gabimit: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Cilësimet"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"Terminali po ekzekutohet"</string>
-    <!-- no translation found for service_notification_content (3579923802797824545) -->
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
     <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Mbyll"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-sr/strings.xml b/android/TerminalApp/res/values-sr/strings.xml
index 934fc3b..ef1ad71 100644
--- a/android/TerminalApp/res/values-sr/strings.xml
+++ b/android/TerminalApp/res/values-sr/strings.xml
@@ -17,47 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Терминал"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Приказ терминала"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Курсор"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Празан ред"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Инсталирајте Linux терминал"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Да бисте покренули Linux терминал, треба да преузмете око <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> података преко мреже.\nЖелите да наставите?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Преузми када WiFi буде доступан"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Инсталирај"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Инсталира се"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Грешка на мрежи. Проверите везу и пробајте поново."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Инсталира се Linux терминал"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Linux терминал ће се покренути после завршетка"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Инсталирање није успело због проблема са мрежом"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Инсталирање није успело. Пробајте поново."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Подешавања"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Терминал се припрема"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Терминал се зауставља"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Терминал је отказао"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Промена величине диска"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Промените величину / Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Величина диска је подешена"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"Додељено <xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"Макс. <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Откажи"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Прослеђивање порта"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Конфигуришите прослеђивање порта"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"Терминал покушава да отвори нови порт"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Порт чије је отварање тражено: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Прихвати"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Одбиј"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Опоравак"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Опције опоравка партиција"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Промени на почетну верзију"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Уклоните све"</string>
-    <!-- no translation found for settings_recovery_reset_dialog_title (874946981716251094) -->
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
     <skip />
-    <!-- no translation found for settings_recovery_reset_dialog_message (6392681199895696206) -->
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
     <skip />
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Потврди"</string>
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
+    <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Ресетујте терминал"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Откажи"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Направи резервну копију података на <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Опоравак није успео"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Уклоните резервну копију"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Кôд грешке: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Подешавања"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"Терминал је активан"</string>
-    <!-- no translation found for service_notification_content (3579923802797824545) -->
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
     <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Затвори"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-sv/strings.xml b/android/TerminalApp/res/values-sv/strings.xml
index 6fd87a5..ee53d3d 100644
--- a/android/TerminalApp/res/values-sv/strings.xml
+++ b/android/TerminalApp/res/values-sv/strings.xml
@@ -17,47 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Terminal"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Terminalskärm"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Markör"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Tom rad"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Installera Linux-terminalen"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Om du vill starta Linux-terminalen måste du ladda ned ungefär <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> data via nätverket.\nVill du fortsätta?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Ladda ned när wifi är tillgängligt"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Installera"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Installerar"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Nätverksfel. Kontrollera anslutningen och försök igen."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Installerar Linux-terminalen"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Linux-terminalen startas när processen är klar"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Det gick inte att installera på grund av nätverksproblemet"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Installationen misslyckades. Försök igen."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Inställningar"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Terminalen förbereds"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Stoppar terminalen"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Terminalen kraschade"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Ändra diskstorlek"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Ändra storlek/Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Diskstorlek har angetts"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> har tilldelats"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"Max <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Avbryt"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Port­vidare­befordran"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Konfigurera portvidarebefordran"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"Terminalen försöker öppna en ny port"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Port som begärs att öppnas: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Godkänn"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Neka"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Återställning"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Återställningsalternativ för partition"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Ändra till ursprunglig version"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Ta bort alla"</string>
-    <!-- no translation found for settings_recovery_reset_dialog_title (874946981716251094) -->
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
     <skip />
-    <!-- no translation found for settings_recovery_reset_dialog_message (6392681199895696206) -->
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
     <skip />
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Bekräfta"</string>
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
+    <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Återställ terminalen"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Avbryt"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Säkerhetskopiera data till <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Återställningen misslyckades"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Ta bort säkerhetskopierad data"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Felkod: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Inställningar"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"Terminalen körs"</string>
-    <!-- no translation found for service_notification_content (3579923802797824545) -->
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
     <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Stäng"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-sw/strings.xml b/android/TerminalApp/res/values-sw/strings.xml
index 50920e9..0021e54 100644
--- a/android/TerminalApp/res/values-sw/strings.xml
+++ b/android/TerminalApp/res/values-sw/strings.xml
@@ -17,47 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Temino"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Skrini ya kituo"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Kiteuzi"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Mstari usio na chochote"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Weka temino ya Linux"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Unahitaji kupakua takribani <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> ya data kwenye mtandao ili uwashe temino ya Linux.\nUngependa kuendelea?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Pakua wakati Wi-Fi inapatikana"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Weka"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Inaweka"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Hitilafu ya mtandao. Angalia muunganisho kisha ujaribu tena."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Inaweka temino ya Linux"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Temino ya Linux itawashwa baada ya kumaliza"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Imeshindwa kuweka kwenye kifaa kwa sababu ya tatizo la mtandao"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Imeshindwa kuweka kwenye kifaa. Jaribu tena."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Mipangilio"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Inaandaa temino"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Inafunga temino"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Temino imeacha kufanya kazi"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Kubadilisha Ukubwa wa Diski"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Badilisha ukubwa / Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Ukubwa wa diski umewekwa"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> zimekabidhiwa"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"Kikomo cha <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Acha"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Kusambaza Mlango Kwingine"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Weka mipangilio ya kusambaza mlango kwingine"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"Kituo kinajaribu kufungua mlango mpya"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Umeomba mlango ufunguliwe: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Kubali"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Kataa"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Kurejesha"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Chaguo za kurejesha data ya sehemu"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Rudi kwenye Toleo la awali"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Ondoa yote"</string>
-    <!-- no translation found for settings_recovery_reset_dialog_title (874946981716251094) -->
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
     <skip />
-    <!-- no translation found for settings_recovery_reset_dialog_message (6392681199895696206) -->
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
     <skip />
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Thibitisha"</string>
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
+    <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Badilisha temino"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Acha"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Hifadhi nakala ya data kwenye <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Haikurejesha"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Ondoa data ya nakala"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Msimbo wa hitilafu: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Mipangilio"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"Temino inatumika"</string>
-    <!-- no translation found for service_notification_content (3579923802797824545) -->
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
     <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Funga"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-sw720dp/config.xml b/android/TerminalApp/res/values-sw720dp/config.xml
new file mode 100644
index 0000000..be731da
--- /dev/null
+++ b/android/TerminalApp/res/values-sw720dp/config.xml
@@ -0,0 +1,19 @@
+<?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.
+ -->
+
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <bool name="terminal_portrait_only">false</bool>
+</resources>
diff --git a/android/TerminalApp/res/values-ta/strings.xml b/android/TerminalApp/res/values-ta/strings.xml
index 07efaeb..8c8d8f6 100644
--- a/android/TerminalApp/res/values-ta/strings.xml
+++ b/android/TerminalApp/res/values-ta/strings.xml
@@ -17,44 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"டெர்மினல்"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"டெர்மினல் டிஸ்ப்ளே"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"கர்சர்"</string>
+    <string name="empty_line" msgid="5012067143408427178">"வெற்று வரி"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Linux டெர்மினலை நிறுவுதல்"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Linux டெர்மினலைத் தொடங்க, நெட்வொர்க் மூலம் நீங்கள் சுமார் <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> தரவைப் பதிவிறக்க வேண்டும்.\nதொடர விரும்புகிறீர்களா?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"வைஃபை கிடைக்கும்போது பதிவிறக்கு"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"நிறுவு"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"நிறுவுகிறது"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"நெட்வொர்க் பிழை. இணைப்பைச் சரிபார்த்து மீண்டும் முயலவும்."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Linux டெர்மினலை நிறுவுகிறது"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"நிறைவடைந்ததும் Linux டெர்மினல் தொடங்கப்படும்"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"நெட்வொர்க் சிக்கல் இருப்பதால் நிறுவ முடியவில்லை"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"நிறுவ முடியவில்லை. மீண்டும் முயலவும்."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"அமைப்புகள்"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"டெர்மினலைத் தயார்செய்கிறது"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"டெர்மினல் நிறுத்தப்படுகிறது"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"டெர்மினல் சிதைவடைந்தது"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"டிஸ்க் அளவை மாற்றுதல்"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"அளவை மாற்று / Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"டிஸ்க் அளவு அமைக்கப்பட்டது"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> ஒதுக்கப்பட்டது"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"அதிகபட்சம் <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"ரத்துசெய்"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"போர்ட் அனுப்புதல்"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"போர்ட் அனுப்புதலை உள்ளமைத்தல்"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"டெர்மினல் புதிய போர்ட்டைத் திறக்க முயல்கிறது"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"திறக்கும்படி கேட்கப்பட்டுள்ள போர்ட்: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"ஏற்கிறேன்"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"நிராகரி"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"மீட்டெடுத்தல்"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"பார்டிஷன் மீட்டெடுப்பு விருப்பங்கள்"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"முதல் பதிப்பிற்கு மாற்று"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"அனைத்தையும் அகற்றும்"</string>
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"டெர்மினலை மீட்டமைத்தல்"</string>
-    <string name="settings_recovery_reset_dialog_message" msgid="6392681199895696206">"தரவு நீக்கப்படும்"</string>
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"உறுதிசெய்"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"ரத்துசெய்"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"<xliff:g id="PATH">/mnt/backup</xliff:g> இல் உள்ள தரவைக் காப்புப் பிரதி எடுத்தல்"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"மீட்டெடுக்க முடியவில்லை"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"காப்புப் பிரதித் தரவை அகற்றுதல்"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"பிழைக் குறியீடு: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"அமைப்புகள்"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"டெர்மினல் இயக்கத்தில் உள்ளது"</string>
-    <string name="service_notification_content" msgid="3579923802797824545">"டெர்மினலைத் திறக்க கிளிக் செய்யுங்கள்"</string>
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
+    <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"மூடு"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-te/strings.xml b/android/TerminalApp/res/values-te/strings.xml
index 1c670a1..3288895 100644
--- a/android/TerminalApp/res/values-te/strings.xml
+++ b/android/TerminalApp/res/values-te/strings.xml
@@ -17,44 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"టెర్మినల్"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Terminal డిస్‌ప్లే"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"కర్సర్"</string>
+    <string name="empty_line" msgid="5012067143408427178">"ఖాళీ లైన్"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Linux టెర్మినల్‌ను ఇన్‌స్టాల్ చేయండి"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Linux టెర్మినల్‌ను ప్రారంభించడానికి, మీరు నెట్‌వర్క్ ద్వారా దాదాపు <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> డేటాను డౌన్‌లోడ్ చేసుకోవాలి.\nమీరు కొనసాగిస్తారా?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Wi-Fi అందుబాటులో ఉన్నప్పుడు డౌన్‌లోడ్ చేయండి"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"ఇన్‌స్టాల్ చేయి"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"ఇన్‌స్టాల్ చేస్తోంది"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"నెట్‌వర్క్ ఎర్రర్. కనెక్షన్‌ను చెక్ చేసి, మళ్లీ ట్రై చేయండి."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Linux టెర్మినల్‌ను ఇన్‌స్టాల్ చేస్తోంది"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"పూర్తయిన తర్వాత Linux టెర్మినల్ ప్రారంభమవుతుంది"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"నెట్‌వర్క్ సమస్య కారణంగా ఇన్‌స్టాల్ చేయడం విఫలమైంది"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"ఇన్‌స్టాల్ చేయడం విఫలమైంది. మళ్లీ ట్రై చేయండి."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"సెట్టింగ్‌లు"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"టెర్మినల్‌ను సిద్ధం చేస్తోంది"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"టెర్మినల్‌ను ఆపివేస్తోంది"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"టెర్మినల్ క్రాష్ అయింది"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"డిస్క్ సైజ్ మార్చడం"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"సైజ్ మార్చండి / Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"డిస్క్ సైజ్ సెట్ చేయబడింది"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> కేటాయించబడింది"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"గరిష్ఠంగా <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"రద్దు చేయండి"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"పోర్ట్ ఫార్వర్డింగ్"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"పోర్ట్ ఫార్వర్డింగ్‌ను కాన్ఫిగర్ చేయండి"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"టెర్మినల్ ఒక కొత్త పోర్ట్‌ను తెరవడానికి ట్రై చేస్తోంది"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"పోర్ట్ తెరవాలని రిక్వెస్ట్ చేశారు: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"ఆమోదించండి"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"తిరస్కరించండి"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"రికవరీ"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"పార్టిషన్ రికవరీ ఆప్షన్‌లు"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"మొదటి వెర్షన్‌కు మార్చండి"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"అన్నీ తీసివేయండి"</string>
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"టెర్మినల్‌ను రీసెట్ చేయండి"</string>
-    <string name="settings_recovery_reset_dialog_message" msgid="6392681199895696206">"డేటా తొలగించబడుతుంది"</string>
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"నిర్ధారించండి"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"రద్దు చేయండి"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"<xliff:g id="PATH">/mnt/backup</xliff:g>‌లో డేటాను బ్యాకప్ చేయండి"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"రికవరీ విఫలమైంది"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"బ్యాకప్ డేటాను తీసివేయండి"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"ఎర్రర్ కోడ్: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"సెట్టింగ్‌లు"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"టెర్మినల్ రన్ అవుతోంది"</string>
-    <string name="service_notification_content" msgid="3579923802797824545">"టెర్మినల్‌ను తెరవడానికి క్లిక్ చేయండి"</string>
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
+    <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"మూసివేయండి"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-th/strings.xml b/android/TerminalApp/res/values-th/strings.xml
index 4cc93a6..e86bc06 100644
--- a/android/TerminalApp/res/values-th/strings.xml
+++ b/android/TerminalApp/res/values-th/strings.xml
@@ -17,44 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"เทอร์มินัล"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"จอแสดงผลของเทอร์มินัล"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"เคอร์เซอร์"</string>
+    <string name="empty_line" msgid="5012067143408427178">"บรรทัดว่างเปล่า"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"ติดตั้งเทอร์มินัล Linux"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"หากต้องการเปิดเทอร์มินัล Linux คุณจะต้องดาวน์โหลดข้อมูลประมาณ <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> ผ่านเครือข่าย\nคุณต้องการดำเนินการต่อไหม"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"ดาวน์โหลดเมื่อมีการเชื่อมต่อ Wi-Fi"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"ติดตั้ง"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"กำลังติดตั้ง"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"ข้อผิดพลาดเกี่ยวกับเครือข่าย ตรวจสอบการเชื่อมต่อแล้วลองอีกครั้ง"</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"กำลังติดตั้งเทอร์มินัล Linux"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"เทอร์มินัล Linux จะเริ่มต้นหลังจากติดตั้งเสร็จ"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"ติดตั้งไม่สำเร็จเนื่องจากมีปัญหาเครือข่าย"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"ติดตั้งไม่สำเร็จ โปรดลองอีกครั้ง"</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"การตั้งค่า"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"กำลังเตรียมเทอร์มินัล"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"กำลังหยุดเทอร์มินัล"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"เทอร์มินัลขัดข้อง"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"การปรับขนาดดิสก์"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"ปรับขนาด/Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"ตั้งค่าขนาดดิสก์แล้ว"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"กำหนดขนาด <xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> แล้ว"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"สูงสุด <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"ยกเลิก"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"การส่งต่อพอร์ต"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"กำหนดค่าการส่งต่อพอร์ต"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"เทอร์มินัลกำลังพยายามเปิดพอร์ตใหม่"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"พอร์ตที่ขอให้เปิด: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"ยอมรับ"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"ปฏิเสธ"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"การกู้คืน"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"ตัวเลือกการกู้คืนพาร์ติชัน"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"เปลี่ยนเป็นเวอร์ชันเริ่มต้น"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"นำออกทั้งหมด"</string>
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"รีเซ็ตเทอร์มินัล"</string>
-    <string name="settings_recovery_reset_dialog_message" msgid="6392681199895696206">"ระบบจะลบข้อมูล"</string>
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"ยืนยัน"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"ยกเลิก"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"สำรองข้อมูลไปยัง <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"การกู้คืนไม่สำเร็จ"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"นําข้อมูลสํารองออก"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"รหัสข้อผิดพลาด: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"การตั้งค่า"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"เทอร์มินัลกำลังทำงาน"</string>
-    <string name="service_notification_content" msgid="3579923802797824545">"คลิกเพื่อเปิดเทอร์มินัล"</string>
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
+    <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"ปิด"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-tl/strings.xml b/android/TerminalApp/res/values-tl/strings.xml
index d8dd2ca..a4a01b8 100644
--- a/android/TerminalApp/res/values-tl/strings.xml
+++ b/android/TerminalApp/res/values-tl/strings.xml
@@ -17,44 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Terminal"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Display ng terminal"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Cursor"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Walang lamang linya"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"I-install ang terminal ng Linux"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Para ilunsad ang terminal ng Linux, kailangan mong mag-download ng humigit-kumulang <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> na data sa network.\nGusto mo bang magpatuloy?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"I-download kapag available ang Wi-Fi"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"I-install"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Ini-install"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Error sa network. Tingnan ang koneksyon at subukan ulit."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Ini-install ang terminal ng Linux"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Magsisimula ang terminal ng Linux pagkatapos mag-install"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Hindi na-install dahil sa isyu sa network"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Hindi na-install. Subukan ulit."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Mga Setting"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Inihahanda ang terminal"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Hinihinto ang terminal"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Nag-crash ang terminal"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"I-resize ang Disk"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"I-resize / Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Nakatakda na ang laki ng disk"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> ang nakatalaga"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"<xliff:g id="MAX_SIZE">%1$s</xliff:g> ang max"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Kanselahin"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Pag-forward ng Port"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"I-configure ang pag-forward ng port"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"Sinusubukan ng terminal na magbukas ng bagong port"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Port na na-request na maging bukas: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Tanggapin"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Tanggihan"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Pag-recover"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Mga opsyon sa Pag-recover ng Partition"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Baguhin sa inisyal na bersyon"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Alisin lahat"</string>
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"I-reset ang terminal"</string>
-    <string name="settings_recovery_reset_dialog_message" msgid="6392681199895696206">"Made-delete ang data"</string>
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Kumpirmahin"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Kanselahin"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Mag-back up ng data sa <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Hindi na-recover"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Alisin ang backup data"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Code ng error: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Mga Setting"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"Gumagana ang terminal"</string>
-    <string name="service_notification_content" msgid="3579923802797824545">"I-click para buksan ang terminal"</string>
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
+    <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Isara"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-tr/strings.xml b/android/TerminalApp/res/values-tr/strings.xml
index c696eda..8879086 100644
--- a/android/TerminalApp/res/values-tr/strings.xml
+++ b/android/TerminalApp/res/values-tr/strings.xml
@@ -17,47 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Terminal"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Terminal ekranı"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"İmleç"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Boş satır"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Linux terminalini yükleyin"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Linux terminalini başlatmak için ağ üzerinden yaklaşık <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> veri indirmeniz gerekir.\nDevam etmek istiyor musunuz?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Kablosuz bağlantı olduğunda indir"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Yükle"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Yükleniyor"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Ağ hatası. Bağlantıyı kontrol edip tekrar deneyin."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Linux terminali yükleniyor"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Linux terminali, işlem tamamlandıktan sonra başlatılacak"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Ağ sorunu nedeniyle yüklenemedi."</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Yüklenemedi. Tekrar deneyin."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Ayarlar"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Terminal hazırlanıyor"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Terminal durduruluyor"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Terminal kilitlendi"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Diski yeniden boyutlandır"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Yeniden boyutlandır/Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Disk boyutu ayarlandı"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> atandı"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"<xliff:g id="MAX_SIZE">%1$s</xliff:g> maks."</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"İptal"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Bağlantı noktası yönlendirme"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Bağlantı noktası yönlendirmeyi yapılandır"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"Terminal yeni bir bağlantı noktası açmaya çalışıyor"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Açılması istenen bağlantı noktası: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Kabul et"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Reddet"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Kurtarma"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Bölüm kurtarma seçenekleri"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"İlk sürüme geç"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Tümünü kaldır"</string>
-    <!-- no translation found for settings_recovery_reset_dialog_title (874946981716251094) -->
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
     <skip />
-    <!-- no translation found for settings_recovery_reset_dialog_message (6392681199895696206) -->
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
     <skip />
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Onayla"</string>
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
+    <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Terminali sıfırla"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"İptal"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Verileri <xliff:g id="PATH">/mnt/backup</xliff:g> konumuna yedekle"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Kurtarma işlemi başarısız oldu"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Yedek verileri kaldır"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Hata kodu: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Ayarlar"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"Terminal çalışıyor"</string>
-    <!-- no translation found for service_notification_content (3579923802797824545) -->
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
     <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Kapat"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-uk/strings.xml b/android/TerminalApp/res/values-uk/strings.xml
index f5a405d..e6c5809 100644
--- a/android/TerminalApp/res/values-uk/strings.xml
+++ b/android/TerminalApp/res/values-uk/strings.xml
@@ -17,47 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Термінал"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Дисплей термінала"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Курсор"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Пустий рядок"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Установити термінал Linux"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Щоб запустити термінал Linux, потрібно завантажити приблизно <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> даних через мережу.\nПродовжити?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Завантажити через Wi-Fi, коли буде доступно"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Установити"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Встановлення"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Помилка мережі. Перевірте з’єднання й повторіть спробу."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Встановлення термінала Linux"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Після завершення буде запущено термінал Linux"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Не вдалося встановити через проблему з мережею"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Не вдалося встановити. Повторіть спробу."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Налаштування"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Підготовка термінала"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Зупинка термінала"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Збій термінала"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Зміна розміру диска"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Змінити розмір/Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Розмір диска вказано"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"Виділено <xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"Максимальний розмір: <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Скасувати"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Переадресація порту"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Налаштувати переадресацію порту"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"Термінал намагається відкрити новий порт"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Порт, який потрібно відкрити: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Прийняти"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Відхилити"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Відновлення"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Способи відновлення розділів"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Зміна на початкову версію"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Видалити всі"</string>
-    <!-- no translation found for settings_recovery_reset_dialog_title (874946981716251094) -->
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
     <skip />
-    <!-- no translation found for settings_recovery_reset_dialog_message (6392681199895696206) -->
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
     <skip />
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Підтвердити"</string>
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
+    <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Скинути налаштування термінала"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Скасувати"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Створити резервну копію даних у <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Не вдалося відновити"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Видалити резервну копію даних"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Код помилки: <xliff:g id="ERROR_CODE">%s</xliff:g>."</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Налаштування"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"Термінал запущено"</string>
-    <!-- no translation found for service_notification_content (3579923802797824545) -->
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
     <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Закрити"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-ur/strings.xml b/android/TerminalApp/res/values-ur/strings.xml
index 1ffd3c5..9813c7c 100644
--- a/android/TerminalApp/res/values-ur/strings.xml
+++ b/android/TerminalApp/res/values-ur/strings.xml
@@ -17,44 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"ٹرمینل"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"ٹرمینل ڈسپلے"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"کرسر"</string>
+    <string name="empty_line" msgid="5012067143408427178">"خالی لائن"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"‫Linux ٹرمینل انسٹال کریں"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"‫Linux ٹرمینل کو شروع کرنے کے لیے، آپ کو نیٹ ورک پر تقریباً <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> ڈیٹا ڈاؤن لوڈ کرنا ہوگا۔\nکیا آپ آگے بڑھیں گے؟"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"‫Wi-Fi دستیاب ہونے پر ڈاؤن لوڈ کریں"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"انسٹال کریں"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"انسٹال کیا جا رہا ہے"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"نیٹ ورک کی خرابی۔ کنکشن چیک کریں اور دوبارہ کوشش کریں۔"</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"‫Linux ٹرمینل انسٹال ہو رہا ہے"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"مکمل ہونے کے بعد Linux ٹرمینل شروع کیا جا سکے گا"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"نیٹ ورک میں خرابی کی وجہ سے انسٹال نہیں کیا جا سکا"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"انسٹال نہیں کیا جا سکا۔ دوبارہ کوشش کریں۔"</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"ترتیبات"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"ٹرمینل تیار ہو رہا ہے"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"ٹرمینل کو روکا جا رہا ہے"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"ٹرمینل کریش ہو گیا"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"ڈسک کا سائز تبدیل کریں"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"سائز تبدیل کریں / Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"ڈسک کے سائز کا سیٹ"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> تفویض کردہ"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"زیادہ سے زیادہ <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"منسوخ کریں"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"پورٹ فارورڈنگ"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"پورٹ فارورڈنگ کو کنفیگر کریں"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"ٹرمینل ایک نیا پورٹ کھولنے کی کوشش کر رہا ہے"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"پورٹ کو کھولنے کی درخواست کی گئی ہے: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"قبول کریں"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"مسترد کریں"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"بازیابی"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"پارٹیشن کی بازیابی کے اختیارات"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"ابتدائی ورژن میں تبدیلی"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"سبھی ہٹائیں"</string>
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"ٹرمینل ری سیٹ کریں"</string>
-    <string name="settings_recovery_reset_dialog_message" msgid="6392681199895696206">"ڈیٹا حذف کر دیا جائے گا"</string>
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"تصدیق کریں"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"منسوخ کریں"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"‫<xliff:g id="PATH">/mnt/backup</xliff:g> پر ڈیٹا کا بیک اپ لیں"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"بازیابی ناکام ہو گئی"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"بیک اپ ڈیٹا ہٹائیں"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"خرابی کا کوڈ: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"ترتیبات"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"ٹرمینل چل رہا ہے"</string>
-    <string name="service_notification_content" msgid="3579923802797824545">"ٹرمینل کھولنے کے لیے کلک کریں"</string>
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
+    <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"بند کریں"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-uz/strings.xml b/android/TerminalApp/res/values-uz/strings.xml
index c2208ba..56f6429 100644
--- a/android/TerminalApp/res/values-uz/strings.xml
+++ b/android/TerminalApp/res/values-uz/strings.xml
@@ -17,44 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Terminal"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Terminal displeyi"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Kursor"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Boʻsh qator"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Linux terminalini oʻrnatish"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Linux terminalini ishga tushirish uchun tarmoq orqali taxminan <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> axborot yuklab olish kerak.\nDavom etilsinmi?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Wi-Fi tarmoqqa ulanganda yuklab olish"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Oʻrnatish"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Oʻrnatilmoqda"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Tarmoq xatosi. Aloqani tekshirib, qayta urining."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Linux terminali oʻrnatilmoqda"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Linux terminali oʻrnatilganidan keyin ishga tushadi"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Tarmoq xatosi sababli oʻrnatilmadi"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Oʻrnatilmadi. Qayta urining."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Sozlamalar"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Terminal tayyorlanmoqda"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Terminal toʻxtatilmoqda"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Terminal ishdan chiqdi"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Disk hajmini oʻzgartirish"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Hajmini oʻzgartirish / Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Disk hajmi belgilandi"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> ajratilgan"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"Maks <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Bekor qilish"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Portni uzatish"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Portni uzatish sozlamalari"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"Terminal yangi port ochishga urinmoqda"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Port ochishga ruxsat soʻraldi: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Qabul qilish"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Rad etish"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Tiklash"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Disk boʻlimini tiklash opsiyalari"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Dastlabki versiyaga oʻzgartirish"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Hammasini tozalash"</string>
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Terminalni asliga qaytarish"</string>
-    <string name="settings_recovery_reset_dialog_message" msgid="6392681199895696206">"Maʼlumotlar oʻchib ketadi"</string>
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Tasdiqlash"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Bekor qilish"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Maʼlumotlarni bu yerga zaxiralash: <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Tiklanmadi"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Zaxira maʼlumotlarini olib tashlash"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Xatolik kodi: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Sozlamalar"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"Terminal ishga tushgan"</string>
-    <string name="service_notification_content" msgid="3579923802797824545">"Terminalni ochish uchun bosing"</string>
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
+    <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Yopish"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-vi/strings.xml b/android/TerminalApp/res/values-vi/strings.xml
index 82909db..42de35b 100644
--- a/android/TerminalApp/res/values-vi/strings.xml
+++ b/android/TerminalApp/res/values-vi/strings.xml
@@ -17,47 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Terminal"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Màn hình cửa sổ dòng lệnh"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Con trỏ"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Dòng trống"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Cài đặt Linux terminal"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Để chạy Linux terminal, bạn cần tải khoảng <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> dữ liệu xuống qua mạng.\nBạn có muốn tiếp tục không?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Tải xuống khi có Wi-Fi"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Cài đặt"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Đang cài đặt"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Lỗi mạng. Hãy kiểm tra trạng thái kết nối rồi thử lại."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Đang cài đặt Linux terminal"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Linux terminal sẽ khởi động sau khi cài đặt xong"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Không cài đặt được do sự cố mạng"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Không cài đặt được. Hãy thử lại."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Cài đặt"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Đang chuẩn bị Terminal"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Đang dừng Terminal"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Terminal gặp sự cố"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Đổi kích thước ổ đĩa"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Đổi kích thước/Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Đã đặt dung lượng ổ đĩa"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"Ðã phân bổ <xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"Tối đa <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Huỷ"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Chuyển tiếp cổng"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Định cấu hình tính năng chuyển tiếp cổng"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"Terminal đang cố mở một cổng mới"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Cổng được yêu cầu mở: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Chấp nhận"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Từ chối"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Khôi phục"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Tuỳ chọn khôi phục phân vùng"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Chuyển về phiên bản ban đầu"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Xoá tất cả"</string>
-    <!-- no translation found for settings_recovery_reset_dialog_title (874946981716251094) -->
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
     <skip />
-    <!-- no translation found for settings_recovery_reset_dialog_message (6392681199895696206) -->
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
     <skip />
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Xác nhận"</string>
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
+    <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Đặt lại cửa sổ dòng lệnh"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Huỷ"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Sao lưu dữ liệu vào <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Không khôi phục được"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Xoá dữ liệu sao lưu"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Mã lỗi: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Cài đặt"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"Terminal đang chạy"</string>
-    <!-- no translation found for service_notification_content (3579923802797824545) -->
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
     <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Đóng"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-zh-rCN/strings.xml b/android/TerminalApp/res/values-zh-rCN/strings.xml
index e1afa9f..4220096 100644
--- a/android/TerminalApp/res/values-zh-rCN/strings.xml
+++ b/android/TerminalApp/res/values-zh-rCN/strings.xml
@@ -17,44 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"终端"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"终端显示内容"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"光标"</string>
+    <string name="empty_line" msgid="5012067143408427178">"空行"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"安装 Linux 终端"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"如需启动 Linux 终端,您需要联网下载大约 <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> 的数据。\n要继续吗?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"连接到 WLAN 时下载"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"安装"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"正在安装"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"网络错误。请检查网络连接,然后重试。"</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"正在安装 Linux 终端"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"完成后将启动 Linux 终端"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"由于网络问题,安装失败"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"安装失败。请重试。"</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"设置"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"正在准备终端"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"正在停止终端"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"终端已崩溃"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"调整磁盘大小"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"调整大小/Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"已设置磁盘大小"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"已分配 <xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"最大为 <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"取消"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"端口转发"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"配置端口转发"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"终端正在尝试打开新端口"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"请求打开的端口:<xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"接受"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"拒绝"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"恢复"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"分区恢复选项"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"更改为初始版本"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"全部移除"</string>
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"重置终端"</string>
-    <string name="settings_recovery_reset_dialog_message" msgid="6392681199895696206">"数据将被删除"</string>
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"确认"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"取消"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"将数据备份到 <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"恢复失败"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"移除备份数据"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"错误代码:<xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"设置"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"终端正在运行"</string>
-    <string name="service_notification_content" msgid="3579923802797824545">"点击即可打开终端"</string>
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
+    <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"关闭"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-zh-rHK/strings.xml b/android/TerminalApp/res/values-zh-rHK/strings.xml
index b234d1b..7cd3a93 100644
--- a/android/TerminalApp/res/values-zh-rHK/strings.xml
+++ b/android/TerminalApp/res/values-zh-rHK/strings.xml
@@ -17,44 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"終端機"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"終端機顯示畫面"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"游標"</string>
+    <string name="empty_line" msgid="5012067143408427178">"空白行"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"安裝 Linux 終端機"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"如要啟動 Linux 終端機,你需要透過網絡下載約 <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> 資料。\n要繼續嗎?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"連接 Wi-Fi 時下載"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"安裝"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"正在安裝"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"網絡錯誤。請檢查網絡連線,然後重試。"</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"正在安裝 Linux 終端機"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Linux 將於安裝完成後開啟"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"由於網絡發生問題,因此無法安裝"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"無法安裝,請再試一次。"</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"設定"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"正在準備終端機"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"正在停止終端機"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"終端機當機"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"調整磁碟大小"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"調整大小 / Rootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"已設定磁碟大小"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"已指派 <xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"最多 <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"取消"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"連接埠轉送"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"設定連接埠轉送"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"終端機正在嘗試開啟新的連接埠"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"要求開啟的連接埠:<xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"接受"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"拒絕"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"復原"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"分區復原選項"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"變更至初始版本"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"全部移除"</string>
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"重設終端機"</string>
-    <string name="settings_recovery_reset_dialog_message" msgid="6392681199895696206">"資料將刪除"</string>
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"確認"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"取消"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"將資料備份至 <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"無法復原"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"移除備份資料"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"錯誤代碼:<xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"設定"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"終端機執行中"</string>
-    <string name="service_notification_content" msgid="3579923802797824545">"點選即可開啟終端機"</string>
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
+    <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"關閉"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-zh-rTW/strings.xml b/android/TerminalApp/res/values-zh-rTW/strings.xml
index 7447671..dc86f3f 100644
--- a/android/TerminalApp/res/values-zh-rTW/strings.xml
+++ b/android/TerminalApp/res/values-zh-rTW/strings.xml
@@ -17,44 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"終端機"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"終端機顯示畫面"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"游標"</string>
+    <string name="empty_line" msgid="5012067143408427178">"空白行"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"安裝 Linux 終端機"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"如要啟動 Linux 終端機,必須透過網路下載大約 <xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> 的資料。\n要繼續嗎?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"連上 Wi-Fi 網路時下載"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"安裝"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"安裝中"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"網路發生錯誤。請檢查連線狀況,然後再試一次。"</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"正在安裝 Linux 終端機"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"完成後將啟動 Linux 終端機"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"網路發生問題,因此無法安裝"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"無法安裝,請再試一次。"</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"設定"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"正在準備終端機"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"正在停止終端機"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"終端機當機"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"調整磁碟大小"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"調整 Rootfs 大小"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"已設定磁碟大小"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"已指派 <xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"最多 <xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"取消"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"通訊埠轉送"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"設定通訊埠轉送"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"終端機正在嘗試開啟新的通訊埠"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"要求開啟的通訊埠:<xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"接受"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"拒絕"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"復原"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"分區復原選項"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"變更為初始版本"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"全部移除"</string>
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"重設終端機"</string>
-    <string name="settings_recovery_reset_dialog_message" msgid="6392681199895696206">"資料將刪除"</string>
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"確認"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"取消"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"將資料備份至 <xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"無法復原"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"移除備份資料"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"錯誤代碼:<xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"設定"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"終端機運作中"</string>
-    <string name="service_notification_content" msgid="3579923802797824545">"點選即可開啟終端機"</string>
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
+    <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"關閉"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values-zu/strings.xml b/android/TerminalApp/res/values-zu/strings.xml
index 134dbca..b6ff037 100644
--- a/android/TerminalApp/res/values-zu/strings.xml
+++ b/android/TerminalApp/res/values-zu/strings.xml
@@ -17,47 +17,88 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="5597111707986572208">"Itheminali"</string>
+    <string name="terminal_display" msgid="4810127497644015237">"Isibonisi setheminali"</string>
+    <string name="terminal_input" msgid="4602512831433433551">"Icursor"</string>
+    <string name="empty_line" msgid="5012067143408427178">"Umugqa ongenalutho"</string>
+    <!-- no translation found for double_tap_to_edit_text (7380095045491399890) -->
+    <skip />
     <string name="installer_title_text" msgid="500663060973466805">"Faka itheminali yeLinux"</string>
-    <string name="installer_desc_text_format" msgid="2734224805682171826">"Ukuze uqalise itheminali yeLinux, udinga ukudawuniloda cishe idatha u-<xliff:g id="EXPECTED_SIZE">%1$s</xliff:g> kunethiwekhi.\nUngathanda ukuqhubeka?"</string>
-    <string name="installer_wait_for_wifi_checkbox_text" msgid="487720664098014506">"Dawuniloda lapho i-Wi-Fi itholakala"</string>
+    <!-- no translation found for installer_desc_text_format (5935117404303982823) -->
+    <skip />
+    <!-- no translation found for installer_wait_for_wifi_checkbox_text (5812378362605046639) -->
+    <skip />
     <string name="installer_install_button_enabled_text" msgid="6142090640081511103">"Faka"</string>
     <string name="installer_install_button_disabled_text" msgid="8651445004125422467">"Iyafaka"</string>
-    <string name="installer_install_network_error_message" msgid="2450409107529774410">"Iphutha lenethiwekhi. Hlola uxhumo bese uyazama futhi."</string>
+    <!-- no translation found for installer_install_network_error_message (6483202005746623398) -->
+    <skip />
     <string name="installer_notif_title_text" msgid="471160690081159042">"Ifaka itheminali yeLinux"</string>
-    <string name="installer_notif_desc_text" msgid="6746098106305899060">"Itheminali yeLinux izoqalwa ngemva kokuqeda"</string>
-    <string name="installer_error_network" msgid="3265100678310833813">"Yehlulekile ukufaka ngenxa yenkinga yenethiwekhi"</string>
-    <string name="installer_error_unknown" msgid="1991780204241177455">"Yehlulekile ukufaka. Zama futhi."</string>
+    <!-- no translation found for installer_notif_desc_text (2353770076549425837) -->
+    <skip />
+    <!-- no translation found for installer_error_network (5627330072955876676) -->
+    <skip />
+    <!-- no translation found for installer_error_no_wifi (1180164894845030969) -->
+    <skip />
+    <!-- no translation found for installer_error_unknown (5657920711470180224) -->
+    <skip />
     <string name="action_settings" msgid="5729342767795123227">"Amasethingi"</string>
     <string name="vm_creation_message" msgid="6594953532721367502">"Ilungiselela itheminali"</string>
     <string name="vm_stop_message" msgid="3978349856095529255">"Itheminali yokumisa"</string>
     <string name="vm_error_message" msgid="5231867246177661525">"Itheminali iphahlazekile"</string>
-    <string name="settings_disk_resize_title" msgid="1545791169419914600">"Shintsha Usayizi Wediski"</string>
-    <string name="settings_disk_resize_sub_title" msgid="149418971610906138">"Shintsha usayizi / IRootfs"</string>
+    <!-- no translation found for settings_disk_resize_title (8648082439414122069) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_sub_title (568100064927028058) -->
+    <skip />
     <string name="settings_disk_resize_resize_message" msgid="5990475712303845087">"Usayizi wediski usethiwe"</string>
     <string name="settings_disk_resize_resize_gb_assigned_format" msgid="109301857555401579">"U-<xliff:g id="ASSIGNED_SIZE">%1$s</xliff:g> wabiwe"</string>
     <string name="settings_disk_resize_resize_gb_max_format" msgid="6221210151688630371">"Umkhawulo ka-<xliff:g id="MAX_SIZE">%1$s</xliff:g>"</string>
     <string name="settings_disk_resize_resize_cancel" msgid="2182388126941686562">"Khansela"</string>
-    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (83303619015991908) -->
+    <!-- no translation found for settings_disk_resize_resize_restart_vm_to_apply (6651018335906339973) -->
     <skip />
-    <string name="settings_port_forwarding_title" msgid="4867439149919324784">"Ukudlulisela Ngembobo"</string>
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_message (6906352501525496328) -->
+    <skip />
+    <!-- no translation found for settings_disk_resize_resize_confirm_dialog_confirm (7347432999245803583) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_title (4911743992816071205) -->
+    <skip />
     <string name="settings_port_forwarding_sub_title" msgid="6848040752531535488">"Lungiselela ukudlulisela ngembobo"</string>
-    <string name="settings_port_forwarding_notification_title" msgid="2822798067500254704">"Itheminali izama ukuvula imbobo entsha"</string>
-    <string name="settings_port_forwarding_notification_content" msgid="2167103177775323330">"Imbobo icelwe ukuba ivulwe: <xliff:g id="PORT_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for settings_port_forwarding_notification_title (6950621555592547524) -->
+    <skip />
+    <!-- no translation found for settings_port_forwarding_notification_content (5072621159244211971) -->
+    <skip />
     <string name="settings_port_forwarding_notification_accept" msgid="3571520986524038185">"Yamukela"</string>
     <string name="settings_port_forwarding_notification_deny" msgid="636848749634710403">"Yenqaba"</string>
     <string name="settings_recovery_title" msgid="6586840079226383285">"Ukuthola"</string>
-    <string name="settings_recovery_sub_title" msgid="1067782421529340576">"Okukhethwa kukho kokubuyisela ukwahlukanisa"</string>
-    <string name="settings_recovery_reset_title" msgid="8785305518694186025">"Shintshela Ohlotsheni lokuqala"</string>
-    <string name="settings_recovery_reset_sub_title" msgid="5656572074090728544">"Susa konke"</string>
-    <!-- no translation found for settings_recovery_reset_dialog_title (874946981716251094) -->
+    <!-- no translation found for settings_recovery_sub_title (3906996270508262595) -->
     <skip />
-    <!-- no translation found for settings_recovery_reset_dialog_message (6392681199895696206) -->
+    <!-- no translation found for settings_recovery_reset_title (5388842560910568731) -->
     <skip />
-    <string name="settings_recovery_reset_dialog_confirm" msgid="431718610013947861">"Qinisekisa"</string>
+    <!-- no translation found for settings_recovery_reset_sub_title (1079896907344675995) -->
+    <skip />
+    <string name="settings_recovery_reset_dialog_title" msgid="874946981716251094">"Setha kabusha itheminali"</string>
+    <!-- no translation found for settings_recovery_reset_dialog_message (851530339815113000) -->
+    <skip />
+    <!-- no translation found for settings_recovery_reset_dialog_confirm (6916237820754131902) -->
+    <skip />
     <string name="settings_recovery_reset_dialog_cancel" msgid="1666264288208459725">"Khansela"</string>
+    <string name="settings_recovery_reset_dialog_backup_option" msgid="2079431035205584614">"Yenza ikhophi yedatha ku-<xliff:g id="PATH">/mnt/backup</xliff:g>"</string>
+    <!-- no translation found for settings_recovery_error_due_to_backup (9034741074141274096) -->
+    <skip />
+    <string name="settings_recovery_error" msgid="2451912941535666379">"Ukuthola kwehlulekile"</string>
+    <!-- no translation found for settings_recovery_error_during_removing_backup (2447990797766248691) -->
+    <skip />
+    <string name="settings_recovery_remove_backup_title" msgid="1540850288876158899">"Susa idatha eyisipele"</string>
+    <!-- no translation found for settings_recovery_remove_backup_sub_title (7791375988320242059) -->
+    <skip />
+    <!-- no translation found for error_title (405150657301906598) -->
+    <skip />
+    <!-- no translation found for error_desc (1984714179775053347) -->
+    <skip />
+    <string name="error_code" msgid="3585291676855383649">"Ikhodi yephutha: <xliff:g id="ERROR_CODE">%s</xliff:g>"</string>
     <string name="service_notification_settings" msgid="1437365721184401135">"Amasethingi"</string>
     <string name="service_notification_title" msgid="2918088850910713393">"Itheminali iyasebenza"</string>
-    <!-- no translation found for service_notification_content (3579923802797824545) -->
+    <!-- no translation found for service_notification_content (5772901142342308273) -->
     <skip />
     <string name="service_notification_quit_action" msgid="4888327875869277455">"Vala"</string>
+    <!-- no translation found for virgl_enabled (5242525588039698086) -->
+    <skip />
 </resources>
diff --git a/android/TerminalApp/res/values/config.xml b/android/TerminalApp/res/values/config.xml
index 9d2456c..713e1a5 100644
--- a/android/TerminalApp/res/values/config.xml
+++ b/android/TerminalApp/res/values/config.xml
@@ -17,7 +17,6 @@
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="preference_file_key" translatable="false">com.android.virtualization.terminal.PREFERENCE_FILE_KEY</string>
     <string name="preference_disk_size_key" translatable="false">PREFERENCE_DISK_SIZE_KEY</string>
-    <string name="preference_min_disk_size_key" translatable="false">PREFERENCE_MIN_DISK_SIZE_KEY</string>
-    <string name="preference_forwarding_ports" translatable="false">PREFERENCE_FORWARDING_PORTS</string>
-    <string name="preference_forwarding_port_is_enabled" translatable="false">PREFERENCE_FORWARDING_PORT_IS_ENABLED_</string>
-</resources>
\ No newline at end of file
+
+    <bool name="terminal_portrait_only">true</bool>
+</resources>
diff --git a/android/TerminalApp/res/values/keyboard_btn_strings.xml b/android/TerminalApp/res/values/keyboard_btn_strings.xml
new file mode 100644
index 0000000..384c583
--- /dev/null
+++ b/android/TerminalApp/res/values/keyboard_btn_strings.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="btn_esc_text" translatable="false">Esc</string>
+    <string name="btn_tab_text" translatable="false">Tab</string>
+    <string name="btn_home_text" translatable="false">Home</string>
+    <string name="btn_up_text" translatable="false">↑</string>
+    <string name="btn_end_text" translatable="false">End</string>
+    <string name="btn_pgup_text" translatable="false">PgUp</string>
+    <string name="btn_ctrl_text" translatable="false">Ctrl</string>
+    <string name="btn_alt_text" translatable="false">Alt</string>
+    <string name="btn_left_text" translatable="false">←</string>
+    <string name="btn_down_text" translatable="false">↓</string>
+    <string name="btn_right_text" translatable="false">→</string>
+    <string name="btn_pgdn_text" translatable="false">PgDn</string>
+</resources>
diff --git a/android/TerminalApp/res/values/strings.xml b/android/TerminalApp/res/values/strings.xml
index 68551a0..884e5f0 100644
--- a/android/TerminalApp/res/values/strings.xml
+++ b/android/TerminalApp/res/values/strings.xml
@@ -20,35 +20,37 @@
     <!-- Application name of this terminal app shown in the launcher. This app provides computer terminal to connect to virtual machine. [CHAR LIMIT=16] -->
     <string name="app_name">Terminal</string>
 
-    <!-- Description of the entire terminal display showing texts. This is read by talkback. -->
+    <!-- Description of the entire terminal display showing texts. This is read by talkback. [CHAR LIMIT=none] -->
     <string name="terminal_display">Terminal display</string>
-    <!-- Description of the edit box accepting user input. This is read by talkback. -->
+    <!-- Description of the edit box accepting user input. This is read by talkback. [CHAR LIMIT=none] -->
     <string name="terminal_input">Cursor</string>
-    <!-- Description of an empty line in the terminal. This is read by talkback. -->
+    <!-- Description of an empty line in the terminal. This is read by talkback. [CHAR LIMIT=none] -->
     <string name="empty_line">Empty line</string>
+    <!-- Description of the hint supported by the terminal UI elements. This is read by talkback. [CHAR LIMIT=none] -->
+    <string name="double_tap_to_edit_text">Double-tap to go to cursor</string>
 
     <!-- Installer activity title [CHAR LIMIT=none] -->
     <string name="installer_title_text">Install Linux terminal</string>
     <!-- Installer activity description format [CHAR LIMIT=none] -->
-    <string name="installer_desc_text_format">To launch Linux terminal, you need to download roughly <xliff:g id="expected_size" example="350GB">%1$s</xliff:g> of data over network.\nWould you proceed?</string>
+    <string name="installer_desc_text_format">To launch Linux terminal, you need to download roughly <xliff:g id="expected_size" example="350GB">%1$s</xliff:g> of data over the network.\nWould you like to proceed?</string>
     <!-- Checkbox at the installer activity to download when Wi-Fi is available to prevent from paying network traffic [CHAR LIMIT=none] -->
-    <string name="installer_wait_for_wifi_checkbox_text">Download when Wi-Fi is available</string>
+    <string name="installer_wait_for_wifi_checkbox_text">Download using Wi-Fi only</string>
     <!-- Button at the installer activity to confirm installation [CHAR LIMIT=16] -->
     <string name="installer_install_button_enabled_text">Install</string>
     <!-- Button at the installer activity to when installation is already in progress [CHAR LIMIT=16] -->
     <string name="installer_install_button_disabled_text">Installing</string>
     <!-- Toast message at installer activity when network doesn't meet[CHAR LIMIT=none] -->
-    <string name="installer_install_network_error_message">Network error. Check connection and retry.</string>
+    <string name="installer_install_network_error_message">Failed to install due to a network error. Check your connection and try again.</string>
     <!-- Notification title for installer [CHAR LIMIT=64] -->
     <string name="installer_notif_title_text">Installing Linux terminal</string>
     <!-- Notification description for installer [CHAR LIMIT=none] -->
-    <string name="installer_notif_desc_text">Linux terminal will be started after finish</string>
+    <string name="installer_notif_desc_text">Linux terminal will start after the installation is finished</string>
     <!-- Toast error message for install failure due to the network issue [CHAR LIMIT=none] -->
-    <string name="installer_error_network">Failed to install due to the network issue</string>
+    <string name="installer_error_network">Failed to install due to a network issue</string>
     <!-- Toast error message for install failure because Wi-Fi isn't available although required [CHAR LIMIT=none] -->
-    <string name="installer_error_no_wifi">Failed to install because Wi-Fi isn\'t available</string>
+    <string name="installer_error_no_wifi">Failed to install because Wi-Fi is not available</string>
     <!-- Toast error message for install failure due to the unidentified issue [CHAR LIMIT=none] -->
-    <string name="installer_error_unknown">Failed to install. Try again.</string>
+    <string name="installer_error_unknown">Failed to install. Please try again</string>
 
     <!-- Action bar icon name for the settings view CHAR LIMIT=none] -->
     <string name="action_settings">Settings</string>
@@ -61,9 +63,9 @@
     <string name="vm_error_message">Terminal crashed</string>
 
     <!-- Settings memu title for resizing disk of the virtual machine. [CHAR LIMIT=none] -->
-    <string name="settings_disk_resize_title">Disk Resize</string>
+    <string name="settings_disk_resize_title">Disk resize</string>
     <!-- Settings memu subtitle for resizing disk of the virtual machine. [CHAR LIMIT=none] -->
-    <string name="settings_disk_resize_sub_title">Resize / Rootfs</string>
+    <string name="settings_disk_resize_sub_title">Resize the root partition size</string>
     <!-- Toast message after new disk size is set. [CHAR LIMIT=none] -->
     <string name="settings_disk_resize_resize_message">Disk size set</string>
     <!-- Settings menu option description format of the current disk size. [CHAR LIMIT=none] -->
@@ -72,55 +74,73 @@
     <string name="settings_disk_resize_resize_gb_max_format"><xliff:g id="max_size" example="256GB">%1$s</xliff:g> max</string>
     <!-- Settings menu button to cancel disk resize. [CHAR LIMIT=16] -->
     <string name="settings_disk_resize_resize_cancel">Cancel</string>
-    <!-- Settings menu button to apply change that requires to restart Terminal app. [CHAR LIMIT=20] -->
-    <string name="settings_disk_resize_resize_restart_vm_to_apply">Restart to apply</string>
+    <!-- Settings menu button to apply change Terminal app. This will launch a confirmation dialog [CHAR LIMIT=16] -->
+    <string name="settings_disk_resize_resize_restart_vm_to_apply">Apply</string>
+    <!-- Dialog description for applying disk resize Terminal app, which requires to restart the terminal [CHAR LIMIT=none] -->
+    <string name="settings_disk_resize_resize_confirm_dialog_message">Terminal will be restarted to resize disk</string>
+    <!-- Dialog confirmation button for restarting the terminal [CHAR LIMIT=16] -->
+    <string name="settings_disk_resize_resize_confirm_dialog_confirm">Confirm</string>
 
-    <!-- Settings menu title for 'port forwarding' [CHAR LIMIT=none] -->
-    <string name="settings_port_forwarding_title">Port Forwarding</string>
-    <!-- Settings menu subtitle for 'port forwarding' [CHAR LIMIT=none] -->
-    <string name="settings_port_forwarding_sub_title">Configure port forwarding</string>
-    <!-- Notification title for new port forwarding [CHAR LIMIT=none] -->
-    <string name="settings_port_forwarding_notification_title">Terminal is trying to open a new port</string>
-    <!-- Notification content for new port forwarding [CHAR LIMIT=none] -->
-    <string name="settings_port_forwarding_notification_content">Port requested to be open: <xliff:g id="port_number" example="8080">%d</xliff:g></string>
-    <!-- Notification action accept [CHAR LIMIT=none] -->
+    <!-- Settings menu title for port forwarding [CHAR LIMIT=none] -->
+    <string name="settings_port_forwarding_title">Port control</string>
+    <!-- Settings menu subtitle for port forwarding [CHAR LIMIT=none] -->
+    <string name="settings_port_forwarding_sub_title">Allow/deny listening ports</string>
+    <!-- Title for active ports setting in port forwarding [CHAR LIMIT=none] -->
+    <string name="settings_port_forwarding_active_ports_title">Listening ports</string>
+    <!-- Title for other enabled ports setting in port forwarding [CHAR LIMIT=none] -->
+    <string name="settings_port_forwarding_other_enabled_ports_title">Saved allowed ports</string>
+
+    <!-- Dialog title for enabling a new port [CHAR LIMIT=none] -->
+    <string name="settings_port_forwarding_dialog_title">Allow a new port</string>
+    <!-- Dialog hint for enabling a new port [CHAR LIMIT=none] -->
+    <string name="settings_port_forwarding_dialog_textview_hint">Enter a new port number</string>
+    <!-- Dialog save action for enabling a new port [CHAR LIMIT=16] -->
+    <string name="settings_port_forwarding_dialog_save">Save</string>
+    <!-- Dialog cancel action for enabling a new port [CHAR LIMIT=16] -->
+    <string name="settings_port_forwarding_dialog_cancel">Cancel</string>
+
+    <!-- Notification title for a new active port [CHAR LIMIT=none] -->
+    <string name="settings_port_forwarding_notification_title">Terminal is requesting to open a new port</string>
+    <!-- Notification content for a new active port [CHAR LIMIT=none] -->
+    <string name="settings_port_forwarding_notification_content">Port requested: <xliff:g id="port_number" example="8080">%d</xliff:g></string>
+    <!-- Notification action accept [CHAR LIMIT=16] -->
     <string name="settings_port_forwarding_notification_accept">Accept</string>
-    <!-- Notification action deny [CHAR LIMIT=none] -->
+    <!-- Notification action deny [CHAR LIMIT=16] -->
     <string name="settings_port_forwarding_notification_deny">Deny</string>
 
     <!-- Settings menu title for recoverying image [CHAR LIMIT=none] -->
     <string name="settings_recovery_title">Recovery</string>
     <!-- Settings menu subtitle for recoverying image [CHAR LIMIT=none] -->
-    <string name="settings_recovery_sub_title">Partition Recovery options</string>
+    <string name="settings_recovery_sub_title">Partition recovery options</string>
     <!-- Settings menu title for resetting the terminal [CHAR LIMIT=none] -->
-    <string name="settings_recovery_reset_title">Change to Initial version</string>
+    <string name="settings_recovery_reset_title">Reset to initial version</string>
     <!-- Settings menu subtitle for resetting the terminal [CHAR LIMIT=none] -->
-    <string name="settings_recovery_reset_sub_title">Remove all</string>
+    <string name="settings_recovery_reset_sub_title">Remove all data</string>
     <!-- Dialog title for resetting the terminal [CHAR LIMIT=none] -->
     <string name="settings_recovery_reset_dialog_title">Reset terminal</string>
     <!-- Dialog message for resetting the terminal [CHAR LIMIT=none] -->
-    <string name="settings_recovery_reset_dialog_message">Data will be deleted</string>
+    <string name="settings_recovery_reset_dialog_message">Data will be removed</string>
     <!-- Dialog button confirm for resetting the terminal [CHAR LIMIT=16] -->
-    <string name="settings_recovery_reset_dialog_confirm">Confirm</string>
+    <string name="settings_recovery_reset_dialog_confirm">Reset</string>
     <!-- Dialog button cancel for resetting the terminal [CHAR LIMIT=16] -->
     <string name="settings_recovery_reset_dialog_cancel">Cancel</string>
     <!-- Dialog option to back up previous image(/mnt/backup is the path which is supposed not to be translated) [CHAR LIMIT=none] -->
     <string name="settings_recovery_reset_dialog_backup_option">Back up data to <xliff:g id="path" example="/mnt/backup">/mnt/backup</xliff:g></string>
     <!-- Snankbar to indicate recovery error due to backup [CHAR LIMIT=none] -->
-    <string name="settings_recovery_error_due_to_backup">Recovery failed because backup failed</string>
+    <string name="settings_recovery_error_due_to_backup">Failed to recover due to a backup error</string>
     <!-- Snankbar to indicate recovery error [CHAR LIMIT=none] -->
     <string name="settings_recovery_error">Recovery failed</string>
     <!-- Snankbar to indicate recovery error during removing backup [CHAR LIMIT=none] -->
-    <string name="settings_recovery_error_during_removing_backup">Cannot remove backup file</string>
+    <string name="settings_recovery_error_during_removing_backup">Failed to remove backup data</string>
     <!-- Settings menu title for removing backup data [CHAR LIMIT=none] -->
     <string name="settings_recovery_remove_backup_title">Remove backup data</string>
     <!-- Settings menu sub title for removing backup data(/mnt/backup is the path which is supposed not to be translated) [CHAR LIMIT=none] -->
-    <string name="settings_recovery_remove_backup_sub_title">Clean up <xliff:g id="path" example="/mnt/backup">/mnt/backup</xliff:g></string>
+    <string name="settings_recovery_remove_backup_sub_title">Remove <xliff:g id="path" example="/mnt/backup">/mnt/backup</xliff:g></string>
 
     <!-- Error page that shows error page [CHAR LIMIT=none] -->
-    <string name="error_title">Unrecoverable Error</string>
+    <string name="error_title">Unrecoverable error</string>
     <!-- Error page that shows error page [CHAR LIMIT=none] -->
-    <string name="error_desc">Failed to recover from an error.\nYou can try restart the app, or try one of recovery option.</string>
+    <string name="error_desc">Failed to recover from an error.\nYou can try restarting terminal or try one of the recovery options.</string>
     <!-- Error page that shows detailed error code (error reason) for bugreport. [CHAR LIMIT=none] -->
     <string name="error_code">Error code: <xliff:g id="error_code" example="ACCESS_DENIED">%s</xliff:g></string>
 
@@ -129,7 +149,10 @@
     <!-- Notification title for foreground service notification [CHAR LIMIT=none] -->
     <string name="service_notification_title">Terminal is running</string>
     <!-- Notification content for foreground service notification [CHAR LIMIT=none] -->
-    <string name="service_notification_content">Click to open the terminal</string>
+    <string name="service_notification_content">Click to open terminal</string>
     <!-- Notification action button for closing the virtual machine [CHAR LIMIT=20] -->
     <string name="service_notification_quit_action">Close</string>
+
+    <!-- This string is for toast message to notify that VirGL is enabled. [CHAR LIMIT=40] -->
+    <string name="virgl_enabled"><xliff:g>VirGL</xliff:g> is enabled</string>
 </resources>
diff --git a/android/TerminalApp/res/values/styles.xml b/android/TerminalApp/res/values/styles.xml
new file mode 100644
index 0000000..3fb8e7d
--- /dev/null
+++ b/android/TerminalApp/res/values/styles.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 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.
+-->
+<resources xmlns:tools="http://schemas.android.com/tools">
+    <style name="ModifierKeyStyle" parent="@style/Widget.Material3.Button.TextButton">
+        <item name="android:textAppearance">?android:attr/textAppearanceSmall</item>
+        <item name="android:textColor">?android:attr/textColorPrimary</item>
+        <item name="android:layout_weight">1</item>
+        <item name="android:layout_width">0dp</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:paddingHorizontal">0dp</item>
+        <item name="android:hapticFeedbackEnabled">true</item>
+    </style>
+    <style name="VmTerminalAppTheme" parent="@style/Theme.Material3.DayNight.NoActionBar">
+        <item name="android:windowLightStatusBar" tools:targetApi="m">?android:attr/isLightTheme</item>
+    </style>
+</resources>
diff --git a/android/TerminalApp/res/xml/main_split_config.xml b/android/TerminalApp/res/xml/main_split_config.xml
index c2da907..437e75a 100644
--- a/android/TerminalApp/res/xml/main_split_config.xml
+++ b/android/TerminalApp/res/xml/main_split_config.xml
@@ -45,7 +45,7 @@
         window:splitLayoutDirection="locale"
         window:splitMaxAspectRatioInPortrait="alwaysAllow"
         window:splitMinWidthDp="@integer/split_min_width"
-        window:splitRatio="@dimen/activity_split_ratio">
+        window:splitRatio="@dimen/activity_split_ratio"
         window:stickyPlaceholder="false">
         <ActivityFilter
             window:activityName="com.android.virtualization.terminal.SettingsActivity"/>
diff --git a/android/compos_verify/verify.rs b/android/compos_verify/verify.rs
index a3f18d5..b94ebbc 100644
--- a/android/compos_verify/verify.rs
+++ b/android/compos_verify/verify.rs
@@ -124,6 +124,7 @@
         &idsig_manifest_ext_apk,
         &VmParameters {
             name: String::from("ComposVerify"),
+            os: String::from("microdroid"),
             cpu_topology: VmCpuTopology::OneCpu, // This VM runs very little work at boot
             debug_mode: args.debug,
             ..Default::default()
diff --git a/android/composd/aidl/android/system/composd/IIsolatedCompilationService.aidl b/android/composd/aidl/android/system/composd/IIsolatedCompilationService.aidl
index dde75e1..3748899 100644
--- a/android/composd/aidl/android/system/composd/IIsolatedCompilationService.aidl
+++ b/android/composd/aidl/android/system/composd/IIsolatedCompilationService.aidl
@@ -48,5 +48,6 @@
      * callback, unless the returned ICompilationTask is cancelled. The caller should maintain
      * a reference to the ICompilationTask until compilation completes or is cancelled.
      */
-    ICompilationTask startTestCompile(ApexSource apexSource, ICompilationTaskCallback callback);
+    ICompilationTask startTestCompile(
+            ApexSource apexSource, ICompilationTaskCallback callback, String os);
 }
diff --git a/android/composd/src/instance_manager.rs b/android/composd/src/instance_manager.rs
index 9e94035..d1b0b99 100644
--- a/android/composd/src/instance_manager.rs
+++ b/android/composd/src/instance_manager.rs
@@ -46,11 +46,12 @@
         self.start_instance(CURRENT_INSTANCE_DIR, vm_parameters)
     }
 
-    pub fn start_test_instance(&self, prefer_staged: bool) -> Result<CompOsInstance> {
+    pub fn start_test_instance(&self, prefer_staged: bool, os: &str) -> Result<CompOsInstance> {
         let mut vm_parameters = new_vm_parameters()?;
         vm_parameters.name = String::from("ComposdTest");
         vm_parameters.debug_mode = true;
         vm_parameters.prefer_staged = prefer_staged;
+        vm_parameters.os = os.to_owned();
         self.start_instance(TEST_INSTANCE_DIR, vm_parameters)
     }
 
@@ -83,7 +84,8 @@
     // number of dex2oat threads.
     let cpu_topology = VmCpuTopology::MatchHost;
     let memory_mib = Some(compos_memory_mib()?);
-    Ok(VmParameters { cpu_topology, memory_mib, ..Default::default() })
+    let os = "microdroid".to_owned();
+    Ok(VmParameters { cpu_topology, memory_mib, os, ..Default::default() })
 }
 
 fn compos_memory_mib() -> Result<i32> {
diff --git a/android/composd/src/service.rs b/android/composd/src/service.rs
index 49cfd3a..3cc40af 100644
--- a/android/composd/src/service.rs
+++ b/android/composd/src/service.rs
@@ -60,6 +60,7 @@
         &self,
         apex_source: ApexSource,
         callback: &Strong<dyn ICompilationTaskCallback>,
+        os: &str,
     ) -> binder::Result<Strong<dyn ICompilationTask>> {
         check_permissions()?;
         let prefer_staged = match apex_source {
@@ -67,7 +68,7 @@
             ApexSource::PreferStaged => true,
             _ => unreachable!("Invalid ApexSource {:?}", apex_source),
         };
-        to_binder_result(self.do_start_test_compile(prefer_staged, callback))
+        to_binder_result(self.do_start_test_compile(prefer_staged, callback, os))
     }
 }
 
@@ -93,9 +94,12 @@
         &self,
         prefer_staged: bool,
         callback: &Strong<dyn ICompilationTaskCallback>,
+        os: &str,
     ) -> Result<Strong<dyn ICompilationTask>> {
-        let comp_os =
-            self.instance_manager.start_test_instance(prefer_staged).context("Starting CompOS")?;
+        let comp_os = self
+            .instance_manager
+            .start_test_instance(prefer_staged, os)
+            .context("Starting CompOS")?;
 
         let target_dir_name = TEST_ARTIFACTS_SUBDIR.to_owned();
         let task = OdrefreshTask::start(
diff --git a/android/composd_cmd/composd_cmd.rs b/android/composd_cmd/composd_cmd.rs
index 6d096a1..6281bd0 100644
--- a/android/composd_cmd/composd_cmd.rs
+++ b/android/composd_cmd/composd_cmd.rs
@@ -46,6 +46,10 @@
         /// If any APEX is staged, prefer the staged version.
         #[clap(long)]
         prefer_staged: bool,
+
+        /// OS for the VM.
+        #[clap(long, default_value = "microdroid")]
+        os: String,
     },
 }
 
@@ -56,7 +60,7 @@
 
     match action {
         Actions::StagedApexCompile {} => run_staged_apex_compile()?,
-        Actions::TestCompile { prefer_staged } => run_test_compile(prefer_staged)?,
+        Actions::TestCompile { prefer_staged, os } => run_test_compile(prefer_staged, &os)?,
     }
 
     println!("All Ok!");
@@ -116,9 +120,9 @@
     run_async_compilation(|service, callback| service.startStagedApexCompile(callback))
 }
 
-fn run_test_compile(prefer_staged: bool) -> Result<()> {
+fn run_test_compile(prefer_staged: bool, os: &str) -> Result<()> {
     let apex_source = if prefer_staged { ApexSource::PreferStaged } else { ApexSource::NoStaged };
-    run_async_compilation(|service, callback| service.startTestCompile(apex_source, callback))
+    run_async_compilation(|service, callback| service.startTestCompile(apex_source, callback, os))
 }
 
 fn run_async_compilation<F>(start_compile_fn: F) -> Result<()>
diff --git a/android/forwarder_host/src/forwarder_host.rs b/android/forwarder_host/src/forwarder_host.rs
index 2138957..ba427f5 100644
--- a/android/forwarder_host/src/forwarder_host.rs
+++ b/android/forwarder_host/src/forwarder_host.rs
@@ -384,6 +384,10 @@
     cid: jint,
     callback: JObject,
 ) {
+    // Clear shutdown event FD before running forwarder host.
+    SHUTDOWN_EVT.write(1).expect("Failed to write shutdown event FD");
+    SHUTDOWN_EVT.read().expect("Failed to consume shutdown event FD");
+
     match run_forwarder_host(cid, env, callback) {
         Ok(_) => {
             info!("forwarder_host is terminated");
diff --git a/android/virtmgr/src/aidl.rs b/android/virtmgr/src/aidl.rs
index ccfcc2e..0f81f3d 100644
--- a/android/virtmgr/src/aidl.rs
+++ b/android/virtmgr/src/aidl.rs
@@ -446,20 +446,25 @@
         let context = EarlyVmContext::new(cid, temp_dir.clone())
             .context(format!("Can't create early vm contexts for {cid}"))
             .or_service_specific_exception(-1)?;
-        let service = VirtualMachineService::new_binder(self.state.clone(), cid).as_binder();
 
-        // Start VM service listening for connections from the new CID on port=CID.
-        let port = cid;
-        let (vm_server, _) = RpcServer::new_vsock(service, cid, port)
-            .context(format!("Could not start RpcServer on port {port}"))
-            .or_service_specific_exception(-1)?;
-        vm_server.start();
-        Ok((VmContext::new(Strong::new(Box::new(context)), vm_server), cid, temp_dir))
+        if requires_vm_service(config) {
+            // Start VM service listening for connections from the new CID on port=CID.
+            let service = VirtualMachineService::new_binder(self.state.clone(), cid).as_binder();
+            let port = cid;
+            let (vm_server, _) = RpcServer::new_vsock(service, cid, port)
+                .context(format!("Could not start RpcServer on port {port}"))
+                .or_service_specific_exception(-1)?;
+            vm_server.start();
+            Ok((VmContext::new(Strong::new(Box::new(context)), Some(vm_server)), cid, temp_dir))
+        } else {
+            Ok((VmContext::new(Strong::new(Box::new(context)), None), cid, temp_dir))
+        }
     }
 
     fn create_vm_context(
         &self,
         requester_debug_pid: pid_t,
+        config: &VirtualMachineConfig,
     ) -> binder::Result<(VmContext, Cid, PathBuf)> {
         const NUM_ATTEMPTS: usize = 5;
 
@@ -467,6 +472,12 @@
             let vm_context = GLOBAL_SERVICE.allocateGlobalVmContext(requester_debug_pid)?;
             let cid = vm_context.getCid()? as Cid;
             let temp_dir: PathBuf = vm_context.getTemporaryDirectory()?.into();
+
+            // We don't need to start the VM service for custom VMs.
+            if !requires_vm_service(config) {
+                return Ok((VmContext::new(vm_context, None), cid, temp_dir));
+            }
+
             let service = VirtualMachineService::new_binder(self.state.clone(), cid).as_binder();
 
             // Start VM service listening for connections from the new CID on port=CID.
@@ -474,7 +485,7 @@
             match RpcServer::new_vsock(service, cid, port) {
                 Ok((vm_server, _)) => {
                     vm_server.start();
-                    return Ok((VmContext::new(vm_context, vm_server), cid, temp_dir));
+                    return Ok((VmContext::new(vm_context, Some(vm_server)), cid, temp_dir));
                 }
                 Err(err) => {
                     warn!("Could not start RpcServer on port {}: {}", port, err);
@@ -510,7 +521,7 @@
         let (vm_context, cid, temporary_directory) = if cfg!(early) {
             self.create_early_vm_context(config)?
         } else {
-            self.create_vm_context(requester_debug_pid)?
+            self.create_vm_context(requester_debug_pid, config)?
         };
 
         if is_custom_config(config) {
@@ -574,41 +585,42 @@
                 .or_binder_exception(ExceptionCode::SECURITY)?;
         }
 
-        // Check if partition images are labeled incorrectly. This is to prevent random images
-        // which are not protected by the Android Verified Boot (e.g. bits downloaded by apps) from
-        // being loaded in a pVM. This applies to everything but the instance image in the raw
-        // config, and everything but the non-executable, generated partitions in the app
-        // config.
-        config
-            .disks
-            .iter()
-            .flat_map(|disk| disk.partitions.iter())
-            .filter(|partition| {
-                if is_app_config {
-                    !is_safe_app_partition(&partition.label)
-                } else {
-                    !is_safe_raw_partition(&partition.label)
-                }
-            })
-            .try_for_each(check_label_for_partition)
-            .or_service_specific_exception(-1)?;
+        let kernel = maybe_clone_file(&config.kernel)?;
+        let initrd = maybe_clone_file(&config.initrd)?;
+
+        if config.protectedVm {
+            // Fail fast with a meaningful error message in case device doesn't support pVMs.
+            check_protected_vm_is_supported()?;
+
+            // In a protected VM, we require custom kernels to come from a trusted source
+            // (b/237054515).
+            check_label_for_kernel_files(&kernel, &initrd).or_service_specific_exception(-1)?;
+
+            // Check if partition images are labeled incorrectly. This is to prevent random images
+            // which are not protected by the Android Verified Boot (e.g. bits downloaded by apps)
+            // from being loaded in a pVM. This applies to everything but the instance image in the
+            // raw config, and everything but the non-executable, generated partitions in the app
+            // config.
+            config
+                .disks
+                .iter()
+                .flat_map(|disk| disk.partitions.iter())
+                .filter(|partition| {
+                    if is_app_config {
+                        !is_safe_app_partition(&partition.label)
+                    } else {
+                        !is_safe_raw_partition(&partition.label)
+                    }
+                })
+                .try_for_each(check_label_for_partition)
+                .or_service_specific_exception(-1)?;
+        }
 
         // Check if files for payloads and bases are NOT coming from /vendor and /odm, as they may
         // have unstable interfaces.
         // TODO(b/316431494): remove once Treble interfaces are stabilized.
         check_partitions_for_files(config).or_service_specific_exception(-1)?;
 
-        let kernel = maybe_clone_file(&config.kernel)?;
-        let initrd = maybe_clone_file(&config.initrd)?;
-
-        if config.protectedVm {
-            // In a protected VM, we require custom kernels to come from a trusted source
-            // (b/237054515).
-            check_label_for_kernel_files(&kernel, &initrd).or_service_specific_exception(-1)?;
-            // Fail fast with a meaningful error message in case device doesn't support pVMs.
-            check_protected_vm_is_supported()?;
-        }
-
         let zero_filler_path = temporary_directory.join("zero.img");
         write_zero_filler(&zero_filler_path)
             .context("Failed to make composite image")
@@ -820,6 +832,17 @@
     }
 }
 
+/// Returns whether a VM config requires VirtualMachineService running on the host. Only Microdroid
+/// VM (i.e. AppConfig) requires it. However, a few Microdroid tests use RawConfig for Microdroid
+/// VM. To handle the exceptional case, we use name as a second criteria; if the name is
+/// "microdroid" we run VirtualMachineService
+fn requires_vm_service(config: &VirtualMachineConfig) -> bool {
+    match config {
+        VirtualMachineConfig::AppConfig(_) => true,
+        VirtualMachineConfig::RawConfig(config) => config.name == "microdroid",
+    }
+}
+
 fn extract_vendor_hashtree_digest(config: &VirtualMachineConfig) -> Result<Option<Vec<u8>>> {
     let VirtualMachineConfig::AppConfig(config) = config else {
         return Ok(None);
@@ -1013,7 +1036,12 @@
                 guest_gid: path.guestGid,
                 mask: path.mask,
                 tag: path.tag.clone(),
-                socket_path: temporary_directory.join(&path.socket).to_string_lossy().to_string(),
+                socket_path: temporary_directory
+                    .join(&path.socketPath)
+                    .to_string_lossy()
+                    .to_string(),
+                socket_fd: maybe_clone_file(&path.socketFd)?,
+                app_domain: path.appDomain,
             })
         })
         .collect()
diff --git a/android/virtmgr/src/crosvm.rs b/android/virtmgr/src/crosvm.rs
index b0944fc..a385b82 100644
--- a/android/virtmgr/src/crosvm.rs
+++ b/android/virtmgr/src/crosvm.rs
@@ -235,6 +235,8 @@
     pub mask: i32,
     pub tag: String,
     pub socket_path: String,
+    pub socket_fd: Option<File>,
+    pub app_domain: bool,
 }
 
 /// virtio-input device configuration from `external/crosvm/src/crosvm/config.rs`
@@ -360,12 +362,15 @@
     #[allow(dead_code)] // Keeps the global context alive
     pub(crate) global_context: Strong<dyn IGlobalVmContext>,
     #[allow(dead_code)] // Keeps the server alive
-    vm_server: RpcServer,
+    vm_server: Option<RpcServer>,
 }
 
 impl VmContext {
     /// Construct new VmContext.
-    pub fn new(global_context: Strong<dyn IGlobalVmContext>, vm_server: RpcServer) -> VmContext {
+    pub fn new(
+        global_context: Strong<dyn IGlobalVmContext>,
+        vm_server: Option<RpcServer>,
+    ) -> VmContext {
         VmContext { global_context, vm_server }
     }
 }
@@ -655,7 +660,9 @@
 
         // Now that the VM has been killed, shut down the VirtualMachineService
         // server to eagerly free up the server threads.
-        self.vm_context.vm_server.shutdown()?;
+        if let Some(vm_server) = &self.vm_context.vm_server {
+            vm_server.shutdown()?;
+        }
 
         Ok(())
     }
@@ -907,6 +914,9 @@
 
 fn run_virtiofs(config: &CrosvmConfig) -> io::Result<()> {
     for shared_path in &config.shared_paths {
+        if shared_path.app_domain {
+            continue;
+        }
         let ugid_map_value = format!(
             "{} {} {} {} {} /",
             shared_path.guest_uid,
@@ -1022,6 +1032,13 @@
         command.arg("--params").arg("console=hvc0");
     }
 
+    // Move the PCI MMIO regions to near the end of the low-MMIO space.
+    // This is done to accommodate a limitation in a partner's hypervisor.
+    #[cfg(target_arch = "aarch64")]
+    command
+        .arg("--pci")
+        .arg("mem=[start=0x70000000,size=0x2000000],cam=[start=0x72000000,size=0x1000000]");
+
     command.arg("--mem").arg(memory_mib.to_string());
 
     if let Some(cpus) = config.cpus {
@@ -1255,12 +1272,23 @@
     }
 
     for shared_path in &config.shared_paths {
-        if let Err(e) = wait_for_file(&shared_path.socket_path, 5) {
-            bail!("Error waiting for file: {}", e);
+        if shared_path.app_domain {
+            if let Some(socket_fd) = &shared_path.socket_fd {
+                let socket_path =
+                    add_preserved_fd(&mut preserved_fds, socket_fd.try_clone().unwrap());
+                let raw_fd: i32 = socket_path.rsplit_once('/').unwrap().1.parse().unwrap();
+                command
+                    .arg("--vhost-user-fs")
+                    .arg(format!("tag={},socket-fd={}", &shared_path.tag, raw_fd));
+            }
+        } else {
+            if let Err(e) = wait_for_file(&shared_path.socket_path, 5) {
+                bail!("Error waiting for file: {}", e);
+            }
+            command
+                .arg("--vhost-user-fs")
+                .arg(format!("{},tag={}", &shared_path.socket_path, &shared_path.tag));
         }
-        command
-            .arg("--vhost-user-fs")
-            .arg(format!("{},tag={}", &shared_path.socket_path, &shared_path.tag));
     }
 
     debug!("Preserving FDs {:?}", preserved_fds);
diff --git a/android/virtualizationservice/aidl/android/system/virtualizationservice/SharedPath.aidl b/android/virtualizationservice/aidl/android/system/virtualizationservice/SharedPath.aidl
index 7be7a5f..71ec02c 100644
--- a/android/virtualizationservice/aidl/android/system/virtualizationservice/SharedPath.aidl
+++ b/android/virtualizationservice/aidl/android/system/virtualizationservice/SharedPath.aidl
@@ -39,5 +39,11 @@
     String tag;
 
     /** socket name for vhost-user-fs */
-    String socket;
+    String socketPath;
+
+    /** socket fd for crosvm to connect */
+    @nullable ParcelFileDescriptor socketFd;
+
+    /** crosvm started from appDomain */
+    boolean appDomain;
 }
diff --git a/android/vm/src/run.rs b/android/vm/src/run.rs
index 2157ea8..0037327 100644
--- a/android/vm/src/run.rs
+++ b/android/vm/src/run.rs
@@ -173,6 +173,7 @@
         } else {
             bail!("unexpected architecture!");
         }
+        custom_config.extraKernelCmdlineParams.push(String::from("keep_bootcon"));
     }
 
     let vm_config = VirtualMachineConfig::AppConfig(VirtualMachineAppConfig {
diff --git a/android/vm/vm_shell.sh b/android/vm/vm_shell.sh
index b73a9dc..60d9329 100755
--- a/android/vm/vm_shell.sh
+++ b/android/vm/vm_shell.sh
@@ -30,7 +30,7 @@
     echo "        /apex/com.android.virt/bin/vm run-microdroid binary."
     echo ""
     echo "        E.g.:"
-    echo "            vm_shell start-microdroid -- --cpu 5"
+    echo "            vm_shell start-microdroid -- --protected --debug full"
     echo ""
     echo "        --auto-connect - automatically connects to the started VMs"
     echo ""
diff --git a/build/apex/Android.bp b/build/apex/Android.bp
index 4759c19..6541764 100644
--- a/build/apex/Android.bp
+++ b/build/apex/Android.bp
@@ -182,12 +182,6 @@
         "true": ["virtualizationservice.xml"],
         default: unset,
     }),
-    required: select(release_flag("RELEASE_AVF_SUPPORT_CUSTOM_VM_WITH_PARAVIRTUALIZED_DEVICES"), {
-        true: [
-            "default-permissions_com.android.virt.xml",
-        ],
-        default: [],
-    }),
 }
 
 apex_defaults {
diff --git a/build/apex/permissions/Android.bp b/build/apex/permissions/Android.bp
index d773df6..678a4f2 100644
--- a/build/apex/permissions/Android.bp
+++ b/build/apex/permissions/Android.bp
@@ -23,9 +23,3 @@
     src: "features_com.android.virt.xml",
     soc_specific: true,
 }
-
-prebuilt_etc {
-    name: "default-permissions_com.android.virt.xml",
-    sub_dir: "default-permissions",
-    src: "default-permissions_com.android.virt.xml",
-}
diff --git a/build/apex/permissions/default-permissions_com.android.virt.xml b/build/apex/permissions/default-permissions_com.android.virt.xml
deleted file mode 100644
index ac15708..0000000
--- a/build/apex/permissions/default-permissions_com.android.virt.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
-<!--
-    Copyright (C) 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
--->
-
-<!--
-    This file contains permissions to be granted by default. Default
-    permissions are granted to special platform components and to apps
-    that are approved to get default grants. The special components
-    are apps that are expected tto work out-of-the-box as they provide
-    core use cases such as default dialer, default email, etc. These
-    grants are managed by the platform. The apps that are additionally
-    approved for default grants are ones that provide carrier specific
-    functionality, ones legally required at some location, ones providing
-    alternative disclosure and opt-out UI, ones providing highlight features
-    of a dedicated device, etc. This file contains only the latter exceptions.
-    Fixed permissions cannot be controlled by the user and need a special
-    approval. Typically these are to ensure either legally mandated functions
-    or the app is considered a part of the OS.
--->
-<exceptions>
-    <!-- This is an example of an exception:
-    <exception
-        package="foo.bar.permission"
-      <permission name="android.permission.READ_CONTACTS" fixed="true"/>
-      <permission name="android.permission.READ_CALENDAR" fixed="false"/>
-    </exception>
-    -->
-    <exception package="com.android.virtualization.terminal">
-        <permission name="android.permission.POST_NOTIFICATIONS" fixed="true"/>
-    </exception>
-</exceptions>
diff --git a/build/debian/build.sh b/build/debian/build.sh
index 59a98b6..7231a7c 100755
--- a/build/debian/build.sh
+++ b/build/debian/build.sh
@@ -12,6 +12,7 @@
 	echo "-h         Print usage and this help message and exit."
 	echo "-a ARCH    Architecture of the image [default is aarch64]"
 	echo "-r         Release mode build"
+	echo "-w         Save temp work directory (for debugging)"
 }
 
 check_sudo() {
@@ -22,7 +23,7 @@
 }
 
 parse_options() {
-	while getopts "hra:" option; do
+	while getopts "a:hrw" option; do
 		case ${option} in
 			h)
 				show_help
@@ -40,6 +41,9 @@
 			r)
 				mode=release
 				;;
+			w)
+				save_workdir=1
+				;;
 			*)
 				echo "Invalid option: $OPTARG"
 				exit
@@ -51,6 +55,16 @@
 	fi
 }
 
+prepare_build_id() {
+	local filename=build_id
+	if [ -z "${KOKORO_BUILD_NUMBER}" ]; then
+		echo eng-$(hostname)-$(date --utc) > ${filename}
+	else
+		echo ${KOKORO_BUILD_NUMBER} > ${filename}
+	fi
+	echo ${filename}
+}
+
 install_prerequisites() {
 	apt update
 	packages=(
@@ -97,6 +111,7 @@
 	if [[ "$arch" == "x86_64" ]]; then
 		packages+=(
 			libguestfs-tools
+			linux-image-generic
 		)
 	fi
 	DEBIAN_FRONTEND=noninteractive \
@@ -144,7 +159,7 @@
 build_ttyd() {
 	local ttyd_version=1.7.7
 	local url="https://github.com/tsl0922/ttyd/archive/refs/tags/${ttyd_version}.tar.gz"
-	cp -r $(dirname $0)/ttyd ${workdir}/ttyd
+	cp -r "$(dirname "$0")/ttyd" "${workdir}/ttyd"
 
 	pushd "${workdir}" > /dev/null
 	wget "${url}" -O - | tar xz
@@ -152,7 +167,7 @@
 	pushd "$workdir/ttyd-${ttyd_version}" > /dev/null
 	bash -c "env BUILD_TARGET=${arch} ./scripts/cross-build.sh"
 	mkdir -p "${dst}/files/usr/local/bin/ttyd"
-	cp /tmp/stage/${arch}-linux-musl/bin/ttyd "${dst}/files/usr/local/bin/ttyd/AVF"
+	cp "/tmp/stage/${arch}-linux-musl/bin/ttyd" "${dst}/files/usr/local/bin/ttyd/AVF"
 	chmod 777 "${dst}/files/usr/local/bin/ttyd/AVF"
 	mkdir -p "${dst}/files/usr/share/doc/ttyd"
 	cp LICENSE "${dst}/files/usr/share/doc/ttyd/copyright"
@@ -161,8 +176,10 @@
 }
 
 copy_android_config() {
-	local src="$(dirname "$0")/fai_config"
-	local dst="${config_space}"
+	local src
+	local dst
+	src="$(dirname "$0")/fai_config"
+	dst="${config_space}"
 
 	cp -R "${src}"/* "${dst}"
 	cp "$(dirname "$0")/image.yaml" "${resources_dir}"
@@ -181,19 +198,26 @@
 
 extract_partitions() {
 	root_partition_num=1
+	bios_partition_num=14
 	efi_partition_num=15
 
 	loop=$(losetup -f --show --partscan $built_image)
-	dd if=${loop}p$root_partition_num of=root_part
-	dd if=${loop}p$efi_partition_num of=efi_part
-	losetup -d ${loop}
+	dd if="${loop}p$root_partition_num" of=root_part
+	if [[ "$arch" == "x86_64" ]]; then
+		dd if="${loop}p$bios_partition_num" of=bios_part
+	fi
+	dd if="${loop}p$efi_partition_num" of=efi_part
+	losetup -d "${loop}"
 
 	sed -i "s/{root_part_guid}/$(sfdisk --part-uuid $built_image $root_partition_num)/g" vm_config.json
+	if [[ "$arch" == "x86_64" ]]; then
+		sed -i "s/{bios_part_guid}/$(sfdisk --part-uuid $built_image $bios_partition_num)/g" vm_config.json
+	fi
 	sed -i "s/{efi_part_guid}/$(sfdisk --part-uuid $built_image $efi_partition_num)/g" vm_config.json
 }
 
 clean_up() {
-	rm -rf "${workdir}"
+	[ "$save_workdir" -eq 0 ] || rm -rf "${workdir}"
 }
 
 set -e
@@ -201,6 +225,7 @@
 
 built_image=image.raw
 workdir=$(mktemp -d)
+build_id=$(prepare_build_id)
 debian_cloud_image=${workdir}/debian_cloud_image
 debian_version=bookworm
 config_space=${debian_cloud_image}/config_space/${debian_version}
@@ -208,6 +233,8 @@
 arch=aarch64
 debian_arch=arm64
 mode=debug
+save_workdir=0
+
 parse_options "$@"
 check_sudo
 install_prerequisites
@@ -217,27 +244,29 @@
 fdisk -l "${built_image}"
 images=()
 
-cp $(dirname $0)/vm_config.json.${arch} vm_config.json
+cp "$(dirname "$0")/vm_config.json.${arch}" vm_config.json
+
+extract_partitions
 
 if [[ "$arch" == "aarch64" ]]; then
-	extract_partitions
 	images+=(
 		root_part
 		efi_part
 	)
-fi
-
 # TODO(b/365955006): remove these lines when uboot supports x86_64 EFI application
-if [[ "$arch" == "x86_64" ]]; then
+elif [[ "$arch" == "x86_64" ]]; then
+	rm -f vmlinuz initrd.img
 	virt-get-kernel -a "${built_image}"
 	mv vmlinuz* vmlinuz
 	mv initrd.img* initrd.img
 	images+=(
-		"${built_image}"
+		bios_part
+		root_part
+		efi_part
 		vmlinuz
 		initrd.img
 	)
 fi
 
 # --sparse option isn't supported in apache-commons-compress
-tar czv -f images.tar.gz ${images[@]} vm_config.json
+tar czv -f images.tar.gz ${build_id} "${images[@]}" vm_config.json
diff --git a/build/debian/build_in_container.sh b/build/debian/build_in_container.sh
index d5680e0..7fd4c00 100755
--- a/build/debian/build_in_container.sh
+++ b/build/debian/build_in_container.sh
@@ -4,7 +4,9 @@
 
 arch=aarch64
 release_flag=
-while getopts "ra:" option; do
+save_workdir_flag=
+
+while getopts "a:rw" option; do
   case ${option} in
     a)
       if [[ "$OPTARG" != "aarch64" && "$OPTARG" != "x86_64" ]]; then
@@ -16,6 +18,9 @@
     r)
       release_flag="-r"
       ;;
+    w)
+      save_workdir_flag="-w"
+      ;;
     *)
       echo "Invalid option: $OPTARG"
       exit
@@ -23,6 +28,8 @@
   esac
 done
 
-docker run --privileged -it --workdir /root/Virtualization/build/debian -v \
-  "$ANDROID_BUILD_TOP/packages/modules/Virtualization:/root/Virtualization" -v \
-  /dev:/dev ubuntu:22.04 /root/Virtualization/build/debian/build.sh -a "$arch" $release_flag
+docker run --privileged -it -v /dev:/dev \
+  -v "$ANDROID_BUILD_TOP/packages/modules/Virtualization:/root/Virtualization" \
+  --workdir /root/Virtualization/build/debian \
+  ubuntu:22.04 \
+  bash -c "/root/Virtualization/build/debian/build.sh -a $arch $release_flag $save_workdir_flag || bash"
diff --git a/build/debian/fai_config/scripts/AVF/10-systemd b/build/debian/fai_config/scripts/AVF/10-systemd
index a514299..94838bc 100755
--- a/build/debian/fai_config/scripts/AVF/10-systemd
+++ b/build/debian/fai_config/scripts/AVF/10-systemd
@@ -10,3 +10,5 @@
 ln -s /etc/systemd/system/forwarder_guest_launcher.service $target/etc/systemd/system/multi-user.target.wants/forwarder_guest_launcher.service
 ln -s /etc/systemd/system/virtiofs_internal.service $target/etc/systemd/system/multi-user.target.wants/virtiofs_internal.service
 ln -s /etc/systemd/system/backup_mount.service $target/etc/systemd/system/multi-user.target.wants/backup_mount.service
+
+sed -i 's/#LLMNR=yes/LLMNR=no/' $target/etc/systemd/resolved.conf
diff --git a/build/debian/release.sh b/build/debian/release.sh
new file mode 100755
index 0000000..437f9c8
--- /dev/null
+++ b/build/debian/release.sh
@@ -0,0 +1,101 @@
+#!/bin/bash
+
+# This is a script to release the Debian image built by Kokoro to Lorry.
+
+set -e
+
+show_help() {
+	echo "Usage: $0 [OPTION]..."
+	echo "Fetches a debian image from Placer and releases it to /android/ferrochrome/ARCH/TAG"
+	echo "Options:"
+	echo "-h            Print usage and this help message and exit."
+	echo "-a ARCH       Architecture of the image. Defaults to all supported architectures."
+	echo "-b BUILD_ID   Build ID to fetch. If omitted, latest build ID is selected."
+	echo "-t TAG        Tag name to attach to the release. Defaults to BUILD_ID."
+}
+
+parse_opt() {
+	while getopts "ha:b:t:" option; do
+		case ${option} in
+			h)
+				show_help
+				exit;;
+			a)
+				if [[ "$OPTARG" != "aarch64" && "$OPTARG" != "x86_64" ]]; then
+					echo "Invalid architecture: $OPTARG"
+					exit
+				fi
+				arch="$OPTARG"
+				;;
+			b)
+				build_id="$OPTARG"
+				;;
+			t)
+				tag="$OPTARG"
+				;;
+			*)
+				echo "Invalid option: $OPTARG"
+				exit
+				;;
+		esac
+	done
+
+	if [ "${build_id}" != "latest" ]; then
+		echo "Build ID is ambiguous when architecture is not set"
+		exit
+	fi
+}
+
+arch=all
+build_id=latest
+tag=
+placer_url="/placer/test/home/kokoro-dedicated-qa/build_artifacts/qa/android-ferrochrome"
+image_filename="images.tar.gz"
+
+get_build_id() {
+	local arch=$1
+	local build_id=$2
+	if [ "${build_id}" == "latest" ]; then
+		local pattern=${placer_url}/${arch}/continuous
+		build_id=$(basename $(fileutil ls ${pattern} | sort -V | tail -1))
+	fi
+	echo ${build_id}
+}
+
+get_image_path() {
+	local arch=$1
+	local build_id=$2
+	local pattern=${placer_url}/${arch}/continuous/${build_id}/*/${image_filename}
+	image=$(fileutil ls ${pattern} | tail -1)
+	if [ $? -ne 0 ]; then
+		echo "Cannot find image"
+		exit
+	fi
+	echo ${image}
+}
+
+do_release() {
+	local arch=$1
+	local build_id=$2
+
+	build_id=$(get_build_id ${arch} ${build_id})
+	echo "Using build ID ${build_id} for ${arch}"
+	local image=$(get_image_path ${arch} ${build_id})
+
+	local tag=${tag:-${build_id}}
+	local serving_url=/android/ferrochrome/${arch}/${tag}/${image_filename}
+	echo "Releasing ${image} to ${serving_url}"
+
+	local request='payload : { url_path: '"\"${serving_url}\""' source_path : '"\"${image}\""' }'
+	local id=$(stubby call blade:download-lorry-api LorryService.CreatePayloads "${request}" | cut -d\  -f2)
+	echo "Done. Visit https://lorry.corp.google.com/view/${id} to get an approval for the release."
+}
+
+parse_opt "$@"
+
+if [ "${arch}" == "all" ]; then
+	do_release aarch64 ${build_id}
+	do_release x86_64 ${build_id}
+else
+	do_release ${arch} ${build_id}
+fi
diff --git a/build/debian/vm_config.json.x86_64 b/build/debian/vm_config.json.x86_64
index d338080..496e684 100644
--- a/build/debian/vm_config.json.x86_64
+++ b/build/debian/vm_config.json.x86_64
@@ -2,8 +2,26 @@
     "name": "debian",
     "disks": [
         {
-            "image": "$PAYLOAD_DIR/image.raw",
-            "partitions": [],
+            "partitions": [
+                {
+                    "label": "ROOT",
+                    "path": "$PAYLOAD_DIR/root_part",
+                    "writable": true,
+                    "guid": "{root_part_guid}"
+                },
+                {
+                    "label": "BIOS",
+                    "path": "$PAYLOAD_DIR/bios_part",
+                    "writable": true,
+                    "guid": "{bios_part_guid}"
+                },
+                {
+                    "label": "EFI",
+                    "path": "$PAYLOAD_DIR/efi_part",
+                    "writable": false,
+                    "guid": "{efi_part_guid}"
+                }
+            ],
             "writable": true
         }
     ],
diff --git a/build/microdroid/bootconfig.arm64 b/build/microdroid/bootconfig.arm64
index b1e6d56..7509a2c 100644
--- a/build/microdroid/bootconfig.arm64
+++ b/build/microdroid/bootconfig.arm64
@@ -1 +1 @@
-androidboot.boot_devices = 10000.pci
+androidboot.boot_devices = 72000000.pci
diff --git a/docs/custom_vm.md b/docs/custom_vm.md
index 9a9ede4..7597131 100644
--- a/docs/custom_vm.md
+++ b/docs/custom_vm.md
@@ -24,3 +24,26 @@
 
 The `vm` command also has other subcommands for debugging; run
 `/apex/com.android.virt/bin/vm help` for details.
+
+# Terminal app
+## Graphical environment (Wayland, VNC)
+By installing Wayland compositor and VNC backend, you can enable graphical environment.
+One of the options is `sway`, `wayvnc` and `xwayland`(if necessary).
+
+```
+sudo apt install sway wayvnc xwayland
+WLR_BACKENDS=headless WLR_LIBINPUT_NO_DEVICES=1 sway
+WAYLAND_DISPLAY=wayland-1 wayvnc 0.0.0.0 # or use port forwarding
+```
+
+And then, connect to 192.168.0.2:5900(or localhost:5900) with arbitrary VNC client.
+Or, `novnc`(https://github.com/novnc/noVNC/releases). For `novnc` you need to install
+`novnc`, and run `<novnc_path>/utils/novnc_proxy`, and then connect to `http://192.168.0.2:6080/vnc.html`
+(or `localhost:6080` if port forwarding is enabled.)
+
+`weston` with VNC backend might be another option, but it isn't available in
+Debian package repository for bookworm.
+
+## Hardware accelration
+If the file `/sdcard/linux/virglrenderer` exists on the device, it enables VirGL for VM.
+This requires enabling ANGLE for the Terminal app. (https://chromium.googlesource.com/angle/angle.git/+/HEAD/doc/DevSetupAndroid.md)
diff --git a/guest/forwarder_guest_launcher/src/main.rs b/guest/forwarder_guest_launcher/src/main.rs
index 0bb3b4d..f6944d6 100644
--- a/guest/forwarder_guest_launcher/src/main.rs
+++ b/guest/forwarder_guest_launcher/src/main.rs
@@ -35,7 +35,9 @@
 }
 
 const NON_PREVILEGED_PORT_RANGE_START: i32 = 1024;
+const TTYD_PORT: i32 = 7681;
 const TCPSTATES_IP_4: i8 = 4;
+const TCPSTATES_STATE_CLOSE: &str = "CLOSE";
 const TCPSTATES_STATE_LISTEN: &str = "LISTEN";
 
 #[derive(Debug, Deserialize)]
@@ -43,7 +45,7 @@
 struct TcpStateRow {
     ip: i8,
     lport: i32,
-    oldstate: String,
+    rport: i32,
     newstate: String,
 }
 
@@ -107,6 +109,10 @@
     Ok(())
 }
 
+fn is_forwardable_port(port: i32) -> bool {
+    port >= NON_PREVILEGED_PORT_RANGE_START && port != TTYD_PORT
+}
+
 async fn report_active_ports(
     mut client: DebianServiceClient<Channel>,
 ) -> Result<(), Box<dyn std::error::Error>> {
@@ -129,7 +135,7 @@
         .map(|x| x.socket)
         .filter(|x| x.is_ipv4())
         .map(|x| x.port().into())
-        .filter(|x| *x >= NON_PREVILEGED_PORT_RANGE_START) // Ignore privileged ports
+        .filter(|x| is_forwardable_port(*x))
         .collect();
     send_active_ports_report(listening_ports.clone(), &mut client).await?;
 
@@ -139,17 +145,20 @@
         if row.ip != TCPSTATES_IP_4 {
             continue;
         }
-        if row.lport < NON_PREVILEGED_PORT_RANGE_START {
+        if !is_forwardable_port(row.lport) {
             continue;
         }
-        match (row.oldstate.as_str(), row.newstate.as_str()) {
-            (_, TCPSTATES_STATE_LISTEN) => {
+        if row.rport > 0 {
+            continue;
+        }
+        match row.newstate.as_str() {
+            TCPSTATES_STATE_LISTEN => {
                 listening_ports.insert(row.lport);
             }
-            (TCPSTATES_STATE_LISTEN, _) => {
+            TCPSTATES_STATE_CLOSE => {
                 listening_ports.remove(&row.lport);
             }
-            (_, _) => continue,
+            _ => continue,
         }
         send_active_ports_report(listening_ports.clone(), &mut client).await?;
     }
diff --git a/guest/pvmfw/README.md b/guest/pvmfw/README.md
index 50fe3d3..8c8314d 100644
--- a/guest/pvmfw/README.md
+++ b/guest/pvmfw/README.md
@@ -450,6 +450,18 @@
 
 [soong-udroid]: https://cs.android.com/android/platform/superproject/main/+/main:packages/modules/Virtualization/microdroid/Android.bp;l=425;drc=b94a5cf516307c4279f6c16a63803527a8affc6d
 
+#### VBMeta Properties
+
+AVF defines special keys for AVB VBMeta descriptor properties that pvmfw
+recognizes, allowing VM owners to ensure that pvmfw performs its role in a way
+that is compatible with their guest kernel. These are:
+
+- `"com.android.virt.cap"`: a `|`-separated list of "capabilities" from
+  - `remote_attest`: pvmfw uses a hard-coded index for rollback protection
+  - `secretkeeper_protection`: pvmfw defers rollback protection to the guest
+  - `supports_uefi_boot`: pvmfw boots the VM as a EFI payload (experimental)
+  - `trusty_security_vm`: pvmfw skips rollback protection
+
 ## Development
 
 For faster iteration, you can build pvmfw, adb-push it to the device, and use
diff --git a/guest/pvmfw/platform.dts b/guest/pvmfw/platform.dts
index c3ecd0e..643a5e4 100644
--- a/guest/pvmfw/platform.dts
+++ b/guest/pvmfw/platform.dts
@@ -355,11 +355,11 @@
 		dma-coherent;
 		memory-region = <&swiotlb>;
 		ranges = <
-			0x3000000 0x0 0x02000000 0x0 0x02000000 0x00 0x02000000
+			0x3000000 0x0 0x70000000 0x0 0x70000000 0x00 0x02000000
 			0x3000000 PLACEHOLDER2   PLACEHOLDER2   PLACEHOLDER2
 		>;
 		bus-range = <0x00 0x00>;
-		reg = <0x00 0x10000 0x00 0x1000000>;
+		reg = <0x00 0x72000000 0x00 0x1000000>;
 		interrupt-map = <
 			0x0800 0x0 0x0 1 &intc 0 0 GIC_SPI (IRQ_BASE + 0) IRQ_TYPE_LEVEL_HIGH
 			0x1000 0x0 0x0 1 &intc 0 0 GIC_SPI (IRQ_BASE + 1) IRQ_TYPE_LEVEL_HIGH
diff --git a/guest/pvmfw/src/entry.rs b/guest/pvmfw/src/entry.rs
index ce911b8..48585f3 100644
--- a/guest/pvmfw/src/entry.rs
+++ b/guest/pvmfw/src/entry.rs
@@ -129,7 +129,7 @@
         page_table,
         crosvm::MEM_START..layout::MAX_VIRT_ADDR,
         crosvm::MMIO_RANGE,
-        Some(memory::appended_payload_range()),
+        Some(layout::image_footer_range()),
     ));
 
     let slices = memory::MemorySlices::new(
@@ -189,7 +189,7 @@
 
     const SCTLR_EL1_VAL: u64 = SCTLR_EL1_RES1 | SCTLR_EL1_ITD | SCTLR_EL1_SED | SCTLR_EL1_I;
 
-    let scratch = layout::scratch_range();
+    let scratch = layout::data_bss_range();
 
     assert_ne!(scratch.end - scratch.start, 0, "scratch memory is empty.");
     assert_eq!(scratch.start.0 % ASM_STP_ALIGN, 0, "scratch memory is misaligned.");
@@ -205,6 +205,12 @@
     assert_eq!(stack.start.0 % ASM_STP_ALIGN, 0, "Misaligned stack region.");
     assert_eq!(stack.end.0 % ASM_STP_ALIGN, 0, "Misaligned stack region.");
 
+    let eh_stack = layout::eh_stack_range();
+
+    assert_ne!(eh_stack.end - eh_stack.start, 0, "EH stack region is empty.");
+    assert_eq!(eh_stack.start.0 % ASM_STP_ALIGN, 0, "Misaligned EH stack region.");
+    assert_eq!(eh_stack.end.0 % ASM_STP_ALIGN, 0, "Misaligned EH stack region.");
+
     // Zero all memory that could hold secrets and that can't be safely written to from Rust.
     // Disable the exception vector, caches and page table and then jump to the payload at the
     // given address, passing it the given FDT pointer.
@@ -250,6 +256,18 @@
             "cmp {cache_line}, {stack_end}",
             "b.lo 0b",
 
+            "mov {cache_line}, {eh_stack}",
+            // Zero EH stack region.
+            "0: stp xzr, xzr, [{eh_stack}], 16",
+            "cmp {eh_stack}, {eh_stack_end}",
+            "b.lo 0b",
+
+            // Flush d-cache over EH stack region.
+            "0: dc cvau, {cache_line}",
+            "add {cache_line}, {cache_line}, {dcache_line_size}",
+            "cmp {cache_line}, {eh_stack_end}",
+            "b.lo 0b",
+
             "msr sctlr_el1, {sctlr_el1_val}",
             "isb",
             "mov x1, xzr",
@@ -293,6 +311,8 @@
             scratch_end = in(reg) u64::try_from(scratch.end.0).unwrap(),
             stack = in(reg) u64::try_from(stack.start.0).unwrap(),
             stack_end = in(reg) u64::try_from(stack.end.0).unwrap(),
+            eh_stack = in(reg) u64::try_from(eh_stack.start.0).unwrap(),
+            eh_stack_end = in(reg) u64::try_from(eh_stack.end.0).unwrap(),
             dcache_line_size = in(reg) u64::try_from(min_dcache_line_size()).unwrap(),
             in("x0") fdt_address,
             in("x30") payload_start,
@@ -306,7 +326,7 @@
 /// This must only be called once, since we are returning a mutable reference.
 /// The appended data region must be mapped.
 unsafe fn get_appended_data_slice() -> &'static mut [u8] {
-    let range = memory::appended_payload_range();
+    let range = layout::image_footer_range();
     // SAFETY: This region is mapped and the linker script prevents it from overlapping with other
     // objects.
     unsafe { slice::from_raw_parts_mut(range.start.0 as *mut u8, range.end - range.start) }
diff --git a/guest/pvmfw/src/fdt.rs b/guest/pvmfw/src/fdt.rs
index 6bbb05e..027f163 100644
--- a/guest/pvmfw/src/fdt.rs
+++ b/guest/pvmfw/src/fdt.rs
@@ -1140,10 +1140,15 @@
         RebootReason::InvalidFdt
     })?;
 
-    let swiotlb_info = SwiotlbInfo::new_from_fdt(fdt).map_err(|e| {
-        error!("Failed to read swiotlb info from DT: {e}");
-        RebootReason::InvalidFdt
-    })?;
+    let swiotlb_info = SwiotlbInfo::new_from_fdt(fdt)
+        .map_err(|e| {
+            error!("Failed to read swiotlb info from DT: {e}");
+            RebootReason::InvalidFdt
+        })?
+        .ok_or_else(|| {
+            error!("Swiotlb info missing from DT");
+            RebootReason::InvalidFdt
+        })?;
     validate_swiotlb_info(&swiotlb_info, &memory_range)?;
 
     let device_assignment = match vm_dtbo {
diff --git a/guest/pvmfw/src/memory.rs b/guest/pvmfw/src/memory.rs
index 8e8b338..7d49bca 100644
--- a/guest/pvmfw/src/memory.rs
+++ b/guest/pvmfw/src/memory.rs
@@ -30,18 +30,9 @@
 use log::warn;
 use vmbase::{
     layout::{self, crosvm},
-    memory::{PageTable, MEMORY, SIZE_2MB, SIZE_4KB},
-    util::align_up,
+    memory::{PageTable, MEMORY},
 };
 
-/// Returns memory range reserved for the appended payload.
-pub fn appended_payload_range() -> Range<VirtualAddress> {
-    let start = align_up(layout::binary_end().0, SIZE_4KB).unwrap();
-    // pvmfw is contained in a 2MiB region so the payload can't be larger than the 2MiB alignment.
-    let end = align_up(start, SIZE_2MB).unwrap();
-    VirtualAddress(start)..VirtualAddress(end)
-}
-
 /// Region allocated for the stack.
 pub fn stack_range() -> Range<VirtualAddress> {
     const STACK_PAGES: usize = 12;
@@ -54,11 +45,12 @@
 
     // Stack and scratch ranges are explicitly zeroed and flushed before jumping to payload,
     // so dirty state management can be omitted.
-    page_table.map_data(&layout::scratch_range().into())?;
+    page_table.map_data(&layout::data_bss_range().into())?;
+    page_table.map_data(&layout::eh_stack_range().into())?;
     page_table.map_data(&stack_range().into())?;
     page_table.map_code(&layout::text_range().into())?;
     page_table.map_rodata(&layout::rodata_range().into())?;
-    page_table.map_data_dbm(&appended_payload_range().into())?;
+    page_table.map_data_dbm(&layout::image_footer_range().into())?;
     if let Err(e) = page_table.map_device(&layout::console_uart_page().into()) {
         error!("Failed to remap the UART as a dynamic page table entry: {e}");
         return Err(e);
diff --git a/guest/rialto/src/main.rs b/guest/rialto/src/main.rs
index 0b79e1e..61e9948 100644
--- a/guest/rialto/src/main.rs
+++ b/guest/rialto/src/main.rs
@@ -73,7 +73,8 @@
 fn new_page_table() -> Result<PageTable> {
     let mut page_table = PageTable::default();
 
-    page_table.map_data(&layout::scratch_range().into())?;
+    page_table.map_data(&layout::data_bss_range().into())?;
+    page_table.map_data(&layout::eh_stack_range().into())?;
     page_table.map_data(&layout::stack_range(40 * PAGE_SIZE).into())?;
     page_table.map_code(&layout::text_range().into())?;
     page_table.map_rodata(&layout::rodata_range().into())?;
@@ -117,7 +118,7 @@
         MEMORY.lock().as_mut().unwrap().init_dynamic_shared_pool(granule).inspect_err(|_| {
             error!("Failed to initialize dynamically shared pool.");
         })?;
-    } else if let Ok(swiotlb_info) = SwiotlbInfo::new_from_fdt(fdt) {
+    } else if let Ok(Some(swiotlb_info)) = SwiotlbInfo::new_from_fdt(fdt) {
         let range = swiotlb_info.fixed_range().ok_or_else(|| {
             error!("Pre-shared pool range not specified in swiotlb node");
             Error::from(FdtError::BadValue)
diff --git a/guest/vmbase_example/src/layout.rs b/guest/vmbase_example/src/layout.rs
index 50ecb7e..4e87e4e 100644
--- a/guest/vmbase_example/src/layout.rs
+++ b/guest/vmbase_example/src/layout.rs
@@ -14,14 +14,11 @@
 
 //! Memory layout.
 
-use aarch64_paging::paging::{MemoryRegion, VirtualAddress};
+use aarch64_paging::paging::VirtualAddress;
 use core::ops::Range;
 use log::info;
 use vmbase::{layout, memory::PAGE_SIZE};
 
-/// The first 1 GiB of memory are used for MMIO.
-pub const DEVICE_REGION: MemoryRegion = MemoryRegion::new(0, 0x40000000);
-
 /// Writable data region for the stack.
 pub fn boot_stack_range() -> Range<VirtualAddress> {
     layout::stack_range(40 * PAGE_SIZE)
diff --git a/guest/vmbase_example/src/main.rs b/guest/vmbase_example/src/main.rs
index 1466d1e..f00effa 100644
--- a/guest/vmbase_example/src/main.rs
+++ b/guest/vmbase_example/src/main.rs
@@ -23,8 +23,8 @@
 
 extern crate alloc;
 
-use crate::layout::{boot_stack_range, print_addresses, DEVICE_REGION};
-use crate::pci::{check_pci, get_bar_region};
+use crate::layout::{boot_stack_range, print_addresses};
+use crate::pci::{check_pci, get_bar_region, get_cam_region};
 use aarch64_paging::paging::VirtualAddress;
 use aarch64_paging::MapError;
 use alloc::{vec, vec::Vec};
@@ -37,10 +37,12 @@
     bionic, configure_heap,
     fdt::pci::PciInfo,
     generate_image_header,
-    layout::{crosvm::FDT_MAX_SIZE, rodata_range, scratch_range, text_range},
+    layout::{
+        console_uart_page, crosvm::FDT_MAX_SIZE, data_bss_range, eh_stack_range, rodata_range,
+        text_range,
+    },
     linker, logger, main,
     memory::{PageTable, SIZE_64KB},
-    util::RangeExt as _,
 };
 
 static INITIALISED_DATA: [u32; 4] = [1, 2, 3, 4];
@@ -52,10 +54,11 @@
 configure_heap!(SIZE_64KB);
 
 fn init_page_table(page_table: &mut PageTable) -> Result<(), MapError> {
-    page_table.map_device(&DEVICE_REGION)?;
+    page_table.map_device(&console_uart_page().into())?;
     page_table.map_code(&text_range().into())?;
     page_table.map_rodata(&rodata_range().into())?;
-    page_table.map_data(&scratch_range().into())?;
+    page_table.map_data(&data_bss_range().into())?;
+    page_table.map_data(&eh_stack_range().into())?;
     page_table.map_data(&boot_stack_range().into())?;
 
     info!("Activating IdMap...");
@@ -99,13 +102,10 @@
 
     check_alloc();
 
+    let cam_region = get_cam_region(&pci_info);
+    page_table.map_device(&cam_region).unwrap();
     let bar_region = get_bar_region(&pci_info);
-    if bar_region.is_within(&DEVICE_REGION) {
-        // Avoid a MapError::BreakBeforeMakeViolation.
-        info!("BAR region is within already mapped device region: skipping page table ops.");
-    } else {
-        page_table.map_device(&bar_region).unwrap();
-    }
+    page_table.map_device(&bar_region).unwrap();
 
     check_data();
     check_dice();
diff --git a/guest/vmbase_example/src/pci.rs b/guest/vmbase_example/src/pci.rs
index 563f24a..379425d 100644
--- a/guest/vmbase_example/src/pci.rs
+++ b/guest/vmbase_example/src/pci.rs
@@ -120,6 +120,11 @@
     MemoryRegion::new(pci_info.bar_range.start as usize, pci_info.bar_range.end as usize)
 }
 
+/// Gets the PCI CAM memory region.
+pub fn get_cam_region(pci_info: &PciInfo) -> MemoryRegion {
+    MemoryRegion::new(pci_info.cam_range.start, pci_info.cam_range.end)
+}
+
 struct HalImpl;
 
 /// SAFETY: See the 'Implementation Safety' comments on methods below for how they fulfill the
diff --git a/libs/framework-virtualization/src/android/system/virtualmachine/VirtualMachineConfig.java b/libs/framework-virtualization/src/android/system/virtualmachine/VirtualMachineConfig.java
index 8230166..3829f9f 100644
--- a/libs/framework-virtualization/src/android/system/virtualmachine/VirtualMachineConfig.java
+++ b/libs/framework-virtualization/src/android/system/virtualmachine/VirtualMachineConfig.java
@@ -33,6 +33,8 @@
 import android.content.Context;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
+import android.net.LocalSocket;
+import android.net.LocalSocketAddress;
 import android.os.Build;
 import android.os.ParcelFileDescriptor;
 import android.os.PersistableBundle;
@@ -56,6 +58,8 @@
 import java.io.OutputStream;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
+import java.nio.file.Files;
+import java.nio.file.Path;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -635,6 +639,34 @@
         }
     }
 
+    private void startCrosvmVirtiofs(
+            String sharedPath,
+            int host_uid,
+            int guest_uid,
+            int guest_gid,
+            String tagName,
+            int mask,
+            String socketPath)
+            throws IOException {
+        String ugidMapValue =
+                String.format("%d %d %d %d %d /", guest_uid, guest_gid, host_uid, host_uid, mask);
+        String cfgArg = String.format("ugid_map='%s'", ugidMapValue);
+        ProcessBuilder pb =
+                new ProcessBuilder(
+                        "/apex/com.android.virt/bin/crosvm",
+                        "device",
+                        "fs",
+                        "--socket=" + socketPath,
+                        "--tag=" + tagName,
+                        "--shared-dir=" + sharedPath,
+                        "--cfg",
+                        cfgArg,
+                        "--disable-sandbox",
+                        "--skip-pivot-root=true");
+
+        pb.start();
+    }
+
     VirtualMachineRawConfig toVsRawConfig() throws IllegalStateException, IOException {
         VirtualMachineRawConfig config = new VirtualMachineRawConfig();
         VirtualMachineCustomImageConfig customImageConfig = getCustomImageConfig();
@@ -714,6 +746,38 @@
                                 .orElse(0)];
         for (int i = 0; i < config.sharedPaths.length; i++) {
             config.sharedPaths[i] = customImageConfig.getSharedPaths()[i].toParcelable();
+            if (config.sharedPaths[i].appDomain) {
+                try {
+                    String socketPath = customImageConfig.getSharedPaths()[i].getSocketPath();
+                    startCrosvmVirtiofs(
+                            config.sharedPaths[i].sharedPath,
+                            config.sharedPaths[i].hostUid,
+                            config.sharedPaths[i].guestUid,
+                            config.sharedPaths[i].guestGid,
+                            config.sharedPaths[i].tag,
+                            config.sharedPaths[i].mask,
+                            socketPath);
+                    long startTime = System.currentTimeMillis();
+                    long deadline = startTime + 5000;
+                    // TODO: use socketpair instead of crosvm creating the named sockets.
+                    while (!Files.exists(Path.of(socketPath))
+                            && System.currentTimeMillis() < deadline) {
+                        Thread.sleep(200);
+                    }
+                    if (!Files.exists(Path.of(socketPath))) {
+                        throw new IOException("Timeout waiting for socket: " + socketPath);
+                    }
+                    LocalSocket socket = new LocalSocket();
+                    socket.connect(
+                            new LocalSocketAddress(
+                                    socketPath, LocalSocketAddress.Namespace.FILESYSTEM));
+                    config.sharedPaths[i].socketFd =
+                            ParcelFileDescriptor.dup(socket.getFileDescriptor());
+                } catch (IOException | InterruptedException e) {
+                    Log.e(TAG, "startCrosvmVirtiofs failed", e);
+                    throw new RuntimeException(e);
+                }
+            }
         }
 
         config.displayConfig =
diff --git a/libs/framework-virtualization/src/android/system/virtualmachine/VirtualMachineCustomImageConfig.java b/libs/framework-virtualization/src/android/system/virtualmachine/VirtualMachineCustomImageConfig.java
index 9b0709d..93f29a9 100644
--- a/libs/framework-virtualization/src/android/system/virtualmachine/VirtualMachineCustomImageConfig.java
+++ b/libs/framework-virtualization/src/android/system/virtualmachine/VirtualMachineCustomImageConfig.java
@@ -317,6 +317,8 @@
         private final int mask;
         private final String tag;
         private final String socket;
+        private final boolean appDomain;
+        private final String socketPath;
 
         public SharedPath(
                 String path,
@@ -326,7 +328,9 @@
                 int guestGid,
                 int mask,
                 String tag,
-                String socket) {
+                String socket,
+                boolean appDomain,
+                String socketPath) {
             this.path = path;
             this.hostUid = hostUid;
             this.hostGid = hostGid;
@@ -335,6 +339,8 @@
             this.mask = mask;
             this.tag = tag;
             this.socket = socket;
+            this.appDomain = appDomain;
+            this.socketPath = socketPath;
         }
 
         android.system.virtualizationservice.SharedPath toParcelable() {
@@ -347,7 +353,8 @@
             parcelable.guestGid = this.guestGid;
             parcelable.mask = this.mask;
             parcelable.tag = this.tag;
-            parcelable.socket = this.socket;
+            parcelable.socketPath = this.socket;
+            parcelable.appDomain = this.appDomain;
             return parcelable;
         }
 
@@ -390,6 +397,16 @@
         public String getSocket() {
             return socket;
         }
+
+        /** @hide */
+        public boolean getAppDomain() {
+            return appDomain;
+        }
+
+        /** @hide */
+        public String getSocketPath() {
+            return socketPath;
+        }
     }
 
     /** @hide */
diff --git a/libs/libcompos_common/compos_client.rs b/libs/libcompos_common/compos_client.rs
index 316eaa9..6872582 100644
--- a/libs/libcompos_common/compos_client.rs
+++ b/libs/libcompos_common/compos_client.rs
@@ -58,6 +58,8 @@
 pub struct VmParameters {
     /// The name of VM for identifying.
     pub name: String,
+    /// The OS of VM.
+    pub os: String,
     /// Whether the VM should be debuggable.
     pub debug_mode: bool,
     /// CPU topology of the VM. Defaults to 1 vCPU.
@@ -129,6 +131,7 @@
 
         let config = VirtualMachineConfig::AppConfig(VirtualMachineAppConfig {
             name: parameters.name.clone(),
+            osName: parameters.os.clone(),
             apk: Some(apk_fd),
             idsig: Some(idsig_fd),
             instanceId: instance_id,
diff --git a/libs/libvmbase/sections.ld b/libs/libvmbase/sections.ld
index 7d464bc..222edae 100644
--- a/libs/libvmbase/sections.ld
+++ b/libs/libvmbase/sections.ld
@@ -56,17 +56,6 @@
 	} >image
 	rodata_end = .;
 
-	.eh_stack (NOLOAD) : ALIGN(4096) {
-		/*
-		 * Get stack overflow guard from the previous page being from
-		 * .rodata and mapped read-only or left unmapped.
-		 */
-		eh_stack_limit = .;
-		. += 4096;
-		. = ALIGN(4096);
-		init_eh_stack_pointer = .;
-	} >writable_data
-
 	/*
 	 * Collect together the read-write data including .bss at the end which
 	 * will be zero'd by the entry code. This is page aligned so it can be
@@ -87,6 +76,13 @@
 	/* Everything beyond this point will not be included in the binary. */
 	bin_end = data_lma + SIZEOF(.data);
 
+	/* Data may be appended at load time to our binary. */
+	.image_footer (NOLOAD) : ALIGN(4096) {
+		image_footer_begin = .;
+		. = ALIGN(LENGTH(image));
+		image_footer_end = .;
+	} >image
+
 	/* The entry point code assumes that .bss is 16-byte aligned. */
 	.bss : ALIGN(16)  {
 		bss_begin = .;
@@ -96,11 +92,28 @@
 		bss_end = .;
 	} >writable_data
 
-	init_stack_pointer = ORIGIN(writable_data) + LENGTH(writable_data);
+	/* Left unmapped, to catch overflows of the exception handler stack. */
+	.eh_stack_guard_page (NOLOAD) : ALIGN(4096) {
+		. += 4096;
+	} >writable_data
+
+	/* Exception handler stack, mapped read-write. */
+	.eh_stack (NOLOAD) : ALIGN(4096) {
+		eh_stack_limit = .;
+		. += 4096;
+		init_eh_stack_pointer = .;
+	} >writable_data
+
+	/* Left unmapped, to catch overflows of the stack. */
+	.stack_guard_page (NOLOAD) : ALIGN(4096) {
+		. += 4096;
+	} >writable_data
+
+	/* Stack, mapped read-write (possibly partially). */
 	.stack (NOLOAD) : ALIGN(4096) {
-		. += 4096; /* Ensure we have one guard page for overflow. */
 		stack_limit = .;
-		. = init_stack_pointer;
+		. = ALIGN(LENGTH(writable_data));
+		init_stack_pointer = .;
 	} >writable_data
 
 	/* Make our Bionic stack protector compatible with mainline LLVM */
diff --git a/libs/libvmbase/src/fdt.rs b/libs/libvmbase/src/fdt.rs
index ff0eaf0..aaf354e 100644
--- a/libs/libvmbase/src/fdt.rs
+++ b/libs/libvmbase/src/fdt.rs
@@ -33,20 +33,20 @@
 
 impl SwiotlbInfo {
     /// Creates a `SwiotlbInfo` struct from the given device tree.
-    pub fn new_from_fdt(fdt: &Fdt) -> libfdt::Result<SwiotlbInfo> {
-        let node =
-            fdt.compatible_nodes(cstr!("restricted-dma-pool"))?.next().ok_or(FdtError::NotFound)?;
-
+    pub fn new_from_fdt(fdt: &Fdt) -> libfdt::Result<Option<SwiotlbInfo>> {
+        let Some(node) = fdt.compatible_nodes(cstr!("restricted-dma-pool"))?.next() else {
+            return Ok(None);
+        };
         let (addr, size, align) = if let Some(mut reg) = node.reg()? {
-            let reg = reg.next().ok_or(FdtError::NotFound)?;
-            let size = reg.size.ok_or(FdtError::NotFound)?;
+            let reg = reg.next().ok_or(FdtError::BadValue)?;
+            let size = reg.size.ok_or(FdtError::BadValue)?;
             (Some(reg.addr.try_into().unwrap()), size.try_into().unwrap(), None)
         } else {
             let size = node.getprop_u64(cstr!("size"))?.ok_or(FdtError::NotFound)?;
             let align = node.getprop_u64(cstr!("alignment"))?.ok_or(FdtError::NotFound)?;
             (None, size.try_into().unwrap(), Some(align.try_into().unwrap()))
         };
-        Ok(Self { addr, size, align })
+        Ok(Some(Self { addr, size, align }))
     }
 
     /// Returns the fixed range of memory mapped by the SWIOTLB buffer, if available.
diff --git a/libs/libvmbase/src/layout.rs b/libs/libvmbase/src/layout.rs
index adcb2fa..a8f7827 100644
--- a/libs/libvmbase/src/layout.rs
+++ b/libs/libvmbase/src/layout.rs
@@ -70,6 +70,11 @@
     linker_region!(rodata_begin, rodata_end)
 }
 
+/// Region which may contain a footer appended to the binary at load time.
+pub fn image_footer_range() -> Range<VirtualAddress> {
+    linker_region!(image_footer_begin, image_footer_end)
+}
+
 /// Initialised writable data.
 pub fn data_range() -> Range<VirtualAddress> {
     linker_region!(data_begin, data_end)
@@ -80,6 +85,11 @@
     linker_region!(bss_begin, bss_end)
 }
 
+/// Writable data region for .data and .bss.
+pub fn data_bss_range() -> Range<VirtualAddress> {
+    linker_region!(data_begin, bss_end)
+}
+
 /// Writable data region for the stack.
 pub fn stack_range(stack_size: usize) -> Range<VirtualAddress> {
     let end = linker_addr!(init_stack_pointer);
@@ -89,9 +99,9 @@
     start..end
 }
 
-/// All writable sections, excluding the stack.
-pub fn scratch_range() -> Range<VirtualAddress> {
-    linker_region!(eh_stack_limit, bss_end)
+/// Writable data region for the exception handler stack.
+pub fn eh_stack_range() -> Range<VirtualAddress> {
+    linker_region!(eh_stack_limit, init_eh_stack_pointer)
 }
 
 /// Range of the page at UART_PAGE_ADDR of PAGE_SIZE.
diff --git a/libs/libvmbase/src/layout/crosvm.rs b/libs/libvmbase/src/layout/crosvm.rs
index d859b20..39a8147 100644
--- a/libs/libvmbase/src/layout/crosvm.rs
+++ b/libs/libvmbase/src/layout/crosvm.rs
@@ -21,10 +21,13 @@
 /// The start address of MMIO space.
 pub const MMIO_START: usize = 0x0;
 /// The end address of MMIO space.
-pub const MMIO_END: usize = 0x4000_0000;
+pub const MMIO_END: usize = PVMFW_START;
 /// MMIO range.
 pub const MMIO_RANGE: Range<usize> = MMIO_START..MMIO_END;
 
+/// Start pvmfw region.
+pub const PVMFW_START: usize = 0x7fc00000;
+
 /// The start of the system's contiguous "main" memory.
 pub const MEM_START: usize = 0x8000_0000;
 
diff --git a/libs/libvmbase/src/linker.rs b/libs/libvmbase/src/linker.rs
index 97bef3f..8654cf9 100644
--- a/libs/libvmbase/src/linker.rs
+++ b/libs/libvmbase/src/linker.rs
@@ -35,6 +35,12 @@
     pub static dtb_end: u8;
     /// First byte of the region available for the exception handler stack.
     pub static eh_stack_limit: u8;
+    /// First byte of the `.image_footer` section.
+    pub static image_footer_begin: u8;
+    /// First byte beyond the `.image_footer` section.
+    pub static image_footer_end: u8;
+    /// First byte past the region available for the exception handler stack.
+    pub static init_eh_stack_pointer: u8;
     /// First byte past the region available for the stack.
     pub static init_stack_pointer: u8;
     /// First byte of the `.rodata` section.
diff --git a/tests/Terminal/src/com/android/virtualization/terminal/TerminalAppTest.java b/tests/Terminal/src/com/android/virtualization/terminal/TerminalAppTest.java
index 3c0461d..42c31e3 100644
--- a/tests/Terminal/src/com/android/virtualization/terminal/TerminalAppTest.java
+++ b/tests/Terminal/src/com/android/virtualization/terminal/TerminalAppTest.java
@@ -33,6 +33,7 @@
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -88,7 +89,7 @@
     }
 
     @After
-    public void tearDown() {
-        InstallUtils.deleteInstallation(mTargetContext);
+    public void tearDown() throws IOException {
+        InstalledImage.getDefault(mTargetContext).uninstallFully();
     }
 }
diff --git a/tests/hostside/java/com/android/microdroid/test/MicrodroidHostTests.java b/tests/hostside/java/com/android/microdroid/test/MicrodroidHostTests.java
index fefedc9..630df87 100644
--- a/tests/hostside/java/com/android/microdroid/test/MicrodroidHostTests.java
+++ b/tests/hostside/java/com/android/microdroid/test/MicrodroidHostTests.java
@@ -405,6 +405,7 @@
                         VIRT_APEX + "bin/vm run",
                         "--console " + CONSOLE_PATH,
                         "--log " + LOG_PATH,
+                        "--name " + "microdroid", // to still be seen as microdroid vm
                         configPath);
 
         PipedInputStream pis = new PipedInputStream();
diff --git a/tests/hostside/java/com/android/microdroid/test/goldens/dt_dump_golden.dts b/tests/hostside/java/com/android/microdroid/test/goldens/dt_dump_golden.dts
index 795c50f..095eb54 100644
--- a/tests/hostside/java/com/android/microdroid/test/goldens/dt_dump_golden.dts
+++ b/tests/hostside/java/com/android/microdroid/test/goldens/dt_dump_golden.dts
@@ -104,8 +104,8 @@
                 dma-coherent;
                 interrupt-map = <0x800 0x00 0x00 0x01 0x01 0x00 0x00 0x00 0x04 0x04 0x1000 0x00 0x00 0x01 0x01 0x00 0x00 0x00 0x05 0x04 0x1800 0x00 0x00 0x01 0x01 0x00 0x00 0x00 0x06 0x04 0x2000 0x00 0x00 0x01 0x01 0x00 0x00 0x00 0x07 0x04 0x2800 0x00 0x00 0x01 0x01 0x00 0x00 0x00 0x08 0x04 0x3000 0x00 0x00 0x01 0x01 0x00 0x00 0x00 0x09 0x04 0x3800 0x00 0x00 0x01 0x01 0x00 0x00 0x00 0x0a 0x04 0x4000 0x00 0x00 0x01 0x01 0x00 0x00 0x00 0x0b 0x04 0x4800 0x00 0x00 0x01 0x01 0x00 0x00 0x00 0x0c 0x04>;
                 interrupt-map-mask = <0xf800 0x00 0x00 0x07 0xf800 0x00 0x00 0x07 0xf800 0x00 0x00 0x07 0xf800 0x00 0x00 0x07 0xf800 0x00 0x00 0x07 0xf800 0x00 0x00 0x07 0xf800 0x00 0x00 0x07 0xf800 0x00 0x00 0x07 0xf800 0x00 0x00 0x07>;
-                ranges = <0x3000000 0x00 0x2000000 0x00 0x2000000 0x00 0x2000000 0x43000000 0x00 0x90800000 0x00 0x90800000 0xff 0x6f800000>;
-                reg = <0x00 0x10000 0x00 0x1000000>;
+                ranges = <0x3000000 0x00 0x70000000 0x00 0x70000000 0x00 0x2000000 0x43000000 0x00 0x90800000 0x00 0x90800000 0xff 0x6f800000>;
+                reg = <0x00 0x72000000 0x00 0x1000000>;
         };
 
         pclk@3M {
diff --git a/tests/hostside/java/com/android/microdroid/test/goldens/dt_dump_protected_golden.dts b/tests/hostside/java/com/android/microdroid/test/goldens/dt_dump_protected_golden.dts
index 5761c15..f2ebdf9 100644
--- a/tests/hostside/java/com/android/microdroid/test/goldens/dt_dump_protected_golden.dts
+++ b/tests/hostside/java/com/android/microdroid/test/goldens/dt_dump_protected_golden.dts
@@ -105,8 +105,8 @@
                 interrupt-map = <0x800 0x00 0x00 0x01 0x01 0x00 0x00 0x00 0x04 0x04 0x1000 0x00 0x00 0x01 0x01 0x00 0x00 0x00 0x05 0x04 0x1800 0x00 0x00 0x01 0x01 0x00 0x00 0x00 0x06 0x04 0x2000 0x00 0x00 0x01 0x01 0x00 0x00 0x00 0x07 0x04 0x2800 0x00 0x00 0x01 0x01 0x00 0x00 0x00 0x08 0x04 0x3000 0x00 0x00 0x01 0x01 0x00 0x00 0x00 0x09 0x04 0x3800 0x00 0x00 0x01 0x01 0x00 0x00 0x00 0x0a 0x04 0x4000 0x00 0x00 0x01 0x01 0x00 0x00 0x00 0x0b 0x04>;
                 interrupt-map-mask = <0xf800 0x00 0x00 0x07 0xf800 0x00 0x00 0x07 0xf800 0x00 0x00 0x07 0xf800 0x00 0x00 0x07 0xf800 0x00 0x00 0x07 0xf800 0x00 0x00 0x07 0xf800 0x00 0x00 0x07 0xf800 0x00 0x00 0x07>;
                 memory-region = <0x02>;
-                ranges = <0x3000000 0x00 0x2000000 0x00 0x2000000 0x00 0x2000000 0x43000000 0x00 0x91600000 0x00 0x91600000 0xff 0x6ea00000>;
-                reg = <0x00 0x10000 0x00 0x1000000>;
+                ranges = <0x3000000 0x00 0x70000000 0x00 0x70000000 0x00 0x2000000 0x43000000 0x00 0x91600000 0x00 0x91600000 0xff 0x6ea00000>;
+                reg = <0x00 0x72000000 0x00 0x1000000>;
         };
 
         pclk@3M {