Merge "Change CarPropertyListeners to be notified by rate."
diff --git a/.gitignore b/.gitignore
index 697ef2d..577e3ca 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,5 +4,6 @@
 *.iml
 gen/
 *.pyc
+*.swp
 __pycache__
-.idea
\ No newline at end of file
+.idea
diff --git a/EncryptionRunner/Android.bp b/EncryptionRunner/Android.bp
new file mode 100644
index 0000000..b02e6de
--- /dev/null
+++ b/EncryptionRunner/Android.bp
@@ -0,0 +1,49 @@
+// Copyright (C) 2019 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.
+
+android_library {
+    name: "EncryptionRunner",
+    min_sdk_version: "23",
+    product_variables: {
+        pdk: {
+            enabled: false,
+        },
+    },
+    srcs: [
+        "src/**/*.java",
+    ],
+}
+
+android_test {
+    name: "EncryptionRunnerTest",
+    min_sdk_version: "23",
+    srcs: [
+        "test/**/*.java",
+    ],
+    product_variables: {
+        pdk: {
+            enabled: false,
+        },
+    },
+    libs: [
+        "android.test.base",
+        "android.test.runner",
+    ],
+    static_libs: [
+        "androidx.test.rules",
+        "EncryptionRunner",
+        "junit",
+        "truth-prebuilt",
+    ],
+}
diff --git a/EncryptionRunner/AndroidManifest.xml b/EncryptionRunner/AndroidManifest.xml
new file mode 100644
index 0000000..8d7643e
--- /dev/null
+++ b/EncryptionRunner/AndroidManifest.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2019 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.
+-->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+        xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
+        package="android.car.encryptionrunner" >
+    <uses-sdk android:minSdkVersion="23" android:targetSdkVersion="23" />
+    <application>
+        <uses-library android:name="android.test.runner" />
+    </application>
+    <instrumentation
+        android:name="androidx.test.runner.AndroidJUnitRunner"
+        android:targetPackage="android.car.encryptionrunner"
+        android:label="Encryption Runner Tests" />
+</manifest>
diff --git a/EncryptionRunner/AndroidTest.xml b/EncryptionRunner/AndroidTest.xml
new file mode 100644
index 0000000..b6cbbfa
--- /dev/null
+++ b/EncryptionRunner/AndroidTest.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2019 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.
+-->
+<configuration description="Runs Tests for EncryptionRunner.">
+    <option name="test-tag" value="EncryptionRunnerTest" />
+
+    <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
+        <option name="cleanup-apks" value="true" />
+        <option name="test-file-name" value="EncryptionRunnerTest.apk" />
+    </target_preparer>
+
+    <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
+        <option name="package" value="android.car.encryptionrunner" />
+        <option name="runner" value="androidx.test.runner.AndroidJUnitRunner" />
+        <option name="hidden-api-checks" value="false"/>
+    </test>
+</configuration>
diff --git a/EncryptionRunner/src/android/car/encryptionrunner/DummyEncryptionRunner.java b/EncryptionRunner/src/android/car/encryptionrunner/DummyEncryptionRunner.java
new file mode 100644
index 0000000..b08c985
--- /dev/null
+++ b/EncryptionRunner/src/android/car/encryptionrunner/DummyEncryptionRunner.java
@@ -0,0 +1,138 @@
+/*
+ * Copyright (C) 2019 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 android.car.encryptionrunner;
+
+import android.annotation.IntDef;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * An ecnryption runnner that doesn't actually do encryption. Useful for debugging. Do not use in
+ * production environments.
+ */
+class DummyEncryptionRunner implements EncryptionRunner {
+
+    private static final String KEY = "key";
+    private static final String INIT = "init";
+    private static final String INIT_RESPONSE = "initResponse";
+    private static final String CLIENT_RESPONSE = "clientResponse";
+    public static final String PIN = "1234";
+
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef({Mode.UNKNOWN, Mode.CLIENT, Mode.SERVER})
+    private @interface Mode {
+
+        int UNKNOWN = 0;
+        int CLIENT = 1;
+        int SERVER = 2;
+    }
+
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef({State.UNKNOWN, State.WAITING_FOR_RESPONSE, State.FINISHED})
+    private @interface State {
+
+        int UNKNOWN = 0;
+        int WAITING_FOR_RESPONSE = 1;
+        int FINISHED = 2;
+    }
+
+    @Mode
+    private int mMode;
+    @State
+    private int mState;
+
+    @Override
+    public HandshakeMessage initHandshake() {
+        mMode = Mode.CLIENT;
+        mState = State.WAITING_FOR_RESPONSE;
+        return HandshakeMessage.newBuilder()
+                .setNextMessage(INIT.getBytes())
+                .build();
+    }
+
+    @Override
+    public HandshakeMessage respondToInitRequest(byte[] initializationRequest)
+            throws HandshakeException {
+        mMode = Mode.SERVER;
+        if (!new String(initializationRequest).equals(INIT)) {
+            throw new HandshakeException("Unexpected initialization request");
+        }
+        mState = State.WAITING_FOR_RESPONSE;
+        return HandshakeMessage.newBuilder()
+                .setNextMessage(INIT_RESPONSE.getBytes())
+                .build();
+    }
+
+    @Override
+    public HandshakeMessage continueHandshake(byte[] response) throws HandshakeException {
+        if (mState != State.WAITING_FOR_RESPONSE) {
+            throw new HandshakeException("not waiting for response but got one");
+        }
+        switch(mMode) {
+            case Mode.SERVER:
+                if (!CLIENT_RESPONSE.equals(new String(response))) {
+                    throw new HandshakeException("unexpected response: " + new String(response));
+                }
+                mState = State.FINISHED;
+                return HandshakeMessage.newBuilder()
+                        .setHandshakeComplete(true)
+                        .setKey(new DummyKey())
+                        .build();
+            case Mode.CLIENT:
+                if (!INIT_RESPONSE.equals(new String(response))) {
+                    throw new HandshakeException("unexpected response: " + new String(response));
+                }
+                mState = State.FINISHED;
+                return HandshakeMessage.newBuilder()
+                        .setHandshakeComplete(true)
+                        .setKey(new DummyKey())
+                        .setNextMessage(CLIENT_RESPONSE.getBytes())
+                        .build();
+            default:
+                throw new IllegalStateException();
+        }
+    }
+
+    @Override
+    public Key keyOf(byte[] serialized) {
+        return new DummyKey();
+    }
+
+    @Override
+    public String getPin() {
+        return PIN;
+    }
+
+    @Override
+    public byte[] encryptData(Key key, byte[] data) {
+        return data;
+    }
+
+    @Override
+    public byte[] decryptData(Key key, byte[] encryptedData) {
+        return encryptedData;
+    }
+
+    private class DummyKey implements Key {
+
+        @Override
+        public byte[] asBytes() {
+            return KEY.getBytes();
+        }
+    }
+}
diff --git a/EncryptionRunner/src/android/car/encryptionrunner/EncryptionRunner.java b/EncryptionRunner/src/android/car/encryptionrunner/EncryptionRunner.java
new file mode 100644
index 0000000..7e7bd3e
--- /dev/null
+++ b/EncryptionRunner/src/android/car/encryptionrunner/EncryptionRunner.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2019 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 android.car.encryptionrunner;
+
+import android.annotation.NonNull;
+
+/**
+ * A generalized interface that allows for generating shared secrets as well as encrypting
+ * messages.
+ */
+public interface EncryptionRunner {
+
+    /**
+     * Starts an encryption handshake.
+     *
+     * @return A handshake message with information about the handshake that is started.
+     */
+    HandshakeMessage initHandshake();
+
+    /**
+     * Starts an encryption handshake where the device that is being communicated with already
+     * initiated the request.
+     *
+     * @param initializationRequest the bytes that the other device sent over.
+     * @return a handshake message with information about the handshake.
+     * @throws HandshakeException if initialization request is invalid.
+     */
+    HandshakeMessage respondToInitRequest(@NonNull byte[] initializationRequest)
+            throws HandshakeException;
+
+    /**
+     * Continues a handshake after receiving another response from the connected device.
+     *
+     * @param response the response from the other device.
+     * @return a message that can be used to continue the handshake.
+     * @throws HandshakeException if unexpected bytes in response.
+     */
+    HandshakeMessage continueHandshake(@NonNull byte[] response) throws HandshakeException;
+
+    /**
+     * De seriliazes a previously serilized key generated by an instance of this encryption runner.
+     *
+     * @param serialized the serialized bytes of the key.
+     * @return the Key object used for encryption.
+     */
+    Key keyOf(@NonNull byte[] serialized);
+
+    /**
+     * A user visible shared pin. This pin can be used to verify that both devices that are
+     * communicating have agreed to the same key and will be shown to a user.
+     *
+     * @return the user visible pin.
+     */
+    String getPin();
+
+    /**
+     * Encrypts data using an encryption key.
+     *
+     * @param key  the key used to encrypt the data.
+     * @param data the data to be encrypted
+     * @return the encrypted data.
+     */
+    byte[] encryptData(@NonNull Key key, @NonNull byte[] data);
+
+    /**
+     * Decrypts data using a specified key.
+     *
+     * @param key           The key used to decrypt the data.
+     * @param encryptedData The encrypted data.
+     * @return decrypted data.
+     */
+    byte[] decryptData(@NonNull Key key, @NonNull byte[] encryptedData);
+}
diff --git a/EncryptionRunner/src/android/car/encryptionrunner/EncryptionRunnerFactory.java b/EncryptionRunner/src/android/car/encryptionrunner/EncryptionRunnerFactory.java
new file mode 100644
index 0000000..d975835
--- /dev/null
+++ b/EncryptionRunner/src/android/car/encryptionrunner/EncryptionRunnerFactory.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2019 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 android.car.encryptionrunner;
+
+/**
+ * Factory that creates encryption runner.
+ */
+public class EncryptionRunnerFactory {
+
+    /**
+     * Creates a new {@link EncryptionRunner} one that doesn't actually do encryption but is useful
+     * for testing.
+     */
+    static EncryptionRunner newDummyRunner() {
+        return new DummyEncryptionRunner();
+    }
+}
diff --git a/EncryptionRunner/src/android/car/encryptionrunner/HandshakeException.java b/EncryptionRunner/src/android/car/encryptionrunner/HandshakeException.java
new file mode 100644
index 0000000..02c873c
--- /dev/null
+++ b/EncryptionRunner/src/android/car/encryptionrunner/HandshakeException.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2019 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 android.car.encryptionrunner;
+
+/**
+ * Exception indicating an error during a Handshake of EncryptionRunner.
+ */
+public class HandshakeException extends Exception {
+
+    public HandshakeException(String message) {
+        super(message);
+    }
+}
diff --git a/EncryptionRunner/src/android/car/encryptionrunner/HandshakeMessage.java b/EncryptionRunner/src/android/car/encryptionrunner/HandshakeMessage.java
new file mode 100644
index 0000000..5286770
--- /dev/null
+++ b/EncryptionRunner/src/android/car/encryptionrunner/HandshakeMessage.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2019 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 android.car.encryptionrunner;
+
+import android.annotation.Nullable;
+
+/**
+ * During an {@link EncryptionRunner} handshake process, these are the messages returned as part
+ * of each step.
+ */
+public class HandshakeMessage {
+
+    private final boolean mHandShakeComplete;
+    private final Key mKey;
+    private final byte[] mNextMessage;
+
+    /**
+     * @return Returns a builder for {@link HandshakeMessage}.
+     */
+    public static Builder newBuilder() {
+        return new Builder();
+    }
+
+    /**
+     * Use the builder;
+     */
+    private HandshakeMessage(
+            boolean handShakeComplete,
+            @Nullable Key key,
+            @Nullable byte[] nextMessage) {
+        mHandShakeComplete = handShakeComplete;
+        mKey = key;
+        mNextMessage = nextMessage;
+    }
+
+    /**
+     * Returns the next message to send in a handshake.
+     */
+    @Nullable
+    public byte[] getNextMessage() {
+        return mNextMessage == null ? null : mNextMessage.clone();
+    }
+
+    /**
+     * Returns true if the handshake is complete.
+     */
+    public boolean isHandShakeComplete() {
+        return mHandShakeComplete;
+    }
+
+    /**
+     * Returns the encryption key that can be used to encrypt data.
+     */
+    @Nullable
+    public Key getKey() {
+        return mKey;
+    }
+
+    static class Builder {
+        boolean mHandshakeComplete;
+        Key mKey;
+        byte[] mNextMessage;
+
+        Builder setHandshakeComplete(boolean handshakeComplete) {
+            mHandshakeComplete = handshakeComplete;
+            return this;
+        }
+
+        Builder setKey(Key key) {
+            mKey = key;
+            return this;
+        }
+
+        Builder setNextMessage(byte[] nextMessage) {
+            mNextMessage = nextMessage == null ? null : nextMessage.clone();
+            return this;
+        }
+
+        HandshakeMessage build() {
+            return new HandshakeMessage(mHandshakeComplete, mKey, mNextMessage);
+        }
+    }
+}
diff --git a/EncryptionRunner/src/android/car/encryptionrunner/Key.java b/EncryptionRunner/src/android/car/encryptionrunner/Key.java
new file mode 100644
index 0000000..97dd362
--- /dev/null
+++ b/EncryptionRunner/src/android/car/encryptionrunner/Key.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2019 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 android.car.encryptionrunner;
+
+import android.annotation.NonNull;
+
+/**
+ * Represents a serializable encryption key.
+ */
+public interface Key {
+    /**
+     * Returns a serialized encryption key.
+     */
+    @NonNull byte[] asBytes();
+}
diff --git a/EncryptionRunner/test/android/car/encryptionrunner/EncryptionRunnerTest.java b/EncryptionRunner/test/android/car/encryptionrunner/EncryptionRunnerTest.java
new file mode 100644
index 0000000..d08b37a
--- /dev/null
+++ b/EncryptionRunner/test/android/car/encryptionrunner/EncryptionRunnerTest.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2018 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 android.car.encryptionrunner;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import androidx.test.runner.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+public class EncryptionRunnerTest {
+
+    private static final byte[] sTestData = "test data".getBytes();
+
+    @Test
+    public void happyFlow() throws Exception {
+        // This performs a handshake and then sends an "encrypted" message back and forth.
+        // Any encryption runner should be able to do this.
+        // Right now just using the dummy runner, when we have a real runner we can extract this
+        // method or just have the factory create a real runner.
+        EncryptionRunner clientRunner = EncryptionRunnerFactory.newDummyRunner();
+        EncryptionRunner serverRunner = EncryptionRunnerFactory.newDummyRunner();
+        HandshakeMessage initialClientMessage = clientRunner.initHandshake();
+
+        assertThat(initialClientMessage.isHandShakeComplete()).isFalse();
+        assertThat(initialClientMessage.getKey()).isNull();
+        assertThat(initialClientMessage.getNextMessage()).isNotNull();
+
+        HandshakeMessage initialServerMessage =
+                serverRunner.respondToInitRequest(initialClientMessage.getNextMessage());
+
+        assertThat(initialServerMessage.isHandShakeComplete()).isFalse();
+        assertThat(initialServerMessage.getKey()).isNull();
+        assertThat(initialServerMessage.getNextMessage()).isNotNull();
+
+        HandshakeMessage clientMessage =
+                clientRunner.continueHandshake(initialServerMessage.getNextMessage());
+
+        assertThat(clientMessage.isHandShakeComplete()).isTrue();
+        assertThat(clientMessage.getKey()).isNotNull();
+        assertThat(clientMessage.getNextMessage()).isNotNull();
+
+        HandshakeMessage serverMessage =
+                serverRunner.continueHandshake(clientMessage.getNextMessage());
+
+        assertThat(serverMessage.isHandShakeComplete()).isTrue();
+        assertThat(serverMessage.getKey()).isNotNull();
+        assertThat(serverMessage.getNextMessage()).isNull();
+
+        assertThat(serverRunner.decryptData(
+                serverMessage.getKey(),
+                clientRunner.encryptData(clientMessage.getKey(), sTestData))).isEqualTo(sTestData);
+        assertThat(clientRunner.decryptData(
+                clientMessage.getKey(),
+                serverRunner.encryptData(serverMessage.getKey(), sTestData))).isEqualTo(sTestData);
+    }
+
+}
diff --git a/OWNERS b/OWNERS
new file mode 100644
index 0000000..b59c421
--- /dev/null
+++ b/OWNERS
@@ -0,0 +1,2 @@
+# Each subdirectory should have its OWNERS.
+# Owned by Android Automotive Embedded (go/aae).
diff --git a/TrustAgent/Android.mk b/TrustAgent/Android.mk
deleted file mode 100644
index bef1402..0000000
--- a/TrustAgent/Android.mk
+++ /dev/null
@@ -1,48 +0,0 @@
-# Copyright (C) 2016 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.
-#
-
-ifneq ($(TARGET_BUILD_PDK), true)
-
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
-
-LOCAL_USE_AAPT2 := true
-
-LOCAL_JAVA_LIBRARIES += android.car
-
-LOCAL_STATIC_ANDROID_LIBRARIES += \
-    androidx.car_car
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-LOCAL_PACKAGE_NAME := CarTrustAgentService
-LOCAL_PRIVATE_PLATFORM_APIS := true
-
-LOCAL_PRIVILEGED_MODULE := true
-
-# Remove this to verify permission checks are working correctly
-LOCAL_CERTIFICATE := platform
-
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_PROGUARD_ENABLED := disabled
-
-LOCAL_DEX_PREOPT := false
-
-include $(BUILD_PACKAGE)
-
-endif
diff --git a/TrustAgent/AndroidManifest.xml b/TrustAgent/AndroidManifest.xml
deleted file mode 100644
index 2b7944d..0000000
--- a/TrustAgent/AndroidManifest.xml
+++ /dev/null
@@ -1,85 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2016 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
-  -->
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.android.car.trust">
-    <uses-sdk android:minSdkVersion="23" android:targetSdkVersion="23"/>
-
-    <!-- Need Bluetooth LE -->
-    <uses-feature android:name="android.hardware.bluetooth_le" android:required="true" />
-
-    <uses-permission android:name="android.permission.BLUETOOTH" />
-    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
-    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
-    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
-
-    <!-- Needed to unlock user -->
-    <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />
-    <!-- TODO(b/77717079) INTERACT_ACROSS_USERS_FULL should have granted INTERACT_ACROSS_USERS -->
-    <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS" />
-    <uses-permission android:name="android.permission.MANAGE_USERS" />
-    <uses-permission android:name="android.permission.CONTROL_KEYGUARD" />
-    <uses-permission android:name="android.permission.PROVIDE_TRUST_AGENT" />
-    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
-
-    <application
-        android:label="@string/app_name"
-        android:theme="@style/Theme.Car.NoActionBar"
-        android:supportsRtl="true">
-
-        <service
-            android:name=".CarBleTrustAgent"
-            android:permission="android.permission.BIND_TRUST_AGENT"
-            android:directBootAware="true"
-            android:exported="true"
-            android:singleUser="true">
-            <intent-filter>
-                <action android:name="android.service.trust.TrustAgentService" />
-                <category android:name="android.intent.category.DEFAULT" />
-            </intent-filter>
-            <!-- Warning: the meta data must be included if the service is direct boot aware.
-                 If not included, the device will crash before boot completes. Rendering the
-                 device unusable. -->
-            <meta-data android:name="android.service.trust.trustagent"
-                       android:resource="@xml/car_sample_trust_agent"/>
-        </service>
-
-        <!-- CarTrustAgentBleService needs to be direct boot aware, since the trust agent
-             binds to it during direct boot.-->
-        <service
-            android:name=".CarTrustAgentBleService"
-            android:directBootAware="true"
-            android:singleUser="true">
-            <!-- Warning: the meta data must be included if the service is direct boot aware.
-                 If not included, the device will crash before boot completes. Rendering the device
-                 unusable. -->
-            <meta-data android:name="android.service.trust.trustagent"
-                       android:resource="@xml/car_sample_trust_agent"/>
-        </service>
-
-        <activity
-            android:name=".CarEnrolmentActivity"
-            android:label="@string/app_name"
-            android:exported="true"
-            android:launchMode="singleInstance">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.LAUNCHER" />
-            </intent-filter>
-        </activity>
-
-    </application>
-</manifest>
diff --git a/TrustAgent/res/layout/car_enrolment_activity.xml b/TrustAgent/res/layout/car_enrolment_activity.xml
deleted file mode 100644
index 70632f7..0000000
--- a/TrustAgent/res/layout/car_enrolment_activity.xml
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2017 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.
--->
-<LinearLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:background="@android:color/black"
-    android:orientation="vertical"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent">
-
-    <RelativeLayout
-        android:layout_width="match_parent"
-        android:layout_height="@dimen/car_app_bar_height" >
-
-        <TextView
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_alignParentStart="true"
-            android:layout_centerVertical="true"
-            android:layout_marginStart="@dimen/car_margin"
-            android:text="@string/app_name"
-            android:textAppearance="@style/TextAppearance.Car.Body1.Light" />
-
-        <Button
-            android:id="@+id/revoke_trust_button"
-            android:layout_width="wrap_content"
-            android:layout_centerVertical="true"
-            android:layout_toStartOf="@+id/start_button"
-            android:layout_marginEnd="@dimen/car_padding_4"
-            android:text="@string/revoke_trust"
-            style="?android:attr/borderlessButtonStyle" />
-
-        <Button
-            android:id="@+id/start_button"
-            android:layout_width="wrap_content"
-            android:layout_alignParentEnd="true"
-            android:layout_centerVertical="true"
-            android:layout_marginEnd="@dimen/car_keyline_1"
-            android:text="@string/start_advertising"
-            style="?android:attr/buttonStyle" />
-
-        <View
-            android:background="@color/car_list_divider_light"
-            android:layout_width="match_parent"
-            android:layout_height="@dimen/car_list_divider_height"
-            android:layout_alignParentBottom="true" />
-    </RelativeLayout>
-
-    <androidx.car.widget.PagedListView
-        android:id="@+id/list"
-        android:layout_marginTop="@dimen/car_padding_4"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        app:showPagedListViewDivider="false"
-        app:gutter="both"/>
-</LinearLayout>
diff --git a/TrustAgent/res/layout/output_line.xml b/TrustAgent/res/layout/output_line.xml
deleted file mode 100644
index 53eba57..0000000
--- a/TrustAgent/res/layout/output_line.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2018 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.
-  -->
-<TextView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/output"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:textAppearance="@style/TextAppearance.Car.Body3.Light" />
diff --git a/TrustAgent/res/values/strings.xml b/TrustAgent/res/values/strings.xml
deleted file mode 100644
index c8dcc18..0000000
--- a/TrustAgent/res/values/strings.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2017 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>
-    <string name="app_name">CarTrustAgentService</string>
-    <string name="trust_granted_explanation">Unlock via escrow token, now granting trust</string>
-
-    <!-- service/characteristics uuid for unlocking a device -->
-    <string name="unlock_service_uuid" translatable="false">5e2a68a1-27be-43f9-8d1e-4546976fabd7</string>
-    <string name="unlock_escrow_token_uiid" translatable="false">5e2a68a2-27be-43f9-8d1e-4546976fabd7</string>
-    <string name="unlock_handle_uiid" translatable="false">5e2a68a3-27be-43f9-8d1e-4546976fabd7</string>
-
-    <!-- service/characteristics uuid for adding new escrow token -->
-    <string name="enrollment_service_uuid" translatable="false">5e2a68a4-27be-43f9-8d1e-4546976fabd7</string>
-    <string name="enrollment_handle_uuid" translatable="false">5e2a68a5-27be-43f9-8d1e-4546976fabd7</string>
-    <string name="enrollment_token_uuid" translatable="false">5e2a68a6-27be-43f9-8d1e-4546976fabd7</string>
-
-    <string name="pref_key_token_handle" translatable="false">token-handle-key</string>
-    <string name="pref_key_escrow_token" translatable="false">escrow-token-key</string>
-
-    <string name="unlock_button">Unlock Car</string>
-    <string name="enroll_button">Enroll New Token</string>
-
-    <string name="start_advertising">Start Advertising</string>
-    <string name="revoke_trust">Revoke Trust</string>
-
-    <string name="token_handle_shared_preferences" translatable="false">com.android.car.trust.TOKEN_HANDLE</string>
-
-</resources>
diff --git a/TrustAgent/res/xml/car_sample_trust_agent.xml b/TrustAgent/res/xml/car_sample_trust_agent.xml
deleted file mode 100644
index 0c7d91d..0000000
--- a/TrustAgent/res/xml/car_sample_trust_agent.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2017 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
-  -->
-<trust-agent xmlns:android="http://schemas.android.com/apk/res/android"
-             xmlns:priv-android="http://schemas.android.com/apk/prv/res/android"
-             android:settingsActivity=".MainActivity"
-             priv-android:unlockProfile="true" />
diff --git a/TrustAgent/src/com/android/car/trust/CarBleTrustAgent.java b/TrustAgent/src/com/android/car/trust/CarBleTrustAgent.java
deleted file mode 100644
index 1dfbd50..0000000
--- a/TrustAgent/src/com/android/car/trust/CarBleTrustAgent.java
+++ /dev/null
@@ -1,303 +0,0 @@
-/*
- * Copyright (C) 2016 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.car.trust;
-
-import android.annotation.Nullable;
-import android.app.ActivityManager;
-import android.app.UserSwitchObserver;
-import android.bluetooth.BluetoothAdapter;
-import android.car.trust.ICarTrustAgentBleService;
-import android.car.trust.ICarTrustAgentTokenRequestDelegate;
-import android.car.trust.ICarTrustAgentUnlockCallback;
-import android.content.BroadcastReceiver;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.ServiceConnection;
-import android.os.IBinder;
-import android.os.RemoteException;
-import android.os.UserHandle;
-import android.service.trust.TrustAgentService;
-import android.util.Log;
-
-/**
- * A BluetoothLE (BLE) based {@link TrustAgentService} that uses the escrow token unlock APIs. </p>
- *
- * This trust agent runs during direct boot and binds to a BLE service that listens for remote
- * devices to trigger an unlock. <p/>
- *
- * The permissions for this agent must be enabled as priv-app permissions for it to start.
- */
-public class CarBleTrustAgent extends TrustAgentService {
-
-    private static final String TAG = CarBleTrustAgent.class.getSimpleName();
-
-    /**
-     * {@link CarTrustAgentBleService} will callback this function when it receives both
-     * handle and token.
-     */
-    private final ICarTrustAgentUnlockCallback mUnlockCallback =
-            new ICarTrustAgentUnlockCallback.Stub() {
-        @Override
-        public void onUnlockDataReceived(byte[] token, long handle) throws RemoteException {
-            UserHandle userHandle = getUserHandleByTokenHandle(handle);
-            if (userHandle == null) {
-                Log.e(TAG, "Unable to find user by token handle " + handle);
-                return;
-            }
-
-            int uid = userHandle.getIdentifier();
-            if (ActivityManager.getCurrentUser() != uid) {
-                Log.d(TAG, "Switch to user: " + uid);
-                // Try to unlock when user switch completes
-                ActivityManager.getService().registerUserSwitchObserver(
-                        getUserSwitchObserver(uid, token, handle), TAG);
-                ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
-                am.switchUser(uid);
-            } else {
-                unlockUserInternally(uid, token, handle);
-            }
-        }
-    };
-
-    /**
-     * Delegates the escrow token API calls from {@link CarTrustAgentBleService} to
-     * {@link TrustAgentService}. Due to the asynchronous nature, the results will be posted to
-     * {@link CarTrustAgentBleService} by the following calls
-     * <ul>
-     *     <li>{@link #onEscrowTokenAdded(byte[], long, UserHandle)}</li>
-     *     <li>{@link #onEscrowTokenRemoved(long, boolean)}</li>
-     *     <li>{@link #onEscrowTokenStateReceived(long, int)}</li>
-     * </ul>
-     */
-    private final ICarTrustAgentTokenRequestDelegate mTokenRequestDelegate =
-            new ICarTrustAgentTokenRequestDelegate.Stub() {
-        @Override
-        public void revokeTrust() {
-            CarBleTrustAgent.this.revokeTrust();
-        }
-
-        @Override
-        public void addEscrowToken(byte[] token, int uid) {
-            CarBleTrustAgent.this.addEscrowToken(token, UserHandle.of(uid));
-        }
-
-        @Override
-        public void removeEscrowToken(long handle, int uid) {
-            CarBleTrustAgent.this.removeEscrowToken(handle, UserHandle.of(uid));
-        }
-
-        @Override
-        public void isEscrowTokenActive(long handle, int uid) {
-            CarBleTrustAgent.this.isEscrowTokenActive(handle, UserHandle.of(uid));
-        }
-    };
-
-    /**
-     * Service connection to {@link CarTrustAgentBleService}
-     */
-    private final ServiceConnection mServiceConnection = new ServiceConnection() {
-        @Override
-        public void onServiceConnected(ComponentName name, IBinder service) {
-            Log.d(TAG, "CarTrustAgentBleService connected");
-            mCarTrustAgentBleServiceBound = true;
-            mCarTrustAgentBleService = ICarTrustAgentBleService.Stub.asInterface(service);
-            try {
-                mCarTrustAgentBleService.registerUnlockCallback(mUnlockCallback);
-                mCarTrustAgentBleService.setTokenRequestDelegate(mTokenRequestDelegate);
-            } catch (RemoteException e) {
-                Log.e(TAG, "Error registerUnlockCallback", e);
-            }
-        }
-
-        @Override
-        public void onServiceDisconnected(ComponentName name) {
-            Log.d(TAG, "CarTrustAgentBleService disconnected");
-            if (mCarTrustAgentBleService != null) {
-                try {
-                    mCarTrustAgentBleService.unregisterUnlockCallback(mUnlockCallback);
-                    mCarTrustAgentBleService.setTokenRequestDelegate(null);
-                    mCarTrustAgentBleService.stopUnlockAdvertising();
-                } catch (RemoteException e) {
-                    Log.e(TAG, "Error unregisterUnlockCallback", e);
-                }
-                mCarTrustAgentBleService = null;
-                mCarTrustAgentBleServiceBound = false;
-            }
-        }
-    };
-
-    /**
-     * Receives the bluetooth state change broadcasts. Bluetooth is restarted when switching user,
-     * we need to ensure calling {@link ICarTrustAgentBleService#startUnlockAdvertising} after
-     * bluetooth is started.
-     */
-    private final BroadcastReceiver mBluetoothBroadcastReceiver = new BroadcastReceiver() {
-        @Override
-        public void onReceive(Context context, Intent intent) {
-            switch (intent.getAction()) {
-                case BluetoothAdapter.ACTION_STATE_CHANGED:
-                    onBluetoothStateChanged(intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, -1));
-                    break;
-            }
-        }
-    };
-
-    private ICarTrustAgentBleService mCarTrustAgentBleService;
-    private boolean mCarTrustAgentBleServiceBound;
-
-    /**
-     * TODO: Currently it relies on {@link #onDeviceLocked()} and {@link #onDeviceUnlocked()}
-     * callback, and these callbacks won't happen if the user has unlocked once.
-     */
-    private boolean mIsOnLockScreen;
-
-    @Override
-    public void onCreate() {
-        super.onCreate();
-        setManagingTrust(true);
-        bindService(new Intent(this, CarTrustAgentBleService.class),
-                mServiceConnection, Context.BIND_AUTO_CREATE);
-        IntentFilter intentFilter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
-        registerReceiver(mBluetoothBroadcastReceiver, intentFilter);
-    }
-
-    @Override
-    public void onDestroy() {
-        Log.d(TAG, "Car Trust agent shutting down");
-        if (mCarTrustAgentBleServiceBound) {
-            unbindService(mServiceConnection);
-        }
-        unregisterReceiver(mBluetoothBroadcastReceiver);
-        super.onDestroy();
-    }
-
-    @Override
-    public void onDeviceLocked() {
-        super.onDeviceLocked();
-        mIsOnLockScreen = true;
-        if (mCarTrustAgentBleServiceBound) {
-            try {
-                mCarTrustAgentBleService.startUnlockAdvertising();
-            } catch (RemoteException e) {
-                Log.e(TAG, "Error startUnlockAdvertising", e);
-            }
-        }
-    }
-
-    @Override
-    public void onDeviceUnlocked() {
-        super.onDeviceUnlocked();
-        mIsOnLockScreen = false;
-        if (mCarTrustAgentBleServiceBound) {
-            try {
-                mCarTrustAgentBleService.stopUnlockAdvertising();
-            } catch (RemoteException e) {
-                Log.e(TAG, "Error stopUnlockAdvertising", e);
-            }
-        }
-        // Revoke trust right after to enable keyguard when switching user
-        revokeTrust();
-    }
-
-    private UserSwitchObserver getUserSwitchObserver(int uid,
-            byte[] token, long handle) {
-        return new UserSwitchObserver() {
-            @Override
-            public void onUserSwitchComplete(int newUserId) throws RemoteException {
-                if (uid != newUserId) return;
-                unlockUserInternally(uid, token, handle);
-                ActivityManager.getService().unregisterUserSwitchObserver(this);
-            }
-
-            @Override
-            public void onLockedBootComplete(int newUserId) {
-                // ignored.
-            }
-        };
-    }
-
-    private void unlockUserInternally(int uid, byte[] token, long handle) {
-        Log.d(TAG, "About to unlock user: " + uid);
-        unlockUserWithToken(handle, token, UserHandle.of(uid));
-        grantTrust("Granting trust from escrow token",
-                0, FLAG_GRANT_TRUST_DISMISS_KEYGUARD);
-    }
-
-    private void onBluetoothStateChanged(int state) {
-        Log.d(TAG, "onBluetoothStateChanged: " + state);
-        if ((state == BluetoothAdapter.STATE_ON || state == BluetoothAdapter.STATE_BLE_ON)
-                && mCarTrustAgentBleServiceBound
-                && mIsOnLockScreen) {
-            try {
-                mCarTrustAgentBleService.startUnlockAdvertising();
-            } catch (RemoteException e) {
-                Log.e(TAG, "Error startUnlockAdvertising", e);
-            }
-        }
-    }
-
-    @Override
-    public void onEscrowTokenRemoved(long handle, boolean successful) {
-        if (mCarTrustAgentBleServiceBound) {
-            try {
-                mCarTrustAgentBleService.onEscrowTokenRemoved(handle, successful);
-                Log.v(TAG, "Callback onEscrowTokenRemoved");
-            } catch (RemoteException e) {
-                Log.e(TAG, "Error callback onEscrowTokenRemoved", e);
-            }
-        }
-    }
-
-    @Override
-    public void onEscrowTokenStateReceived(long handle, int tokenState) {
-        boolean isActive = tokenState == TOKEN_STATE_ACTIVE;
-        if (mCarTrustAgentBleServiceBound) {
-            try {
-                mCarTrustAgentBleService.onEscrowTokenActiveStateChanged(handle, isActive);
-                Log.v(TAG, "Callback onEscrowTokenActiveStateChanged");
-            } catch (RemoteException e) {
-                Log.e(TAG, "Error callback onEscrowTokenActiveStateChanged", e);
-            }
-        }
-    }
-
-    @Override
-    public void onEscrowTokenAdded(byte[] token, long handle, UserHandle user) {
-        if (mCarTrustAgentBleServiceBound) {
-            try {
-                mCarTrustAgentBleService.onEscrowTokenAdded(token, handle, user.getIdentifier());
-                Log.v(TAG, "Callback onEscrowTokenAdded");
-            } catch (RemoteException e) {
-                Log.e(TAG, "Error callback onEscrowTokenAdded", e);
-            }
-        }
-    }
-
-    private @Nullable UserHandle getUserHandleByTokenHandle(long tokenHandle) {
-        if (mCarTrustAgentBleServiceBound) {
-            try {
-                int userId = mCarTrustAgentBleService.getUserIdByEscrowTokenHandle(tokenHandle);
-                return userId < 0 ? null : UserHandle.of(userId);
-            } catch (RemoteException e) {
-                Log.e(TAG, "Error getUserHandleByTokenHandle");
-            }
-        }
-        return null;
-    }
-}
diff --git a/TrustAgent/src/com/android/car/trust/CarEnrolmentActivity.java b/TrustAgent/src/com/android/car/trust/CarEnrolmentActivity.java
deleted file mode 100644
index 45babf7..0000000
--- a/TrustAgent/src/com/android/car/trust/CarEnrolmentActivity.java
+++ /dev/null
@@ -1,314 +0,0 @@
-/*
- * Copyright (C) 2017 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.car.trust;
-
-import android.Manifest;
-import android.app.Activity;
-import android.bluetooth.BluetoothDevice;
-import android.car.trust.ICarTrustAgentBleCallback;
-import android.car.trust.ICarTrustAgentBleService;
-import android.car.trust.ICarTrustAgentEnrolmentCallback;
-import android.car.trust.ICarTrustAgentTokenResponseCallback;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.ServiceConnection;
-import android.content.SharedPreferences;
-import android.content.pm.PackageManager;
-import android.os.Bundle;
-import android.os.IBinder;
-import android.os.RemoteException;
-import android.os.UserHandle;
-import android.preference.PreferenceManager;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.TextView;
-
-import androidx.car.widget.PagedListView;
-import androidx.recyclerview.widget.RecyclerView;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Setup activity that binds {@link CarTrustAgentBleService} and starts the enrolment process.
- */
-public class CarEnrolmentActivity extends Activity {
-
-    private static final String TAG = CarEnrolmentActivity.class.getSimpleName();
-
-    private static final String SP_HANDLE_KEY = "sp-test";
-    private static final int FINE_LOCATION_REQUEST_CODE = 42;
-
-    private OutputAdapter mOutputAdapter;
-    private BluetoothDevice mBluetoothDevice;
-    private ICarTrustAgentBleService mCarTrustAgentBleService;
-    private boolean mCarTrustAgentBleServiceBound;
-    private SharedPreferences mPrefs;
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.car_enrolment_activity);
-
-        mPrefs = PreferenceManager.getDefaultSharedPreferences(/* context= */ this);
-
-        findViewById(R.id.start_button).setOnClickListener(v -> {
-            if (!mCarTrustAgentBleServiceBound) {
-                Intent bindIntent = new Intent(this, CarTrustAgentBleService.class);
-                bindService(bindIntent, mServiceConnection, Context.BIND_AUTO_CREATE);
-            }
-        });
-
-        findViewById(R.id.revoke_trust_button).setOnClickListener(v -> {
-            if (mCarTrustAgentBleServiceBound) {
-                try {
-                    mCarTrustAgentBleService.revokeTrust();
-                } catch (RemoteException e) {
-                    Log.e(TAG, "Error revokeTrust", e);
-                }
-            }
-        });
-
-        mOutputAdapter = new OutputAdapter();
-
-        PagedListView list = findViewById(R.id.list);
-        list.setAdapter(mOutputAdapter);
-    }
-
-    @Override
-    protected void onResume() {
-        super.onResume();
-
-        if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION)
-                != PackageManager.PERMISSION_GRANTED) {
-            requestPermissions(
-                    new String[] { android.Manifest.permission.ACCESS_FINE_LOCATION },
-                    FINE_LOCATION_REQUEST_CODE);
-        }
-    }
-
-    @Override
-    protected void onStop() {
-        super.onStop();
-
-        if (mCarTrustAgentBleServiceBound) {
-            unbindService(mServiceConnection);
-            mCarTrustAgentBleServiceBound = false;
-        }
-    }
-
-    private void appendOutputText(String text) {
-        runOnUiThread(() -> mOutputAdapter.addOutput(text));
-    }
-
-    private void addEscrowToken(byte[] token) throws RemoteException {
-        if (!mCarTrustAgentBleServiceBound) {
-            Log.e(TAG, "No CarTrustAgentBleService bounded");
-            return;
-        }
-        mCarTrustAgentBleService.addEscrowToken(token, UserHandle.myUserId());
-    }
-
-    private void checkTokenHandle() {
-        long tokenHandle = mPrefs.getLong(SP_HANDLE_KEY, -1);
-        if (tokenHandle != -1) {
-            if (Log.isLoggable(TAG, Log.DEBUG)) {
-                Log.d(TAG, "Checking handle active: " + tokenHandle);
-            }
-
-            if (mCarTrustAgentBleServiceBound) {
-                try {
-                    // Due to the asynchronous nature of isEscrowTokenActive in
-                    // TrustAgentService, query result will be delivered via
-                    // {@link #mCarTrustAgentTokenResponseCallback}
-                    mCarTrustAgentBleService.isEscrowTokenActive(tokenHandle,
-                            UserHandle.myUserId());
-                } catch (RemoteException e) {
-                    Log.e(TAG, "Error isEscrowTokenActive", e);
-                }
-            }
-        } else {
-            appendOutputText("No handles found");
-        }
-    }
-
-    /**
-     * Receives escrow token callbacks, registered on {@link CarTrustAgentBleService}
-     */
-    private final ICarTrustAgentTokenResponseCallback mCarTrustAgentTokenResponseCallback =
-            new ICarTrustAgentTokenResponseCallback.Stub() {
-        @Override
-        public void onEscrowTokenAdded(byte[] token, long handle, int uid) {
-            runOnUiThread(() -> {
-                mPrefs.edit().putLong(SP_HANDLE_KEY, handle).apply();
-
-                if (Log.isLoggable(TAG, Log.DEBUG)) {
-                    Log.d(TAG, "stored new handle for user: " + uid);
-                }
-            });
-
-            if (mBluetoothDevice == null) {
-                Log.e(TAG, "No active bluetooth found to add escrow token");
-                return;
-            }
-
-            try {
-                // Notify the enrolment client that escrow token has been added
-                mCarTrustAgentBleService.sendEnrolmentHandle(mBluetoothDevice, handle);
-                appendOutputText("Escrow Token Added. Handle: " + handle);
-                appendOutputText("Lock and unlock the device to activate token");
-            } catch (RemoteException e) {
-                Log.e(TAG, "Error sendEnrolmentHandle", e);
-            }
-        }
-
-        @Override
-        public void onEscrowTokenRemoved(long handle, boolean successful) {
-            appendOutputText("Escrow token Removed. Handle: " + handle);
-        }
-
-        @Override
-        public void onEscrowTokenActiveStateChanged(long handle, boolean active) {
-            appendOutputText("Is token active? " + active + " handle: " + handle);
-        }
-    };
-
-    /**
-     * Receives BLE state change callbacks, registered on {@link CarTrustAgentBleService}
-     */
-    private final ICarTrustAgentBleCallback mBleConnectionCallback =
-            new ICarTrustAgentBleCallback.Stub() {
-        @Override
-        public void onBleServerStartSuccess() {
-            appendOutputText("Server started");
-        }
-
-        @Override
-        public void onBleServerStartFailure(int errorCode) {
-            appendOutputText("Server failed to start, error code: " + errorCode);
-        }
-
-        @Override
-        public void onBleDeviceConnected(BluetoothDevice device) {
-            mBluetoothDevice = device;
-            appendOutputText("Device connected: " + device.getName()
-                    + " address: " + device.getAddress());
-        }
-
-        @Override
-        public void onBleDeviceDisconnected(BluetoothDevice device) {
-            mBluetoothDevice = null;
-            appendOutputText("Device disconnected: " + device.getName()
-                    + " address: " + device.getAddress());
-        }
-    };
-
-    /**
-     * {@link CarTrustAgentBleService} will callback this when receives enrolment data.
-     *
-     * <p>Here is the place we can prompt to the user on HU whether or not to add this
-     * {@link #mBluetoothDevice} as a trust device.
-     */
-    private final ICarTrustAgentEnrolmentCallback mEnrolmentCallback =
-            new ICarTrustAgentEnrolmentCallback.Stub() {
-        @Override
-        public void onEnrolmentDataReceived(byte[] token) {
-            appendOutputText("Enrolment data received ");
-            try {
-                addEscrowToken(token);
-            } catch (RemoteException e) {
-                Log.e(TAG, "Error addEscrowToken", e);
-            }
-        }
-    };
-
-    /**
-     * Service connection to {@link CarTrustAgentBleService}
-     */
-    private final ServiceConnection mServiceConnection = new ServiceConnection() {
-        @Override
-        public void onServiceConnected(ComponentName name, IBinder service) {
-            mCarTrustAgentBleServiceBound = true;
-            mCarTrustAgentBleService = ICarTrustAgentBleService.Stub.asInterface(service);
-            try {
-                mCarTrustAgentBleService.registerBleCallback(mBleConnectionCallback);
-                mCarTrustAgentBleService.registerEnrolmentCallback(mEnrolmentCallback);
-                mCarTrustAgentBleService.setTokenResponseCallback(
-                        mCarTrustAgentTokenResponseCallback);
-                mCarTrustAgentBleService.startEnrolmentAdvertising();
-            } catch (RemoteException e) {
-                Log.e(TAG, "Error startEnrolmentAdvertising", e);
-            }
-            checkTokenHandle();
-        }
-
-        @Override
-        public void onServiceDisconnected(ComponentName name) {
-            if (mCarTrustAgentBleService != null) {
-                try {
-                    mCarTrustAgentBleService.unregisterBleCallback(mBleConnectionCallback);
-                    mCarTrustAgentBleService.unregisterEnrolmentCallback(mEnrolmentCallback);
-                    mCarTrustAgentBleService.setTokenResponseCallback(null);
-                    mCarTrustAgentBleService.stopEnrolmentAdvertising();
-                } catch (RemoteException e) {
-                    Log.e(TAG, "Error unregister callbacks", e);
-                }
-                mCarTrustAgentBleService = null;
-            }
-            mCarTrustAgentBleServiceBound = false;
-        }
-    };
-
-    /** Adapter that displays the output of TrustAgent connections. */
-    private static class OutputAdapter extends RecyclerView.Adapter<OutputAdapter.ViewHolder> {
-        private final List<String> mOutput = new ArrayList<>();
-
-        /** Adds the given string as output to be displayed. */
-        public void addOutput(String output) {
-            mOutput.add(output);
-            notifyItemInserted(mOutput.size() - 1);
-        }
-
-        @Override
-        public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
-            return new ViewHolder(LayoutInflater.from(parent.getContext())
-                    .inflate(R.layout.output_line, parent, false));
-        }
-
-        @Override
-        public void onBindViewHolder(ViewHolder holder, int position) {
-            holder.mTextView.setText(mOutput.get(position));
-        }
-
-        @Override
-        public int getItemCount() {
-            return mOutput.size();
-        }
-
-        /** ViewHolder for {@link OutputAdapter}. */
-        public static class ViewHolder extends RecyclerView.ViewHolder {
-            private final TextView mTextView;
-
-            ViewHolder(View itemView) {
-                super(itemView);
-                mTextView = itemView.findViewById(R.id.output);
-            }
-        }
-    }
-}
diff --git a/TrustAgent/src/com/android/car/trust/CarTrustAgentBleService.java b/TrustAgent/src/com/android/car/trust/CarTrustAgentBleService.java
deleted file mode 100644
index 2cc2080..0000000
--- a/TrustAgent/src/com/android/car/trust/CarTrustAgentBleService.java
+++ /dev/null
@@ -1,395 +0,0 @@
-/*
- * Copyright (C) 2018 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.car.trust;
-
-import android.bluetooth.BluetoothDevice;
-import android.bluetooth.BluetoothGattCharacteristic;
-import android.bluetooth.BluetoothGattService;
-import android.car.trust.ICarTrustAgentBleCallback;
-import android.car.trust.ICarTrustAgentBleService;
-import android.car.trust.ICarTrustAgentEnrolmentCallback;
-import android.car.trust.ICarTrustAgentTokenRequestDelegate;
-import android.car.trust.ICarTrustAgentTokenResponseCallback;
-import android.car.trust.ICarTrustAgentUnlockCallback;
-import android.content.Intent;
-import android.content.SharedPreferences;
-import android.os.IBinder;
-import android.os.ParcelUuid;
-import android.os.RemoteCallbackList;
-import android.os.RemoteException;
-import android.util.Log;
-
-import java.nio.ByteBuffer;
-import java.util.UUID;
-
-/**
- * Abstracts enrolment and unlock token exchange via BluetoothLE (BLE).
- * {@link CarBleTrustAgent} and any enrolment client should bind to
- * {@link ICarTrustAgentBleService}.
- */
-public class CarTrustAgentBleService extends SimpleBleServer {
-
-    private static final String TAG = CarTrustAgentBleService.class.getSimpleName();
-
-    private RemoteCallbackList<ICarTrustAgentBleCallback> mBleCallbacks;
-    private RemoteCallbackList<ICarTrustAgentEnrolmentCallback> mEnrolmentCallbacks;
-    private RemoteCallbackList<ICarTrustAgentUnlockCallback> mUnlockCallbacks;
-    private ICarTrustAgentTokenRequestDelegate mTokenRequestDelegate;
-    private ICarTrustAgentTokenResponseCallback mTokenResponseCallback;
-    private CarTrustAgentBleWrapper mCarTrustBleService;
-
-    private ParcelUuid mEnrolmentUuid;
-    private BluetoothGattCharacteristic mEnrolmentEscrowToken;
-    private BluetoothGattCharacteristic mEnrolmentTokenHandle;
-    private BluetoothGattService mEnrolmentGattServer;
-
-    private ParcelUuid mUnlockUuid;
-    private BluetoothGattCharacteristic mUnlockEscrowToken;
-    private BluetoothGattCharacteristic mUnlockTokenHandle;
-    private BluetoothGattService mUnlockGattServer;
-    private byte[] mCurrentUnlockToken;
-    private Long mCurrentUnlockHandle;
-
-    private SharedPreferences mTokenHandleSharedPreferences;
-
-    @Override
-    public void onCreate() {
-        super.onCreate();
-        mBleCallbacks = new RemoteCallbackList<>();
-        mEnrolmentCallbacks = new RemoteCallbackList<>();
-        mUnlockCallbacks = new RemoteCallbackList<>();
-        mCarTrustBleService = new CarTrustAgentBleWrapper();
-
-        setupEnrolmentBleServer();
-        setupUnlockBleServer();
-
-        mTokenHandleSharedPreferences = getSharedPreferences(
-                getString(R.string.token_handle_shared_preferences),
-                MODE_PRIVATE);
-    }
-
-    @Override
-    public IBinder onBind(Intent intent) {
-        return mCarTrustBleService;
-    }
-
-    @Override
-    public int onStartCommand(Intent intent, int flags, int startId) {
-        // keep it alive.
-        return START_STICKY;
-    }
-
-    @Override
-    public void onCharacteristicWrite(final BluetoothDevice device, int requestId,
-            BluetoothGattCharacteristic characteristic, boolean preparedWrite, boolean
-            responseNeeded, int offset, byte[] value) {
-        UUID uuid = characteristic.getUuid();
-        Log.d(TAG, "onCharacteristicWrite received uuid: " + uuid);
-        if (uuid.equals(mEnrolmentEscrowToken.getUuid())) {
-            final int callbackCount = mEnrolmentCallbacks.beginBroadcast();
-            for (int i = 0; i < callbackCount; i++) {
-                try {
-                    mEnrolmentCallbacks.getBroadcastItem(i).onEnrolmentDataReceived(value);
-                } catch (RemoteException e) {
-                    Log.e(TAG, "Error callback onEnrolmentDataReceived", e);
-                }
-            }
-            mEnrolmentCallbacks.finishBroadcast();
-        } else if (uuid.equals(mUnlockEscrowToken.getUuid())) {
-            mCurrentUnlockToken = value;
-            maybeSendUnlockToken();
-        } else if (uuid.equals(mUnlockTokenHandle.getUuid())) {
-            mCurrentUnlockHandle = getLong(value);
-            maybeSendUnlockToken();
-        }
-    }
-
-    @Override
-    public void onCharacteristicRead(BluetoothDevice device,
-            int requestId, int offset, final BluetoothGattCharacteristic characteristic) {
-        // Ignored read requests.
-    }
-
-    @Override
-    protected void onAdvertiseStartSuccess() {
-        final int callbackCount = mBleCallbacks.beginBroadcast();
-        for (int i = 0; i < callbackCount; i++) {
-            try {
-                mBleCallbacks.getBroadcastItem(i).onBleServerStartSuccess();
-            } catch (RemoteException e) {
-                Log.e(TAG, "Error callback onBleServerStartSuccess", e);
-            }
-        }
-        mBleCallbacks.finishBroadcast();
-    }
-
-    @Override
-    protected void onAdvertiseStartFailure(int errorCode) {
-        final int callbackCount = mBleCallbacks.beginBroadcast();
-        for (int i = 0; i < callbackCount; i++) {
-            try {
-                mBleCallbacks.getBroadcastItem(i).onBleServerStartFailure(errorCode);
-            } catch (RemoteException e) {
-                Log.e(TAG, "Error callback onBleServerStartFailure", e);
-            }
-        }
-        mBleCallbacks.finishBroadcast();
-    }
-
-    @Override
-    protected void onAdvertiseDeviceConnected(BluetoothDevice device) {
-        final int callbackCount = mBleCallbacks.beginBroadcast();
-        for (int i = 0; i < callbackCount; i++) {
-            try {
-                mBleCallbacks.getBroadcastItem(i).onBleDeviceConnected(device);
-            } catch (RemoteException e) {
-                Log.e(TAG, "Error callback onBleDeviceConnected", e);
-            }
-        }
-        mBleCallbacks.finishBroadcast();
-    }
-
-    @Override
-    protected void onAdvertiseDeviceDisconnected(BluetoothDevice device) {
-        final int callbackCount = mBleCallbacks.beginBroadcast();
-        for (int i = 0; i < callbackCount; i++) {
-            try {
-                mBleCallbacks.getBroadcastItem(i).onBleDeviceDisconnected(device);
-            } catch (RemoteException e) {
-                Log.e(TAG, "Error callback onBleDeviceDisconnected", e);
-            }
-        }
-        mBleCallbacks.finishBroadcast();
-    }
-
-    private void setupEnrolmentBleServer() {
-        mEnrolmentUuid = new ParcelUuid(
-                UUID.fromString(getString(R.string.enrollment_service_uuid)));
-        mEnrolmentGattServer = new BluetoothGattService(
-                UUID.fromString(getString(R.string.enrollment_service_uuid)),
-                BluetoothGattService.SERVICE_TYPE_PRIMARY);
-
-        // Characteristic to describe the escrow token being used for unlock
-        mEnrolmentEscrowToken = new BluetoothGattCharacteristic(
-                UUID.fromString(getString(R.string.enrollment_token_uuid)),
-                BluetoothGattCharacteristic.PROPERTY_WRITE,
-                BluetoothGattCharacteristic.PERMISSION_WRITE);
-
-        // Characteristic to describe the handle being used for this escrow token
-        mEnrolmentTokenHandle = new BluetoothGattCharacteristic(
-                UUID.fromString(getString(R.string.enrollment_handle_uuid)),
-                BluetoothGattCharacteristic.PROPERTY_NOTIFY,
-                BluetoothGattCharacteristic.PERMISSION_READ);
-
-        mEnrolmentGattServer.addCharacteristic(mEnrolmentEscrowToken);
-        mEnrolmentGattServer.addCharacteristic(mEnrolmentTokenHandle);
-    }
-
-    private void setupUnlockBleServer() {
-        mUnlockUuid = new ParcelUuid(
-                UUID.fromString(getString(R.string.unlock_service_uuid)));
-        mUnlockGattServer = new BluetoothGattService(
-                UUID.fromString(getString(R.string.unlock_service_uuid)),
-                BluetoothGattService.SERVICE_TYPE_PRIMARY);
-
-        // Characteristic to describe the escrow token being used for unlock
-        mUnlockEscrowToken = new BluetoothGattCharacteristic(
-                UUID.fromString(getString(R.string.unlock_escrow_token_uiid)),
-                BluetoothGattCharacteristic.PROPERTY_WRITE,
-                BluetoothGattCharacteristic.PERMISSION_WRITE);
-
-        // Characteristic to describe the handle being used for this escrow token
-        mUnlockTokenHandle = new BluetoothGattCharacteristic(
-                UUID.fromString(getString(R.string.unlock_handle_uiid)),
-                BluetoothGattCharacteristic.PROPERTY_WRITE,
-                BluetoothGattCharacteristic.PERMISSION_WRITE);
-
-        mUnlockGattServer.addCharacteristic(mUnlockEscrowToken);
-        mUnlockGattServer.addCharacteristic(mUnlockTokenHandle);
-    }
-
-    private synchronized void maybeSendUnlockToken() {
-        if (mCurrentUnlockToken == null || mCurrentUnlockHandle == null) {
-            return;
-        }
-        Log.d(TAG, "Handle and token both received, requesting unlock. Time: "
-                + System.currentTimeMillis());
-        final int callbackCount = mUnlockCallbacks.beginBroadcast();
-        for (int i = 0; i < callbackCount; i++) {
-            try {
-                mUnlockCallbacks.getBroadcastItem(i).onUnlockDataReceived(
-                        mCurrentUnlockToken, mCurrentUnlockHandle);
-            } catch (RemoteException e) {
-                Log.e(TAG, "Error callback onUnlockDataReceived", e);
-            }
-        }
-        mUnlockCallbacks.finishBroadcast();
-        mCurrentUnlockHandle = null;
-        mCurrentUnlockToken = null;
-    }
-
-    private static byte[] getBytes(long primitive) {
-        ByteBuffer buffer = ByteBuffer.allocate(Long.SIZE / Byte.SIZE);
-        buffer.putLong(0, primitive);
-        return buffer.array();
-    }
-
-    private static long getLong(byte[] bytes) {
-        ByteBuffer buffer = ByteBuffer.allocate(Long.SIZE / Byte.SIZE);
-        buffer.put(bytes);
-        buffer.flip();
-        return buffer.getLong();
-    }
-
-    private final class CarTrustAgentBleWrapper extends ICarTrustAgentBleService.Stub {
-        @Override
-        public void registerBleCallback(ICarTrustAgentBleCallback callback) {
-            mBleCallbacks.register(callback);
-        }
-
-        @Override
-        public void unregisterBleCallback(ICarTrustAgentBleCallback callback) {
-            mBleCallbacks.unregister(callback);
-        }
-
-        @Override
-        public void startEnrolmentAdvertising() {
-            stopUnlockAdvertising();
-            Log.d(TAG, "startEnrolmentAdvertising");
-            startAdvertising(mEnrolmentUuid, mEnrolmentGattServer);
-        }
-
-        @Override
-        public void stopEnrolmentAdvertising() {
-            Log.d(TAG, "stopEnrolmentAdvertising");
-            stopAdvertising();
-        }
-
-        @Override
-        public void sendEnrolmentHandle(BluetoothDevice device, long handle) {
-            Log.d(TAG, "sendEnrolmentHandle: " + handle);
-            mEnrolmentTokenHandle.setValue(getBytes(handle));
-            notifyCharacteristicChanged(device, mEnrolmentTokenHandle, false);
-        }
-
-        @Override
-        public void registerEnrolmentCallback(ICarTrustAgentEnrolmentCallback callback) {
-            mEnrolmentCallbacks.register(callback);
-        }
-
-        @Override
-        public void unregisterEnrolmentCallback(ICarTrustAgentEnrolmentCallback callback) {
-            mEnrolmentCallbacks.unregister(callback);
-        }
-
-        @Override
-        public void startUnlockAdvertising() {
-            stopEnrolmentAdvertising();
-            Log.d(TAG, "startUnlockAdvertising");
-            startAdvertising(mUnlockUuid, mUnlockGattServer);
-        }
-
-        @Override
-        public void stopUnlockAdvertising() {
-            Log.d(TAG, "stopUnlockAdvertising");
-            stopAdvertising();
-        }
-
-        @Override
-        public void registerUnlockCallback(ICarTrustAgentUnlockCallback callback) {
-            mUnlockCallbacks.register(callback);
-        }
-
-        @Override
-        public void unregisterUnlockCallback(ICarTrustAgentUnlockCallback callback) {
-            mUnlockCallbacks.unregister(callback);
-        }
-
-        @Override
-        public void setTokenRequestDelegate(ICarTrustAgentTokenRequestDelegate delegate) {
-            mTokenRequestDelegate = delegate;
-        }
-
-        @Override
-        public void revokeTrust() throws RemoteException {
-            if (mTokenRequestDelegate != null) {
-                mTokenRequestDelegate.revokeTrust();
-            }
-        }
-
-        @Override
-        public void addEscrowToken(byte[] token, int uid) throws RemoteException {
-            if (mTokenRequestDelegate != null) {
-                mTokenRequestDelegate.addEscrowToken(token, uid);
-            }
-        }
-
-        @Override
-        public void removeEscrowToken(long handle, int uid) throws RemoteException {
-            if (mTokenRequestDelegate != null) {
-                mTokenRequestDelegate.removeEscrowToken(handle, uid);
-            }
-        }
-
-        @Override
-        public void isEscrowTokenActive(long handle, int uid) throws RemoteException {
-            if (mTokenRequestDelegate != null) {
-                mTokenRequestDelegate.isEscrowTokenActive(handle, uid);
-            }
-        }
-
-        @Override
-        public void setTokenResponseCallback(ICarTrustAgentTokenResponseCallback callback) {
-            mTokenResponseCallback = callback;
-        }
-
-        @Override
-        public void onEscrowTokenAdded(byte[] token, long handle, int uid)
-                throws RemoteException {
-            Log.d(TAG, "onEscrowTokenAdded handle:" + handle + " uid:" + uid);
-            mTokenHandleSharedPreferences.edit()
-                    .putInt(String.valueOf(handle), uid)
-                    .apply();
-            if (mTokenResponseCallback != null) {
-                mTokenResponseCallback.onEscrowTokenAdded(token, handle, uid);
-            }
-        }
-
-        @Override
-        public void onEscrowTokenRemoved(long handle, boolean successful) throws RemoteException {
-            Log.d(TAG, "onEscrowTokenRemoved handle:" + handle);
-            mTokenHandleSharedPreferences.edit()
-                    .remove(String.valueOf(handle))
-                    .apply();
-            if (mTokenResponseCallback != null) {
-                mTokenResponseCallback.onEscrowTokenRemoved(handle, successful);
-            }
-        }
-
-        @Override
-        public void onEscrowTokenActiveStateChanged(long handle, boolean active)
-                throws RemoteException {
-            if (mTokenResponseCallback != null) {
-                mTokenResponseCallback.onEscrowTokenActiveStateChanged(handle, active);
-            }
-        }
-
-        @Override
-        public int getUserIdByEscrowTokenHandle(long tokenHandle) {
-            return mTokenHandleSharedPreferences.getInt(String.valueOf(tokenHandle), -1);
-        }
-    }
-}
diff --git a/TrustAgent/src/com/android/car/trust/SimpleBleServer.java b/TrustAgent/src/com/android/car/trust/SimpleBleServer.java
deleted file mode 100644
index 7fbf2fe..0000000
--- a/TrustAgent/src/com/android/car/trust/SimpleBleServer.java
+++ /dev/null
@@ -1,231 +0,0 @@
-/*
- * Copyright (C) 2017 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.car.trust;
-
-import static android.bluetooth.BluetoothProfile.GATT_SERVER;
-
-import android.app.Service;
-import android.bluetooth.BluetoothAdapter;
-import android.bluetooth.BluetoothDevice;
-import android.bluetooth.BluetoothGatt;
-import android.bluetooth.BluetoothGattCharacteristic;
-import android.bluetooth.BluetoothGattServer;
-import android.bluetooth.BluetoothGattServerCallback;
-import android.bluetooth.BluetoothGattService;
-import android.bluetooth.BluetoothManager;
-import android.bluetooth.BluetoothProfile;
-import android.bluetooth.le.AdvertiseCallback;
-import android.bluetooth.le.AdvertiseData;
-import android.bluetooth.le.AdvertiseSettings;
-import android.bluetooth.le.BluetoothLeAdvertiser;
-import android.content.Context;
-import android.content.pm.PackageManager;
-import android.os.Handler;
-import android.os.ParcelUuid;
-import android.util.Log;
-
-/**
- * A generic service to start a BLE
- */
-public abstract class SimpleBleServer extends Service {
-
-    private static final String TAG = SimpleBleServer.class.getSimpleName();
-
-    private static final int BLE_RETRY_LIMIT = 5;
-    private static final int BLE_RETRY_INTERVAL_MS = 1000;
-
-    private final AdvertiseCallback mAdvertisingCallback = new AdvertiseCallback() {
-        @Override
-        public void onStartSuccess(AdvertiseSettings settingsInEffect) {
-            super.onStartSuccess(settingsInEffect);
-            Log.d(TAG, "Successfully started advertising service");
-            onAdvertiseStartSuccess();
-        }
-
-        @Override
-        public void onStartFailure(int errorCode) {
-            super.onStartFailure(errorCode);
-            Log.e(TAG, "Failed to advertise, errorCode: " + errorCode);
-            onAdvertiseStartFailure(errorCode);
-        }
-    };
-
-    private final BluetoothGattServerCallback mGattServerCallback =
-            new BluetoothGattServerCallback() {
-        @Override
-        public void onConnectionStateChange(BluetoothDevice device,
-                final int status, final int newState) {
-            Log.d(TAG, "GattServer connection change status: " + status
-                    + " newState: " + newState
-                    + " device name: " + device.getName());
-            switch (newState) {
-                case BluetoothProfile.STATE_CONNECTED:
-                    onAdvertiseDeviceConnected(device);
-                    break;
-                case BluetoothProfile.STATE_DISCONNECTED:
-                    onAdvertiseDeviceDisconnected(device);
-                    break;
-            }
-        }
-
-        @Override
-        public void onServiceAdded(final int status, BluetoothGattService service) {
-            Log.d(TAG, "Service added status: " + status + " uuid: " + service.getUuid());
-        }
-
-        @Override
-        public void onCharacteristicReadRequest(BluetoothDevice device,
-                int requestId, int offset, final BluetoothGattCharacteristic characteristic) {
-            Log.d(TAG, "Read request for characteristic: " + characteristic.getUuid());
-            mGattServer.sendResponse(device, requestId,
-                    BluetoothGatt.GATT_SUCCESS, offset, characteristic.getValue());
-            onCharacteristicRead(device, requestId, offset, characteristic);
-        }
-
-        @Override
-        public void onCharacteristicWriteRequest(final BluetoothDevice device, int requestId,
-                BluetoothGattCharacteristic characteristic, boolean preparedWrite, boolean
-                responseNeeded, int offset, byte[] value) {
-            Log.d(TAG, "Write request for characteristic: " + characteristic.getUuid());
-            mGattServer.sendResponse(device, requestId, BluetoothGatt.GATT_SUCCESS,
-                    offset, value);
-            onCharacteristicWrite(device, requestId, characteristic,
-                    preparedWrite, responseNeeded, offset, value);
-        }
-    };
-
-    private final Handler mHandler = new Handler();
-
-    private BluetoothManager mBluetoothManager;
-    private BluetoothLeAdvertiser mAdvertiser;
-    private BluetoothGattServer mGattServer;
-    private int mAdvertiserStartCount;
-
-    /**
-     * Starts the GATT server with the given {@link BluetoothGattService} and begins
-     * advertising with the {@link ParcelUuid}.
-     * <p>It is possible that BLE service is still in TURNING_ON state when this method is invoked.
-     * Therefore, several retries will be made to ensure advertising is started.
-     *
-     * @param advertiseUuid Service Uuid used in the {@link AdvertiseData}
-     * @param service {@link BluetoothGattService} that will be discovered by clients
-     */
-    protected void startAdvertising(ParcelUuid advertiseUuid, BluetoothGattService service) {
-        if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
-            Log.e(TAG, "System does not support BLE");
-            return;
-        }
-
-        mBluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
-        mGattServer = mBluetoothManager.openGattServer(this, mGattServerCallback);
-        if (mGattServer == null) {
-            Log.e(TAG, "Gatt Server not created");
-            return;
-        }
-
-        // We only allow adding one service in this implementation. If multiple services need
-        // to be added, then they need to be queued up and added only after
-        // BluetoothGattServerCallback.onServiceAdded is called.
-        mGattServer.addService(service);
-
-        AdvertiseSettings settings = new AdvertiseSettings.Builder()
-                .setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_LOW_LATENCY)
-                .setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_HIGH)
-                .setConnectable(true)
-                .build();
-
-        AdvertiseData data = new AdvertiseData.Builder()
-                .setIncludeDeviceName(true)
-                .addServiceUuid(advertiseUuid)
-                .build();
-
-        mAdvertiserStartCount = 0;
-        startAdvertisingInternally(settings, data);
-    }
-
-    private void startAdvertisingInternally(AdvertiseSettings settings, AdvertiseData data) {
-        mAdvertiserStartCount += 1;
-        mAdvertiser = BluetoothAdapter.getDefaultAdapter().getBluetoothLeAdvertiser();
-        if (mAdvertiser == null && mAdvertiserStartCount < BLE_RETRY_LIMIT) {
-            mHandler.postDelayed(() -> startAdvertisingInternally(settings, data),
-                    BLE_RETRY_INTERVAL_MS);
-        } else {
-            mHandler.removeCallbacks(null);
-            mAdvertiser.startAdvertising(settings, data, mAdvertisingCallback);
-            mAdvertiserStartCount = 0;
-        }
-    }
-
-    protected void stopAdvertising() {
-        if (mAdvertiser != null) {
-            mAdvertiser.stopAdvertising(mAdvertisingCallback);
-        }
-    }
-
-    /**
-     * Notifies the characteristic change via {@link BluetoothGattServer}
-     */
-    protected void notifyCharacteristicChanged(BluetoothDevice device,
-            BluetoothGattCharacteristic characteristic, boolean confirm) {
-        if (mGattServer != null) {
-            mGattServer.notifyCharacteristicChanged(device, characteristic, confirm);
-        }
-    }
-
-    @Override
-    public void onDestroy() {
-        // Stops the advertiser and GATT server. This needs to be done to avoid leaks
-        if (mAdvertiser != null) {
-            mAdvertiser.stopAdvertising(mAdvertisingCallback);
-            mAdvertiser.cleanup();
-        }
-
-        if (mGattServer != null) {
-            mGattServer.clearServices();
-            try {
-                for (BluetoothDevice d : mBluetoothManager.getConnectedDevices(GATT_SERVER)) {
-                    mGattServer.cancelConnection(d);
-                }
-            } catch (UnsupportedOperationException e) {
-                Log.e(TAG, "Error getting connected devices", e);
-            } finally {
-                mGattServer.close();
-            }
-        }
-        super.onDestroy();
-    }
-
-    // Delegate to subclass
-    protected void onAdvertiseStartSuccess() { }
-    protected void onAdvertiseStartFailure(int errorCode) { }
-    protected void onAdvertiseDeviceConnected(BluetoothDevice device) { }
-    protected void onAdvertiseDeviceDisconnected(BluetoothDevice device) { }
-
-    /**
-     * Triggered when this BleService receives a write request from a remote
-     * device. Sub-classes should implement how to handle requests.
-     */
-    protected abstract void onCharacteristicWrite(BluetoothDevice device, int requestId,
-            BluetoothGattCharacteristic characteristic, boolean preparedWrite, boolean
-            responseNeeded, int offset, byte[] value);
-
-    /**
-     * Triggered when this BleService receives a read request from a remote device.
-     */
-    protected abstract void onCharacteristicRead(BluetoothDevice device,
-            int requestId, int offset, final BluetoothGattCharacteristic characteristic);
-
-}
diff --git a/car-cluster-logging-renderer/res/values-af/strings.xml b/car-cluster-logging-renderer/res/values-af/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-af/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-am/strings.xml b/car-cluster-logging-renderer/res/values-am/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-am/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-ar/strings.xml b/car-cluster-logging-renderer/res/values-ar/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-ar/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-as/strings.xml b/car-cluster-logging-renderer/res/values-as/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-as/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-az/strings.xml b/car-cluster-logging-renderer/res/values-az/strings.xml
new file mode 100644
index 0000000..a3ea5d3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-az/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"ALƏT_KLASTERİ_TƏCHİZATÇISI_GİRİŞİ"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-b+sr+Latn/strings.xml b/car-cluster-logging-renderer/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-be/strings.xml b/car-cluster-logging-renderer/res/values-be/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-be/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-bg/strings.xml b/car-cluster-logging-renderer/res/values-bg/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-bg/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-bn/strings.xml b/car-cluster-logging-renderer/res/values-bn/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-bn/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-bs/strings.xml b/car-cluster-logging-renderer/res/values-bs/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-bs/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-ca/strings.xml b/car-cluster-logging-renderer/res/values-ca/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-ca/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-cs/strings.xml b/car-cluster-logging-renderer/res/values-cs/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-cs/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-da/strings.xml b/car-cluster-logging-renderer/res/values-da/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-da/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-de/strings.xml b/car-cluster-logging-renderer/res/values-de/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-de/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-el/strings.xml b/car-cluster-logging-renderer/res/values-el/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-el/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-en-rAU/strings.xml b/car-cluster-logging-renderer/res/values-en-rAU/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-en-rAU/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-en-rCA/strings.xml b/car-cluster-logging-renderer/res/values-en-rCA/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-en-rCA/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-en-rGB/strings.xml b/car-cluster-logging-renderer/res/values-en-rGB/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-en-rGB/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-en-rIN/strings.xml b/car-cluster-logging-renderer/res/values-en-rIN/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-en-rIN/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-en-rXC/strings.xml b/car-cluster-logging-renderer/res/values-en-rXC/strings.xml
new file mode 100644
index 0000000..9cf17c1
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-en-rXC/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‏‏‎‎‏‏‎‎‏‎‏‏‏‎‏‏‏‎‎‎‎‏‏‏‏‎‏‏‎‎‏‏‎‎‎‎‎‎‏‎‎‎‎‎‏‎‏‏‎‏‎‏‏‎LOGGING_INSTRUMENT_CLUSTER_RENDERER‎‏‎‎‏‎"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-es-rUS/strings.xml b/car-cluster-logging-renderer/res/values-es-rUS/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-es-rUS/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-es/strings.xml b/car-cluster-logging-renderer/res/values-es/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-es/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-et/strings.xml b/car-cluster-logging-renderer/res/values-et/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-et/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-eu/strings.xml b/car-cluster-logging-renderer/res/values-eu/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-eu/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-fa/strings.xml b/car-cluster-logging-renderer/res/values-fa/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-fa/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-fi/strings.xml b/car-cluster-logging-renderer/res/values-fi/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-fi/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-fr-rCA/strings.xml b/car-cluster-logging-renderer/res/values-fr-rCA/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-fr-rCA/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-fr/strings.xml b/car-cluster-logging-renderer/res/values-fr/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-fr/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-gl/strings.xml b/car-cluster-logging-renderer/res/values-gl/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-gl/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-gu/strings.xml b/car-cluster-logging-renderer/res/values-gu/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-gu/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-hi/strings.xml b/car-cluster-logging-renderer/res/values-hi/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-hi/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-hr/strings.xml b/car-cluster-logging-renderer/res/values-hr/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-hr/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-hu/strings.xml b/car-cluster-logging-renderer/res/values-hu/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-hu/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-hy/strings.xml b/car-cluster-logging-renderer/res/values-hy/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-hy/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-in/strings.xml b/car-cluster-logging-renderer/res/values-in/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-in/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-is/strings.xml b/car-cluster-logging-renderer/res/values-is/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-is/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-it/strings.xml b/car-cluster-logging-renderer/res/values-it/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-it/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-iw/strings.xml b/car-cluster-logging-renderer/res/values-iw/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-iw/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-ja/strings.xml b/car-cluster-logging-renderer/res/values-ja/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-ja/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-ka/strings.xml b/car-cluster-logging-renderer/res/values-ka/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-ka/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-kk/strings.xml b/car-cluster-logging-renderer/res/values-kk/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-kk/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-km/strings.xml b/car-cluster-logging-renderer/res/values-km/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-km/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-kn/strings.xml b/car-cluster-logging-renderer/res/values-kn/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-kn/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-ko/strings.xml b/car-cluster-logging-renderer/res/values-ko/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-ko/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-ky/strings.xml b/car-cluster-logging-renderer/res/values-ky/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-ky/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-lo/strings.xml b/car-cluster-logging-renderer/res/values-lo/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-lo/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-lt/strings.xml b/car-cluster-logging-renderer/res/values-lt/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-lt/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-lv/strings.xml b/car-cluster-logging-renderer/res/values-lv/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-lv/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-mk/strings.xml b/car-cluster-logging-renderer/res/values-mk/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-mk/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-ml/strings.xml b/car-cluster-logging-renderer/res/values-ml/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-ml/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-mn/strings.xml b/car-cluster-logging-renderer/res/values-mn/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-mn/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-mr/strings.xml b/car-cluster-logging-renderer/res/values-mr/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-mr/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-ms/strings.xml b/car-cluster-logging-renderer/res/values-ms/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-ms/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-my/strings.xml b/car-cluster-logging-renderer/res/values-my/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-my/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-nb/strings.xml b/car-cluster-logging-renderer/res/values-nb/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-nb/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-ne/strings.xml b/car-cluster-logging-renderer/res/values-ne/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-ne/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-nl/strings.xml b/car-cluster-logging-renderer/res/values-nl/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-nl/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-or/strings.xml b/car-cluster-logging-renderer/res/values-or/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-or/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-pa/strings.xml b/car-cluster-logging-renderer/res/values-pa/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-pa/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-pl/strings.xml b/car-cluster-logging-renderer/res/values-pl/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-pl/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-pt-rPT/strings.xml b/car-cluster-logging-renderer/res/values-pt-rPT/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-pt-rPT/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-pt/strings.xml b/car-cluster-logging-renderer/res/values-pt/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-pt/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-ro/strings.xml b/car-cluster-logging-renderer/res/values-ro/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-ro/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-ru/strings.xml b/car-cluster-logging-renderer/res/values-ru/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-ru/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-si/strings.xml b/car-cluster-logging-renderer/res/values-si/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-si/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-sk/strings.xml b/car-cluster-logging-renderer/res/values-sk/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-sk/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-sl/strings.xml b/car-cluster-logging-renderer/res/values-sl/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-sl/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-sq/strings.xml b/car-cluster-logging-renderer/res/values-sq/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-sq/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-sr/strings.xml b/car-cluster-logging-renderer/res/values-sr/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-sr/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-sv/strings.xml b/car-cluster-logging-renderer/res/values-sv/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-sv/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-sw/strings.xml b/car-cluster-logging-renderer/res/values-sw/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-sw/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-ta/strings.xml b/car-cluster-logging-renderer/res/values-ta/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-ta/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-te/strings.xml b/car-cluster-logging-renderer/res/values-te/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-te/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-th/strings.xml b/car-cluster-logging-renderer/res/values-th/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-th/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-tl/strings.xml b/car-cluster-logging-renderer/res/values-tl/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-tl/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-tr/strings.xml b/car-cluster-logging-renderer/res/values-tr/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-tr/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-uk/strings.xml b/car-cluster-logging-renderer/res/values-uk/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-uk/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-ur/strings.xml b/car-cluster-logging-renderer/res/values-ur/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-ur/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-uz/strings.xml b/car-cluster-logging-renderer/res/values-uz/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-uz/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-vi/strings.xml b/car-cluster-logging-renderer/res/values-vi/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-vi/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-zh-rCN/strings.xml b/car-cluster-logging-renderer/res/values-zh-rCN/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-zh-rCN/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-zh-rHK/strings.xml b/car-cluster-logging-renderer/res/values-zh-rHK/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-zh-rHK/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-zh-rTW/strings.xml b/car-cluster-logging-renderer/res/values-zh-rTW/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-zh-rTW/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/res/values-zu/strings.xml b/car-cluster-logging-renderer/res/values-zu/strings.xml
new file mode 100644
index 0000000..daa61a3
--- /dev/null
+++ b/car-cluster-logging-renderer/res/values-zu/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="8762201061451645291">"LOGGING_INSTRUMENT_CLUSTER_RENDERER"</string>
+</resources>
diff --git a/car-cluster-logging-renderer/src/android/car/cluster/loggingrenderer/LoggingClusterRenderingService.java b/car-cluster-logging-renderer/src/android/car/cluster/loggingrenderer/LoggingClusterRenderingService.java
index bb9991e..c42ea5e 100644
--- a/car-cluster-logging-renderer/src/android/car/cluster/loggingrenderer/LoggingClusterRenderingService.java
+++ b/car-cluster-logging-renderer/src/android/car/cluster/loggingrenderer/LoggingClusterRenderingService.java
@@ -37,7 +37,7 @@
     private static final int NAV_STATE_EVENT_ID = 1;
 
     @Override
-    protected NavigationRenderer getNavigationRenderer() {
+    public NavigationRenderer getNavigationRenderer() {
         NavigationRenderer navigationRenderer = new NavigationRenderer() {
             @Override
             public CarNavigationInstrumentCluster getNavigationProperties() {
diff --git a/car-default-input-service/res/values-af/strings.xml b/car-default-input-service/res/values-af/strings.xml
new file mode 100644
index 0000000..9e4a530
--- /dev/null
+++ b/car-default-input-service/res/values-af/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Motorverstekinvoerdiens"</string>
+</resources>
diff --git a/car-default-input-service/res/values-am/strings.xml b/car-default-input-service/res/values-am/strings.xml
new file mode 100644
index 0000000..ae59586
--- /dev/null
+++ b/car-default-input-service/res/values-am/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"የመኪና ነባሪ ግቤት አገልግሎት"</string>
+</resources>
diff --git a/car-default-input-service/res/values-ar/strings.xml b/car-default-input-service/res/values-ar/strings.xml
new file mode 100644
index 0000000..68913eb
--- /dev/null
+++ b/car-default-input-service/res/values-ar/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"جهاز الإدخال التلقائي في السيارة"</string>
+</resources>
diff --git a/car-default-input-service/res/values-as/strings.xml b/car-default-input-service/res/values-as/strings.xml
new file mode 100644
index 0000000..c6f29f6
--- /dev/null
+++ b/car-default-input-service/res/values-as/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"গাড়ীৰ ডিফ’ল্ট ইনপুট সেৱা"</string>
+</resources>
diff --git a/car-default-input-service/res/values-az/strings.xml b/car-default-input-service/res/values-az/strings.xml
new file mode 100644
index 0000000..e73948d
--- /dev/null
+++ b/car-default-input-service/res/values-az/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Avtomobilin Defolt Daxiletmə Xidməti"</string>
+</resources>
diff --git a/car-default-input-service/res/values-b+sr+Latn/strings.xml b/car-default-input-service/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 0000000..2ded12d
--- /dev/null
+++ b/car-default-input-service/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Podrazumevana usluga za unos za automobil"</string>
+</resources>
diff --git a/car-default-input-service/res/values-be/strings.xml b/car-default-input-service/res/values-be/strings.xml
new file mode 100644
index 0000000..c746e66
--- /dev/null
+++ b/car-default-input-service/res/values-be/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Стандартны сэрвіс падачы звестак пра аўтамабіль"</string>
+</resources>
diff --git a/car-default-input-service/res/values-bg/strings.xml b/car-default-input-service/res/values-bg/strings.xml
new file mode 100644
index 0000000..90a25e9
--- /dev/null
+++ b/car-default-input-service/res/values-bg/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Стандартна автомобилна услуга за входящи данни"</string>
+</resources>
diff --git a/car-default-input-service/res/values-bn/strings.xml b/car-default-input-service/res/values-bn/strings.xml
new file mode 100644
index 0000000..57671f3
--- /dev/null
+++ b/car-default-input-service/res/values-bn/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"গাড়ির ডিফল্ট ইনপুট সার্ভিস"</string>
+</resources>
diff --git a/car-default-input-service/res/values-bs/strings.xml b/car-default-input-service/res/values-bs/strings.xml
new file mode 100644
index 0000000..9d95f59
--- /dev/null
+++ b/car-default-input-service/res/values-bs/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Zadana usluga unosa za automobil"</string>
+</resources>
diff --git a/car-default-input-service/res/values-ca/strings.xml b/car-default-input-service/res/values-ca/strings.xml
new file mode 100644
index 0000000..66e84c7
--- /dev/null
+++ b/car-default-input-service/res/values-ca/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Servei d\'entrada predeterminat del cotxe"</string>
+</resources>
diff --git a/car-default-input-service/res/values-cs/strings.xml b/car-default-input-service/res/values-cs/strings.xml
new file mode 100644
index 0000000..36cfaf5
--- /dev/null
+++ b/car-default-input-service/res/values-cs/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Služba výchozího vstupu auta"</string>
+</resources>
diff --git a/car-default-input-service/res/values-da/strings.xml b/car-default-input-service/res/values-da/strings.xml
new file mode 100644
index 0000000..4be4f5a
--- /dev/null
+++ b/car-default-input-service/res/values-da/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Bilens standardtjeneste til input"</string>
+</resources>
diff --git a/car-default-input-service/res/values-de/strings.xml b/car-default-input-service/res/values-de/strings.xml
new file mode 100644
index 0000000..ae1e6b8
--- /dev/null
+++ b/car-default-input-service/res/values-de/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Standard-Eingabedienst für das Auto"</string>
+</resources>
diff --git a/car-default-input-service/res/values-el/strings.xml b/car-default-input-service/res/values-el/strings.xml
new file mode 100644
index 0000000..4862a37
--- /dev/null
+++ b/car-default-input-service/res/values-el/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Προεπιλεγμένη υπηρεσία εισόδου αυτοκινήτου"</string>
+</resources>
diff --git a/car-default-input-service/res/values-en-rAU/strings.xml b/car-default-input-service/res/values-en-rAU/strings.xml
new file mode 100644
index 0000000..af9019f
--- /dev/null
+++ b/car-default-input-service/res/values-en-rAU/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Car default input service"</string>
+</resources>
diff --git a/car-default-input-service/res/values-en-rCA/strings.xml b/car-default-input-service/res/values-en-rCA/strings.xml
new file mode 100644
index 0000000..af9019f
--- /dev/null
+++ b/car-default-input-service/res/values-en-rCA/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Car default input service"</string>
+</resources>
diff --git a/car-default-input-service/res/values-en-rGB/strings.xml b/car-default-input-service/res/values-en-rGB/strings.xml
new file mode 100644
index 0000000..af9019f
--- /dev/null
+++ b/car-default-input-service/res/values-en-rGB/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Car default input service"</string>
+</resources>
diff --git a/car-default-input-service/res/values-en-rIN/strings.xml b/car-default-input-service/res/values-en-rIN/strings.xml
new file mode 100644
index 0000000..af9019f
--- /dev/null
+++ b/car-default-input-service/res/values-en-rIN/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Car default input service"</string>
+</resources>
diff --git a/car-default-input-service/res/values-en-rXC/strings.xml b/car-default-input-service/res/values-en-rXC/strings.xml
new file mode 100644
index 0000000..34272f4
--- /dev/null
+++ b/car-default-input-service/res/values-en-rXC/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‏‏‏‎‏‏‎‎‏‏‎‏‏‎‏‎‏‎‏‏‎‎‏‎‎‎‎‎‎‎‎‏‏‏‎‏‏‎‏‎‎‏‎‏‏‏‎‎‎‎‏‎‏‎‎‏‎Car Default Input Service‎‏‎‎‏‎"</string>
+</resources>
diff --git a/car-default-input-service/res/values-es-rUS/strings.xml b/car-default-input-service/res/values-es-rUS/strings.xml
new file mode 100644
index 0000000..d11e509
--- /dev/null
+++ b/car-default-input-service/res/values-es-rUS/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Servicio de entrada predeterminado del auto"</string>
+</resources>
diff --git a/car-default-input-service/res/values-es/strings.xml b/car-default-input-service/res/values-es/strings.xml
new file mode 100644
index 0000000..4aa109a
--- /dev/null
+++ b/car-default-input-service/res/values-es/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Servicio de entrada predeterminado del coche"</string>
+</resources>
diff --git a/car-default-input-service/res/values-et/strings.xml b/car-default-input-service/res/values-et/strings.xml
new file mode 100644
index 0000000..c60ddc8
--- /dev/null
+++ b/car-default-input-service/res/values-et/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Auto vaikesisendteenus"</string>
+</resources>
diff --git a/car-default-input-service/res/values-eu/strings.xml b/car-default-input-service/res/values-eu/strings.xml
new file mode 100644
index 0000000..8825af2
--- /dev/null
+++ b/car-default-input-service/res/values-eu/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Autoaren sarrerako zerbitzu lehenetsia"</string>
+</resources>
diff --git a/car-default-input-service/res/values-fa/strings.xml b/car-default-input-service/res/values-fa/strings.xml
new file mode 100644
index 0000000..72dda79
--- /dev/null
+++ b/car-default-input-service/res/values-fa/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"سرویس ورودی پیش‌فرض خودرو"</string>
+</resources>
diff --git a/car-default-input-service/res/values-fi/strings.xml b/car-default-input-service/res/values-fi/strings.xml
new file mode 100644
index 0000000..0b06f9a
--- /dev/null
+++ b/car-default-input-service/res/values-fi/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Auton oletussyötepalvelu"</string>
+</resources>
diff --git a/car-default-input-service/res/values-fr-rCA/strings.xml b/car-default-input-service/res/values-fr-rCA/strings.xml
new file mode 100644
index 0000000..b8f4d61
--- /dev/null
+++ b/car-default-input-service/res/values-fr-rCA/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Service d\'entrée par défaut de la voiture"</string>
+</resources>
diff --git a/car-default-input-service/res/values-fr/strings.xml b/car-default-input-service/res/values-fr/strings.xml
new file mode 100644
index 0000000..b8f4d61
--- /dev/null
+++ b/car-default-input-service/res/values-fr/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Service d\'entrée par défaut de la voiture"</string>
+</resources>
diff --git a/car-default-input-service/res/values-gl/strings.xml b/car-default-input-service/res/values-gl/strings.xml
new file mode 100644
index 0000000..161e467
--- /dev/null
+++ b/car-default-input-service/res/values-gl/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Servizo de entrada predeterminado do coche"</string>
+</resources>
diff --git a/car-default-input-service/res/values-gu/strings.xml b/car-default-input-service/res/values-gu/strings.xml
new file mode 100644
index 0000000..9b92e28
--- /dev/null
+++ b/car-default-input-service/res/values-gu/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"કારની ડિફૉલ્ટ ઇનપુટ સેવા"</string>
+</resources>
diff --git a/car-default-input-service/res/values-hi/strings.xml b/car-default-input-service/res/values-hi/strings.xml
new file mode 100644
index 0000000..01ea8b9
--- /dev/null
+++ b/car-default-input-service/res/values-hi/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"कार की डिफ़ॉल्ट इनपुट सेवा"</string>
+</resources>
diff --git a/car-default-input-service/res/values-hr/strings.xml b/car-default-input-service/res/values-hr/strings.xml
new file mode 100644
index 0000000..5b1a689
--- /dev/null
+++ b/car-default-input-service/res/values-hr/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Zadana usluga za unos za automobil"</string>
+</resources>
diff --git a/car-default-input-service/res/values-hu/strings.xml b/car-default-input-service/res/values-hu/strings.xml
new file mode 100644
index 0000000..0a34bd1
--- /dev/null
+++ b/car-default-input-service/res/values-hu/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Az autó alapértelmezett beviteli szolgáltatása"</string>
+</resources>
diff --git a/car-default-input-service/res/values-hy/strings.xml b/car-default-input-service/res/values-hy/strings.xml
new file mode 100644
index 0000000..12ad35f
--- /dev/null
+++ b/car-default-input-service/res/values-hy/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Կանխադրված ներածման ծառայություն"</string>
+</resources>
diff --git a/car-default-input-service/res/values-in/strings.xml b/car-default-input-service/res/values-in/strings.xml
new file mode 100644
index 0000000..972b48c
--- /dev/null
+++ b/car-default-input-service/res/values-in/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Layanan Masukan Default Mobil"</string>
+</resources>
diff --git a/car-default-input-service/res/values-is/strings.xml b/car-default-input-service/res/values-is/strings.xml
new file mode 100644
index 0000000..016d25d
--- /dev/null
+++ b/car-default-input-service/res/values-is/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Sjálfgefin inntaksþjónusta bílsins"</string>
+</resources>
diff --git a/car-default-input-service/res/values-it/strings.xml b/car-default-input-service/res/values-it/strings.xml
new file mode 100644
index 0000000..28f1b85
--- /dev/null
+++ b/car-default-input-service/res/values-it/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Servizio di input predefinito dell\'automobile"</string>
+</resources>
diff --git a/car-default-input-service/res/values-iw/strings.xml b/car-default-input-service/res/values-iw/strings.xml
new file mode 100644
index 0000000..003e9e4
--- /dev/null
+++ b/car-default-input-service/res/values-iw/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"ברירת המחדל של שירות הקלט ברכב"</string>
+</resources>
diff --git a/car-default-input-service/res/values-ja/strings.xml b/car-default-input-service/res/values-ja/strings.xml
new file mode 100644
index 0000000..e5714de
--- /dev/null
+++ b/car-default-input-service/res/values-ja/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"車のデフォルト入力サービス"</string>
+</resources>
diff --git a/car-default-input-service/res/values-ka/strings.xml b/car-default-input-service/res/values-ka/strings.xml
new file mode 100644
index 0000000..f389138
--- /dev/null
+++ b/car-default-input-service/res/values-ka/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"მანქანის შეყვანის ნაგულისხმევი სერვისი"</string>
+</resources>
diff --git a/car-default-input-service/res/values-kk/strings.xml b/car-default-input-service/res/values-kk/strings.xml
new file mode 100644
index 0000000..7812059
--- /dev/null
+++ b/car-default-input-service/res/values-kk/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Көліктің деректерді енгізуге арналған әдепкі қызметі"</string>
+</resources>
diff --git a/car-default-input-service/res/values-km/strings.xml b/car-default-input-service/res/values-km/strings.xml
new file mode 100644
index 0000000..a90d8d9
--- /dev/null
+++ b/car-default-input-service/res/values-km/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"សេវាកម្ម​បញ្ចូល​លំនាំដើម​របស់រថយន្ត"</string>
+</resources>
diff --git a/car-default-input-service/res/values-kn/strings.xml b/car-default-input-service/res/values-kn/strings.xml
new file mode 100644
index 0000000..54d48ac
--- /dev/null
+++ b/car-default-input-service/res/values-kn/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"ಕಾರಿನ ಪೂರ್ವನಿಯೋಜಿತ ಇನ್‌ಪುಟ್‌ ಸೇವೆ"</string>
+</resources>
diff --git a/car-default-input-service/res/values-ko/strings.xml b/car-default-input-service/res/values-ko/strings.xml
new file mode 100644
index 0000000..83e175a
--- /dev/null
+++ b/car-default-input-service/res/values-ko/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"차량 기본 입력 서비스"</string>
+</resources>
diff --git a/car-default-input-service/res/values-ky/strings.xml b/car-default-input-service/res/values-ky/strings.xml
new file mode 100644
index 0000000..6680e95
--- /dev/null
+++ b/car-default-input-service/res/values-ky/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Унааны демейки киргизүү кызматы"</string>
+</resources>
diff --git a/car-default-input-service/res/values-lo/strings.xml b/car-default-input-service/res/values-lo/strings.xml
new file mode 100644
index 0000000..ac2e6ca
--- /dev/null
+++ b/car-default-input-service/res/values-lo/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"ການບໍລິການປ້ອນຂໍ້ມູນເລີ່ມຕົ້ນຂອງລົດ"</string>
+</resources>
diff --git a/car-default-input-service/res/values-lt/strings.xml b/car-default-input-service/res/values-lt/strings.xml
new file mode 100644
index 0000000..efe7e70
--- /dev/null
+++ b/car-default-input-service/res/values-lt/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Numatytoji automobilio įvesties paslauga"</string>
+</resources>
diff --git a/car-default-input-service/res/values-lv/strings.xml b/car-default-input-service/res/values-lv/strings.xml
new file mode 100644
index 0000000..d20025d
--- /dev/null
+++ b/car-default-input-service/res/values-lv/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Automašīnas noklusējuma ieejas pakalpojums"</string>
+</resources>
diff --git a/car-default-input-service/res/values-mk/strings.xml b/car-default-input-service/res/values-mk/strings.xml
new file mode 100644
index 0000000..53436c2
--- /dev/null
+++ b/car-default-input-service/res/values-mk/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Стандардна влезна услуга на автомобилот"</string>
+</resources>
diff --git a/car-default-input-service/res/values-ml/strings.xml b/car-default-input-service/res/values-ml/strings.xml
new file mode 100644
index 0000000..1b1cc07
--- /dev/null
+++ b/car-default-input-service/res/values-ml/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"കാറിന്റെ ഡിഫോൾട്ട് ഇൻപുട്ട് സേവനം"</string>
+</resources>
diff --git a/car-default-input-service/res/values-mn/strings.xml b/car-default-input-service/res/values-mn/strings.xml
new file mode 100644
index 0000000..9ab8342
--- /dev/null
+++ b/car-default-input-service/res/values-mn/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Машины өгөгдмөл оролтын үйлчилгээ"</string>
+</resources>
diff --git a/car-default-input-service/res/values-mr/strings.xml b/car-default-input-service/res/values-mr/strings.xml
new file mode 100644
index 0000000..5029612
--- /dev/null
+++ b/car-default-input-service/res/values-mr/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"कार डीफॉल्ट इनपुट सेवा"</string>
+</resources>
diff --git a/car-default-input-service/res/values-ms/strings.xml b/car-default-input-service/res/values-ms/strings.xml
new file mode 100644
index 0000000..663d3ce
--- /dev/null
+++ b/car-default-input-service/res/values-ms/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Perkhidmatan Input Lalai Kereta"</string>
+</resources>
diff --git a/car-default-input-service/res/values-my/strings.xml b/car-default-input-service/res/values-my/strings.xml
new file mode 100644
index 0000000..86102bd
--- /dev/null
+++ b/car-default-input-service/res/values-my/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"ကား၏ မူလအချက်အလက်ထည့်သွင်းခြင်း ဝန်ဆောင်မှု"</string>
+</resources>
diff --git a/car-default-input-service/res/values-nb/strings.xml b/car-default-input-service/res/values-nb/strings.xml
new file mode 100644
index 0000000..293740f
--- /dev/null
+++ b/car-default-input-service/res/values-nb/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Bilens standard inndatatjeneste"</string>
+</resources>
diff --git a/car-default-input-service/res/values-ne/strings.xml b/car-default-input-service/res/values-ne/strings.xml
new file mode 100644
index 0000000..3330c5c
--- /dev/null
+++ b/car-default-input-service/res/values-ne/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"कारको पूर्वनिर्धारित इनपुट सेवा"</string>
+</resources>
diff --git a/car-default-input-service/res/values-nl/strings.xml b/car-default-input-service/res/values-nl/strings.xml
new file mode 100644
index 0000000..04de244
--- /dev/null
+++ b/car-default-input-service/res/values-nl/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Standaard invoerservice voor auto"</string>
+</resources>
diff --git a/car-default-input-service/res/values-or/strings.xml b/car-default-input-service/res/values-or/strings.xml
new file mode 100644
index 0000000..cf56e1a
--- /dev/null
+++ b/car-default-input-service/res/values-or/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"କାର୍‌ର ଡିଫଲ୍ଟ ଇନ୍‌ପୁଟ୍ ସେବା"</string>
+</resources>
diff --git a/car-default-input-service/res/values-pa/strings.xml b/car-default-input-service/res/values-pa/strings.xml
new file mode 100644
index 0000000..c4ee5cb
--- /dev/null
+++ b/car-default-input-service/res/values-pa/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"ਕਾਰ ਦੀ ਪੂਰਵ-ਨਿਰਧਾਰਤ ਇਨਪੁੱਟ ਸੇਵਾ"</string>
+</resources>
diff --git a/car-default-input-service/res/values-pl/strings.xml b/car-default-input-service/res/values-pl/strings.xml
new file mode 100644
index 0000000..2e80e13
--- /dev/null
+++ b/car-default-input-service/res/values-pl/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Domyślna usługa wprowadzania danych w samochodzie"</string>
+</resources>
diff --git a/car-default-input-service/res/values-pt-rPT/strings.xml b/car-default-input-service/res/values-pt-rPT/strings.xml
new file mode 100644
index 0000000..0887bdc
--- /dev/null
+++ b/car-default-input-service/res/values-pt-rPT/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Serviço de entrada predefinido do automóvel"</string>
+</resources>
diff --git a/car-default-input-service/res/values-pt/strings.xml b/car-default-input-service/res/values-pt/strings.xml
new file mode 100644
index 0000000..9325384
--- /dev/null
+++ b/car-default-input-service/res/values-pt/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Serviço de entrada padrão do carro"</string>
+</resources>
diff --git a/car-default-input-service/res/values-ro/strings.xml b/car-default-input-service/res/values-ro/strings.xml
new file mode 100644
index 0000000..40a0a1d
--- /dev/null
+++ b/car-default-input-service/res/values-ro/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Serviciul prestabilit de intrare din mașină"</string>
+</resources>
diff --git a/car-default-input-service/res/values-ru/strings.xml b/car-default-input-service/res/values-ru/strings.xml
new file mode 100644
index 0000000..42aeec3
--- /dev/null
+++ b/car-default-input-service/res/values-ru/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Служба ввода по умолчанию"</string>
+</resources>
diff --git a/car-default-input-service/res/values-si/strings.xml b/car-default-input-service/res/values-si/strings.xml
new file mode 100644
index 0000000..53f62e2
--- /dev/null
+++ b/car-default-input-service/res/values-si/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"මෝටර් රථ පෙරනිමි ආදාන සේවය"</string>
+</resources>
diff --git a/car-default-input-service/res/values-sk/strings.xml b/car-default-input-service/res/values-sk/strings.xml
new file mode 100644
index 0000000..deb945a
--- /dev/null
+++ b/car-default-input-service/res/values-sk/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Predvolená služba vstupu v aute"</string>
+</resources>
diff --git a/car-default-input-service/res/values-sl/strings.xml b/car-default-input-service/res/values-sl/strings.xml
new file mode 100644
index 0000000..d24431d
--- /dev/null
+++ b/car-default-input-service/res/values-sl/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Privzeta vhodna storitev avtomobila"</string>
+</resources>
diff --git a/car-default-input-service/res/values-sq/strings.xml b/car-default-input-service/res/values-sq/strings.xml
new file mode 100644
index 0000000..1b0c1e2
--- /dev/null
+++ b/car-default-input-service/res/values-sq/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Shërbimi i parazgjedhur i hyrjes për makinën"</string>
+</resources>
diff --git a/car-default-input-service/res/values-sr/strings.xml b/car-default-input-service/res/values-sr/strings.xml
new file mode 100644
index 0000000..38620a4
--- /dev/null
+++ b/car-default-input-service/res/values-sr/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Подразумевана услуга за унос за аутомобил"</string>
+</resources>
diff --git a/car-default-input-service/res/values-sv/strings.xml b/car-default-input-service/res/values-sv/strings.xml
new file mode 100644
index 0000000..cde5fba
--- /dev/null
+++ b/car-default-input-service/res/values-sv/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Bilens standardtjänst för indata"</string>
+</resources>
diff --git a/car-default-input-service/res/values-sw/strings.xml b/car-default-input-service/res/values-sw/strings.xml
new file mode 100644
index 0000000..ce99a71
--- /dev/null
+++ b/car-default-input-service/res/values-sw/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Huduma Chaguomsingi ya Kuweka Data ya Gari"</string>
+</resources>
diff --git a/car-default-input-service/res/values-ta/strings.xml b/car-default-input-service/res/values-ta/strings.xml
new file mode 100644
index 0000000..c93e2e4
--- /dev/null
+++ b/car-default-input-service/res/values-ta/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"காருக்கு உற்பத்தியாளர் வழங்கும் சேவை"</string>
+</resources>
diff --git a/car-default-input-service/res/values-te/strings.xml b/car-default-input-service/res/values-te/strings.xml
new file mode 100644
index 0000000..ffd4acf
--- /dev/null
+++ b/car-default-input-service/res/values-te/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"కారు డిఫాల్ట్ ఇన్‌పుట్ సేవ"</string>
+</resources>
diff --git a/car-default-input-service/res/values-th/strings.xml b/car-default-input-service/res/values-th/strings.xml
new file mode 100644
index 0000000..c28d29a
--- /dev/null
+++ b/car-default-input-service/res/values-th/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"บริการป้อนข้อมูลเริ่มต้นของรถ"</string>
+</resources>
diff --git a/car-default-input-service/res/values-tl/strings.xml b/car-default-input-service/res/values-tl/strings.xml
new file mode 100644
index 0000000..b9ae49d
--- /dev/null
+++ b/car-default-input-service/res/values-tl/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Default na Serbisyo sa Input ng Sasakyan"</string>
+</resources>
diff --git a/car-default-input-service/res/values-tr/strings.xml b/car-default-input-service/res/values-tr/strings.xml
new file mode 100644
index 0000000..72f7f26
--- /dev/null
+++ b/car-default-input-service/res/values-tr/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Araç Varsayılan Giriş Hizmeti"</string>
+</resources>
diff --git a/car-default-input-service/res/values-uk/strings.xml b/car-default-input-service/res/values-uk/strings.xml
new file mode 100644
index 0000000..e8d1526
--- /dev/null
+++ b/car-default-input-service/res/values-uk/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Стандартний сервіс даних про вхідні події автомобіля"</string>
+</resources>
diff --git a/car-default-input-service/res/values-ur/strings.xml b/car-default-input-service/res/values-ur/strings.xml
new file mode 100644
index 0000000..a0e1ac0
--- /dev/null
+++ b/car-default-input-service/res/values-ur/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"کار کی ڈیفالٹ ان پٹ سروس"</string>
+</resources>
diff --git a/car-default-input-service/res/values-uz/strings.xml b/car-default-input-service/res/values-uz/strings.xml
new file mode 100644
index 0000000..416cc94
--- /dev/null
+++ b/car-default-input-service/res/values-uz/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Standart matn kiritish xizmati"</string>
+</resources>
diff --git a/car-default-input-service/res/values-vi/strings.xml b/car-default-input-service/res/values-vi/strings.xml
new file mode 100644
index 0000000..9c28716
--- /dev/null
+++ b/car-default-input-service/res/values-vi/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Dịch vụ nhập mặc định trên ô tô"</string>
+</resources>
diff --git a/car-default-input-service/res/values-zh-rCN/strings.xml b/car-default-input-service/res/values-zh-rCN/strings.xml
new file mode 100644
index 0000000..9c6f615
--- /dev/null
+++ b/car-default-input-service/res/values-zh-rCN/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"汽车默认输入服务"</string>
+</resources>
diff --git a/car-default-input-service/res/values-zh-rHK/strings.xml b/car-default-input-service/res/values-zh-rHK/strings.xml
new file mode 100644
index 0000000..7ad2fd3
--- /dev/null
+++ b/car-default-input-service/res/values-zh-rHK/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"汽車預設輸入服務"</string>
+</resources>
diff --git a/car-default-input-service/res/values-zh-rTW/strings.xml b/car-default-input-service/res/values-zh-rTW/strings.xml
new file mode 100644
index 0000000..df86715
--- /dev/null
+++ b/car-default-input-service/res/values-zh-rTW/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"車輛預設輸入服務"</string>
+</resources>
diff --git a/car-default-input-service/res/values-zu/strings.xml b/car-default-input-service/res/values-zu/strings.xml
new file mode 100644
index 0000000..5b5e99e
--- /dev/null
+++ b/car-default-input-service/res/values-zu/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="2732799531977169961">"Isevisi yokufaka ezenzakalelayo yemoto"</string>
+</resources>
diff --git a/car-lib/Android.bp b/car-lib/Android.bp
index 287949e..1d887fa 100644
--- a/car-lib/Android.bp
+++ b/car-lib/Android.bp
@@ -71,7 +71,7 @@
     installable: true,
 }
 
-doc_defaults {
+stubs_defaults {
     name: "android.car-docs-default",
     srcs: [
         "src/**/*.java",
@@ -80,7 +80,6 @@
     libs: [
         "android.car",
     ],
-    custom_template: "droiddoc-templates-sdk",
     product_variables: {
         pdk: {
             enabled: false,
@@ -110,13 +109,24 @@
     ],
 }
 
-droiddoc {
+genrule {
+    name: "android-car-last-released-test-api",
+    srcs: [
+        "api/test-released/*.txt",
+    ],
+    cmd: "cp -f $$(echo $(in) | tr \" \" \"\\n\" | sort -n | tail -1) $(genDir)/last-released-test-api.txt",
+    out: [
+        "last-released-test-api.txt",
+    ],
+}
+
+droidstubs {
     name: "android.car-stubs-docs",
     defaults: ["android.car-docs-default"],
     api_tag_name: "ANDROID_CAR",
     api_filename: "api.txt",
     removed_api_filename: "removed.txt",
-    args: "-hide 113 -hide 110 -nodocs -stubpackages android.car* ",
+    args: "--hide UnavailableSymbol --no-docs --stub-packages android.car* ",
     installable: false,
     check_api: {
         last_released: {
@@ -136,14 +146,14 @@
     },
 }
 
-droiddoc {
+droidstubs {
     name: "android.car-system-stubs-docs",
     defaults: ["android.car-docs-default"],
     api_tag_name: "ANDROID_CAR_SYSTEM",
     api_filename: "api.txt",
     removed_api_filename: "removed.txt",
-    args: "-hide 113 -hide 110 -nodocs -stubpackages android.car* " +
-        "-showAnnotation android.annotation.SystemApi ",
+    args: "--hide UnavailableSymbol --no-docs --stub-packages android.car* " +
+        "--show-annotation android.annotation.SystemApi ",
     installable: false,
     check_api: {
         last_released: {
@@ -163,7 +173,27 @@
     },
 }
 
-droiddoc {
+droidstubs {
+    name: "android.car-test-stubs-docs",
+    defaults: ["android.car-docs-default"],
+    api_tag_name: "ANDROID_CAR_SYSTEM",
+    api_filename: "api.txt",
+    removed_api_filename: "removed.txt",
+    args: "--hide UnavailableSymbol --no-docs --stub-packages android.car* " +
+        "--show-annotation android.annotation.TestApi ",
+    installable: false,
+    check_api: {
+        current: {
+            api_file: "api/test-current.txt",
+            removed_api_file: "api/test-removed.txt",
+            args: " -error 2 -error 3 -error 4 -error 5 -error 6 -error 7 -error 8 -error 9 -error 10 -error 11 " +
+                  " -error 12 -error 13 -error 14 -error 15 -error 16 -error 17 -error 18 -error 19 -error 20 " +
+                  " -error 21 -error 23 -error 24 -error 25 -hide 113 ",
+        },
+    },
+}
+
+droidstubs {
     name: "android.car-stub-docs",
     srcs: [
         "src/**/*.java",
@@ -173,8 +203,7 @@
     ],
     api_tag_name: "ANDROID_CAR_STUB",
     api_filename: "api.txt",
-    custom_template: "droiddoc-templates-sdk",
-    args: "-nodocs -stubpackages android.car* ",
+    args: "--hide UnavailableSymbol --no-docs --stub-packages android.car* ",
     installable: false,
     product_variables: {
         pdk: {
@@ -214,3 +243,19 @@
     },
     compile_dex: true,
 }
+
+java_library_static {
+    name: "android.car-test-stubs",
+    srcs: [
+        ":android.car-test-stubs-docs",
+    ],
+    libs: [
+        "android.car",
+    ],
+    product_variables: {
+        pdk: {
+            enabled: false,
+        },
+    },
+    compile_dex: true,
+}
diff --git a/car-lib/api/baseline.txt b/car-lib/api/baseline.txt
new file mode 100644
index 0000000..16e4b7b
--- /dev/null
+++ b/car-lib/api/baseline.txt
@@ -0,0 +1,41 @@
+// Baseline format: 1.0
+HiddenTypeParameter: android.car.hardware.CarSensorManager#getPropertyList():
+    Method android.car.hardware.CarSensorManager.getPropertyList() references hidden type class android.car.hardware.CarPropertyConfig.
+HiddenTypeParameter: android.car.navigation.CarNavigationStatusManager#getInstrumentClusterInfo():
+    Method android.car.navigation.CarNavigationStatusManager.getInstrumentClusterInfo() references hidden type android.car.navigation.CarNavigationInstrumentCluster.
+
+
+HiddenTypedefConstant: android.car.CarInfoManager#getEvConnectorTypes():
+    Typedef references constant which isn't part of the API, skipping in documentation: android.car.EvConnectorType#UNKNOWN
+HiddenTypedefConstant: android.car.CarInfoManager#getFuelTypes():
+    Typedef references constant which isn't part of the API, skipping in documentation: android.car.FuelType#UNKNOWN
+HiddenTypedefConstant: android.car.hardware.CarSensorManager#getLatestSensorEvent(int) parameter #0:
+    Typedef references constant which isn't part of the API, skipping in documentation: android.car.hardware.CarSensorManager#SENSOR_TYPE_ENGINE_OIL_LEVEL
+HiddenTypedefConstant: android.car.hardware.CarSensorManager#isSensorSupported(int) parameter #0:
+    Typedef references constant which isn't part of the API, skipping in documentation: android.car.hardware.CarSensorManager#SENSOR_TYPE_ENGINE_OIL_LEVEL
+HiddenTypedefConstant: android.car.hardware.CarSensorManager#isSensorSupported(int[], int) parameter #1:
+    Typedef references constant which isn't part of the API, skipping in documentation: android.car.hardware.CarSensorManager#SENSOR_TYPE_ENGINE_OIL_LEVEL
+HiddenTypedefConstant: android.car.hardware.CarSensorManager#registerListener(android.car.hardware.CarSensorManager.OnSensorChangedListener, int, int) parameter #1:
+    Typedef references constant which isn't part of the API, skipping in documentation: android.car.hardware.CarSensorManager#SENSOR_TYPE_ENGINE_OIL_LEVEL
+HiddenTypedefConstant: android.car.hardware.CarSensorManager#unregisterListener(android.car.hardware.CarSensorManager.OnSensorChangedListener, int) parameter #1:
+    Typedef references constant which isn't part of the API, skipping in documentation: android.car.hardware.CarSensorManager#SENSOR_TYPE_ENGINE_OIL_LEVEL
+
+
+ReferencesHidden: android.car.hardware.CarSensorManager#getPropertyList():
+    Class android.car.hardware.CarPropertyConfig is hidden but was referenced (as return type parameter) from public method android.car.hardware.CarSensorManager.getPropertyList()
+ReferencesHidden: android.car.navigation.CarNavigationStatusManager#getInstrumentClusterInfo():
+    Class android.car.navigation.CarNavigationInstrumentCluster is hidden but was referenced (as return type) from public method android.car.navigation.CarNavigationStatusManager.getInstrumentClusterInfo()
+
+
+RequiresPermission: android.car.hardware.CarSensorManager#registerListener(android.car.hardware.CarSensorManager.OnSensorChangedListener, int, int):
+    Method 'registerListener' documentation mentions permissions already declared by @RequiresPermission
+
+
+SdkConstant: android.car.Car#CAR_INTENT_ACTION_MEDIA_TEMPLATE:
+    Field 'CAR_INTENT_ACTION_MEDIA_TEMPLATE' is missing @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
+
+
+Todo: android.car.CarInfoManager#getVehicleId():
+    Documentation mentions 'TODO'
+
+
diff --git a/car-lib/api/current.txt b/car-lib/api/current.txt
index 6744238..410d1ae 100644
--- a/car-lib/api/current.txt
+++ b/car-lib/api/current.txt
@@ -1,81 +1,85 @@
+// Signature format: 2.0
 package android.car {
 
   public final class Car {
-    method public void connect() throws java.lang.IllegalStateException;
-    method public static android.car.Car createCar(android.content.Context, android.content.ServiceConnection, android.os.Handler);
-    method public static android.car.Car createCar(android.content.Context, android.content.ServiceConnection);
+    method @Deprecated public void connect() throws java.lang.IllegalStateException;
+    method @Deprecated public static android.car.Car createCar(android.content.Context, android.content.ServiceConnection, @Nullable android.os.Handler);
+    method @Deprecated public static android.car.Car createCar(android.content.Context, android.content.ServiceConnection);
+    method @Nullable public static android.car.Car createCar(android.content.Context);
+    method @Nullable public static android.car.Car createCar(android.content.Context, @Nullable android.os.Handler);
     method public void disconnect();
     method public int getCarConnectionType();
-    method public java.lang.Object getCarManager(java.lang.String) throws android.car.CarNotConnectedException;
+    method @Nullable public Object getCarManager(String);
     method public boolean isConnected();
     method public boolean isConnecting();
-    field public static final java.lang.String APP_FOCUS_SERVICE = "app_focus";
-    field public static final java.lang.String AUDIO_SERVICE = "audio";
-    field public static final java.lang.String CAR_CONFIGURATION_SERVICE = "configuration";
-    field public static final java.lang.String CAR_EXTRA_MEDIA_PACKAGE = "android.car.intent.extra.MEDIA_PACKAGE";
-    field public static final java.lang.String CAR_INTENT_ACTION_MEDIA_TEMPLATE = "android.car.intent.action.MEDIA_TEMPLATE";
-    field public static final java.lang.String CAR_NAVIGATION_SERVICE = "car_navigation_service";
-    field public static final java.lang.String CAR_UX_RESTRICTION_SERVICE = "uxrestriction";
+    field public static final String APP_FOCUS_SERVICE = "app_focus";
+    field public static final String AUDIO_SERVICE = "audio";
+    field public static final String CAR_CONFIGURATION_SERVICE = "configuration";
+    field public static final String CAR_EXTRA_MEDIA_PACKAGE = "android.car.intent.extra.MEDIA_PACKAGE";
+    field public static final String CAR_INTENT_ACTION_MEDIA_TEMPLATE = "android.car.intent.action.MEDIA_TEMPLATE";
+    field public static final String CAR_NAVIGATION_SERVICE = "car_navigation_service";
+    field public static final String CAR_UX_RESTRICTION_SERVICE = "uxrestriction";
     field public static final int CONNECTION_TYPE_EMBEDDED = 5; // 0x5
-    field public static final java.lang.String INFO_SERVICE = "info";
-    field public static final java.lang.String PACKAGE_SERVICE = "package";
-    field public static final java.lang.String PERMISSION_CAR_CONTROL_AUDIO_VOLUME = "android.car.permission.CAR_CONTROL_AUDIO_VOLUME";
-    field public static final java.lang.String PERMISSION_CAR_INFO = "android.car.permission.CAR_INFO";
-    field public static final java.lang.String PERMISSION_CAR_NAVIGATION_MANAGER = "android.car.permission.CAR_NAVIGATION_MANAGER";
-    field public static final java.lang.String PERMISSION_ENERGY = "android.car.permission.CAR_ENERGY";
-    field public static final java.lang.String PERMISSION_ENERGY_PORTS = "android.car.permission.CAR_ENERGY_PORTS";
-    field public static final java.lang.String PERMISSION_EXTERIOR_ENVIRONMENT = "android.car.permission.CAR_EXTERIOR_ENVIRONMENT";
-    field public static final java.lang.String PERMISSION_IDENTIFICATION = "android.car.permission.CAR_IDENTIFICATION";
-    field public static final java.lang.String PERMISSION_POWERTRAIN = "android.car.permission.CAR_POWERTRAIN";
-    field public static final java.lang.String PERMISSION_SPEED = "android.car.permission.CAR_SPEED";
-    field public static final java.lang.String SENSOR_SERVICE = "sensor";
+    field public static final String INFO_SERVICE = "info";
+    field public static final String PACKAGE_SERVICE = "package";
+    field public static final String PERMISSION_CAR_CONTROL_AUDIO_SETTINGS = "android.car.permission.CAR_CONTROL_AUDIO_SETTINGS";
+    field public static final String PERMISSION_CAR_CONTROL_AUDIO_VOLUME = "android.car.permission.CAR_CONTROL_AUDIO_VOLUME";
+    field public static final String PERMISSION_CAR_INFO = "android.car.permission.CAR_INFO";
+    field public static final String PERMISSION_CAR_NAVIGATION_MANAGER = "android.car.permission.CAR_NAVIGATION_MANAGER";
+    field public static final String PERMISSION_ENERGY = "android.car.permission.CAR_ENERGY";
+    field public static final String PERMISSION_ENERGY_PORTS = "android.car.permission.CAR_ENERGY_PORTS";
+    field public static final String PERMISSION_EXTERIOR_ENVIRONMENT = "android.car.permission.CAR_EXTERIOR_ENVIRONMENT";
+    field public static final String PERMISSION_IDENTIFICATION = "android.car.permission.CAR_IDENTIFICATION";
+    field public static final String PERMISSION_POWERTRAIN = "android.car.permission.CAR_POWERTRAIN";
+    field public static final String PERMISSION_SPEED = "android.car.permission.CAR_SPEED";
+    field public static final String SENSOR_SERVICE = "sensor";
     field public static final int VERSION = 3; // 0x3
   }
 
   public final class CarAppFocusManager {
     method public void abandonAppFocus(android.car.CarAppFocusManager.OnAppFocusOwnershipCallback, int);
     method public void abandonAppFocus(android.car.CarAppFocusManager.OnAppFocusOwnershipCallback);
-    method public void addFocusListener(android.car.CarAppFocusManager.OnAppFocusChangedListener, int) throws android.car.CarNotConnectedException;
-    method public boolean isOwningFocus(android.car.CarAppFocusManager.OnAppFocusOwnershipCallback, int) throws android.car.CarNotConnectedException;
+    method public void addFocusListener(android.car.CarAppFocusManager.OnAppFocusChangedListener, int);
+    method public boolean isOwningFocus(android.car.CarAppFocusManager.OnAppFocusOwnershipCallback, int);
     method public void removeFocusListener(android.car.CarAppFocusManager.OnAppFocusChangedListener, int);
     method public void removeFocusListener(android.car.CarAppFocusManager.OnAppFocusChangedListener);
-    method public int requestAppFocus(int, android.car.CarAppFocusManager.OnAppFocusOwnershipCallback) throws android.car.CarNotConnectedException, java.lang.SecurityException;
+    method public int requestAppFocus(int, android.car.CarAppFocusManager.OnAppFocusOwnershipCallback);
     field public static final int APP_FOCUS_REQUEST_FAILED = 0; // 0x0
     field public static final int APP_FOCUS_REQUEST_SUCCEEDED = 1; // 0x1
     field public static final int APP_FOCUS_TYPE_NAVIGATION = 1; // 0x1
     field public static final int APP_FOCUS_TYPE_VOICE_COMMAND = 2; // 0x2
   }
 
-  public static abstract interface CarAppFocusManager.OnAppFocusChangedListener {
-    method public abstract void onAppFocusChanged(int, boolean);
+  public static interface CarAppFocusManager.OnAppFocusChangedListener {
+    method public void onAppFocusChanged(int, boolean);
   }
 
-  public static abstract interface CarAppFocusManager.OnAppFocusOwnershipCallback {
-    method public abstract void onAppFocusOwnershipGranted(int);
-    method public abstract void onAppFocusOwnershipLost(int);
+  public static interface CarAppFocusManager.OnAppFocusOwnershipCallback {
+    method public void onAppFocusOwnershipGranted(int);
+    method public void onAppFocusOwnershipLost(int);
   }
 
   public final class CarInfoManager {
-    method public float getEvBatteryCapacity() throws android.car.CarNotConnectedException;
-    method public int[] getEvConnectorTypes() throws android.car.CarNotConnectedException;
-    method public float getFuelCapacity() throws android.car.CarNotConnectedException;
-    method public int[] getFuelTypes() throws android.car.CarNotConnectedException;
-    method public java.lang.String getManufacturer() throws android.car.CarNotConnectedException;
-    method public java.lang.String getModel() throws android.car.CarNotConnectedException;
-    method public java.lang.String getModelYear() throws android.car.CarNotConnectedException;
-    method public java.lang.String getVehicleId() throws android.car.CarNotConnectedException;
+    method public float getEvBatteryCapacity();
+    method public int[] getEvConnectorTypes();
+    method public float getFuelCapacity();
+    method public int[] getFuelTypes();
+    method @Nullable public String getManufacturer();
+    method @Nullable public String getModel();
+    method @Nullable public String getModelYear();
+    method public String getVehicleId();
   }
 
-  public class CarNotConnectedException extends java.lang.Exception {
-    ctor public CarNotConnectedException();
-    ctor public CarNotConnectedException(java.lang.String);
-    ctor public CarNotConnectedException(java.lang.String, java.lang.Throwable);
-    ctor public CarNotConnectedException(java.lang.Exception);
+  @Deprecated public class CarNotConnectedException extends java.lang.RuntimeException {
+    ctor @Deprecated public CarNotConnectedException();
+    ctor @Deprecated public CarNotConnectedException(String);
+    ctor @Deprecated public CarNotConnectedException(String, Throwable);
+    ctor @Deprecated public CarNotConnectedException(Exception);
   }
 
   public final class VehiclePropertyIds {
     ctor public VehiclePropertyIds();
-    method public static java.lang.String toString(int);
+    method public static String toString(int);
     field public static final int ABS_ACTIVE = 287310858; // 0x1120040a
     field public static final int AP_POWER_BOOTUP_REASON = 289409538; // 0x11400a02
     field public static final int AP_POWER_STATE_REPORT = 289475073; // 0x11410a01
@@ -154,7 +158,9 @@
     field public static final int PARKING_BRAKE_AUTO_APPLY = 287310851; // 0x11200403
     field public static final int PARKING_BRAKE_ON = 287310850; // 0x11200402
     field public static final int PERF_ODOMETER = 291504644; // 0x11600204
+    field public static final int PERF_STEERING_ANGLE = 291504649; // 0x11600209
     field public static final int PERF_VEHICLE_SPEED = 291504647; // 0x11600207
+    field public static final int PERF_VEHICLE_SPEED_DISPLAY = 291504648; // 0x11600208
     field public static final int RANGE_REMAINING = 291504904; // 0x11600308
     field public static final int SEAT_BACKREST_ANGLE_1_MOVE = 356518792; // 0x15400b88
     field public static final int SEAT_BACKREST_ANGLE_1_POS = 356518791; // 0x15400b87
@@ -195,116 +201,11 @@
 
 }
 
-package android.car.app.menu {
-
-  public abstract class CarMenuCallbacks {
-    ctor public CarMenuCallbacks();
-    method public abstract android.car.app.menu.RootMenu getRootMenu(android.os.Bundle);
-    method public abstract void onCarMenuClosed();
-    method public abstract void onCarMenuClosing();
-    method public abstract void onCarMenuOpened();
-    method public abstract void onCarMenuOpening();
-    method public abstract void onItemClicked(java.lang.String);
-    method public abstract boolean onItemLongClicked(java.lang.String);
-    method public abstract boolean onMenuClicked();
-    method public abstract void subscribe(java.lang.String, android.car.app.menu.SubscriptionCallbacks);
-    method public abstract void unsubscribe(java.lang.String, android.car.app.menu.SubscriptionCallbacks);
-  }
-
-  public class CarMenuConstants {
-    ctor public CarMenuConstants();
-  }
-
-  public static class CarMenuConstants.MenuItemConstants {
-    ctor public CarMenuConstants.MenuItemConstants();
-    field public static final int FLAG_BROWSABLE = 1; // 0x1
-    field public static final int FLAG_FIRSTITEM = 2; // 0x2
-    field public static final java.lang.String KEY_EMPTY_PLACEHOLDER = "android.car.app.menu.empty_placeholder";
-    field public static final java.lang.String KEY_FLAGS = "android.car.app.menu.flags";
-    field public static final java.lang.String KEY_ID = "android.car.app.menu.id";
-    field public static final java.lang.String KEY_LEFTICON = "android.car.app.menu.leftIcon";
-    field public static final java.lang.String KEY_REMOTEVIEWS = "android.car.app.menu.remoteViews";
-    field public static final java.lang.String KEY_RIGHTICON = "android.car.app.menu.rightIcon";
-    field public static final java.lang.String KEY_RIGHTTEXT = "android.car.app.menu.rightText";
-    field public static final java.lang.String KEY_TEXT = "android.car.app.menu.text";
-    field public static final java.lang.String KEY_TITLE = "android.car.app.menu.title";
-    field public static final java.lang.String KEY_WIDGET = "android.car.app.menu.widget";
-    field public static final java.lang.String KEY_WIDGET_STATE = "android.car.app.menu.widget_state";
-    field public static final int WIDGET_CHECKBOX = 1; // 0x1
-    field public static final int WIDGET_TEXT_VIEW = 2; // 0x2
-  }
-
-  public static abstract class CarMenuConstants.MenuItemConstants.MenuItemFlags implements java.lang.annotation.Annotation {
-  }
-
-  public static abstract class CarMenuConstants.MenuItemConstants.WidgetTypes implements java.lang.annotation.Annotation {
-  }
-
-  public abstract class CarUiEntry {
-    ctor public CarUiEntry(android.content.Context, android.content.Context);
-    method public abstract void closeDrawer();
-    method public abstract android.view.View getContentView();
-    method public abstract int getFragmentContainerId();
-    method public abstract java.lang.CharSequence getSearchBoxText();
-    method public abstract void hideMenuButton();
-    method public abstract void hideTitle();
-    method public abstract void onPause();
-    method public abstract void onRestoreInstanceState(android.os.Bundle);
-    method public abstract void onResume();
-    method public abstract void onSaveInstanceState(android.os.Bundle);
-    method public abstract void onStart();
-    method public abstract void onStop();
-    method public abstract void openDrawer();
-    method public abstract void restoreMenuDrawable();
-    method public abstract void setAutoLightDarkMode();
-    method public abstract void setBackground(android.graphics.Bitmap);
-    method public abstract void setCarMenuCallbacks(android.car.app.menu.CarMenuCallbacks);
-    method public abstract void setDarkMode();
-    method public abstract void setLightMode();
-    method public abstract void setMenuButtonBitmap(android.graphics.Bitmap);
-    method public abstract void setMenuButtonColor(int);
-    method public abstract void setScrimColor(int);
-    method public abstract void setSearchBoxColors(int, int, int, int);
-    method public abstract void setSearchBoxEditListener(android.car.app.menu.SearchBoxEditListener);
-    method public abstract void setSearchBoxEndView(android.view.View);
-    method public abstract void setTitle(java.lang.CharSequence);
-    method public abstract void showMenu(java.lang.String, java.lang.String);
-    method public abstract void showSearchBox(android.view.View.OnClickListener);
-    method public abstract void showTitle();
-    method public abstract void showToast(java.lang.String, long);
-    method public abstract android.widget.EditText startInput(java.lang.String, android.view.View.OnClickListener);
-    method public abstract void stopInput();
-    field protected final android.content.Context mAppContext;
-    field protected final android.content.Context mUiLibContext;
-  }
-
-  public class RootMenu {
-    ctor public RootMenu(java.lang.String);
-    ctor public RootMenu(java.lang.String, android.os.Bundle);
-    method public android.os.Bundle getBundle();
-    method public java.lang.String getId();
-  }
-
-  public abstract class SearchBoxEditListener {
-    ctor public SearchBoxEditListener();
-    method public abstract void onEdit(java.lang.String);
-    method public abstract void onSearch(java.lang.String);
-  }
-
-  public abstract class SubscriptionCallbacks {
-    ctor public SubscriptionCallbacks();
-    method public abstract void onChildChanged(java.lang.String, android.os.Bundle);
-    method public abstract void onChildrenLoaded(java.lang.String, java.util.List<android.os.Bundle>);
-    method public abstract void onError(java.lang.String);
-  }
-
-}
-
 package android.car.content.pm {
 
   public final class CarPackageManager {
-    method public boolean isActivityDistractionOptimized(java.lang.String, java.lang.String) throws android.car.CarNotConnectedException;
-    method public boolean isServiceDistractionOptimized(java.lang.String, java.lang.String) throws android.car.CarNotConnectedException;
+    method public boolean isActivityDistractionOptimized(String, String);
+    method public boolean isServiceDistractionOptimized(String, String);
   }
 
 }
@@ -314,7 +215,7 @@
   public class CarUxRestrictions implements android.os.Parcelable {
     ctor public CarUxRestrictions(android.car.drivingstate.CarUxRestrictions);
     method public int describeContents();
-    method public int getActiveRestrictions();
+    method @android.car.drivingstate.CarUxRestrictions.CarUxRestrictionsInfo public int getActiveRestrictions();
     method public int getMaxContentDepth();
     method public int getMaxCumulativeContentItems();
     method public int getMaxRestrictedStringLength();
@@ -337,24 +238,24 @@
   }
 
   public static class CarUxRestrictions.Builder {
-    ctor public CarUxRestrictions.Builder(boolean, int, long);
+    ctor public CarUxRestrictions.Builder(boolean, @android.car.drivingstate.CarUxRestrictions.CarUxRestrictionsInfo int, long);
     method public android.car.drivingstate.CarUxRestrictions build();
     method public android.car.drivingstate.CarUxRestrictions.Builder setMaxContentDepth(int);
     method public android.car.drivingstate.CarUxRestrictions.Builder setMaxCumulativeContentItems(int);
     method public android.car.drivingstate.CarUxRestrictions.Builder setMaxStringLength(int);
   }
 
-  public static abstract class CarUxRestrictions.CarUxRestrictionsInfo implements java.lang.annotation.Annotation {
+  @IntDef(flag=true, prefix={"UX_RESTRICTIONS_"}, value={android.car.drivingstate.CarUxRestrictions.UX_RESTRICTIONS_BASELINE, android.car.drivingstate.CarUxRestrictions.UX_RESTRICTIONS_NO_DIALPAD, android.car.drivingstate.CarUxRestrictions.UX_RESTRICTIONS_NO_FILTERING, android.car.drivingstate.CarUxRestrictions.UX_RESTRICTIONS_LIMIT_STRING_LENGTH, android.car.drivingstate.CarUxRestrictions.UX_RESTRICTIONS_NO_KEYBOARD, android.car.drivingstate.CarUxRestrictions.UX_RESTRICTIONS_NO_VIDEO, android.car.drivingstate.CarUxRestrictions.UX_RESTRICTIONS_LIMIT_CONTENT, android.car.drivingstate.CarUxRestrictions.UX_RESTRICTIONS_NO_SETUP, android.car.drivingstate.CarUxRestrictions.UX_RESTRICTIONS_NO_TEXT_MESSAGE, android.car.drivingstate.CarUxRestrictions.UX_RESTRICTIONS_NO_VOICE_TRANSCRIPTION}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface CarUxRestrictions.CarUxRestrictionsInfo {
   }
 
   public final class CarUxRestrictionsManager {
-    method public android.car.drivingstate.CarUxRestrictions getCurrentCarUxRestrictions() throws android.car.CarNotConnectedException;
-    method public synchronized void registerListener(android.car.drivingstate.CarUxRestrictionsManager.OnUxRestrictionsChangedListener) throws android.car.CarNotConnectedException, java.lang.IllegalArgumentException;
-    method public synchronized void unregisterListener() throws android.car.CarNotConnectedException;
+    method @Nullable public android.car.drivingstate.CarUxRestrictions getCurrentCarUxRestrictions();
+    method public void registerListener(@NonNull android.car.drivingstate.CarUxRestrictionsManager.OnUxRestrictionsChangedListener);
+    method public void unregisterListener();
   }
 
-  public static abstract interface CarUxRestrictionsManager.OnUxRestrictionsChangedListener {
-    method public abstract void onUxRestrictionsChanged(android.car.drivingstate.CarUxRestrictions);
+  public static interface CarUxRestrictionsManager.OnUxRestrictionsChangedListener {
+    method public void onUxRestrictionsChanged(android.car.drivingstate.CarUxRestrictions);
   }
 
 }
@@ -404,12 +305,12 @@
   }
 
   public final class CarSensorManager {
-    method public android.car.hardware.CarSensorEvent getLatestSensorEvent(int) throws android.car.CarNotConnectedException;
-    method public java.util.List<android.car.hardware.CarPropertyConfig> getPropertyList() throws android.car.CarNotConnectedException;
-    method public int[] getSupportedSensors() throws android.car.CarNotConnectedException;
-    method public boolean isSensorSupported(int) throws android.car.CarNotConnectedException;
+    method public android.car.hardware.CarSensorEvent getLatestSensorEvent(int);
+    method public java.util.List<android.car.hardware.CarPropertyConfig> getPropertyList();
+    method public int[] getSupportedSensors();
+    method public boolean isSensorSupported(int);
     method public static boolean isSensorSupported(int[], int);
-    method public boolean registerListener(android.car.hardware.CarSensorManager.OnSensorChangedListener, int, int) throws android.car.CarNotConnectedException, java.lang.IllegalArgumentException;
+    method @RequiresPermission(anyOf={android.car.Car.PERMISSION_SPEED, "android.car.permission.CAR_ENGINE_DETAILED", "android.car.permission.CAR_MILEAGE", android.car.Car.PERMISSION_ENERGY, android.car.Car.PERMISSION_POWERTRAIN, android.car.Car.PERMISSION_EXTERIOR_ENVIRONMENT, "android.car.permission.CAR_DYNAMICS_STATE", android.car.Car.PERMISSION_ENERGY_PORTS}, conditional=true) public boolean registerListener(android.car.hardware.CarSensorManager.OnSensorChangedListener, int, int);
     method public void unregisterListener(android.car.hardware.CarSensorManager.OnSensorChangedListener);
     method public void unregisterListener(android.car.hardware.CarSensorManager.OnSensorChangedListener, int);
     field public static final int SENSOR_RATE_FAST = 10; // 0xa
@@ -435,8 +336,8 @@
     field public static final int SENSOR_TYPE_WHEEL_TICK_DISTANCE = 290521862; // 0x11510306
   }
 
-  public static abstract interface CarSensorManager.OnSensorChangedListener {
-    method public abstract void onSensorChanged(android.car.hardware.CarSensorEvent);
+  public static interface CarSensorManager.OnSensorChangedListener {
+    method public void onSensorChanged(android.car.hardware.CarSensorEvent);
   }
 
 }
@@ -444,23 +345,34 @@
 package android.car.media {
 
   public final class CarAudioManager {
-    method public android.car.media.CarAudioPatchHandle createAudioPatch(java.lang.String, int, int) throws android.car.CarNotConnectedException;
-    method public java.lang.String[] getExternalSources() throws android.car.CarNotConnectedException;
-    method public int getGroupMaxVolume(int) throws android.car.CarNotConnectedException;
-    method public int getGroupMinVolume(int) throws android.car.CarNotConnectedException;
-    method public int getGroupVolume(int) throws android.car.CarNotConnectedException;
-    method public int[] getUsagesForVolumeGroupId(int) throws android.car.CarNotConnectedException;
-    method public int getVolumeGroupCount() throws android.car.CarNotConnectedException;
-    method public int getVolumeGroupIdForUsage(int) throws android.car.CarNotConnectedException;
-    method public static java.lang.String getVolumeSettingsKeyForGroup(int);
-    method public void registerVolumeCallback(android.os.IBinder) throws android.car.CarNotConnectedException;
-    method public void registerVolumeChangeObserver(android.database.ContentObserver);
-    method public void releaseAudioPatch(android.car.media.CarAudioPatchHandle) throws android.car.CarNotConnectedException;
-    method public void setBalanceTowardRight(float) throws android.car.CarNotConnectedException;
-    method public void setFadeTowardFront(float) throws android.car.CarNotConnectedException;
-    method public void setGroupVolume(int, int, int) throws android.car.CarNotConnectedException;
-    method public void unregisterVolumeCallback(android.os.IBinder) throws android.car.CarNotConnectedException;
-    method public void unregisterVolumeChangeObserver(android.database.ContentObserver);
+    method @RequiresPermission(android.car.Car.PERMISSION_CAR_CONTROL_AUDIO_SETTINGS) public android.car.media.CarAudioPatchHandle createAudioPatch(String, int, int);
+    method @RequiresPermission(android.car.Car.PERMISSION_CAR_CONTROL_AUDIO_SETTINGS) @NonNull public String[] getExternalSources();
+    method public int getGroupMaxVolume(int);
+    method @RequiresPermission(android.car.Car.PERMISSION_CAR_CONTROL_AUDIO_VOLUME) public int getGroupMaxVolume(int, int);
+    method public int getGroupMinVolume(int);
+    method @RequiresPermission(android.car.Car.PERMISSION_CAR_CONTROL_AUDIO_VOLUME) public int getGroupMinVolume(int, int);
+    method public int getGroupVolume(int);
+    method @RequiresPermission(android.car.Car.PERMISSION_CAR_CONTROL_AUDIO_VOLUME) public int getGroupVolume(int, int);
+    method @NonNull public int[] getUsagesForVolumeGroupId(int);
+    method @RequiresPermission(android.car.Car.PERMISSION_CAR_CONTROL_AUDIO_VOLUME) @NonNull public int[] getUsagesForVolumeGroupId(int, int);
+    method public int getVolumeGroupCount();
+    method @RequiresPermission(android.car.Car.PERMISSION_CAR_CONTROL_AUDIO_VOLUME) public int getVolumeGroupCount(int);
+    method public int getVolumeGroupIdForUsage(int);
+    method @RequiresPermission(android.car.Car.PERMISSION_CAR_CONTROL_AUDIO_VOLUME) public int getVolumeGroupIdForUsage(int, int);
+    method public void registerCarVolumeCallback(@NonNull android.car.media.CarAudioManager.CarVolumeCallback);
+    method @RequiresPermission(android.car.Car.PERMISSION_CAR_CONTROL_AUDIO_SETTINGS) public void releaseAudioPatch(android.car.media.CarAudioPatchHandle);
+    method @RequiresPermission(android.car.Car.PERMISSION_CAR_CONTROL_AUDIO_VOLUME) public void setBalanceTowardRight(float);
+    method @RequiresPermission(android.car.Car.PERMISSION_CAR_CONTROL_AUDIO_VOLUME) public void setFadeTowardFront(float);
+    method public void setGroupVolume(int, int, int);
+    method @RequiresPermission(android.car.Car.PERMISSION_CAR_CONTROL_AUDIO_VOLUME) public void setGroupVolume(int, int, int, int);
+    method public void unregisterCarVolumeCallback(@NonNull android.car.media.CarAudioManager.CarVolumeCallback);
+    field public static final int PRIMARY_AUDIO_ZONE = 0; // 0x0
+  }
+
+  public abstract static class CarAudioManager.CarVolumeCallback {
+    ctor public CarAudioManager.CarVolumeCallback();
+    method public void onGroupVolumeChanged(int, int, int);
+    method public void onMasterMuteChanged(int, int);
   }
 
   public final class CarAudioPatchHandle implements android.os.Parcelable {
@@ -475,8 +387,8 @@
 package android.car.navigation {
 
   public final class CarNavigationStatusManager {
-    method public android.car.navigation.CarNavigationInstrumentCluster getInstrumentClusterInfo() throws android.car.CarNotConnectedException;
-    method public void sendEvent(int, android.os.Bundle) throws android.car.CarNotConnectedException;
+    method public android.car.navigation.CarNavigationInstrumentCluster getInstrumentClusterInfo();
+    method public void sendEvent(int, android.os.Bundle);
   }
 
 }
@@ -484,7 +396,7 @@
 package android.car.settings {
 
   public class CarConfigurationManager {
-    method public android.car.settings.SpeedBumpConfiguration getSpeedBumpConfiguration() throws android.car.CarNotConnectedException;
+    method public android.car.settings.SpeedBumpConfiguration getSpeedBumpConfiguration();
   }
 
   public class CarSettings {
@@ -493,9 +405,9 @@
 
   public static final class CarSettings.Global {
     ctor public CarSettings.Global();
-    field public static final deprecated java.lang.String KEY_GARAGE_MODE_ENABLED = "android.car.GARAGE_MODE_ENABLED";
-    field public static final deprecated java.lang.String KEY_GARAGE_MODE_MAINTENANCE_WINDOW = "android.car.GARAGE_MODE_MAINTENANCE_WINDOW";
-    field public static final deprecated java.lang.String KEY_GARAGE_MODE_WAKE_UP_TIME = "android.car.GARAGE_MODE_WAKE_UP_TIME";
+    field @Deprecated public static final String KEY_GARAGE_MODE_ENABLED = "android.car.GARAGE_MODE_ENABLED";
+    field @Deprecated public static final String KEY_GARAGE_MODE_MAINTENANCE_WINDOW = "android.car.GARAGE_MODE_MAINTENANCE_WINDOW";
+    field @Deprecated public static final String KEY_GARAGE_MODE_WAKE_UP_TIME = "android.car.GARAGE_MODE_WAKE_UP_TIME";
   }
 
   public final class SpeedBumpConfiguration implements android.os.Parcelable {
diff --git a/car-lib/api/released/3.txt b/car-lib/api/released/3.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/car-lib/api/released/3.txt
diff --git a/car-lib/api/removed.txt b/car-lib/api/removed.txt
index e69de29..d802177 100644
--- a/car-lib/api/removed.txt
+++ b/car-lib/api/removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/car-lib/api/system-baseline.txt b/car-lib/api/system-baseline.txt
new file mode 100644
index 0000000..3d4f02d
--- /dev/null
+++ b/car-lib/api/system-baseline.txt
@@ -0,0 +1,59 @@
+// Baseline format: 1.0
+HiddenTypeParameter: android.car.vms.VmsAvailableLayers#VmsAvailableLayers(java.util.Set<android.car.vms.VmsAssociatedLayer>, int) parameter #0:
+    Parameter associatedLayers references hidden type class android.car.vms.VmsAssociatedLayer.
+HiddenTypeParameter: android.car.vms.VmsAvailableLayers#getAssociatedLayers():
+    Method android.car.vms.VmsAvailableLayers.getAssociatedLayers() references hidden type class android.car.vms.VmsAssociatedLayer.
+HiddenTypeParameter: android.car.vms.VmsOperationRecorder#VmsOperationRecorder(android.car.vms.VmsOperationRecorder.Writer) parameter #0:
+    Parameter writer references hidden type android.car.vms.VmsOperationRecorder.Writer.
+HiddenTypeParameter: android.car.vms.VmsPublisherClientService#getSubscriptions():
+    Method android.car.vms.VmsPublisherClientService.getSubscriptions() references hidden type android.car.vms.VmsSubscriptionState.
+HiddenTypeParameter: android.car.vms.VmsPublisherClientService#onVmsSubscriptionChange(android.car.vms.VmsSubscriptionState) parameter #0:
+    Parameter subscriptionState references hidden type android.car.vms.VmsSubscriptionState.
+
+
+HiddenTypedefConstant: android.car.CarInfoManager#getEvConnectorTypes():
+    Typedef references constant which isn't part of the API, skipping in documentation: android.car.EvConnectorType#UNKNOWN
+HiddenTypedefConstant: android.car.CarInfoManager#getFuelTypes():
+    Typedef references constant which isn't part of the API, skipping in documentation: android.car.FuelType#UNKNOWN
+HiddenTypedefConstant: android.car.hardware.CarPropertyValue#getStatus():
+    Typedef references constant which isn't part of the API, skipping in documentation: android.car.hardware.CarPropertyValue#STATUS_AVAILABLE
+HiddenTypedefConstant: android.car.hardware.CarSensorManager#getLatestSensorEvent(int) parameter #0:
+    Typedef references constant which isn't part of the API, skipping in documentation: android.car.hardware.CarSensorManager#SENSOR_TYPE_ENGINE_OIL_LEVEL
+HiddenTypedefConstant: android.car.hardware.CarSensorManager#isSensorSupported(int) parameter #0:
+    Typedef references constant which isn't part of the API, skipping in documentation: android.car.hardware.CarSensorManager#SENSOR_TYPE_ENGINE_OIL_LEVEL
+HiddenTypedefConstant: android.car.hardware.CarSensorManager#isSensorSupported(int[], int) parameter #1:
+    Typedef references constant which isn't part of the API, skipping in documentation: android.car.hardware.CarSensorManager#SENSOR_TYPE_ENGINE_OIL_LEVEL
+HiddenTypedefConstant: android.car.hardware.CarSensorManager#registerListener(android.car.hardware.CarSensorManager.OnSensorChangedListener, int, int) parameter #1:
+    Typedef references constant which isn't part of the API, skipping in documentation: android.car.hardware.CarSensorManager#SENSOR_TYPE_ENGINE_OIL_LEVEL
+HiddenTypedefConstant: android.car.hardware.CarSensorManager#unregisterListener(android.car.hardware.CarSensorManager.OnSensorChangedListener, int) parameter #1:
+    Typedef references constant which isn't part of the API, skipping in documentation: android.car.hardware.CarSensorManager#SENSOR_TYPE_ENGINE_OIL_LEVEL
+
+
+ReferencesHidden: android.car.vms.VmsAvailableLayers#VmsAvailableLayers(java.util.Set<android.car.vms.VmsAssociatedLayer>, int) parameter #0:
+    Class android.car.vms.VmsAssociatedLayer is hidden but was referenced (as parameter type) from public parameter associatedLayers in android.car.vms.VmsAvailableLayers(java.util.Set<android.car.vms.VmsAssociatedLayer> associatedLayers, int sequence)
+ReferencesHidden: android.car.vms.VmsAvailableLayers#getAssociatedLayers():
+    Class android.car.vms.VmsAssociatedLayer is hidden but was referenced (as return type parameter) from public method android.car.vms.VmsAvailableLayers.getAssociatedLayers()
+ReferencesHidden: android.car.vms.VmsOperationRecorder#VmsOperationRecorder(android.car.vms.VmsOperationRecorder.Writer) parameter #0:
+    Class android.car.vms.VmsOperationRecorder.Writer is hidden but was referenced (as parameter type) from public parameter writer in android.car.vms.VmsOperationRecorder(android.car.vms.VmsOperationRecorder.Writer writer)
+ReferencesHidden: android.car.vms.VmsPublisherClientService#getSubscriptions():
+    Class android.car.vms.VmsSubscriptionState is hidden but was referenced (as return type) from public method android.car.vms.VmsPublisherClientService.getSubscriptions()
+ReferencesHidden: android.car.vms.VmsPublisherClientService#onVmsSubscriptionChange(android.car.vms.VmsSubscriptionState) parameter #0:
+    Class android.car.vms.VmsSubscriptionState is hidden but was referenced (as parameter type) from public parameter subscriptionState in android.car.vms.VmsPublisherClientService.onVmsSubscriptionChange(android.car.vms.VmsSubscriptionState subscriptionState)
+
+
+RequiresPermission: android.car.hardware.CarSensorManager#registerListener(android.car.hardware.CarSensorManager.OnSensorChangedListener, int, int):
+    Method 'registerListener' documentation mentions permissions already declared by @RequiresPermission
+
+
+SdkConstant: android.car.Car#CAR_INTENT_ACTION_MEDIA_TEMPLATE:
+    Field 'CAR_INTENT_ACTION_MEDIA_TEMPLATE' is missing @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
+
+
+Todo: android.car.CarInfoManager#getVehicleId():
+    Documentation mentions 'TODO'
+Todo: android.car.cluster.renderer.InstrumentClusterRenderer:
+    Documentation mentions 'TODO'
+Todo: android.car.drivingstate.CarDrivingStateEvent#DRIVING_STATE_IDLING:
+    Documentation mentions 'TODO'
+
+
diff --git a/car-lib/api/system-current.txt b/car-lib/api/system-current.txt
index fcbe439..185c57f 100644
--- a/car-lib/api/system-current.txt
+++ b/car-lib/api/system-current.txt
@@ -1,47 +1,53 @@
+// Signature format: 2.0
 package android.car {
 
   public final class Car {
-    field public static final java.lang.String CABIN_SERVICE = "cabin";
-    field public static final java.lang.String CAR_DRIVING_STATE_SERVICE = "drivingstate";
-    field public static final java.lang.String DIAGNOSTIC_SERVICE = "diagnostic";
-    field public static final java.lang.String HVAC_SERVICE = "hvac";
-    field public static final java.lang.String PERMISSION_CAR_DIAGNOSTIC_CLEAR = "android.car.permission.CLEAR_CAR_DIAGNOSTICS";
-    field public static final java.lang.String PERMISSION_CAR_DIAGNOSTIC_READ_ALL = "android.car.permission.CAR_DIAGNOSTICS";
-    field public static final java.lang.String PERMISSION_CAR_DRIVING_STATE = "android.car.permission.CAR_DRIVING_STATE";
-    field public static final java.lang.String PERMISSION_CAR_DYNAMICS_STATE = "android.car.permission.CAR_DYNAMICS_STATE";
-    field public static final java.lang.String PERMISSION_CAR_ENGINE_DETAILED = "android.car.permission.CAR_ENGINE_DETAILED";
-    field public static final java.lang.String PERMISSION_CAR_INSTRUMENT_CLUSTER_CONTROL = "android.car.permission.CAR_INSTRUMENT_CLUSTER_CONTROL";
-    field public static final java.lang.String PERMISSION_CAR_POWER = "android.car.permission.CAR_POWER";
-    field public static final java.lang.String PERMISSION_CAR_PROJECTION = "android.car.permission.CAR_PROJECTION";
-    field public static final java.lang.String PERMISSION_CAR_TEST_SERVICE = "android.car.permission.CAR_TEST_SERVICE";
-    field public static final java.lang.String PERMISSION_CONTROL_APP_BLOCKING = "android.car.permission.CONTROL_APP_BLOCKING";
-    field public static final java.lang.String PERMISSION_CONTROL_CAR_CLIMATE = "android.car.permission.CONTROL_CAR_CLIMATE";
-    field public static final java.lang.String PERMISSION_CONTROL_CAR_DOORS = "android.car.permission.CONTROL_CAR_DOORS";
-    field public static final java.lang.String PERMISSION_CONTROL_CAR_MIRRORS = "android.car.permission.CONTROL_CAR_MIRRORS";
-    field public static final java.lang.String PERMISSION_CONTROL_CAR_SEATS = "android.car.permission.CONTROL_CAR_SEATS";
-    field public static final java.lang.String PERMISSION_CONTROL_CAR_WINDOWS = "android.car.permission.CONTROL_CAR_WINDOWS";
-    field public static final java.lang.String PERMISSION_CONTROL_EXTERIOR_LIGHTS = "android.car.permission.CONTROL_CAR_EXTERIOR_LIGHTS";
-    field public static final java.lang.String PERMISSION_EXTERIOR_LIGHTS = "android.car.permission.CAR_EXTERIOR_LIGHTS";
-    field public static final java.lang.String PERMISSION_MILEAGE = "android.car.permission.CAR_MILEAGE";
-    field public static final deprecated java.lang.String PERMISSION_MOCK_VEHICLE_HAL = "android.car.permission.CAR_MOCK_VEHICLE_HAL";
-    field public static final java.lang.String PERMISSION_STORAGE_MONITORING = "android.car.permission.STORAGE_MONITORING";
-    field public static final java.lang.String PERMISSION_TIRES = "android.car.permission.CAR_TIRES";
-    field public static final java.lang.String PERMISSION_VENDOR_EXTENSION = "android.car.permission.CAR_VENDOR_EXTENSION";
-    field public static final java.lang.String PERMISSION_VMS_PUBLISHER = "android.car.permission.VMS_PUBLISHER";
-    field public static final java.lang.String PERMISSION_VMS_SUBSCRIBER = "android.car.permission.VMS_SUBSCRIBER";
-    field public static final java.lang.String POWER_SERVICE = "power";
-    field public static final java.lang.String PROJECTION_SERVICE = "projection";
-    field public static final java.lang.String PROPERTY_SERVICE = "property";
-    field public static final java.lang.String STORAGE_MONITORING_SERVICE = "storage_monitoring";
-    field public static final java.lang.String TEST_SERVICE = "car-service-test";
-    field public static final java.lang.String VENDOR_EXTENSION_SERVICE = "vendor_extension";
-    field public static final java.lang.String VMS_SUBSCRIBER_SERVICE = "vehicle_map_subscriber_service";
+    field public static final String CABIN_SERVICE = "cabin";
+    field public static final String CAR_DRIVING_STATE_SERVICE = "drivingstate";
+    field public static final String CAR_EXTRA_CLUSTER_ACTIVITY_STATE = "android.car.cluster.ClusterActivityState";
+    field public static final String CAR_TRUST_AGENT_ENROLLMENT_SERVICE = "trust_enroll";
+    field public static final String DIAGNOSTIC_SERVICE = "diagnostic";
+    field public static final String HVAC_SERVICE = "hvac";
+    field public static final String PERMISSION_CAR_DIAGNOSTIC_CLEAR = "android.car.permission.CLEAR_CAR_DIAGNOSTICS";
+    field public static final String PERMISSION_CAR_DIAGNOSTIC_READ_ALL = "android.car.permission.CAR_DIAGNOSTICS";
+    field public static final String PERMISSION_CAR_DRIVING_STATE = "android.car.permission.CAR_DRIVING_STATE";
+    field public static final String PERMISSION_CAR_DYNAMICS_STATE = "android.car.permission.CAR_DYNAMICS_STATE";
+    field public static final String PERMISSION_CAR_ENGINE_DETAILED = "android.car.permission.CAR_ENGINE_DETAILED";
+    field public static final String PERMISSION_CAR_ENROLL_TRUST = "android.car.permission.CAR_ENROLL_TRUST";
+    field public static final String PERMISSION_CAR_INSTRUMENT_CLUSTER_CONTROL = "android.car.permission.CAR_INSTRUMENT_CLUSTER_CONTROL";
+    field public static final String PERMISSION_CAR_POWER = "android.car.permission.CAR_POWER";
+    field public static final String PERMISSION_CAR_PROJECTION = "android.car.permission.CAR_PROJECTION";
+    field public static final String PERMISSION_CAR_TEST_SERVICE = "android.car.permission.CAR_TEST_SERVICE";
+    field public static final String PERMISSION_CONTROL_APP_BLOCKING = "android.car.permission.CONTROL_APP_BLOCKING";
+    field public static final String PERMISSION_CONTROL_CAR_CLIMATE = "android.car.permission.CONTROL_CAR_CLIMATE";
+    field public static final String PERMISSION_CONTROL_CAR_DOORS = "android.car.permission.CONTROL_CAR_DOORS";
+    field public static final String PERMISSION_CONTROL_CAR_MIRRORS = "android.car.permission.CONTROL_CAR_MIRRORS";
+    field public static final String PERMISSION_CONTROL_CAR_SEATS = "android.car.permission.CONTROL_CAR_SEATS";
+    field public static final String PERMISSION_CONTROL_CAR_WINDOWS = "android.car.permission.CONTROL_CAR_WINDOWS";
+    field public static final String PERMISSION_CONTROL_EXTERIOR_LIGHTS = "android.car.permission.CONTROL_CAR_EXTERIOR_LIGHTS";
+    field public static final String PERMISSION_EXTERIOR_LIGHTS = "android.car.permission.CAR_EXTERIOR_LIGHTS";
+    field public static final String PERMISSION_MILEAGE = "android.car.permission.CAR_MILEAGE";
+    field @Deprecated public static final String PERMISSION_MOCK_VEHICLE_HAL = "android.car.permission.CAR_MOCK_VEHICLE_HAL";
+    field public static final String PERMISSION_STORAGE_MONITORING = "android.car.permission.STORAGE_MONITORING";
+    field public static final String PERMISSION_TIRES = "android.car.permission.CAR_TIRES";
+    field public static final String PERMISSION_VENDOR_EXTENSION = "android.car.permission.CAR_VENDOR_EXTENSION";
+    field public static final String PERMISSION_VMS_PUBLISHER = "android.car.permission.VMS_PUBLISHER";
+    field public static final String PERMISSION_VMS_SUBSCRIBER = "android.car.permission.VMS_SUBSCRIBER";
+    field public static final String POWER_SERVICE = "power";
+    field public static final String PROJECTION_SERVICE = "projection";
+    field public static final String PROPERTY_SERVICE = "property";
+    field public static final String STORAGE_MONITORING_SERVICE = "storage_monitoring";
+    field public static final String TEST_SERVICE = "car-service-test";
+    field public static final String VENDOR_EXTENSION_SERVICE = "vendor_extension";
+    field public static final String VMS_SUBSCRIBER_SERVICE = "vehicle_map_subscriber_service";
   }
 
   public final class CarProjectionManager {
     method public void onCarDisconnected();
-    method public void registerProjectionListener(android.car.CarProjectionManager.CarProjectionListener, int) throws android.car.CarNotConnectedException;
-    method public void registerProjectionRunner(android.content.Intent) throws android.car.CarNotConnectedException;
+    method public void registerProjectionListener(android.car.CarProjectionManager.CarProjectionListener, int);
+    method public void registerProjectionRunner(android.content.Intent);
+    method public boolean releaseBluetoothProfileInhibit(android.bluetooth.BluetoothDevice, int, android.os.IBinder);
+    method public boolean requestBluetoothProfileInhibit(android.bluetooth.BluetoothDevice, int, android.os.IBinder);
     method public void startProjectionAccessPoint(android.car.CarProjectionManager.ProjectionAccessPointCallback);
     method public void stopProjectionAccessPoint();
     method public void unregisterProjectionListener();
@@ -50,11 +56,11 @@
     field public static final int PROJECTION_VOICE_SEARCH = 1; // 0x1
   }
 
-  public static abstract interface CarProjectionManager.CarProjectionListener {
-    method public abstract void onVoiceAssistantRequest(boolean);
+  public static interface CarProjectionManager.CarProjectionListener {
+    method public void onVoiceAssistantRequest(boolean);
   }
 
-  public static abstract class CarProjectionManager.ProjectionAccessPointCallback {
+  public abstract static class CarProjectionManager.ProjectionAccessPointCallback {
     ctor public CarProjectionManager.ProjectionAccessPointCallback();
     method public void onFailed(int);
     method public void onStarted(android.net.wifi.WifiConfiguration);
@@ -135,40 +141,43 @@
 
 package android.car.cluster {
 
-  public class CarInstrumentClusterManager {
-    method public void registerCallback(java.lang.String, android.car.cluster.CarInstrumentClusterManager.Callback) throws android.car.CarNotConnectedException;
-    method public void startActivity(android.content.Intent) throws android.car.CarNotConnectedException;
-    method public void unregisterCallback(android.car.cluster.CarInstrumentClusterManager.Callback) throws android.car.CarNotConnectedException;
-    field public static final java.lang.String CATEGORY_NAVIGATION = "android.car.cluster.NAVIGATION";
-    field public static final java.lang.String KEY_EXTRA_ACTIVITY_STATE = "android.car.cluster.ClusterActivityState";
+  @Deprecated public class CarInstrumentClusterManager {
+    method @Deprecated public void registerCallback(String, android.car.cluster.CarInstrumentClusterManager.Callback);
+    method @Deprecated public void startActivity(android.content.Intent);
+    method @Deprecated public void unregisterCallback(android.car.cluster.CarInstrumentClusterManager.Callback);
+    field @Deprecated public static final String CATEGORY_NAVIGATION = "android.car.cluster.NAVIGATION";
+    field @Deprecated public static final String KEY_EXTRA_ACTIVITY_STATE = "android.car.cluster.ClusterActivityState";
   }
 
-  public static abstract interface CarInstrumentClusterManager.Callback {
-    method public abstract void onClusterActivityStateChanged(java.lang.String, android.os.Bundle);
+  @Deprecated public static interface CarInstrumentClusterManager.Callback {
+    method @Deprecated public void onClusterActivityStateChanged(String, android.os.Bundle);
   }
 
 }
 
 package android.car.cluster.renderer {
 
-  public abstract class InstrumentClusterRenderer {
-    ctor public InstrumentClusterRenderer();
-    method protected abstract android.car.cluster.renderer.NavigationRenderer createNavigationRenderer();
-    method public synchronized android.car.cluster.renderer.NavigationRenderer getNavigationRenderer();
-    method public final synchronized void initialize();
-    method public abstract void onCreate(android.content.Context);
-    method public abstract void onStart();
-    method public abstract void onStop();
+  @Deprecated public abstract class InstrumentClusterRenderer {
+    ctor @Deprecated public InstrumentClusterRenderer();
+    method @Deprecated protected abstract android.car.cluster.renderer.NavigationRenderer createNavigationRenderer();
+    method @Deprecated @Nullable public android.car.cluster.renderer.NavigationRenderer getNavigationRenderer();
+    method @Deprecated @UiThread public final void initialize();
+    method @Deprecated public abstract void onCreate(android.content.Context);
+    method @Deprecated public abstract void onStart();
+    method @Deprecated public abstract void onStop();
   }
 
   public abstract class InstrumentClusterRenderingService extends android.app.Service {
     ctor public InstrumentClusterRenderingService();
-    method protected abstract android.car.cluster.renderer.NavigationRenderer getNavigationRenderer();
-    method public android.os.IBinder onBind(android.content.Intent);
-    method protected void onKeyEvent(android.view.KeyEvent);
+    method @MainThread @Nullable public abstract android.car.cluster.renderer.NavigationRenderer getNavigationRenderer();
+    method @CallSuper public android.os.IBinder onBind(android.content.Intent);
+    method @MainThread public void onKeyEvent(@NonNull android.view.KeyEvent);
+    method @MainThread public void onNavigationComponentLaunched();
+    method @MainThread public void onNavigationComponentReleased();
+    method protected boolean startNavigationActivity(@NonNull android.content.ComponentName);
   }
 
-  public abstract class NavigationRenderer {
+  @UiThread public abstract class NavigationRenderer {
     ctor public NavigationRenderer();
     method public abstract android.car.navigation.CarNavigationInstrumentCluster getNavigationProperties();
     method public abstract void onEvent(int, android.os.Bundle);
@@ -179,18 +188,18 @@
 package android.car.content.pm {
 
   public class AppBlockingPackageInfo implements android.os.Parcelable {
-    ctor public AppBlockingPackageInfo(java.lang.String, int, int, int, android.content.pm.Signature[], java.lang.String[]);
+    ctor public AppBlockingPackageInfo(String, int, int, int, @Nullable android.content.pm.Signature[], @Nullable String[]);
     ctor public AppBlockingPackageInfo(android.os.Parcel);
     method public int describeContents();
     method public void writeToParcel(android.os.Parcel, int);
     field public static final android.os.Parcelable.Creator<android.car.content.pm.AppBlockingPackageInfo> CREATOR;
     field public static final int FLAG_SYSTEM_APP = 1; // 0x1
     field public static final int FLAG_WHOLE_ACTIVITY = 2; // 0x2
-    field public final java.lang.String[] activities;
+    field public final String[] activities;
     field public final int flags;
     field public final int maxRevisionCode;
     field public final int minRevisionCode;
-    field public final java.lang.String packageName;
+    field public final String packageName;
     field public final android.content.pm.Signature[] signatures;
   }
 
@@ -208,12 +217,12 @@
     ctor public CarAppBlockingPolicyService();
     method protected abstract android.car.content.pm.CarAppBlockingPolicy getAppBlockingPolicy();
     method public android.os.IBinder onBind(android.content.Intent);
-    field public static final java.lang.String SERVICE_INTERFACE = "android.car.content.pm.CarAppBlockingPolicyService";
+    field public static final String SERVICE_INTERFACE = "android.car.content.pm.CarAppBlockingPolicyService";
   }
 
   public final class CarPackageManager {
-    method public boolean isActivityBackedBySafeActivity(android.content.ComponentName) throws android.car.CarNotConnectedException;
-    method public void setAppBlockingPolicy(java.lang.String, android.car.content.pm.CarAppBlockingPolicy, int) throws android.car.CarNotConnectedException, java.lang.IllegalArgumentException, java.lang.SecurityException;
+    method public boolean isActivityBackedBySafeActivity(android.content.ComponentName);
+    method public void setAppBlockingPolicy(String, android.car.content.pm.CarAppBlockingPolicy, int);
     field public static final int FLAG_SET_POLICY_ADD = 2; // 0x2
     field public static final int FLAG_SET_POLICY_REMOVE = 4; // 0x4
     field public static final int FLAG_SET_POLICY_WAIT_FOR_CHANGE = 1; // 0x1
@@ -226,24 +235,24 @@
   public class CarDiagnosticEvent implements android.os.Parcelable {
     ctor public CarDiagnosticEvent(android.os.Parcel);
     method public int describeContents();
-    method public java.lang.Integer getFuelSystemStatus();
-    method public java.lang.Integer getFuelType();
-    method public android.car.diagnostic.CarDiagnosticEvent.CommonIgnitionMonitors getIgnitionMonitors();
-    method public java.lang.Integer getSecondaryAirStatus();
+    method @Nullable @android.car.diagnostic.CarDiagnosticEvent.FuelSystemStatus.Status public Integer getFuelSystemStatus();
+    method @Nullable @android.car.diagnostic.CarDiagnosticEvent.FuelType.Type public Integer getFuelType();
+    method @Nullable public android.car.diagnostic.CarDiagnosticEvent.CommonIgnitionMonitors getIgnitionMonitors();
+    method @Nullable @android.car.diagnostic.CarDiagnosticEvent.SecondaryAirStatus.Status public Integer getSecondaryAirStatus();
     method public float getSystemFloatSensor(int, float);
-    method public java.lang.Float getSystemFloatSensor(int);
+    method @Nullable public Float getSystemFloatSensor(int);
     method public int getSystemIntegerSensor(int, int);
-    method public java.lang.Integer getSystemIntegerSensor(int);
+    method @Nullable public Integer getSystemIntegerSensor(int);
     method public float getVendorFloatSensor(int, float);
-    method public java.lang.Float getVendorFloatSensor(int);
+    method @Nullable public Float getVendorFloatSensor(int);
     method public int getVendorIntegerSensor(int, int);
-    method public java.lang.Integer getVendorIntegerSensor(int);
+    method @Nullable public Integer getVendorIntegerSensor(int);
     method public boolean isFreezeFrame();
     method public boolean isLiveFrame();
     method public void writeToJson(android.util.JsonWriter) throws java.io.IOException;
     method public void writeToParcel(android.os.Parcel, int);
     field public static final android.os.Parcelable.Creator<android.car.diagnostic.CarDiagnosticEvent> CREATOR;
-    field public final java.lang.String dtc;
+    field public final String dtc;
     field public final int frameType;
     field public final long timestamp;
   }
@@ -253,14 +262,14 @@
     method public android.car.diagnostic.CarDiagnosticEvent build();
     method public static android.car.diagnostic.CarDiagnosticEvent.Builder newFreezeFrameBuilder();
     method public static android.car.diagnostic.CarDiagnosticEvent.Builder newLiveFrameBuilder();
-    method public android.car.diagnostic.CarDiagnosticEvent.Builder withDtc(java.lang.String);
+    method public android.car.diagnostic.CarDiagnosticEvent.Builder withDtc(String);
     method public android.car.diagnostic.CarDiagnosticEvent.Builder withFloatValue(int, float);
     method public android.car.diagnostic.CarDiagnosticEvent.Builder withIntValue(int, int);
   }
 
   public static class CarDiagnosticEvent.CommonIgnitionMonitors {
-    method public android.car.diagnostic.CarDiagnosticEvent.CompressionIgnitionMonitors asCompressionIgnitionMonitors();
-    method public android.car.diagnostic.CarDiagnosticEvent.SparkIgnitionMonitors asSparkIgnitionMonitors();
+    method @Nullable public android.car.diagnostic.CarDiagnosticEvent.CompressionIgnitionMonitors asCompressionIgnitionMonitors();
+    method @Nullable public android.car.diagnostic.CarDiagnosticEvent.SparkIgnitionMonitors asSparkIgnitionMonitors();
     field public final android.car.diagnostic.CarDiagnosticEvent.IgnitionMonitor components;
     field public final android.car.diagnostic.CarDiagnosticEvent.IgnitionMonitor fuelSystem;
     field public final android.car.diagnostic.CarDiagnosticEvent.IgnitionMonitor misfire;
@@ -283,7 +292,7 @@
     field public static final int OPEN_SYSTEM_FAILURE = 8; // 0x8
   }
 
-  public static abstract class CarDiagnosticEvent.FuelSystemStatus.Status implements java.lang.annotation.Annotation {
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @IntDef({android.car.diagnostic.CarDiagnosticEvent.FuelSystemStatus.OPEN_INSUFFICIENT_ENGINE_TEMPERATURE, android.car.diagnostic.CarDiagnosticEvent.FuelSystemStatus.CLOSED_LOOP, android.car.diagnostic.CarDiagnosticEvent.FuelSystemStatus.OPEN_ENGINE_LOAD_OR_DECELERATION, android.car.diagnostic.CarDiagnosticEvent.FuelSystemStatus.OPEN_SYSTEM_FAILURE, android.car.diagnostic.CarDiagnosticEvent.FuelSystemStatus.CLOSED_LOOP_BUT_FEEDBACK_FAULT}) public static @interface CarDiagnosticEvent.FuelSystemStatus.Status {
   }
 
   public static final class CarDiagnosticEvent.FuelType {
@@ -313,7 +322,7 @@
     field public static final int PROPANE = 7; // 0x7
   }
 
-  public static abstract class CarDiagnosticEvent.FuelType.Type implements java.lang.annotation.Annotation {
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @IntDef({android.car.diagnostic.CarDiagnosticEvent.FuelType.NOT_AVAILABLE, android.car.diagnostic.CarDiagnosticEvent.FuelType.GASOLINE, android.car.diagnostic.CarDiagnosticEvent.FuelType.METHANOL, android.car.diagnostic.CarDiagnosticEvent.FuelType.ETHANOL, android.car.diagnostic.CarDiagnosticEvent.FuelType.DIESEL, android.car.diagnostic.CarDiagnosticEvent.FuelType.LPG, android.car.diagnostic.CarDiagnosticEvent.FuelType.CNG, android.car.diagnostic.CarDiagnosticEvent.FuelType.PROPANE, android.car.diagnostic.CarDiagnosticEvent.FuelType.ELECTRIC, android.car.diagnostic.CarDiagnosticEvent.FuelType.BIFUEL_RUNNING_GASOLINE, android.car.diagnostic.CarDiagnosticEvent.FuelType.BIFUEL_RUNNING_METHANOL, android.car.diagnostic.CarDiagnosticEvent.FuelType.BIFUEL_RUNNING_ETHANOL, android.car.diagnostic.CarDiagnosticEvent.FuelType.BIFUEL_RUNNING_LPG, android.car.diagnostic.CarDiagnosticEvent.FuelType.BIFUEL_RUNNING_CNG, android.car.diagnostic.CarDiagnosticEvent.FuelType.BIFUEL_RUNNING_PROPANE, android.car.diagnostic.CarDiagnosticEvent.FuelType.BIFUEL_RUNNING_ELECTRIC, android.car.diagnostic.CarDiagnosticEvent.FuelType.BIFUEL_RUNNING_ELECTRIC_AND_COMBUSTION, android.car.diagnostic.CarDiagnosticEvent.FuelType.HYBRID_GASOLINE, android.car.diagnostic.CarDiagnosticEvent.FuelType.HYBRID_ETHANOL, android.car.diagnostic.CarDiagnosticEvent.FuelType.HYBRID_DIESEL, android.car.diagnostic.CarDiagnosticEvent.FuelType.HYBRID_ELECTRIC, android.car.diagnostic.CarDiagnosticEvent.FuelType.HYBRID_RUNNING_ELECTRIC_AND_COMBUSTION, android.car.diagnostic.CarDiagnosticEvent.FuelType.HYBRID_REGENERATIVE, android.car.diagnostic.CarDiagnosticEvent.FuelType.BIFUEL_RUNNING_DIESEL}) public static @interface CarDiagnosticEvent.FuelType.Type {
   }
 
   public static final class CarDiagnosticEvent.IgnitionMonitor {
@@ -328,7 +337,7 @@
     field public static final int UPSTREAM = 1; // 0x1
   }
 
-  public static abstract class CarDiagnosticEvent.SecondaryAirStatus.Status implements java.lang.annotation.Annotation {
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @IntDef({android.car.diagnostic.CarDiagnosticEvent.SecondaryAirStatus.UPSTREAM, android.car.diagnostic.CarDiagnosticEvent.SecondaryAirStatus.DOWNSTREAM_OF_CATALYCIC_CONVERTER, android.car.diagnostic.CarDiagnosticEvent.SecondaryAirStatus.FROM_OUTSIDE_OR_OFF, android.car.diagnostic.CarDiagnosticEvent.SecondaryAirStatus.PUMP_ON_FOR_DIAGNOSTICS}) public static @interface CarDiagnosticEvent.SecondaryAirStatus.Status {
   }
 
   public static final class CarDiagnosticEvent.SparkIgnitionMonitors extends android.car.diagnostic.CarDiagnosticEvent.CommonIgnitionMonitors {
@@ -343,27 +352,27 @@
   }
 
   public final class CarDiagnosticManager {
-    method public boolean clearFreezeFrames(long...) throws android.car.CarNotConnectedException;
-    method public android.car.diagnostic.CarDiagnosticEvent getFreezeFrame(long) throws android.car.CarNotConnectedException;
-    method public long[] getFreezeFrameTimestamps() throws android.car.CarNotConnectedException;
-    method public android.car.diagnostic.CarDiagnosticEvent getLatestLiveFrame() throws android.car.CarNotConnectedException;
-    method public boolean isClearFreezeFramesSupported() throws android.car.CarNotConnectedException;
-    method public boolean isFreezeFrameNotificationSupported() throws android.car.CarNotConnectedException;
-    method public boolean isGetFreezeFrameSupported() throws android.car.CarNotConnectedException;
-    method public boolean isLiveFrameSupported() throws android.car.CarNotConnectedException;
-    method public boolean isSelectiveClearFreezeFramesSupported() throws android.car.CarNotConnectedException;
+    method public boolean clearFreezeFrames(long...);
+    method @Nullable public android.car.diagnostic.CarDiagnosticEvent getFreezeFrame(long);
+    method public long[] getFreezeFrameTimestamps();
+    method @Nullable public android.car.diagnostic.CarDiagnosticEvent getLatestLiveFrame();
+    method public boolean isClearFreezeFramesSupported();
+    method public boolean isFreezeFrameNotificationSupported();
+    method public boolean isGetFreezeFrameSupported();
+    method public boolean isLiveFrameSupported();
+    method public boolean isSelectiveClearFreezeFramesSupported();
     method public void onCarDisconnected();
-    method public boolean registerListener(android.car.diagnostic.CarDiagnosticManager.OnDiagnosticEventListener, int, int) throws android.car.CarNotConnectedException, java.lang.IllegalArgumentException;
+    method public boolean registerListener(android.car.diagnostic.CarDiagnosticManager.OnDiagnosticEventListener, @android.car.diagnostic.CarDiagnosticManager.FrameType int, int);
     method public void unregisterListener(android.car.diagnostic.CarDiagnosticManager.OnDiagnosticEventListener);
     field public static final int FRAME_TYPE_FREEZE = 1; // 0x1
     field public static final int FRAME_TYPE_LIVE = 0; // 0x0
   }
 
-  public static abstract class CarDiagnosticManager.FrameType implements java.lang.annotation.Annotation {
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @IntDef({android.car.diagnostic.CarDiagnosticManager.FRAME_TYPE_LIVE, android.car.diagnostic.CarDiagnosticManager.FRAME_TYPE_FREEZE}) public static @interface CarDiagnosticManager.FrameType {
   }
 
-  public static abstract interface CarDiagnosticManager.OnDiagnosticEventListener {
-    method public abstract void onDiagnosticEvent(android.car.diagnostic.CarDiagnosticEvent);
+  public static interface CarDiagnosticManager.OnDiagnosticEventListener {
+    method public void onDiagnosticEvent(android.car.diagnostic.CarDiagnosticEvent);
   }
 
   public final class FloatSensorIndex {
@@ -497,13 +506,13 @@
   }
 
   public final class CarDrivingStateManager {
-    method public android.car.drivingstate.CarDrivingStateEvent getCurrentCarDrivingState() throws android.car.CarNotConnectedException;
-    method public synchronized void registerListener(android.car.drivingstate.CarDrivingStateManager.CarDrivingStateEventListener) throws android.car.CarNotConnectedException, java.lang.IllegalArgumentException;
-    method public synchronized void unregisterListener() throws android.car.CarNotConnectedException;
+    method @Nullable public android.car.drivingstate.CarDrivingStateEvent getCurrentCarDrivingState();
+    method public void registerListener(@NonNull android.car.drivingstate.CarDrivingStateManager.CarDrivingStateEventListener);
+    method public void unregisterListener();
   }
 
-  public static abstract interface CarDrivingStateManager.CarDrivingStateEventListener {
-    method public abstract void onDrivingStateChanged(android.car.drivingstate.CarDrivingStateEvent);
+  public static interface CarDrivingStateManager.CarDrivingStateEventListener {
+    method public void onDrivingStateChanged(android.car.drivingstate.CarDrivingStateEvent);
   }
 
 }
@@ -518,28 +527,28 @@
     method public int getAreaType();
     method public int getChangeMode();
     method public java.util.List<java.lang.Integer> getConfigArray();
-    method public java.lang.String getConfigString();
+    method public String getConfigString();
     method public int getFirstAndOnlyAreaId();
     method public float getMaxSampleRate();
-    method public T getMaxValue(int);
-    method public T getMaxValue();
+    method @Nullable public T getMaxValue(int);
+    method @Nullable public T getMaxValue();
     method public float getMinSampleRate();
-    method public T getMinValue(int);
-    method public T getMinValue();
+    method @Nullable public T getMinValue(int);
+    method @Nullable public T getMinValue();
     method public int getPropertyId();
-    method public java.lang.Class<T> getPropertyType();
+    method public Class<T> getPropertyType();
     method public boolean hasArea(int);
     method public boolean isGlobalProperty();
-    method public static <T> android.car.hardware.CarPropertyConfig.Builder<T> newBuilder(java.lang.Class<T>, int, int, int);
-    method public static <T> android.car.hardware.CarPropertyConfig.Builder<T> newBuilder(java.lang.Class<T>, int, int);
+    method public static <T> android.car.hardware.CarPropertyConfig.Builder<T> newBuilder(Class<T>, int, int, int);
+    method public static <T> android.car.hardware.CarPropertyConfig.Builder<T> newBuilder(Class<T>, int, int);
     method public void writeToParcel(android.os.Parcel, int);
     field public static final android.os.Parcelable.Creator<android.car.hardware.CarPropertyConfig> CREATOR;
   }
 
   public static class CarPropertyConfig.AreaConfig<T> implements android.os.Parcelable {
     method public int describeContents();
-    method public T getMaxValue();
-    method public T getMinValue();
+    method @Nullable public T getMaxValue();
+    method @Nullable public T getMinValue();
     method public void writeToParcel(android.os.Parcel, int);
     field public static final android.os.Parcelable.Creator<android.car.hardware.CarPropertyConfig.AreaConfig<java.lang.Object>> CREATOR;
   }
@@ -552,7 +561,7 @@
     method public android.car.hardware.CarPropertyConfig.Builder<T> setAccess(int);
     method public android.car.hardware.CarPropertyConfig.Builder<T> setChangeMode(int);
     method public android.car.hardware.CarPropertyConfig.Builder<T> setConfigArray(java.util.ArrayList<java.lang.Integer>);
-    method public android.car.hardware.CarPropertyConfig.Builder<T> setConfigString(java.lang.String);
+    method public android.car.hardware.CarPropertyConfig.Builder<T> setConfigString(String);
     method public android.car.hardware.CarPropertyConfig.Builder<T> setMaxSampleRate(float);
     method public android.car.hardware.CarPropertyConfig.Builder<T> setMinSampleRate(float);
   }
@@ -572,19 +581,19 @@
   }
 
   public final class CarVendorExtensionManager {
-    method public <E> E getGlobalProperty(java.lang.Class<E>, int) throws android.car.CarNotConnectedException;
-    method public java.util.List<android.car.hardware.CarPropertyConfig> getProperties() throws android.car.CarNotConnectedException;
-    method public <E> E getProperty(java.lang.Class<E>, int, int) throws android.car.CarNotConnectedException;
-    method public boolean isPropertyAvailable(int, int) throws android.car.CarNotConnectedException;
-    method public void registerCallback(android.car.hardware.CarVendorExtensionManager.CarVendorExtensionCallback) throws android.car.CarNotConnectedException;
-    method public <E> void setGlobalProperty(java.lang.Class<E>, int, E) throws android.car.CarNotConnectedException;
-    method public <E> void setProperty(java.lang.Class<E>, int, int, E) throws android.car.CarNotConnectedException;
-    method public void unregisterCallback(android.car.hardware.CarVendorExtensionManager.CarVendorExtensionCallback) throws android.car.CarNotConnectedException;
+    method public <E> E getGlobalProperty(Class<E>, int);
+    method public java.util.List<android.car.hardware.CarPropertyConfig> getProperties();
+    method public <E> E getProperty(Class<E>, int, int);
+    method public boolean isPropertyAvailable(int, int);
+    method public void registerCallback(android.car.hardware.CarVendorExtensionManager.CarVendorExtensionCallback);
+    method public <E> void setGlobalProperty(Class<E>, int, E);
+    method public <E> void setProperty(Class<E>, int, int, E);
+    method public void unregisterCallback(android.car.hardware.CarVendorExtensionManager.CarVendorExtensionCallback);
   }
 
-  public static abstract interface CarVendorExtensionManager.CarVendorExtensionCallback {
-    method public abstract void onChangeEvent(android.car.hardware.CarPropertyValue);
-    method public abstract void onErrorEvent(int, int);
+  public static interface CarVendorExtensionManager.CarVendorExtensionCallback {
+    method public void onChangeEvent(android.car.hardware.CarPropertyValue);
+    method public void onErrorEvent(int, int);
   }
 
 }
@@ -592,16 +601,16 @@
 package android.car.hardware.cabin {
 
   public final class CarCabinManager {
-    method public boolean getBooleanProperty(int, int) throws android.car.CarNotConnectedException;
-    method public float getFloatProperty(int, int) throws android.car.CarNotConnectedException;
-    method public int getIntProperty(int, int) throws android.car.CarNotConnectedException;
-    method public java.util.List<android.car.hardware.CarPropertyConfig> getPropertyList() throws android.car.CarNotConnectedException;
+    method public boolean getBooleanProperty(int, int);
+    method public float getFloatProperty(int, int);
+    method public int getIntProperty(int, int);
+    method public java.util.List<android.car.hardware.CarPropertyConfig> getPropertyList();
     method public static boolean isZonedProperty(int);
-    method public synchronized void registerCallback(android.car.hardware.cabin.CarCabinManager.CarCabinEventCallback) throws android.car.CarNotConnectedException;
-    method public void setBooleanProperty(int, int, boolean) throws android.car.CarNotConnectedException;
-    method public void setFloatProperty(int, int, float) throws android.car.CarNotConnectedException;
-    method public void setIntProperty(int, int, int) throws android.car.CarNotConnectedException;
-    method public synchronized void unregisterCallback(android.car.hardware.cabin.CarCabinManager.CarCabinEventCallback) throws android.car.CarNotConnectedException;
+    method public void registerCallback(android.car.hardware.cabin.CarCabinManager.CarCabinEventCallback);
+    method public void setBooleanProperty(int, int, boolean);
+    method public void setFloatProperty(int, int, float);
+    method public void setIntProperty(int, int, int);
+    method public void unregisterCallback(android.car.hardware.cabin.CarCabinManager.CarCabinEventCallback);
     field public static final int ID_DOOR_LOCK = 371198722; // 0x16200b02
     field public static final int ID_DOOR_MOVE = 373295873; // 0x16400b01
     field public static final int ID_DOOR_POS = 373295872; // 0x16400b00
@@ -643,9 +652,9 @@
     field public static final int ID_WINDOW_POS = 322964416; // 0x13400bc0
   }
 
-  public static abstract interface CarCabinManager.CarCabinEventCallback {
-    method public abstract void onChangeEvent(android.car.hardware.CarPropertyValue);
-    method public abstract void onErrorEvent(int, int);
+  public static interface CarCabinManager.CarCabinEventCallback {
+    method public void onChangeEvent(android.car.hardware.CarPropertyValue);
+    method public void onErrorEvent(int, int);
   }
 
 }
@@ -653,16 +662,16 @@
 package android.car.hardware.hvac {
 
   public final class CarHvacManager {
-    method public boolean getBooleanProperty(int, int) throws android.car.CarNotConnectedException;
-    method public float getFloatProperty(int, int) throws android.car.CarNotConnectedException;
-    method public int getIntProperty(int, int) throws android.car.CarNotConnectedException;
-    method public java.util.List<android.car.hardware.CarPropertyConfig> getPropertyList() throws android.car.CarNotConnectedException;
-    method public boolean isPropertyAvailable(int, int) throws android.car.CarNotConnectedException;
-    method public synchronized void registerCallback(android.car.hardware.hvac.CarHvacManager.CarHvacEventCallback) throws android.car.CarNotConnectedException;
-    method public void setBooleanProperty(int, int, boolean) throws android.car.CarNotConnectedException;
-    method public void setFloatProperty(int, int, float) throws android.car.CarNotConnectedException;
-    method public void setIntProperty(int, int, int) throws android.car.CarNotConnectedException;
-    method public synchronized void unregisterCallback(android.car.hardware.hvac.CarHvacManager.CarHvacEventCallback);
+    method public boolean getBooleanProperty(int, int);
+    method public float getFloatProperty(int, int);
+    method public int getIntProperty(int, int);
+    method public java.util.List<android.car.hardware.CarPropertyConfig> getPropertyList();
+    method public boolean isPropertyAvailable(int, int);
+    method public void registerCallback(android.car.hardware.hvac.CarHvacManager.CarHvacEventCallback);
+    method public void setBooleanProperty(int, int, boolean);
+    method public void setFloatProperty(int, int, float);
+    method public void setIntProperty(int, int, int);
+    method public void unregisterCallback(android.car.hardware.hvac.CarHvacManager.CarHvacEventCallback);
     field public static final int FAN_DIRECTION_DEFROST = 4; // 0x4
     field public static final int FAN_DIRECTION_FACE = 1; // 0x1
     field public static final int FAN_DIRECTION_FLOOR = 2; // 0x2
@@ -688,9 +697,9 @@
     field public static final int ID_ZONED_TEMP_SETPOINT = 358614275; // 0x15600503
   }
 
-  public static abstract interface CarHvacManager.CarHvacEventCallback {
-    method public abstract void onChangeEvent(android.car.hardware.CarPropertyValue);
-    method public abstract void onErrorEvent(int, int);
+  public static interface CarHvacManager.CarHvacEventCallback {
+    method public void onChangeEvent(android.car.hardware.CarPropertyValue);
+    method public void onErrorEvent(int, int);
   }
 
 }
@@ -698,17 +707,9 @@
 package android.car.hardware.power {
 
   public class CarPowerManager {
-    field public static final int BOOT_REASON_DOOR_OPEN = 4; // 0x4
-    field public static final int BOOT_REASON_DOOR_UNLOCK = 2; // 0x2
-    field public static final int BOOT_REASON_REMOTE_START = 5; // 0x5
-    field public static final int BOOT_REASON_TIMER = 3; // 0x3
-    field public static final int BOOT_REASON_USER_POWER_ON = 1; // 0x1
   }
 
-  public static abstract interface CarPowerManager.CarPowerStateListener {
-    method public abstract void onStateChanged(int);
-    field public static final int SHUTDOWN_CANCELLED = 0; // 0x0
-    field public static final int SHUTDOWN_ENTER = 1; // 0x1
+  public static interface CarPowerManager.CarPowerStateListener {
   }
 
 }
@@ -717,10 +718,10 @@
 
   public abstract class CarInputHandlingService extends android.app.Service {
     ctor protected CarInputHandlingService(android.car.input.CarInputHandlingService.InputFilter[]);
-    method public android.os.IBinder onBind(android.content.Intent);
-    method protected abstract void onKeyEvent(android.view.KeyEvent, int);
+    method @CallSuper public android.os.IBinder onBind(android.content.Intent);
+    method @MainThread protected abstract void onKeyEvent(android.view.KeyEvent, int);
     field public static final int INPUT_CALLBACK_BINDER_CODE = 1; // 0x1
-    field public static final java.lang.String INPUT_CALLBACK_BINDER_KEY = "callback_binder";
+    field public static final String INPUT_CALLBACK_BINDER_KEY = "callback_binder";
   }
 
   public static class CarInputHandlingService.InputFilter implements android.os.Parcelable {
@@ -734,29 +735,6 @@
 
 }
 
-package android.car.media {
-
-  public final class CarAudioManager {
-    method public android.car.media.CarAudioPatchHandle createAudioPatch(java.lang.String, int, int) throws android.car.CarNotConnectedException;
-    method public java.lang.String[] getExternalSources() throws android.car.CarNotConnectedException;
-    method public int getGroupMaxVolume(int) throws android.car.CarNotConnectedException;
-    method public int getGroupMinVolume(int) throws android.car.CarNotConnectedException;
-    method public int getGroupVolume(int) throws android.car.CarNotConnectedException;
-    method public int[] getUsagesForVolumeGroupId(int) throws android.car.CarNotConnectedException;
-    method public int getVolumeGroupCount() throws android.car.CarNotConnectedException;
-    method public int getVolumeGroupIdForUsage(int) throws android.car.CarNotConnectedException;
-    method public void registerVolumeCallback(android.os.IBinder) throws android.car.CarNotConnectedException;
-    method public void registerVolumeChangeObserver(android.database.ContentObserver);
-    method public void releaseAudioPatch(android.car.media.CarAudioPatchHandle) throws android.car.CarNotConnectedException;
-    method public void setBalanceTowardRight(float) throws android.car.CarNotConnectedException;
-    method public void setFadeTowardFront(float) throws android.car.CarNotConnectedException;
-    method public void setGroupVolume(int, int, int) throws android.car.CarNotConnectedException;
-    method public void unregisterVolumeCallback(android.os.IBinder) throws android.car.CarNotConnectedException;
-    method public void unregisterVolumeChangeObserver(android.database.ContentObserver);
-  }
-
-}
-
 package android.car.navigation {
 
   public class CarNavigationInstrumentCluster implements android.os.Parcelable {
@@ -781,16 +759,16 @@
 package android.car.storagemonitoring {
 
   public final class CarStorageMonitoringManager {
-    method public java.util.List<android.car.storagemonitoring.IoStatsEntry> getAggregateIoStats() throws android.car.CarNotConnectedException;
-    method public java.util.List<android.car.storagemonitoring.IoStatsEntry> getBootIoStats() throws android.car.CarNotConnectedException;
-    method public java.util.List<android.car.storagemonitoring.IoStats> getIoStatsDeltas() throws android.car.CarNotConnectedException;
-    method public int getPreEolIndicatorStatus() throws android.car.CarNotConnectedException;
-    method public long getShutdownDiskWriteAmount() throws android.car.CarNotConnectedException;
-    method public android.car.storagemonitoring.WearEstimate getWearEstimate() throws android.car.CarNotConnectedException;
-    method public java.util.List<android.car.storagemonitoring.WearEstimateChange> getWearEstimateHistory() throws android.car.CarNotConnectedException;
-    method public void registerListener(android.car.storagemonitoring.CarStorageMonitoringManager.IoStatsListener) throws android.car.CarNotConnectedException;
-    method public void unregisterListener(android.car.storagemonitoring.CarStorageMonitoringManager.IoStatsListener) throws android.car.CarNotConnectedException;
-    field public static final java.lang.String INTENT_EXCESSIVE_IO = "android.car.storagemonitoring.EXCESSIVE_IO";
+    method @RequiresPermission(android.car.Car.PERMISSION_STORAGE_MONITORING) public java.util.List<android.car.storagemonitoring.IoStatsEntry> getAggregateIoStats();
+    method @RequiresPermission(android.car.Car.PERMISSION_STORAGE_MONITORING) public java.util.List<android.car.storagemonitoring.IoStatsEntry> getBootIoStats();
+    method @RequiresPermission(android.car.Car.PERMISSION_STORAGE_MONITORING) public java.util.List<android.car.storagemonitoring.IoStats> getIoStatsDeltas();
+    method @RequiresPermission(android.car.Car.PERMISSION_STORAGE_MONITORING) public int getPreEolIndicatorStatus();
+    method @RequiresPermission(android.car.Car.PERMISSION_STORAGE_MONITORING) public long getShutdownDiskWriteAmount();
+    method @RequiresPermission(android.car.Car.PERMISSION_STORAGE_MONITORING) public android.car.storagemonitoring.WearEstimate getWearEstimate();
+    method @RequiresPermission(android.car.Car.PERMISSION_STORAGE_MONITORING) public java.util.List<android.car.storagemonitoring.WearEstimateChange> getWearEstimateHistory();
+    method @RequiresPermission(android.car.Car.PERMISSION_STORAGE_MONITORING) public void registerListener(android.car.storagemonitoring.CarStorageMonitoringManager.IoStatsListener);
+    method @RequiresPermission(android.car.Car.PERMISSION_STORAGE_MONITORING) public void unregisterListener(android.car.storagemonitoring.CarStorageMonitoringManager.IoStatsListener);
+    field public static final String INTENT_EXCESSIVE_IO = "android.car.storagemonitoring.EXCESSIVE_IO";
     field public static final int PRE_EOL_INFO_NORMAL = 1; // 0x1
     field public static final int PRE_EOL_INFO_UNKNOWN = 0; // 0x0
     field public static final int PRE_EOL_INFO_URGENT = 3; // 0x3
@@ -798,8 +776,8 @@
     field public static final long SHUTDOWN_COST_INFO_MISSING = -1L; // 0xffffffffffffffffL
   }
 
-  public static abstract interface CarStorageMonitoringManager.IoStatsListener {
-    method public abstract void onSnapshot(android.car.storagemonitoring.IoStats);
+  public static interface CarStorageMonitoringManager.IoStatsListener {
+    method public void onSnapshot(android.car.storagemonitoring.IoStats);
   }
 
   public class IoStats implements android.os.Parcelable {
@@ -849,15 +827,15 @@
   }
 
   public class LifetimeWriteInfo implements android.os.Parcelable {
-    ctor public LifetimeWriteInfo(java.lang.String, java.lang.String, long);
+    ctor public LifetimeWriteInfo(String, String, long);
     ctor public LifetimeWriteInfo(android.os.Parcel);
     ctor public LifetimeWriteInfo(org.json.JSONObject) throws org.json.JSONException;
     method public int describeContents();
     method public void writeToJson(android.util.JsonWriter) throws java.io.IOException;
     method public void writeToParcel(android.os.Parcel, int);
     field public static final android.os.Parcelable.Creator<android.car.storagemonitoring.IoStats> CREATOR;
-    field public final java.lang.String fstype;
-    field public final java.lang.String partition;
+    field public final String fstype;
+    field public final String partition;
     field public final long writtenBytes;
   }
 
@@ -885,8 +863,8 @@
     method public void writeToParcel(android.os.Parcel, int);
     field public static final android.os.Parcelable.Creator<android.car.storagemonitoring.WearEstimate> CREATOR;
     field public static final int UNKNOWN = -1; // 0xffffffff
-    field public final int typeA;
-    field public final int typeB;
+    field @IntRange(from=0xffffffff, to=100) public final int typeA;
+    field @IntRange(from=0xffffffff, to=100) public final int typeB;
   }
 
   public class WearEstimateChange implements android.os.Parcelable {
@@ -895,10 +873,10 @@
     method public int describeContents();
     method public void writeToParcel(android.os.Parcel, int);
     field public static final android.os.Parcelable.Creator<android.car.storagemonitoring.WearEstimateChange> CREATOR;
-    field public final java.time.Instant dateAtChange;
+    field @NonNull public final java.time.Instant dateAtChange;
     field public final boolean isAcceptableDegradation;
-    field public final android.car.storagemonitoring.WearEstimate newEstimate;
-    field public final android.car.storagemonitoring.WearEstimate oldEstimate;
+    field @NonNull public final android.car.storagemonitoring.WearEstimate newEstimate;
+    field @NonNull public final android.car.storagemonitoring.WearEstimate oldEstimate;
     field public final long uptimeAtChange;
   }
 
@@ -914,6 +892,38 @@
 
 }
 
+package android.car.trust {
+
+  public final class CarTrustAgentEnrollmentManager {
+    method @RequiresPermission(android.car.Car.PERMISSION_CAR_ENROLL_TRUST) public void activateToken(long);
+    method @RequiresPermission(android.car.Car.PERMISSION_CAR_ENROLL_TRUST) public void enrollmentHandshakeAccepted();
+    method @RequiresPermission(android.car.Car.PERMISSION_CAR_ENROLL_TRUST) public java.util.List<java.lang.Integer> getEnrollmentHandlesForUser(int);
+    method @RequiresPermission(android.car.Car.PERMISSION_CAR_ENROLL_TRUST) public void initiateEnrollmentHandshake(android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(android.car.Car.PERMISSION_CAR_ENROLL_TRUST) public void revokeTrust(long);
+    method @RequiresPermission(android.car.Car.PERMISSION_CAR_ENROLL_TRUST) public void setBleCallback(@Nullable android.car.trust.CarTrustAgentEnrollmentManager.CarTrustAgentBleCallback);
+    method @RequiresPermission(android.car.Car.PERMISSION_CAR_ENROLL_TRUST) public void setEnrollmentCallback(@Nullable android.car.trust.CarTrustAgentEnrollmentManager.CarTrustAgentEnrollmentCallback);
+    method @RequiresPermission(android.car.Car.PERMISSION_CAR_ENROLL_TRUST) public void startEnrollmentAdvertising();
+    method @RequiresPermission(android.car.Car.PERMISSION_CAR_ENROLL_TRUST) public void stopEnrollmentAdvertising();
+    method @RequiresPermission(android.car.Car.PERMISSION_CAR_ENROLL_TRUST) public void terminateEnrollmentHandshake();
+  }
+
+  public static interface CarTrustAgentEnrollmentManager.CarTrustAgentBleCallback {
+    method public void onBleEnrollmentDeviceConnected(android.bluetooth.BluetoothDevice);
+    method public void onBleEnrollmentDeviceDisconnected(android.bluetooth.BluetoothDevice);
+    method public void onEnrollmentAdvertisingFailed(int);
+    method public void onEnrollmentAdvertisingStarted();
+  }
+
+  public static interface CarTrustAgentEnrollmentManager.CarTrustAgentEnrollmentCallback {
+    method public void onAuthStringAvailable(android.bluetooth.BluetoothDevice, String);
+    method public void onEnrollmentHandshakeFailure(android.bluetooth.BluetoothDevice, int);
+    method public void onEscrowTokenActiveStateChanged(long, boolean);
+    method public void onEscrowTokenAdded(long);
+    method public void onTrustRevoked(long, boolean);
+  }
+
+}
+
 package android.car.vms {
 
   public final class VmsAvailableLayers implements android.os.Parcelable {
@@ -978,7 +988,7 @@
   public abstract class VmsPublisherClientService extends android.app.Service {
     ctor public VmsPublisherClientService();
     method public final int getPublisherId(byte[]);
-    method public final android.car.vms.VmsSubscriptionState getSubscriptions();
+    method @Nullable public final android.car.vms.VmsSubscriptionState getSubscriptions();
     method public android.os.IBinder onBind(android.content.Intent);
     method protected abstract void onVmsPublisherServiceReady();
     method public abstract void onVmsSubscriptionChange(android.car.vms.VmsSubscriptionState);
@@ -987,21 +997,21 @@
   }
 
   public final class VmsSubscriberManager {
-    method public void clearVmsSubscriberClientCallback() throws android.car.CarNotConnectedException;
-    method public android.car.vms.VmsAvailableLayers getAvailableLayers() throws android.car.CarNotConnectedException, java.lang.IllegalStateException;
-    method public byte[] getPublisherInfo(int) throws android.car.CarNotConnectedException, java.lang.IllegalStateException;
-    method public void setVmsSubscriberClientCallback(java.util.concurrent.Executor, android.car.vms.VmsSubscriberManager.VmsSubscriberClientCallback) throws android.car.CarNotConnectedException;
-    method public void startMonitoring() throws android.car.CarNotConnectedException;
+    method public void clearVmsSubscriberClientCallback();
+    method public android.car.vms.VmsAvailableLayers getAvailableLayers();
+    method public byte[] getPublisherInfo(int);
+    method public void setVmsSubscriberClientCallback(@NonNull java.util.concurrent.Executor, @NonNull android.car.vms.VmsSubscriberManager.VmsSubscriberClientCallback);
+    method public void startMonitoring();
     method public void stopMonitoring();
-    method public void subscribe(android.car.vms.VmsLayer) throws android.car.CarNotConnectedException;
-    method public void subscribe(android.car.vms.VmsLayer, int) throws android.car.CarNotConnectedException;
+    method public void subscribe(android.car.vms.VmsLayer);
+    method public void subscribe(android.car.vms.VmsLayer, int);
     method public void unsubscribe(android.car.vms.VmsLayer);
     method public void unsubscribe(android.car.vms.VmsLayer, int);
   }
 
-  public static abstract interface VmsSubscriberManager.VmsSubscriberClientCallback {
-    method public abstract void onLayersAvailabilityChanged(android.car.vms.VmsAvailableLayers);
-    method public abstract void onVmsMessageReceived(android.car.vms.VmsLayer, byte[]);
+  public static interface VmsSubscriberManager.VmsSubscriberClientCallback {
+    method public void onLayersAvailabilityChanged(android.car.vms.VmsAvailableLayers);
+    method public void onVmsMessageReceived(android.car.vms.VmsLayer, byte[]);
   }
 
 }
diff --git a/car-lib/api/system-removed.txt b/car-lib/api/system-removed.txt
index e69de29..d802177 100644
--- a/car-lib/api/system-removed.txt
+++ b/car-lib/api/system-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/car-lib/api/test-baseline.txt b/car-lib/api/test-baseline.txt
new file mode 100644
index 0000000..d71a9e5
--- /dev/null
+++ b/car-lib/api/test-baseline.txt
@@ -0,0 +1,55 @@
+// Baseline format: 1.0
+HiddenTypeParameter: android.car.drivingstate.CarUxRestrictionsManager#getConfig():
+    Method android.car.drivingstate.CarUxRestrictionsManager.getConfig() references hidden type android.car.drivingstate.CarUxRestrictionsConfiguration.
+HiddenTypeParameter: android.car.drivingstate.CarUxRestrictionsManager#getStagedConfig():
+    Method android.car.drivingstate.CarUxRestrictionsManager.getStagedConfig() references hidden type android.car.drivingstate.CarUxRestrictionsConfiguration.
+HiddenTypeParameter: android.car.hardware.CarSensorManager#getPropertyList():
+    Method android.car.hardware.CarSensorManager.getPropertyList() references hidden type class android.car.hardware.CarPropertyConfig.
+HiddenTypeParameter: android.car.navigation.CarNavigationStatusManager#getInstrumentClusterInfo():
+    Method android.car.navigation.CarNavigationStatusManager.getInstrumentClusterInfo() references hidden type android.car.navigation.CarNavigationInstrumentCluster.
+
+
+HiddenTypedefConstant: android.car.CarInfoManager#getEvConnectorTypes():
+    Typedef references constant which isn't part of the API, skipping in documentation: android.car.EvConnectorType#UNKNOWN
+HiddenTypedefConstant: android.car.CarInfoManager#getFuelTypes():
+    Typedef references constant which isn't part of the API, skipping in documentation: android.car.FuelType#UNKNOWN
+HiddenTypedefConstant: android.car.hardware.CarSensorManager#getLatestSensorEvent(int) parameter #0:
+    Typedef references constant which isn't part of the API, skipping in documentation: android.car.hardware.CarSensorManager#SENSOR_TYPE_ENGINE_OIL_LEVEL
+HiddenTypedefConstant: android.car.hardware.CarSensorManager#isSensorSupported(int) parameter #0:
+    Typedef references constant which isn't part of the API, skipping in documentation: android.car.hardware.CarSensorManager#SENSOR_TYPE_ENGINE_OIL_LEVEL
+HiddenTypedefConstant: android.car.hardware.CarSensorManager#isSensorSupported(int[], int) parameter #1:
+    Typedef references constant which isn't part of the API, skipping in documentation: android.car.hardware.CarSensorManager#SENSOR_TYPE_ENGINE_OIL_LEVEL
+HiddenTypedefConstant: android.car.hardware.CarSensorManager#registerListener(android.car.hardware.CarSensorManager.OnSensorChangedListener, int, int) parameter #1:
+    Typedef references constant which isn't part of the API, skipping in documentation: android.car.hardware.CarSensorManager#SENSOR_TYPE_ENGINE_OIL_LEVEL
+HiddenTypedefConstant: android.car.hardware.CarSensorManager#unregisterListener(android.car.hardware.CarSensorManager.OnSensorChangedListener, int) parameter #1:
+    Typedef references constant which isn't part of the API, skipping in documentation: android.car.hardware.CarSensorManager#SENSOR_TYPE_ENGINE_OIL_LEVEL
+
+
+MissingPermission: android.car.drivingstate.CarUxRestrictionsManager#getConfig():
+    Permission Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION required by method android.car.drivingstate.CarUxRestrictionsManager.getConfig() is hidden or removed
+MissingPermission: android.car.drivingstate.CarUxRestrictionsManager#getStagedConfig():
+    Permission Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION required by method android.car.drivingstate.CarUxRestrictionsManager.getStagedConfig() is hidden or removed
+
+
+ReferencesHidden: android.car.drivingstate.CarUxRestrictionsManager#getConfig():
+    Class android.car.drivingstate.CarUxRestrictionsConfiguration is hidden but was referenced (as return type) from public method android.car.drivingstate.CarUxRestrictionsManager.getConfig()
+ReferencesHidden: android.car.drivingstate.CarUxRestrictionsManager#getStagedConfig():
+    Class android.car.drivingstate.CarUxRestrictionsConfiguration is hidden but was referenced (as return type) from public method android.car.drivingstate.CarUxRestrictionsManager.getStagedConfig()
+ReferencesHidden: android.car.hardware.CarSensorManager#getPropertyList():
+    Class android.car.hardware.CarPropertyConfig is hidden but was referenced (as return type parameter) from public method android.car.hardware.CarSensorManager.getPropertyList()
+ReferencesHidden: android.car.navigation.CarNavigationStatusManager#getInstrumentClusterInfo():
+    Class android.car.navigation.CarNavigationInstrumentCluster is hidden but was referenced (as return type) from public method android.car.navigation.CarNavigationStatusManager.getInstrumentClusterInfo()
+
+
+RequiresPermission: android.car.hardware.CarSensorManager#registerListener(android.car.hardware.CarSensorManager.OnSensorChangedListener, int, int):
+    Method 'registerListener' documentation mentions permissions already declared by @RequiresPermission
+
+
+SdkConstant: android.car.Car#CAR_INTENT_ACTION_MEDIA_TEMPLATE:
+    Field 'CAR_INTENT_ACTION_MEDIA_TEMPLATE' is missing @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
+
+
+Todo: android.car.CarInfoManager#getVehicleId():
+    Documentation mentions 'TODO'
+
+
diff --git a/car-lib/api/test-current.txt b/car-lib/api/test-current.txt
new file mode 100644
index 0000000..6658de9
--- /dev/null
+++ b/car-lib/api/test-current.txt
@@ -0,0 +1,26 @@
+// Signature format: 2.0
+package android.car.content.pm {
+
+  public final class CarPackageManager {
+    method public void setEnableActivityBlocking(boolean);
+  }
+
+}
+
+package android.car.drivingstate {
+
+  public final class CarUxRestrictionsManager {
+    method @RequiresPermission("android.car.permission.CAR_UX_RESTRICTIONS_CONFIGURATION") public android.car.drivingstate.CarUxRestrictionsConfiguration getConfig();
+    method @Nullable @RequiresPermission("android.car.permission.CAR_UX_RESTRICTIONS_CONFIGURATION") public android.car.drivingstate.CarUxRestrictionsConfiguration getStagedConfig();
+  }
+
+}
+
+package android.car.media {
+
+  public final class CarAudioManager {
+    method public boolean isDynamicRoutingEnabled();
+  }
+
+}
+
diff --git a/car-lib/api/test-removed.txt b/car-lib/api/test-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/car-lib/api/test-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/car-lib/native/include/CarPowerManager.h b/car-lib/native/include/CarPowerManager.h
index 90e77f7..22c2240 100644
--- a/car-lib/native/include/CarPowerManager.h
+++ b/car-lib/native/include/CarPowerManager.h
@@ -38,13 +38,14 @@
     //  NOTE:  The entries in this enum must match the ones in CarPowerStateListener located in
     //      packages/services/Car/car-lib/src/android/car/hardware/power/CarPowerManager.java
     enum class State {
-        kShutdownCancelled = 0,
-        kShutdownEnter = 1,
-        kWaitForVhal = 2,
-        kSuspendEnter = 3,
-        kSuspendExit = 4,
-        kOn = 5,
-        kShutdownPrepare = 6,
+        kWaitForVhal = 1,
+        kSuspendEnter = 2,
+        kSuspendExit = 3,
+        kShutdownEnter = 5,
+        kOn = 6,
+        kShutdownPrepare = 7,
+        kShutdownCancelled = 8,
+
 
         kFirst = kWaitForVhal,
         kLast = kShutdownCancelled,
diff --git a/car-lib/src/android/car/Car.java b/car-lib/src/android/car/Car.java
index c1bf502..b44969b 100644
--- a/car-lib/src/android/car/Car.java
+++ b/car-lib/src/android/car/Car.java
@@ -18,8 +18,11 @@
 
 import android.annotation.IntDef;
 import android.annotation.Nullable;
+import android.annotation.SdkConstant;
+import android.annotation.SdkConstant.SdkConstantType;
 import android.annotation.SystemApi;
 import android.car.cluster.CarInstrumentClusterManager;
+import android.car.cluster.ClusterActivityState;
 import android.car.content.pm.CarPackageManager;
 import android.car.diagnostic.CarDiagnosticManager;
 import android.car.drivingstate.CarDrivingStateManager;
@@ -35,6 +38,7 @@
 import android.car.settings.CarConfigurationManager;
 import android.car.storagemonitoring.CarStorageMonitoringManager;
 import android.car.test.CarTestManagerBinderWrapper;
+import android.car.trust.CarTrustAgentEnrollmentManager;
 import android.car.vms.VmsSubscriberManager;
 import android.content.ComponentName;
 import android.content.Context;
@@ -45,6 +49,7 @@
 import android.os.IBinder;
 import android.os.Looper;
 import android.os.RemoteException;
+import android.os.ServiceManager;
 import android.os.UserHandle;
 import android.util.Log;
 
@@ -89,8 +94,11 @@
 
     /**
      * Service name for {@link CarInstrumentClusterManager}
+     *
+     * @deprecated CarInstrumentClusterManager is being deprecated
      * @hide
      */
+    @Deprecated
     public static final String CAR_INSTRUMENT_CLUSTER_SERVICE = "cluster_service";
 
     /**
@@ -170,6 +178,13 @@
     public static final String STORAGE_MONITORING_SERVICE = "storage_monitoring";
 
     /**
+     * Service name for {@link android.car.trust.CarTrustAgentEnrollmentManager}
+     * @hide
+     */
+    @SystemApi
+    public static final String CAR_TRUST_AGENT_ENROLLMENT_SERVICE = "trust_enroll";
+
+    /**
      * Service for testing. This is system app only feature.
      * Service name for {@link CarTestManager}, to be used in {@link #getCarManager(String)}.
      * @hide
@@ -228,7 +243,6 @@
 
     /**
      * Permission necessary to change car audio settings through {@link CarAudioManager}.
-     * @hide
      */
     public static final String PERMISSION_CAR_CONTROL_AUDIO_SETTINGS =
             "android.car.permission.CAR_CONTROL_AUDIO_SETTINGS";
@@ -405,7 +419,16 @@
      * @hide
      */
     @SystemApi
-    public static final String PERMISSION_CAR_DIAGNOSTIC_CLEAR = "android.car.permission.CLEAR_CAR_DIAGNOSTICS";
+    public static final String PERMISSION_CAR_DIAGNOSTIC_CLEAR =
+            "android.car.permission.CLEAR_CAR_DIAGNOSTICS";
+
+    /**
+     * Permission necessary to configure UX restrictions through {@link CarUxRestrictionsManager}.
+     *
+     * @hide
+     */
+    public static final String PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION =
+            "android.car.permission.CAR_UX_RESTRICTIONS_CONFIGURATION";
 
     /**
      * Permissions necessary to clear diagnostic information.
@@ -413,7 +436,17 @@
      * @hide
      */
     @SystemApi
-    public static final String PERMISSION_STORAGE_MONITORING = "android.car.permission.STORAGE_MONITORING";
+    public static final String PERMISSION_STORAGE_MONITORING =
+            "android.car.permission.STORAGE_MONITORING";
+
+    /**
+     * Permission necessary to enroll a device as a trusted authenticator device.
+     *
+     * @hide
+     */
+    @SystemApi
+    public static final String PERMISSION_CAR_ENROLL_TRUST =
+            "android.car.permission.CAR_ENROLL_TRUST";
 
     /** Type of car connection: platform runs directly in car. */
     public static final int CONNECTION_TYPE_EMBEDDED = 5;
@@ -425,20 +458,13 @@
     public @interface ConnectionType {}
 
     /**
-     * CarXyzService throws IllegalStateException with this message is re-thrown as
-     * {@link CarNotConnectedException}.
-     *
-     * @hide
-     */
-    public static final String CAR_NOT_CONNECTED_EXCEPTION_MSG = "CarNotConnected";
-
-    /**
      * Activity Action: Provide media playing through a media template app.
      * <p>Input: String extra mapped by {@link android.app.SearchManager#QUERY} is the query
      * used to start the media. String extra mapped by {@link #CAR_EXTRA_MEDIA_PACKAGE} is the
      * package name of the media app which user wants to play media on.
      * <p>Output: nothing.
      */
+    @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
     public static final String CAR_INTENT_ACTION_MEDIA_TEMPLATE =
             "android.car.intent.action.MEDIA_TEMPLATE";
 
@@ -455,6 +481,26 @@
 
     private static final String CAR_SERVICE_CLASS = "com.android.car.CarService";
 
+    /**
+     * Category used by navigation applications to indicate which activity should be launched on
+     * the instrument cluster when such application holds
+     * {@link CarAppFocusManager#APP_FOCUS_TYPE_NAVIGATION} focus.
+     *
+     * @hide
+     */
+    public static final String CAR_CATEGORY_NAVIGATION = "android.car.cluster.NAVIGATION";
+
+    /**
+     * When an activity is launched in the cluster, it will receive {@link ClusterActivityState} in
+     * the intent's extra under this key, containing instrument cluster information such as
+     * unobscured area, visibility, etc.
+     *
+     * @hide
+     */
+    @SystemApi
+    public static final String CAR_EXTRA_CLUSTER_ACTIVITY_STATE =
+            "android.car.cluster.ClusterActivityState";
+
     private static final long CAR_SERVICE_BIND_RETRY_INTERVAL_MS = 500;
     private static final long CAR_SERVICE_BIND_MAX_RETRY = 20;
 
@@ -497,13 +543,11 @@
 
         public void onServiceDisconnected(ComponentName name) {
             synchronized (Car.this) {
-                mService = null;
                 if (mConnectionState  == STATE_DISCONNECTED) {
                     return;
                 }
-                mConnectionState = STATE_DISCONNECTED;
             }
-            // unbind explicitly here.
+            // unbind explicitly and set connectionState to STATE_DISCONNECTED here.
             disconnect();
             mServiceConnectionListenerClient.onServiceDisconnected(name);
         }
@@ -527,7 +571,10 @@
      * service's main thread. Note: the service connection listener will be always on the main
      * thread regardless of the handler given.
      * @return Car instance if system is in car environment and returns {@code null} otherwise.
+     *
+     * @deprecated use {@link #createCar(Context, Handler)} instead.
      */
+    @Deprecated
     public static Car createCar(Context context, ServiceConnection serviceConnectionListener,
             @Nullable Handler handler) {
         if (!context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)) {
@@ -547,11 +594,44 @@
      * Looper}.
      *
      * @see #createCar(Context, ServiceConnection, Handler)
+     *
+     * @deprecated use {@link #createCar(Context, Handler)} instead.
      */
+    @Deprecated
     public static Car createCar(Context context, ServiceConnection serviceConnectionListener) {
       return createCar(context, serviceConnectionListener, null);
     }
 
+    /**
+     * Creates new {@link Car} object which connected synchronously to Car Service and ready to use.
+     *
+     * @param context application's context
+     *
+     * @return Car object if operation succeeded, otherwise null.
+     */
+    @Nullable
+    public static Car createCar(Context context) {
+        return createCar(context, (Handler) null);
+    }
+
+    /**
+     * Creates new {@link Car} object which connected synchronously to Car Service and ready to use.
+     *
+     * @param context application's context
+     * @param handler the handler on which the manager's callbacks will be executed, or null to
+     * execute on the application's main thread.
+     *
+     * @return Car object if operation succeeded, otherwise null.
+     */
+    @Nullable
+    public static Car createCar(Context context, @Nullable Handler handler) {
+        IBinder service = ServiceManager.getService("car_service");
+        if (service == null) {
+            return null;
+        }
+        return new Car(context, ICar.Stub.asInterface(service), handler);
+    }
+
     private Car(Context context, ServiceConnection serviceConnectionListener,
             @Nullable Handler handler) {
         mContext = context;
@@ -596,7 +676,11 @@
      * Connect to car service. This can be called while it is disconnected.
      * @throws IllegalStateException If connection is still on-going from previous
      *         connect call or it is already connected
+     *
+     * @deprecated this method is not need if this object is created via
+     * {@link #createCar(Context, Handler)}.
      */
+    @Deprecated
     public void connect() throws IllegalStateException {
         synchronized (this) {
             if (mConnectionState != STATE_DISCONNECTED) {
@@ -658,9 +742,9 @@
      * SensorManagerService sensorManagerService = car.getCarManager(Car.SENSOR_SERVICE);
      * @param serviceName Name of service that should be created like {@link #SENSOR_SERVICE}.
      * @return Matching service manager or null if there is no such service.
-     * @throws CarNotConnectedException if the connection to the car service has been lost.
      */
-    public Object getCarManager(String serviceName) throws CarNotConnectedException {
+    @Nullable
+    public Object getCarManager(String serviceName) {
         CarManagerBase manager;
         ICar service = getICarOrThrow();
         synchronized (mCarManagerLock) {
@@ -682,7 +766,7 @@
                     }
                     mServiceMap.put(serviceName, manager);
                 } catch (RemoteException e) {
-                    handleRemoteException(e);
+                    throw e.rethrowFromSystemServer();
                 }
             }
         }
@@ -698,38 +782,8 @@
         return CONNECTION_TYPE_EMBEDDED;
     }
 
-    /**
-     * IllegalStateException from XyzCarService with special message is re-thrown as a different
-     * exception. If the IllegalStateException is not understood then this message will throw the
-     * original exception.
-     *
-     * @param e exception from XyzCarService.
-     * @throws CarNotConnectedException if the connection to the car service has been lost.
-     * @hide
-     */
-    public static void checkCarNotConnectedExceptionFromCarService(
-            IllegalStateException e) throws CarNotConnectedException, IllegalStateException {
-        String message = e.getMessage();
-        if (CAR_NOT_CONNECTED_EXCEPTION_MSG.equals(message)) {
-            throw new CarNotConnectedException();
-        } else {
-            throw e;
-        }
-    }
-
-    /** @hide */
-    public static void hideCarNotConnectedExceptionFromCarService(
-            IllegalStateException e) throws IllegalStateException {
-        String message = e.getMessage();
-        if (CAR_NOT_CONNECTED_EXCEPTION_MSG.equals(message)) {
-            return; //ignore
-        } else {
-            throw e;
-        }
-    }
-
-    private CarManagerBase createCarManager(String serviceName, IBinder binder)
-            throws CarNotConnectedException {
+    @Nullable
+    private CarManagerBase createCarManager(String serviceName, IBinder binder) {
         CarManagerBase manager = null;
         switch (serviceName) {
             case AUDIO_SERVICE:
@@ -798,6 +852,9 @@
             case CAR_CONFIGURATION_SERVICE:
                 manager = new CarConfigurationManager(binder);
                 break;
+            case CAR_TRUST_AGENT_ENROLLMENT_SERVICE:
+                manager = new CarTrustAgentEnrollmentManager(binder, mContext, mEventHandler);
+                break;
             default:
                 break;
         }
@@ -831,11 +888,6 @@
         return mService;
     }
 
-    private void handleRemoteException(RemoteException e) {
-        Log.w(CarLibLog.TAG_CAR, "RemoteException", e);
-        disconnect();
-    }
-
     private void tearDownCarManagers() {
         synchronized (mCarManagerLock) {
             for (CarManagerBase manager: mServiceMap.values()) {
diff --git a/car-lib/src/android/car/CarApiUtil.java b/car-lib/src/android/car/CarApiUtil.java
index 8130507..8343abe 100644
--- a/car-lib/src/android/car/CarApiUtil.java
+++ b/car-lib/src/android/car/CarApiUtil.java
@@ -24,32 +24,6 @@
  */
 public final class CarApiUtil {
 
-    /**
-     * CarService throws IllegalStateException with this message is re-thrown as
-     * {@link CarNotConnectedException}.
-     *
-     * @hide
-     */
-    public static final String CAR_NOT_CONNECTED_EXCEPTION_MSG = "CarNotConnected";
-
-    /**
-     * Re-throw IllegalStateException from CarService with
-     * {@link #CAR_NOT_CONNECTED_EXCEPTION_MSG} message as {@link CarNotConnectedException}.
-     * exception.
-     *
-     * @param e exception from CarService
-     * @throws CarNotConnectedException if the connection to the car service has been lost.
-     * @hide
-     */
-    public static void checkCarNotConnectedExceptionFromCarService(IllegalStateException e)
-            throws CarNotConnectedException {
-        if (e.getMessage().equals(CAR_NOT_CONNECTED_EXCEPTION_MSG)) {
-            throw new CarNotConnectedException();
-        } else {
-            throw e;
-        }
-    }
-
     /** do not use */
     private CarApiUtil() {};
 
diff --git a/car-lib/src/android/car/CarAppFocusManager.java b/car-lib/src/android/car/CarAppFocusManager.java
index d07b5e2..57dc4c5 100644
--- a/car-lib/src/android/car/CarAppFocusManager.java
+++ b/car-lib/src/android/car/CarAppFocusManager.java
@@ -130,10 +130,8 @@
      * Register listener to monitor app focus change.
      * @param listener
      * @param appType Application type to get notification for.
-     * @throws CarNotConnectedException if the connection to the car service has been lost.
      */
-    public void addFocusListener(OnAppFocusChangedListener listener, @AppFocusType int appType)
-            throws CarNotConnectedException {
+    public void addFocusListener(OnAppFocusChangedListener listener, @AppFocusType int appType) {
         if (listener == null) {
             throw new IllegalArgumentException("null listener");
         }
@@ -149,7 +147,7 @@
         try {
             mService.registerFocusListener(binder, appType);
         } catch (RemoteException e) {
-            throw new CarNotConnectedException(e);
+            throw e.rethrowFromSystemServer();
         }
     }
 
@@ -157,7 +155,6 @@
      * Unregister listener for application type and stop listening focus change events.
      * @param listener
      * @param appType
-     * @throws CarNotConnectedException if the connection to the car service has been lost.
      */
     public void removeFocusListener(OnAppFocusChangedListener listener, @AppFocusType int appType) {
         IAppFocusListenerImpl binder;
@@ -170,7 +167,7 @@
         try {
             mService.unregisterFocusListener(binder, appType);
         } catch (RemoteException e) {
-            //ignore
+            throw e.rethrowFromSystemServer();
         }
         synchronized (this) {
             binder.removeAppType(appType);
@@ -184,7 +181,6 @@
     /**
      * Unregister listener and stop listening focus change events.
      * @param listener
-     * @throws CarNotConnectedException if the connection to the car service has been lost.
      */
     public void removeFocusListener(OnAppFocusChangedListener listener) {
         IAppFocusListenerImpl binder;
@@ -199,20 +195,19 @@
                 mService.unregisterFocusListener(binder, appType);
             }
         } catch (RemoteException e) {
-            //ignore
+            throw e.rethrowFromSystemServer();
         }
     }
 
     /**
      * Returns application types currently active in the system.
-     * @throws CarNotConnectedException if the connection to the car service has been lost.
      * @hide
      */
-    public int[] getActiveAppTypes() throws CarNotConnectedException {
+    public int[] getActiveAppTypes() {
         try {
             return mService.getActiveAppTypes();
         } catch (RemoteException e) {
-            throw new CarNotConnectedException(e);
+            throw e.rethrowFromSystemServer();
         }
     }
 
@@ -220,10 +215,8 @@
      * Checks if listener is associated with active a focus
      * @param callback
      * @param appType
-     * @throws CarNotConnectedException if the connection to the car service has been lost.
      */
-    public boolean isOwningFocus(OnAppFocusOwnershipCallback callback, @AppFocusType int appType)
-            throws CarNotConnectedException {
+    public boolean isOwningFocus(OnAppFocusOwnershipCallback callback, @AppFocusType int appType) {
         IAppFocusOwnershipCallbackImpl binder;
         synchronized (this) {
             binder = mOwnershipBinders.get(callback);
@@ -234,7 +227,7 @@
         try {
             return mService.isOwningFocus(binder, appType);
         } catch (RemoteException e) {
-            throw new CarNotConnectedException(e);
+            throw e.rethrowFromSystemServer();
         }
     }
 
@@ -247,12 +240,10 @@
      * @param appType
      * @param ownershipCallback
      * @return {@link #APP_FOCUS_REQUEST_FAILED} or {@link #APP_FOCUS_REQUEST_SUCCEEDED}
-     * @throws CarNotConnectedException if the connection to the car service has been lost.
      * @throws SecurityException If owner cannot be changed.
      */
-    public @AppFocusRequestResult int requestAppFocus(int appType,
-            OnAppFocusOwnershipCallback ownershipCallback)
-                    throws SecurityException, CarNotConnectedException {
+    public @AppFocusRequestResult int requestAppFocus(
+            int appType, OnAppFocusOwnershipCallback ownershipCallback) {
         if (ownershipCallback == null) {
             throw new IllegalArgumentException("null listener");
         }
@@ -268,7 +259,7 @@
         try {
             return mService.requestAppFocus(binder, appType);
         } catch (RemoteException e) {
-            throw new CarNotConnectedException(e);
+            throw e.rethrowFromSystemServer();
         }
     }
 
@@ -277,7 +268,6 @@
      * for the focus.
      * @param ownershipCallback
      * @param appType
-     * @throws CarNotConnectedException if the connection to the car service has been lost.
      */
     public void abandonAppFocus(OnAppFocusOwnershipCallback ownershipCallback,
             @AppFocusType int appType) {
@@ -294,7 +284,7 @@
         try {
             mService.abandonAppFocus(binder, appType);
         } catch (RemoteException e) {
-            //ignore
+            throw e.rethrowFromSystemServer();
         }
         synchronized (this) {
             binder.removeAppType(appType);
@@ -308,7 +298,6 @@
      * Abandon all focuses, i.e. mark them as inactive. This also involves releasing ownership
      * for the focus.
      * @param ownershipCallback
-     * @throws CarNotConnectedException if the connection to the car service has been lost.
      */
     public void abandonAppFocus(OnAppFocusOwnershipCallback ownershipCallback) {
         IAppFocusOwnershipCallbackImpl binder;
@@ -323,7 +312,7 @@
                 mService.abandonAppFocus(binder, appType);
             }
         } catch (RemoteException e) {
-            //ignore
+            throw e.rethrowFromSystemServer();
         }
     }
 
diff --git a/car-lib/src/android/car/CarBluetoothManager.java b/car-lib/src/android/car/CarBluetoothManager.java
index 841a055..c753214 100644
--- a/car-lib/src/android/car/CarBluetoothManager.java
+++ b/car-lib/src/android/car/CarBluetoothManager.java
@@ -19,14 +19,9 @@
 import android.annotation.IntDef;
 import android.annotation.RequiresPermission;
 import android.bluetooth.BluetoothDevice;
-import android.car.CarLibLog;
-import android.car.CarManagerBase;
-import android.car.CarNotConnectedException;
-import android.car.ICarBluetooth;
 import android.content.Context;
 import android.os.IBinder;
 import android.os.RemoteException;
-import android.util.Log;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -65,12 +60,11 @@
      */
     @RequiresPermission(Manifest.permission.BLUETOOTH_ADMIN)
     public void setBluetoothDeviceConnectionPriority(BluetoothDevice deviceToSet, int profileToSet,
-            @PriorityType int priorityToSet) throws CarNotConnectedException {
+            @PriorityType int priorityToSet) {
         try {
             mService.setBluetoothDeviceConnectionPriority(deviceToSet, profileToSet, priorityToSet);
         } catch (RemoteException e) {
-            Log.e(CarLibLog.TAG_CAR, "setBluetoothDeviceConnectionPriority failed", e);
-            throw new CarNotConnectedException(e);
+            throw e.rethrowFromSystemServer();
         }
     }
 
@@ -83,12 +77,11 @@
      */
     @RequiresPermission(Manifest.permission.BLUETOOTH_ADMIN)
     public void clearBluetoothDeviceConnectionPriority(int profileToClear,
-            @PriorityType int priorityToClear) throws CarNotConnectedException {
+            @PriorityType int priorityToClear) {
         try {
             mService.clearBluetoothDeviceConnectionPriority(profileToClear, priorityToClear);
         } catch (RemoteException e) {
-            Log.e(CarLibLog.TAG_CAR, "clearBluetoothDeviceConnectionPriority failed", e);
-            throw new CarNotConnectedException(e);
+            throw e.rethrowFromSystemServer();
         }
     }
 
@@ -102,13 +95,11 @@
      * @hide
      */
     @RequiresPermission(Manifest.permission.BLUETOOTH_ADMIN)
-    public boolean isPriorityDevicePresent(int profile, @PriorityType int priorityToCheck)
-            throws CarNotConnectedException {
+    public boolean isPriorityDevicePresent(int profile, @PriorityType int priorityToCheck) {
         try {
             return mService.isPriorityDevicePresent(profile, priorityToCheck);
         } catch (RemoteException e) {
-            Log.e(CarLibLog.TAG_CAR, "isPrioritySet failed", e);
-            throw new CarNotConnectedException(e);
+            throw e.rethrowFromSystemServer();
         }
     }
 
@@ -122,16 +113,15 @@
      * @hide
      */
     @RequiresPermission(Manifest.permission.BLUETOOTH_ADMIN)
-    public String getDeviceNameWithPriority(int profile, @PriorityType int priorityToCheck)
-            throws CarNotConnectedException {
+    public String getDeviceNameWithPriority(int profile, @PriorityType int priorityToCheck) {
         try {
             return mService.getDeviceNameWithPriority(profile, priorityToCheck);
         } catch (RemoteException e) {
-            Log.e(CarLibLog.TAG_CAR, "getDeviceNameWithPriority failed", e);
-            throw new CarNotConnectedException(e);
+            throw e.rethrowFromSystemServer();
         }
     }
 
+
     /** @hide */
     public CarBluetoothManager(IBinder service, Context context) {
         mContext = context;
diff --git a/car-lib/src/android/car/CarInfoManager.java b/car-lib/src/android/car/CarInfoManager.java
index d90883b..4db3403 100644
--- a/car-lib/src/android/car/CarInfoManager.java
+++ b/car-lib/src/android/car/CarInfoManager.java
@@ -116,7 +116,7 @@
      * @return Manufacturer of the car.  Null if not available.
      */
     @Nullable
-    public String getManufacturer() throws CarNotConnectedException {
+    public String getManufacturer() {
         CarPropertyValue<String> carProp = mCarPropertyMgr.getProperty(String.class,
                 BASIC_INFO_KEY_MANUFACTURER, 0);
         return carProp != null ? carProp.getValue() : null;
@@ -128,7 +128,7 @@
      * name may be used for different cars depending on manufacturers.
      */
     @Nullable
-    public String getModel() throws CarNotConnectedException {
+    public String getModel() {
         CarPropertyValue<String> carProp = mCarPropertyMgr.getProperty(
                 String.class, BASIC_INFO_KEY_MODEL, 0);
         return carProp != null ? carProp.getValue() : null;
@@ -138,7 +138,7 @@
      * @return Model year of the car in AC.  Null if not available.
      */
     @Nullable
-    public String getModelYear() throws CarNotConnectedException {
+    public String getModelYear() {
         CarPropertyValue<String> carProp = mCarPropertyMgr.getProperty(String.class,
                 BASIC_INFO_KEY_MODEL_YEAR, 0);
         return carProp != null ? carProp.getValue() : null;
@@ -148,9 +148,9 @@
      * @return Unique identifier for the car. This is not VIN, and vehicle id is
      * persistent until user resets it. This ID is guaranteed to be always
      * available.
-     * TODO: BASIC_INFO_KEY_VEHICLE_ID property?
      */
-    public String getVehicleId() throws CarNotConnectedException {
+    // TODO: BASIC_INFO_KEY_VEHICLE_ID property?
+    public String getVehicleId() {
         return "";
     }
 
@@ -158,7 +158,7 @@
      * @return Fuel capacity of the car in milliliters.  0 if car doesn't run on
      *         fuel.
      */
-    public float getFuelCapacity() throws CarNotConnectedException {
+    public float getFuelCapacity() {
         CarPropertyValue<Float> carProp = mCarPropertyMgr.getProperty(Float.class,
                 BASIC_INFO_FUEL_CAPACITY, 0);
         return carProp != null ? carProp.getValue() : 0f;
@@ -168,7 +168,7 @@
      * @return Array of FUEL_TYPEs available in the car.  Empty array if no fuel
      *         types available.
      */
-    public @FuelType.Enum int[] getFuelTypes() throws CarNotConnectedException {
+    public @FuelType.Enum int[] getFuelTypes() {
         return mCarPropertyMgr.getIntArrayProperty(BASIC_INFO_FUEL_TYPES, 0);
     }
 
@@ -176,7 +176,7 @@
      * @return Battery capacity of the car in WH.  0 if car doesn't run on
      *         battery.
      */
-    public float getEvBatteryCapacity() throws CarNotConnectedException {
+    public float getEvBatteryCapacity() {
         CarPropertyValue<Float> carProp = mCarPropertyMgr.getProperty(Float.class,
                 BASIC_INFO_EV_BATTERY_CAPACITY, 0);
         return carProp != null ? carProp.getValue() : 0f;
@@ -186,7 +186,7 @@
      * @return Array of EV_CONNECTOR_TYPEs available in the car.  Empty array if
      *         no connector types available.
      */
-    public @EvConnectorType.Enum int[] getEvConnectorTypes() throws CarNotConnectedException {
+    public @EvConnectorType.Enum int[] getEvConnectorTypes() {
         return mCarPropertyMgr.getIntArrayProperty(BASIC_INFO_EV_CONNECTOR_TYPES, 0);
     }
 
diff --git a/car-lib/src/android/car/CarNotConnectedException.java b/car-lib/src/android/car/CarNotConnectedException.java
index 38d34cf..b5d6586 100644
--- a/car-lib/src/android/car/CarNotConnectedException.java
+++ b/car-lib/src/android/car/CarNotConnectedException.java
@@ -19,21 +19,32 @@
 
 /**
  * Exception thrown when car is not connected for the API which requires car connection.
+ *
+ * @deprecated No longer thrown by the Android API. Do not use in new code.
  */
-public class CarNotConnectedException extends Exception {
-    private static final long serialVersionUID = -5629175439268813047L;
+@Deprecated
+public class CarNotConnectedException extends RuntimeException {
+    private static final long serialVersionUID = 4377819074553367406L;
 
+    /** @deprecated Do not use in new code. */
+    @Deprecated
     public CarNotConnectedException() {
     }
 
+    /** @deprecated Do not use in new code. */
+    @Deprecated
     public CarNotConnectedException(String name) {
         super(name);
     }
 
+    /** @deprecated Do not use in new code. */
+    @Deprecated
     public CarNotConnectedException(String name, Throwable cause) {
         super(name, cause);
     }
 
+    /** @deprecated Do not use in new code. */
+    @Deprecated
     public CarNotConnectedException(Exception cause) {
         super(cause);
     }
diff --git a/car-lib/src/android/car/CarProjectionManager.java b/car-lib/src/android/car/CarProjectionManager.java
index 2fc5944..50606de 100644
--- a/car-lib/src/android/car/CarProjectionManager.java
+++ b/car-lib/src/android/car/CarProjectionManager.java
@@ -17,6 +17,7 @@
 package android.car;
 
 import android.annotation.SystemApi;
+import android.bluetooth.BluetoothDevice;
 import android.content.Intent;
 import android.net.wifi.WifiConfiguration;
 import android.os.Binder;
@@ -94,11 +95,9 @@
 
     /**
      * Compatibility with previous APIs due to typo
-     * @throws CarNotConnectedException if the connection to the car service has been lost.
      * @hide
      */
-    public void regsiterProjectionListener(CarProjectionListener listener, int voiceSearchFilter)
-            throws CarNotConnectedException {
+    public void regsiterProjectionListener(CarProjectionListener listener, int voiceSearchFilter) {
         registerProjectionListener(listener, voiceSearchFilter);
     }
 
@@ -107,10 +106,8 @@
      * registering multiple times will lead into only the last listener to be active.
      * @param listener
      * @param voiceSearchFilter Flags of voice search requests to get notification.
-     * @throws CarNotConnectedException if the connection to the car service has been lost.
      */
-    public void registerProjectionListener(CarProjectionListener listener, int voiceSearchFilter)
-            throws CarNotConnectedException {
+    public void registerProjectionListener(CarProjectionListener listener, int voiceSearchFilter) {
         if (listener == null) {
             throw new IllegalArgumentException("null listener");
         }
@@ -119,7 +116,7 @@
                 try {
                     mService.registerProjectionListener(mBinderListener, voiceSearchFilter);
                 } catch (RemoteException e) {
-                    throw new CarNotConnectedException(e);
+                    throw e.rethrowFromSystemServer();
                 }
             }
             mListener = listener;
@@ -129,7 +126,6 @@
 
     /**
      * Compatibility with previous APIs due to typo
-     * @throws CarNotConnectedException if the connection to the car service has been lost.
      * @hide
      */
     public void unregsiterProjectionListener() {
@@ -138,14 +134,13 @@
 
     /**
      * Unregister listener and stop listening projection events.
-     * @throws CarNotConnectedException if the connection to the car service has been lost.
      */
     public void unregisterProjectionListener() {
         synchronized (this) {
             try {
                 mService.unregisterProjectionListener(mBinderListener);
             } catch (RemoteException e) {
-                //ignore
+                throw e.rethrowFromSystemServer();
             }
             mListener = null;
             mVoiceSearchFilter = 0;
@@ -156,9 +151,8 @@
      * Registers projection runner on projection start with projection service
      * to create reverse binding.
      * @param serviceIntent
-     * @throws CarNotConnectedException if the connection to the car service has been lost.
      */
-    public void registerProjectionRunner(Intent serviceIntent) throws CarNotConnectedException {
+    public void registerProjectionRunner(Intent serviceIntent) {
         if (serviceIntent == null) {
             throw new IllegalArgumentException("null serviceIntent");
         }
@@ -166,7 +160,7 @@
             try {
                 mService.registerProjectionRunner(serviceIntent);
             } catch (RemoteException e) {
-                throw new CarNotConnectedException(e);
+                throw e.rethrowFromSystemServer();
             }
         }
     }
@@ -175,7 +169,6 @@
      * Unregisters projection runner on projection stop with projection service to create
      * reverse binding.
      * @param serviceIntent
-     * @throws CarNotConnectedException if the connection to the car service has been lost.
      */
     public void unregisterProjectionRunner(Intent serviceIntent) {
         if (serviceIntent == null) {
@@ -185,7 +178,7 @@
             try {
                 mService.unregisterProjectionRunner(serviceIntent);
             } catch (RemoteException e) {
-                //ignore
+                throw e.rethrowFromSystemServer();
             }
         }
     }
@@ -237,6 +230,44 @@
     }
 
     /**
+     * Request to disconnect the given profile on the given device, and prevent it from reconnecting
+     * until either the request is released, or the process owning the given token dies.
+     *
+     * @param device  The device on which to inhibit a profile.
+     * @param profile The {@link android.bluetooth.BluetoothProfile} to inhibit.
+     * @param token   A {@link IBinder} to be used as an identity for the request. If the process
+     *                owning the token dies, the request will automatically be released.
+     * @return True if the profile was successfully inhibited, false if an error occurred.
+     */
+    public boolean requestBluetoothProfileInhibit(
+            BluetoothDevice device, int profile, IBinder token) {
+        try {
+            return mService.requestBluetoothProfileInhibit(device, profile, token);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /**
+     * Release an inhibit request made by {@link #requestBluetoothProfileInhibit}, and reconnect the
+     * profile if no other inhibit requests are active.
+     *
+     * @param device  The device on which to release the inhibit request.
+     * @param profile The profile on which to release the inhibit request.
+     * @param token   The token provided in the original call to
+     *                {@link #requestBluetoothProfileInhibit}.
+     * @return True if the request was released, false if an error occurred.
+     */
+    public boolean releaseBluetoothProfileInhibit(
+            BluetoothDevice device, int profile, IBinder token) {
+        try {
+            return mService.releaseBluetoothProfileInhibit(device, profile, token);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /**
      * Callback class for applications to receive updates about the LocalOnlyHotspot status.
      */
     public abstract static class ProjectionAccessPointCallback {
diff --git a/car-lib/src/android/car/ICar.aidl b/car-lib/src/android/car/ICar.aidl
index 9f8c367..33e2655 100644
--- a/car-lib/src/android/car/ICar.aidl
+++ b/car-lib/src/android/car/ICar.aidl
@@ -18,12 +18,24 @@
 
 /** @hide */
 interface ICar {
+    // All oneway methods are called from system server and should be placed in top positions.
+    // Do not change the order of oneway methods as system server make binder call based on this
+    // order.
+
     /**
      * IBinder is ICarServiceHelper but passed as IBinder due to aidl hidden.
-     * Only this method is oneway as it is called from system server.
+     *
      * This should be the 1st method. Do not change the order.
      */
     oneway void setCarServiceHelper(in IBinder helper) = 0;
-    IBinder getCarService(in String serviceName) = 1;
-    int getCarConnectionType() = 2;
+    /**
+     * Notify lock / unlock of user id to car service.
+     * unlocked: 1 if unlocked 0 otherwise.
+     *
+     * This should be the 2nd method. Do not change the order.
+     */
+    oneway void setUserLockStatus(in int userHandle, in int unlocked) = 1;
+
+    IBinder getCarService(in String serviceName) = 2;
+    int getCarConnectionType() = 3;
 }
diff --git a/car-lib/src/android/car/ICarBluetoothUserService.aidl b/car-lib/src/android/car/ICarBluetoothUserService.aidl
index a906a3c..d69d08f 100644
--- a/car-lib/src/android/car/ICarBluetoothUserService.aidl
+++ b/car-lib/src/android/car/ICarBluetoothUserService.aidl
@@ -24,5 +24,7 @@
     void closeBluetoothConnectionProxy();
     boolean isBluetoothConnectionProxyAvailable(in int profile);
     void bluetoothConnectToProfile(in int profile, in BluetoothDevice device);
+    void bluetoothDisconnectFromProfile(in int profile, in BluetoothDevice device);
+    int getProfilePriority(in int profile, in BluetoothDevice device);
     void setProfilePriority(in int profile, in BluetoothDevice device, in int priority);
 }
diff --git a/car-lib/src/android/car/ICarProjection.aidl b/car-lib/src/android/car/ICarProjection.aidl
index 4f80e6c..efaac0d 100644
--- a/car-lib/src/android/car/ICarProjection.aidl
+++ b/car-lib/src/android/car/ICarProjection.aidl
@@ -16,6 +16,7 @@
 
 package android.car;
 
+import android.bluetooth.BluetoothDevice;
 import android.car.ICarProjectionCallback;
 import android.content.Intent;
 import android.os.Messenger;
@@ -60,4 +61,12 @@
      * Stops previously requested Wi-Fi access point.
      */
     void stopProjectionAccessPoint(in IBinder binder) = 5;
+
+    /** Disconnect a Bluetooth profile, and prevent it from reconnecting. */
+    boolean requestBluetoothProfileInhibit(
+            in BluetoothDevice device, in int profile, in IBinder token) = 6;
+
+    /** Undo the effects of requestBluetoothProfileInhibit. */
+    boolean releaseBluetoothProfileInhibit(
+            in BluetoothDevice device, in int profile, in IBinder token) = 7;
 }
diff --git a/car-lib/src/android/car/VehiclePropertyIds.java b/car-lib/src/android/car/VehiclePropertyIds.java
index 12d2698..a62730d 100644
--- a/car-lib/src/android/car/VehiclePropertyIds.java
+++ b/car-lib/src/android/car/VehiclePropertyIds.java
@@ -19,7 +19,7 @@
 /**
  * Copy from android.hardware.automotive.vehicle-V2.0-java_gen_java/gen/android/hardware/automotive
  * /vehicle/V2_0. Need to update this file when vehicle propertyId is changed in VHAL.
- * Use it as PorpertyId in getProperty() and setProperty() in
+ * Use it as PropertyId in getProperty() and setProperty() in
  * {@link android.car.hardware.property.CarPropertyManager}
  */
 public final class VehiclePropertyIds {
@@ -80,6 +80,19 @@
      */
     public static final int PERF_VEHICLE_SPEED = 291504647;
     /**
+     * Speed of the vehicle for displays
+     *
+     * Some cars display a slightly slower speed than the actual speed. This is
+     * usually displayed on the speedometer.
+     */
+    public static final int PERF_VEHICLE_SPEED_DISPLAY = 291504648;
+    /**
+     * Steering angle of the vehicle
+     *
+     * Angle is in degrees. Left is negative.
+     */
+    public static final int PERF_STEERING_ANGLE = 291504649;
+    /**
      * Temperature of engine coolant
      */
     public static final int ENGINE_COOLANT_TEMP = 291504897;
@@ -580,6 +593,12 @@
         if (o == PERF_VEHICLE_SPEED) {
             return "PERF_VEHICLE_SPEED";
         }
+        if (o == PERF_VEHICLE_SPEED_DISPLAY) {
+            return "PERF_VEHICLE_SPEED_DISPLAY";
+        }
+        if (o == PERF_STEERING_ANGLE) {
+            return "PERF__STEERING_ANGLE";
+        }
         if (o == ENGINE_COOLANT_TEMP) {
             return "ENGINE_COOLANT_TEMP";
         }
diff --git a/car-lib/src/android/car/app/menu/CarMenuCallbacks.java b/car-lib/src/android/car/app/menu/CarMenuCallbacks.java
deleted file mode 100644
index 4e44428..0000000
--- a/car-lib/src/android/car/app/menu/CarMenuCallbacks.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright (C) 2016 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 android.car.app.menu;
-
-import android.os.Bundle;
-
-/**
- * The callbacks that a car app needs to pass to a car ui provider for car menu interactions.
- */
-public abstract class CarMenuCallbacks {
-    /**
-     * Called when the car menu wants to get the root.
-     *
-     * @param hints Hints that the Drawer can use to modify behavior. It can be null.
-     * @return The {@link RootMenu} which contains the root id and any hints
-     */
-    public abstract RootMenu getRootMenu(Bundle hints);
-
-    /**
-     * Query for information about the menu items that are contained within
-     * the specified id and subscribes to receive updates when they change.
-     *
-     * @param parentId The id of the parent menu item whose list of children
-     *            will be subscribed.
-     * @param callback The callback to receive the list of children.
-     */
-    public abstract void subscribe(String parentId, SubscriptionCallbacks callback);
-
-    /**
-     * Unsubscribe for changes to the children of the specified id.
-     * @param parentId The id of the parent menu item whose list of children
-     *            will be unsubscribed.
-     */
-    public abstract void unsubscribe(String parentId, SubscriptionCallbacks callbacks);
-
-    /**
-     * Called when the car menu has been opened.
-     */
-    public abstract void onCarMenuOpened();
-
-    /**
-     * Called when the car menu has been closed.
-     */
-    public abstract void onCarMenuClosed();
-
-    /**
-     * Called when a car menu item with the specified id has been clicked.
-     */
-    public abstract void onItemClicked(String id);
-
-    /**
-     * Called when a car menu item with the specified id has been long clicked.
-     */
-    public abstract boolean onItemLongClicked(String id);
-
-    /**
-     * Called when the menu button is clicked.
-     */
-    public abstract boolean onMenuClicked();
-
-    /**
-     * Called when the menu is opening.
-     */
-    public abstract void onCarMenuOpening();
-
-    /**
-     * Called when the menu is closing.
-     */
-    public abstract void onCarMenuClosing();
-}
diff --git a/car-lib/src/android/car/app/menu/CarMenuConstants.java b/car-lib/src/android/car/app/menu/CarMenuConstants.java
deleted file mode 100644
index fe4b7fe..0000000
--- a/car-lib/src/android/car/app/menu/CarMenuConstants.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright (C) 2016 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 android.car.app.menu;
-
-import android.annotation.IntDef;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * Contains keys to the metadata of car menu, such as id, title, icon, etc.
- */
-public class CarMenuConstants {
-    public static class MenuItemConstants {
-        @Retention(RetentionPolicy.SOURCE)
-        @IntDef(flag = true,
-                value = {FLAG_BROWSABLE, FLAG_FIRSTITEM})
-        public @interface MenuItemFlags {}
-
-        /**
-         * Flag: Indicates that the item has children of its own
-         */
-        public static final int FLAG_BROWSABLE = 0x1;
-
-        /**
-         * Flag: Indicates that the menu should scroll to this item
-         */
-        public static final int FLAG_FIRSTITEM = 0x2;
-
-        @Retention(RetentionPolicy.SOURCE)
-        @IntDef(value = {WIDGET_CHECKBOX, WIDGET_TEXT_VIEW})
-        public @interface WidgetTypes {}
-
-        /**
-         * Use a checkbox widget.
-         */
-        public static final int WIDGET_CHECKBOX = 0x1;
-
-        /**
-         * Use a TextView widget
-         */
-        public static final int WIDGET_TEXT_VIEW = 0x2;
-
-        /**
-         * Key for the car menu title.
-         */
-        public static final String KEY_TITLE = "android.car.app.menu.title";
-
-        /**
-         * Key for the item title.
-         */
-        public static final String KEY_TEXT = "android.car.app.menu.text";
-
-        /**
-         * Key for the left icon.
-         */
-        public static final String KEY_LEFTICON = "android.car.app.menu.leftIcon";
-
-        /**
-         * Key for the right icon.
-         */
-        public static final String KEY_RIGHTICON = "android.car.app.menu.rightIcon";
-
-        /**
-         * Key for the text to be shown to the right of the item.
-         */
-        public static final String KEY_RIGHTTEXT = "android.car.app.menu.rightText";
-
-        /**
-         * Key for the widget type.
-         */
-        public static final String KEY_WIDGET = "android.car.app.menu.widget";
-
-        /**
-         * Key for the widget state.
-         */
-        public static final String KEY_WIDGET_STATE = "android.car.app.menu.widget_state";
-
-        /**
-         * Key for the value of whether the item is a place holder.
-         */
-        public static final String KEY_EMPTY_PLACEHOLDER = "android.car.app.menu.empty_placeholder";
-
-        /**
-         * Key for the flags.
-         */
-        public static final String KEY_FLAGS = "android.car.app.menu.flags";
-
-        /**
-         * Key for the menu item id.
-         */
-        public static final String KEY_ID = "android.car.app.menu.id";
-
-        /**
-         * Key for the remote views.
-         */
-        public static final String KEY_REMOTEVIEWS = "android.car.app.menu.remoteViews";
-    }
-}
\ No newline at end of file
diff --git a/car-lib/src/android/car/app/menu/CarUiEntry.java b/car-lib/src/android/car/app/menu/CarUiEntry.java
deleted file mode 100644
index f14421b..0000000
--- a/car-lib/src/android/car/app/menu/CarUiEntry.java
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- * Copyright (C) 2015 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 android.car.app.menu;
-
-import android.content.Context;
-import android.graphics.Bitmap;
-import android.os.Bundle;
-import android.view.View;
-import android.widget.EditText;
-
-/**
- * A base class for a car ui entry which is used for loading and manipulating common car
- * app decor window (CarUi).
- *
- * A CarUi provider provides essential ui elements that a car app may want to use. The CarUi is
- * loaded by apps at runtime, similar to a shared library, but via reflection through a class that
- * extends {@link android.car.app.menu.CarUiEntry} from a separate apk
- * called CarUiProvider. Depending on the different platforms, the CarUiProvider may
- * be different and can be customized by different car makers. However, it is required that a
- * set of basic ui elements and functionalities exist in the CarUiProvider. This class defines
- * the set of must have functions in a CarUiProvider.
- */
-public abstract class CarUiEntry {
-    protected final Context mAppContext;
-    protected final Context mUiLibContext;
-
-    public CarUiEntry(Context uiLibContext, Context appContext) {
-        mUiLibContext = uiLibContext.createConfigurationContext(
-                appContext.getResources().getConfiguration());
-        mAppContext = appContext;
-    }
-
-    /**
-     * Return the content view.
-     */
-    abstract public View getContentView();
-
-    /**
-     * Set {@link android.car.app.menu.CarMenuCallbacks} from a car app for car menu interactions.
-     */
-    abstract public void setCarMenuCallbacks(CarMenuCallbacks callbacks);
-
-    /**
-     * Return the id of the main container in which app can render its own content.
-     */
-    abstract public int getFragmentContainerId();
-
-    /**
-     * Set the background bitmap.
-     */
-    abstract public void setBackground(Bitmap bitmap);
-
-    /**
-     * Replace the menu button with the given bitmap.
-     */
-    abstract public void setMenuButtonBitmap(Bitmap bitmap);
-
-    /**
-     * Hide the menu button.
-     */
-    abstract public void hideMenuButton();
-
-    /**
-     * Restore the menu button.
-     */
-    abstract public void restoreMenuDrawable();
-
-    /**
-     * Set the color of the car menu scrim.
-     */
-    abstract public void setScrimColor(int color);
-
-    /**
-     * Set the title of the car menu.
-     */
-    abstract public void setTitle(CharSequence title);
-
-    /**
-     * Close the car menu.
-     */
-    abstract public void closeDrawer();
-
-    /**
-     * Open the car menu.
-     */
-    abstract public void openDrawer();
-
-    /**
-     * Show the menu associated with the specified id, and set the car menu title.
-     */
-    abstract public void showMenu(String id, String title);
-
-    /**
-     * Set the car menu button color.
-     */
-    abstract public void setMenuButtonColor(int color);
-
-    /**
-     * Make the menu title visible.
-     */
-    abstract public void showTitle();
-
-    /**
-     * Hide the menu title.
-     */
-    abstract public void hideTitle();
-
-    /**
-     * Use the light car theme.
-     */
-    abstract public void setLightMode();
-
-    /**
-     * Use the dark car theme.
-     */
-    abstract public void setDarkMode();
-
-    /**
-     * Use automatic light/dark car theme based on ui mode.
-     */
-    abstract public void setAutoLightDarkMode();
-
-    /**
-     * Called when the activity's onRestoreInstanceState is called.
-     */
-    abstract public void onRestoreInstanceState(Bundle savedInstanceState);
-
-    /**
-     * Called when the activity's onSaveInstanceState is called.
-     */
-    abstract public void onSaveInstanceState(Bundle outState);
-
-    /**
-     * Show the search box and set the click listener for the search box.
-     */
-    abstract public void showSearchBox(View.OnClickListener listener);
-
-    /**
-     * Set the color of the search box.
-     */
-    abstract public void setSearchBoxColors(int backgroundColor, int searchLogoColor,
-            int textColor, int hintTextColor);
-
-    /**
-     * Set the search box edit listener for monitoring input.
-     */
-    abstract public void setSearchBoxEditListener(SearchBoxEditListener listener);
-
-    /**
-     * Called when activity's onStart is called.
-     */
-    abstract public void onStart();
-
-    /**
-     * Called when activity's onResume is called.
-     */
-    abstract public void onResume();
-
-    /**
-     * Called when activity's onPause is called.
-     */
-    abstract public void onPause();
-
-    /**
-     * Called when activity's onStop is called.
-     */
-    abstract public void onStop();
-
-    /**
-     * Start input on the search box and show IME.
-     * @param hint hint text to show in the search box.
-     * @param searchBoxClickListener search box click listener.
-     * @return The search box {@link android.widget.EditText}.
-     */
-    abstract public EditText startInput(String hint,
-            View.OnClickListener searchBoxClickListener);
-
-    /**
-     * Set the view in the end of the search box as the search result is loading.
-     */
-    abstract public void setSearchBoxEndView(View view);
-
-    /**
-     * Returns the current user entered text in the search box.
-     */
-    abstract public CharSequence getSearchBoxText();
-
-    /**
-     * Called when input should be stopped.
-     */
-    abstract public void stopInput();
-
-    /**
-     * Show a toast message.
-     * @param msg text to show
-     * @param duration toast duration in millisecond.
-     */
-    abstract public void showToast(String msg, long duration);
-}
diff --git a/car-lib/src/android/car/app/menu/RootMenu.java b/car-lib/src/android/car/app/menu/RootMenu.java
deleted file mode 100644
index 30eca92..0000000
--- a/car-lib/src/android/car/app/menu/RootMenu.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (C) 2016 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 android.car.app.menu;
-
-import android.os.Bundle;
-
-/**
- * Stores the root id for the menu. The RootMenu is the main menu.
- * Also allows passing hints through bundles. Hints allow the
- * the recipient to alter its behavior based on the hints.
- */
-public class RootMenu {
-    private final Bundle mBundle;
-    private final String mRootId;
-
-    /**
-     * Create a root with no extra hints.
-     *
-     * @param id Root id
-     */
-    public RootMenu(String id) {
-        this(id, null);
-    }
-
-    /**
-     * Create a root with hints
-     *
-     * @param id Root id
-     * @param extras Hints to pass along
-     */
-    public RootMenu(String id, Bundle extras) {
-        mRootId = id;
-        mBundle = extras;
-    }
-
-    /**
-     * Get the root id
-     *
-     * @return The root id
-     */
-    public String getId() {
-        return mRootId;
-    }
-
-    /**
-     * Get any hints
-     *
-     * @return A bundle if there are hints; null otherwise.
-     */
-    public Bundle getBundle() {
-        return new Bundle(mBundle);
-    }
-}
diff --git a/car-lib/src/android/car/app/menu/SearchBoxEditListener.java b/car-lib/src/android/car/app/menu/SearchBoxEditListener.java
deleted file mode 100644
index c7057d3..0000000
--- a/car-lib/src/android/car/app/menu/SearchBoxEditListener.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (C) 2016 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 android.car.app.menu;
-
-public abstract class SearchBoxEditListener {
-    /**
-     * The user hit enter on the keyboard.
-     */
-    public abstract void onSearch(String text);
-
-    /**
-     * The user changed the text in the search box with the keyboard.
-     */
-    public abstract void onEdit(String text);
-}
diff --git a/car-lib/src/android/car/app/menu/SubscriptionCallbacks.java b/car-lib/src/android/car/app/menu/SubscriptionCallbacks.java
deleted file mode 100644
index 9902436..0000000
--- a/car-lib/src/android/car/app/menu/SubscriptionCallbacks.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2016 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 android.car.app.menu;
-
-import android.os.Bundle;
-
-import java.util.List;
-
-/**
- * The callbacks to receive menu items updates.
- */
-public abstract class SubscriptionCallbacks {
-    /**
-     * Called when the items with the specified parent id are loaded.
-     *
-     * @param items The list of menu items. To retrieve the content of the item, use the keys
-     *              defined in {@link CarMenuConstants.CarMenuConstants}.
-     */
-    public abstract void onChildrenLoaded(String parentId, List<Bundle> items);
-
-    /**
-     * Called when there is an error loading the items with the specified id.
-     */
-    public abstract void onError(String id);
-
-    /**
-     * Called when the car menu items with the specified parent id are changed.
-     *
-     * @param item The new menu item. To retrieve the content of the item, use the keys
-     *              defined in {@link CarMenuConstants.CarMenuConstants}.
-     */
-    public abstract void onChildChanged(String parentId, Bundle item);
-}
\ No newline at end of file
diff --git a/car-lib/src/android/car/cluster/CarInstrumentClusterManager.java b/car-lib/src/android/car/cluster/CarInstrumentClusterManager.java
index ad54893..54d10e2 100644
--- a/car-lib/src/android/car/cluster/CarInstrumentClusterManager.java
+++ b/car-lib/src/android/car/cluster/CarInstrumentClusterManager.java
@@ -18,34 +18,29 @@
 
 import android.annotation.SystemApi;
 import android.car.CarManagerBase;
-import android.car.CarNotConnectedException;
 import android.content.Intent;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.IBinder;
-import android.os.Looper;
-import android.os.Message;
-import android.os.RemoteException;
-import android.util.Log;
-import android.util.Pair;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
 
 /**
  * API to work with instrument cluster.
  *
+ * @deprecated use {@link android.car.CarAppFocusManager} with focus type
+ * {@link android.car.CarAppFocusManager#APP_FOCUS_TYPE_NAVIGATION} instead.
+ * InstrumentClusterService will automatically launch a "android.car.cluster.NAVIGATION" activity
+ * from the package holding navigation focus.
+ *
  * @hide
  */
+@Deprecated
 @SystemApi
 public class CarInstrumentClusterManager implements CarManagerBase {
-    private static final String TAG = CarInstrumentClusterManager.class.getSimpleName();
-
-    /** @hide */
+    /**
+     * @deprecated use {@link android.car.Car#CATEGORY_NAVIGATION} instead
+     *
+     * @hide
+     */
     @SystemApi
     public static final String CATEGORY_NAVIGATION = "android.car.cluster.NAVIGATION";
 
@@ -54,34 +49,24 @@
      * intent's extra thus activity will know information about unobscured area, etc. upon activity
      * creation.
      *
+     * @deprecated use {@link android.car.Car#CATEGORY_NAVIGATION} instead
+     *
      * @hide
      */
     @SystemApi
     public static final String KEY_EXTRA_ACTIVITY_STATE =
             "android.car.cluster.ClusterActivityState";
 
-    private final EventHandler mHandler;
-    private final Map<String, Set<Callback>> mCallbacksByCategory = new HashMap<>(0);
-    private final Object mLock = new Object();
-    private final Map<String, Bundle> mActivityStatesByCategory = new HashMap<>(0);
-
-    private final IInstrumentClusterManagerService mService;
-
-    private ClusterManagerCallback mServiceToManagerCallback;
-
     /**
      * Starts activity in the instrument cluster.
      *
+     * @deprecated see {@link CarInstrumentClusterManager} deprecation message
+     *
      * @hide
      */
     @SystemApi
-    public void startActivity(Intent intent) throws CarNotConnectedException {
-        try {
-            mService.startClusterActivity(intent);
-        } catch (RemoteException e) {
-            Log.e(TAG, "Unable to launch activity (" + intent + ")", e);
-            throw new CarNotConnectedException(e);
-        }
+    public void startActivity(Intent intent) {
+        // No-op
     }
 
     /**
@@ -92,42 +77,13 @@
      *                         see {@link #CATEGORY_NAVIGATION}
      * @param callback instance of {@link Callback} class to receive events.
      *
+     * @deprecated see {@link CarInstrumentClusterManager} deprecation message
+     *
      * @hide
      */
     @SystemApi
-    public void registerCallback(String category, Callback callback)
-            throws CarNotConnectedException {
-        Log.i(TAG, "registerCallback, category: " + category + ", callback: " + callback);
-        ClusterManagerCallback callbackToCarService = null;
-        synchronized (mLock) {
-            Set<Callback> callbacks = mCallbacksByCategory.get(category);
-            if (callbacks == null) {
-                callbacks = new HashSet<>(1);
-                mCallbacksByCategory.put(category, callbacks);
-            }
-            if (!callbacks.add(callback)) {
-                Log.w(TAG, "registerCallback: already registered");
-                return;  // already registered
-            }
-
-            if (mActivityStatesByCategory.containsKey(category)) {
-                Log.i(TAG, "registerCallback: sending activity state...");
-                callback.onClusterActivityStateChanged(
-                        category, mActivityStatesByCategory.get(category));
-            }
-
-            if (mServiceToManagerCallback == null) {
-                Log.i(TAG, "registerCallback: registering callback with car service...");
-                mServiceToManagerCallback = new ClusterManagerCallback();
-                callbackToCarService = mServiceToManagerCallback;
-            }
-        }
-        try {
-            mService.registerCallback(callbackToCarService);
-            Log.i(TAG, "registerCallback: done");
-        } catch (RemoteException e) {
-            throw new CarNotConnectedException(e);
-        }
+    public void registerCallback(String category, Callback callback) {
+        // No-op
     }
 
     /**
@@ -135,46 +91,29 @@
      *
      * @param callback previously registered callback
      *
+     * @deprecated see {@link CarInstrumentClusterManager} deprecation message
+     *
      * @hide
      */
     @SystemApi
-    public void unregisterCallback(Callback callback) throws CarNotConnectedException {
-        List<String> keysToRemove = new ArrayList<>(1);
-        synchronized (mLock) {
-            for (Map.Entry<String, Set<Callback>> entry : mCallbacksByCategory.entrySet()) {
-                Set<Callback> callbacks = entry.getValue();
-                if (callbacks.remove(callback) && callbacks.isEmpty()) {
-                    keysToRemove.add(entry.getKey());
-                }
-
-            }
-
-            for (String key: keysToRemove) {
-                mCallbacksByCategory.remove(key);
-            }
-
-            if (mCallbacksByCategory.isEmpty()) {
-                try {
-                    mService.unregisterCallback(mServiceToManagerCallback);
-                } catch (RemoteException e) {
-                    throw new CarNotConnectedException(e);
-                }
-                mServiceToManagerCallback = null;
-            }
-        }
+    public void unregisterCallback(Callback callback) {
+        // No-op
     }
 
     /** @hide */
     public CarInstrumentClusterManager(IBinder service, Handler handler) {
-        mService = IInstrumentClusterManagerService.Stub.asInterface(service);
-
-        mHandler = new EventHandler(handler.getLooper());
+        // No-op
     }
 
-    /** @hide */
+    /**
+     * @deprecated activity state is not longer being reported. See
+     * {@link CarInstrumentClusterManager} deprecation message for more details.
+     *
+     * @hide
+     */
+    @Deprecated
     @SystemApi
     public interface Callback {
-
         /**
          * Notify client that activity state was changed.
          *
@@ -188,54 +127,4 @@
     @Override
     public void onCarDisconnected() {
     }
-
-    private class EventHandler extends Handler {
-
-        final static int MSG_ACTIVITY_STATE = 1;
-
-        EventHandler(Looper looper) {
-            super(looper);
-        }
-
-        @Override
-        public void handleMessage(Message msg) {
-            Log.i(TAG, "handleMessage, message: " + msg);
-            switch (msg.what) {
-                case MSG_ACTIVITY_STATE:
-                    Pair<String, Bundle> info = (Pair<String, Bundle>) msg.obj;
-                    String category = info.first;
-                    Bundle state = info.second;
-                    List<CarInstrumentClusterManager.Callback> callbacks = null;
-                    synchronized (mLock) {
-                        if (mCallbacksByCategory.containsKey(category)) {
-                            callbacks = new ArrayList<>(mCallbacksByCategory.get(category));
-                        }
-                    }
-                    Log.i(TAG, "handleMessage, callbacks: " + callbacks);
-                    if (callbacks != null) {
-                        for (CarInstrumentClusterManager.Callback cb : callbacks) {
-                            cb.onClusterActivityStateChanged(category, state);
-                        }
-                    }
-                    break;
-                default:
-                    Log.e(TAG, "Unexpected message: " + msg.what);
-            }
-        }
-    }
-
-    private class ClusterManagerCallback extends IInstrumentClusterManagerCallback.Stub {
-
-        @Override
-        public void setClusterActivityState(String category, Bundle clusterActivityState)
-                throws RemoteException {
-            Log.i(TAG, "setClusterActivityState, category: " + category);
-            synchronized (mLock) {
-                mActivityStatesByCategory.put(category, clusterActivityState);
-            }
-
-            mHandler.sendMessage(mHandler.obtainMessage(EventHandler.MSG_ACTIVITY_STATE,
-                    new Pair<>(category, clusterActivityState)));
-        }
-    }
-}
\ No newline at end of file
+}
diff --git a/car-lib/src/android/car/cluster/ClusterActivityState.java b/car-lib/src/android/car/cluster/ClusterActivityState.java
index 9a6223c..79f7e76 100644
--- a/car-lib/src/android/car/cluster/ClusterActivityState.java
+++ b/car-lib/src/android/car/cluster/ClusterActivityState.java
@@ -23,6 +23,7 @@
 /**
  * Helper class that represents activity state in the cluster and can be serialized / deserialized
  * to/from bundle.
+ *
  * @hide
  */
 public class ClusterActivityState {
@@ -34,24 +35,65 @@
     private Rect mUnobscuredBounds;
     private Bundle mExtras;
 
+    /**
+     * Returns true if the cluster is currently able to display content, or false if the content
+     * area of the cluster is hidden.
+     */
     public boolean isVisible() {
         return mVisible;
     }
 
+    /**
+     * Get a rectangle inside the cluster content area that is not covered by any decorations.
+     * Activities designed to display content in the instrument cluster can use this information to
+     * determine where to display user-relevant content, while using the rest of the window for
+     * content bleeding. For example, a navigation activity could decide to display current road
+     * inside this rectangle, while drawing additional map background outside this area.
+     * <p>
+     * All values of this {@link Rect} represent absolute coordinates inside the activity canvas.
+     */
     @Nullable public Rect getUnobscuredBounds() {
         return mUnobscuredBounds;
     }
 
+    /**
+     * Get any custom extras that were set on this activity state.
+     */
+    @Nullable public Bundle getExtras() {
+        return mExtras;
+    }
+
+    /**
+     * Sets whether the cluster is currently able to display content, or false if content area of
+     * the cluster is hidden.
+     *
+     * @return this instance for chaining.
+     */
     public ClusterActivityState setVisible(boolean visible) {
         mVisible = visible;
         return this;
     }
 
+    /**
+     * Sets a rectangle inside that cluster content area that is not covered by any decorations.
+     * Activities designed to display content in the cluster can use this to determine where to
+     * display user-relevant content, while using the rest of the window for content bleeding.
+     *
+     * @param unobscuredBounds a {@link Rect} describing the area inside the activity canvas that is
+     *                         not covered by any decorations. All values of this {@link Rect}
+     *                         represent absolute coordinates inside the activity canvas.
+     * @return this instance for chaining.
+     */
     public ClusterActivityState setUnobscuredBounds(Rect unobscuredBounds) {
         mUnobscuredBounds = unobscuredBounds;
         return this;
     }
 
+    /**
+     * Set any custom extras to be included with the activity state.
+     *
+     * @return this instance for chaining.
+     */
     public ClusterActivityState setExtras(Bundle bundle) {
         mExtras = bundle;
         return this;
@@ -60,12 +102,19 @@
     /** Use factory methods instead. */
     private ClusterActivityState() {}
 
+    /**
+     * Creates a {@link ClusterActivityState} with the given visibility and unobscured bounds (see
+     * {@link #setVisible(boolean)} and {@link #setUnobscuredBounds(Rect)} for more details)
+     */
     public static ClusterActivityState create(boolean visible, Rect unobscuredBounds) {
         return new ClusterActivityState()
                 .setVisible(visible)
                 .setUnobscuredBounds(unobscuredBounds);
     }
 
+    /**
+     * Reconstructs a {@link ClusterActivityState} from a {@link Bundle}
+     */
     public static ClusterActivityState fromBundle(Bundle bundle) {
         return new ClusterActivityState()
                 .setVisible(bundle.getBoolean(KEY_VISIBLE, true))
@@ -73,6 +122,10 @@
                 .setExtras(bundle.getBundle(KEY_EXTRAS));
     }
 
+    /**
+     * Returns a {@link Bundle} representation of this instance. This bundle can then be
+     * deserialized using {@link #fromBundle(Bundle)}.
+     */
     public Bundle toBundle() {
         Bundle b = new Bundle();
         b.putBoolean(KEY_VISIBLE, mVisible);
@@ -85,7 +138,8 @@
     public String toString() {
         return this.getClass().getSimpleName() + " {"
                 + "visible: " + mVisible + ", "
-                + "unobscuredBounds: " + mUnobscuredBounds
+                + "unobscuredBounds: " + mUnobscuredBounds + ", "
+                + "extras: " + mExtras
                 + " }";
     }
 }
diff --git a/car-lib/src/android/car/cluster/IInstrumentClusterManagerCallback.aidl b/car-lib/src/android/car/cluster/IInstrumentClusterManagerCallback.aidl
index 91a497d..d2f099e 100644
--- a/car-lib/src/android/car/cluster/IInstrumentClusterManagerCallback.aidl
+++ b/car-lib/src/android/car/cluster/IInstrumentClusterManagerCallback.aidl
@@ -19,6 +19,8 @@
 
 /**
  * Interface from Car Service to {@link android.car.cluster.CarInstrumentClusterManager}
+ *
+ * @deprecated CarInstrumentClusterManager is deprecated
  * @hide
  */
 interface IInstrumentClusterManagerCallback {
@@ -29,7 +31,6 @@
      *        see {@link android.car.cluster.CarInstrumentClusterManager} for details.
      * @param clusterActivityState is a {@link Bundle} object,
      *        see {@link android.car.cluster.ClusterActivityState} for how to construct the bundle.
-     * @hide
      */
     oneway void setClusterActivityState(String category, in Bundle clusterActivityState);
 }
diff --git a/car-lib/src/android/car/cluster/IInstrumentClusterManagerService.aidl b/car-lib/src/android/car/cluster/IInstrumentClusterManagerService.aidl
index aaaeaee..1f4988d 100644
--- a/car-lib/src/android/car/cluster/IInstrumentClusterManagerService.aidl
+++ b/car-lib/src/android/car/cluster/IInstrumentClusterManagerService.aidl
@@ -22,6 +22,7 @@
 /**
  * API to communicate between {@link CarInstrumentClusterManager} and Car Service.
  *
+ * @deprecated CarInstrumentClusterManager is deprecated
  * @hide
  */
 interface IInstrumentClusterManagerService {
diff --git a/car-lib/src/android/car/cluster/renderer/IInstrumentCluster.aidl b/car-lib/src/android/car/cluster/renderer/IInstrumentCluster.aidl
index 3458975..7deecc7 100644
--- a/car-lib/src/android/car/cluster/renderer/IInstrumentCluster.aidl
+++ b/car-lib/src/android/car/cluster/renderer/IInstrumentCluster.aidl
@@ -15,22 +15,29 @@
  */
 package android.car.cluster.renderer;
 
-import android.car.cluster.renderer.IInstrumentClusterCallback;
 import android.car.cluster.renderer.IInstrumentClusterNavigation;
 import android.view.KeyEvent;
 
 /**
- * Binder API for Instrument Cluster.
+ * Binder API for Instrument Cluster. It defines a communication channel from Car Service to the
+ * cluster vendor implementation.
  *
  * @hide
  */
 interface IInstrumentCluster {
-    /** Returns {@link IInstrumentClusterNavigation} that will be passed to the Nav app */
+    /**
+     * Returns {@link IInstrumentClusterNavigation} that will be passed to the navigation
+     * application.
+     */
     IInstrumentClusterNavigation getNavigationService();
 
-    /** Supplies Instrument Cluster Renderer with current owner of Navigation app context */
+    /**
+     * Supplies Instrument Cluster Renderer with current owner of Navigation app context
+     */
     oneway void setNavigationContextOwner(int uid, int pid);
 
-    /** Called when key event that was addressed to instrument cluster display has been received. */
+    /**
+     * Called when key event that was addressed to instrument cluster display has been received.
+     */
     oneway void onKeyEvent(in KeyEvent keyEvent);
 }
diff --git a/car-lib/src/android/car/cluster/renderer/IInstrumentClusterCallback.aidl b/car-lib/src/android/car/cluster/renderer/IInstrumentClusterCallback.aidl
deleted file mode 100644
index 996dc9e..0000000
--- a/car-lib/src/android/car/cluster/renderer/IInstrumentClusterCallback.aidl
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (C) 2017 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 android.car.cluster.renderer;
-
-import android.graphics.Rect;
-import android.os.Bundle;
-
-/**
- * This interface defines the communication channel between the cluster vendor implementation and
- * Car Service.
- *
- * @hide
- */
-interface IInstrumentClusterCallback {
-    /**
-     * Notify Car Service how to launch an activity for particular category.
-     *
-     * @param category cluster activity category,
-     *        see {@link android.car.cluster.CarInstrumentClusterManager} for details.
-     * @param activityOptions this bundle will be converted to {@link android.app.ActivityOptions}
-     *        and used when starting an activity. It may contain information such as virtual display
-     *        id or activity stack id where to start cluster activity.
-     *
-     * @hide
-     */
-    void setClusterActivityLaunchOptions(String category, in Bundle activityOptions);
-
-    /**
-     * Activities launched on virtual display will be in onPause state most of the time, so they
-     * can't really know whether they visible on the screen or not. We need to propagate this
-     * information along with unobscured bounds (and possible other info) from instrument cluster
-     * vendor implementation to activity.
-     *
-     * @param category cluster activity category to which this state applies,
-     *        see {@link android.car.cluster.CarInstrumentClusterManager} for details.
-     * @param clusterActivityState is a {@link Bundle} object,
-     *        see {@link android.car.cluster.ClusterActivityState} for how to construct the bundle.
-     * @hide
-     */
-    void setClusterActivityState(String category, in Bundle clusterActivityState);
-}
diff --git a/car-lib/src/android/car/cluster/renderer/IInstrumentClusterNavigation.aidl b/car-lib/src/android/car/cluster/renderer/IInstrumentClusterNavigation.aidl
index 6f33a9d..c4e9d72 100644
--- a/car-lib/src/android/car/cluster/renderer/IInstrumentClusterNavigation.aidl
+++ b/car-lib/src/android/car/cluster/renderer/IInstrumentClusterNavigation.aidl
@@ -16,15 +16,29 @@
 package android.car.cluster.renderer;
 
 import android.car.navigation.CarNavigationInstrumentCluster;
+import android.content.Intent;
 import android.graphics.Bitmap;
 import android.os.Bundle;
 
 /**
- * Binder API for Instrument Cluster Navigation.
+ * Binder API for Instrument Cluster Navigation. This represents a direct communication channel
+ * from navigation applications to the cluster vendor implementation.
  *
  * @hide
  */
 interface IInstrumentClusterNavigation {
+    /**
+     * Called when an event is fired to change the navigation state. Content of this events can be
+     * interpreted using androidx.car.car-cluster API.
+     *
+     * @param eventType type of navigation state change
+     * @param bundle {@link android.os.Bundle} containing the description of the navigation state
+     *               change.
+     */
     void onEvent(int eventType, in Bundle bundle);
+
+    /**
+     * Returns attributes of instrument cluster for navigation.
+     */
     CarNavigationInstrumentCluster getInstrumentClusterInfo();
 }
diff --git a/car-lib/src/android/car/cluster/renderer/InstrumentClusterRenderer.java b/car-lib/src/android/car/cluster/renderer/InstrumentClusterRenderer.java
index 5086186..be4cfd4 100644
--- a/car-lib/src/android/car/cluster/renderer/InstrumentClusterRenderer.java
+++ b/car-lib/src/android/car/cluster/renderer/InstrumentClusterRenderer.java
@@ -18,16 +18,15 @@
 import android.annotation.Nullable;
 import android.annotation.SystemApi;
 import android.annotation.UiThread;
-import android.car.navigation.CarNavigationInstrumentCluster;
 import android.content.Context;
 
 /**
- * Interface for instrument cluster rendering.
- *
- * TODO: implement instrument cluster feature list and extend API. bug: 32060603
+ * @deprecated This class is unused. Refer to {@link InstrumentClusterRenderingService} for
+ * documentation on how to build a instrument cluster renderer.
  *
  * @hide
  */
+@Deprecated
 @SystemApi
 public abstract class InstrumentClusterRenderer {
 
diff --git a/car-lib/src/android/car/cluster/renderer/InstrumentClusterRenderingService.java b/car-lib/src/android/car/cluster/renderer/InstrumentClusterRenderingService.java
index d572d9a..4a9e5f5 100644
--- a/car-lib/src/android/car/cluster/renderer/InstrumentClusterRenderingService.java
+++ b/car-lib/src/android/car/cluster/renderer/InstrumentClusterRenderingService.java
@@ -15,30 +15,43 @@
  */
 package android.car.cluster.renderer;
 
+import static android.content.PermissionChecker.PERMISSION_GRANTED;
+
 import android.annotation.CallSuper;
 import android.annotation.MainThread;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
 import android.annotation.SystemApi;
 import android.app.ActivityOptions;
 import android.app.Service;
+import android.car.Car;
 import android.car.CarLibLog;
-import android.car.CarNotConnectedException;
+import android.car.cluster.ClusterActivityState;
 import android.car.navigation.CarNavigationInstrumentCluster;
+import android.content.ActivityNotFoundException;
+import android.content.ComponentName;
 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.IBinder;
 import android.os.Looper;
-import android.os.Message;
 import android.os.RemoteException;
+import android.os.UserHandle;
 import android.util.Log;
-import android.util.Pair;
 import android.view.KeyEvent;
 
 import com.android.internal.annotations.GuardedBy;
 
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
-import java.lang.ref.WeakReference;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Objects;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.atomic.AtomicReference;
+import java.util.function.Supplier;
 
 /**
  * A service that used for interaction between Car Service and Instrument Cluster. Car Service may
@@ -58,18 +71,31 @@
  */
 @SystemApi
 public abstract class InstrumentClusterRenderingService extends Service {
-
     private static final String TAG = CarLibLog.TAG_CLUSTER;
 
-    private RendererBinder mRendererBinder;
-
-    /** @hide */
-    public static final String EXTRA_KEY_CALLBACK_SERVICE =
-            "android.car.cluster.IInstrumentClusterCallback";
-
     private final Object mLock = new Object();
+    private RendererBinder mRendererBinder;
+    private Handler mUiHandler = new Handler(Looper.getMainLooper());
+    private ActivityOptions mActivityOptions;
+    private ClusterActivityState mActivityState;
+    private ComponentName mNavigationComponent;
     @GuardedBy("mLock")
-    private IInstrumentClusterCallback mCallback;
+    private ContextOwner mNavContextOwner;
+
+    private static class ContextOwner {
+        final int mUid;
+        final int mPid;
+
+        ContextOwner(int uid, int pid) {
+            mUid = uid;
+            mPid = pid;
+        }
+
+        @Override
+        public String toString() {
+            return "{uid: " + mUid + ", pid: " + mPid + "}";
+        }
+    }
 
     @Override
     @CallSuper
@@ -78,15 +104,6 @@
             Log.d(TAG, "onBind, intent: " + intent);
         }
 
-        if (intent.getExtras().containsKey(EXTRA_KEY_CALLBACK_SERVICE)) {
-            IBinder callbackBinder = intent.getExtras().getBinder(EXTRA_KEY_CALLBACK_SERVICE);
-            synchronized (mLock) {
-                mCallback = IInstrumentClusterCallback.Stub.asInterface(callbackBinder);
-            }
-        } else {
-            Log.w(TAG, "onBind, no callback in extra!");
-        }
-
         if (mRendererBinder == null) {
             mRendererBinder = new RendererBinder(getNavigationRenderer());
         }
@@ -94,196 +111,312 @@
         return mRendererBinder;
     }
 
-    /** Returns {@link NavigationRenderer} or null if it's not supported. */
+    /**
+     * Returns {@link NavigationRenderer} or null if it's not supported. This renderer will be
+     * shared with the navigation context owner (application holding navigation focus).
+     */
     @MainThread
-    protected abstract NavigationRenderer getNavigationRenderer();
+    @Nullable
+    public abstract NavigationRenderer getNavigationRenderer();
 
-    /** Called when key event that was addressed to instrument cluster display has been received. */
+    /**
+     * Called when key event that was addressed to instrument cluster display has been received.
+     */
     @MainThread
-    protected void onKeyEvent(KeyEvent keyEvent) {
+    public void onKeyEvent(@NonNull KeyEvent keyEvent) {
     }
 
     /**
+     * Called when a navigation application becomes a context owner (receives navigation focus) and
+     * its {@link Car#CATEGORY_NAVIGATION} activity is launched.
+     */
+    @MainThread
+    public void onNavigationComponentLaunched() {
+    }
+
+    /**
+     * Called when the current context owner (application holding navigation focus) releases the
+     * focus and its {@link Car#CAR_CATEGORY_NAVIGATION} activity is ready to be replaced by a
+     * system default.
+     */
+    @MainThread
+    public void onNavigationComponentReleased() {
+    }
+
+    /**
+     * Updates the cluster navigation activity by checking which activity to show (an activity of
+     * the {@link #mNavContextOwner}). If not yet launched, it will do so.
+     */
+    private void updateNavigationActivity() {
+        ContextOwner contextOwner = getNavigationContextOwner();
+
+        if (Log.isLoggable(TAG, Log.DEBUG)) {
+            Log.d(TAG, String.format("updateNavigationActivity (mActivityOptions: %s, "
+                    + "mActivityState: %s, mNavContextOwnerUid: %s)", mActivityOptions,
+                    mActivityState, contextOwner));
+        }
+
+        if (contextOwner == null || contextOwner.mUid == 0 || mActivityOptions == null
+                || mActivityState == null || !mActivityState.isVisible()) {
+            // We are not yet ready to display an activity on the cluster
+            if (mNavigationComponent != null) {
+                mNavigationComponent = null;
+                onNavigationComponentReleased();
+            }
+            return;
+        }
+
+        ComponentName component = getNavigationComponentByOwner(contextOwner);
+        if (Objects.equals(mNavigationComponent, component)) {
+            // We have already launched this component.
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "Already launched component: " + component);
+            }
+            return;
+        }
+
+        if (component == null) {
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "No component found for owner: " + contextOwner);
+            }
+            return;
+        }
+
+        if (!startNavigationActivity(component)) {
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "Unable to launch component: " + component);
+            }
+            return;
+        }
+
+        mNavigationComponent = component;
+        onNavigationComponentLaunched();
+    }
+
+    /**
+     * Returns a component with category {@link Car#CAR_CATEGORY_NAVIGATION} from the same package
+     * as the given navigation context owner.
+     */
+    @Nullable
+    private ComponentName getNavigationComponentByOwner(ContextOwner contextOwner) {
+        for (String packageName : getPackageNamesForUid(contextOwner)) {
+            ComponentName component = getComponentFromPackage(packageName);
+            if (component != null) {
+                if (Log.isLoggable(TAG, Log.DEBUG)) {
+                    Log.d(TAG, "Found component: " + component);
+                }
+                return component;
+            }
+        }
+        return null;
+    }
+
+    private String[] getPackageNamesForUid(ContextOwner contextOwner) {
+        if (contextOwner == null || contextOwner.mUid == 0 || contextOwner.mPid == 0) {
+            return new String[0];
+        }
+        String[] packageNames  = getPackageManager().getPackagesForUid(contextOwner.mUid);
+        return packageNames != null ? packageNames : new String[0];
+    }
+
+    private ContextOwner getNavigationContextOwner() {
+        synchronized (mLock) {
+            return mNavContextOwner;
+        }
+    }
+
+    @Nullable
+    private ComponentName getComponentFromPackage(@NonNull String packageName) {
+        PackageManager packageManager = getPackageManager();
+
+        // Check package permission.
+        if (packageManager.checkPermission(Car.PERMISSION_CAR_DISPLAY_IN_CLUSTER, packageName)
+                != PERMISSION_GRANTED) {
+            Log.i(TAG, String.format("Package '%s' doesn't have permission %s", packageName,
+                    Car.PERMISSION_CAR_DISPLAY_IN_CLUSTER));
+            return null;
+        }
+
+        Intent intent = new Intent(Intent.ACTION_MAIN)
+                .addCategory(Car.CAR_CATEGORY_NAVIGATION)
+                .setPackage(packageName);
+        List<ResolveInfo> resolveList = packageManager.queryIntentActivities(intent,
+                PackageManager.GET_RESOLVED_FILTER);
+        if (resolveList == null || resolveList.isEmpty()
+                || resolveList.get(0).getComponentInfo() == null) {
+            Log.i(TAG, "Failed to resolve an intent: " + intent);
+            return null;
+        }
+
+        // In case of multiple matching activities in the same package, we pick the first one.
+        return resolveList.get(0).getComponentInfo().getComponentName();
+    }
+
+    /**
+     * Starts an activity on the cluster using the given component.
      *
+     * @return false if the activity couldn't be started.
+     */
+    protected boolean startNavigationActivity(@NonNull ComponentName component) {
+        // Create an explicit intent.
+        Intent intent = new Intent();
+        intent.setComponent(component);
+        intent.putExtra(Car.CAR_EXTRA_CLUSTER_ACTIVITY_STATE, mActivityState.toBundle());
+        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+        try {
+            startActivityAsUser(intent, mActivityOptions.toBundle(), UserHandle.CURRENT);
+            Log.i(TAG, String.format("Activity launched: %s (options: %s, displayId: %d)",
+                    mActivityOptions, intent, mActivityOptions.getLaunchDisplayId()));
+        } catch (ActivityNotFoundException ex) {
+            Log.w(TAG, "Unable to find activity for intent: " + intent);
+            return false;
+        } catch (Exception ex) {
+            // Catch all other possible exception to prevent service disruption by misbehaving
+            // applications.
+            Log.e(TAG, "Error trying to launch intent: " + intent + ". Ignored", ex);
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * @deprecated Use {@link #setClusterActivityLaunchOptions(ActivityOptions)} instead.
+     *
+     * @hide
+     */
+    @Deprecated
+    public void setClusterActivityLaunchOptions(String category, ActivityOptions activityOptions) {
+        setClusterActivityLaunchOptions(activityOptions);
+    }
+
+    /**
      * Sets configuration for activities that should be launched directly in the instrument
      * cluster.
      *
-     * @param category category of cluster activity
      * @param activityOptions contains information of how to start cluster activity (on what display
-     *                        or activity stack.
+     *                        or activity stack).
      *
      * @hide
      */
-    public void setClusterActivityLaunchOptions(String category,
-            ActivityOptions activityOptions) throws CarNotConnectedException {
-        IInstrumentClusterCallback cb;
-        synchronized (mLock) {
-            cb = mCallback;
-        }
-        if (cb == null) throw new CarNotConnectedException();
-        try {
-            cb.setClusterActivityLaunchOptions(category, activityOptions.toBundle());
-        } catch (RemoteException e) {
-            throw new CarNotConnectedException(e);
-        }
+    public void setClusterActivityLaunchOptions(ActivityOptions activityOptions) {
+        mActivityOptions = activityOptions;
+        updateNavigationActivity();
     }
 
     /**
-     *
-     * @param category cluster activity category,
-     *        see {@link android.car.cluster.CarInstrumentClusterManager}
-     * @param state pass information about activity state,
-     *        see {@link android.car.cluster.ClusterActivityState}
-     * @return true if information was sent to Car Service
-     * @throws CarNotConnectedException
+     * @deprecated Use {@link #setClusterActivityState(ClusterActivityState)} instead.
      *
      * @hide
      */
-    public void setClusterActivityState(String category, Bundle state)
-            throws CarNotConnectedException {
-        IInstrumentClusterCallback cb;
-        synchronized (mLock) {
-            cb = mCallback;
-        }
-        if (cb == null) throw new CarNotConnectedException();
-        try {
-            cb.setClusterActivityState(category, state);
-        } catch (RemoteException e) {
-            throw new CarNotConnectedException(e);
-        }
+    @Deprecated
+    public void setClusterActivityState(String category, Bundle state) {
+        setClusterActivityState(ClusterActivityState.fromBundle(state));
     }
 
+    /**
+     * Set activity state (such as unobscured bounds).
+     *
+     * @param state pass information about activity state, see
+     *              {@link android.car.cluster.ClusterActivityState}
+     *
+     * @hide
+     */
+    public void setClusterActivityState(ClusterActivityState state) {
+        mActivityState = state;
+        updateNavigationActivity();
+    }
 
+    @CallSuper
     @Override
     protected void dump(FileDescriptor fd, PrintWriter writer, String[] args) {
         writer.println("**" + getClass().getSimpleName() + "**");
         writer.println("renderer binder: " + mRendererBinder);
         if (mRendererBinder != null) {
             writer.println("navigation renderer: " + mRendererBinder.mNavigationRenderer);
-            String owner = "none";
-            synchronized (mLock) {
-                if (mRendererBinder.mNavContextOwner != null) {
-                    owner = "[uid: " + mRendererBinder.mNavContextOwner.first
-                            + ", pid: " + mRendererBinder.mNavContextOwner.second + "]";
-                }
-            }
-            writer.println("navigation focus owner: " + owner);
         }
-        IInstrumentClusterCallback cb;
-        synchronized (mLock) {
-            cb = mCallback;
-        }
-        writer.println("callback: " + cb);
+        writer.println("navigation focus owner: " + getNavigationContextOwner());
+        writer.println("activity options: " + mActivityOptions);
+        writer.println("activity state: " + mActivityState);
+        writer.println("current nav component: " + mNavigationComponent);
+        writer.println("current nav packages: " + Arrays.toString(getPackageNamesForUid(
+                getNavigationContextOwner())));
     }
 
     private class RendererBinder extends IInstrumentCluster.Stub {
-
         private final NavigationRenderer mNavigationRenderer;
-        private final UiHandler mUiHandler;
-
-        @GuardedBy("mLock")
-        private NavigationBinder mNavigationBinder;
-        @GuardedBy("mLock")
-        private Pair<Integer, Integer> mNavContextOwner;
 
         RendererBinder(NavigationRenderer navigationRenderer) {
             mNavigationRenderer = navigationRenderer;
-            mUiHandler = new UiHandler(InstrumentClusterRenderingService.this);
         }
 
         @Override
         public IInstrumentClusterNavigation getNavigationService() throws RemoteException {
-            synchronized (mLock) {
-                if (mNavigationBinder == null) {
-                    mNavigationBinder = new NavigationBinder(mNavigationRenderer);
-                    if (mNavContextOwner != null) {
-                        mNavigationBinder.setNavigationContextOwner(
-                                mNavContextOwner.first, mNavContextOwner.second);
-                    }
-                }
-                return mNavigationBinder;
-            }
+            return new NavigationBinder(mNavigationRenderer);
         }
 
         @Override
         public void setNavigationContextOwner(int uid, int pid) throws RemoteException {
             synchronized (mLock) {
-                mNavContextOwner = new Pair<>(uid, pid);
-                if (mNavigationBinder != null) {
-                    mNavigationBinder.setNavigationContextOwner(uid, pid);
-                }
+                mNavContextOwner = new ContextOwner(uid, pid);
             }
+            mUiHandler.post(InstrumentClusterRenderingService.this::updateNavigationActivity);
         }
 
         @Override
         public void onKeyEvent(KeyEvent keyEvent) throws RemoteException {
-            mUiHandler.doKeyEvent(keyEvent);
+            mUiHandler.post(() -> InstrumentClusterRenderingService.this.onKeyEvent(keyEvent));
         }
     }
 
     private class NavigationBinder extends IInstrumentClusterNavigation.Stub {
-
-        private final NavigationRenderer mNavigationRenderer;  // Thread-safe navigation renderer.
-
-        private volatile Pair<Integer, Integer> mNavContextOwner;
+        private final NavigationRenderer mNavigationRenderer;
 
         NavigationBinder(NavigationRenderer navigationRenderer) {
-            mNavigationRenderer = ThreadSafeNavigationRenderer.createFor(
-                    Looper.getMainLooper(),
-                    navigationRenderer);
-        }
-
-        void setNavigationContextOwner(int uid, int pid) {
-            mNavContextOwner = new Pair<>(uid, pid);
+            mNavigationRenderer = navigationRenderer;
         }
 
         @Override
         public void onEvent(int eventType, Bundle bundle) throws RemoteException {
             assertContextOwnership();
-            mNavigationRenderer.onEvent(eventType, bundle);
+            mUiHandler.post(() -> {
+                if (mNavigationRenderer != null) {
+                    mNavigationRenderer.onEvent(eventType, bundle);
+                }
+            });
         }
 
         @Override
         public CarNavigationInstrumentCluster getInstrumentClusterInfo() throws RemoteException {
-            return mNavigationRenderer.getNavigationProperties();
+            return runAndWaitResult(() -> mNavigationRenderer.getNavigationProperties());
         }
 
         private void assertContextOwnership() {
             int uid = getCallingUid();
             int pid = getCallingPid();
 
-            Pair<Integer, Integer> owner = mNavContextOwner;
-            if (owner == null || owner.first != uid || owner.second != pid) {
-                throw new IllegalStateException("Client (uid:" + uid + ", pid: " + pid + ") is"
-                        + " not an owner of APP_FOCUS_TYPE_NAVIGATION");
+            synchronized (mLock) {
+                if (mNavContextOwner.mUid != uid || mNavContextOwner.mPid != pid) {
+                    throw new IllegalStateException("Client {uid:" + uid + ", pid: " + pid + "} is"
+                            + " not an owner of APP_FOCUS_TYPE_NAVIGATION " + mNavContextOwner);
+                }
             }
         }
     }
 
-    private static class UiHandler extends Handler {
-        private static int KEY_EVENT = 0;
-        private final WeakReference<InstrumentClusterRenderingService> mRefService;
+    private <E> E runAndWaitResult(final Supplier<E> supplier) {
+        final CountDownLatch latch = new CountDownLatch(1);
+        final AtomicReference<E> result = new AtomicReference<>();
 
-        UiHandler(InstrumentClusterRenderingService service) {
-            mRefService = new WeakReference<>(service);
+        mUiHandler.post(() -> {
+            result.set(supplier.get());
+            latch.countDown();
+        });
+
+        try {
+            latch.await();
+        } catch (InterruptedException e) {
+            throw new RuntimeException(e);
         }
-
-        @Override
-        public void handleMessage(Message msg) {
-            InstrumentClusterRenderingService service = mRefService.get();
-            if (service == null) {
-                return;
-            }
-
-            if (msg.what == KEY_EVENT) {
-                service.onKeyEvent((KeyEvent) msg.obj);
-            } else {
-                throw new IllegalArgumentException("Unexpected message: " + msg);
-            }
-        }
-
-        void doKeyEvent(KeyEvent event) {
-            sendMessage(obtainMessage(KEY_EVENT, event));
-        }
+        return result.get();
     }
 }
diff --git a/car-lib/src/android/car/cluster/renderer/ThreadSafeNavigationRenderer.java b/car-lib/src/android/car/cluster/renderer/ThreadSafeNavigationRenderer.java
deleted file mode 100644
index 251b670..0000000
--- a/car-lib/src/android/car/cluster/renderer/ThreadSafeNavigationRenderer.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * Copyright (C) 2016 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 android.car.cluster.renderer;
-
-import android.annotation.Nullable;
-import android.car.navigation.CarNavigationInstrumentCluster;
-import android.graphics.Bitmap;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.Looper;
-import android.os.Message;
-
-import java.lang.ref.WeakReference;
-import java.util.concurrent.CountDownLatch;
-
-/**
- * A wrapper over {@link NavigationRenderer} that runs all its methods in the context of provided
- * looper. It is guaranteed that all calls will be invoked in order they were called.
- */
-// TODO(deanh): Does this class even need to exist?
-/* package */ class ThreadSafeNavigationRenderer extends NavigationRenderer {
-
-    private final Handler mHandler;
-    private final NavigationRenderer mRenderer;
-
-    private final static int MSG_EVENT = 1;
-
-    /** Creates thread-safe {@link NavigationRenderer}. Returns null if renderer == null */
-    @Nullable
-    static NavigationRenderer createFor(Looper looper, NavigationRenderer renderer) {
-        return renderer == null ? null : new ThreadSafeNavigationRenderer(looper, renderer);
-    }
-
-    private ThreadSafeNavigationRenderer(Looper looper, NavigationRenderer renderer) {
-        mRenderer = renderer;
-        mHandler = new NavigationRendererHandler(looper, renderer);
-    }
-
-    @Override
-    public CarNavigationInstrumentCluster getNavigationProperties() {
-        if (mHandler.getLooper() == Looper.myLooper()) {
-            return mRenderer.getNavigationProperties();
-        } else {
-            return runAndWaitResult(mHandler,
-                    new RunnableWithResult<CarNavigationInstrumentCluster>() {
-                        @Override
-                        protected CarNavigationInstrumentCluster createResult() {
-                            return mRenderer.getNavigationProperties();
-                        }
-                    });
-        }
-    }
-
-    @Override
-    public void onEvent(int eventType, Bundle bundle) {
-        mHandler.sendMessage(mHandler.obtainMessage(MSG_EVENT, eventType, 0, bundle));
-    }
-
-    private static class NavigationRendererHandler extends RendererHandler<NavigationRenderer> {
-
-        NavigationRendererHandler(Looper looper, NavigationRenderer renderer) {
-            super(looper, renderer);
-        }
-
-        @Override
-        public void handleMessage(Message msg, NavigationRenderer renderer) {
-            switch (msg.what) {
-                case MSG_EVENT:
-                    Bundle bundle = (Bundle) msg.obj;
-                    renderer.onEvent(msg.arg1, bundle);
-                    break;
-                default:
-                    throw new IllegalArgumentException("Msg: " + msg.what);
-            }
-        }
-    }
-
-    private static <E> E runAndWaitResult(Handler handler, final RunnableWithResult<E> runnable) {
-        final CountDownLatch latch = new CountDownLatch(1);
-
-        Runnable wrappedRunnable = new Runnable() {
-            @Override
-            public void run() {
-                runnable.run();
-                latch.countDown();
-            }
-        };
-
-        handler.post(wrappedRunnable);
-
-        try {
-            latch.await();
-        } catch (InterruptedException e) {
-            throw new RuntimeException(e);
-        }
-        return runnable.getResult();
-    }
-
-    private static abstract class RunnableWithResult<T> implements Runnable {
-        private volatile T result;
-
-        protected abstract T createResult();
-
-        @Override
-        public void run() {
-            result = createResult();
-        }
-
-        public T getResult() {
-            return result;
-        }
-    }
-
-    private static abstract class RendererHandler<T> extends Handler {
-
-        private final WeakReference<T> mRendererRef;
-
-        RendererHandler(Looper looper, T renderer) {
-            super(looper);
-            mRendererRef = new WeakReference<>(renderer);
-        }
-
-        @Override
-        public void handleMessage(Message msg) {
-            T renderer = mRendererRef.get();
-            if (renderer != null) {
-                handleMessage(msg, renderer);
-            }
-        }
-
-        public abstract void handleMessage(Message msg, T renderer);
-    }
-}
diff --git a/car-lib/src/android/car/content/pm/CarAppBlockingPolicyService.java b/car-lib/src/android/car/content/pm/CarAppBlockingPolicyService.java
index a8671bb..5b0a6bd 100644
--- a/car-lib/src/android/car/content/pm/CarAppBlockingPolicyService.java
+++ b/car-lib/src/android/car/content/pm/CarAppBlockingPolicyService.java
@@ -20,7 +20,6 @@
 import android.content.Intent;
 import android.os.Handler;
 import android.os.IBinder;
-import android.os.Looper;
 import android.os.RemoteException;
 import android.util.Log;
 
@@ -40,7 +39,7 @@
     public static final String SERVICE_INTERFACE =
             "android.car.content.pm.CarAppBlockingPolicyService";
 
-    private final ICarAppBlockingPoicyImpl mBinder = new ICarAppBlockingPoicyImpl();
+    private final ICarAppBlockingPolicyImpl mBinder = new ICarAppBlockingPolicyImpl();
     private Handler mHandler;
 
     /**
@@ -68,7 +67,7 @@
     }
 
 
-    private class ICarAppBlockingPoicyImpl extends ICarAppBlockingPolicy.Stub {
+    private class ICarAppBlockingPolicyImpl extends ICarAppBlockingPolicy.Stub {
 
         @Override
         public void setAppBlockingPolicySetter(ICarAppBlockingPolicySetter setter) {
@@ -77,7 +76,7 @@
             try {
                 setter.setAppBlockingPolicy(policy);
             } catch (RemoteException e) {
-                // if car service crashed, it will retry later.
+                throw e.rethrowFromSystemServer();
             }
         }
     }
diff --git a/car-lib/src/android/car/content/pm/CarPackageManager.java b/car-lib/src/android/car/content/pm/CarPackageManager.java
index b1828db..d23633d 100644
--- a/car-lib/src/android/car/content/pm/CarPackageManager.java
+++ b/car-lib/src/android/car/content/pm/CarPackageManager.java
@@ -19,15 +19,12 @@
 import android.annotation.IntDef;
 import android.annotation.SystemApi;
 import android.annotation.TestApi;
-import android.car.CarApiUtil;
 import android.car.CarManagerBase;
-import android.car.CarNotConnectedException;
 import android.content.ComponentName;
 import android.content.Context;
 import android.os.IBinder;
 import android.os.Looper;
 import android.os.RemoteException;
-import android.util.Log;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -108,9 +105,8 @@
      * @hide
      */
     @SystemApi
-    public void setAppBlockingPolicy(String packageName, CarAppBlockingPolicy policy,
-            @SetPolicyFlags int flags) throws CarNotConnectedException, SecurityException,
-            IllegalArgumentException {
+    public void setAppBlockingPolicy(
+            String packageName, CarAppBlockingPolicy policy, @SetPolicyFlags int flags) {
         if ((flags & FLAG_SET_POLICY_WAIT_FOR_CHANGE) != 0 &&
                 Looper.getMainLooper().isCurrentThread()) {
             throw new IllegalStateException(
@@ -118,10 +114,8 @@
         }
         try {
             mService.setAppBlockingPolicy(packageName, policy, flags);
-        } catch (IllegalStateException e) {
-            CarApiUtil.checkCarNotConnectedExceptionFromCarService(e);
         } catch (RemoteException e) {
-            // Ignore as CarApi will handle disconnection anyway.
+            throw e.rethrowFromSystemServer();
         }
     }
 
@@ -134,8 +128,7 @@
         try {
             mService.restartTask(taskId);
         } catch (RemoteException e) {
-            // Ignore as CarApi will handle disconnection anyway.
-            Log.e(TAG, "Could not restart task " + taskId, e);
+            throw e.rethrowFromSystemServer();
         }
     }
 
@@ -154,16 +147,12 @@
      * @hide
      */
     @SystemApi
-    public boolean isActivityBackedBySafeActivity(ComponentName activityName)
-            throws CarNotConnectedException {
+    public boolean isActivityBackedBySafeActivity(ComponentName activityName) {
         try {
             return mService.isActivityBackedBySafeActivity(activityName);
-        } catch (IllegalStateException e) {
-            CarApiUtil.checkCarNotConnectedExceptionFromCarService(e);
         } catch (RemoteException e) {
-            //ignore as CarApi will handle disconnection anyway.
+            throw e.rethrowFromSystemServer();
         }
-        return true;
     }
 
     /**
@@ -176,7 +165,7 @@
         try {
             mService.setEnableActivityBlocking(enable);
         } catch (RemoteException e) {
-            //ignore as CarApi will handle disconnection anyway.
+            throw e.rethrowFromSystemServer();
         }
     }
 
@@ -188,16 +177,12 @@
      * @param className
      * @return
      */
-    public boolean isActivityDistractionOptimized(String packageName, String className)
-            throws CarNotConnectedException {
+    public boolean isActivityDistractionOptimized(String packageName, String className) {
         try {
             return mService.isActivityDistractionOptimized(packageName, className);
-        } catch (IllegalStateException e) {
-            CarApiUtil.checkCarNotConnectedExceptionFromCarService(e);
         } catch (RemoteException e) {
-            //ignore as CarApi will handle disconnection anyway.
+            throw e.rethrowFromSystemServer();
         }
-        return false;
     }
 
     /**
@@ -208,15 +193,11 @@
      * @param className
      * @return
      */
-    public boolean isServiceDistractionOptimized(String packageName, String className)
-            throws CarNotConnectedException {
+    public boolean isServiceDistractionOptimized(String packageName, String className) {
         try {
             return mService.isServiceDistractionOptimized(packageName, className);
-        } catch (IllegalStateException e) {
-            CarApiUtil.checkCarNotConnectedExceptionFromCarService(e);
         } catch (RemoteException e) {
-            //ignore as CarApi will handle disconnection anyway.
+            throw e.rethrowFromSystemServer();
         }
-        return false;
     }
 }
diff --git a/car-lib/src/android/car/diagnostic/CarDiagnosticManager.java b/car-lib/src/android/car/diagnostic/CarDiagnosticManager.java
index 88980bf..1559dd4 100644
--- a/car-lib/src/android/car/diagnostic/CarDiagnosticManager.java
+++ b/car-lib/src/android/car/diagnostic/CarDiagnosticManager.java
@@ -20,10 +20,8 @@
 import android.annotation.Nullable;
 import android.annotation.SystemApi;
 import android.car.Car;
-import android.car.CarApiUtil;
 import android.car.CarLibLog;
 import android.car.CarManagerBase;
-import android.car.CarNotConnectedException;
 import android.car.diagnostic.ICarDiagnosticEventListener.Stub;
 import android.content.Context;
 import android.os.Handler;
@@ -133,13 +131,10 @@
      * @param frameType
      * @param rate
      * @return true if the registration was successful; false otherwise
-     * @throws CarNotConnectedException
      * @throws IllegalArgumentException
      */
-    public boolean registerListener(OnDiagnosticEventListener listener,
-            @FrameType int frameType,
-            int rate)
-                throws CarNotConnectedException, IllegalArgumentException {
+    public boolean registerListener(
+            OnDiagnosticEventListener listener, @FrameType int frameType, int rate) {
         assertFrameType(frameType);
         synchronized(mActiveListeners) {
             if (null == mListenerToService) {
@@ -189,29 +184,21 @@
                     mService.unregisterDiagnosticListener(frameType,
                         mListenerToService);
                 } catch (RemoteException e) {
-                    //ignore
+                    throw e.rethrowFromSystemServer();
                 }
                 mActiveListeners.remove(frameType);
             } else if (needsServerUpdate) {
-                try {
-                    registerOrUpdateDiagnosticListener(frameType, listeners.getRate());
-                } catch (CarNotConnectedException e) {
-                    // ignore
-                }
+                registerOrUpdateDiagnosticListener(frameType, listeners.getRate());
             }
         }
     }
 
-    private boolean registerOrUpdateDiagnosticListener(@FrameType int frameType, int rate)
-        throws CarNotConnectedException {
+    private boolean registerOrUpdateDiagnosticListener(@FrameType int frameType, int rate) {
         try {
             return mService.registerOrUpdateDiagnosticListener(frameType, rate, mListenerToService);
-        } catch (IllegalStateException e) {
-            CarApiUtil.checkCarNotConnectedExceptionFromCarService(e);
         } catch (RemoteException e) {
-            throw new CarNotConnectedException();
+            throw e.rethrowFromSystemServer();
         }
-        return false;
     }
 
     // ICarDiagnostic forwards
@@ -220,18 +207,13 @@
      * Retrieve the most-recently acquired live frame data from the car.
      * @return A CarDiagnostic event for the most recently known live frame if one is present.
      *         null if no live frame has been recorded by the vehicle.
-     * @throws CarNotConnectedException
      */
-    public @Nullable
-    CarDiagnosticEvent getLatestLiveFrame() throws CarNotConnectedException {
+    public @Nullable CarDiagnosticEvent getLatestLiveFrame() {
         try {
             return mService.getLatestLiveFrame();
-        } catch (IllegalStateException e) {
-            CarApiUtil.checkCarNotConnectedExceptionFromCarService(e);
         } catch (RemoteException e) {
-            throw new CarNotConnectedException();
+            throw e.rethrowFromSystemServer();
         }
-        return null;
     }
 
     /**
@@ -242,17 +224,13 @@
      * Because vehicles might have a limited amount of storage for frames, clients cannot
      * assume that a timestamp obtained via this call will be indefinitely valid for retrieval
      * of the actual diagnostic data, and must be prepared to handle a missing frame.
-     * @throws CarNotConnectedException
      */
-    public long[] getFreezeFrameTimestamps() throws CarNotConnectedException {
+    public long[] getFreezeFrameTimestamps() {
         try {
             return mService.getFreezeFrameTimestamps();
-        } catch (IllegalStateException e) {
-            CarApiUtil.checkCarNotConnectedExceptionFromCarService(e);
         } catch (RemoteException e) {
-            throw new CarNotConnectedException();
+            throw e.rethrowFromSystemServer();
         }
-        return new long[]{};
     }
 
     /**
@@ -263,19 +241,13 @@
      * Storage constraints might cause frames to be deleted from vehicle memory.
      * For this reason it cannot be assumed that a timestamp will yield a valid frame,
      * even if it was initially obtained via a call to getFreezeFrameTimestamps().
-     * @throws CarNotConnectedException
      */
-    public @Nullable
-    CarDiagnosticEvent getFreezeFrame(long timestamp)
-        throws CarNotConnectedException {
+    public @Nullable CarDiagnosticEvent getFreezeFrame(long timestamp) {
         try {
             return mService.getFreezeFrame(timestamp);
-        } catch (IllegalStateException e) {
-            CarApiUtil.checkCarNotConnectedExceptionFromCarService(e);
         } catch (RemoteException e) {
-            throw new CarNotConnectedException();
+            throw e.rethrowFromSystemServer();
         }
-        return null;
     }
 
     /**
@@ -287,65 +259,49 @@
      * Due to storage constraints, timestamps cannot be assumed to be indefinitely valid, and
      * a false return from this method should be used by the client as cause for invalidating
      * its local knowledge of the vehicle diagnostic state.
-     * @throws CarNotConnectedException
      */
-    public boolean clearFreezeFrames(long... timestamps) throws CarNotConnectedException {
+    public boolean clearFreezeFrames(long... timestamps) {
         try {
             return mService.clearFreezeFrames(timestamps);
-        } catch (IllegalStateException e) {
-            CarApiUtil.checkCarNotConnectedExceptionFromCarService(e);
         } catch (RemoteException e) {
-            throw new CarNotConnectedException();
+            throw e.rethrowFromSystemServer();
         }
-        return false;
     }
 
     /**
      * Returns true if this vehicle supports sending live frame information.
      * @return
-     * @throws CarNotConnectedException
      */
-    public boolean isLiveFrameSupported() throws CarNotConnectedException {
+    public boolean isLiveFrameSupported() {
         try {
             return mService.isLiveFrameSupported();
-        } catch (IllegalStateException e) {
-            CarApiUtil.checkCarNotConnectedExceptionFromCarService(e);
         } catch (RemoteException e) {
-            throw new CarNotConnectedException();
+            throw e.rethrowFromSystemServer();
         }
-        return false;
     }
 
     /**
      * Returns true if this vehicle supports supports sending notifications to
      * registered listeners when new freeze frames happen.
-     * @throws CarNotConnectedException
      */
-    public boolean isFreezeFrameNotificationSupported() throws CarNotConnectedException {
+    public boolean isFreezeFrameNotificationSupported() {
         try {
             return mService.isFreezeFrameNotificationSupported();
-        } catch (IllegalStateException e) {
-            CarApiUtil.checkCarNotConnectedExceptionFromCarService(e);
         } catch (RemoteException e) {
-            throw new CarNotConnectedException();
+            throw e.rethrowFromSystemServer();
         }
-        return false;
     }
 
     /**
      * Returns whether the underlying HAL supports retrieving freeze frames
      * stored in vehicle memory using timestamp.
-     * @throws CarNotConnectedException
      */
-    public boolean isGetFreezeFrameSupported() throws CarNotConnectedException {
+    public boolean isGetFreezeFrameSupported() {
         try {
             return mService.isGetFreezeFrameSupported();
-        } catch (IllegalStateException e) {
-            CarApiUtil.checkCarNotConnectedExceptionFromCarService(e);
         } catch (RemoteException e) {
-            throw new CarNotConnectedException();
+            throw e.rethrowFromSystemServer();
         }
-        return false;
     }
 
     /**
@@ -357,17 +313,13 @@
      * to delete all freeze frames stored in vehicle memory.
      *
      * @return
-     * @throws CarNotConnectedException
      */
-    public boolean isClearFreezeFramesSupported() throws CarNotConnectedException {
+    public boolean isClearFreezeFramesSupported() {
         try {
             return mService.isClearFreezeFramesSupported();
-        } catch (IllegalStateException e) {
-            CarApiUtil.checkCarNotConnectedExceptionFromCarService(e);
         } catch (RemoteException e) {
-            throw new CarNotConnectedException();
+            throw e.rethrowFromSystemServer();
         }
-        return false;
     }
 
     /**
@@ -379,17 +331,13 @@
      * to delete the freeze frames stored for the provided input timestamps, provided any exist.
      *
      * @return
-     * @throws CarNotConnectedException
      */
-    public boolean isSelectiveClearFreezeFramesSupported() throws CarNotConnectedException {
+    public boolean isSelectiveClearFreezeFramesSupported() {
         try {
             return mService.isSelectiveClearFreezeFramesSupported();
-        } catch (IllegalStateException e) {
-            CarApiUtil.checkCarNotConnectedExceptionFromCarService(e);
         } catch (RemoteException e) {
-            throw new CarNotConnectedException();
+            throw e.rethrowFromSystemServer();
         }
-        return false;
     }
 
     private static class CarDiagnosticEventListenerToService
diff --git a/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java b/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
index 8c2a24f..896534a 100644
--- a/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
+++ b/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
@@ -19,10 +19,7 @@
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.annotation.SystemApi;
-import android.car.Car;
 import android.car.CarManagerBase;
-import android.car.CarNotConnectedException;
-import android.car.drivingstate.ICarDrivingState;
 import android.content.Context;
 import android.os.Handler;
 import android.os.IBinder;
@@ -30,6 +27,7 @@
 import android.os.Message;
 import android.os.RemoteException;
 import android.util.Log;
+
 import java.lang.ref.WeakReference;
 
 /**
@@ -80,8 +78,7 @@
      *
      * @param listener  {@link CarDrivingStateEventListener}
      */
-    public synchronized void registerListener(@NonNull CarDrivingStateEventListener listener)
-            throws CarNotConnectedException, IllegalArgumentException {
+    public synchronized void registerListener(@NonNull CarDrivingStateEventListener listener) {
         if (listener == null) {
             if (VDBG) {
                 Log.v(TAG, "registerCarDrivingStateEventListener(): null listener");
@@ -103,11 +100,7 @@
             // register to the Service for getting notified
             mDrivingService.registerDrivingStateChangeListener(mListenerToService);
         } catch (RemoteException e) {
-            Log.e(TAG, "Could not register a listener to Driving State Service " + e);
-            throw new CarNotConnectedException(e);
-        } catch (IllegalStateException e) {
-            Log.e(TAG, "Could not register a listener to Driving State Service " + e);
-            Car.checkCarNotConnectedExceptionFromCarService(e);
+            throw e.rethrowFromSystemServer();
         }
     }
 
@@ -115,8 +108,7 @@
      * Unregister the registered {@link CarDrivingStateEventListener} for the given driving event
      * type.
      */
-    public synchronized void unregisterListener()
-            throws CarNotConnectedException {
+    public synchronized void unregisterListener() {
         if (mDrvStateEventListener == null) {
             if (DBG) {
                 Log.d(TAG, "Listener was not previously registered");
@@ -128,8 +120,7 @@
             mDrvStateEventListener = null;
             mListenerToService = null;
         } catch (RemoteException e) {
-            Log.e(TAG, "Could not unregister listener from Driving State Service " + e);
-            throw new CarNotConnectedException(e);
+            throw e.rethrowFromSystemServer();
         }
     }
 
@@ -139,13 +130,11 @@
      * @return {@link CarDrivingStateEvent} corresponding to the given eventType
      */
     @Nullable
-    public CarDrivingStateEvent getCurrentCarDrivingState()
-            throws CarNotConnectedException {
+    public CarDrivingStateEvent getCurrentCarDrivingState() {
         try {
             return mDrivingService.getCurrentDrivingState();
         } catch (RemoteException e) {
-            Log.e(TAG, "Could not get current driving state " + e);
-            throw new CarNotConnectedException(e);
+            throw e.rethrowFromSystemServer();
         }
     }
 
diff --git a/car-lib/src/android/car/drivingstate/CarUxRestrictionsConfiguration.aidl b/car-lib/src/android/car/drivingstate/CarUxRestrictionsConfiguration.aidl
new file mode 100644
index 0000000..e6f85b5
--- /dev/null
+++ b/car-lib/src/android/car/drivingstate/CarUxRestrictionsConfiguration.aidl
@@ -0,0 +1,19 @@
+/*
+ * Copyright (C) 2018 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 android.car.drivingstate;
+
+parcelable CarUxRestrictionsConfiguration;
diff --git a/car-lib/src/android/car/drivingstate/CarUxRestrictionsConfiguration.java b/car-lib/src/android/car/drivingstate/CarUxRestrictionsConfiguration.java
new file mode 100644
index 0000000..06d19df
--- /dev/null
+++ b/car-lib/src/android/car/drivingstate/CarUxRestrictionsConfiguration.java
@@ -0,0 +1,732 @@
+/*
+ * Copyright (C) 2018 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 android.car.drivingstate;
+
+import android.annotation.FloatRange;
+import android.annotation.Nullable;
+import android.car.drivingstate.CarDrivingStateEvent.CarDrivingState;
+import android.os.Build;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.os.SystemClock;
+import android.util.ArrayMap;
+import android.util.JsonReader;
+import android.util.JsonWriter;
+import android.util.Log;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Configuration for Car UX Restrictions service.
+ *
+ * @hide
+ */
+public final class CarUxRestrictionsConfiguration implements Parcelable {
+    private static final String TAG = "CarUxRConfig";
+
+    // Constants used by json de/serialization.
+    private static final String JSON_NAME_MAX_CONTENT_DEPTH = "max_content_depth";
+    private static final String JSON_NAME_MAX_CUMULATIVE_CONTENT_ITEMS =
+            "max_cumulative_content_items";
+    private static final String JSON_NAME_MAX_STRING_LENGTH = "max_string_length";
+    private static final String JSON_NAME_MOVING_RESTRICTIONS = "moving_restrictions";
+    private static final String JSON_NAME_IDLING_RESTRICTIONS = "idling_restrictions";
+    private static final String JSON_NAME_PARKED_RESTRICTIONS = "parked_restrictions";
+    private static final String JSON_NAME_UNKNOWN_RESTRICTIONS = "unknown_restrictions";
+    private static final String JSON_NAME_REQ_OPT = "req_opt";
+    private static final String JSON_NAME_RESTRICTIONS = "restrictions";
+    private static final String JSON_NAME_SPEED_RANGE = "speed_range";
+    private static final String JSON_NAME_MIN_SPEED = "min_speed";
+    private static final String JSON_NAME_MAX_SPEED = "max_speed";
+
+    private final int mMaxContentDepth;
+    private final int mMaxCumulativeContentItems;
+    private final int mMaxStringLength;
+    private final Map<Integer, List<RestrictionsPerSpeedRange>> mUxRestrictions =
+            new ArrayMap<>(DRIVING_STATES.length);
+
+    private CarUxRestrictionsConfiguration(CarUxRestrictionsConfiguration.Builder builder) {
+        mMaxContentDepth = builder.mMaxContentDepth;
+        mMaxCumulativeContentItems = builder.mMaxCumulativeContentItems;
+        mMaxStringLength = builder.mMaxStringLength;
+
+        for (int drivingState : DRIVING_STATES) {
+            List<RestrictionsPerSpeedRange> list = new ArrayList<>();
+            for (RestrictionsPerSpeedRange r : builder.mUxRestrictions.get(drivingState)) {
+                list.add(r);
+            }
+            mUxRestrictions.put(drivingState, list);
+        }
+    }
+
+    /**
+     * Returns the restrictions based on current driving state and speed.
+     */
+    public CarUxRestrictions getUxRestrictions(@CarDrivingState int drivingState,
+            float currentSpeed) {
+        List<RestrictionsPerSpeedRange> restrictions = mUxRestrictions.get(drivingState);
+        if (restrictions.isEmpty()) {
+            if (Build.IS_ENG || Build.IS_USERDEBUG) {
+                throw new IllegalStateException("No restrictions for driving state "
+                        + getDrivingStateName(drivingState));
+            }
+            return createDefaultUxRestrictionsEvent();
+        }
+
+        RestrictionsPerSpeedRange restriction = null;
+        if (restrictions.size() == 1) {
+            restriction = restrictions.get(0);
+        } else {
+            for (RestrictionsPerSpeedRange r : restrictions) {
+                if (r.mSpeedRange != null && r.mSpeedRange.includes(currentSpeed)) {
+                    restriction = r;
+                    break;
+                }
+            }
+        }
+
+        if (restriction == null) {
+            if (Build.IS_ENG || Build.IS_USERDEBUG) {
+                throw new IllegalStateException(
+                        "No restrictions found for driving state " + drivingState
+                                + " at speed " + currentSpeed);
+            }
+            return createDefaultUxRestrictionsEvent();
+        }
+        return createUxRestrictionsEvent(restriction.mReqOpt, restriction.mRestrictions);
+    }
+
+    private CarUxRestrictions createDefaultUxRestrictionsEvent() {
+        return createUxRestrictionsEvent(true,
+                CarUxRestrictions.UX_RESTRICTIONS_FULLY_RESTRICTED);
+    }
+
+    /**
+     * Creates CarUxRestrictions with restrictions parameters from current configuration.
+     */
+    private CarUxRestrictions createUxRestrictionsEvent(boolean requiresOpt,
+            @CarUxRestrictions.CarUxRestrictionsInfo int uxr) {
+        // In case the UXR is not baseline, set requiresDistractionOptimization to true since it
+        // doesn't make sense to have an active non baseline restrictions without
+        // requiresDistractionOptimization set to true.
+        if (uxr != CarUxRestrictions.UX_RESTRICTIONS_BASELINE) {
+            requiresOpt = true;
+        }
+        CarUxRestrictions.Builder builder = new CarUxRestrictions.Builder(requiresOpt, uxr,
+                SystemClock.elapsedRealtimeNanos());
+        if (mMaxStringLength != Builder.UX_RESTRICTIONS_UNKNOWN) {
+            builder.setMaxStringLength(mMaxStringLength);
+        }
+        if (mMaxCumulativeContentItems != Builder.UX_RESTRICTIONS_UNKNOWN) {
+            builder.setMaxCumulativeContentItems(mMaxCumulativeContentItems);
+        }
+        if (mMaxContentDepth != Builder.UX_RESTRICTIONS_UNKNOWN) {
+            builder.setMaxContentDepth(mMaxContentDepth);
+        }
+        return builder.build();
+    }
+
+    // Json de/serialization methods.
+
+    /**
+     * Writes current configuration as Json.
+     */
+    public void writeJson(JsonWriter writer) throws IOException {
+        // We need to be lenient to accept infinity number (as max speed).
+        writer.setLenient(true);
+
+        writer.beginObject();
+
+        writer.name(JSON_NAME_MAX_CONTENT_DEPTH).value(mMaxContentDepth);
+        writer.name(JSON_NAME_MAX_CUMULATIVE_CONTENT_ITEMS).value(
+                mMaxCumulativeContentItems);
+        writer.name(JSON_NAME_MAX_STRING_LENGTH).value(mMaxStringLength);
+
+        writer.name(JSON_NAME_PARKED_RESTRICTIONS);
+        writeRestrictionsList(writer,
+                mUxRestrictions.get(CarDrivingStateEvent.DRIVING_STATE_PARKED));
+
+        writer.name(JSON_NAME_IDLING_RESTRICTIONS);
+        writeRestrictionsList(writer,
+                mUxRestrictions.get(CarDrivingStateEvent.DRIVING_STATE_IDLING));
+
+        writer.name(JSON_NAME_MOVING_RESTRICTIONS);
+        writeRestrictionsList(writer,
+                mUxRestrictions.get(CarDrivingStateEvent.DRIVING_STATE_MOVING));
+
+        writer.name(JSON_NAME_UNKNOWN_RESTRICTIONS);
+        writeRestrictionsList(writer,
+                mUxRestrictions.get(CarDrivingStateEvent.DRIVING_STATE_UNKNOWN));
+
+        writer.endObject();
+    }
+
+    private void writeRestrictionsList(JsonWriter writer, List<RestrictionsPerSpeedRange> messages)
+            throws IOException {
+        writer.beginArray();
+        for (RestrictionsPerSpeedRange restrictions : messages) {
+            writeRestrictions(writer, restrictions);
+        }
+        writer.endArray();
+    }
+
+    private void writeRestrictions(JsonWriter writer, RestrictionsPerSpeedRange restrictions)
+            throws IOException {
+        writer.beginObject();
+        writer.name(JSON_NAME_REQ_OPT).value(restrictions.mReqOpt);
+        writer.name(JSON_NAME_RESTRICTIONS).value(restrictions.mRestrictions);
+        if (restrictions.mSpeedRange != null) {
+            writer.name(JSON_NAME_SPEED_RANGE);
+            writer.beginObject();
+            writer.name(JSON_NAME_MIN_SPEED).value(restrictions.mSpeedRange.mMinSpeed);
+            writer.name(JSON_NAME_MAX_SPEED).value(restrictions.mSpeedRange.mMaxSpeed);
+            writer.endObject();
+        }
+        writer.endObject();
+    }
+
+    /**
+     * Reads Json as UX restriction configuration.
+     */
+    public static CarUxRestrictionsConfiguration readJson(JsonReader reader) throws IOException {
+        // We need to be lenient to accept infinity number (as max speed).
+        reader.setLenient(true);
+
+        Builder builder = new Builder();
+        reader.beginObject();
+        while (reader.hasNext()) {
+            String name = reader.nextName();
+            if (name.equals(JSON_NAME_MAX_CONTENT_DEPTH)) {
+                builder.setMaxContentDepth(reader.nextInt());
+            } else if (name.equals(JSON_NAME_MAX_CUMULATIVE_CONTENT_ITEMS)) {
+                builder.setMaxCumulativeContentItems(reader.nextInt());
+            } else if (name.equals(JSON_NAME_MAX_STRING_LENGTH)) {
+                builder.setMaxStringLength(reader.nextInt());
+            } else if (name.equals(JSON_NAME_PARKED_RESTRICTIONS)) {
+                readRestrictionsList(reader, CarDrivingStateEvent.DRIVING_STATE_PARKED, builder);
+            } else if (name.equals(JSON_NAME_IDLING_RESTRICTIONS)) {
+                readRestrictionsList(reader, CarDrivingStateEvent.DRIVING_STATE_IDLING, builder);
+            } else if (name.equals(JSON_NAME_MOVING_RESTRICTIONS)) {
+                readRestrictionsList(reader, CarDrivingStateEvent.DRIVING_STATE_MOVING, builder);
+            } else if (name.equals(JSON_NAME_UNKNOWN_RESTRICTIONS)) {
+                readRestrictionsList(reader, CarDrivingStateEvent.DRIVING_STATE_UNKNOWN, builder);
+            } else {
+                Log.e(TAG, "Unknown name parsing json config: " + name);
+                reader.skipValue();
+            }
+        }
+        reader.endObject();
+        return builder.build();
+    }
+
+    private static void readRestrictionsList(JsonReader reader, @CarDrivingState int drivingState,
+            Builder builder) throws IOException {
+        reader.beginArray();
+        while (reader.hasNext()) {
+            readRestrictions(reader, drivingState, builder);
+        }
+        reader.endArray();
+    }
+
+    private static void readRestrictions(JsonReader reader, @CarDrivingState int drivingState,
+            Builder builder) throws IOException {
+        reader.beginObject();
+        boolean reqOpt = false;
+        int restrictions = CarUxRestrictions.UX_RESTRICTIONS_BASELINE;
+        Builder.SpeedRange speedRange = null;
+        while (reader.hasNext()) {
+            String name = reader.nextName();
+            if (name.equals(JSON_NAME_REQ_OPT)) {
+                reqOpt = reader.nextBoolean();
+            } else if (name.equals(JSON_NAME_RESTRICTIONS)) {
+                restrictions = reader.nextInt();
+            } else if (name.equals(JSON_NAME_SPEED_RANGE)) {
+                reader.beginObject();
+                // Okay to set min initial value as MAX_SPEED because SpeedRange() won't allow it.
+                float minSpeed = Builder.SpeedRange.MAX_SPEED;
+                float maxSpeed = Builder.SpeedRange.MAX_SPEED;
+
+                while (reader.hasNext()) {
+                    String n = reader.nextName();
+                    if (n.equals(JSON_NAME_MIN_SPEED)) {
+                        minSpeed = Double.valueOf(reader.nextDouble()).floatValue();
+                    } else if (n.equals(JSON_NAME_MAX_SPEED)) {
+                        maxSpeed = Double.valueOf(reader.nextDouble()).floatValue();
+                    } else {
+                        Log.e(TAG, "Unknown name parsing json config: " + n);
+                        reader.skipValue();
+                    }
+                }
+                speedRange = new Builder.SpeedRange(minSpeed, maxSpeed);
+                reader.endObject();
+            }
+        }
+        reader.endObject();
+        builder.setUxRestrictions(drivingState, speedRange, reqOpt, restrictions);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null || !(obj instanceof CarUxRestrictionsConfiguration)) {
+            return false;
+        }
+
+        CarUxRestrictionsConfiguration other = (CarUxRestrictionsConfiguration) obj;
+
+        // Compare UXR parameters.
+        if (mMaxContentDepth != other.mMaxContentDepth
+                || mMaxCumulativeContentItems != other.mMaxCumulativeContentItems
+                || mMaxStringLength != other.mMaxStringLength) {
+            return false;
+        }
+
+        // Compare UXR by driving state.
+        if (!mUxRestrictions.keySet().equals(other.mUxRestrictions.keySet())) {
+            return false;
+        }
+        for (int drivingState : mUxRestrictions.keySet()) {
+            List<RestrictionsPerSpeedRange> restrictions = mUxRestrictions.get(
+                    drivingState);
+            List<RestrictionsPerSpeedRange> otherRestrictions = other.mUxRestrictions.get(
+                    drivingState);
+            if (restrictions.size() != otherRestrictions.size()) {
+                return false;
+            }
+            // Assuming the restrictions are sorted.
+            for (int i = 0; i < restrictions.size(); i++) {
+                if (!restrictions.get(i).equals(otherRestrictions.get(i))) {
+                    return false;
+                }
+            }
+        }
+        return true;
+    }
+
+    /**
+     * Dump the driving state to UX restrictions mapping.
+     */
+    public void dump(PrintWriter writer) {
+        for (Integer state : mUxRestrictions.keySet()) {
+            List<RestrictionsPerSpeedRange> list = mUxRestrictions.get(state);
+            writer.println("===========================================");
+            writer.println("Driving State to UXR");
+            if (list != null) {
+                writer.println("State:" + getDrivingStateName(state) + " num restrictions:"
+                        + list.size());
+                for (RestrictionsPerSpeedRange r : list) {
+                    writer.println("Requires DO? " + r.mReqOpt
+                            + "\nRestrictions: 0x" + Integer.toHexString(r.mRestrictions)
+                            + "\nSpeed Range: " + (r.mSpeedRange == null
+                            ? "None"
+                            : r.mSpeedRange.mMinSpeed + " - " + r.mSpeedRange.mMaxSpeed));
+                    writer.println("===========================================");
+                }
+            }
+        }
+        writer.println("Max String length: " + mMaxStringLength);
+        writer.println("Max Cumulative Content Items: " + mMaxCumulativeContentItems);
+        writer.println("Max Content depth: " + mMaxContentDepth);
+    }
+
+    private static String getDrivingStateName(@CarDrivingState int state) {
+        switch (state) {
+            case 0:
+                return "parked";
+            case 1:
+                return "idling";
+            case 2:
+                return "moving";
+            default:
+                return "unknown";
+        }
+    }
+
+    // Parcelable methods/fields.
+
+    // Used by Parcel methods to ensure de/serialization order.
+    private static final int[] DRIVING_STATES = new int[]{
+            CarDrivingStateEvent.DRIVING_STATE_UNKNOWN,
+            CarDrivingStateEvent.DRIVING_STATE_PARKED,
+            CarDrivingStateEvent.DRIVING_STATE_IDLING,
+            CarDrivingStateEvent.DRIVING_STATE_MOVING
+    };
+
+    public static final Parcelable.Creator<CarUxRestrictionsConfiguration> CREATOR =
+            new Parcelable.Creator<CarUxRestrictionsConfiguration>() {
+
+        @Override
+        public CarUxRestrictionsConfiguration createFromParcel(Parcel source) {
+            return new CarUxRestrictionsConfiguration(source);
+        }
+
+        @Override
+        public CarUxRestrictionsConfiguration[] newArray(int size) {
+            return new CarUxRestrictionsConfiguration[size];
+        }
+    };
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    private CarUxRestrictionsConfiguration(Parcel in) {
+        for (int drivingState : DRIVING_STATES) {
+            List<RestrictionsPerSpeedRange> restrictions = new ArrayList<>();
+            in.readTypedList(restrictions, RestrictionsPerSpeedRange.CREATOR);
+            mUxRestrictions.put(drivingState, restrictions);
+        }
+        mMaxContentDepth = in.readInt();
+        mMaxCumulativeContentItems = in.readInt();
+        mMaxStringLength = in.readInt();
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        for (int drivingState : DRIVING_STATES) {
+            dest.writeTypedList(mUxRestrictions.get(drivingState), 0);
+        }
+        dest.writeInt(mMaxContentDepth);
+        dest.writeInt(mMaxCumulativeContentItems);
+        dest.writeInt(mMaxStringLength);
+    }
+
+    /**
+     * @hide
+     */
+    public static final class Builder {
+
+        private static final int UX_RESTRICTIONS_UNKNOWN = -1;
+
+        private int mMaxContentDepth = UX_RESTRICTIONS_UNKNOWN;
+        private int mMaxCumulativeContentItems = UX_RESTRICTIONS_UNKNOWN;
+        private int mMaxStringLength = UX_RESTRICTIONS_UNKNOWN;
+
+        private Map<Integer, List<RestrictionsPerSpeedRange>> mUxRestrictions =
+                new ArrayMap<>(DRIVING_STATES.length);
+
+        public Builder() {
+            for (int drivingState : DRIVING_STATES) {
+                mUxRestrictions.put(drivingState, new ArrayList<>());
+            }
+        }
+
+        /**
+         * Sets ux restrictions for driving state.
+         */
+        public Builder setUxRestrictions(@CarDrivingState int drivingState,
+                boolean requiresOptimization,
+                @CarUxRestrictions.CarUxRestrictionsInfo int restrictions) {
+            return this.setUxRestrictions(drivingState, null, requiresOptimization,  restrictions);
+        }
+
+        /**
+         * Sets ux restrictions with speed range.
+         *
+         * @param drivingState Restrictions will be set for this Driving state.
+         *                     See constants in {@link CarDrivingStateEvent}.
+         * @param speedRange If set, restrictions will only apply when current speed is within
+         *                   the range. Only {@link CarDrivingStateEvent#DRIVING_STATE_MOVING}
+         *                   supports speed range. {@code null} implies the full speed range,
+         *                   i.e. zero to {@link SpeedRange#MAX_SPEED}.
+         * @param requiresOptimization Whether distraction optimization (DO) is required for this
+         *                             driving state.
+         * @param restrictions See constants in {@link CarUxRestrictions}.
+         */
+        public Builder setUxRestrictions(@CarDrivingState int drivingState,
+                SpeedRange speedRange, boolean requiresOptimization,
+                @CarUxRestrictions.CarUxRestrictionsInfo int restrictions) {
+            if (drivingState != CarDrivingStateEvent.DRIVING_STATE_MOVING) {
+                if (speedRange != null) {
+                    throw new IllegalArgumentException(
+                            "Non-moving driving state cannot specify speed range.");
+                }
+                if (mUxRestrictions.get(drivingState).size() > 0) {
+                    throw new IllegalArgumentException("Non-moving driving state cannot have "
+                            + "more than one set of restrictions.");
+                }
+            }
+
+            mUxRestrictions.get(drivingState).add(
+                    new RestrictionsPerSpeedRange(requiresOptimization, restrictions, speedRange));
+            return this;
+        }
+
+        /**
+         * Sets max string length.
+         */
+        public Builder setMaxStringLength(int maxStringLength) {
+            mMaxStringLength = maxStringLength;
+            return this;
+        }
+
+        /**
+         * Sets max cumulative content items.
+         */
+        public Builder setMaxCumulativeContentItems(int maxCumulativeContentItems) {
+            mMaxCumulativeContentItems = maxCumulativeContentItems;
+            return this;
+        }
+
+        /**
+         * Sets max content depth.
+         */
+        public Builder setMaxContentDepth(int maxContentDepth) {
+            mMaxContentDepth = maxContentDepth;
+            return this;
+        }
+
+        /**
+         * @return CarUxRestrictionsConfiguration based on builder configuration.
+         */
+        public CarUxRestrictionsConfiguration build() {
+            // Create default restriction for unspecified driving state.
+            for (int drivingState : DRIVING_STATES) {
+                List<RestrictionsPerSpeedRange> restrictions = mUxRestrictions.get(drivingState);
+                if (restrictions.size() == 0) {
+                    Log.i(TAG, "Using default restrictions for driving state: "
+                            + getDrivingStateName(drivingState));
+                    restrictions.add(new RestrictionsPerSpeedRange(
+                            true, CarUxRestrictions.UX_RESTRICTIONS_FULLY_RESTRICTED));
+                }
+            }
+
+            // Configuration validation.
+            for (int drivingState : DRIVING_STATES) {
+                List<RestrictionsPerSpeedRange> restrictions = mUxRestrictions.get(drivingState);
+
+                if (drivingState == CarDrivingStateEvent.DRIVING_STATE_MOVING) {
+                    // Sort restrictions based on speed range.
+                    Collections.sort(restrictions,
+                            (r1, r2) -> r1.mSpeedRange.compareTo(r2.mSpeedRange));
+
+                    if (!isAllSpeedRangeCovered(restrictions)) {
+                        throw new IllegalStateException(
+                                "Moving state should cover full speed range.");
+                    }
+                } else {
+                    if (restrictions.size() != 1) {
+                        throw new IllegalStateException("Non-moving driving state should contain "
+                                + "one set of restriction rules.");
+                    }
+                }
+            }
+            return new CarUxRestrictionsConfiguration(this);
+        }
+
+        /**
+         * restrictions should be sorted based on speed range.
+         */
+        private boolean isAllSpeedRangeCovered(List<RestrictionsPerSpeedRange> restrictions) {
+            if (restrictions.size() == 1) {
+                if (restrictions.get(0).mSpeedRange == null) {
+                    // Single restriction with null speed range implies that
+                    // it applies to the entire driving state.
+                    return true;
+                }
+                return restrictions.get(0).mSpeedRange.mMinSpeed == 0
+                        && Float.compare(restrictions.get(0).mSpeedRange.mMaxSpeed,
+                        SpeedRange.MAX_SPEED) == 0;
+            }
+
+            if (restrictions.get(0).mSpeedRange.mMinSpeed != 0) {
+                Log.e(TAG, "Speed range min speed should start at 0.");
+                return false;
+            }
+            for (int i = 1; i < restrictions.size(); i++) {
+                RestrictionsPerSpeedRange prev = restrictions.get(i - 1);
+                RestrictionsPerSpeedRange curr = restrictions.get(i);
+                // If current min != prev.max, there's either an overlap or a gap in speed range.
+                if (Float.compare(curr.mSpeedRange.mMinSpeed, prev.mSpeedRange.mMaxSpeed) != 0) {
+                    Log.e(TAG, "Mis-configured speed range. Possibly speed range overlap or gap.");
+                    return false;
+                }
+            }
+            // The last speed range should have max speed.
+            float lastMaxSpeed = restrictions.get(restrictions.size() - 1).mSpeedRange.mMaxSpeed;
+            return lastMaxSpeed == SpeedRange.MAX_SPEED;
+        }
+
+        /**
+         * Speed range is defined by min and max speed. When there is no upper bound for max speed,
+         * set it to {@link SpeedRange#MAX_SPEED}.
+         */
+        public static final class SpeedRange implements Comparable<SpeedRange> {
+            public static final float MAX_SPEED = Float.POSITIVE_INFINITY;
+
+            private float mMinSpeed;
+            private float mMaxSpeed;
+
+            /**
+             * Defaults max speed to {@link SpeedRange#MAX_SPEED}.
+             */
+            public SpeedRange(@FloatRange(from = 0.0) float minSpeed) {
+                this(minSpeed, MAX_SPEED);
+            }
+
+            public SpeedRange(@FloatRange(from = 0.0) float minSpeed,
+                    @FloatRange(from = 0.0) float maxSpeed) {
+                if (minSpeed == MAX_SPEED) {
+                    throw new IllegalArgumentException("Min speed cannot be MAX_SPEED.");
+                }
+                if (maxSpeed < 0) {
+                    throw new IllegalArgumentException("Max speed cannot be negative.");
+                }
+                if (minSpeed > maxSpeed) {
+                    throw new IllegalArgumentException("Min speed " + minSpeed
+                            + " should not be greater than max speed " + maxSpeed);
+                }
+                mMinSpeed = minSpeed;
+                mMaxSpeed = maxSpeed;
+            }
+
+             /**
+             * Return if the given speed is in the range of [minSpeed, maxSpeed).
+             *
+             * @param speed Speed to check
+             * @return {@code true} if in range; {@code false} otherwise.
+             */
+            public boolean includes(float speed) {
+                if (speed < mMinSpeed) {
+                    return false;
+                }
+                if (mMaxSpeed == MAX_SPEED) {
+                    return true;
+                }
+                return speed < mMaxSpeed;
+            }
+
+            @Override
+            public int compareTo(SpeedRange other) {
+                // First compare min speed; then max speed.
+                int minSpeedComparison = Float.compare(this.mMinSpeed, other.mMinSpeed);
+                if (minSpeedComparison != 0) {
+                    return minSpeedComparison;
+                }
+
+                return Float.compare(this.mMaxSpeed, other.mMaxSpeed);
+            }
+
+            @Override
+            public boolean equals(Object obj) {
+                if (this == obj) {
+                    return true;
+                }
+                if (obj == null || !(obj instanceof SpeedRange)) {
+                    return false;
+                }
+                SpeedRange other = (SpeedRange) obj;
+
+                return this.compareTo(other) == 0;
+            }
+        }
+    }
+
+    /**
+     * Container for UX restrictions for a speed range.
+     * Speed range is valid only for the {@link CarDrivingStateEvent#DRIVING_STATE_MOVING}.
+     * @hide
+     */
+    public static final class RestrictionsPerSpeedRange implements Parcelable {
+        final boolean mReqOpt;
+        final int mRestrictions;
+        @Nullable
+        final Builder.SpeedRange mSpeedRange;
+
+        public RestrictionsPerSpeedRange(boolean reqOpt, int restrictions) {
+            this(reqOpt, restrictions, null);
+        }
+
+        public RestrictionsPerSpeedRange(boolean reqOpt, int restrictions,
+                @Nullable Builder.SpeedRange speedRange) {
+            if (!reqOpt && restrictions != CarUxRestrictions.UX_RESTRICTIONS_BASELINE) {
+                throw new IllegalArgumentException(
+                        "Driving optimization is not required but UX restrictions is required.");
+            }
+            mReqOpt = reqOpt;
+            mRestrictions = restrictions;
+            mSpeedRange = speedRange;
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj) {
+                return true;
+            }
+            if (obj == null || !(obj instanceof RestrictionsPerSpeedRange)) {
+                return false;
+            }
+            RestrictionsPerSpeedRange other = (RestrictionsPerSpeedRange) obj;
+            return mReqOpt == other.mReqOpt
+                    && mRestrictions == other.mRestrictions
+                    && ((mSpeedRange == null && other.mSpeedRange == null) || mSpeedRange.equals(
+                    other.mSpeedRange));
+        }
+
+        // Parcelable methods/fields.
+
+        public static final Creator<RestrictionsPerSpeedRange> CREATOR =
+                new Creator<RestrictionsPerSpeedRange>() {
+                    @Override
+                    public RestrictionsPerSpeedRange createFromParcel(Parcel in) {
+                        return new RestrictionsPerSpeedRange(in);
+                    }
+
+                    @Override
+                    public RestrictionsPerSpeedRange[] newArray(int size) {
+                        return new RestrictionsPerSpeedRange[size];
+                    }
+                };
+
+        @Override
+        public int describeContents() {
+            return 0;
+        }
+
+        protected RestrictionsPerSpeedRange(Parcel in) {
+            mReqOpt = in.readBoolean();
+            mRestrictions = in.readInt();
+            // Whether speed range is specified.
+            Builder.SpeedRange speedRange = null;
+            if (in.readBoolean()) {
+                float minSpeed = in.readFloat();
+                float maxSpeed = in.readFloat();
+                speedRange = new Builder.SpeedRange(minSpeed, maxSpeed);
+            }
+            mSpeedRange = speedRange;
+        }
+
+        @Override
+        public void writeToParcel(Parcel dest, int flags) {
+            dest.writeBoolean(mReqOpt);
+            dest.writeInt(mRestrictions);
+            // Whether speed range is specified.
+            dest.writeBoolean(mSpeedRange != null);
+            if (mSpeedRange != null) {
+                dest.writeFloat(mSpeedRange.mMinSpeed);
+                dest.writeFloat(mSpeedRange.mMaxSpeed);
+            }
+        }
+    }
+}
diff --git a/car-lib/src/android/car/drivingstate/CarUxRestrictionsManager.java b/car-lib/src/android/car/drivingstate/CarUxRestrictionsManager.java
index 57e7d60..06875dd 100644
--- a/car-lib/src/android/car/drivingstate/CarUxRestrictionsManager.java
+++ b/car-lib/src/android/car/drivingstate/CarUxRestrictionsManager.java
@@ -18,10 +18,10 @@
 
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.annotation.RequiresPermission;
+import android.annotation.TestApi;
 import android.car.Car;
 import android.car.CarManagerBase;
-import android.car.CarNotConnectedException;
-import android.car.drivingstate.ICarUxRestrictionsManager;
 import android.content.Context;
 import android.os.Handler;
 import android.os.IBinder;
@@ -85,8 +85,7 @@
      *
      * @param listener {@link OnUxRestrictionsChangedListener}
      */
-    public synchronized void registerListener(@NonNull OnUxRestrictionsChangedListener listener)
-            throws CarNotConnectedException, IllegalArgumentException {
+    public synchronized void registerListener(@NonNull OnUxRestrictionsChangedListener listener) {
         if (listener == null) {
             if (VDBG) {
                 Log.v(TAG, "registerListener(): null listener");
@@ -108,19 +107,38 @@
             // register to the Service to listen for changes.
             mUxRService.registerUxRestrictionsChangeListener(mListenerToService);
         } catch (RemoteException e) {
-            Log.e(TAG, "Could not register a listener to CarUxRestrictionsManagerService " + e);
-            throw new CarNotConnectedException(e);
-        } catch (IllegalStateException e) {
-            Log.e(TAG, "Could not register a listener to CarUxRestrictionsManagerService " + e);
-            Car.checkCarNotConnectedExceptionFromCarService(e);
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /**
+     * Set a new {@link CarUxRestrictionsConfiguration} for next trip.
+     * <p>
+     * Saving a new configuration does not affect current configuration. The new configuration will
+     * only be used after UX Restrictions service restarts when the vehicle is parked.
+     * <p>
+     * Requires Permission:
+     * {@link android.car.Manifest.permission#CAR_UX_RESTRICTIONS_CONFIGURATION}.
+     *
+     * @param config UX restrictions configuration to be persisted.
+     * @return {@code true} if input config was successfully saved; {@code false} otherwise.
+     *
+     * @hide
+     */
+    @RequiresPermission(value = Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION)
+    public synchronized boolean saveUxRestrictionsConfigurationForNextBoot(
+            CarUxRestrictionsConfiguration config) {
+        try {
+            return mUxRService.saveUxRestrictionsConfigurationForNextBoot(config);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
         }
     }
 
     /**
      * Unregister the registered {@link OnUxRestrictionsChangedListener}
      */
-    public synchronized void unregisterListener()
-            throws CarNotConnectedException {
+    public synchronized void unregisterListener() {
         if (mUxRListener == null) {
             if (DBG) {
                 Log.d(TAG, "Listener was not previously registered");
@@ -131,8 +149,7 @@
             mUxRService.unregisterUxRestrictionsChangeListener(mListenerToService);
             mUxRListener = null;
         } catch (RemoteException e) {
-            Log.e(TAG, "Could not unregister listener from Driving State Service " + e);
-            throw new CarNotConnectedException(e);
+            throw e.rethrowFromSystemServer();
         }
     }
 
@@ -142,13 +159,50 @@
      * @return current UX restrictions that is in effect.
      */
     @Nullable
-    public CarUxRestrictions getCurrentCarUxRestrictions()
-            throws CarNotConnectedException {
+    public CarUxRestrictions getCurrentCarUxRestrictions() {
         try {
             return mUxRService.getCurrentUxRestrictions();
         } catch (RemoteException e) {
-            Log.e(TAG, "Could not get current UX restrictions " + e);
-            throw new CarNotConnectedException(e);
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /**
+     * Get the current staged configuration, staged config file will only be accessible after
+     * the boot up completed or user has been switched.
+     * This methods is only for test purpose, please do not use in production.
+     *
+     * @return current staged configuration, {@code null} if it's not available
+     *
+     * @hide
+     *
+     */
+    @TestApi
+    @Nullable
+    @RequiresPermission(value = Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION)
+    public synchronized CarUxRestrictionsConfiguration getStagedConfig() {
+        try {
+            return mUxRService.getStagedConfig();
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /**
+     * Get the current prod configuration
+     *
+     * @return current prod configuration that is in effect.
+     *
+     * @hide
+     *
+     */
+    @TestApi
+    @RequiresPermission(value = Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION)
+    public synchronized CarUxRestrictionsConfiguration getConfig() {
+        try {
+            return mUxRService.getConfig();
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
         }
     }
 
diff --git a/car-lib/src/android/car/drivingstate/ICarUxRestrictionsManager.aidl b/car-lib/src/android/car/drivingstate/ICarUxRestrictionsManager.aidl
index e5c69b8..8f48c5e 100644
--- a/car-lib/src/android/car/drivingstate/ICarUxRestrictionsManager.aidl
+++ b/car-lib/src/android/car/drivingstate/ICarUxRestrictionsManager.aidl
@@ -17,6 +17,7 @@
 package android.car.drivingstate;
 
 import android.car.drivingstate.CarUxRestrictions;
+import android.car.drivingstate.CarUxRestrictionsConfiguration;
 import android.car.drivingstate.ICarUxRestrictionsChangeListener;
 
 /**
@@ -30,4 +31,7 @@
     void registerUxRestrictionsChangeListener(in ICarUxRestrictionsChangeListener listener) = 0;
     void unregisterUxRestrictionsChangeListener(in ICarUxRestrictionsChangeListener listener) = 1;
     CarUxRestrictions getCurrentUxRestrictions() = 2;
+    boolean saveUxRestrictionsConfigurationForNextBoot(in CarUxRestrictionsConfiguration config) = 3;
+    CarUxRestrictionsConfiguration getStagedConfig() = 4;
+    CarUxRestrictionsConfiguration getConfig() = 5;
 }
diff --git a/car-lib/src/android/car/hardware/CarSensorManager.java b/car-lib/src/android/car/hardware/CarSensorManager.java
index 338d74f..109464f 100644
--- a/car-lib/src/android/car/hardware/CarSensorManager.java
+++ b/car-lib/src/android/car/hardware/CarSensorManager.java
@@ -16,21 +16,16 @@
 
 package android.car.hardware;
 
-import android.Manifest;
 import android.annotation.IntDef;
 import android.annotation.RequiresPermission;
 import android.car.Car;
-import android.car.CarApiUtil;
-import android.car.CarLibLog;
 import android.car.CarManagerBase;
-import android.car.CarNotConnectedException;
 import android.car.VehiclePropertyType;
 import android.car.hardware.property.CarPropertyManager;
 import android.content.Context;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.IBinder;
-import android.os.RemoteException;
 import android.util.ArraySet;
 import android.util.Log;
 
@@ -59,6 +54,7 @@
     public static final int SENSOR_TYPE_CAR_SPEED                   = 0x11600207;
     /**
      * Represents engine RPM of the car. Sensor data in {@link CarSensorEvent} is a float.
+     * This requires {@link Car#PERMISSION_CAR_ENGINE_DETAILED} permission.
      */
     public static final int SENSOR_TYPE_RPM                         = 0x11600305;
     /**
@@ -77,18 +73,21 @@
      * intValues[0]. Value of 1 represents parking brake applied while 0 means the other way
      * around. For this sensor, rate in {@link #registerListener(OnSensorChangedListener, int, int)}
      * will be ignored and all changes will be notified.
+     * This requires {@link Car#PERMISSION_POWERTRAIN} permission.
      */
     public static final int SENSOR_TYPE_PARKING_BRAKE               = 0x11200402;
     /**
      * This represents the current position of transmission gear. Sensor data in
      * {@link CarSensorEvent} is an intValues[0]. For the meaning of the value, check
      * {@link CarSensorEvent#GEAR_NEUTRAL} and other GEAR_*.
+     * This requires {@link Car#PERMISSION_POWERTRAIN} permission.
      */
     public static final int SENSOR_TYPE_GEAR                        = 0x11400400;
     /** @hide */
     public static final int SENSOR_TYPE_RESERVED8                   = 8;
     /**
      * Day/night sensor. Sensor data is intValues[0].
+     * This requires {@link Car#PERMISSION_EXTERIOR_ENVIRONMENT} permission.
      */
     public static final int SENSOR_TYPE_NIGHT                       = 0x11200407;
     /**
@@ -123,6 +122,7 @@
     /**
      * Represents ignition state. The value should be one of the constants that starts with
      * IGNITION_STATE_* in {@link CarSensorEvent}.
+     * This requires {@link Car#PERMISSION_POWERTRAIN} permission.
      */
     public static final int SENSOR_TYPE_IGNITION_STATE              = 0x11400409;
     /**
@@ -147,6 +147,7 @@
     public static final int SENSOR_TYPE_RESERVED26                  = 26;
     /**
      * Set to true if the fuel door is open.
+     * This requires {@link Car#PERMISSION_ENERGY_PORTS} permission.
      */
     public static final int SENSOR_TYPE_FUEL_DOOR_OPEN              = 0x11200308;
 
@@ -161,10 +162,12 @@
     public static final int SENSOR_TYPE_EV_BATTERY_LEVEL            = 0x11600309;
     /**
      * Set to true if EV charging port is open.
+     * This requires {@link Car#PERMISSION_ENERGY_PORTS} permission.
      */
     public static final int SENSOR_TYPE_EV_CHARGE_PORT_OPEN         = 0x1120030a;
     /**
      * Set to true if EV charging port is connected.
+     * This requires {@link Car#PERMISSION_ENERGY_PORTS} permission.
      */
     public static final int SENSOR_TYPE_EV_CHARGE_PORT_CONNECTED    = 0x1120030b;
     /**
@@ -311,28 +314,21 @@
     /**
      * Give the list of CarSensors available in the connected car.
      * @return array of all sensor types supported.
-     * @throws CarNotConnectedException if the connection to the car service has been lost.
      */
-    public int[] getSupportedSensors() throws CarNotConnectedException {
-        try {
-            List<CarPropertyConfig> carPropertyConfigList = getPropertyList();
-            int[] supportedSensors = new int[carPropertyConfigList.size()];
-            for (int i = 0; i < supportedSensors.length; i++) {
-                supportedSensors[i] = carPropertyConfigList.get(i).getPropertyId();
-            }
-            return supportedSensors;
-        } catch (IllegalStateException e) {
-            CarApiUtil.checkCarNotConnectedExceptionFromCarService(e);
+    public int[] getSupportedSensors() {
+        List<CarPropertyConfig> carPropertyConfigList = getPropertyList();
+        int[] supportedSensors = new int[carPropertyConfigList.size()];
+        for (int i = 0; i < supportedSensors.length; i++) {
+            supportedSensors[i] = carPropertyConfigList.get(i).getPropertyId();
         }
-        return new int[0];
+        return supportedSensors;
     }
 
     /**
      * Get list of properties represented by CarSensorManager for this car.
      * @return List of CarPropertyConfig objects available via Car Cabin Manager.
-     * @throws CarNotConnectedException if the connection to the car service has been lost.
      */
-    public List<CarPropertyConfig> getPropertyList() throws CarNotConnectedException {
+    public List<CarPropertyConfig> getPropertyList() {
         return mCarPropertyMgr.getPropertyList(mSensorConfigIds);
     }
 
@@ -340,9 +336,8 @@
      * Tells if given sensor is supported or not.
      * @param sensorType
      * @return true if the sensor is supported.
-     * @throws CarNotConnectedException if the connection to the car service has been lost.
      */
-    public boolean isSensorSupported(@SensorType int sensorType) throws CarNotConnectedException {
+    public boolean isSensorSupported(@SensorType int sensorType) {
         int[] sensors = getSupportedSensors();
         for (int sensorSupported: sensors) {
             if (sensorType == sensorSupported) {
@@ -374,11 +369,18 @@
      * updated depending on the rate.
      * <p>
      * Requires {@link Car#PERMISSION_SPEED} for {@link #SENSOR_TYPE_CAR_SPEED} and
-     *  {@link #SENSOR_TYPE_WHEEL_TICK_DISTANCE}, {@link Car#PERMISSION_MILEAGE} for
-     *  {@link #SENSOR_TYPE_ODOMETER}, {@link Car#PERMISSION_ENERGY} for
-     *  {@link #SENSOR_TYPE_FUEL_LEVEL} and (@link #SENSOR_TYPE_EV_BATTERY_LEVEL and
-     *  {@link #SENSOR_TYPE_EV_CHARGE_RATE}, {@link Car#PERMISSION_CAR_DYNAMICS_STATE} for
-     *  {@link #SENSOR_TYPE_ABS_ACTIVE} and {@link #SENSOR_TYPE_TRACTION_CONTROL_ACTIVE}
+     * {@link #SENSOR_TYPE_WHEEL_TICK_DISTANCE}, {@link Car#PERMISSION_CAR_ENGINE_DETAILED} for
+     * {@link #SENSOR_TYPE_RPM} and {@link #SENSOR_TYPE_ENGINE_OIL_LEVEL},
+     * {@link Car#PERMISSION_MILEAGE} for {@link #SENSOR_TYPE_ODOMETER},
+     * {@link Car#PERMISSION_ENERGY} for {@link #SENSOR_TYPE_FUEL_LEVEL} and
+     * {@link #SENSOR_TYPE_EV_BATTERY_LEVEL} and {@link #SENSOR_TYPE_EV_CHARGE_RATE},
+     * {@link Car#PERMISSION_POWERTRAIN} for {@link #SENSOR_TYPE_PARKING_BRAKE} and
+     * {@link #SENSOR_TYPE_GEAR} and {@link #SENSOR_TYPE_IGNITION_STATE},
+     * {@link Car#PERMISSION_EXTERIOR_ENVIRONMENT} for {@link #SENSOR_TYPE_NIGHT} and
+     * {@link #SENSOR_TYPE_ENV_OUTSIDE_TEMPERATURE}, {@link Car#PERMISSION_CAR_DYNAMICS_STATE} for
+     * {@link #SENSOR_TYPE_ABS_ACTIVE} and {@link #SENSOR_TYPE_TRACTION_CONTROL_ACTIVE},
+     * {@link Car#PERMISSION_ENERGY_PORTS} for {@link #SENSOR_TYPE_FUEL_DOOR_OPEN} and
+     * {@link #SENSOR_TYPE_EV_CHARGE_PORT_OPEN} and {@link #SENSOR_TYPE_EV_CHARGE_PORT_CONNECTED}
      *
      * @param listener
      * @param sensorType sensor type to subscribe.
@@ -390,15 +392,15 @@
      *        for example {@link #SENSOR_TYPE_PARKING_BRAKE} will raise an event only when parking
      *        brake was engaged or disengaged.
      * @return if the sensor was successfully enabled.
-     * @throws CarNotConnectedException if the connection to the car service has been lost.
      * @throws IllegalArgumentException for wrong argument like wrong rate
      * @throws SecurityException if missing the appropriate permission
      */
-    @RequiresPermission(anyOf={Manifest.permission.ACCESS_FINE_LOCATION, Car.PERMISSION_SPEED,
-            Car.PERMISSION_MILEAGE, Car.PERMISSION_ENERGY, Car.PERMISSION_CAR_DYNAMICS_STATE},
-            conditional=true)
-    public boolean registerListener(OnSensorChangedListener listener, @SensorType int sensorType,
-            @SensorRate int rate) throws CarNotConnectedException, IllegalArgumentException {
+    @RequiresPermission(anyOf = {Car.PERMISSION_SPEED, Car.PERMISSION_CAR_ENGINE_DETAILED,
+            Car.PERMISSION_MILEAGE, Car.PERMISSION_ENERGY, Car.PERMISSION_POWERTRAIN,
+            Car.PERMISSION_EXTERIOR_ENVIRONMENT, Car.PERMISSION_CAR_DYNAMICS_STATE,
+            Car.PERMISSION_ENERGY_PORTS}, conditional = true)
+    public boolean registerListener(
+            OnSensorChangedListener listener, @SensorType int sensorType, @SensorRate int rate) {
         if (rate != SENSOR_RATE_FASTEST && rate != SENSOR_RATE_NORMAL
                 && rate != SENSOR_RATE_UI && rate != SENSOR_RATE_FAST) {
             throw new IllegalArgumentException("wrong rate " + rate);
@@ -422,7 +424,6 @@
      * @param listener
      */
     public void unregisterListener(OnSensorChangedListener listener) {
-        //TODO: removing listener should reset update rate, bug: 32060307
         synchronized (mListenerMap) {
             mCarPropertyEventListener = mListenerMap.get(listener);
             mCarPropertyMgr.unregisterListener(mCarPropertyEventListener);
@@ -449,25 +450,10 @@
      * with null if there is no data available.
      * @param type A sensor to request
      * @return null if there was no sensor update since connected to the car.
-     * @throws CarNotConnectedException if the connection to the car service has been lost.
      */
-    public CarSensorEvent getLatestSensorEvent(@SensorType int type)
-            throws CarNotConnectedException {
-        try {
-            CarPropertyValue propertyValue = mCarPropertyMgr.getProperty(type, 0);
-            return createCarSensorEvent(propertyValue);
-        } catch (IllegalStateException e) {
-            CarApiUtil.checkCarNotConnectedExceptionFromCarService(e);
-        }
-        return null;
-    }
-
-    private void handleCarServiceRemoteExceptionAndThrow(RemoteException e)
-            throws CarNotConnectedException {
-        if (Log.isLoggable(CarLibLog.TAG_SENSOR, Log.INFO)) {
-            Log.i(CarLibLog.TAG_SENSOR, "RemoteException from car service:" + e.getMessage());
-        }
-        throw new CarNotConnectedException();
+    public CarSensorEvent getLatestSensorEvent(@SensorType int type) {
+        CarPropertyValue propertyValue = mCarPropertyMgr.getProperty(type, 0);
+        return createCarSensorEvent(propertyValue);
     }
 
     private CarSensorEvent createCarSensorEvent(CarPropertyValue propertyValue) {
@@ -512,11 +498,9 @@
      *
      * @param sensor type to request
      * @return CarSensorConfig object
-     * @throws CarNotConnectedException if the connection to the car service has been lost.
      * @hide
      */
-    public CarSensorConfig getSensorConfig(@SensorType int type)
-            throws CarNotConnectedException {
+    public CarSensorConfig getSensorConfig(@SensorType int type) {
         Bundle b = null;
         switch (type) {
             case SENSOR_TYPE_WHEEL_TICK_DISTANCE:
diff --git a/car-lib/src/android/car/hardware/CarVendorExtensionManager.java b/car-lib/src/android/car/hardware/CarVendorExtensionManager.java
index 5e07ace..aa773a4 100644
--- a/car-lib/src/android/car/hardware/CarVendorExtensionManager.java
+++ b/car-lib/src/android/car/hardware/CarVendorExtensionManager.java
@@ -19,7 +19,6 @@
 import android.annotation.SystemApi;
 import android.car.Car;
 import android.car.CarManagerBase;
-import android.car.CarNotConnectedException;
 import android.car.hardware.property.CarPropertyManager;
 import android.os.Handler;
 import android.os.IBinder;
@@ -100,8 +99,7 @@
      * Registers listener. The methods of the listener will be called when new events arrived in
      * the main thread.
      */
-    public void registerCallback(CarVendorExtensionCallback callback)
-            throws CarNotConnectedException {
+    public void registerCallback(CarVendorExtensionCallback callback) {
         synchronized (mLock) {
             if (mCallbacks.isEmpty()) {
                 mListenerToBase = new CarPropertyEventListenerToBase(this);
@@ -116,8 +114,7 @@
     }
 
     /** Unregisters listener that was previously registered. */
-    public void unregisterCallback(CarVendorExtensionCallback callback)
-            throws CarNotConnectedException {
+    public void unregisterCallback(CarVendorExtensionCallback callback) {
         synchronized (mLock) {
             mCallbacks.remove(callback);
             List<CarPropertyConfig> configs = mPropertyManager.getPropertyList();
@@ -132,7 +129,7 @@
     }
 
     /** Get list of properties represented by CarVendorExtensionManager for this car. */
-    public List<CarPropertyConfig> getProperties() throws CarNotConnectedException {
+    public List<CarPropertyConfig> getProperties() {
         return mPropertyManager.getPropertyList();
     }
 
@@ -140,8 +137,7 @@
      * Check whether a given property is available or disabled based on the cars current state.
      * @return true if the property is AVAILABLE, false otherwise
      */
-    public boolean isPropertyAvailable(int propertyId, int area)
-            throws CarNotConnectedException {
+    public boolean isPropertyAvailable(int propertyId, int area) {
         return mPropertyManager.isPropertyAvailable(propertyId, area);
     }
 
@@ -152,11 +148,8 @@
      *        defined as {@code VEHICLE_VALUE_TYPE_INT32} in vehicle HAL could be accessed using
      *        {@code Integer.class}.
      * @param propId - property id which is matched with the one defined in vehicle HAL
-     *
-     * @throws CarNotConnectedException if the connection to the car service has been lost.
      */
-    public <E> E getGlobalProperty(Class<E> propertyClass, int propId)
-            throws CarNotConnectedException {
+    public <E> E getGlobalProperty(Class<E> propertyClass, int propId) {
         return getProperty(propertyClass, propId, 0 /* area */);
     }
 
@@ -169,11 +162,8 @@
      * @param propId - property id which is matched with the one defined in vehicle HAL
      * @param area - vehicle area (e.g. {@code VehicleAreaSeat.ROW_1_LEFT}
      *        or {@code VEHICLE_MIRROR_DRIVER_LEFT}
-     *
-     * @throws CarNotConnectedException if the connection to the car service has been lost.
      */
-    public <E> E getProperty(Class<E> propertyClass, int propId, int area)
-            throws CarNotConnectedException {
+    public <E> E getProperty(Class<E> propertyClass, int propId, int area) {
         return mPropertyManager.getProperty(propertyClass, propId, area).getValue();
     }
 
@@ -186,11 +176,8 @@
      * @param propId - property id which is matched with the one defined in vehicle HAL
      * @param value - new value, this object should match a class provided in {@code propertyClass}
      *        argument.
-     *
-     * @throws CarNotConnectedException if the connection to the car service has been lost.
      */
-    public <E> void setGlobalProperty(Class<E> propertyClass, int propId, E value)
-            throws CarNotConnectedException {
+    public <E> void setGlobalProperty(Class<E> propertyClass, int propId, E value) {
         mPropertyManager.setProperty(propertyClass, propId, 0 /* area */, value);
     }
 
@@ -205,11 +192,8 @@
      *        or {@code VEHICLE_MIRROR_DRIVER_LEFT}
      * @param value - new value, this object should match a class provided in {@code propertyClass}
      *        argument.
-     *
-     * @throws CarNotConnectedException if the connection to the car service has been lost.
      */
-    public <E> void setProperty(Class<E> propertyClass, int propId, int area, E value)
-            throws CarNotConnectedException {
+    public <E> void setProperty(Class<E> propertyClass, int propId, int area, E value) {
         mPropertyManager.setProperty(propertyClass, propId, area, value);
     }
 
diff --git a/car-lib/src/android/car/hardware/cabin/CarCabinManager.java b/car-lib/src/android/car/hardware/cabin/CarCabinManager.java
index 7d5715f..5f6b4b3 100644
--- a/car-lib/src/android/car/hardware/cabin/CarCabinManager.java
+++ b/car-lib/src/android/car/hardware/cabin/CarCabinManager.java
@@ -20,7 +20,6 @@
 import android.annotation.SystemApi;
 import android.car.Car;
 import android.car.CarManagerBase;
-import android.car.CarNotConnectedException;
 import android.car.hardware.CarPropertyConfig;
 import android.car.hardware.CarPropertyValue;
 import android.car.hardware.property.CarPropertyManager;
@@ -483,10 +482,8 @@
     /**
      * Implement wrappers for contained CarPropertyManagerBase object
      * @param callback
-     * @throws CarNotConnectedException
      */
-    public synchronized void registerCallback(CarCabinEventCallback callback) throws
-            CarNotConnectedException {
+    public synchronized void registerCallback(CarCabinEventCallback callback) {
         if (mCallbacks.isEmpty()) {
             mListenerToBase = new CarPropertyEventListenerToBase(this);
         }
@@ -503,8 +500,7 @@
      * this listener, all listening will be stopped.
      * @param callback
      */
-    public synchronized void unregisterCallback(CarCabinEventCallback callback)
-            throws CarNotConnectedException {
+    public synchronized void unregisterCallback(CarCabinEventCallback callback) {
         mCallbacks.remove(callback);
         List<CarPropertyConfig> configs = getPropertyList();
         for (CarPropertyConfig c : configs) {
@@ -519,9 +515,8 @@
     /**
      * Get list of properties represented by CarCabinManager for this car.
      * @return List of CarPropertyConfig objects available via Car Cabin Manager.
-     * @throws CarNotConnectedException if the connection to the car service has been lost.
      */
-    public List<CarPropertyConfig> getPropertyList() throws CarNotConnectedException {
+    public List<CarPropertyConfig> getPropertyList() {
         return mCarPropertyMgr.getPropertyList(mCabinPropertyIds);
     }
 
@@ -530,10 +525,8 @@
      * @param propertyId
      * @param area
      * @return value of requested boolean property
-     * @throws CarNotConnectedException
      */
-    public boolean getBooleanProperty(@PropertyId int propertyId, int area)
-            throws CarNotConnectedException {
+    public boolean getBooleanProperty(@PropertyId int propertyId, int area) {
         return mCarPropertyMgr.getBooleanProperty(propertyId, area);
     }
 
@@ -542,10 +535,8 @@
      * @param propertyId
      * @param area
      * @return value of requested float property
-     * @throws CarNotConnectedException
      */
-    public float getFloatProperty(@PropertyId int propertyId, int area)
-            throws CarNotConnectedException {
+    public float getFloatProperty(@PropertyId int propertyId, int area) {
         return mCarPropertyMgr.getFloatProperty(propertyId, area);
     }
 
@@ -554,10 +545,8 @@
      * @param propertyId
      * @param area
      * @return value of requested integer property
-     * @throws CarNotConnectedException
      */
-    public int getIntProperty(@PropertyId int propertyId, int area)
-            throws CarNotConnectedException {
+    public int getIntProperty(@PropertyId int propertyId, int area) {
         return mCarPropertyMgr.getIntProperty(propertyId, area);
     }
 
@@ -566,10 +555,8 @@
      * @param propertyId
      * @param area
      * @param val
-     * @throws CarNotConnectedException
      */
-    public void setBooleanProperty(@PropertyId int propertyId, int area, boolean val)
-            throws CarNotConnectedException {
+    public void setBooleanProperty(@PropertyId int propertyId, int area, boolean val) {
         if (mCabinPropertyIds.contains(propertyId)) {
             mCarPropertyMgr.setBooleanProperty(propertyId, area, val);
         }
@@ -580,10 +567,8 @@
      * @param propertyId
      * @param area
      * @param val
-     * @throws CarNotConnectedException
      */
-    public void setFloatProperty(@PropertyId int propertyId, int area, float val)
-            throws CarNotConnectedException {
+    public void setFloatProperty(@PropertyId int propertyId, int area, float val) {
         if (mCabinPropertyIds.contains(propertyId)) {
             mCarPropertyMgr.setFloatProperty(propertyId, area, val);
         }
@@ -594,10 +579,8 @@
      * @param propertyId
      * @param area
      * @param val
-     * @throws CarNotConnectedException
      */
-    public void setIntProperty(@PropertyId int propertyId, int area, int val)
-            throws CarNotConnectedException {
+    public void setIntProperty(@PropertyId int propertyId, int area, int val) {
         if (mCabinPropertyIds.contains(propertyId)) {
             mCarPropertyMgr.setIntProperty(propertyId, area, val);
         }
diff --git a/car-lib/src/android/car/hardware/hvac/CarHvacManager.java b/car-lib/src/android/car/hardware/hvac/CarHvacManager.java
index f86640f..6788889 100644
--- a/car-lib/src/android/car/hardware/hvac/CarHvacManager.java
+++ b/car-lib/src/android/car/hardware/hvac/CarHvacManager.java
@@ -20,7 +20,6 @@
 import android.annotation.SystemApi;
 import android.car.Car;
 import android.car.CarManagerBase;
-import android.car.CarNotConnectedException;
 import android.car.hardware.CarPropertyConfig;
 import android.car.hardware.CarPropertyValue;
 import android.car.hardware.property.CarPropertyManager;
@@ -308,10 +307,8 @@
     /**
      * Implement wrappers for contained CarPropertyManager object
      * @param callback
-     * @throws CarNotConnectedException
      */
-    public synchronized void registerCallback(CarHvacEventCallback callback)
-            throws CarNotConnectedException {
+    public synchronized void registerCallback(CarHvacEventCallback callback) {
         if (mCallbacks.isEmpty()) {
             mListenerToBase = new CarPropertyEventListenerToBase(this);
         }
@@ -349,9 +346,8 @@
     /**
      * Get list of properties represented by Car Hvac Manager for this car.
      * @return List of CarPropertyConfig objects available via Car Hvac Manager.
-     * @throws CarNotConnectedException if the connection to the car service has been lost.
      */
-    public List<CarPropertyConfig> getPropertyList() throws CarNotConnectedException {
+    public List<CarPropertyConfig> getPropertyList() {
         return mCarPropertyMgr.getPropertyList(mHvacPropertyIds);
     }
 
@@ -359,8 +355,7 @@
      * Check whether a given property is available or disabled based on the cars current state.
      * @return true if the property is AVAILABLE, false otherwise
      */
-    public boolean isPropertyAvailable(@PropertyId int propertyId, int area)
-            throws CarNotConnectedException {
+    public boolean isPropertyAvailable(@PropertyId int propertyId, int area) {
         return mCarPropertyMgr.isPropertyAvailable(propertyId, area);
     }
 
@@ -369,10 +364,8 @@
      * @param propertyId
      * @param area
      * @return value of requested boolean property
-     * @throws CarNotConnectedException
      */
-    public boolean getBooleanProperty(@PropertyId int propertyId, int area)
-            throws CarNotConnectedException {
+    public boolean getBooleanProperty(@PropertyId int propertyId, int area) {
         return mCarPropertyMgr.getBooleanProperty(propertyId, area);
     }
 
@@ -381,10 +374,8 @@
      * @param propertyId
      * @param area
      * @return value of requested float property
-     * @throws CarNotConnectedException
      */
-    public float getFloatProperty(@PropertyId int propertyId, int area)
-            throws CarNotConnectedException {
+    public float getFloatProperty(@PropertyId int propertyId, int area) {
         return mCarPropertyMgr.getFloatProperty(propertyId, area);
     }
 
@@ -393,10 +384,8 @@
      * @param propertyId
      * @param area
      * @return value of requested integer property
-     * @throws CarNotConnectedException
      */
-    public int getIntProperty(@PropertyId int propertyId, int area)
-            throws CarNotConnectedException {
+    public int getIntProperty(@PropertyId int propertyId, int area) {
         return mCarPropertyMgr.getIntProperty(propertyId, area);
     }
 
@@ -405,10 +394,8 @@
      * @param propertyId
      * @param area
      * @param val
-     * @throws CarNotConnectedException
      */
-    public void setBooleanProperty(@PropertyId int propertyId, int area, boolean val)
-            throws CarNotConnectedException {
+    public void setBooleanProperty(@PropertyId int propertyId, int area, boolean val) {
         if (mHvacPropertyIds.contains(propertyId)) {
             mCarPropertyMgr.setBooleanProperty(propertyId, area, val);
         }
@@ -419,10 +406,8 @@
      * @param propertyId
      * @param area
      * @param val
-     * @throws CarNotConnectedException
      */
-    public void setFloatProperty(@PropertyId int propertyId, int area, float val)
-            throws CarNotConnectedException {
+    public void setFloatProperty(@PropertyId int propertyId, int area, float val) {
         if (mHvacPropertyIds.contains(propertyId)) {
             mCarPropertyMgr.setFloatProperty(propertyId, area, val);
         }
@@ -433,10 +418,8 @@
      * @param propertyId
      * @param area
      * @param val
-     * @throws CarNotConnectedException
      */
-    public void setIntProperty(@PropertyId int propertyId, int area, int val)
-            throws CarNotConnectedException {
+    public void setIntProperty(@PropertyId int propertyId, int area, int val) {
         if (mHvacPropertyIds.contains(propertyId)) {
             mCarPropertyMgr.setIntProperty(propertyId, area, val);
         }
diff --git a/car-lib/src/android/car/hardware/power/CarPowerManager.java b/car-lib/src/android/car/hardware/power/CarPowerManager.java
index e61a817..0b02fd5 100644
--- a/car-lib/src/android/car/hardware/power/CarPowerManager.java
+++ b/car-lib/src/android/car/hardware/power/CarPowerManager.java
@@ -19,7 +19,6 @@
 import android.annotation.SystemApi;
 import android.car.Car;
 import android.car.CarManagerBase;
-import android.car.CarNotConnectedException;
 import android.content.Context;
 import android.os.Handler;
 import android.os.IBinder;
@@ -38,35 +37,15 @@
 public class CarPowerManager implements CarManagerBase {
     private final static boolean DBG = false;
     private final static String TAG = "CarPowerManager";
-    private CarPowerStateListener mListener;
-    private final ICarPower mService;
-    private CompletableFuture<Void> mFuture;
 
+    private final Object mLock = new Object();
+    private final ICarPower mService;
+
+    private CarPowerStateListener mListener;
+    private CompletableFuture<Void> mFuture;
     @GuardedBy("mLock")
     private ICarPowerStateListener mListenerToService;
 
-    private final Object mLock = new Object();
-
-    /**
-     * Deleted! Don't use.
-     */
-    public static final int BOOT_REASON_USER_POWER_ON = 1;
-    /**
-     * Deleted! Don't use.
-     */
-    public static final int BOOT_REASON_DOOR_UNLOCK = 2;
-    /**
-     * Deleted! Don't use.
-     */
-    public static final int BOOT_REASON_TIMER = 3;
-    /**
-     * Deleted! Don't use.
-     */
-    public static final int BOOT_REASON_DOOR_OPEN = 4;
-    /**
-     * Deleted! Don't use.
-     */
-    public static final int BOOT_REASON_REMOTE_START = 5;
 
     /**
      *  Applications set a {@link CarPowerStateListener} for power state event updates.
@@ -78,44 +57,41 @@
          */
 
         /**
-         * Shutdown is cancelled, return to normal state.
-         */
-        int SHUTDOWN_CANCELLED = 0;
-        /**
-         * Enter shutdown state.  CPMS is switching to WAIT_FOR_FINISHED state.
-         */
-        int SHUTDOWN_ENTER = 1;
-        /**
          * Android is up, but vendor is controlling the audio / display
          * @hide
          */
-        int WAIT_FOR_VHAL = 2;
+        int WAIT_FOR_VHAL = 1;
         /**
          * Enter suspend state.  CPMS is switching to WAIT_FOR_FINISHED state.
          * @hide
          */
-        int SUSPEND_ENTER = 3;
+        int SUSPEND_ENTER = 2;
         /**
          * Wake up from suspend.
          * @hide
          */
-        int SUSPEND_EXIT = 4;
+        int SUSPEND_EXIT = 3;
+        /**
+         * Enter shutdown state.  CPMS is switching to WAIT_FOR_FINISHED state.
+         * @hide
+         */
+        int SHUTDOWN_ENTER = 5;
         /**
          * On state
          * @hide
          */
-        int ON = 5;
+        int ON = 6;
         /**
          * State where system is getting ready for shutdown or suspend.  Application is expected to
          * cleanup and be ready to suspend
          * @hide
          */
-        int SHUTDOWN_PREPARE = 6;
-        
+        int SHUTDOWN_PREPARE = 7;
         /**
-         * Deleted! Don't use.
+         * Shutdown is cancelled, return to normal state.
+         * @hide
          */
-        void onStateChanged(int state);
+        int SHUTDOWN_CANCELLED = 8;
 
         /**
          *  Called when power state changes
@@ -143,29 +119,25 @@
 
     /**
      * Request power manager to shutdown in lieu of suspend at the next opportunity.
-     * @throws CarNotConnectedException
      * @hide
      */
-    public void requestShutdownOnNextSuspend() throws CarNotConnectedException {
+    public void requestShutdownOnNextSuspend() {
         try {
             mService.requestShutdownOnNextSuspend();
         } catch (RemoteException e) {
-            Log.e(TAG, "Exception in requestShutdownOnNextSuspend", e);
-            throw new CarNotConnectedException(e);
+            throw e.rethrowFromSystemServer();
         }
     }
 
     /**
      * Schedule next wake up time in CarPowerManagementSystem
-     * @throws CarNotConnectedException
      * @hide
      */
-    public void scheduleNextWakeupTime(int seconds) throws CarNotConnectedException {
+    public void scheduleNextWakeupTime(int seconds) {
         try {
             mService.scheduleNextWakeupTime(seconds);
         } catch (RemoteException e) {
-            Log.e(TAG, "Exception while scheduling next wakeup time", e);
-            throw new CarNotConnectedException(e);
+            throw e.rethrowFromSystemServer();
         }
     }
 
@@ -178,12 +150,17 @@
      * {@link #SHUTDOWN_ENTER} or {@link #SUSPEND_ENTER} state transition.
      *
      * @param listener
-     * @throws CarNotConnectedException, IllegalStateException
+     * @throws IllegalStateException
      * @hide
      */
-    public void setListener(CarPowerStateListener listener) throws
-            CarNotConnectedException, IllegalStateException {
+    public void setListener(CarPowerStateListener listener) {
         synchronized(mLock) {
+            if (mListener == null) {
+                // Update listener
+                mListener = listener;
+            } else {
+                throw new IllegalStateException("Listener must be cleared first");
+            }
             if (mListenerToService == null) {
                 ICarPowerStateListener listenerToService = new ICarPowerStateListener.Stub() {
                     @Override
@@ -194,19 +171,10 @@
                 try {
                     mService.registerListener(listenerToService);
                     mListenerToService = listenerToService;
-                } catch (RemoteException ex) {
-                    Log.e(TAG, "Could not connect: ", ex);
-                    throw new CarNotConnectedException(ex);
-                } catch (IllegalStateException ex) {
-                    Car.checkCarNotConnectedExceptionFromCarService(ex);
+                } catch (RemoteException e) {
+                    throw e.rethrowFromSystemServer();
                 }
             }
-            if (mListener == null) {
-                // Update listener
-                mListener = listener;
-            } else {
-                throw new IllegalStateException("Listener must be cleared first");
-            }
         }
     }
 
@@ -230,11 +198,8 @@
 
         try {
             mService.unregisterListener(listenerToService);
-        } catch (RemoteException ex) {
-            Log.e(TAG, "Failed to unregister listener", ex);
-            //ignore
-        } catch (IllegalStateException ex) {
-            Car.hideCarNotConnectedExceptionFromCarService(ex);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
         }
     }
 
@@ -257,7 +222,7 @@
                 try {
                     mService.finished(mListenerToService, token);
                 } catch (RemoteException e) {
-                    Log.e(TAG, "RemoteException while calling CPMS.finished()", e);
+                    throw e.rethrowFromSystemServer();
                 }
             });
         }
diff --git a/car-lib/src/android/car/hardware/property/CarPropertyManager.java b/car-lib/src/android/car/hardware/property/CarPropertyManager.java
index 6e221aa..74c5bc0 100644
--- a/car-lib/src/android/car/hardware/property/CarPropertyManager.java
+++ b/car-lib/src/android/car/hardware/property/CarPropertyManager.java
@@ -19,9 +19,7 @@
 import static java.lang.Integer.toHexString;
 
 import android.annotation.Nullable;
-import android.car.CarApiUtil;
 import android.car.CarManagerBase;
-import android.car.CarNotConnectedException;
 import android.car.hardware.CarPropertyConfig;
 import android.car.hardware.CarPropertyValue;
 import android.os.Handler;
@@ -117,8 +115,7 @@
     }
 
     /** Use to register or update Callback for properties */
-    public boolean registerListener(CarPropertyEventListener listener, int propertyId, float rate)
-            throws CarNotConnectedException {
+    public boolean registerListener(CarPropertyEventListener listener, int propertyId, float rate) {
         synchronized (mActivePropertyListener) {
             if (mCarPropertyEventToService == null) {
                 mCarPropertyEventToService = new CarPropertyEventListenerToService(this);
@@ -143,14 +140,11 @@
         return true;
     }
 
-    private boolean registerOrUpdatePropertyListener(int propertyId, float rate)
-            throws CarNotConnectedException {
+    private boolean registerOrUpdatePropertyListener(int propertyId, float rate) {
         try {
             mService.registerListener(propertyId, rate, mCarPropertyEventToService);
-        } catch (IllegalStateException e) {
-            CarApiUtil.checkCarNotConnectedExceptionFromCarService(e);
         } catch (RemoteException e) {
-            throw new CarNotConnectedException(e);
+            throw e.rethrowFromSystemServer();
         }
         return true;
     }
@@ -217,15 +211,11 @@
                 try {
                     mService.unregisterListener(propertyId, mCarPropertyEventToService);
                 } catch (RemoteException e) {
-                    //ignore
+                    throw e.rethrowFromSystemServer();
                 }
                 mActivePropertyListener.remove(propertyId);
             } else if (needsServerUpdate) {
-                try {
-                    registerOrUpdatePropertyListener(propertyId, listeners.getRate());
-                } catch (CarNotConnectedException e) {
-                    // ignore
-                }
+                registerOrUpdatePropertyListener(propertyId, listeners.getRate());
             }
         }
     }
@@ -257,7 +247,7 @@
      *
      * @return String Permission needed to read this property.  NULL if propId not available.
      */
-    public String getReadPermission(int propId) throws CarNotConnectedException {
+    public String getReadPermission(int propId) {
         if (mDbg) {
             Log.d(mTag, "getReadPermission, propId: 0x" + toHexString(propId));
         }
@@ -265,8 +255,7 @@
             String permission = mService.getReadPermission(propId);
             return permission;
         } catch (RemoteException e) {
-            Log.e(mTag, "getReadPermission failed with " + e.toString(), e);
-            throw new CarNotConnectedException(e);
+            throw e.rethrowFromSystemServer();
         }
     }
 
@@ -276,7 +265,7 @@
      *
      * @return String Permission needed to write this property.  NULL if propId not available.
      */
-    public String getWritePermission(int propId) throws CarNotConnectedException {
+    public String getWritePermission(int propId) {
         if (mDbg) {
             Log.d(mTag, "getWritePermission, propId: 0x" + toHexString(propId));
         }
@@ -284,25 +273,21 @@
             String permission = mService.getWritePermission(propId);
             return permission;
         } catch (RemoteException e) {
-            Log.e(mTag, "getWritePermission failed with " + e.toString(), e);
-            throw new CarNotConnectedException(e);
+            throw e.rethrowFromSystemServer();
         }
     }
 
     /**
      * Check whether a given property is available or disabled based on the car's current state.
      * @return true if STATUS_AVAILABLE, false otherwise (eg STATUS_UNAVAILABLE)
-     * @throws CarNotConnectedException
      */
-    public boolean isPropertyAvailable(int propId, int area) throws CarNotConnectedException {
+    public boolean isPropertyAvailable(int propId, int area) {
         try {
             CarPropertyValue propValue = mService.getProperty(propId, area);
             return (propValue != null)
                     && (propValue.getStatus() == CarPropertyValue.STATUS_AVAILABLE);
         } catch (RemoteException e) {
-            Log.e(mTag, "isPropertyAvailable failed with " + e.toString()
-                    + ", propId: 0x" + toHexString(propId) + ", area: 0x" + toHexString(area), e);
-            throw new CarNotConnectedException(e);
+            throw e.rethrowFromSystemServer();
         }
     }
 
@@ -312,7 +297,7 @@
      * @param prop Property ID to get
      * @param area Area of the property to get
      */
-    public boolean getBooleanProperty(int prop, int area) throws CarNotConnectedException {
+    public boolean getBooleanProperty(int prop, int area) {
         CarPropertyValue<Boolean> carProp = getProperty(Boolean.class, prop, area);
         return carProp != null ? carProp.getValue() : false;
     }
@@ -323,7 +308,7 @@
      * @param prop Property ID to get
      * @param area Area of the property to get
      */
-    public float getFloatProperty(int prop, int area) throws CarNotConnectedException {
+    public float getFloatProperty(int prop, int area) {
         CarPropertyValue<Float> carProp = getProperty(Float.class, prop, area);
         return carProp != null ? carProp.getValue() : 0f;
     }
@@ -334,7 +319,7 @@
      * @param prop Property ID to get
      * @param area Zone of the property to get
      */
-    public int getIntProperty(int prop, int area) throws CarNotConnectedException {
+    public int getIntProperty(int prop, int area) {
         CarPropertyValue<Integer> carProp = getProperty(Integer.class, prop, area);
         return carProp != null ? carProp.getValue() : 0;
     }
@@ -345,7 +330,7 @@
      * @param prop Property ID to get
      * @param area Zone of the property to get
      */
-    public int[] getIntArrayProperty(int prop, int area) throws CarNotConnectedException {
+    public int[] getIntArrayProperty(int prop, int area) {
         CarPropertyValue<Integer[]> carProp = getProperty(Integer[].class, prop, area);
         return carProp != null ? toIntArray(carProp.getValue()) : new int[0];
     }
@@ -361,8 +346,7 @@
 
     /** Return CarPropertyValue */
     @SuppressWarnings("unchecked")
-    public <E> CarPropertyValue<E> getProperty(Class<E> clazz, int propId, int area)
-            throws CarNotConnectedException {
+    public <E> CarPropertyValue<E> getProperty(Class<E> clazz, int propId, int area) {
         if (mDbg) {
             Log.d(mTag, "getProperty, propId: 0x" + toHexString(propId)
                     + ", area: 0x" + toHexString(area) + ", class: " + clazz);
@@ -378,28 +362,22 @@
             }
             return propVal;
         } catch (RemoteException e) {
-            Log.e(mTag, "getProperty failed with " + e.toString()
-                    + ", propId: 0x" + toHexString(propId) + ", area: 0x" + toHexString(area), e);
-            throw new CarNotConnectedException(e);
+            throw e.rethrowFromSystemServer();
         }
     }
 
     /** Return raw CarPropertyValue */
-    public <E> CarPropertyValue<E> getProperty(int propId, int area)
-            throws CarNotConnectedException {
+    public <E> CarPropertyValue<E> getProperty(int propId, int area) {
         try {
             CarPropertyValue<E> propVal = mService.getProperty(propId, area);
             return propVal;
         } catch (RemoteException e) {
-            Log.e(mTag, "getProperty failed with " + e.toString()
-                    + ", propId: 0x" + toHexString(propId) + ", area: 0x" + toHexString(area), e);
-            throw new CarNotConnectedException(e);
+            throw e.rethrowFromSystemServer();
         }
     }
 
     /** Set CarPropertyValue */
-    public <E> void setProperty(Class<E> clazz, int propId, int area, E val)
-            throws CarNotConnectedException {
+    public <E> void setProperty(Class<E> clazz, int propId, int area, E val) {
         if (mDbg) {
             Log.d(mTag, "setProperty, propId: 0x" + toHexString(propId)
                     + ", area: 0x" + toHexString(area) + ", class: " + clazz + ", val: " + val);
@@ -407,8 +385,7 @@
         try {
             mService.setProperty(new CarPropertyValue<>(propId, area, val));
         } catch (RemoteException e) {
-            Log.e(mTag, "setProperty failed with " + e.toString(), e);
-            throw new CarNotConnectedException(e);
+            throw e.rethrowFromSystemServer();
         }
     }
 
@@ -420,17 +397,16 @@
      * @param area Area to apply the modification.
      * @param val Value to set
      */
-    public void setBooleanProperty(int prop, int area, boolean val)
-            throws CarNotConnectedException {
+    public void setBooleanProperty(int prop, int area, boolean val) {
         setProperty(Boolean.class, prop, area, val);
     }
 
     /** Set float value of property*/
-    public void setFloatProperty(int prop, int area, float val) throws CarNotConnectedException {
+    public void setFloatProperty(int prop, int area, float val) {
         setProperty(Float.class, prop, area, val);
     }
     /** Set int value of property*/
-    public void setIntProperty(int prop, int area, int val) throws CarNotConnectedException {
+    public void setIntProperty(int prop, int area, int val) {
         setProperty(Integer.class, prop, area, val);
     }
 
diff --git a/car-lib/src/android/car/input/CarInputHandlingService.java b/car-lib/src/android/car/input/CarInputHandlingService.java
index ea952dd..6f009de 100644
--- a/car-lib/src/android/car/input/CarInputHandlingService.java
+++ b/car-lib/src/android/car/input/CarInputHandlingService.java
@@ -101,7 +101,7 @@
         try {
             callbackBinder.transact(INPUT_CALLBACK_BINDER_CODE, dataIn, null, IBinder.FLAG_ONEWAY);
         } catch (RemoteException e) {
-            Log.e(TAG, "doCallbackIfPossible: callback failed", e);
+            throw e.rethrowFromSystemServer();
         }
     }
 
diff --git a/car-lib/src/android/car/media/CarAudioManager.java b/car-lib/src/android/car/media/CarAudioManager.java
index 2b9e5af..d3fb4bd 100644
--- a/car-lib/src/android/car/media/CarAudioManager.java
+++ b/car-lib/src/android/car/media/CarAudioManager.java
@@ -16,187 +16,214 @@
 package android.car.media;
 
 import android.annotation.NonNull;
-import android.annotation.SystemApi;
+import android.annotation.RequiresPermission;
+import android.annotation.TestApi;
+import android.car.Car;
 import android.car.CarLibLog;
 import android.car.CarManagerBase;
-import android.car.CarNotConnectedException;
-import android.content.ContentResolver;
 import android.content.Context;
-import android.database.ContentObserver;
 import android.media.AudioAttributes;
 import android.os.Handler;
 import android.os.IBinder;
 import android.os.RemoteException;
-import android.provider.Settings;
 import android.util.Log;
 
+import java.util.ArrayList;
+import java.util.List;
+
 /**
- * APIs for handling car specific audio stuff.
+ * APIs for handling audio in a car.
+ *
+ * In a car environment, we introduced the support to turn audio dynamic routing on /off by
+ * setting the "audioUseDynamicRouting" attribute in config.xml
+ *
+ * When audio dynamic routing is enabled:
+ * - Audio devices are grouped into zones
+ * - There is at least one primary zone, and extra secondary zones such as RSE
+ *   (Reat Seat Entertainment)
+ * - Within each zone, audio devices are grouped into volume groups for volume control
+ * - Audio is assigned to an audio device based on its AudioAttributes usage
+ *
+ * When audio dynamic routing is disabled:
+ * - There is exactly one audio zone, which is the primary zone
+ * - Each volume group represents a controllable STREAM_TYPE, same as AudioManager
  */
 public final class CarAudioManager implements CarManagerBase {
 
-    // The trailing slash forms a directory-liked hierarchy and
-    // allows listening for both GROUP/MEDIA and GROUP/NAVIGATION.
-    private static final String VOLUME_SETTINGS_KEY_FOR_GROUP_PREFIX = "android.car.VOLUME_GROUP/";
-
     /**
-     * @param groupId The volume group id
-     * @return Key to persist volume index for volume group in {@link Settings.Global}
+     * Zone id of the primary audio zone.
      */
-    public static String getVolumeSettingsKeyForGroup(int groupId) {
-        return VOLUME_SETTINGS_KEY_FOR_GROUP_PREFIX + groupId;
-    }
+    public static final int PRIMARY_AUDIO_ZONE = 0x0;
+
+    private final ICarAudio mService;
+    private final List<CarVolumeCallback> mCarVolumeCallbacks;
+
+    private final ICarVolumeCallback mCarVolumeCallbackImpl = new ICarVolumeCallback.Stub() {
+        @Override
+        public void onGroupVolumeChanged(int zoneId, int groupId, int flags) {
+            for (CarVolumeCallback callback : mCarVolumeCallbacks) {
+                callback.onGroupVolumeChanged(zoneId, groupId, flags);
+            }
+        }
+
+        @Override
+        public void onMasterMuteChanged(int zoneId, int flags) {
+            for (CarVolumeCallback callback : mCarVolumeCallbacks) {
+                callback.onMasterMuteChanged(zoneId, flags);
+            }
+        }
+    };
 
     /**
-     * Key to persist master mute state in {@link Settings.Global}
-     *
+     * @return Whether dynamic routing is enabled or not.
      * @hide
      */
-    public static final String VOLUME_SETTINGS_KEY_MASTER_MUTE = "android.car.MASTER_MUTE";
-
-    private final ContentResolver mContentResolver;
-    private final ICarAudio mService;
-
-    /**
-     * Registers a {@link ContentObserver} to listen for volume group changes.
-     * Note that this observer is valid for bus based car audio stack only.
-     *
-     * {@link ContentObserver#onChange(boolean)} will be called on every group volume change.
-     *
-     * @param observer The {@link ContentObserver} instance to register, non-null
-     */
-    @SystemApi
-    public void registerVolumeChangeObserver(@NonNull ContentObserver observer) {
-        mContentResolver.registerContentObserver(
-                Settings.Global.getUriFor(VOLUME_SETTINGS_KEY_FOR_GROUP_PREFIX),
-                true, observer);
+    @TestApi
+    public boolean isDynamicRoutingEnabled() {
+        try {
+            return mService.isDynamicRoutingEnabled();
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
     }
 
     /**
-     * Unregisters the {@link ContentObserver} which listens for volume group changes.
+     * Sets the volume index for a volume group in primary zone.
      *
-     * @param observer The {@link ContentObserver} instance to unregister, non-null
+     * @see {@link #setGroupVolume(int, int, int, int)}
      */
-    @SystemApi
-    public void unregisterVolumeChangeObserver(@NonNull ContentObserver observer) {
-        mContentResolver.unregisterContentObserver(observer);
+    public void setGroupVolume(int groupId, int index, int flags) {
+        setGroupVolume(PRIMARY_AUDIO_ZONE, groupId, index, flags);
     }
 
     /**
      * Sets the volume index for a volume group.
      *
-     * Requires {@link android.car.Car#PERMISSION_CAR_CONTROL_AUDIO_VOLUME} permission.
-     *
+     * @param zoneId The zone id whose volume group is affected.
      * @param groupId The volume group id whose volume index should be set.
      * @param index The volume index to set. See
-     *            {@link #getGroupMaxVolume(int)} for the largest valid value.
+     *            {@link #getGroupMaxVolume(int, int)} for the largest valid value.
      * @param flags One or more flags (e.g., {@link android.media.AudioManager#FLAG_SHOW_UI},
      *              {@link android.media.AudioManager#FLAG_PLAY_SOUND})
      */
-    @SystemApi
-    public void setGroupVolume(int groupId, int index, int flags) throws CarNotConnectedException {
+    @RequiresPermission(Car.PERMISSION_CAR_CONTROL_AUDIO_VOLUME)
+    public void setGroupVolume(int zoneId, int groupId, int index, int flags) {
         try {
-            mService.setGroupVolume(groupId, index, flags);
+            mService.setGroupVolume(zoneId, groupId, index, flags);
         } catch (RemoteException e) {
-            Log.e(CarLibLog.TAG_CAR, "setGroupVolume failed", e);
-            throw new CarNotConnectedException(e);
+            throw e.rethrowFromSystemServer();
         }
     }
 
     /**
+     * Returns the maximum volume index for a volume group in primary zone.
+     *
+     * @see {@link #getGroupMaxVolume(int, int)}
+     */
+    public int getGroupMaxVolume(int groupId) {
+        return getGroupMaxVolume(PRIMARY_AUDIO_ZONE, groupId);
+    }
+
+    /**
      * Returns the maximum volume index for a volume group.
      *
-     * Requires {@link android.car.Car#PERMISSION_CAR_CONTROL_AUDIO_VOLUME} permission.
-     *
+     * @param zoneId The zone id whose volume group is queried.
      * @param groupId The volume group id whose maximum volume index is returned.
      * @return The maximum valid volume index for the given group.
      */
-    @SystemApi
-    public int getGroupMaxVolume(int groupId) throws CarNotConnectedException {
+    @RequiresPermission(Car.PERMISSION_CAR_CONTROL_AUDIO_VOLUME)
+    public int getGroupMaxVolume(int zoneId, int groupId) {
         try {
-            return mService.getGroupMaxVolume(groupId);
+            return mService.getGroupMaxVolume(zoneId, groupId);
         } catch (RemoteException e) {
-            Log.e(CarLibLog.TAG_CAR, "getGroupMaxVolume failed", e);
-            throw new CarNotConnectedException(e);
+            throw e.rethrowFromSystemServer();
         }
     }
 
     /**
+     * Returns the minimum volume index for a volume group in primary zone.
+     *
+     * @see {@link #getGroupMinVolume(int, int)}
+     */
+    public int getGroupMinVolume(int groupId) {
+        return getGroupMinVolume(PRIMARY_AUDIO_ZONE, groupId);
+    }
+
+    /**
      * Returns the minimum volume index for a volume group.
      *
-     * Requires {@link android.car.Car#PERMISSION_CAR_CONTROL_AUDIO_VOLUME} permission.
-     *
+     * @param zoneId The zone id whose volume group is queried.
      * @param groupId The volume group id whose minimum volume index is returned.
      * @return The minimum valid volume index for the given group, non-negative
      */
-    @SystemApi
-    public int getGroupMinVolume(int groupId) throws CarNotConnectedException {
+    @RequiresPermission(Car.PERMISSION_CAR_CONTROL_AUDIO_VOLUME)
+    public int getGroupMinVolume(int zoneId, int groupId) {
         try {
-            return mService.getGroupMinVolume(groupId);
+            return mService.getGroupMinVolume(zoneId, groupId);
         } catch (RemoteException e) {
-            Log.e(CarLibLog.TAG_CAR, "getGroupMinVolume failed", e);
-            throw new CarNotConnectedException(e);
+            throw e.rethrowFromSystemServer();
         }
     }
 
     /**
+     * Returns the current volume index for a volume group in primary zone.
+     *
+     * @see {@link #getGroupVolume(int, int)}
+     */
+    public int getGroupVolume(int groupId) {
+        return getGroupVolume(PRIMARY_AUDIO_ZONE, groupId);
+    }
+
+    /**
      * Returns the current volume index for a volume group.
      *
-     * Requires {@link android.car.Car#PERMISSION_CAR_CONTROL_AUDIO_VOLUME} permission.
-     *
+     * @param zoneId The zone id whose volume groups is queried.
      * @param groupId The volume group id whose volume index is returned.
      * @return The current volume index for the given group.
      *
-     * @see #getGroupMaxVolume(int)
-     * @see #setGroupVolume(int, int, int)
+     * @see #getGroupMaxVolume(int, int)
+     * @see #setGroupVolume(int, int, int, int)
      */
-    @SystemApi
-    public int getGroupVolume(int groupId) throws CarNotConnectedException {
+    @RequiresPermission(Car.PERMISSION_CAR_CONTROL_AUDIO_VOLUME)
+    public int getGroupVolume(int zoneId, int groupId) {
         try {
-            return mService.getGroupVolume(groupId);
+            return mService.getGroupVolume(zoneId, groupId);
         } catch (RemoteException e) {
-            Log.e(CarLibLog.TAG_CAR, "getGroupVolume failed", e);
-            throw new CarNotConnectedException(e);
+            throw e.rethrowFromSystemServer();
         }
     }
 
     /**
      * Adjust the relative volume in the front vs back of the vehicle cabin.
      *
-     * Requires {@link android.car.Car#PERMISSION_CAR_CONTROL_AUDIO_VOLUME} permission.
-     *
      * @param value in the range -1.0 to 1.0 for fully toward the back through
      *              fully toward the front.  0.0 means evenly balanced.
      *
      * @see #setBalanceTowardRight(float)
      */
-    @SystemApi
-    public void setFadeTowardFront(float value) throws CarNotConnectedException {
+    @RequiresPermission(Car.PERMISSION_CAR_CONTROL_AUDIO_VOLUME)
+    public void setFadeTowardFront(float value) {
         try {
             mService.setFadeTowardFront(value);
         } catch (RemoteException e) {
-            Log.e(CarLibLog.TAG_CAR, "setFadeTowardFront failed", e);
-            throw new CarNotConnectedException(e);
+            throw e.rethrowFromSystemServer();
         }
     }
 
     /**
      * Adjust the relative volume on the left vs right side of the vehicle cabin.
      *
-     * Requires {@link android.car.Car#PERMISSION_CAR_CONTROL_AUDIO_VOLUME} permission.
-     *
      * @param value in the range -1.0 to 1.0 for fully toward the left through
      *              fully toward the right.  0.0 means evenly balanced.
      *
      * @see #setFadeTowardFront(float)
      */
-    @SystemApi
-    public void setBalanceTowardRight(float value) throws CarNotConnectedException {
+    @RequiresPermission(Car.PERMISSION_CAR_CONTROL_AUDIO_VOLUME)
+    public void setBalanceTowardRight(float value) {
         try {
             mService.setBalanceTowardRight(value);
         } catch (RemoteException e) {
-            Log.e(CarLibLog.TAG_CAR, "setBalanceTowardRight failed", e);
-            throw new CarNotConnectedException(e);
+            throw e.rethrowFromSystemServer();
         }
     }
 
@@ -204,8 +231,6 @@
      * Queries the system configuration in order to report the available, non-microphone audio
      * input devices.
      *
-     * Requires {@link android.car.Car#PERMISSION_CAR_CONTROL_AUDIO_SETTINGS} permission.
-     *
      * @return An array of strings representing the available input ports.
      * Each port is identified by it's "address" tag in the audioPolicyConfiguration xml file.
      * Empty array if we find nothing.
@@ -213,13 +238,12 @@
      * @see #createAudioPatch(String, int, int)
      * @see #releaseAudioPatch(CarAudioPatchHandle)
      */
-    @SystemApi
-    public @NonNull String[] getExternalSources() throws CarNotConnectedException {
+    @RequiresPermission(Car.PERMISSION_CAR_CONTROL_AUDIO_SETTINGS)
+    public @NonNull String[] getExternalSources() {
         try {
             return mService.getExternalSources();
         } catch (RemoteException e) {
-            Log.e(CarLibLog.TAG_CAR, "getExternalSources failed", e);
-            throw new CarNotConnectedException(e);
+            throw e.rethrowFromSystemServer();
         }
     }
 
@@ -229,8 +253,6 @@
      * The output of a tuner might be routed directly to the output buss associated with
      * AudioAttributes.USAGE_MEDIA while the tuner is playing.
      *
-     * Requires {@link android.car.Car#PERMISSION_CAR_CONTROL_AUDIO_SETTINGS} permission.
-     *
      * @param sourceAddress the input port name obtained from getExternalSources().
      * @param usage the type of audio represented by this source (usually USAGE_MEDIA).
      * @param gainInMillibels How many steps above the minimum value defined for the source port to
@@ -243,15 +265,13 @@
      * @see #getExternalSources()
      * @see #releaseAudioPatch(CarAudioPatchHandle)
      */
-    @SystemApi
+    @RequiresPermission(Car.PERMISSION_CAR_CONTROL_AUDIO_SETTINGS)
     public CarAudioPatchHandle createAudioPatch(String sourceAddress,
-            @AudioAttributes.AttributeUsage int usage, int gainInMillibels)
-            throws CarNotConnectedException {
+            @AudioAttributes.AttributeUsage int usage, int gainInMillibels) {
         try {
             return mService.createAudioPatch(sourceAddress, usage, gainInMillibels);
         } catch (RemoteException e) {
-            Log.e(CarLibLog.TAG_CAR, "createAudioPatch failed", e);
-            throw new CarNotConnectedException(e);
+            throw e.rethrowFromSystemServer();
         }
     }
 
@@ -259,125 +279,159 @@
      * Removes the association between an input port and an output port identified by the provided
      * handle.
      *
-     * Requires {@link android.car.Car#PERMISSION_CAR_CONTROL_AUDIO_SETTINGS} permission.
-     *
      * @param patch CarAudioPatchHandle returned from createAudioPatch().
      *
      * @see #getExternalSources()
      * @see #createAudioPatch(String, int, int)
      */
-    @SystemApi
-    public void releaseAudioPatch(CarAudioPatchHandle patch) throws CarNotConnectedException {
+    @RequiresPermission(Car.PERMISSION_CAR_CONTROL_AUDIO_SETTINGS)
+    public void releaseAudioPatch(CarAudioPatchHandle patch) {
         try {
             mService.releaseAudioPatch(patch);
         } catch (RemoteException e) {
-            Log.e(CarLibLog.TAG_CAR, "releaseAudioPatch failed", e);
-            throw new CarNotConnectedException(e);
+            throw e.rethrowFromSystemServer();
         }
     }
 
     /**
+     * Gets the count of available volume groups in primary zone.
+     *
+     * @see {@link #getVolumeGroupCount(int)}
+     */
+    public int getVolumeGroupCount() {
+        return getVolumeGroupCount(PRIMARY_AUDIO_ZONE);
+    }
+
+    /**
      * Gets the count of available volume groups in the system.
      *
-     * Requires {@link android.car.Car#PERMISSION_CAR_CONTROL_AUDIO_VOLUME} permission.
-     *
+     * @param zoneId The zone id whois count of volume groups is queried.
      * @return Count of volume groups
      */
-    @SystemApi
-    public int getVolumeGroupCount() throws CarNotConnectedException {
+    @RequiresPermission(Car.PERMISSION_CAR_CONTROL_AUDIO_VOLUME)
+    public int getVolumeGroupCount(int zoneId) {
         try {
-            return mService.getVolumeGroupCount();
+            return mService.getVolumeGroupCount(zoneId);
         } catch (RemoteException e) {
-            Log.e(CarLibLog.TAG_CAR, "getVolumeGroupCount failed", e);
-            throw new CarNotConnectedException(e);
+            throw e.rethrowFromSystemServer();
         }
     }
 
     /**
+     * Gets the volume group id for a given {@link AudioAttributes} usage in primary zone.
+     *
+     * @see {@link #getVolumeGroupIdForUsage(int, int)}
+     */
+    public int getVolumeGroupIdForUsage(@AudioAttributes.AttributeUsage int usage) {
+        return getVolumeGroupIdForUsage(PRIMARY_AUDIO_ZONE, usage);
+    }
+
+    /**
      * Gets the volume group id for a given {@link AudioAttributes} usage.
      *
-     * Requires {@link android.car.Car#PERMISSION_CAR_CONTROL_AUDIO_VOLUME} permission.
-     *
+     * @param zoneId The zone id whose volume group is queried.
      * @param usage The {@link AudioAttributes} usage to get a volume group from.
      * @return The volume group id where the usage belongs to
      */
-    @SystemApi
-    public int getVolumeGroupIdForUsage(@AudioAttributes.AttributeUsage int usage)
-            throws CarNotConnectedException {
+    @RequiresPermission(Car.PERMISSION_CAR_CONTROL_AUDIO_VOLUME)
+    public int getVolumeGroupIdForUsage(int zoneId, @AudioAttributes.AttributeUsage int usage) {
         try {
-            return mService.getVolumeGroupIdForUsage(usage);
+            return mService.getVolumeGroupIdForUsage(zoneId, usage);
         } catch (RemoteException e) {
-            Log.e(CarLibLog.TAG_CAR, "getVolumeGroupIdForUsage failed", e);
-            throw new CarNotConnectedException(e);
+            throw e.rethrowFromSystemServer();
         }
     }
 
     /**
-     * Gets array of {@link AudioAttributes} usages for a given volume group id.
+     * Gets array of {@link AudioAttributes} usages for a volume group in primary zone.
      *
-     * Requires {@link android.car.Car#PERMISSION_CAR_CONTROL_AUDIO_VOLUME} permission.
+     * @see {@link #getUsagesForVolumeGroupId(int, int)}
+     */
+    public @NonNull int[] getUsagesForVolumeGroupId(int groupId) {
+        return getUsagesForVolumeGroupId(PRIMARY_AUDIO_ZONE, groupId);
+    }
+
+    /**
+     * Gets array of {@link AudioAttributes} usages for a volume group in a zone.
      *
+     * @param zoneId The zone id whose volume group is queried.
      * @param groupId The volume group id whose associated audio usages is returned.
      * @return Array of {@link AudioAttributes} usages for a given volume group id
      */
-    @SystemApi
-    public @NonNull int[] getUsagesForVolumeGroupId(int groupId) throws CarNotConnectedException {
+    @RequiresPermission(Car.PERMISSION_CAR_CONTROL_AUDIO_VOLUME)
+    public @NonNull int[] getUsagesForVolumeGroupId(int zoneId, int groupId) {
         try {
-            return mService.getUsagesForVolumeGroupId(groupId);
+            return mService.getUsagesForVolumeGroupId(zoneId, groupId);
         } catch (RemoteException e) {
-            Log.e(CarLibLog.TAG_CAR, "getUsagesForVolumeGroupId failed", e);
-            throw new CarNotConnectedException(e);
-        }
-    }
-
-    /**
-     * Register {@link ICarVolumeCallback} to receive the volume key events
-     *
-     * Requires {@link android.car.Car#PERMISSION_CAR_CONTROL_AUDIO_VOLUME} permission.
-     *
-     * @param binder {@link IBinder} instance of {@link ICarVolumeCallback} to receive
-     *                              volume key event callbacks
-     * @throws CarNotConnectedException
-     */
-    @SystemApi
-    public void registerVolumeCallback(@NonNull IBinder binder)
-            throws CarNotConnectedException {
-        try {
-            mService.registerVolumeCallback(binder);
-        } catch (RemoteException e) {
-            Log.e(CarLibLog.TAG_CAR, "registerVolumeCallback failed", e);
-            throw new CarNotConnectedException(e);
-        }
-    }
-
-    /**
-     * Unregister {@link ICarVolumeCallback} from receiving volume key events
-     *
-     * Requires {@link android.car.Car#PERMISSION_CAR_CONTROL_AUDIO_VOLUME} permission.
-     *
-     * @param binder {@link IBinder} instance of {@link ICarVolumeCallback} to stop receiving
-     *                              volume key event callbacks
-     * @throws CarNotConnectedException
-     */
-    @SystemApi
-    public void unregisterVolumeCallback(@NonNull IBinder binder)
-            throws CarNotConnectedException {
-        try {
-            mService.unregisterVolumeCallback(binder);
-        } catch (RemoteException e) {
-            Log.e(CarLibLog.TAG_CAR, "unregisterVolumeCallback failed", e);
-            throw new CarNotConnectedException(e);
+            throw e.rethrowFromSystemServer();
         }
     }
 
     /** @hide */
     @Override
     public void onCarDisconnected() {
+        if (mService != null) {
+            try {
+                mService.unregisterVolumeCallback(mCarVolumeCallbackImpl.asBinder());
+            } catch (RemoteException e) {
+                throw e.rethrowFromSystemServer();
+            }
+        }
     }
 
     /** @hide */
     public CarAudioManager(IBinder service, Context context, Handler handler) {
-        mContentResolver = context.getContentResolver();
         mService = ICarAudio.Stub.asInterface(service);
+        mCarVolumeCallbacks = new ArrayList<>();
+
+        try {
+            mService.registerVolumeCallback(mCarVolumeCallbackImpl.asBinder());
+        } catch (RemoteException e) {
+            Log.e(CarLibLog.TAG_CAR, "registerVolumeCallback failed", e);
+        }
+    }
+
+    /**
+     * Registers a {@link CarVolumeCallback} to receive volume change callbacks
+     * @param callback {@link CarVolumeCallback} instance, can not be null
+     */
+    public void registerCarVolumeCallback(@NonNull CarVolumeCallback callback) {
+        mCarVolumeCallbacks.add(callback);
+    }
+
+    /**
+     * Unregisters a {@link CarVolumeCallback} from receiving volume change callbacks
+     * @param callback {@link CarVolumeCallback} instance previously registered, can not be null
+     */
+    public void unregisterCarVolumeCallback(@NonNull CarVolumeCallback callback) {
+        mCarVolumeCallbacks.remove(callback);
+    }
+
+    /**
+     * Callback interface to receive volume change events in a car.
+     * Extend this class and register it with {@link #registerCarVolumeCallback(CarVolumeCallback)}
+     * and unregister it via {@link #unregisterCarVolumeCallback(CarVolumeCallback)}
+     */
+    public abstract static class CarVolumeCallback {
+        /**
+         * This is called whenever a group volume is changed.
+         * The changed-to volume index is not included, the caller is encouraged to
+         * get the current group volume index via CarAudioManager.
+         *
+         * @param zoneId Id of the audio zone that volume change happens
+         * @param groupId Id of the volume group that volume is changed
+         * @param flags see {@link android.media.AudioManager} for flag definitions
+         */
+        public void onGroupVolumeChanged(int zoneId, int groupId, int flags) {}
+
+        /**
+         * This is called whenever the master mute state is changed.
+         * The changed-to master mute state is not included, the caller is encouraged to
+         * get the current master mute state via AudioManager.
+         *
+         * @param zoneId Id of the audio zone that master mute state change happens
+         * @param flags see {@link android.media.AudioManager} for flag definitions
+         */
+        public void onMasterMuteChanged(int zoneId, int flags) {}
     }
 }
diff --git a/car-lib/src/android/car/media/ICarAudio.aidl b/car-lib/src/android/car/media/ICarAudio.aidl
index 353c168..178f75a 100644
--- a/car-lib/src/android/car/media/ICarAudio.aidl
+++ b/car-lib/src/android/car/media/ICarAudio.aidl
@@ -25,10 +25,12 @@
  * @hide
  */
 interface ICarAudio {
-    void setGroupVolume(int groupId, int index, int flags);
-    int getGroupMaxVolume(int groupId);
-    int getGroupMinVolume(int groupId);
-    int getGroupVolume(int groupId);
+    boolean isDynamicRoutingEnabled();
+
+    void setGroupVolume(int zoneId, int groupId, int index, int flags);
+    int getGroupMaxVolume(int zoneId, int groupId);
+    int getGroupMinVolume(int zoneId, int groupId);
+    int getGroupVolume(int zoneId, int groupId);
 
     void setFadeTowardFront(float value);
     void setBalanceTowardRight(float value);
@@ -37,9 +39,9 @@
     CarAudioPatchHandle createAudioPatch(in String sourceAddress, int usage, int gainInMillibels);
     void releaseAudioPatch(in CarAudioPatchHandle patch);
 
-    int getVolumeGroupCount();
-    int getVolumeGroupIdForUsage(int usage);
-    int[] getUsagesForVolumeGroupId(int groupId);
+    int getVolumeGroupCount(int zoneId);
+    int getVolumeGroupIdForUsage(int zoneId, int usage);
+    int[] getUsagesForVolumeGroupId(int zoneId, int groupId);
 
     /**
      * IBinder is ICarVolumeCallback but passed as IBinder due to aidl hidden.
diff --git a/car-lib/src/android/car/media/ICarVolumeCallback.aidl b/car-lib/src/android/car/media/ICarVolumeCallback.aidl
index 8540680..9672983 100644
--- a/car-lib/src/android/car/media/ICarVolumeCallback.aidl
+++ b/car-lib/src/android/car/media/ICarVolumeCallback.aidl
@@ -27,12 +27,12 @@
      * The changed-to volume index is not included, the caller is encouraged to
      * get the current group volume index via CarAudioManager.
      */
-    void onGroupVolumeChanged(int groupId, int flags);
+    void onGroupVolumeChanged(int zoneId, int groupId, int flags);
 
     /**
      * This is called whenever the master mute state is changed.
      * The changed-to master mute state is not included, the caller is encouraged to
      * get the current master mute state via AudioManager.
      */
-    void onMasterMuteChanged(int flags);
+    void onMasterMuteChanged(int zoneId, int flags);
 }
diff --git a/car-lib/src/android/car/navigation/CarNavigationStatusManager.java b/car-lib/src/android/car/navigation/CarNavigationStatusManager.java
index 6d4a561..d7fddb1 100644
--- a/car-lib/src/android/car/navigation/CarNavigationStatusManager.java
+++ b/car-lib/src/android/car/navigation/CarNavigationStatusManager.java
@@ -15,10 +15,8 @@
  */
 package android.car.navigation;
 
-import android.car.CarApiUtil;
 import android.car.CarLibLog;
 import android.car.CarManagerBase;
-import android.car.CarNotConnectedException;
 import android.car.cluster.renderer.IInstrumentClusterNavigation;
 import android.os.Bundle;
 import android.os.IBinder;
@@ -49,16 +47,12 @@
      *
      * @param eventType event type
      * @param bundle object that holds data about the event
-     * @throws CarNotConnectedException if the connection to the car service has been lost.
      */
-    public void sendEvent(int eventType, Bundle bundle) throws CarNotConnectedException {
+    public void sendEvent(int eventType, Bundle bundle) {
         try {
             mService.onEvent(eventType, bundle);
-        } catch (IllegalStateException e) {
-            Log.e(TAG, "Illegal state sending event " + eventType, e);
-            CarApiUtil.checkCarNotConnectedExceptionFromCarService(e);
         } catch (RemoteException e) {
-            handleCarServiceRemoteExceptionAndThrow(e);
+            throw e.rethrowFromSystemServer();
         }
     }
 
@@ -69,19 +63,11 @@
     }
 
     /** Returns navigation features of instrument cluster */
-    public CarNavigationInstrumentCluster getInstrumentClusterInfo()
-            throws CarNotConnectedException {
+    public CarNavigationInstrumentCluster getInstrumentClusterInfo() {
         try {
             return mService.getInstrumentClusterInfo();
         } catch (RemoteException e) {
-            handleCarServiceRemoteExceptionAndThrow(e);
+            throw e.rethrowFromSystemServer();
         }
-        return null;
-    }
-
-    private void handleCarServiceRemoteExceptionAndThrow(RemoteException e)
-            throws CarNotConnectedException {
-        Log.e(TAG, "RemoteException from car service:" + e);
-        throw new CarNotConnectedException(e);
     }
 }
diff --git a/car-lib/src/android/car/settings/CarConfigurationManager.java b/car-lib/src/android/car/settings/CarConfigurationManager.java
index b492c4f..34d5f4a 100644
--- a/car-lib/src/android/car/settings/CarConfigurationManager.java
+++ b/car-lib/src/android/car/settings/CarConfigurationManager.java
@@ -17,10 +17,8 @@
 package android.car.settings;
 
 import android.car.CarManagerBase;
-import android.car.CarNotConnectedException;
 import android.os.IBinder;
 import android.os.RemoteException;
-import android.util.Log;
 
 /**
  * Manager that exposes car configuration values that are stored on the system.
@@ -39,14 +37,12 @@
      * Returns a configuration for Speed Bump that will determine when it kicks in.
      *
      * @return A {@link SpeedBumpConfiguration} that contains the configuration values.
-     * @throws CarNotConnectedException If the configuration cannot be retrieved.
      */
-    public SpeedBumpConfiguration getSpeedBumpConfiguration() throws CarNotConnectedException {
+    public SpeedBumpConfiguration getSpeedBumpConfiguration() {
         try {
             return mConfigurationService.getSpeedBumpConfiguration();
         } catch (RemoteException e) {
-            Log.e(TAG, "Could not retrieve SpeedBumpConfiguration", e);
-            throw new CarNotConnectedException(e);
+            throw e.rethrowFromSystemServer();
         }
     }
 
diff --git a/car-lib/src/android/car/settings/CarSettings.java b/car-lib/src/android/car/settings/CarSettings.java
index abbefc1..f89f521 100644
--- a/car-lib/src/android/car/settings/CarSettings.java
+++ b/car-lib/src/android/car/settings/CarSettings.java
@@ -68,6 +68,14 @@
          */
         public static final String LAST_ACTIVE_USER_ID =
                 "android.car.LAST_ACTIVE_USER_ID";
+
+        /**
+         * Whether default restrictions for users have been set.
+         *
+         * @hide
+         */
+        public static final String DEFAULT_USER_RESTRICTIONS_SET =
+                "android.car.DEFAULT_USER_RESTRICTIONS_SET";
     }
 
     /**
@@ -193,6 +201,12 @@
         public static final String KEY_BLUETOOTH_AUTOCONNECT_NETWORK_DEVICE_PRIORITY_1 =
                 "android.car.BLUETOOTH_AUTOCONNECT_NETWORK_DEVICE_PRIORITY_1";
 
-
+        /**
+         * Key for storing temporarily-disconnected devices and profiles.
+         * Read and written by {@link com.android.car.BluetoothDeviceConnectionPolicy}.
+         * @hide
+         */
+        public static final String KEY_BLUETOOTH_PROFILES_INHIBITED =
+                "android.car.BLUETOOTH_PROFILES_INHIBITED";
     }
 }
diff --git a/car-lib/src/android/car/storagemonitoring/CarStorageMonitoringManager.java b/car-lib/src/android/car/storagemonitoring/CarStorageMonitoringManager.java
index 2320952..ff7b099 100644
--- a/car-lib/src/android/car/storagemonitoring/CarStorageMonitoringManager.java
+++ b/car-lib/src/android/car/storagemonitoring/CarStorageMonitoringManager.java
@@ -19,19 +19,18 @@
 import android.annotation.SystemApi;
 import android.car.Car;
 import android.car.CarManagerBase;
-import android.car.CarNotConnectedException;
 import android.os.Handler;
 import android.os.IBinder;
 import android.os.RemoteException;
+
 import com.android.car.internal.SingleMessageHandler;
+
 import java.lang.ref.WeakReference;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
-import static android.car.CarApiUtil.checkCarNotConnectedExceptionFromCarService;
-
 /**
  * API for retrieving information and metrics about the flash storage.
  *
@@ -109,15 +108,12 @@
      * or one of PRE_EOL_INFO_{NORMAL|WARNING|URGENT} depending on the device state.
      */
     @RequiresPermission(value=Car.PERMISSION_STORAGE_MONITORING)
-    public int getPreEolIndicatorStatus() throws CarNotConnectedException {
+    public int getPreEolIndicatorStatus() {
         try {
             return mService.getPreEolIndicatorStatus();
-        } catch (IllegalStateException e) {
-            checkCarNotConnectedExceptionFromCarService(e);
         } catch (RemoteException e) {
-            throw new CarNotConnectedException();
+            throw e.rethrowFromSystemServer();
         }
-        return PRE_EOL_INFO_UNKNOWN;
     }
 
     /**
@@ -130,15 +126,12 @@
      * If either or both indicators are not available, they will be reported as UNKNOWN.
      */
     @RequiresPermission(value=Car.PERMISSION_STORAGE_MONITORING)
-    public WearEstimate getWearEstimate() throws CarNotConnectedException {
+    public WearEstimate getWearEstimate() {
         try {
             return mService.getWearEstimate();
-        } catch (IllegalStateException e) {
-            checkCarNotConnectedExceptionFromCarService(e);
         } catch (RemoteException e) {
-            throw new CarNotConnectedException();
+            throw e.rethrowFromSystemServer();
         }
-        return WearEstimate.UNKNOWN_ESTIMATE;
     }
 
     /**
@@ -153,15 +146,12 @@
      * If no indicators are available, an empty list will be returned.
      */
     @RequiresPermission(value=Car.PERMISSION_STORAGE_MONITORING)
-    public List<WearEstimateChange> getWearEstimateHistory() throws CarNotConnectedException {
+    public List<WearEstimateChange> getWearEstimateHistory() {
         try {
             return mService.getWearEstimateHistory();
-        } catch (IllegalStateException e) {
-            checkCarNotConnectedExceptionFromCarService(e);
         } catch (RemoteException e) {
-            throw new CarNotConnectedException();
+            throw e.rethrowFromSystemServer();
         }
-        return Collections.emptyList();
     }
 
     /**
@@ -175,15 +165,12 @@
      * If the information is not available, an empty list will be returned.
      */
     @RequiresPermission(value=Car.PERMISSION_STORAGE_MONITORING)
-    public List<IoStatsEntry> getBootIoStats() throws CarNotConnectedException {
+    public List<IoStatsEntry> getBootIoStats() {
         try {
             return mService.getBootIoStats();
-        } catch (IllegalStateException e) {
-            checkCarNotConnectedExceptionFromCarService(e);
         } catch (RemoteException e) {
-            throw new CarNotConnectedException();
+            throw e.rethrowFromSystemServer();
         }
-        return Collections.emptyList();
     }
 
     /**
@@ -208,15 +195,12 @@
      * <p>If the information is not available, SHUTDOWN_COST_INFO_MISSING will be returned.</p>s
      */
     @RequiresPermission(value=Car.PERMISSION_STORAGE_MONITORING)
-    public long getShutdownDiskWriteAmount() throws CarNotConnectedException {
+    public long getShutdownDiskWriteAmount() {
         try {
             return mService.getShutdownDiskWriteAmount();
-        } catch (IllegalStateException e) {
-            checkCarNotConnectedExceptionFromCarService(e);
         } catch (RemoteException e) {
-            throw new CarNotConnectedException();
+            throw e.rethrowFromSystemServer();
         }
-        return SHUTDOWN_COST_INFO_MISSING;
     }
 
     /**
@@ -228,15 +212,12 @@
      * If the information is not available, an empty list will be returned.
      */
     @RequiresPermission(value=Car.PERMISSION_STORAGE_MONITORING)
-    public List<IoStatsEntry> getAggregateIoStats() throws CarNotConnectedException {
+    public List<IoStatsEntry> getAggregateIoStats() {
         try {
             return mService.getAggregateIoStats();
-        } catch (IllegalStateException e) {
-            checkCarNotConnectedExceptionFromCarService(e);
         } catch (RemoteException e) {
-            throw new CarNotConnectedException();
+            throw e.rethrowFromSystemServer();
         }
-        return Collections.emptyList();
     }
 
     /**
@@ -251,15 +232,12 @@
      * If the information is not available, an empty list will be returned.
      */
     @RequiresPermission(value=Car.PERMISSION_STORAGE_MONITORING)
-    public List<IoStats> getIoStatsDeltas() throws CarNotConnectedException {
+    public List<IoStats> getIoStatsDeltas() {
         try {
             return mService.getIoStatsDeltas();
-        } catch (IllegalStateException e) {
-            checkCarNotConnectedExceptionFromCarService(e);
         } catch (RemoteException e) {
-            throw new CarNotConnectedException();
+            throw e.rethrowFromSystemServer();
         }
-        return Collections.emptyList();
     }
 
     /**
@@ -271,7 +249,7 @@
      * The timing of availability of the deltas is configurable by the OEM.
      */
     @RequiresPermission(value=Car.PERMISSION_STORAGE_MONITORING)
-    public void registerListener(IoStatsListener listener) throws CarNotConnectedException {
+    public void registerListener(IoStatsListener listener) {
         try {
             if (mListeners.isEmpty()) {
                 if (mListenerToService == null) {
@@ -280,10 +258,8 @@
                 mService.registerListener(mListenerToService);
             }
             mListeners.add(listener);
-        } catch (IllegalStateException e) {
-            checkCarNotConnectedExceptionFromCarService(e);
         } catch (RemoteException e) {
-            throw new CarNotConnectedException();
+            throw e.rethrowFromSystemServer();
         }
     }
 
@@ -291,7 +267,7 @@
      * This method removes a registered listener of I/O stats deltas.
      */
     @RequiresPermission(value=Car.PERMISSION_STORAGE_MONITORING)
-    public void unregisterListener(IoStatsListener listener) throws CarNotConnectedException {
+    public void unregisterListener(IoStatsListener listener) {
         try {
             if (!mListeners.remove(listener)) {
                 return;
@@ -300,10 +276,8 @@
                 mService.unregisterListener(mListenerToService);
                 mListenerToService = null;
             }
-        } catch (IllegalStateException e) {
-            checkCarNotConnectedExceptionFromCarService(e);
         } catch (RemoteException e) {
-            throw new CarNotConnectedException();
+            throw e.rethrowFromSystemServer();
         }
     }
 }
diff --git a/car-lib/src/android/car/trust/CarTrustAgentEnrollmentManager.java b/car-lib/src/android/car/trust/CarTrustAgentEnrollmentManager.java
new file mode 100644
index 0000000..1bb3ba0
--- /dev/null
+++ b/car-lib/src/android/car/trust/CarTrustAgentEnrollmentManager.java
@@ -0,0 +1,670 @@
+/*
+ * Copyright (C) 2019 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 android.car.trust;
+
+import static android.car.Car.PERMISSION_CAR_ENROLL_TRUST;
+
+import android.annotation.Nullable;
+import android.annotation.RequiresPermission;
+import android.annotation.SystemApi;
+import android.bluetooth.BluetoothDevice;
+import android.car.CarManagerBase;
+import android.content.Context;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.Looper;
+import android.os.Message;
+import android.os.RemoteException;
+import android.util.Log;
+
+import com.android.internal.annotations.GuardedBy;
+
+import java.lang.ref.WeakReference;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+
+/**
+ * APIs to help enroll a remote device as a trusted device that can be used to authenticate a user
+ * in the head unit.
+ * <p>
+ * The call sequence to add a new trusted device from the client should be as follows:
+ * <ol>
+ * <li> setEnrollmentCallback()
+ * <li> setBleCallback(bleCallback)
+ * <li> startEnrollmentAdvertising()
+ * <li> wait for onEnrollmentAdvertisingStarted() or
+ * <li> wait for onBleEnrollmentDeviceConnected() and check if the device connected is the right
+ * one.
+ * <li> initiateEnrollmentHandshake()
+ * <li> wait for onAuthStringAvailable() to get the pairing code to display to the user
+ * <li> enrollmentHandshakeAccepted() after user confirms the pairing code
+ * <li> wait for onEscrowTokenAdded()
+ * <li> Authenticate user's credentials by showing the lock screen
+ * <li> activateToken()
+ * <li> wait for onEscrowTokenActiveStateChanged() to add the device as a trusted device and show
+ * in the list
+ * </ol>
+ *
+ * @hide
+ */
+@SystemApi
+public final class CarTrustAgentEnrollmentManager implements CarManagerBase {
+    private static final String TAG = "CarTrustEnrollMgr";
+    private static final String KEY_HANDLE = "handle";
+    private static final String KEY_ACTIVE = "active";
+    private static final String KEY_SUCCESS = "success";
+    private static final int MSG_ENROLL_ADVERTISING_STARTED = 0;
+    private static final int MSG_ENROLL_ADVERTISING_FAILED = 1;
+    private static final int MSG_ENROLL_DEVICE_CONNECTED = 2;
+    private static final int MSG_ENROLL_DEVICE_DISCONNECTED = 3;
+    private static final int MSG_ENROLL_HANDSHAKE_FAILURE = 4;
+    private static final int MSG_ENROLL_AUTH_STRING_AVAILABLE = 5;
+    private static final int MSG_ENROLL_TOKEN_ADDED = 6;
+    private static final int MSG_ENROLL_TOKEN_REVOKED = 7;
+    private static final int MSG_ENROLL_TOKEN_STATE_CHANGED = 8;
+
+    private final Context mContext;
+    private final ICarTrustAgentEnrollment mEnrollmentService;
+    private Object mListenerLock = new Object();
+    @GuardedBy("mListenerLock")
+    private CarTrustAgentEnrollmentCallback mEnrollmentCallback;
+    @GuardedBy("mListenerLock")
+    private CarTrustAgentBleCallback mBleCallback;
+    @GuardedBy("mListenerLock")
+    private final ListenerToEnrollmentService mListenerToEnrollmentService =
+            new ListenerToEnrollmentService(this);
+    private final ListenerToBleService mListenerToBleService = new ListenerToBleService(this);
+    private final EventCallbackHandler mEventCallbackHandler;
+
+
+    /** @hide */
+    public CarTrustAgentEnrollmentManager(IBinder service, Context context, Handler handler) {
+        mContext = context;
+        mEnrollmentService = ICarTrustAgentEnrollment.Stub.asInterface(service);
+        mEventCallbackHandler = new EventCallbackHandler(this, handler.getLooper());
+    }
+
+    /** @hide */
+    @Override
+    public synchronized void onCarDisconnected() {
+    }
+
+    /**
+     * Starts broadcasting enrollment UUID on BLE.
+     * Phones can scan and connect for the enrollment process to begin.
+     */
+    @RequiresPermission(PERMISSION_CAR_ENROLL_TRUST)
+    public void startEnrollmentAdvertising() {
+        try {
+            mEnrollmentService.startEnrollmentAdvertising();
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /**
+     * Stops Enrollment advertising.
+     */
+    @RequiresPermission(PERMISSION_CAR_ENROLL_TRUST)
+    public void stopEnrollmentAdvertising() {
+        try {
+            mEnrollmentService.stopEnrollmentAdvertising();
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /**
+     * Initiates the handshake with the phone for enrollment.  This should be called after the
+     * user has confirmed the phone that is requesting enrollment.
+     *
+     * @param device the remote Bluetooth device that is trying to enroll.
+     */
+    @RequiresPermission(PERMISSION_CAR_ENROLL_TRUST)
+    public void initiateEnrollmentHandshake(BluetoothDevice device) {
+        try {
+            mEnrollmentService.initiateEnrollmentHandshake(device);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /**
+     * Confirms that the enrollment handshake has been accepted by the user.  This should be called
+     * after the user has confirmed the verification code displayed on the UI.
+     */
+    @RequiresPermission(PERMISSION_CAR_ENROLL_TRUST)
+    public void enrollmentHandshakeAccepted() {
+        try {
+            mEnrollmentService.enrollmentHandshakeAccepted();
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /**
+     * Provides an option to quit enrollment if the pairing code doesn't match for example.
+     */
+    @RequiresPermission(PERMISSION_CAR_ENROLL_TRUST)
+    public void terminateEnrollmentHandshake() {
+        try {
+            mEnrollmentService.terminateEnrollmentHandshake();
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /**
+     * Activate the newly added escrow token.
+     *
+     * @param handle the handle corresponding to the escrow token
+     */
+    @RequiresPermission(PERMISSION_CAR_ENROLL_TRUST)
+    public void activateToken(long handle) {
+        try {
+            mEnrollmentService.activateToken(handle);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /**
+     * Revoke trust for the remote device denoted by the handle.
+     *
+     * @param handle the handle associated with the escrow token
+     */
+    @RequiresPermission(PERMISSION_CAR_ENROLL_TRUST)
+    public void revokeTrust(long handle) {
+        try {
+            mEnrollmentService.revokeTrust(handle);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /**
+     * Register for enrollment event callbacks.
+     *
+     * @param callback The callback methods to call, null to unregister
+     */
+    @RequiresPermission(PERMISSION_CAR_ENROLL_TRUST)
+    public void setEnrollmentCallback(@Nullable CarTrustAgentEnrollmentCallback callback) {
+        if (callback == null) {
+            unregisterEnrollmentCallback();
+        } else {
+            registerEnrollmentCallback(callback);
+        }
+    }
+
+    private void registerEnrollmentCallback(CarTrustAgentEnrollmentCallback callback) {
+        synchronized (mListenerLock) {
+            if (callback != null && mEnrollmentCallback == null) {
+                try {
+                    mEnrollmentService.registerEnrollmentCallback(mListenerToEnrollmentService);
+                    mEnrollmentCallback = callback;
+                } catch (RemoteException e) {
+                    throw e.rethrowFromSystemServer();
+                }
+            }
+        }
+    }
+
+    private void unregisterEnrollmentCallback() {
+        synchronized (mListenerLock) {
+            if (mEnrollmentCallback != null) {
+                try {
+                    mEnrollmentService.unregisterEnrollmentCallback(mListenerToEnrollmentService);
+                } catch (RemoteException e) {
+                    throw e.rethrowFromSystemServer();
+                }
+                mEnrollmentCallback = null;
+            }
+        }
+    }
+
+    /**
+     * Register for general BLE callbacks
+     *
+     * @param callback The callback methods to call, null to unregister
+     */
+    @RequiresPermission(PERMISSION_CAR_ENROLL_TRUST)
+    public void setBleCallback(@Nullable CarTrustAgentBleCallback callback) {
+        if (callback == null) {
+            unregisterBleCallback();
+        } else {
+            registerBleCallback(callback);
+        }
+    }
+
+    private void registerBleCallback(CarTrustAgentBleCallback callback) {
+        synchronized (mListenerLock) {
+            if (callback != null && mBleCallback == null) {
+                try {
+                    mEnrollmentService.registerBleCallback(mListenerToBleService);
+                    mBleCallback = callback;
+                } catch (RemoteException e) {
+                    throw e.rethrowFromSystemServer();
+                }
+            }
+        }
+    }
+
+    private void unregisterBleCallback() {
+        synchronized (mListenerLock) {
+            if (mBleCallback != null) {
+                try {
+                    mEnrollmentService.unregisterBleCallback(mListenerToBleService);
+                } catch (RemoteException e) {
+                    throw e.rethrowFromSystemServer();
+                }
+                mBleCallback = null;
+            }
+        }
+    }
+
+    /**
+     * Provides a list of enrollment handles for the given user id.
+     * Each enrollment handle corresponds to a trusted device for the given user.
+     *
+     * @param uid user id.
+     * @return list of the Enrollment handles for the user id.
+     */
+    @RequiresPermission(PERMISSION_CAR_ENROLL_TRUST)
+    public List<Integer> getEnrollmentHandlesForUser(int uid) {
+        try {
+            return Arrays.stream(
+                    mEnrollmentService.getEnrollmentHandlesForUser(uid)).boxed().collect(
+                    Collectors.toList());
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    private Handler getEventCallbackHandler() {
+        return mEventCallbackHandler;
+    }
+
+    /**
+     * Callback interface for Trusted device enrollment applications to implement.  The applications
+     * get notified on various enrollment state change events.
+     */
+    public interface CarTrustAgentEnrollmentCallback {
+        /**
+         * Communicate about failure/timeouts in the handshake process.
+         *
+         * @param device    the remote device trying to enroll
+         * @param errorCode information on what failed.
+         */
+        void onEnrollmentHandshakeFailure(BluetoothDevice device, int errorCode);
+
+        /**
+         * Present the pairing/authentication string to the user.
+         *
+         * @param device     the remote device trying to enroll
+         * @param authString the authentication string to show to the user to confirm across
+         *                   both devices
+         */
+        void onAuthStringAvailable(BluetoothDevice device, String authString);
+
+        /**
+         * Escrow token was received and the Trust Agent framework has generated a corresponding
+         * handle.
+         *
+         * @param handle the handle associated with the escrow token.
+         */
+        void onEscrowTokenAdded(long handle);
+
+        /**
+         * Escrow token corresponding to the given handle has been removed.
+         *
+         * @param handle  the handle associated with the escrow token.
+         * @param success status of the revoke operation.
+         */
+        void onTrustRevoked(long handle, boolean success);
+
+        /**
+         * Escrow token's active state changed.
+         *
+         * @param handle the handle associated with the escrow token
+         * @param active True if token has been activated, false if not.
+         */
+        void onEscrowTokenActiveStateChanged(long handle, boolean active);
+
+    }
+
+    /**
+     * Callback interface for Trusted device enrollment applications to implement.  The applications
+     * get notified on various BLE state change events that happen during trusted device enrollment.
+     */
+    public interface CarTrustAgentBleCallback {
+        /**
+         * Indicates a remote device connected on BLE.
+         */
+        void onBleEnrollmentDeviceConnected(BluetoothDevice device);
+
+        /**
+         * Indicates a remote device disconnected on BLE.
+         */
+        void onBleEnrollmentDeviceDisconnected(BluetoothDevice device);
+
+        /**
+         * Indicates that the device is broadcasting for trusted device enrollment on BLE.
+         */
+        void onEnrollmentAdvertisingStarted();
+
+        /**
+         * Indicates a failure in BLE broadcasting for enrollment.
+         */
+        void onEnrollmentAdvertisingFailed(int errorCode);
+    }
+
+    private static final class ListenerToEnrollmentService extends
+            ICarTrustAgentEnrollmentCallback.Stub {
+        private final WeakReference<CarTrustAgentEnrollmentManager> mMgr;
+
+        ListenerToEnrollmentService(CarTrustAgentEnrollmentManager mgr) {
+            mMgr = new WeakReference<>(mgr);
+        }
+
+        /**
+         * Communicate about failure/timeouts in the handshake process.
+         */
+        @Override
+        public void onEnrollmentHandshakeFailure(BluetoothDevice device, int errorCode) {
+            CarTrustAgentEnrollmentManager enrollmentManager = mMgr.get();
+            if (enrollmentManager == null) {
+                return;
+            }
+            enrollmentManager.getEventCallbackHandler().sendMessage(
+                    enrollmentManager.getEventCallbackHandler().obtainMessage(
+                            MSG_ENROLL_HANDSHAKE_FAILURE, new AuthInfo(device, null, errorCode)));
+        }
+
+        /**
+         * Present the pairing/authentication string to the user.
+         */
+        @Override
+        public void onAuthStringAvailable(BluetoothDevice device, String authString) {
+            CarTrustAgentEnrollmentManager enrollmentManager = mMgr.get();
+            if (enrollmentManager == null) {
+                return;
+            }
+            enrollmentManager.getEventCallbackHandler().sendMessage(
+                    enrollmentManager.getEventCallbackHandler().obtainMessage(
+                            MSG_ENROLL_AUTH_STRING_AVAILABLE, new AuthInfo(device, authString, 0)));
+        }
+
+        /**
+         * Escrow token was received and the Trust Agent framework has generated a corresponding
+         * handle.
+         */
+        @Override
+        public void onEscrowTokenAdded(long handle) {
+            CarTrustAgentEnrollmentManager enrollmentManager = mMgr.get();
+            if (enrollmentManager == null) {
+                return;
+            }
+            Message message = enrollmentManager.getEventCallbackHandler().obtainMessage(
+                    MSG_ENROLL_TOKEN_ADDED);
+            Bundle data = new Bundle();
+            data.putLong(KEY_HANDLE, handle);
+            message.setData(data);
+            enrollmentManager.getEventCallbackHandler().sendMessage(message);
+        }
+
+        /**
+         * Escrow token corresponding to the given handle has been removed.
+         */
+        @Override
+        public void onTrustRevoked(long handle, boolean success) {
+            CarTrustAgentEnrollmentManager enrollmentManager = mMgr.get();
+            if (enrollmentManager == null) {
+                return;
+            }
+            Message message = enrollmentManager.getEventCallbackHandler().obtainMessage(
+                    MSG_ENROLL_TOKEN_REVOKED);
+            Bundle data = new Bundle();
+            data.putLong(KEY_HANDLE, handle);
+            data.putBoolean(KEY_SUCCESS, success);
+            message.setData(data);
+            enrollmentManager.getEventCallbackHandler().sendMessage(message);
+        }
+
+        /**
+         * Escrow token's active state changed.
+         */
+        @Override
+        public void onEscrowTokenActiveStateChanged(long handle, boolean active) {
+            CarTrustAgentEnrollmentManager enrollmentManager = mMgr.get();
+            if (enrollmentManager == null) {
+                return;
+            }
+            Message message = enrollmentManager.getEventCallbackHandler().obtainMessage(
+                    MSG_ENROLL_TOKEN_STATE_CHANGED);
+            Bundle data = new Bundle();
+            data.putLong(KEY_HANDLE, handle);
+            data.putBoolean(KEY_ACTIVE, active);
+            message.setData(data);
+            enrollmentManager.getEventCallbackHandler().sendMessage(message);
+        }
+    }
+
+    private static final class ListenerToBleService extends ICarTrustAgentBleCallback.Stub {
+        private final WeakReference<CarTrustAgentEnrollmentManager> mMgr;
+
+        ListenerToBleService(CarTrustAgentEnrollmentManager mgr) {
+            mMgr = new WeakReference<>(mgr);
+        }
+
+        /**
+         * Called when the GATT server is started and BLE is successfully advertising for
+         * enrollment.
+         */
+        public void onEnrollmentAdvertisingStarted() {
+            CarTrustAgentEnrollmentManager enrollmentManager = mMgr.get();
+            if (enrollmentManager == null) {
+                return;
+            }
+            enrollmentManager.getEventCallbackHandler().sendMessage(
+                    enrollmentManager.getEventCallbackHandler().obtainMessage(
+                            MSG_ENROLL_ADVERTISING_STARTED));
+        }
+
+        /**
+         * Called when the BLE enrollment advertisement fails to start.
+         * see AdvertiseCallback#ADVERTISE_FAILED_* for possible error codes.
+         */
+        public void onEnrollmentAdvertisingFailed(int errorCode) {
+            CarTrustAgentEnrollmentManager enrollmentManager = mMgr.get();
+            if (enrollmentManager == null) {
+                return;
+            }
+            enrollmentManager.getEventCallbackHandler().sendMessage(
+                    enrollmentManager.getEventCallbackHandler().obtainMessage(
+                            MSG_ENROLL_ADVERTISING_FAILED, errorCode));
+        }
+
+        /**
+         * Called when a remote device is connected on BLE.
+         */
+        public void onBleEnrollmentDeviceConnected(BluetoothDevice device) {
+            CarTrustAgentEnrollmentManager enrollmentManager = mMgr.get();
+            if (enrollmentManager == null) {
+                return;
+            }
+            enrollmentManager.getEventCallbackHandler().sendMessage(
+                    enrollmentManager.getEventCallbackHandler().obtainMessage(
+                            MSG_ENROLL_DEVICE_CONNECTED, device));
+        }
+
+        /**
+         * Called when a remote device is disconnected on BLE.
+         */
+        public void onBleEnrollmentDeviceDisconnected(BluetoothDevice device) {
+            CarTrustAgentEnrollmentManager enrollmentManager = mMgr.get();
+            if (enrollmentManager == null) {
+                return;
+            }
+            enrollmentManager.getEventCallbackHandler().sendMessage(
+                    enrollmentManager.getEventCallbackHandler().obtainMessage(
+                            MSG_ENROLL_DEVICE_DISCONNECTED, device));
+        }
+    }
+
+    /**
+     * Callback Handler to handle dispatching the enrollment state changes to the corresponding
+     * listeners
+     */
+    private static final class EventCallbackHandler extends Handler {
+        private final WeakReference<CarTrustAgentEnrollmentManager> mEnrollmentManager;
+
+        EventCallbackHandler(CarTrustAgentEnrollmentManager manager, Looper looper) {
+            super(looper);
+            mEnrollmentManager = new WeakReference<>(manager);
+        }
+
+        @Override
+        public void handleMessage(Message message) {
+            CarTrustAgentEnrollmentManager enrollmentManager = mEnrollmentManager.get();
+            if (enrollmentManager == null) {
+                return;
+            }
+            switch (message.what) {
+                case MSG_ENROLL_ADVERTISING_STARTED:
+                case MSG_ENROLL_ADVERTISING_FAILED:
+                case MSG_ENROLL_DEVICE_CONNECTED:
+                case MSG_ENROLL_DEVICE_DISCONNECTED:
+                    enrollmentManager.dispatchBleCallback(message);
+                    break;
+                case MSG_ENROLL_HANDSHAKE_FAILURE:
+                case MSG_ENROLL_AUTH_STRING_AVAILABLE:
+                case MSG_ENROLL_TOKEN_ADDED:
+                case MSG_ENROLL_TOKEN_REVOKED:
+                case MSG_ENROLL_TOKEN_STATE_CHANGED:
+                    enrollmentManager.dispatchEnrollmentCallback(message);
+                    break;
+                default:
+                    Log.e(TAG, "Unknown message:" + message.what);
+                    break;
+            }
+        }
+    }
+
+    /**
+     * Dispatch BLE related state change callbacks
+     *
+     * @param message Message to handle and dispatch
+     */
+    private void dispatchBleCallback(Message message) {
+        CarTrustAgentBleCallback bleCallback;
+        synchronized (mListenerLock) {
+            bleCallback = mBleCallback;
+        }
+        if (bleCallback == null) {
+            return;
+        }
+        switch (message.what) {
+            case MSG_ENROLL_ADVERTISING_STARTED:
+                bleCallback.onEnrollmentAdvertisingStarted();
+                break;
+            case MSG_ENROLL_ADVERTISING_FAILED:
+                bleCallback.onEnrollmentAdvertisingFailed((int) message.obj);
+                break;
+            case MSG_ENROLL_DEVICE_CONNECTED:
+                bleCallback.onBleEnrollmentDeviceConnected((BluetoothDevice) message.obj);
+                break;
+            case MSG_ENROLL_DEVICE_DISCONNECTED:
+                bleCallback.onBleEnrollmentDeviceDisconnected((BluetoothDevice) message.obj);
+                break;
+            default:
+                break;
+        }
+    }
+
+    /**
+     * Dispatch Enrollment related state changes to the listener.
+     *
+     * @param message Message to handle and dispatch
+     */
+    private void dispatchEnrollmentCallback(Message message) {
+        CarTrustAgentEnrollmentCallback enrollmentCallback;
+        synchronized (mListenerLock) {
+            enrollmentCallback = mEnrollmentCallback;
+        }
+        if (enrollmentCallback == null) {
+            return;
+        }
+        AuthInfo auth;
+        Bundle data;
+        switch (message.what) {
+            case MSG_ENROLL_HANDSHAKE_FAILURE:
+                auth = (AuthInfo) message.obj;
+                enrollmentCallback.onEnrollmentHandshakeFailure(auth.mDevice, auth.mErrorCode);
+                break;
+            case MSG_ENROLL_AUTH_STRING_AVAILABLE:
+                auth = (AuthInfo) message.obj;
+                if (auth.mDevice != null && auth.mAuthString != null) {
+                    enrollmentCallback.onAuthStringAvailable(auth.mDevice, auth.mAuthString);
+                }
+                break;
+            case MSG_ENROLL_TOKEN_ADDED:
+                data = message.getData();
+                if (data == null) {
+                    break;
+                }
+                enrollmentCallback.onEscrowTokenAdded(data.getLong(KEY_HANDLE));
+                break;
+            case MSG_ENROLL_TOKEN_REVOKED:
+                data = message.getData();
+                if (data == null) {
+                    break;
+                }
+                enrollmentCallback.onTrustRevoked(data.getLong(KEY_HANDLE),
+                        data.getBoolean(KEY_SUCCESS));
+                break;
+            case MSG_ENROLL_TOKEN_STATE_CHANGED:
+                data = message.getData();
+                if (data == null) {
+                    break;
+                }
+                enrollmentCallback.onEscrowTokenActiveStateChanged(data.getLong(KEY_HANDLE),
+                        data.getBoolean(KEY_ACTIVE));
+                break;
+            default:
+                break;
+        }
+    }
+
+    /**
+     * Container class to pass information through a Message to the handler.
+     */
+    private static class AuthInfo {
+        final BluetoothDevice mDevice;
+        @Nullable
+        final String mAuthString;
+        final int mErrorCode;
+
+        AuthInfo(BluetoothDevice device, @Nullable String authString, int errorCode) {
+            mDevice = device;
+            mAuthString = authString;
+            mErrorCode = errorCode;
+        }
+    }
+}
diff --git a/car-lib/src/android/car/trust/ICarTrustAgentBleCallback.aidl b/car-lib/src/android/car/trust/ICarTrustAgentBleCallback.aidl
index 9f28db9..e2a972d 100644
--- a/car-lib/src/android/car/trust/ICarTrustAgentBleCallback.aidl
+++ b/car-lib/src/android/car/trust/ICarTrustAgentBleCallback.aidl
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2019 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.
@@ -19,29 +19,29 @@
 import android.bluetooth.BluetoothDevice;
 
 /**
- * Callback interface for BLE connection state changes.
+ * Callback interface for BLE connection state changes during trusted device enrollment.
  *
  * @hide
  */
 oneway interface ICarTrustAgentBleCallback {
     /**
-     * Called when the GATT server is started and BLE is successfully advertising.
+     * Called when the GATT server is started and BLE is successfully advertising for enrollment.
      */
-    void onBleServerStartSuccess();
+    void onEnrollmentAdvertisingStarted();
 
     /**
-     * Called when the BLE advertisement fails to start.
+     * Called when the BLE enrollment advertisement fails to start.
      * see AdvertiseCallback#ADVERTISE_FAILED_* for possible error codes.
      */
-    void onBleServerStartFailure(int errorCode);
+    void onEnrollmentAdvertisingFailed(int errorCode);
 
     /**
-     * Called when a device is connected.
+     * Called when a remote device is connected on BLE.
      */
-    void onBleDeviceConnected(in BluetoothDevice device);
+    void onBleEnrollmentDeviceConnected(in BluetoothDevice device);
 
     /**
-     * Called when a device is disconnected.
+     * Called when a remote device is disconnected on BLE.
      */
-    void onBleDeviceDisconnected(in BluetoothDevice device);
+    void onBleEnrollmentDeviceDisconnected(in BluetoothDevice device);
 }
diff --git a/car-lib/src/android/car/trust/ICarTrustAgentBleService.aidl b/car-lib/src/android/car/trust/ICarTrustAgentBleService.aidl
deleted file mode 100644
index 4dec6a0..0000000
--- a/car-lib/src/android/car/trust/ICarTrustAgentBleService.aidl
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (C) 2018 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 android.car.trust;
-
-import android.bluetooth.BluetoothDevice;
-import android.car.trust.ICarTrustAgentBleCallback;
-import android.car.trust.ICarTrustAgentEnrolmentCallback;
-import android.car.trust.ICarTrustAgentTokenRequestDelegate;
-import android.car.trust.ICarTrustAgentTokenResponseCallback;
-import android.car.trust.ICarTrustAgentUnlockCallback;
-
-/**
- * Binder interface for CarTrustAgentBleService.
- *
- * @hide
- */
-interface ICarTrustAgentBleService {
-    /** General BLE */
-    void registerBleCallback(in ICarTrustAgentBleCallback callback);
-    void unregisterBleCallback(in ICarTrustAgentBleCallback callback);
-
-    /** Enrolment */
-    void startEnrolmentAdvertising();
-    void stopEnrolmentAdvertising();
-    void sendEnrolmentHandle(in BluetoothDevice device, long handle);
-    void registerEnrolmentCallback(in ICarTrustAgentEnrolmentCallback callback);
-    void unregisterEnrolmentCallback(in ICarTrustAgentEnrolmentCallback callback);
-
-    /** Unlock */
-    void startUnlockAdvertising();
-    void stopUnlockAdvertising();
-    void registerUnlockCallback(in ICarTrustAgentUnlockCallback callback);
-    void unregisterUnlockCallback(in ICarTrustAgentUnlockCallback callback);
-
-    /** Token request */
-    void setTokenRequestDelegate(in ICarTrustAgentTokenRequestDelegate delegate);
-    void revokeTrust();
-    void addEscrowToken(in byte[] token, int uid);
-    void removeEscrowToken(long handle, int uid);
-    void isEscrowTokenActive(long handle, int uid);
-
-    /** Token response */
-    void setTokenResponseCallback(in ICarTrustAgentTokenResponseCallback callback);
-    void onEscrowTokenAdded(in byte[] token, long handle, int uid);
-    void onEscrowTokenRemoved(long handle, boolean successful);
-    void onEscrowTokenActiveStateChanged(long handle, boolean active);
-
-    /** Management */
-    int getUserIdByEscrowTokenHandle(long tokenHandle);
-}
diff --git a/car-lib/src/android/car/trust/ICarTrustAgentEnrollment.aidl b/car-lib/src/android/car/trust/ICarTrustAgentEnrollment.aidl
new file mode 100644
index 0000000..0476f70
--- /dev/null
+++ b/car-lib/src/android/car/trust/ICarTrustAgentEnrollment.aidl
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2019 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 android.car.trust;
+
+import android.bluetooth.BluetoothDevice;
+import android.car.trust.ICarTrustAgentBleCallback;
+import android.car.trust.ICarTrustAgentEnrollmentCallback;
+
+/**
+ * Binder interface for CarTrustAgentEnrollmentService. The service implements the functionality
+ * to communicate with the remote device securely to enroll the remote device as a trusted device.
+ *
+ * @hide
+ */
+interface ICarTrustAgentEnrollment {
+    void startEnrollmentAdvertising();
+    void stopEnrollmentAdvertising();
+    void initiateEnrollmentHandshake(in BluetoothDevice device);
+    void enrollmentHandshakeAccepted();
+    void terminateEnrollmentHandshake();
+    void activateToken(in long handle);
+    void revokeTrust(in long handle);
+    int[] getEnrollmentHandlesForUser(in int uid);
+    void registerEnrollmentCallback(in ICarTrustAgentEnrollmentCallback callback);
+    void unregisterEnrollmentCallback(in ICarTrustAgentEnrollmentCallback callback);
+    void registerBleCallback(in ICarTrustAgentBleCallback callback);
+    void unregisterBleCallback(in ICarTrustAgentBleCallback callback);
+}
diff --git a/car-lib/src/android/car/trust/ICarTrustAgentEnrollmentCallback.aidl b/car-lib/src/android/car/trust/ICarTrustAgentEnrollmentCallback.aidl
new file mode 100644
index 0000000..62cef9c
--- /dev/null
+++ b/car-lib/src/android/car/trust/ICarTrustAgentEnrollmentCallback.aidl
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2019 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 android.car.trust;
+
+import android.bluetooth.BluetoothDevice;
+
+/**
+ * Callback interface for state changes during Trusted device enrollment.
+ *
+ * @hide
+ */
+oneway interface ICarTrustAgentEnrollmentCallback {
+    /**
+     * Communicate about failure/timeouts in the handshake process.
+     */
+    void onEnrollmentHandshakeFailure(in BluetoothDevice device, in int errorCode);
+
+    /**
+     * Present the pairing/authentication string to the user.
+     */
+    void onAuthStringAvailable(in BluetoothDevice device, in String authString);
+
+    /**
+     * Escrow token was received and the Trust Agent framework has generated a corresponding handle.
+     */
+    void onEscrowTokenAdded(in long handle);
+
+    /*
+     * Escrow token corresponding to the given handle has been removed.
+     */
+    void onTrustRevoked(in long handle, in boolean success);
+
+    /**
+     * Escrow token's active state changed.
+     */
+    void onEscrowTokenActiveStateChanged(in long handle, in boolean active);
+
+}
diff --git a/car-lib/src/android/car/trust/ICarTrustAgentEnrolmentCallback.aidl b/car-lib/src/android/car/trust/ICarTrustAgentEnrolmentCallback.aidl
deleted file mode 100644
index 7f12404..0000000
--- a/car-lib/src/android/car/trust/ICarTrustAgentEnrolmentCallback.aidl
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2018 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 android.car.trust;
-
-/**
- * Callback interface for CarTrustAgentService enrolment.
- *
- * @hide
- */
-oneway interface ICarTrustAgentEnrolmentCallback {
-    /** Called when the enrolment data is received */
-    void onEnrolmentDataReceived(in byte[] token);
-}
diff --git a/car-lib/src/android/car/trust/ICarTrustAgentTokenRequestDelegate.aidl b/car-lib/src/android/car/trust/ICarTrustAgentTokenRequestDelegate.aidl
deleted file mode 100644
index 3c61d4b..0000000
--- a/car-lib/src/android/car/trust/ICarTrustAgentTokenRequestDelegate.aidl
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2018 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 android.car.trust;
-
-/**
- * Delegate interface for escrow token exchange request.
- *
- * TrustAgentService uses async pattern and we therefore divide the
- * request and response into two separate AIDL interfaces.
- *
- * CarBleTrustAgent would implement this interface and set itself as a delegate.
- *
- * @hide
- */
-interface ICarTrustAgentTokenRequestDelegate {
-    /** Called to revoke trust */
-    void revokeTrust();
-
-    /** Called to add escrow token for foreground user */
-    void addEscrowToken(in byte[] token, int uid);
-
-    /** Called to remove escrow token for foreground user */
-    void removeEscrowToken(long handle, int uid);
-
-    /** Called to query if the foreground user has active escrow token */
-    void isEscrowTokenActive(long handle, int uid);
-}
diff --git a/car-lib/src/android/car/trust/ICarTrustAgentTokenResponseCallback.aidl b/car-lib/src/android/car/trust/ICarTrustAgentTokenResponseCallback.aidl
deleted file mode 100644
index 5dbc3bc..0000000
--- a/car-lib/src/android/car/trust/ICarTrustAgentTokenResponseCallback.aidl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2018 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 android.car.trust;
-
-/**
- * Callback interface for escrow token exchange response.
- *
- * TrustAgentService uses async pattern and we therefore divide the
- * request and response into two separate AIDL interfaces.
- *
- * @hide
- */
-interface ICarTrustAgentTokenResponseCallback {
-    /** Called after escrow token is added for foreground user */
-    void onEscrowTokenAdded(out byte[] token, long handle, int uid);
-
-    /** Called after escrow token is removed for foreground user */
-    void onEscrowTokenRemoved(long handle, boolean successful);
-
-    /** Called after escrow token active state is changed for foreground user */
-    void onEscrowTokenActiveStateChanged(long handle, boolean active);
-}
diff --git a/car-lib/src/android/car/trust/ICarTrustAgentUnlockCallback.aidl b/car-lib/src/android/car/trust/ICarTrustAgentUnlockCallback.aidl
deleted file mode 100644
index e280bf0..0000000
--- a/car-lib/src/android/car/trust/ICarTrustAgentUnlockCallback.aidl
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2018 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 android.car.trust;
-
-/**
- * Callback interface for CarTrustAgentService unlock.
- *
- * @hide
- */
-oneway interface ICarTrustAgentUnlockCallback {
-    /** Called when the unlock token is received */
-    void onUnlockDataReceived(in byte[] token, long handle);
-}
diff --git a/car-lib/src/android/car/vms/VmsPublisherClientService.java b/car-lib/src/android/car/vms/VmsPublisherClientService.java
index d18c06c..bdd2510 100644
--- a/car-lib/src/android/car/vms/VmsPublisherClientService.java
+++ b/car-lib/src/android/car/vms/VmsPublisherClientService.java
@@ -17,6 +17,7 @@
 package android.car.vms;
 
 
+import android.annotation.Nullable;
 import android.annotation.SystemApi;
 import android.app.Service;
 import android.content.Intent;
@@ -25,7 +26,6 @@
 import android.os.Looper;
 import android.os.Message;
 import android.os.RemoteException;
-import android.annotation.Nullable;
 import android.util.Log;
 
 import com.android.internal.annotations.GuardedBy;
@@ -113,7 +113,7 @@
         try {
             mVmsPublisherService.publish(token, layer, publisherId, payload);
         } catch (RemoteException e) {
-            Log.e(TAG, "unable to publish message: " + payload, e);
+            throw e.rethrowFromSystemServer();
         }
     }
 
@@ -134,7 +134,7 @@
             mVmsPublisherService.setLayersOffering(token, offering);
             VmsOperationRecorder.get().setLayersOffering(offering);
         } catch (RemoteException e) {
-            Log.e(TAG, "unable to set layers offering: " + offering, e);
+            throw e.rethrowFromSystemServer();
         }
     }
 
@@ -162,7 +162,7 @@
             Log.i(TAG, "Getting publisher static ID");
             publisherId = mVmsPublisherService.getPublisherId(publisherInfo);
         } catch (RemoteException e) {
-            Log.e(TAG, "unable to invoke binder method.", e);
+            throw e.rethrowFromSystemServer();
         }
         if (publisherId == null) {
             throw new IllegalStateException("VmsPublisherService cannot get a publisher static ID.");
@@ -184,9 +184,8 @@
         try {
             return mVmsPublisherService.getSubscriptions();
         } catch (RemoteException e) {
-            Log.e(TAG, "unable to invoke binder method.", e);
+            throw e.rethrowFromSystemServer();
         }
-        return null;
     }
 
     private void setVmsPublisherService(IVmsPublisherService service) {
diff --git a/car-lib/src/android/car/vms/VmsSubscriberManager.java b/car-lib/src/android/car/vms/VmsSubscriberManager.java
index fe9e8c3..8ca0878 100644
--- a/car-lib/src/android/car/vms/VmsSubscriberManager.java
+++ b/car-lib/src/android/car/vms/VmsSubscriberManager.java
@@ -19,22 +19,15 @@
 import android.annotation.CallbackExecutor;
 import android.annotation.NonNull;
 import android.annotation.SystemApi;
-import android.car.Car;
 import android.car.CarManagerBase;
-import android.car.CarNotConnectedException;
-import android.car.vms.VmsSubscriberManager.VmsSubscriberClientCallback;
-import android.os.Handler;
 import android.os.Binder;
 import android.os.IBinder;
-import android.os.Looper;
-import android.os.Message;
 import android.os.RemoteException;
 import android.util.Log;
 
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.util.Preconditions;
 
-import java.lang.ref.WeakReference;
 import java.util.concurrent.Executor;
 
 /**
@@ -120,9 +113,9 @@
      * @param clientCallback subscriber callback that will handle onVmsMessageReceived events.
      * @throws IllegalStateException if the client callback was already set.
      */
-    public void setVmsSubscriberClientCallback(@NonNull @CallbackExecutor Executor executor,
-                @NonNull VmsSubscriberClientCallback clientCallback)
-          throws CarNotConnectedException {
+    public void setVmsSubscriberClientCallback(
+            @NonNull @CallbackExecutor Executor executor,
+            @NonNull VmsSubscriberClientCallback clientCallback) {
         Preconditions.checkNotNull(clientCallback);
         Preconditions.checkNotNull(executor);
         synchronized (mClientCallbackLock) {
@@ -135,63 +128,49 @@
         try {
             mVmsSubscriberService.addVmsSubscriberToNotifications(mSubscriberManagerClient);
         } catch (RemoteException e) {
-            Log.e(TAG, "Could not connect: ", e);
-            throw new CarNotConnectedException(e);
+            throw e.rethrowFromSystemServer();
         }
     }
 
 
     /**
      * Clears the client callback which disables communication with the client.
-     *
-     * @throws CarNotConnectedException
      */
-    public void clearVmsSubscriberClientCallback() throws CarNotConnectedException {
+    public void clearVmsSubscriberClientCallback() {
         synchronized (mClientCallbackLock) {
             if (mExecutor == null) return;
         }
         try {
             mVmsSubscriberService.removeVmsSubscriberToNotifications(mSubscriberManagerClient);
         } catch (RemoteException e) {
-            Log.e(TAG, "Could not connect: ", e);
-            throw new CarNotConnectedException(e);
-        }
-
-        synchronized (mClientCallbackLock) {
-            mClientCallback = null;
-            mExecutor = null;
+            throw e.rethrowFromSystemServer();
+        } finally {
+            synchronized (mClientCallbackLock) {
+                mClientCallback = null;
+                mExecutor = null;
+            }
         }
     }
 
     /**
      * Returns a serialized publisher information for a publisher ID.
      */
-    public byte[] getPublisherInfo(int publisherId)
-            throws CarNotConnectedException, IllegalStateException {
+    public byte[] getPublisherInfo(int publisherId) {
         try {
             return mVmsSubscriberService.getPublisherInfo(publisherId);
         } catch (RemoteException e) {
-            Log.e(TAG, "Could not connect: ", e);
-            throw new CarNotConnectedException(e);
-        } catch (IllegalStateException ex) {
-            Car.checkCarNotConnectedExceptionFromCarService(ex);
-            throw new IllegalStateException(ex);
+            throw e.rethrowFromSystemServer();
         }
     }
 
     /**
      * Returns the available layers.
      */
-    public VmsAvailableLayers getAvailableLayers()
-            throws CarNotConnectedException, IllegalStateException {
+    public VmsAvailableLayers getAvailableLayers() {
         try {
             return mVmsSubscriberService.getAvailableLayers();
         } catch (RemoteException e) {
-            Log.e(TAG, "Could not connect: ", e);
-            throw new CarNotConnectedException(e);
-        } catch (IllegalStateException ex) {
-            Car.checkCarNotConnectedExceptionFromCarService(ex);
-            throw new IllegalStateException(ex);
+            throw e.rethrowFromSystemServer();
         }
     }
 
@@ -202,16 +181,13 @@
      * @throws IllegalStateException if the client callback was not set via
      *                               {@link #setVmsSubscriberClientCallback}.
      */
-    public void subscribe(VmsLayer layer) throws CarNotConnectedException {
+    public void subscribe(VmsLayer layer) {
         verifySubscriptionIsAllowed();
         try {
             mVmsSubscriberService.addVmsSubscriber(mSubscriberManagerClient, layer);
             VmsOperationRecorder.get().subscribe(layer);
         } catch (RemoteException e) {
-            Log.e(TAG, "Could not connect: ", e);
-            throw new CarNotConnectedException(e);
-        } catch (IllegalStateException ex) {
-            Car.checkCarNotConnectedExceptionFromCarService(ex);
+            throw e.rethrowFromSystemServer();
         }
     }
 
@@ -223,30 +199,25 @@
      * @throws IllegalStateException if the client callback was not set via
      *                               {@link #setVmsSubscriberClientCallback}.
      */
-    public void subscribe(VmsLayer layer, int publisherId) throws CarNotConnectedException {
+    public void subscribe(VmsLayer layer, int publisherId) {
         verifySubscriptionIsAllowed();
         try {
             mVmsSubscriberService.addVmsSubscriberToPublisher(
                     mSubscriberManagerClient, layer, publisherId);
             VmsOperationRecorder.get().subscribe(layer, publisherId);
         } catch (RemoteException e) {
-            Log.e(TAG, "Could not connect: ", e);
-            throw new CarNotConnectedException(e);
-        } catch (IllegalStateException ex) {
-            Car.checkCarNotConnectedExceptionFromCarService(ex);
+            throw e.rethrowFromSystemServer();
         }
     }
 
-    public void startMonitoring() throws CarNotConnectedException {
+    /** Starts monitoring. */
+    public void startMonitoring() {
         verifySubscriptionIsAllowed();
         try {
             mVmsSubscriberService.addVmsSubscriberPassive(mSubscriberManagerClient);
             VmsOperationRecorder.get().startMonitoring();
         } catch (RemoteException e) {
-            Log.e(TAG, "Could not connect: ", e);
-            throw new CarNotConnectedException(e);
-        } catch (IllegalStateException ex) {
-            Car.checkCarNotConnectedExceptionFromCarService(ex);
+            throw e.rethrowFromSystemServer();
         }
     }
 
@@ -263,10 +234,7 @@
             mVmsSubscriberService.removeVmsSubscriber(mSubscriberManagerClient, layer);
             VmsOperationRecorder.get().unsubscribe(layer);
         } catch (RemoteException e) {
-            Log.e(TAG, "Failed to clear subscriber", e);
-            // ignore
-        } catch (IllegalStateException ex) {
-            Car.hideCarNotConnectedExceptionFromCarService(ex);
+            throw e.rethrowFromSystemServer();
         }
     }
 
@@ -284,10 +252,7 @@
                     mSubscriberManagerClient, layer, publisherId);
             VmsOperationRecorder.get().unsubscribe(layer, publisherId);
         } catch (RemoteException e) {
-            Log.e(TAG, "Failed to clear subscriber", e);
-            // ignore
-        } catch (IllegalStateException ex) {
-            Car.hideCarNotConnectedExceptionFromCarService(ex);
+            throw e.rethrowFromSystemServer();
         }
     }
 
@@ -296,10 +261,7 @@
             mVmsSubscriberService.removeVmsSubscriberPassive(mSubscriberManagerClient);
             VmsOperationRecorder.get().stopMonitoring();
         } catch (RemoteException e) {
-            Log.e(TAG, "Failed to clear subscriber ", e);
-            // ignore
-        } catch (IllegalStateException ex) {
-            Car.hideCarNotConnectedExceptionFromCarService(ex);
+            throw e.rethrowFromSystemServer();
         }
     }
 
diff --git a/car-maps-placeholder/res/values-af/strings.xml b/car-maps-placeholder/res/values-af/strings.xml
new file mode 100644
index 0000000..f7f0fe0
--- /dev/null
+++ b/car-maps-placeholder/res/values-af/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Maps"</string>
+    <string name="error_text" msgid="5575174711944349180">"Geen kaarteprogram is geïnstalleer nie. Kontak asseblief jou motorvervaardiger."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-am/strings.xml b/car-maps-placeholder/res/values-am/strings.xml
new file mode 100644
index 0000000..e0af470
--- /dev/null
+++ b/car-maps-placeholder/res/values-am/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"ካርታዎች"</string>
+    <string name="error_text" msgid="5575174711944349180">"ምንም የካርታዎች መተግበሪያ አልተጫነም። የእርስዎን መኪና አምራች እባክዎ ያነጋግሩ።"</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-ar/strings.xml b/car-maps-placeholder/res/values-ar/strings.xml
new file mode 100644
index 0000000..ccb8e52
--- /dev/null
+++ b/car-maps-placeholder/res/values-ar/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"خرائط"</string>
+    <string name="error_text" msgid="5575174711944349180">"لم يتم تثبيت تطبيقات خرائط. يُرجى التواصل مع الشركة المصنّعة للسيارة."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-as/strings.xml b/car-maps-placeholder/res/values-as/strings.xml
new file mode 100644
index 0000000..e771f6f
--- /dev/null
+++ b/car-maps-placeholder/res/values-as/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Maps"</string>
+    <string name="error_text" msgid="5575174711944349180">"কোনো মেপ এপ্লিকেশ্বন ইনষ্টল কৰি থোৱা হোৱা নাই। অনুগ্ৰহ কৰি আপোনাৰ গাড়ীৰ নিৰ্মাতাৰ সৈতে যোগাযোগ কৰক।"</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-az/strings.xml b/car-maps-placeholder/res/values-az/strings.xml
new file mode 100644
index 0000000..125fbf8
--- /dev/null
+++ b/car-maps-placeholder/res/values-az/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Xəritə"</string>
+    <string name="error_text" msgid="5575174711944349180">"Xəritə tətbiqi quraşdırılmayıb. Avtomobilin istehsalçısı ilə əlaqə saxlayın."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-b+sr+Latn/strings.xml b/car-maps-placeholder/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 0000000..cf1dea2
--- /dev/null
+++ b/car-maps-placeholder/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Mape"</string>
+    <string name="error_text" msgid="5575174711944349180">"Nije instalirana aplikacija za mape. Kontaktirajte proizvođača automobila."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-be/strings.xml b/car-maps-placeholder/res/values-be/strings.xml
new file mode 100644
index 0000000..9ad9bcd
--- /dev/null
+++ b/car-maps-placeholder/res/values-be/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Карты"</string>
+    <string name="error_text" msgid="5575174711944349180">"Праграма для навігацыі не ўсталявана. Звярніцеся да вытворцы аўтамабіля."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-bg/strings.xml b/car-maps-placeholder/res/values-bg/strings.xml
new file mode 100644
index 0000000..229fbba
--- /dev/null
+++ b/car-maps-placeholder/res/values-bg/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Карти"</string>
+    <string name="error_text" msgid="5575174711944349180">"Няма инсталирано приложение за карти. Моля, свържете се с производителя на автомобила си."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-bn/strings.xml b/car-maps-placeholder/res/values-bn/strings.xml
new file mode 100644
index 0000000..35be0b5
--- /dev/null
+++ b/car-maps-placeholder/res/values-bn/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"ম্যাপ"</string>
+    <string name="error_text" msgid="5575174711944349180">"কোনও ম্যাপ অ্যাপ্লিকেশন ইনস্টল করা নেই। আপনার গাড়ির প্রস্তুতকারকের সাথে যোগাযোগ করুন।"</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-bs/strings.xml b/car-maps-placeholder/res/values-bs/strings.xml
new file mode 100644
index 0000000..cf1dea2
--- /dev/null
+++ b/car-maps-placeholder/res/values-bs/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Mape"</string>
+    <string name="error_text" msgid="5575174711944349180">"Nije instalirana aplikacija za mape. Kontaktirajte proizvođača automobila."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-ca/strings.xml b/car-maps-placeholder/res/values-ca/strings.xml
new file mode 100644
index 0000000..cd33f37
--- /dev/null
+++ b/car-maps-placeholder/res/values-ca/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Mapes"</string>
+    <string name="error_text" msgid="5575174711944349180">"No hi ha cap aplicació de mapes instal·lada. Contacta amb el fabricant del cotxe."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-cs/strings.xml b/car-maps-placeholder/res/values-cs/strings.xml
new file mode 100644
index 0000000..102f151
--- /dev/null
+++ b/car-maps-placeholder/res/values-cs/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Mapy"</string>
+    <string name="error_text" msgid="5575174711944349180">"Není nainstalována žádná mapová aplikace. Kontaktujte výrobce auta."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-da/strings.xml b/car-maps-placeholder/res/values-da/strings.xml
new file mode 100644
index 0000000..7f5d870
--- /dev/null
+++ b/car-maps-placeholder/res/values-da/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Kort"</string>
+    <string name="error_text" msgid="5575174711944349180">"Der er ikke installeret nogen kortapps. Kontakt din bilproducent."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-de/strings.xml b/car-maps-placeholder/res/values-de/strings.xml
new file mode 100644
index 0000000..eb1e434
--- /dev/null
+++ b/car-maps-placeholder/res/values-de/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Karten"</string>
+    <string name="error_text" msgid="5575174711944349180">"Keine Karten-App installiert. Bitte wende dich an den Autohersteller."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-el/strings.xml b/car-maps-placeholder/res/values-el/strings.xml
new file mode 100644
index 0000000..c78cdea
--- /dev/null
+++ b/car-maps-placeholder/res/values-el/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Χάρτες"</string>
+    <string name="error_text" msgid="5575174711944349180">"Δεν έχει εγκατασταθεί εφαρμογή χάρτη. Επικοινωνήστε με τον κατασκευαστή του αυτοκινήτου σας."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-en-rAU/strings.xml b/car-maps-placeholder/res/values-en-rAU/strings.xml
new file mode 100644
index 0000000..684f3e9
--- /dev/null
+++ b/car-maps-placeholder/res/values-en-rAU/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Maps"</string>
+    <string name="error_text" msgid="5575174711944349180">"No maps application installed. Please contact your car manufacturer."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-en-rCA/strings.xml b/car-maps-placeholder/res/values-en-rCA/strings.xml
new file mode 100644
index 0000000..684f3e9
--- /dev/null
+++ b/car-maps-placeholder/res/values-en-rCA/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Maps"</string>
+    <string name="error_text" msgid="5575174711944349180">"No maps application installed. Please contact your car manufacturer."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-en-rGB/strings.xml b/car-maps-placeholder/res/values-en-rGB/strings.xml
new file mode 100644
index 0000000..684f3e9
--- /dev/null
+++ b/car-maps-placeholder/res/values-en-rGB/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Maps"</string>
+    <string name="error_text" msgid="5575174711944349180">"No maps application installed. Please contact your car manufacturer."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-en-rIN/strings.xml b/car-maps-placeholder/res/values-en-rIN/strings.xml
new file mode 100644
index 0000000..684f3e9
--- /dev/null
+++ b/car-maps-placeholder/res/values-en-rIN/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Maps"</string>
+    <string name="error_text" msgid="5575174711944349180">"No maps application installed. Please contact your car manufacturer."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-en-rXC/strings.xml b/car-maps-placeholder/res/values-en-rXC/strings.xml
new file mode 100644
index 0000000..1ac056d
--- /dev/null
+++ b/car-maps-placeholder/res/values-en-rXC/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎‎‎‎‎‎‎‏‎‏‎‎‏‏‎‎‏‏‏‎‏‎‎‎‎‏‏‏‎‎‏‎‏‏‏‏‎‏‎‏‏‏‎‏‎‎‏‏‏‎‏‎‎‏‎Maps‎‏‎‎‏‎"</string>
+    <string name="error_text" msgid="5575174711944349180">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‏‎‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‎‏‎‏‎‏‎‎‎‏‎‏‏‏‏‎‎‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎No maps application installed. Please contact your car manufacturer.‎‏‎‎‏‎"</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-es-rUS/strings.xml b/car-maps-placeholder/res/values-es-rUS/strings.xml
new file mode 100644
index 0000000..17938eb
--- /dev/null
+++ b/car-maps-placeholder/res/values-es-rUS/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Maps"</string>
+    <string name="error_text" msgid="5575174711944349180">"No se instaló ninguna aplicación de mapas. Comunícate con el fabricante del auto."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-es/strings.xml b/car-maps-placeholder/res/values-es/strings.xml
new file mode 100644
index 0000000..9e54b75
--- /dev/null
+++ b/car-maps-placeholder/res/values-es/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Maps"</string>
+    <string name="error_text" msgid="5575174711944349180">"Ninguna aplicación de mapas instalada. Ponte en contacto con el frabricante."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-et/strings.xml b/car-maps-placeholder/res/values-et/strings.xml
new file mode 100644
index 0000000..66c5fa9
--- /dev/null
+++ b/car-maps-placeholder/res/values-et/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Maps"</string>
+    <string name="error_text" msgid="5575174711944349180">"Ühtegi kaartide rakendust pole installitud Võtke ühendust oma auto tootjaga."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-eu/strings.xml b/car-maps-placeholder/res/values-eu/strings.xml
new file mode 100644
index 0000000..2bccc99
--- /dev/null
+++ b/car-maps-placeholder/res/values-eu/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Mapak"</string>
+    <string name="error_text" msgid="5575174711944349180">"Ez dago mapa-aplikaziorik instalatuta. Jarri autoaren fabrikatzailearekin harremanetan."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-fa/strings.xml b/car-maps-placeholder/res/values-fa/strings.xml
new file mode 100644
index 0000000..fa0f1a4
--- /dev/null
+++ b/car-maps-placeholder/res/values-fa/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Maps"</string>
+    <string name="error_text" msgid="5575174711944349180">"هیچ برنامه نقشه‌ای نصب نشده است. لطفاً با سازنده خودرو تماس بگیرید."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-fi/strings.xml b/car-maps-placeholder/res/values-fi/strings.xml
new file mode 100644
index 0000000..b4ddba7
--- /dev/null
+++ b/car-maps-placeholder/res/values-fi/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Kartat"</string>
+    <string name="error_text" msgid="5575174711944349180">"Karttasovellusta ei ole asennettu. Ota yhteyttä auton valmistajaan."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-fr-rCA/strings.xml b/car-maps-placeholder/res/values-fr-rCA/strings.xml
new file mode 100644
index 0000000..5b732b2
--- /dev/null
+++ b/car-maps-placeholder/res/values-fr-rCA/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Maps"</string>
+    <string name="error_text" msgid="5575174711944349180">"Aucune application de cartographie n\'est installée. Veuillez communiquer avec le constructeur de la voiture."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-fr/strings.xml b/car-maps-placeholder/res/values-fr/strings.xml
new file mode 100644
index 0000000..c25b876
--- /dev/null
+++ b/car-maps-placeholder/res/values-fr/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Maps"</string>
+    <string name="error_text" msgid="5575174711944349180">"Aucune application de cartographie n\'est installée. Veuillez contacter le fabricant de la voiture."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-gl/strings.xml b/car-maps-placeholder/res/values-gl/strings.xml
new file mode 100644
index 0000000..f0763de
--- /dev/null
+++ b/car-maps-placeholder/res/values-gl/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Mapas"</string>
+    <string name="error_text" msgid="5575174711944349180">"Non se instalou a aplicación de mapas. Contacta co fabricante do coche."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-gu/strings.xml b/car-maps-placeholder/res/values-gu/strings.xml
new file mode 100644
index 0000000..75e3d1a
--- /dev/null
+++ b/car-maps-placeholder/res/values-gu/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"નકશા"</string>
+    <string name="error_text" msgid="5575174711944349180">"કોઈ નકશા એપ્લિકેશન ઇન્સ્ટૉલ કરેલ નથી. કૃપા કરીને તમારી કારના નિર્માતાનો સંપર્ક કરો."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-hi/strings.xml b/car-maps-placeholder/res/values-hi/strings.xml
new file mode 100644
index 0000000..fbb0c4a
--- /dev/null
+++ b/car-maps-placeholder/res/values-hi/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"मैप"</string>
+    <string name="error_text" msgid="5575174711944349180">"कोई मैप ऐप्लिकेशन इंस्टॉल नहीं किया हुआ है. कृपया अपनी कार के निर्माता से संपर्क करें."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-hr/strings.xml b/car-maps-placeholder/res/values-hr/strings.xml
new file mode 100644
index 0000000..8d31092
--- /dev/null
+++ b/car-maps-placeholder/res/values-hr/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Karte"</string>
+    <string name="error_text" msgid="5575174711944349180">"Nije instalirana nijedna aplikacija za karte. Obratite se proizvođaču automobila."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-hu/strings.xml b/car-maps-placeholder/res/values-hu/strings.xml
new file mode 100644
index 0000000..ca61e34
--- /dev/null
+++ b/car-maps-placeholder/res/values-hu/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Térkép"</string>
+    <string name="error_text" msgid="5575174711944349180">"Nincs telepítve térképalkalmazás. Vegye fel a kapcsolatot az autó gyártójával."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-hy/strings.xml b/car-maps-placeholder/res/values-hy/strings.xml
new file mode 100644
index 0000000..8e5db2e
--- /dev/null
+++ b/car-maps-placeholder/res/values-hy/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Քարտեզներ"</string>
+    <string name="error_text" msgid="5575174711944349180">"Նավիգացիայի հավելված չի տեղադրվել: Դիմեք մեքենայի արտադրողին:"</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-in/strings.xml b/car-maps-placeholder/res/values-in/strings.xml
new file mode 100644
index 0000000..573bdc9
--- /dev/null
+++ b/car-maps-placeholder/res/values-in/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Maps"</string>
+    <string name="error_text" msgid="5575174711944349180">"Tidak ada aplikasi peta yang terpasang. Harap hubungi produsen mobil Anda."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-is/strings.xml b/car-maps-placeholder/res/values-is/strings.xml
new file mode 100644
index 0000000..58831c4
--- /dev/null
+++ b/car-maps-placeholder/res/values-is/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Kort"</string>
+    <string name="error_text" msgid="5575174711944349180">"Ekkert kortaforrit er uppsett. Hafðu samband við framleiðanda bílsins."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-it/strings.xml b/car-maps-placeholder/res/values-it/strings.xml
new file mode 100644
index 0000000..539e817
--- /dev/null
+++ b/car-maps-placeholder/res/values-it/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Mappe"</string>
+    <string name="error_text" msgid="5575174711944349180">"Nessuna app di mappe installata. Contatta il produttore dell\'auto."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-iw/strings.xml b/car-maps-placeholder/res/values-iw/strings.xml
new file mode 100644
index 0000000..928c258
--- /dev/null
+++ b/car-maps-placeholder/res/values-iw/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"מפות"</string>
+    <string name="error_text" msgid="5575174711944349180">"לא הותקנה אפליקציית מפות. יש ליצור קשר עם יצרן הרכב."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-ja/strings.xml b/car-maps-placeholder/res/values-ja/strings.xml
new file mode 100644
index 0000000..939fe30
--- /dev/null
+++ b/car-maps-placeholder/res/values-ja/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"マップ"</string>
+    <string name="error_text" msgid="5575174711944349180">"地図アプリがインストールされていません。自動車メーカーにお問い合わせください。"</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-ka/strings.xml b/car-maps-placeholder/res/values-ka/strings.xml
new file mode 100644
index 0000000..5aa2b5f
--- /dev/null
+++ b/car-maps-placeholder/res/values-ka/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Maps"</string>
+    <string name="error_text" msgid="5575174711944349180">"რუკების აპლიკაცია არ არის დაინსტალირებული. გთხოვთ, დაუკავშირდეთ თქვენი მანქანის მწარმოებელს."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-kk/strings.xml b/car-maps-placeholder/res/values-kk/strings.xml
new file mode 100644
index 0000000..db68e40
--- /dev/null
+++ b/car-maps-placeholder/res/values-kk/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Maps"</string>
+    <string name="error_text" msgid="5575174711944349180">"Ешқандай карта қолданбасы орнатылмаған. Көлік жасаушы компанияға хабарласыңыз."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-km/strings.xml b/car-maps-placeholder/res/values-km/strings.xml
new file mode 100644
index 0000000..4d4aedd
--- /dev/null
+++ b/car-maps-placeholder/res/values-km/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"ផែនទី"</string>
+    <string name="error_text" msgid="5575174711944349180">"មិនបានដំឡើង​កម្មវិធី​ផែនទីទេ។ សូម​ទាក់ទង​ក្រុមហ៊ុនផលិត​រថយន្ត​របស់អ្នក។"</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-kn/strings.xml b/car-maps-placeholder/res/values-kn/strings.xml
new file mode 100644
index 0000000..4a94e81
--- /dev/null
+++ b/car-maps-placeholder/res/values-kn/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"ನಕ್ಷೆಗಳು"</string>
+    <string name="error_text" msgid="5575174711944349180">"ನಕ್ಷೆಗಳ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಿಲ್ಲ. ನಿಮ್ಮ ಕಾರಿನ ತಯಾರಕರನ್ನು ಸಂಪರ್ಕಿಸಿ."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-ko/strings.xml b/car-maps-placeholder/res/values-ko/strings.xml
new file mode 100644
index 0000000..76e9ed5
--- /dev/null
+++ b/car-maps-placeholder/res/values-ko/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"지도"</string>
+    <string name="error_text" msgid="5575174711944349180">"설치된 지도 애플리케이션이 없습니다. 차량 제조업체에 문의하세요."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-ky/strings.xml b/car-maps-placeholder/res/values-ky/strings.xml
new file mode 100644
index 0000000..5ee78fc
--- /dev/null
+++ b/car-maps-placeholder/res/values-ky/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Карталар"</string>
+    <string name="error_text" msgid="5575174711944349180">"Карталар колдонмосу орнотулган эмес. Унааны өндүрүүчүгө кайрылыңыз."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-lo/strings.xml b/car-maps-placeholder/res/values-lo/strings.xml
new file mode 100644
index 0000000..d3ba41f
--- /dev/null
+++ b/car-maps-placeholder/res/values-lo/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"ແຜນທີ່"</string>
+    <string name="error_text" msgid="5575174711944349180">"ບໍ່ໄດ້ຕິດຕັ້ງແອັບພລິເຄຊັນແຜນທີ່ໃດ. ກະລຸນາຕິດຕໍ່ຫາຜູ້ຜະລິດລົດຂອງທ່ານ."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-lt/strings.xml b/car-maps-placeholder/res/values-lt/strings.xml
new file mode 100644
index 0000000..b6e2170
--- /dev/null
+++ b/car-maps-placeholder/res/values-lt/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Žemėlapiai"</string>
+    <string name="error_text" msgid="5575174711944349180">"Neįdiegta jokia žemėlapių programa. Susisiekite su automobilio gamintoju."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-lv/strings.xml b/car-maps-placeholder/res/values-lv/strings.xml
new file mode 100644
index 0000000..842e0f8
--- /dev/null
+++ b/car-maps-placeholder/res/values-lv/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Kartes"</string>
+    <string name="error_text" msgid="5575174711944349180">"Nav instalēta neviena karšu lietojumprogramma. Sazinieties ar automašīnas ražotāju."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-mk/strings.xml b/car-maps-placeholder/res/values-mk/strings.xml
new file mode 100644
index 0000000..842a23d
--- /dev/null
+++ b/car-maps-placeholder/res/values-mk/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Карти"</string>
+    <string name="error_text" msgid="5575174711944349180">"Не се инсталирани апликации за карти. Контактирајте со производителот на автомобилот."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-ml/strings.xml b/car-maps-placeholder/res/values-ml/strings.xml
new file mode 100644
index 0000000..2581753
--- /dev/null
+++ b/car-maps-placeholder/res/values-ml/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"മാപ്‌സ്"</string>
+    <string name="error_text" msgid="5575174711944349180">"മാപ്‌സ് ആപ്പ് ഇൻസ്‌റ്റാൾ ചെയ്‌തിട്ടില്ല. നിങ്ങളുടെ കാറിന്റെ നിർമ്മാതാവുമായി ബന്ധപ്പെടുക."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-mn/strings.xml b/car-maps-placeholder/res/values-mn/strings.xml
new file mode 100644
index 0000000..6bb7e81
--- /dev/null
+++ b/car-maps-placeholder/res/values-mn/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Газрын зураг"</string>
+    <string name="error_text" msgid="5575174711944349180">"Суулгасан газрын зургийн апп алга. Машиныхаа үйлдвэрлэгчтэй холбогдоно уу."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-mr/strings.xml b/car-maps-placeholder/res/values-mr/strings.xml
new file mode 100644
index 0000000..5e1fd78
--- /dev/null
+++ b/car-maps-placeholder/res/values-mr/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"नकाशे"</string>
+    <string name="error_text" msgid="5575174711944349180">"नकाशे अ‍ॅप्लिकेशन इंस्टॉल केलेले नाही. कृपया तुमच्या कार उत्पादकाशी संपर्क साधा."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-ms/strings.xml b/car-maps-placeholder/res/values-ms/strings.xml
new file mode 100644
index 0000000..6b68645
--- /dev/null
+++ b/car-maps-placeholder/res/values-ms/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Peta"</string>
+    <string name="error_text" msgid="5575174711944349180">"Tiada aplikasi peta dipasang. Sila hubungi pengeluar kereta anda."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-my/strings.xml b/car-maps-placeholder/res/values-my/strings.xml
new file mode 100644
index 0000000..88a1273
--- /dev/null
+++ b/car-maps-placeholder/res/values-my/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"မြေပုံများ"</string>
+    <string name="error_text" msgid="5575174711944349180">"အပလီကေးရှင်းမှ တပ်ဆင်ထားသည့် မြေပုံမရှိပါ။ သင့်ကားထုတ်လုပ်သူထံ ဆက်သွယ်ပါ။"</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-nb/strings.xml b/car-maps-placeholder/res/values-nb/strings.xml
new file mode 100644
index 0000000..e081913
--- /dev/null
+++ b/car-maps-placeholder/res/values-nb/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Kart"</string>
+    <string name="error_text" msgid="5575174711944349180">"Ingen kartapper er installert. Kontakt bilprodusenten."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-ne/strings.xml b/car-maps-placeholder/res/values-ne/strings.xml
new file mode 100644
index 0000000..a2aef6c
--- /dev/null
+++ b/car-maps-placeholder/res/values-ne/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"नक्सा"</string>
+    <string name="error_text" msgid="5575174711944349180">"नक्सासम्बन्धी कुनै पनि अनुप्रयोगहरू स्थापना गरिएको छैन। कृपया आफ्नो कार निर्मातालाई सम्पर्क गर्नुहोस्‌।"</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-nl/strings.xml b/car-maps-placeholder/res/values-nl/strings.xml
new file mode 100644
index 0000000..d7e0bed
--- /dev/null
+++ b/car-maps-placeholder/res/values-nl/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Maps"</string>
+    <string name="error_text" msgid="5575174711944349180">"Geen kaarten-app geïnstalleerd. Neem contact op met de fabrikant van je auto."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-or/strings.xml b/car-maps-placeholder/res/values-or/strings.xml
new file mode 100644
index 0000000..478cbc0
--- /dev/null
+++ b/car-maps-placeholder/res/values-or/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"ମ୍ୟାପ୍ସ"</string>
+    <string name="error_text" msgid="5575174711944349180">"କୌଣସି ମ୍ୟାପ୍ସ ଆପ୍ଲିକେସନ୍ ଇନ୍‍ଷ୍ଟଲ୍ କରାଯାଇନାହିଁ। ଆପଣଙ୍କ କାର୍‍ର ଉତ୍ପାଦକଙ୍କ ସହ ଯୋଗାଯୋଗ କରନ୍ତୁ।"</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-pa/strings.xml b/car-maps-placeholder/res/values-pa/strings.xml
new file mode 100644
index 0000000..1b0ef60
--- /dev/null
+++ b/car-maps-placeholder/res/values-pa/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"ਨਕਸ਼ੇ"</string>
+    <string name="error_text" msgid="5575174711944349180">"ਕੋਈ ਨਕਸ਼ਾ ਐਪਲੀਕੇਸ਼ਨ ਸਥਾਪਤ ਨਹੀਂ ਕੀਤੀ ਗਈ। ਕਿਰਪਾ ਕਰਕੇ ਆਪਣੀ ਕਾਰ ਦੇ ਨਿਰਮਾਤਾ ਨਾਲ ਸੰਪਰਕ ਕਰੋ।"</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-pl/strings.xml b/car-maps-placeholder/res/values-pl/strings.xml
new file mode 100644
index 0000000..304dc8f
--- /dev/null
+++ b/car-maps-placeholder/res/values-pl/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Mapy"</string>
+    <string name="error_text" msgid="5575174711944349180">"Brak zainstalowanej aplikacji do obsługi map. Skontaktuj się z producentem samochodu."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-pt-rPT/strings.xml b/car-maps-placeholder/res/values-pt-rPT/strings.xml
new file mode 100644
index 0000000..23107af
--- /dev/null
+++ b/car-maps-placeholder/res/values-pt-rPT/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Maps"</string>
+    <string name="error_text" msgid="5575174711944349180">"Nenhuma aplicação de mapas instalada. Contacte o fabricante do automóvel."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-pt/strings.xml b/car-maps-placeholder/res/values-pt/strings.xml
new file mode 100644
index 0000000..6025535
--- /dev/null
+++ b/car-maps-placeholder/res/values-pt/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Maps"</string>
+    <string name="error_text" msgid="5575174711944349180">"Nenhum app de navegação instalado. Entre em contato com o fabricante do carro."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-ro/strings.xml b/car-maps-placeholder/res/values-ro/strings.xml
new file mode 100644
index 0000000..a088b04
--- /dev/null
+++ b/car-maps-placeholder/res/values-ro/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Maps"</string>
+    <string name="error_text" msgid="5575174711944349180">"Nu s-a instalat nicio aplicație pentru hărți. Contactați producătorul mașinii."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-ru/strings.xml b/car-maps-placeholder/res/values-ru/strings.xml
new file mode 100644
index 0000000..e4bf4b8
--- /dev/null
+++ b/car-maps-placeholder/res/values-ru/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Карты"</string>
+    <string name="error_text" msgid="5575174711944349180">"Приложение для навигации не установлено. Обратитесь к производителю автомобиля."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-si/strings.xml b/car-maps-placeholder/res/values-si/strings.xml
new file mode 100644
index 0000000..8f2a2fc
--- /dev/null
+++ b/car-maps-placeholder/res/values-si/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"සිතියම්"</string>
+    <string name="error_text" msgid="5575174711944349180">"සිතියම් යෙදුම් කිසිවක් ස්ථාපන කර නැත. ඔබේ මෝටර් රථයේ නිෂ්පාදකයා සම්බන්ධ කර ගන්න."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-sk/strings.xml b/car-maps-placeholder/res/values-sk/strings.xml
new file mode 100644
index 0000000..b41447a
--- /dev/null
+++ b/car-maps-placeholder/res/values-sk/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Mapy"</string>
+    <string name="error_text" msgid="5575174711944349180">"Nemáte nainštalované žiadne aplikácie s mapami. Kontaktujte výrobcu auta."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-sl/strings.xml b/car-maps-placeholder/res/values-sl/strings.xml
new file mode 100644
index 0000000..d278251
--- /dev/null
+++ b/car-maps-placeholder/res/values-sl/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Zemljevidi"</string>
+    <string name="error_text" msgid="5575174711944349180">"Ni nameščenih aplikacij za zemljevide. Obrnite se na proizvajalca avtomobila."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-sq/strings.xml b/car-maps-placeholder/res/values-sq/strings.xml
new file mode 100644
index 0000000..c7f1b9d
--- /dev/null
+++ b/car-maps-placeholder/res/values-sq/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Hartat"</string>
+    <string name="error_text" msgid="5575174711944349180">"Nuk ka asnjë aplikacion të hartave të instaluar. Kontakto me prodhuesin e makinës."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-sr/strings.xml b/car-maps-placeholder/res/values-sr/strings.xml
new file mode 100644
index 0000000..6f787b8
--- /dev/null
+++ b/car-maps-placeholder/res/values-sr/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Мапе"</string>
+    <string name="error_text" msgid="5575174711944349180">"Није инсталирана апликација за мапе. Контактирајте произвођача аутомобила."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-sv/strings.xml b/car-maps-placeholder/res/values-sv/strings.xml
new file mode 100644
index 0000000..5dc6bda
--- /dev/null
+++ b/car-maps-placeholder/res/values-sv/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Kartor"</string>
+    <string name="error_text" msgid="5575174711944349180">"Ingen kartapp har installerats. Kontakta bilens tillverkare."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-sw/strings.xml b/car-maps-placeholder/res/values-sw/strings.xml
new file mode 100644
index 0000000..79b3091
--- /dev/null
+++ b/car-maps-placeholder/res/values-sw/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Ramani"</string>
+    <string name="error_text" msgid="5575174711944349180">"Hakuna programu za ramani zilizosakinishwa. Wasiliana na kampuni iliyotengeneza gari lako."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-ta/strings.xml b/car-maps-placeholder/res/values-ta/strings.xml
new file mode 100644
index 0000000..8d5e354
--- /dev/null
+++ b/car-maps-placeholder/res/values-ta/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"வரைபடம்"</string>
+    <string name="error_text" msgid="5575174711944349180">"வரைபட ஆப்ஸ் எதுவும் நிறுவப்படவில்லை. உங்கள் கார் உற்பத்தியாளரைத் தொடர்புகொள்ளவும்."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-te/strings.xml b/car-maps-placeholder/res/values-te/strings.xml
new file mode 100644
index 0000000..987b654
--- /dev/null
+++ b/car-maps-placeholder/res/values-te/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"మ్యాప్స్"</string>
+    <string name="error_text" msgid="5575174711944349180">"మ్యాప్స్ అప్లికేషన్ ఇన్‌స్టాల్ చేయబడలేదు. దయచేసి మీ కారుని తయారు చేసినవారిని సంప్రదించండి"</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-th/strings.xml b/car-maps-placeholder/res/values-th/strings.xml
new file mode 100644
index 0000000..866a545
--- /dev/null
+++ b/car-maps-placeholder/res/values-th/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Maps"</string>
+    <string name="error_text" msgid="5575174711944349180">"ไม่ได้ติดตั้งแอปพลิเคชันแผนที่ไว้ โปรดติดต่อผู้ผลิตรถ"</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-tl/strings.xml b/car-maps-placeholder/res/values-tl/strings.xml
new file mode 100644
index 0000000..82f1893
--- /dev/null
+++ b/car-maps-placeholder/res/values-tl/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Maps"</string>
+    <string name="error_text" msgid="5575174711944349180">"Walang naka-install na application ng mga mapa. Makipag-ugnayan sa manufacturer ng iyong sasakyan."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-tr/strings.xml b/car-maps-placeholder/res/values-tr/strings.xml
new file mode 100644
index 0000000..4c63a70
--- /dev/null
+++ b/car-maps-placeholder/res/values-tr/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Haritalar"</string>
+    <string name="error_text" msgid="5575174711944349180">"Yüklü harita uygulaması yok. Lütfen aracınızın üreticisine başvurun."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-uk/strings.xml b/car-maps-placeholder/res/values-uk/strings.xml
new file mode 100644
index 0000000..2d4a6ab
--- /dev/null
+++ b/car-maps-placeholder/res/values-uk/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Карти"</string>
+    <string name="error_text" msgid="5575174711944349180">"Додаток із картами не встановлено. Зверніться до виробника автомобіля."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-ur/strings.xml b/car-maps-placeholder/res/values-ur/strings.xml
new file mode 100644
index 0000000..aabe895
--- /dev/null
+++ b/car-maps-placeholder/res/values-ur/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Maps"</string>
+    <string name="error_text" msgid="5575174711944349180">"نقشہ کی کوئی بھی ایپلیکیشن انسٹال نہیں ہے۔ براہ کرم اپنی کار کے مینوفیکچرر سے رابطہ کریں۔"</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-uz/strings.xml b/car-maps-placeholder/res/values-uz/strings.xml
new file mode 100644
index 0000000..d9d5ffd
--- /dev/null
+++ b/car-maps-placeholder/res/values-uz/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Xaritalar"</string>
+    <string name="error_text" msgid="5575174711944349180">"Hech qanday navigatsiya ilovasi oʻrnatilmagan. Avtomobil ishlab chiqaruvchisiga murojaat qiling."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-vi/strings.xml b/car-maps-placeholder/res/values-vi/strings.xml
new file mode 100644
index 0000000..71b52d1
--- /dev/null
+++ b/car-maps-placeholder/res/values-vi/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Bản đồ"</string>
+    <string name="error_text" msgid="5575174711944349180">"Chưa cài đặt ứng dụng bản đồ nào. Vui lòng liên hệ với nhà sản xuất ô tô của bạn."</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-zh-rCN/strings.xml b/car-maps-placeholder/res/values-zh-rCN/strings.xml
new file mode 100644
index 0000000..9be32b1
--- /dev/null
+++ b/car-maps-placeholder/res/values-zh-rCN/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"地图"</string>
+    <string name="error_text" msgid="5575174711944349180">"尚未安装地图应用。请与汽车制造商联系。"</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-zh-rHK/strings.xml b/car-maps-placeholder/res/values-zh-rHK/strings.xml
new file mode 100644
index 0000000..3efe08a
--- /dev/null
+++ b/car-maps-placeholder/res/values-zh-rHK/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"地圖"</string>
+    <string name="error_text" msgid="5575174711944349180">"地圖應用程式尚未安裝。請聯絡您的汽車製造商。"</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-zh-rTW/strings.xml b/car-maps-placeholder/res/values-zh-rTW/strings.xml
new file mode 100644
index 0000000..0b175d4
--- /dev/null
+++ b/car-maps-placeholder/res/values-zh-rTW/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"地圖"</string>
+    <string name="error_text" msgid="5575174711944349180">"為安裝任何地圖應用程式。請與你的車輛製造商聯絡。"</string>
+</resources>
diff --git a/car-maps-placeholder/res/values-zu/strings.xml b/car-maps-placeholder/res/values-zu/strings.xml
new file mode 100644
index 0000000..889e3cd
--- /dev/null
+++ b/car-maps-placeholder/res/values-zu/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2016 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="app_name" msgid="6575346965016311017">"Amamephu"</string>
+    <string name="error_text" msgid="5575174711944349180">"Alukho uhlelo lokusebenza lwamamephu olufakiwe. Sicela uxhumane nomkhiqizi wemoto yakho."</string>
+</resources>
diff --git a/car-usb-handler/AndroidManifest.xml b/car-usb-handler/AndroidManifest.xml
index be64f82..7803318 100644
--- a/car-usb-handler/AndroidManifest.xml
+++ b/car-usb-handler/AndroidManifest.xml
@@ -23,7 +23,11 @@
                  android:directBootAware="true" >
         <activity android:name=".UsbHostManagementActivity"
                   android:theme="@android:style/Theme.Material.Light.Dialog"
-                  android:launchMode="singleTop" />
+                  android:launchMode="singleTop">
+            <meta-data
+                android:name="distractionOptimized"
+                android:value="true" />
+        </activity>
         <receiver android:name=".BootUsbScanner" >
             <intent-filter>
                 <action android:name="android.intent.action.BOOT_COMPLETED" />
diff --git a/car-usb-handler/res/values-af/strings.xml b/car-usb-handler/res/values-af/strings.xml
new file mode 100644
index 0000000..f09d44c
--- /dev/null
+++ b/car-usb-handler/res/values-af/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"USB-hanteerder"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Gestoorde toestelle"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"Verwyder hanteringprogram vir USB-toestel"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"Is jy seker jy wil verstekhanteringprogram vir %1$s uitvee?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Ja"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Kanselleer"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Kry tans gesteunde hanteerders"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Onbekende USB-toestel"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-am/strings.xml b/car-usb-handler/res/values-am/strings.xml
new file mode 100644
index 0000000..5564940
--- /dev/null
+++ b/car-usb-handler/res/values-am/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"ዩኤስቢ መያዣ"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"የተቀመጡ መሣሪያዎች"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"ለዩኤስቢ መሣሪያ ማስተናገጃ መተግበሪያን አስወግድ"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"ለ %1$s ነባሪ መያዣ መተግበሪያን ለመሰረዝ እንደሚፈልጉ እርግጠኛ ነዎት?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"አዎ"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"ይቅር"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"የሚደገፉ መያዣዎችን በማግኘት ላይ"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"የማይታወቅ የዩኤስቢ መሣሪያ"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-ar/strings.xml b/car-usb-handler/res/values-ar/strings.xml
new file mode 100644
index 0000000..15c6e5a
--- /dev/null
+++ b/car-usb-handler/res/values-ar/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"معالج USB"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"الأجهزة المحفوظة"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"إزالة تطبيق التناول في جهاز USB"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"هل تريد فعلاً حذف تطبيق التناول التلقائي في %1$s؟"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"نعم"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"إلغاء"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"الحصول على معالجات متوافقة"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"جهاز USB غير معروف"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-as/strings.xml b/car-usb-handler/res/values-as/strings.xml
new file mode 100644
index 0000000..e1a4dac
--- /dev/null
+++ b/car-usb-handler/res/values-as/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"ইউএছবি হেণ্ডলাৰ"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"ছেভ কৰি থোৱা ডিভাইচ"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"ইউএছবি ডিভাইচ পৰিচালনা কৰা এপ্ আঁতৰাওক"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"আপুনি %1$sৰ বাবে থকা ডিফ’ল্ট পৰিচালক এপটো মচিব বিচৰাটো নিশ্চিতনে?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"হয়"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"বাতিল কৰক"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"সমৰ্থিত হেণ্ডলাৰসমূহ গোটোৱা হৈছে"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"অজ্ঞাত ইউএছবি ডিভাইচ"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-az/strings.xml b/car-usb-handler/res/values-az/strings.xml
new file mode 100644
index 0000000..7a61e6e
--- /dev/null
+++ b/car-usb-handler/res/values-az/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"USB İdarəedici"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Yadda saxlanmış cihazlar"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"USB cihazı üçün idarəetmə tətbiqini silmək"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"%1$s üçün defolt idarəetmə tətbiqini silmək istədiyinizə əminsiniz?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Bəli"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Ləğv edin"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Dəstəklənən idarəedicilərin əldə edilməsi"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Naməlum USB cihazı"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-b+sr+Latn/strings.xml b/car-usb-handler/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 0000000..d58180f
--- /dev/null
+++ b/car-usb-handler/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"Aplikacija za upravljanje USB-om"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Sačuvani uređaji"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"Uklonite aplikacije za upravljanje za USB uređaj"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"Želite li stvarno da izbrišete podrazumevanu aplikaciju za upravljanje za %1$s?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Da"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Otkaži"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Preuzimaju se podržane aplikacije za upravljanje"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Nepoznat USB uređaj"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-be/strings.xml b/car-usb-handler/res/values-be/strings.xml
new file mode 100644
index 0000000..d655db9
--- /dev/null
+++ b/car-usb-handler/res/values-be/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"Апрацоўшчык USB"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Захаваныя прылады"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"Выдаленне праграмы для працы з USB-прыладай"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"Выдаліць стандартную праграму для працы з прыладай \"%1$s\"?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Так"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Скасаваць"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Усталёўваюцца апрацоўшчыкі, якія падтрымліваюцца"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Невядомая USB-прылада"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-bg/strings.xml b/car-usb-handler/res/values-bg/strings.xml
new file mode 100644
index 0000000..241e281
--- /dev/null
+++ b/car-usb-handler/res/values-bg/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"Манипулатор за USB"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Запазени устройства"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"Премахване на приложението манипулатор за USB устройството"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"Наистина ли искате да изтриете стандартното приложение манипулатор за %1$s?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Да"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Отказ"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Поддържаните манипулатори се изтеглят"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Неизвестно USB устройство"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-bn/strings.xml b/car-usb-handler/res/values-bn/strings.xml
new file mode 100644
index 0000000..6686288
--- /dev/null
+++ b/car-usb-handler/res/values-bn/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"ইউএসবি হ্যান্ডলার"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"সেভ করা ডিভাইস"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"ইউএসবি ডিভাইস থেকে হ্যান্ডলিং অ্যাপ সরান"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"আপনি কি %1$s-এর ডিফল্ট হ্যান্ডলিং অ্যাপ মুছে ফেলা সম্পর্কে নিশ্চিত?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"হ্যাঁ"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"বাতিল করুন"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"ব্যবহারযোগ্য হ্যান্ডলার নিয়ে আসা হচ্ছে"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"অজানা ইউএসবি ডিভাইস"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-bs/strings.xml b/car-usb-handler/res/values-bs/strings.xml
new file mode 100644
index 0000000..b98e5b8
--- /dev/null
+++ b/car-usb-handler/res/values-bs/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"Rukovatelj USB-om"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Sačuvani uređaji"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"Uklonite upravljačku aplikaciju za USB uređaj"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"Jeste li sigurni da želite izbrisati zadanu aplikaciju za rukovanje za %1$s?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Da"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Otkaži"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Pribavljanje kompatibilnih upravljačkih programa"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Nepoznat USB uređaj"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-ca/strings.xml b/car-usb-handler/res/values-ca/strings.xml
new file mode 100644
index 0000000..6e6c96e
--- /dev/null
+++ b/car-usb-handler/res/values-ca/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"Gestor USB"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Dispositius desats"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"Suprimeix l\'aplicació de gestió del dispositiu USB"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"Confirmes que vols suprimir l\'aplicació de gestió predeterminada per a %1$s?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Sí"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Cancel·la"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Obtenció de gestors admesos"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Dispositiu USB desconegut"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-cs/strings.xml b/car-usb-handler/res/values-cs/strings.xml
new file mode 100644
index 0000000..5e7ee0c
--- /dev/null
+++ b/car-usb-handler/res/values-cs/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"Obslužný nástroj USB"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Uložená zařízení"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"Odstranit obslužnou aplikaci zařízení USB"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"Opravdu chcete výchozí obslužnou aplikaci pro %1$s vymazat?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Ano"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Zrušit"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Načítání podporovaných obslužných nástrojů"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Neznámé zařízení USB"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-da/strings.xml b/car-usb-handler/res/values-da/strings.xml
new file mode 100644
index 0000000..ebf1531
--- /dev/null
+++ b/car-usb-handler/res/values-da/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"USB-handler"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Gemte enheder"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"Fjern håndteringsapp for USB-enhed"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"Er du sikker på, at du vil slette standardhåndteringsappen for %1$s?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Ja"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Annuller"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Hentning af understøttede handlere"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Ukendt USB-enhed"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-de/strings.xml b/car-usb-handler/res/values-de/strings.xml
new file mode 100644
index 0000000..fb1313a
--- /dev/null
+++ b/car-usb-handler/res/values-de/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"USB-Handler"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Gespeicherte Geräte"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"USB-Handler-App entfernen"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"Möchtest du die Standard-App für %1$s wirklich löschen?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Ja"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Abbrechen"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Unterstützte Handler erhalten"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Unbekanntes USB-Gerät"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-el/strings.xml b/car-usb-handler/res/values-el/strings.xml
new file mode 100644
index 0000000..88ac995
--- /dev/null
+++ b/car-usb-handler/res/values-el/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"Δείκτης χειρισμού USB"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Αποθηκευμένες συσκευές"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"Κατάργηση εφαρμογής χειρισμού για συσκευή USB"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"Είστε βέβαιοι ότι θέλετε να διαγράψετε την προεπιλεγμένη εφαρμογή χειρισμού για το %1$s;"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Ναι"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Ακύρωση"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Λήψη υποστηριζόμενων δεικτών χειρισμού"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Άγνωστη συσκευή USB"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-en-rAU/strings.xml b/car-usb-handler/res/values-en-rAU/strings.xml
new file mode 100644
index 0000000..16d80ef
--- /dev/null
+++ b/car-usb-handler/res/values-en-rAU/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"USB Handler"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Saved devices"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"Remove handling app for USB device"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"Are you sure that you want to delete default handling app for %1$s?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Yes"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Cancel"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Getting supported handlers"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Unknown USB device"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-en-rCA/strings.xml b/car-usb-handler/res/values-en-rCA/strings.xml
new file mode 100644
index 0000000..16d80ef
--- /dev/null
+++ b/car-usb-handler/res/values-en-rCA/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"USB Handler"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Saved devices"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"Remove handling app for USB device"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"Are you sure that you want to delete default handling app for %1$s?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Yes"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Cancel"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Getting supported handlers"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Unknown USB device"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-en-rGB/strings.xml b/car-usb-handler/res/values-en-rGB/strings.xml
new file mode 100644
index 0000000..16d80ef
--- /dev/null
+++ b/car-usb-handler/res/values-en-rGB/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"USB Handler"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Saved devices"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"Remove handling app for USB device"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"Are you sure that you want to delete default handling app for %1$s?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Yes"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Cancel"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Getting supported handlers"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Unknown USB device"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-en-rIN/strings.xml b/car-usb-handler/res/values-en-rIN/strings.xml
new file mode 100644
index 0000000..16d80ef
--- /dev/null
+++ b/car-usb-handler/res/values-en-rIN/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"USB Handler"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Saved devices"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"Remove handling app for USB device"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"Are you sure that you want to delete default handling app for %1$s?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Yes"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Cancel"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Getting supported handlers"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Unknown USB device"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-en-rXC/strings.xml b/car-usb-handler/res/values-en-rXC/strings.xml
new file mode 100644
index 0000000..0eb177b
--- /dev/null
+++ b/car-usb-handler/res/values-en-rXC/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‏‎‎‎‏‎‏‏‎‏‏‎‎‎‏‏‏‎‎‏‎‏‏‏‎‏‎‎‏‏‎‎‏‏‏‏‏‏‎‎‎‎‎‏‎‏‎‏‏‎‏‎‎‏‎USB Handler‎‏‎‎‏‎"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‏‎‏‎‎‎‏‎‎‎‎‏‏‎‎‏‎‏‎‎‏‎‎‏‎‏‎‎‎‎‎‏‏‏‎‎‏‏‎‎‎‏‏‏‎‏‎‏‎‎‏‎‎‏‎‎‎‎Saved devices‎‏‎‎‏‎"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‏‎‏‎‏‎‏‎‎‎‎‎‏‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‎‎‏‏‎‎‎‏‏‎‎‏‏‏‏‏‎‏‎‏‎‏‏‎‏‏‎Remove handling app for USB device‎‏‎‎‏‎"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‎‏‎‏‏‎‏‏‎‎‏‎‎‏‏‎‏‏‎‏‎‎‏‏‎‎‎‏‎‏‎‎‎‎‎‎‏‏‎‎‎‎‏‎‏‏‎‎‏‎‎‏‎‏‎‎Are you sure you wan to delete dafault handling app for %1$s?‎‏‎‎‏‎"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‎‎‏‎‏‏‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‏‏‏‏‎‏‏‎‎‏‎‏‏‏‏‎‎‎‎‎‎‏‏‎‎‎‎‏‏‎‏‎‎‎Yes‎‏‎‎‏‎"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‏‎‎‎‎‏‏‏‎‎‎‏‎‏‎‏‎‎‎‏‏‎‎‎‎‎‎‏‏‏‎‎‏‏‏‎‏‎‏‎‏‎‎‏‏‏‎‎‎‏‏‏‎‎‏‎Cancel‎‏‎‎‏‎"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‏‏‏‏‎‏‏‏‎‏‎‎‎‏‏‏‎‏‎‎‎‏‏‏‎‏‏‎‎‎‏‏‏‎‎‏‏‎‏‎‎‎‎‎‏‏‎‎‏‏‎‎‏‏‏‎‎Getting supported handlers‎‏‎‎‏‎"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‎‏‏‏‎‎‏‎‎‎‎‎‏‎‎‏‏‎‏‏‎‏‎‎‎‏‏‏‏‏‎‎‏‏‏‎‎‏‎‎‎‏‎‏‎‏‎‏‎‎‎‎‎‏‏‏‎Unknown USB device‎‏‎‎‏‎"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‎‏‏‏‎‏‎‏‏‏‎‎‏‎‎‎‏‎‏‎‎‎‏‏‏‏‏‎‎‏‏‏‏‏‎‎‏‎‏‎‏‎‏‏‎‎‏‎‏‎‎‎‎‏‎‎18d1:9302‎‏‎‎‏‎"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-es-rUS/strings.xml b/car-usb-handler/res/values-es-rUS/strings.xml
new file mode 100644
index 0000000..08d7396
--- /dev/null
+++ b/car-usb-handler/res/values-es-rUS/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"Controlador de USB"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Dispositivos guardados"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"Quitar la app de control del dispositivo USB"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"¿Estás seguro de que quieres borrar la app de control predeterminada para %1$s?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Sí"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Cancelar"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Obteniendo controladores compatibles"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Dispositivo USB desconocido"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-es/strings.xml b/car-usb-handler/res/values-es/strings.xml
new file mode 100644
index 0000000..a3e746a
--- /dev/null
+++ b/car-usb-handler/res/values-es/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"Controlador USB"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Dispositivos guardados"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"Quitar aplicación de gestión de dispositivo USB"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"¿Seguro que quieres eliminar la aplicación de gestión predeterminada de %1$s?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Sí"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Cancelar"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Obtener controladores compatibles"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Dispositivo USB desconocido"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-et/strings.xml b/car-usb-handler/res/values-et/strings.xml
new file mode 100644
index 0000000..31e2907
--- /dev/null
+++ b/car-usb-handler/res/values-et/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"USB-töötleja"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Salvestatud seadmed"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"USB-seadme töötlemisrakenduse eemaldamine"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"Kas soovite kindlasti kustutada üksuse %1$s vaiketöötlemisrakenduse?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Jah"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Tühista"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Toetatud töötlejate hankimine"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Tundmatu USB-seade"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-eu/strings.xml b/car-usb-handler/res/values-eu/strings.xml
new file mode 100644
index 0000000..b3459a5
--- /dev/null
+++ b/car-usb-handler/res/values-eu/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"USB kudeatzailea"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Gordetako gailuak"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"Kendu USB gailua kudeatzen ari den aplikazioa"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"Ziur %1$s gailua kudeatzeko aplikazio lehenetsia ezabatu nahi duzula?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Bai"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Utzi"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Kudeatzaile bateragarriak eskuratzen"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"USB gailu ezezaguna"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-fa/strings.xml b/car-usb-handler/res/values-fa/strings.xml
new file mode 100644
index 0000000..07bce7a
--- /dev/null
+++ b/car-usb-handler/res/values-fa/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"کنترل‌کننده USB"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"دستگاه‌های ذخیره‌شده"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"برداشتن برنامه کنترل برای دستگاه USB"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"مطمئن هستید می‌خواهید برنامه کنترل پیش‌فرض را برای %1$s حذف کنید؟"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"بله"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"لغو"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"دریافت کنترل‌کننده‌های پشتیبانی‌شده"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"دستگاه USB ناشناس"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-fi/strings.xml b/car-usb-handler/res/values-fi/strings.xml
new file mode 100644
index 0000000..d6adadf
--- /dev/null
+++ b/car-usb-handler/res/values-fi/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"USB-käsittelijä"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Tallennetut laitteet"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"poistaa USB-laitteen käsittelysovelluksen"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"Haluatko varmasti poistaa käsittelyn oletussovelluksen (%1$s)?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Kyllä"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Peruuta"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Haetaan tuettuja käsittelijöitä"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Tuntematon USB-laite"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-fr-rCA/strings.xml b/car-usb-handler/res/values-fr-rCA/strings.xml
new file mode 100644
index 0000000..47bb880
--- /dev/null
+++ b/car-usb-handler/res/values-fr-rCA/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"Gestionnaire USB"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Appareils enregistrés"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"Supprimer l\'application de gestion de l\'appareil USB"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"Voulez-vous vraiment supprimer l\'application de gestion par défaut pour %1$s?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Oui"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Annuler"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Obtention de gestionnaires compatibles"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Appareil USB inconnu"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-fr/strings.xml b/car-usb-handler/res/values-fr/strings.xml
new file mode 100644
index 0000000..821d5de
--- /dev/null
+++ b/car-usb-handler/res/values-fr/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"Gestionnaire USB"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Périphériques enregistrés"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"Supprimer l\'application de gestion du périphérique USB"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"Voulez-vous vraiment supprimer l\'application de gestion par défaut pour %1$s ?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Oui"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Annuler"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Obtenir des gestionnaires compatibles"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Périphérique USB non reconnu"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-gl/strings.xml b/car-usb-handler/res/values-gl/strings.xml
new file mode 100644
index 0000000..6646096
--- /dev/null
+++ b/car-usb-handler/res/values-gl/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"Controlador de USB"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Dispositivos gardados"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"Quitar a aplicación de xestión do dispositivo USB"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"Seguro que queres eliminar a aplicación de control predeterminada para %1$s?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Si"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Cancelar"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Obter controladores compatibles"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Dispositivo USB descoñecido"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-gu/strings.xml b/car-usb-handler/res/values-gu/strings.xml
new file mode 100644
index 0000000..217bd6a
--- /dev/null
+++ b/car-usb-handler/res/values-gu/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"USB હૅન્ડલર"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"સાચવેલ ડિવાઇસ"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"USB ડિવાઇસ માટે હૅન્ડલિંગ ઍપ કાઢી નાખો"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"શું તમે ખરેખર ડિફૉલ્ટ હેન્ડલિંગ ઍપ્લિકેશન %1$s માટે કાઢી નાખવા માગો છો?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"હા"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"રદ કરો"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"સમર્થિત હૅન્ડલર મેળવી રહ્યાં છીએ"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"અજ્ઞાત USB ડિવાઇસ"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-hi/strings.xml b/car-usb-handler/res/values-hi/strings.xml
new file mode 100644
index 0000000..aba6708
--- /dev/null
+++ b/car-usb-handler/res/values-hi/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"यूएसबी हैंडलर"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"सेव किए गए डिवाइस"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"यूएसबी डिवाइस को हैंडल करने वाला ऐप्लिकेशन हटाएं"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"क्या आप वाकई %1$s को हैंडल करने वाला डिफ़ॉल्ट ऐप्लिकेशन मिटाना चाहते हैं?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"हां"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"रद्द करें"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"साथ काम करने वाले हैंडलर ला सकता है"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"अनजान यूएसबी डिवाइस"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-hr/strings.xml b/car-usb-handler/res/values-hr/strings.xml
new file mode 100644
index 0000000..9844549
--- /dev/null
+++ b/car-usb-handler/res/values-hr/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"Rukovatelj USB-om"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Spremljeni uređaji"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"Uklanjanje aplikacije za rukovanje za USB uređaj"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"Jeste li sigurni da želite izbrisati zadanu aplikaciju za rukovanje za %1$s?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Da"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Odustani"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Dohvaćanje podržanih rukovatelja"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Nepoznati USB uređaj"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-hu/strings.xml b/car-usb-handler/res/values-hu/strings.xml
new file mode 100644
index 0000000..a9908ce
--- /dev/null
+++ b/car-usb-handler/res/values-hu/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"USB-kezelő"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Mentett eszközök"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"USB-eszközt kezelő alkalmazás eltávolítása"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"Biztosan törölni szeretné a(z) %1$s alapértelmezett kezelőalkalmazását?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Igen"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Mégse"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Támogatott kezelők lekérése…"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Ismeretlen USB-eszköz"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-hy/strings.xml b/car-usb-handler/res/values-hy/strings.xml
new file mode 100644
index 0000000..f203930
--- /dev/null
+++ b/car-usb-handler/res/values-hy/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"USB մշակիչ"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Պահված սարքեր"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"Հեռացնել USB սարքի հետ աշխատելու համար հավելվածը"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"Ջնջե՞լ %1$s սարքի հետ աշխատելու կանխադրված հավելվածը:"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Այո"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Չեղարկել"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Աջակցվող մշակիչների տեղադրում"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Անհայտ USB սարք"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-in/strings.xml b/car-usb-handler/res/values-in/strings.xml
new file mode 100644
index 0000000..5542bcc
--- /dev/null
+++ b/car-usb-handler/res/values-in/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"Pengendali USB"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Perangkat yang disimpan"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"Menghapus aplikasi penanganan untuk perangkat USB"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"Yakin ingin menghapus aplikasi penanganan default untuk %1$s?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Ya"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Batal"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Mendapatkan pengendali yang didukung"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Perangkat USB tidak diketahui"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-is/strings.xml b/car-usb-handler/res/values-is/strings.xml
new file mode 100644
index 0000000..a524ff1
--- /dev/null
+++ b/car-usb-handler/res/values-is/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"USB-hjálparforrit"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Vistuð tæki"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"Fjarlægja umsjónarforrit fyrir USB-tæki"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"Viltu örugglega eyða sjálfgefnu umsjónarforriti fyrir %1$s?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Já"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Hætta við"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Sækir studd hjálparforrit"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Óþekkt USB-tæki"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-it/strings.xml b/car-usb-handler/res/values-it/strings.xml
new file mode 100644
index 0000000..43f5206
--- /dev/null
+++ b/car-usb-handler/res/values-it/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"USB Handler"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Dispositivi salvati"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"Rimuovi l\'app di gestione per il dispositivo USB"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"Vuoi eliminare l\'app di gestione predefinita per %1$s?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Sì"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Annulla"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Recupero dei gestori supportati"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Dispositivo USB sconosciuto"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-iw/strings.xml b/car-usb-handler/res/values-iw/strings.xml
new file mode 100644
index 0000000..90cdb2a
--- /dev/null
+++ b/car-usb-handler/res/values-iw/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"אפליקציית ניהול של התקני USB"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"התקנים שמורים"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"הסרה של אפליקציית ניהול עבור התקן USB"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"בחרת למחוק את אפליקציית הניהול המוגדרת כברירת מחדל עבור %1$s. להמשיך?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"כן"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"ביטול"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"קבלת אפליקציות ניהול נתמכות"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"התקן USB לא ידוע"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-ja/strings.xml b/car-usb-handler/res/values-ja/strings.xml
new file mode 100644
index 0000000..0f4b672
--- /dev/null
+++ b/car-usb-handler/res/values-ja/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"USB ハンドラ"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"保存済みのデバイス"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"USB デバイス向け操作アプリの削除"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"%1$s のデフォルト操作アプリを削除してもよろしいですか?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"はい"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"キャンセル"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"サポートされているハンドラを取得しています"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"不明な USB デバイスです"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-ka/strings.xml b/car-usb-handler/res/values-ka/strings.xml
new file mode 100644
index 0000000..30c74bb
--- /dev/null
+++ b/car-usb-handler/res/values-ka/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"USB-დამმუშავებელი"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"შენახული მოწყობილობები"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"USB მოწყობილობის დამმუშავებელი აპის ამოშლა"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"ნამდვილად გსურთ, წაშალოთ %1$s-ის დამმუშავებელი ნაგულისხმევი აპი?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"დიახ"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"გაუქმება"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"მხარდაჭერილი დამმუშავებლების შესახებ ინფორმაციის მიღება"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"უცნობი USB მოწყობილობა"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-kk/strings.xml b/car-usb-handler/res/values-kk/strings.xml
new file mode 100644
index 0000000..3f91599
--- /dev/null
+++ b/car-usb-handler/res/values-kk/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"USB модулі"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Сақталған құрылғылар"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"USB құрылғысына арналған қолданбаны өшіру"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"%1$s әдепкі қолданбасын шынымен жою керек пе?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Иә"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Бас тарту"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Қолдау көрсетілетін модульдерді алу"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Белгісіз USB құрылғысы"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-km/strings.xml b/car-usb-handler/res/values-km/strings.xml
new file mode 100644
index 0000000..07108cd
--- /dev/null
+++ b/car-usb-handler/res/values-km/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"ឧបករណ៍​ដោះស្រាយ USB"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"ឧបករណ៍​ដែល​បាន​រក្សាទុក"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"លុប​កម្មវិធីគ្រប់គ្រង​សម្រាប់ឧបករណ៍ USB"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"តើ​អ្នក​ពិតជា​ចង់​លុប​កម្មវិធី​គ្រប់គ្រង​លំនាំដើម​សម្រាប់ %1$s មែនឬ?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"បាទ/ចាស"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"បោះបង់"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"កំពុងទាញយក​ឧបករណ៍ដោះស្រាយ​ដែលស្គាល់"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"មិនស្គាល់​ឧបករណ៍ USB ទេ"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-kn/strings.xml b/car-usb-handler/res/values-kn/strings.xml
new file mode 100644
index 0000000..20ed98a
--- /dev/null
+++ b/car-usb-handler/res/values-kn/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"ಯುಎಸ್‌ಬಿ ಹಾಂಡ್ಲರ್"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"ಉಳಿಸಲಾದ ಸಾಧನಗಳು"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"ಯುಎಸ್‌ಬಿ ಡ್ರೈವ್ ಅನ್ನು ನಿರ್ವಹಿಸುವ ಆಪ್ ಅನ್ನು ತೆಗೆ"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"ನೀವು ಖಂಡಿತವಾಗಿಯೂ %1$s ಕ್ಕೆ ಪೂರ್ವನಿಯೋಜಿತ ಆಪ್ ಅನ್ನು ಅಳಿಸಲು ಅಳಿಸಲು ಬಯಸುತ್ತೀರಾ?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"ಹೌದು"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"ರದ್ದುಗೊಳಿಸಿ"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"ಬೆಂಬಲಿತ ಹ್ಯಾಂಡ್‌ಲರ್‌ಗಳನ್ನು ಪಡೆಯುತ್ತಿದ್ದೇವೆ"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"ಗೊತ್ತಿಲ್ಲದ ಯುಎಸ್‌ಬಿ ಸಾಧನ"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-ko/strings.xml b/car-usb-handler/res/values-ko/strings.xml
new file mode 100644
index 0000000..8750746
--- /dev/null
+++ b/car-usb-handler/res/values-ko/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"USB 핸들러"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"저장된 기기"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"USB 기기 처리 앱 삭제"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"%1$s의 기본 처리 앱을 삭제하시겠습니까?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"예"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"취소"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"지원되는 핸들러 다운로드 중"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"알 수 없는 USB 기기"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-ky/strings.xml b/car-usb-handler/res/values-ky/strings.xml
new file mode 100644
index 0000000..7b1d56a
--- /dev/null
+++ b/car-usb-handler/res/values-ky/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"USB иштеткичи"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Сакталган түзмөктөр"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"USB түзмөгү үчүн иштетилген колдонмону алып салуу"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"%1$s үчүн демейки колдонмону чын эле жок кылгыңыз келеби?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Ооба"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Жок"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Колдоого алынган иштеткичтерди алуу"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Белгисиз USB түзмөгү"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-lo/strings.xml b/car-usb-handler/res/values-lo/strings.xml
new file mode 100644
index 0000000..2b4a123
--- /dev/null
+++ b/car-usb-handler/res/values-lo/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"ຕົວຈັດການ USB"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"ອຸປະກອນທີ່ບັນທຶກໄວ້"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"ລຶບແອັບຈັດການສຳລັບອຸປະກອນ USB ອອກ"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"ທ່ານແນ່ໃຈບໍ່ວ່າທ່ານຕ້ອງການລຶບແອັບການຈັດການເລີ່ມຕົ້ນສຳລັບ %1$s?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"ແມ່ນ"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"ຍົກເລີກ"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"ກຳລັງຮັບເອົາຕົວຈັດການທີ່ຮອງຮັບ"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"ອຸປະກອນ USB ທີ່ບໍ່ຮູ້ຈັກ"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-lt/strings.xml b/car-usb-handler/res/values-lt/strings.xml
new file mode 100644
index 0000000..7c04396
--- /dev/null
+++ b/car-usb-handler/res/values-lt/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"USB doroklė"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Išsaugoti įrenginiai"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"Pašalinti USB įrenginio apdorojimo programą"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"Ar tikrai norite išjungti numatytąją %1$s apdorojimo programą?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Taip"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Atšaukti"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Palaikomų doroklių gavimas"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Nežinomas USB įrenginys"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-lv/strings.xml b/car-usb-handler/res/values-lv/strings.xml
new file mode 100644
index 0000000..5f599d9
--- /dev/null
+++ b/car-usb-handler/res/values-lv/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"USB apdarinātājs"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Saglabātās ierīces"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"Noņemt USB ierīces apstrādes lietotni"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"Vai tiešām vēlaties izdzēst “%1$s” noklusējuma apstrādes lietotni?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Jā"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Atcelt"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Atbalstītu apdarinātāju ieguve"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Nezināma USB ierīce"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-mk/strings.xml b/car-usb-handler/res/values-mk/strings.xml
new file mode 100644
index 0000000..eb45cc5
--- /dev/null
+++ b/car-usb-handler/res/values-mk/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"USB-ракувач"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Зачувани уреди"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"Отстранете ја апликацијата за ракување за USB-уредот"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"Дали сигурно сакате да ја избришете стандардната апликација за ракување за %1$s?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Да"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Откажи"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Се преземаат поддржани ракувачи"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Непознат USB-уред"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-ml/strings.xml b/car-usb-handler/res/values-ml/strings.xml
new file mode 100644
index 0000000..181cdd1
--- /dev/null
+++ b/car-usb-handler/res/values-ml/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"USB കൈകാര്യം ചെയ്യുന്ന സംവിധാനം"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"സംരക്ഷിച്ച ഉപകരണങ്ങൾ"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"USB ഉപകരണത്തിനായി, കൈകാര്യം ചെയ്യുന്ന ആപ്പ് നീക്കം ചെയ്യുക"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"%1$s എന്നതിനുള്ള ഡിഫോൾട്ടായ കൈകാര്യം ചെയ്യുന്ന സംവിധാനം മായ്ക്കണമെന്ന് നിങ്ങൾക്കുറപ്പാണോ?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"അതെ"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"റദ്ദാക്കുക"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"പിന്തുണയുള്ള കൈകാര്യം ചെയ്യുന്ന സംവിധാനം ലഭ്യമാക്കുന്നു"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"അജ്ഞാത USB ഉപകരണം"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-mn/strings.xml b/car-usb-handler/res/values-mn/strings.xml
new file mode 100644
index 0000000..869ba24
--- /dev/null
+++ b/car-usb-handler/res/values-mn/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"USB Хариуцагч"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Хадгалсан төхөөрөмжүүд"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"USB төхөөрөмжийн хариуцагч аппыг устгах"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"Та %1$s-н өгөгдмөл хариуцагч аппыг устгахдаа итгэлтэй байна уу?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Тийм"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Цуцлах"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Дэмжигдсэн хариуцагчийг авч байна"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Үл мэдэгдэх USB төхөөрөмж"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-mr/strings.xml b/car-usb-handler/res/values-mr/strings.xml
new file mode 100644
index 0000000..7475f26
--- /dev/null
+++ b/car-usb-handler/res/values-mr/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"USB हँडलर"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"सेव्ह केलेली डिव्हाइस"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"USB डिव्हाइससाठी हँडलिंग अ‍ॅप काढा"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"तुम्हाला नक्की %1$s साठी डीफॉल्ट हँडलिंग अ‍ॅप हटवायचे आहे का?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"होय"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"रद्द करा"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"सपोर्ट असलेले हँडलर मिळवत आहे"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"अज्ञात USB डिव्हाइस"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-ms/strings.xml b/car-usb-handler/res/values-ms/strings.xml
new file mode 100644
index 0000000..30c60c9
--- /dev/null
+++ b/car-usb-handler/res/values-ms/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"Pengendali USB"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Peranti disimpan"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"Alih keluar apl pengendali bagi peranti USB"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"Adakah anda pasti anda mahu memadamkan apl pengendali lalai bagi %1$s?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Ya"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Batal"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Mendapatkan pengendali disokong"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Peranti USB tidak diketahui"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-my/strings.xml b/car-usb-handler/res/values-my/strings.xml
new file mode 100644
index 0000000..3901b54
--- /dev/null
+++ b/car-usb-handler/res/values-my/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"USB စီမံသူ"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"သိမ်းထားသည့် စက်ပစ္စည်းများ"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"USB ကိရိယာအတွက် အသုံးပြုလျက်ရှိသည့် အက်ပ်ကို ဖယ်ရှားခြင်း"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"သင်သည်  %1$s အတွက် မူရင်းသုံးစွဲလျက်ရှိသည့် အက်ပ်ကို ဖယ်ရှားလိုသည်မှာ သေချာပါသလား။"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Yes"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"မလုပ်တော့"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"ပံ့ပိုးထားသည့် စီမံသူများကို ရယူခြင်း"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"အမျိုးအမည်မသိ USB စက်ပစ္စည်း"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-nb/strings.xml b/car-usb-handler/res/values-nb/strings.xml
new file mode 100644
index 0000000..b930d62
--- /dev/null
+++ b/car-usb-handler/res/values-nb/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"USB-behandler"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Lagrede enheter"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"Fjerning av behandlingsapp for USB-enhet"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"Er du sikker på at du vil slette standardappen for behandling av %1$s?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Ja"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Avbryt"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Innhenting av støttede behandlere"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Ukjent USB-enhet"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-ne/strings.xml b/car-usb-handler/res/values-ne/strings.xml
new file mode 100644
index 0000000..4278c92
--- /dev/null
+++ b/car-usb-handler/res/values-ne/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"USB ह्यान्ड्लर"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"सुरक्षित गरिएका यन्त्रहरू"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"USB यन्त्रको व्यवस्थापन गर्ने अनुप्रयोग हटाउनुहोस्‌"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"तपाईंले %1$s को व्यवस्थापन गर्ने पूर्वनिर्धारित अनुप्रयोग मेट्न खोज्नुभएकै हो?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"हो"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"रद्द गर्नुहोस्"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"समर्थित ह्यान्ड्लरहरू प्राप्त गर्दै"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"अज्ञात USB यन्त्र"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-nl/strings.xml b/car-usb-handler/res/values-nl/strings.xml
new file mode 100644
index 0000000..02d1a45
--- /dev/null
+++ b/car-usb-handler/res/values-nl/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"USB-handler"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Opgeslagen apparaten"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"Verwerkende app voor USB-apparaat verwijderen"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"Weet je zeker dat je de standaard verwerkings-app voor %1$s wilt verwijderen?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Ja"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Annuleren"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Ondersteunde handlers verkrijgen"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Onbekend USB-apparaat"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-or/strings.xml b/car-usb-handler/res/values-or/strings.xml
new file mode 100644
index 0000000..5b8443d
--- /dev/null
+++ b/car-usb-handler/res/values-or/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"USB ହ୍ୟାଣ୍ଡଲର୍‍"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"ସେଭ୍ ହୋଇଥିବା ଡିଭାଇସ୍‌ଗୁଡ଼ିକ"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"USB ଡିଭାଇସ୍ ପାଇଁ ହ୍ୟାଣ୍ଡଲିଂ ଆପ୍‌କୁ କାଢ଼ିଦିଅନ୍ତୁ"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"ଆପଣ କ\'ଣ ନିଶ୍ଚିତ ଭାବରେ %1$s ପାଇଁ ଡିଫଲ୍ଟ ହ୍ୟାଣ୍ଡଲିଂ ଆପ୍‍କୁ ଡିଲିଟ୍ କରିବାକୁ ଚାହୁଁଛନ୍ତି?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"ହଁ"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"ବାତିଲ୍ କରନ୍ତୁ"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"ସମର୍ଥିତ ହ୍ୟାଣ୍ଡଲର୍ ପ୍ରାପ୍ତ କରାଯାଉଛି"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"ଅଜଣା USB ଡିଭାଇସ୍"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-pa/strings.xml b/car-usb-handler/res/values-pa/strings.xml
new file mode 100644
index 0000000..35f95e9
--- /dev/null
+++ b/car-usb-handler/res/values-pa/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"USB ਹੈਂਡਲਰ"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"ਰੱਖਿਅਤ ਕੀਤੇ ਡੀਵਾਈਸ"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"USB ਡੀਵਾਈਸ ਨੂੰ ਹੈਂਡਲ ਕਰਨ ਵਾਲੀ ਐਪ ਹਟਾਓ"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"ਕੀ ਤੁਸੀਂ ਪੱਕਾ %1$s ਲਈ ਪੂਰਵ-ਨਿਰਧਾਰਤ ਹੈਂਡਲਿੰਗ ਐਪ ਨੂੰ ਮਿਟਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"ਹਾਂ"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"ਰੱਦ ਕਰੋ"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"ਸਮਰਥਿਤ ਹੈਂਡਲਰਾਂ ਨੂੰ ਪ੍ਰਾਪਤ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"ਅਗਿਆਤ USB ਡੀਵਾਈਸ"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-pl/strings.xml b/car-usb-handler/res/values-pl/strings.xml
new file mode 100644
index 0000000..8439ad6
--- /dev/null
+++ b/car-usb-handler/res/values-pl/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"Moduł obsługi USB"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Zapisane urządzenia"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"Usuwanie aplikacji do obsługi urządzenia USB"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"Czy na pewno chcesz usunąć domyślną aplikację do obsługi: %1$s?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Tak"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Anuluj"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Pobieranie obsługiwanych modułów"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Nieznane urządzenie USB"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-pt-rPT/strings.xml b/car-usb-handler/res/values-pt-rPT/strings.xml
new file mode 100644
index 0000000..e817fc7
--- /dev/null
+++ b/car-usb-handler/res/values-pt-rPT/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"Controlador USB"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Dispositivos guardados"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"Remova a aplicação de processamento para o dispositivo USB"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"Tem a certeza de que pretende eliminar a aplicação de processamento predefinida para %1$s?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Sim"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Cancelar"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"A obter os controladores suportados…"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Dispositivo USB desconhecido."</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-pt/strings.xml b/car-usb-handler/res/values-pt/strings.xml
new file mode 100644
index 0000000..3e3f91a
--- /dev/null
+++ b/car-usb-handler/res/values-pt/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"Gerenciador de USB"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Dispositivos salvos"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"Remover o app de gerenciamento de dispositivo USB"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"Tem certeza de que quer excluir o app de gerenciamento padrão de %1$s?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Sim"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Cancelar"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Instalar gerenciadores compatíveis"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Dispositivo USB desconhecido"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-ro/strings.xml b/car-usb-handler/res/values-ro/strings.xml
new file mode 100644
index 0000000..eaa754a
--- /dev/null
+++ b/car-usb-handler/res/values-ro/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"Handler USB"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Dispozitive salvate"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"Elimină aplicația de gestionare pentru dispozitivul USB"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"Sigur ștergeți aplicația prestabilită de gestionare pentru %1$s?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Da"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Anulați"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Se preiau handlerele acceptate"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Dispozitiv USB necunoscut"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-ru/strings.xml b/car-usb-handler/res/values-ru/strings.xml
new file mode 100644
index 0000000..913a460
--- /dev/null
+++ b/car-usb-handler/res/values-ru/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"Обработчик USB"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Сохраненные устройства"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"Удаление приложения для работы с USB-устройством"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"Удалить приложение по умолчанию для работы с устройством \"%1$s\"?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Да"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Отмена"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Установка поддерживаемых обработчиков…"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Неизвестное USB-устройство"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-si/strings.xml b/car-usb-handler/res/values-si/strings.xml
new file mode 100644
index 0000000..f088f8d
--- /dev/null
+++ b/car-usb-handler/res/values-si/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"USB හසුරුවනය"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"සුරැකි උපාංග"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"USB උපාංගය සඳහා යෙදුම් පරිහරණය ඉවත් කරන්න"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"ඔබට %1$s සඳහා වන පෙරනිමි පරිහරණ යෙදුම මැකිය යුතු බව ඔබට තහවුරුද?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"ඔව්"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"අවලංගු කරන්න"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"සහය දැක්වෙන හසුරුවන ලබා ගැනීම"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"නොදන්නා USB උපාංගය"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-sk/strings.xml b/car-usb-handler/res/values-sk/strings.xml
new file mode 100644
index 0000000..8ba43d7
--- /dev/null
+++ b/car-usb-handler/res/values-sk/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"Obslužný nástroj USB"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Uložené zariadenia"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"Odstrániť spravujúcu aplikáciu pre zariadenie USB"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"Naozaj chcete odstrániť predvolenú spravujúcu aplikáciu zariadenia %1$s?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Áno"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Zrušiť"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Získavajú sa podporované obslužné nástroje"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Neznáme zariadenie USB"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-sl/strings.xml b/car-usb-handler/res/values-sl/strings.xml
new file mode 100644
index 0000000..ffdb3d7
--- /dev/null
+++ b/car-usb-handler/res/values-sl/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"Rutina za obravnavo USB-ja"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Shranjene naprave"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"Odstranitev aplikacije za obdelavo za napravo USB"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"Ali ste prepričani, da želite izbrisati privzeti aplikacijo za obravnavo za %1$s?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Da"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Prekliči"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Pridobivanje podprtih rutin za obravnavo"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Neznana naprava USB"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-sq/strings.xml b/car-usb-handler/res/values-sq/strings.xml
new file mode 100644
index 0000000..5c5e75a
--- /dev/null
+++ b/car-usb-handler/res/values-sq/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"Përpunuesi USB"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Pajisjet e ruajtura"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"Hiq aplikacionin e trajtimit për pajisjen USB"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"Je i sigurt që dëshiron ta fshish aplikacionin e parazgjedhur të trajtimit për %1$s?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Po"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Anulo"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Po merren përpunuesit e mbështetur"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Pajisje USB e panjohur"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-sr/strings.xml b/car-usb-handler/res/values-sr/strings.xml
new file mode 100644
index 0000000..2121fbb
--- /dev/null
+++ b/car-usb-handler/res/values-sr/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"Апликација за управљање USB-ом"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Сачувани уређаји"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"Уклоните апликације за управљање за USB уређај"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"Желите ли стварно да избришете подразумевану апликацију за управљање за %1$s?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Да"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Откажи"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Преузимају се подржане апликације за управљање"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Непознат USB уређај"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-sv/strings.xml b/car-usb-handler/res/values-sv/strings.xml
new file mode 100644
index 0000000..77bece0
--- /dev/null
+++ b/car-usb-handler/res/values-sv/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"USB-hanterare"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Sparade enheter"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"Ta bort hanteringsapp för USB-enhet"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"Vill du ta bort standardappen för hantering av %1$s?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Ja"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Avbryt"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Hämtar hanterare som stöds"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Okänd USB-enhet"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-sw/strings.xml b/car-usb-handler/res/values-sw/strings.xml
new file mode 100644
index 0000000..befc61d
--- /dev/null
+++ b/car-usb-handler/res/values-sw/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"Kidhibiti cha USB"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Vifaa ulivyohifadhi"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"Kuondoa programu ya kudhibiti kwenye kifaa cha USB"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"Je, una uhakika unataka kufuta programu chaguomsingi inayodhibiti %1$s?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Ndiyo"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Ghairi"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Kupata vidhibiti vinavyoweza kutumika"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Kifaa cha USB kisichojulikana"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-ta/strings.xml b/car-usb-handler/res/values-ta/strings.xml
new file mode 100644
index 0000000..7ccbec1
--- /dev/null
+++ b/car-usb-handler/res/values-ta/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"USB ஹேண்ட்லர்"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"சேமிக்கப்பட்ட சாதனங்கள்"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"USB சாதனத்தைக் கையாளும் ஆப்ஸை அகற்றுதல்"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"%1$sஐக் கையாளும் இயல்புநிலை ஆப்ஸை நீக்கவா?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"சரி"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"வேண்டாம்"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"ஆதரிக்கும் ஹேண்ட்லர்களைப் பெறுதல்"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"அறியப்படாத USB சாதனம்"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-te/strings.xml b/car-usb-handler/res/values-te/strings.xml
new file mode 100644
index 0000000..c158f23
--- /dev/null
+++ b/car-usb-handler/res/values-te/strings.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"USB హ్యాండ్లర్‌"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"సేవ్ చేసిన పరికరాలు"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"USB పరికర కొరకు హాండీలింగ్ యాప్‌ని తొలగించండి"</string>
+    <!-- String.format failed for translation -->
+    <!-- no translation found for usb_pref_delete_message (5849493572520646218) -->
+    <skip />
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"అవును"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"రద్దు చేయి"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"మద్దతుగల హ్యాండ్లర్‌లను పొందడం"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"తెలియని USB పరికరం"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-th/strings.xml b/car-usb-handler/res/values-th/strings.xml
new file mode 100644
index 0000000..dad363d
--- /dev/null
+++ b/car-usb-handler/res/values-th/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"เครื่องจัดการ USB"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"อุปกรณ์ที่บันทึกไว้"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"นำแอปที่จัดการอุปกรณ์ USB ออก"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"คุณแน่ใจไหมว่าต้องการลบแอปการจัดการเริ่มต้นสำหรับ %1$s"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"ใช่"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"ยกเลิก"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"การรับเครื่องจัดการที่รองรับ"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"อุปกรณ์ USB ที่ไม่รู้จัก"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-tl/strings.xml b/car-usb-handler/res/values-tl/strings.xml
new file mode 100644
index 0000000..d5c7827
--- /dev/null
+++ b/car-usb-handler/res/values-tl/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"Handler ng USB"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Mga naka-save na device"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"Alisin ang app sa pangangasiwa para sa USB device"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"Sigurado ka bang gusto mong i-delete ang default na app sa pangangasiwa para sa %1$s?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Oo"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Kanselahin"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Kinukuha ang mga sinusuportahang handler"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Hindi alam na USB device"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-tr/strings.xml b/car-usb-handler/res/values-tr/strings.xml
new file mode 100644
index 0000000..daf300e
--- /dev/null
+++ b/car-usb-handler/res/values-tr/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"USB İşleyici"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Kayıtlı cihazlar"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"USB cihazı için kullanım uygulamasını kaldırma"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"%1$s için varsayılan kullanım uygulamasını silmek istediğinizden emin misiniz?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Evet"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"İptal"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Desteklenen işleyiciler alınıyor"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Bilinmeyen USB cihazı"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-uk/strings.xml b/car-usb-handler/res/values-uk/strings.xml
new file mode 100644
index 0000000..063c640
--- /dev/null
+++ b/car-usb-handler/res/values-uk/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"Обробник USB"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Збережені пристрої"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"Вилучити додаток для роботи з USB-пристроєм"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"Видалити стандартний додаток для обробки пристрою %1$s?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Так"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Скасувати"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Отримання підтримуваних обробників"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Невідомий USB-пристрій"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-ur/strings.xml b/car-usb-handler/res/values-ur/strings.xml
new file mode 100644
index 0000000..0f29d02
--- /dev/null
+++ b/car-usb-handler/res/values-ur/strings.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"USB ہینڈلر"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"محفوظ کردہ آلات"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"USB آلہ کو ہینڈل کرنے والی اپپ کو ہٹائیں"</string>
+    <!-- String.format failed for translation -->
+    <!-- no translation found for usb_pref_delete_message (5849493572520646218) -->
+    <skip />
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"ہاں"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"منسوخ کریں"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"تعاون یافتہ ہینڈلرز حاصل کر رہے ہیں"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"نامعلوم USB آلہ"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-uz/strings.xml b/car-usb-handler/res/values-uz/strings.xml
new file mode 100644
index 0000000..0fd6b6e
--- /dev/null
+++ b/car-usb-handler/res/values-uz/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"USB bilan ishlash vositasi"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Saqlangan qurilmalar"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"USB qurilma bilan ishlovchi ilovani olib tashlash"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"%1$s bilan ishlovchi standart ilovani olib tashlashni xohlaysizmi?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Ha"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Bekor qilish"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"USB bilan ishlash ilovalari"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Notanish USB qurilma"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-vi/strings.xml b/car-usb-handler/res/values-vi/strings.xml
new file mode 100644
index 0000000..c60ee41
--- /dev/null
+++ b/car-usb-handler/res/values-vi/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"Trình xử lý USB"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Thiết bị đã lưu"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"Xóa ứng dụng xử lý cho thiết bị USB"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"Bạn có chắc chắn muốn xóa ứng dụng xử lý mặc định cho %1$s không?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Có"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Hủy"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Đang tải trình xử lý được hỗ trợ"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Thiết bị USB không xác định"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-zh-rCN/strings.xml b/car-usb-handler/res/values-zh-rCN/strings.xml
new file mode 100644
index 0000000..4f3b3ef
--- /dev/null
+++ b/car-usb-handler/res/values-zh-rCN/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"USB 处理程序"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"保存的设备"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"移除 USB 设备的处理应用"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"确定要删除%1$s的默认处理应用吗?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"是"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"取消"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"正在获取受支持的处理程序"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"未知 USB 设备"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-zh-rHK/strings.xml b/car-usb-handler/res/values-zh-rHK/strings.xml
new file mode 100644
index 0000000..0cf2801
--- /dev/null
+++ b/car-usb-handler/res/values-zh-rHK/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"USB 處理常式"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"已儲存的裝置"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"移除 USB 裝置的處理應用程式"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"您確定要為 %1$s 刪除預設的處理應用程式嗎?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"是"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"取消"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"正在取得支援的處理常式"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"不明 USB 裝置"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-zh-rTW/strings.xml b/car-usb-handler/res/values-zh-rTW/strings.xml
new file mode 100644
index 0000000..fd58c32
--- /dev/null
+++ b/car-usb-handler/res/values-zh-rTW/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"USB 處理常式"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"已儲存的裝置"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"移除 USB 裝置的處理應用程式"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"確定要刪除「%1$s」的處理應用程式嗎?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"是"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"取消"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"取得支援的處理常式"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"不明的 USB 裝置"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values-zu/strings.xml b/car-usb-handler/res/values-zu/strings.xml
new file mode 100644
index 0000000..69e56e5
--- /dev/null
+++ b/car-usb-handler/res/values-zu/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="app_name" msgid="6963366455471441257">"Isibambi se-USB"</string>
+    <string name="usb_saved_devices" msgid="2829442070749964872">"Amadivayisi alondoloziwe"</string>
+    <string name="usb_pref_delete_title" msgid="3885061814853467483">"Susa uhlelo lokusebenza lokubamba ledivayisi ye-USB"</string>
+    <string name="usb_pref_delete_message" msgid="5849493572520646218">"Ingabe uqinisekile ukuthi ufuna ukususa uhlelo lokusebenza lokuphatha oluzenzakalelayo lwe-%1$s?"</string>
+    <string name="usb_pref_delete_yes" msgid="7803356145103146036">"Yebo"</string>
+    <string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Khansela"</string>
+    <string name="usb_resolving_handlers" msgid="1943100136172948686">"Ukuthola izibambi ezisekelwayo"</string>
+    <string name="usb_unknown_device" msgid="4211439272338937095">"Idivayisi ye-USB engaziwa"</string>
+  <string-array name="config_AoapIncompatibleDeviceIds">
+    <item msgid="4267974637522344258">"18d1:9302"</item>
+  </string-array>
+</resources>
diff --git a/car-usb-handler/res/values/strings.xml b/car-usb-handler/res/values/strings.xml
index be1e7a2..e73a03a 100644
--- a/car-usb-handler/res/values/strings.xml
+++ b/car-usb-handler/res/values/strings.xml
@@ -17,9 +17,6 @@
     <string name="app_name">USB Handler</string>
 
     <!-- USB Manager Settings -->
-    <string name="usb_title">USB Devices settings</string>
-    <string name="usb_description">Customize your USB Devices settings</string>
-    <string name="usb_available_devices">Connected devices</string>
     <string name="usb_saved_devices">Saved devices</string>
     <string name="usb_pref_delete_title">Remove handling app for USB device</string>
     <string name="usb_pref_delete_message">Are you sure you wan to delete dafault handling app for %1$s?</string>
@@ -27,4 +24,11 @@
     <string name="usb_pref_delete_cancel">Cancel</string>
     <string name="usb_resolving_handlers">Getting supported handlers</string>
     <string name="usb_unknown_device">Unknown USB device</string>
+
+    <!-- VID:PID pairs (in hexadecimal and separated by a colon, e.g. 18d1:4e11)
+         of Android devices known to be incompatible with AOAP. Devices in this
+         list will not be probed by UsbHostManagementActivity for AOAP support. -->
+    <string-array name="config_AoapIncompatibleDeviceIds">
+        <item>18d1:9302</item>
+    </string-array>
 </resources>
diff --git a/car-usb-handler/src/android/car/usb/handler/AoapInterface.java b/car-usb-handler/src/android/car/usb/handler/AoapInterface.java
index e4d843f..35b570a 100644
--- a/car-usb-handler/src/android/car/usb/handler/AoapInterface.java
+++ b/car-usb-handler/src/android/car/usb/handler/AoapInterface.java
@@ -13,11 +13,16 @@
  */
 package android.car.usb.handler;
 
+import android.content.Context;
 import android.hardware.usb.UsbConstants;
 import android.hardware.usb.UsbDevice;
 import android.hardware.usb.UsbDeviceConnection;
 import android.util.Log;
+import android.util.Pair;
+
 import java.io.IOException;
+import java.util.HashSet;
+import java.util.Set;
 
 final class AoapInterface {
     /**
@@ -94,6 +99,12 @@
      */
     public static final int AOAP_TIMEOUT_MS = 2000;
 
+    /**
+     * Set of VID:PID pairs blacklisted through config_AoapIncompatibleDeviceIds. Only
+     * isDeviceBlacklisted() should ever access this variable.
+     */
+    private static Set<Pair<Integer, Integer>> sBlacklistedVidPidPairs;
+
     private static final String TAG = AoapInterface.class.getSimpleName();
 
     public static int getProtocol(UsbDeviceConnection conn) {
@@ -107,8 +118,8 @@
         return (buffer[1] << 8) | buffer[0];
     }
 
-    public static boolean isSupported(UsbDeviceConnection conn) {
-        return getProtocol(conn) >= 1;
+    public static boolean isSupported(Context context, UsbDevice device, UsbDeviceConnection conn) {
+        return !isDeviceBlacklisted(context, device) && getProtocol(conn) >= 1;
     }
 
     public static void sendString(UsbDeviceConnection conn, int index, String string)
@@ -134,6 +145,33 @@
         }
     }
 
+    public static synchronized boolean isDeviceBlacklisted(Context context, UsbDevice device) {
+        if (sBlacklistedVidPidPairs == null) {
+            sBlacklistedVidPidPairs = new HashSet<>();
+            String[] idPairs =
+                context.getResources().getStringArray(R.array.config_AoapIncompatibleDeviceIds);
+            for (String idPair : idPairs) {
+                boolean success = false;
+                String[] tokens = idPair.split(":");
+                if (tokens.length == 2) {
+                    try {
+                        sBlacklistedVidPidPairs.add(Pair.create(Integer.parseInt(tokens[0], 16),
+                                                                Integer.parseInt(tokens[1], 16)));
+                        success = true;
+                    } catch (NumberFormatException e) {
+                    }
+                }
+                if (!success) {
+                    Log.e(TAG, "config_AoapIncompatibleDeviceIds contains malformed value: "
+                            + idPair);
+                }
+            }
+        }
+
+        return sBlacklistedVidPidPairs.contains(Pair.create(device.getVendorId(),
+                                                            device.getProductId()));
+    }
+
     public static boolean isDeviceInAoapMode(UsbDevice device) {
         if (device == null) {
             return false;
diff --git a/car-usb-handler/src/android/car/usb/handler/BootUsbScanner.java b/car-usb-handler/src/android/car/usb/handler/BootUsbScanner.java
index 18dabdc..9658a37 100644
--- a/car-usb-handler/src/android/car/usb/handler/BootUsbScanner.java
+++ b/car-usb-handler/src/android/car/usb/handler/BootUsbScanner.java
@@ -20,7 +20,8 @@
             } else {
                 UsbDeviceConnection connection = UsbUtil.openConnection(manager, device);
                 try {
-                    if (connection != null && AoapInterface.isSupported(connection)) {
+                    if (connection != null
+                            && AoapInterface.isSupported(context, device, connection)) {
                         handle(context, device);
                     }
                 } finally {
diff --git a/car-usb-handler/src/android/car/usb/handler/UsbDeviceHandlerResolver.java b/car-usb-handler/src/android/car/usb/handler/UsbDeviceHandlerResolver.java
index 51c2838..b5abc58 100644
--- a/car-usb-handler/src/android/car/usb/handler/UsbDeviceHandlerResolver.java
+++ b/car-usb-handler/src/android/car/usb/handler/UsbDeviceHandlerResolver.java
@@ -489,7 +489,7 @@
         DeviceContext deviceContext =
                 new DeviceContext(device, UsbDeviceSettings.constructSettings(device), settings);
         if (deviceContext.connection != null
-                && AoapInterface.isSupported(deviceContext.connection)) {
+                && AoapInterface.isSupported(mContext, device, deviceContext.connection)) {
             deviceContext.mActiveDeviceOptions.addAll(getDeviceMatches(device, intent, true));
             queryNextAoapHandler(deviceContext);
         } else {
diff --git a/car-usb-handler/src/android/car/usb/handler/UsbHostController.java b/car-usb-handler/src/android/car/usb/handler/UsbHostController.java
index 5c61a98..e4b6df3 100644
--- a/car-usb-handler/src/android/car/usb/handler/UsbHostController.java
+++ b/car-usb-handler/src/android/car/usb/handler/UsbHostController.java
@@ -25,7 +25,9 @@
 import android.os.Looper;
 import android.os.Message;
 import android.util.Log;
+
 import com.android.internal.annotations.GuardedBy;
+
 import java.util.ArrayList;
 import java.util.List;
 
@@ -90,7 +92,6 @@
         filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
         filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
         context.registerReceiver(mUsbBroadcastReceiver, filter);
-
     }
 
     private synchronized void setActiveDeviceIfMatch(UsbDevice device) {
@@ -129,11 +130,11 @@
         return activeDevice != null && UsbUtil.isDevicesMatching(activeDevice, device);
     }
 
-    private String generateTitle() {
-        String manufacturer = mActiveDevice.getManufacturerName();
-        String product = mActiveDevice.getProductName();
+    private static String generateTitle(Context context, UsbDevice usbDevice) {
+        String manufacturer = usbDevice.getManufacturerName();
+        String product = usbDevice.getProductName();
         if (manufacturer == null && product == null) {
-            return mContext.getString(R.string.usb_unknown_device);
+            return context.getString(R.string.usb_unknown_device);
         }
         if (manufacturer != null && product != null) {
             return manufacturer + " " + product;
@@ -158,14 +159,14 @@
 
         UsbDeviceSettings settings = mUsbSettingsStorage.getSettings(device);
         if (settings != null && mUsbResolver.dispatch(
-                    mActiveDevice, settings.getHandler(), settings.getAoap())) {
+                    device, settings.getHandler(), settings.getAoap())) {
             if (LOCAL_LOGV) {
                 Log.v(TAG, "Usb Device: " + device + " was sent to component: "
                         + settings.getHandler());
             }
             return;
         }
-        mCallback.titleChanged(generateTitle());
+        mCallback.titleChanged(generateTitle(mContext, device));
         mUsbResolver.resolve(device);
     }
 
diff --git a/car-usb-handler/src/android/car/usb/handler/UsbUtil.java b/car-usb-handler/src/android/car/usb/handler/UsbUtil.java
index 823c660..b251715 100644
--- a/car-usb-handler/src/android/car/usb/handler/UsbUtil.java
+++ b/car-usb-handler/src/android/car/usb/handler/UsbUtil.java
@@ -16,6 +16,7 @@
 package android.car.usb.handler;
 
 import android.annotation.Nullable;
+import android.content.Context;
 import android.hardware.usb.UsbDevice;
 import android.hardware.usb.UsbDeviceConnection;
 import android.hardware.usb.UsbManager;
@@ -30,12 +31,13 @@
  * Util methods to work with USB devices.
  */
 class UsbUtil {
-    public static List<UsbDevice> findAllPossibleAndroidDevices(UsbManager usbManager) {
+    public static List<UsbDevice> findAllPossibleAndroidDevices(Context context,
+            UsbManager usbManager) {
         HashMap<String, UsbDevice> devices = usbManager.getDeviceList();
         ArrayList<UsbDevice> androidDevices = new ArrayList<>(devices.size());
         for (UsbDevice device : devices.values()) {
             UsbDeviceConnection connection = openConnection(usbManager, device);
-            if (AoapInterface.isSupported(connection)) {
+            if (AoapInterface.isSupported(context, device, connection)) {
                 androidDevices.add(device);
             }
             connection.close();
diff --git a/car_product/build/car.mk b/car_product/build/car.mk
index 7c08389..62c8042 100644
--- a/car_product/build/car.mk
+++ b/car_product/build/car.mk
@@ -40,16 +40,14 @@
     VmsSubscriberClientSample \
     android.car.cluster.loggingrenderer \
     DirectRenderingClusterSample \
-    com.android.car.powertestservice \
     GarageModeTestApp \
 
 # SEPolicy for test apps / services
 BOARD_SEPOLICY_DIRS += packages/services/Car/car_product/sepolicy/test
 endif
 
-PRODUCT_COPY_FILES := \
-    frameworks/av/media/libeffects/data/audio_effects.conf:system/etc/audio_effects.conf \
-    packages/services/Car/car_product/preloaded-classes-car:system/etc/preloaded-classes \
+PRODUCT_COPY_FILES += \
+    frameworks/av/media/libeffects/data/audio_effects.conf:system/etc/audio_effects.conf
 
 PRODUCT_PROPERTY_OVERRIDES += \
     ro.carrier=unknown \
@@ -86,13 +84,11 @@
 # Automotive specific packages
 PRODUCT_PACKAGES += \
     CarService \
-    CarTrustAgentService \
     CarDialerApp \
     CarRadioApp \
     OverviewApp \
     CarLauncher \
     CarSystemUI \
-    CarLensPickerApp \
     LocalMediaPlayer \
     CarMediaApp \
     CarMessengerApp \
@@ -114,12 +110,8 @@
 PRODUCT_COPY_FILES += \
     packages/services/Car/car_product/bootanimations/bootanimation-832.zip:system/media/bootanimation.zip
 
-PRODUCT_PROPERTY_OVERRIDES += \
-    fmas.spkr_6ch=35,20,110 \
-    fmas.spkr_2ch=35,25 \
-    fmas.spkr_angles=10 \
-    fmas.spkr_sgain=0 \
-    media.aac_51_output_enabled=true
+PRODUCT_COPY_FILES += \
+    packages/services/Car/car_product/init/init.car.rc:system/etc/init/init.car.rc
 
 PRODUCT_LOCALES := en_US af_ZA am_ET ar_EG bg_BG bn_BD ca_ES cs_CZ da_DK de_DE el_GR en_AU en_GB en_IN es_ES es_US et_EE eu_ES fa_IR fi_FI fr_CA fr_FR gl_ES hi_IN hr_HR hu_HU hy_AM in_ID is_IS it_IT iw_IL ja_JP ka_GE km_KH ko_KR ky_KG lo_LA lt_LT lv_LV km_MH kn_IN mn_MN ml_IN mk_MK mr_IN ms_MY my_MM ne_NP nb_NO nl_NL pl_PL pt_BR pt_PT ro_RO ru_RU si_LK sk_SK sl_SI sr_RS sv_SE sw_TZ ta_IN te_IN th_TH tl_PH tr_TR uk_UA vi_VN zh_CN zh_HK zh_TW zu_ZA en_XA ar_XB
 
@@ -134,5 +126,8 @@
 PRODUCT_HIDDENAPI_STUBS_SYSTEM := \
     android.car-system-stubs
 
+PRODUCT_HIDDENAPI_STUBS_TEST := \
+    android.car-test-stubs
+
 INCLUDED_ANDROID_CAR_TO_PRODUCT_BOOT_JARS := yes
 endif
diff --git a/car_product/build/car_base.mk b/car_product/build/car_base.mk
index 0e5ebab..385a2ea 100644
--- a/car_product/build/car_base.mk
+++ b/car_product/build/car_base.mk
@@ -42,6 +42,7 @@
     MmsService \
     ExternalStorageProvider \
     atrace \
+    cameraserver \
     libandroidfw \
     libaudioutils \
     libmdnssd \
diff --git a/car_product/init/init.car.rc b/car_product/init/init.car.rc
index 1ca29ce..0bcfe96 100644
--- a/car_product/init/init.car.rc
+++ b/car_product/init/init.car.rc
@@ -1 +1,3 @@
 # Insert car-specific startup services here
+on post-fs-data
+    mkdir /data/system/car 0700 system system
diff --git a/car_product/overlay/frameworks/base/core/res/res/color/car_switch.xml b/car_product/overlay/frameworks/base/core/res/res/color/car_switch.xml
new file mode 100644
index 0000000..ebf3841
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/color/car_switch.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright 2019 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item
+        android:color="?attr/colorControlActivated"
+        android:state_checked="true"/>
+    <item
+        android:color="?attr/colorSwitchThumbNormal"/>
+</selector>
diff --git a/car_product/overlay/frameworks/base/core/res/res/color/primary_text.xml b/car_product/overlay/frameworks/base/core/res/res/color/primary_text.xml
new file mode 100644
index 0000000..6caf472
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/color/primary_text.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright 2019 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item
+        android:alpha="0.5"
+        android:color="@color/car_body1"
+        android:state_enabled="false"/>
+    <item android:color="@color/car_body1"/>
+</selector>
diff --git a/car_product/overlay/frameworks/base/core/res/res/drawable/car_checkbox.xml b/car_product/overlay/frameworks/base/core/res/res/drawable/car_checkbox.xml
new file mode 100644
index 0000000..00e3a19
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/drawable/car_checkbox.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright 2019 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.
+-->
+
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+    <item
+        android:width="@dimen/car_primary_icon_size"
+        android:height="@dimen/car_primary_icon_size"
+        android:drawable="@drawable/btn_check_material_anim"/>
+</layer-list>
diff --git a/car_product/overlay/frameworks/base/core/res/res/drawable/car_switch_thumb.xml b/car_product/overlay/frameworks/base/core/res/res/drawable/car_switch_thumb.xml
new file mode 100644
index 0000000..03efc18
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/drawable/car_switch_thumb.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright 2019 The Android Open Source Project
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+
+<shape
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="oval">
+    <solid android:color="@color/car_switch"/>
+    <size
+        android:width="@dimen/car_seekbar_thumb_size"
+        android:height="@dimen/car_seekbar_thumb_size"/>
+</shape>
diff --git a/car_product/overlay/frameworks/base/core/res/res/layout/alert_dialog_material.xml b/car_product/overlay/frameworks/base/core/res/res/layout/alert_dialog_material.xml
index a302a5d..0298cce 100644
--- a/car_product/overlay/frameworks/base/core/res/res/layout/alert_dialog_material.xml
+++ b/car_product/overlay/frameworks/base/core/res/res/layout/alert_dialog_material.xml
@@ -21,6 +21,7 @@
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:gravity="start|top"
+    android:background="@color/car_card"
     android:orientation="vertical">
 
     <include layout="@layout/alert_dialog_title_material" />
diff --git a/car_product/overlay/frameworks/base/core/res/res/layout/car_preference.xml b/car_product/overlay/frameworks/base/core/res/res/layout/car_preference.xml
new file mode 100644
index 0000000..899fe6a
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/layout/car_preference.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright 2019 The Android Open Source Project
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+
+<RelativeLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:background="?attr/selectableItemBackground"
+    android:focusable="true"
+    android:minHeight="?attr/listPreferredItemHeightSmall"
+    android:paddingEnd="?attr/listPreferredItemPaddingEnd"
+    android:paddingStart="?attr/listPreferredItemPaddingStart">
+
+    <com.android.internal.widget.PreferenceImageView
+        android:id="@id/icon"
+        android:layout_width="@dimen/car_primary_icon_size"
+        android:layout_height="@dimen/car_primary_icon_size"
+        android:layout_alignParentStart="true"
+        android:layout_centerVertical="true"
+        android:layout_marginBottom="@dimen/car_padding_2"
+        android:layout_marginEnd="?attr/listPreferredItemPaddingEnd"
+        android:layout_marginTop="@dimen/car_padding_2"/>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_centerVertical="true"
+        android:layout_marginBottom="@dimen/car_padding_2"
+        android:layout_marginTop="@dimen/car_padding_2"
+        android:layout_toEndOf="@id/icon"
+        android:layout_toStartOf="@id/widget_frame"
+        android:orientation="vertical">
+
+        <TextView
+            android:id="@id/title"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:ellipsize="end"
+            android:singleLine="true"
+            android:textAppearance="?attr/textAppearanceListItem"/>
+
+        <TextView
+            android:id="@id/summary"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:textAppearance="?attr/textAppearanceListItemSecondary"/>
+
+    </LinearLayout>
+
+    <!-- Preference should place its actual preference widget here. -->
+    <FrameLayout
+        android:id="@id/widget_frame"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentEnd="true"
+        android:layout_centerVertical="true"/>
+
+</RelativeLayout>
diff --git a/car_product/overlay/frameworks/base/core/res/res/layout/car_preference_category.xml b/car_product/overlay/frameworks/base/core/res/res/layout/car_preference_category.xml
new file mode 100644
index 0000000..6bc0306
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/layout/car_preference_category.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright 2019 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.
+-->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:background="?attr/selectableItemBackground"
+    android:focusable="true"
+    android:gravity="center_vertical"
+    android:minHeight="@dimen/car_card_header_height"
+    android:orientation="horizontal"
+    android:paddingEnd="?attr/listPreferredItemPaddingEnd"
+    android:paddingStart="?attr/listPreferredItemPaddingStart">
+
+    <com.android.internal.widget.PreferenceImageView
+        android:id="@id/icon"
+        android:layout_width="@dimen/car_primary_icon_size"
+        android:layout_height="@dimen/car_primary_icon_size"
+        android:layout_gravity="center_vertical"
+        android:layout_marginBottom="@dimen/car_padding_2"
+        android:layout_marginEnd="?attr/listPreferredItemPaddingEnd"
+        android:layout_marginTop="@dimen/car_padding_2"/>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginBottom="@dimen/car_padding_2"
+        android:layout_marginTop="@dimen/car_padding_2"
+        android:orientation="vertical">
+
+        <TextView
+            android:id="@id/title"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:fontFamily="sans-serif-medium"
+            android:textAlignment="viewStart"
+            android:textAppearance="?attr/textAppearanceSmall"
+            android:textColor="?attr/colorAccent"/>
+
+        <TextView
+            android:id="@id/summary"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:ellipsize="end"
+            android:singleLine="true"
+            android:textColor="?attr/textColorSecondary"/>
+
+    </LinearLayout>
+
+</LinearLayout>
diff --git a/car_product/overlay/frameworks/base/core/res/res/layout/resolve_list_item.xml b/car_product/overlay/frameworks/base/core/res/res/layout/resolve_list_item.xml
new file mode 100644
index 0000000..2cdb228
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/layout/resolve_list_item.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+* Copyright 2018, 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.
+*/
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+              android:orientation="horizontal"
+              android:layout_height="wrap_content"
+              android:layout_width="match_parent"
+              android:minHeight="?attr/listPreferredItemHeightLarge"
+              android:paddingTop="4dp"
+              android:paddingBottom="4dp"
+              android:background="?attr/activatedBackgroundIndicator">
+    <ImageView android:id="@+id/icon"
+               android:layout_width="75dp"
+               android:layout_height="75dp"
+               android:layout_gravity="start|center_vertical"
+               android:layout_marginStart="?attr/listPreferredItemPaddingStart"
+               android:layout_marginTop="12dp"
+               android:layout_marginBottom="12dp"
+               android:scaleType="fitXY" />
+
+    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+                  android:gravity="start|center_vertical"
+                  android:orientation="vertical"
+                  android:paddingStart="?attr/listPreferredItemPaddingStart"
+                  android:paddingEnd="?attr/listPreferredItemPaddingEnd"
+                  android:layout_height="wrap_content"
+                  android:layout_width="wrap_content"
+                  android:layout_gravity="start|center_vertical">
+        <!-- Activity name -->
+        <TextView android:id="@android:id/text1"
+                  android:layout_width="wrap_content"
+                  android:layout_height="wrap_content"
+                  android:layout_gravity="start|center_vertical"
+                  android:textAppearance="?attr/textAppearanceLarge"
+                  android:minHeight="50sp"
+                  android:minLines="1"
+                  android:maxLines="1"
+                  android:textColor="@color/white"
+                  android:ellipsize="marquee" />
+        <!-- Extended activity info to distinguish between duplicate activity names -->
+        <TextView android:id="@android:id/text2"
+                  android:textAppearance="?android:attr/textAppearanceLarge"
+                  android:layout_width="wrap_content"
+                  android:layout_height="wrap_content"
+                  android:layout_gravity="center_vertical"
+                  android:textColor="@color/white"
+                  android:minLines="1"
+                  android:maxLines="1"
+                  android:ellipsize="marquee" />
+    </LinearLayout>
+</LinearLayout>
diff --git a/car_product/overlay/frameworks/base/core/res/res/layout/resolver_different_item_header.xml b/car_product/overlay/frameworks/base/core/res/res/layout/resolver_different_item_header.xml
new file mode 100644
index 0000000..0874dde
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/layout/resolver_different_item_header.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * Copyright 2019, 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.
+ */
+-->
+<TextView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:layout_alwaysShow="true"
+    android:text="@string/use_a_different_app"
+    android:minHeight="56dp"
+    android:textAppearance="?attr/textAppearanceLarge"
+    android:gravity="start|center_vertical"
+    android:paddingStart="16dp"
+    android:paddingEnd="16dp"
+    android:paddingTop="8dp"
+    android:paddingBottom="8dp"
+    android:elevation="8dp"
+/>
\ No newline at end of file
diff --git a/car_product/overlay/frameworks/base/core/res/res/layout/resolver_list.xml b/car_product/overlay/frameworks/base/core/res/res/layout/resolver_list.xml
new file mode 100644
index 0000000..d4cf11e
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/layout/resolver_list.xml
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+* Copyright 2018, 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.
+*/
+-->
+<com.android.internal.widget.ResolverDrawerLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:id="@id/contentPanel">
+
+    <LinearLayout
+        android:id="@+id/button_bar"
+        android:visibility="gone"
+        style="?attr/buttonBarStyle"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_ignoreOffset="true"
+        android:layout_alwaysShow="true"
+        android:layout_hasNestedScrollIndicator="true"
+        android:background="?attr/colorBackgroundFloating"
+        android:orientation="horizontal"
+        android:paddingTop="8dp"
+        android:paddingBottom="8dp"
+        android:paddingStart="12dp"
+        android:weightSum="5"
+        android:paddingEnd="12dp"
+        android:elevation="8dp">
+
+        <TextView
+            android:id="@+id/profile_button"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginEnd="8dp"
+            android:paddingStart="8dp"
+            android:paddingEnd="8dp"
+            android:textSize="40sp"
+            android:layout_weight="5"
+            android:layout_gravity = "left"
+            android:visibility="gone"
+            android:textColor="?attr/colorAccent"
+            android:singleLine="true"/>
+
+        <TextView
+            android:id="@+id/title"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:minHeight="56dp"
+            android:layout_gravity = "left"
+            android:layout_weight="3"
+            android:paddingTop="8dp"
+            android:layout_below="@id/profile_button"
+            android:paddingBottom="8dp"/>
+
+        <Button
+            android:id="@+id/button_once"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:enabled="false"
+            android:layout_gravity = "right"
+            android:text="@string/activity_resolver_use_once"
+            android:layout_weight="1"
+            android:onClick="onButtonClick"/>
+
+        <Button
+            android:id="@+id/button_always"
+            android:layout_marginLeft="10dp"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:enabled="false"
+            android:layout_gravity = "right"
+            android:text="@string/activity_resolver_use_always"
+            android:layout_weight="1"
+            android:onClick="onButtonClick"/>
+    </LinearLayout>
+
+    <ListView
+        android:layout_width="match_parent"
+        android:layout_height="500dp"
+        android:id="@+id/resolver_list"
+        android:clipToPadding="false"
+        android:scrollbarStyle="outsideOverlay"
+        android:background="?attr/colorBackgroundFloating"
+        android:elevation="8dp"
+        android:nestedScrollingEnabled="true"
+        android:scrollIndicators="top|bottom"/>
+
+    <TextView android:id="@+id/empty"
+              android:layout_width="match_parent"
+              android:layout_height="wrap_content"
+              android:background="?attr/colorBackgroundFloating"
+              android:elevation="8dp"
+              android:layout_alwaysShow="true"
+              android:text="@string/noApplications"
+              android:padding="32dp"
+              android:gravity="center"
+              android:visibility="gone"/>
+
+</com.android.internal.widget.ResolverDrawerLayout>
diff --git a/car_product/overlay/frameworks/base/core/res/res/layout/resolver_list_with_default.xml b/car_product/overlay/frameworks/base/core/res/res/layout/resolver_list_with_default.xml
new file mode 100644
index 0000000..6155465
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/layout/resolver_list_with_default.xml
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+* Copyright 2018, 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.
+*/
+-->
+<com.android.internal.widget.ResolverDrawerLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:maxCollapsedHeight="200dp"
+    android:id="@id/contentPanel">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:weightSum="5"
+        android:layout_alwaysShow="true"
+        android:orientation="vertical"
+        android:background="?attr/colorBackgroundFloating"
+        android:elevation="8dp">
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_weight="0.5"
+            android:orientation="horizontal">
+
+            <ImageView
+                android:id="@+id/icon"
+                android:layout_width="24dp"
+                android:layout_height="24dp"
+                android:layout_gravity="start|top"
+                android:layout_marginStart="16dp"
+                android:layout_marginEnd="16dp"
+                android:layout_marginTop="20dp"
+                android:src="@drawable/resolver_icon_placeholder"
+                android:scaleType="fitCenter"/>
+
+            <TextView
+                android:id="@+id/title"
+                android:layout_width="0dp"
+                android:layout_weight="1"
+                android:layout_height="?attr/listPreferredItemHeight"
+                android:layout_marginStart="16dp"
+                android:textAppearance="?attr/textAppearanceMedium"
+                android:gravity="start|center_vertical"
+                android:paddingEnd="16dp"/>
+
+            <LinearLayout
+                android:id="@+id/profile_button"
+                android:layout_width="wrap_content"
+                android:layout_height="48dp"
+                android:layout_marginTop="4dp"
+                android:layout_marginEnd="4dp"
+                android:paddingStart="8dp"
+                android:paddingEnd="8dp"
+                android:paddingTop="4dp"
+                android:paddingBottom="4dp"
+                android:focusable="true"
+                android:visibility="gone"
+                style="?attr/borderlessButtonStyle">
+
+                <ImageView
+                    android:id="@+id/icon"
+                    android:layout_width="24dp"
+                    android:layout_height="24dp"
+                    android:layout_gravity="start|center_vertical"
+                    android:layout_marginEnd="?attr/listPreferredItemPaddingEnd"
+                    android:layout_marginTop="12dp"
+                    android:layout_marginBottom="12dp"
+                    android:scaleType="fitCenter"/>
+
+                <TextView
+                    android:id="@id/text1"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_gravity="start|center_vertical"
+                    android:layout_marginEnd="?attr/listPreferredItemPaddingEnd"
+                    android:textAppearance="?attr/textAppearanceButton"
+                    android:textColor="?attr/textColorPrimary"
+                    android:minLines="1"
+                    android:maxLines="1"
+                    android:ellipsize="marquee"/>
+            </LinearLayout>
+        </LinearLayout>
+
+        <LinearLayout
+            android:id="@+id/button_bar"
+            android:visibility="gone"
+            style="?attr/buttonBarStyle"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_alwaysShow="true"
+            android:gravity="end|center_vertical"
+            android:layout_weight="0.5"
+            android:orientation="horizontal"
+            android:layoutDirection="locale"
+            android:measureWithLargestChild="true"
+            android:paddingTop="8dp"
+            android:paddingBottom="8dp"
+            android:paddingStart="12dp"
+            android:paddingEnd="12dp"
+            android:elevation="8dp">
+
+            <Button
+                android:id="@+id/button_once"
+                android:layout_width="wrap_content"
+                android:layout_gravity="start"
+                android:maxLines="2"
+                style="?attr/buttonBarNegativeButtonStyle"
+                android:minHeight="@dimen/alert_dialog_button_bar_height"
+                android:layout_height="wrap_content"
+                android:enabled="false"
+                android:text="@string/activity_resolver_use_once"
+                android:onClick="onButtonClick"/>
+
+            <Button
+                android:id="@+id/button_always"
+                android:layout_width="wrap_content"
+                android:layout_gravity="end"
+                android:maxLines="2"
+                android:minHeight="@dimen/alert_dialog_button_bar_height"
+                style="?attr/buttonBarPositiveButtonStyle"
+                android:layout_height="wrap_content"
+                android:enabled="false"
+                android:text="@string/activity_resolver_use_always"
+                android:onClick="onButtonClick"/>
+        </LinearLayout>
+
+        <View
+            android:layout_width="match_parent"
+            android:layout_height="1dp"
+            android:background="?attr/dividerVertical"/>
+
+        <ListView
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:id="@+id/resolver_list"
+            android:layout_weight="4"
+            android:clipToPadding="false"
+            android:scrollbarStyle="outsideOverlay"
+            android:background="?attr/colorBackgroundFloating"
+            android:elevation="8dp"
+            android:nestedScrollingEnabled="true"
+            android:divider="@null"/>
+    </LinearLayout>
+
+</com.android.internal.widget.ResolverDrawerLayout>
\ No newline at end of file
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-af/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-af/strings.xml
new file mode 100644
index 0000000..cf04334
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-af/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Bestuurder"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-am/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-am/strings.xml
new file mode 100644
index 0000000..4afdf25
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-am/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"ነጂ"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-ar/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-ar/strings.xml
new file mode 100644
index 0000000..874ff29
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-ar/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"السائق"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-as/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-as/strings.xml
new file mode 100644
index 0000000..9091503
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-as/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"চালক"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-az/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-az/strings.xml
new file mode 100644
index 0000000..67b565b
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-az/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Sürücü"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-b+sr+Latn/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 0000000..5f857c2
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Vozač"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-be/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-be/strings.xml
new file mode 100644
index 0000000..7cc0826
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-be/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Вадзіцель"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-bg/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-bg/strings.xml
new file mode 100644
index 0000000..ad2abf6
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-bg/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Шофьор"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-bn/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-bn/strings.xml
new file mode 100644
index 0000000..cb6d8a6
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-bn/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"ড্রাইভার"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-bs/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-bs/strings.xml
new file mode 100644
index 0000000..5f857c2
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-bs/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Vozač"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-ca/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-ca/strings.xml
new file mode 100644
index 0000000..130c869
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-ca/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Conductor"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-cs/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-cs/strings.xml
new file mode 100644
index 0000000..40d9e58
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-cs/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Řidič"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-da/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-da/strings.xml
new file mode 100644
index 0000000..25c544c
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-da/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Chauffør"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-de/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-de/strings.xml
new file mode 100644
index 0000000..6a1deea
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-de/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Fahrer"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-el/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-el/strings.xml
new file mode 100644
index 0000000..4c317af
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-el/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Οδηγός"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-en-rAU/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-en-rAU/strings.xml
new file mode 100644
index 0000000..a4a3e1a
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-en-rAU/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Driver"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-en-rCA/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-en-rCA/strings.xml
new file mode 100644
index 0000000..a4a3e1a
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-en-rCA/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Driver"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-en-rGB/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-en-rGB/strings.xml
new file mode 100644
index 0000000..a4a3e1a
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-en-rGB/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Driver"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-en-rIN/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-en-rIN/strings.xml
new file mode 100644
index 0000000..a4a3e1a
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-en-rIN/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Driver"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-en-rXC/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-en-rXC/strings.xml
new file mode 100644
index 0000000..725d577
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-en-rXC/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‎‏‏‎‏‎‎‎‎‏‏‏‏‎‎‏‎‎‎‎‏‎‎‎‏‏‎‎‏‎‎‎‏‏‎‎‏‎‏‏‏‎‎‎‏‏‎‏‏‎‏‏‎‏‎‎‎Driver‎‏‎‎‏‎"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-es-rUS/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-es-rUS/strings.xml
new file mode 100644
index 0000000..130c869
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-es-rUS/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Conductor"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-es/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-es/strings.xml
new file mode 100644
index 0000000..130c869
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-es/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Conductor"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-et/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-et/strings.xml
new file mode 100644
index 0000000..4cffa81
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-et/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Sõitja"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-eu/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-eu/strings.xml
new file mode 100644
index 0000000..14ccb8e
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-eu/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Gidaria"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-fa/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-fa/strings.xml
new file mode 100644
index 0000000..19c4ff9
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-fa/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"راننده"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-fi/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-fi/strings.xml
new file mode 100644
index 0000000..07853e1
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-fi/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Kuljettaja"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-fr-rCA/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-fr-rCA/strings.xml
new file mode 100644
index 0000000..3cfdaf3
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-fr-rCA/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Conducteur"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-fr/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-fr/strings.xml
new file mode 100644
index 0000000..3cfdaf3
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-fr/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Conducteur"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-gl/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-gl/strings.xml
new file mode 100644
index 0000000..fa09574
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-gl/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Condutor"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-gu/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-gu/strings.xml
new file mode 100644
index 0000000..62dd43e
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-gu/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"ડ્રાઇવર"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-h1752dp/dimens.xml b/car_product/overlay/frameworks/base/core/res/res/values-h1752dp/dimens.xml
index f975711..da38586 100644
--- a/car_product/overlay/frameworks/base/core/res/res/values-h1752dp/dimens.xml
+++ b/car_product/overlay/frameworks/base/core/res/res/values-h1752dp/dimens.xml
@@ -15,6 +15,9 @@
 -->
 
 <resources>
+    <!-- Application Bar -->
+    <dimen name="car_app_bar_height">112dp</dimen>
+
     <!-- Text size for car -->
     <dimen name="car_title2_size">32sp</dimen>
     <dimen name="car_body1_size">32sp</dimen>
@@ -32,4 +35,7 @@
     <dimen name="car_keyline_2">108dp</dimen>
     <dimen name="car_keyline_3">152dp</dimen>
     <dimen name="car_keyline_4">182dp</dimen>
+
+    <!-- Minimum height of list items. -->
+    <dimen name="car_single_line_list_item_height">128dp</dimen>
 </resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-h600dp/dimens.xml b/car_product/overlay/frameworks/base/core/res/res/values-h600dp/dimens.xml
index b659bef..ba726d9 100644
--- a/car_product/overlay/frameworks/base/core/res/res/values-h600dp/dimens.xml
+++ b/car_product/overlay/frameworks/base/core/res/res/values-h600dp/dimens.xml
@@ -14,6 +14,9 @@
 limitations under the License.
 -->
 <resources>
+    <!-- Application Bar -->
+    <dimen name="car_app_bar_height">96dp</dimen>
+
     <!-- Size of notification text titles (see TextAppearance.StatusBar.EventContent.Title) -->
     <dimen name="notification_title_text_size">40sp</dimen>
 
@@ -36,4 +39,7 @@
 
     <!-- The size of the media actions in the media notification. -->
     <dimen name="media_notification_action_button_size">56dp</dimen>
+
+    <!-- Minimum height of list items. -->
+    <dimen name="car_single_line_list_item_height">116dp</dimen>
 </resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-hi/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-hi/strings.xml
new file mode 100644
index 0000000..fbe93e1c
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-hi/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"ड्राइवर"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-hr/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-hr/strings.xml
new file mode 100644
index 0000000..5f857c2
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-hr/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Vozač"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-hu/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-hu/strings.xml
new file mode 100644
index 0000000..83dc49a
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-hu/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Sofőr"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-hy/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-hy/strings.xml
new file mode 100644
index 0000000..cbaa105
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-hy/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Վարորդ"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-in/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-in/strings.xml
new file mode 100644
index 0000000..89fa52e
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-in/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Pengemudi"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-is/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-is/strings.xml
new file mode 100644
index 0000000..38bba6e
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-is/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Ökumaður"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-it/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-it/strings.xml
new file mode 100644
index 0000000..c9491dd
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-it/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Autista"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-iw/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-iw/strings.xml
new file mode 100644
index 0000000..f1383ea
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-iw/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"נהג/ת"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-ja/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-ja/strings.xml
new file mode 100644
index 0000000..7872368
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-ja/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"ドライバー"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-ka/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-ka/strings.xml
new file mode 100644
index 0000000..55879f3
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-ka/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"მძღოლი"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-kk/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-kk/strings.xml
new file mode 100644
index 0000000..68714f3
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-kk/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Көлік жүргізуші"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-km/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-km/strings.xml
new file mode 100644
index 0000000..f2d19e7
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-km/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"អ្នក​បើកបរ"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-kn/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-kn/strings.xml
new file mode 100644
index 0000000..1812f01
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-kn/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"ಡ್ರೈವರ್"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-ko/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-ko/strings.xml
new file mode 100644
index 0000000..6fb8bbd
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-ko/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"운전자"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-ky/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-ky/strings.xml
new file mode 100644
index 0000000..a961e34
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-ky/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Айдоочу"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-lo/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-lo/strings.xml
new file mode 100644
index 0000000..a2e075b
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-lo/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"ຄົນຂັບລົດ"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-lt/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-lt/strings.xml
new file mode 100644
index 0000000..20d10d8
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-lt/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Vairuotojas"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-lv/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-lv/strings.xml
new file mode 100644
index 0000000..f8a9b63
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-lv/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Vadītājs"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-mk/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-mk/strings.xml
new file mode 100644
index 0000000..ea97216
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-mk/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Возач"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-ml/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-ml/strings.xml
new file mode 100644
index 0000000..e09eaeb
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-ml/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"ഡ്രൈവർ"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-mn/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-mn/strings.xml
new file mode 100644
index 0000000..5a1682e
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-mn/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Жолооч"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-mr/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-mr/strings.xml
new file mode 100644
index 0000000..de33088
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-mr/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"ड्रायव्हर"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-ms/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-ms/strings.xml
new file mode 100644
index 0000000..837f538
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-ms/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Pemandu"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-my/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-my/strings.xml
new file mode 100644
index 0000000..5c96457
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-my/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"ယာဉ်မောင်းသူ"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-nb/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-nb/strings.xml
new file mode 100644
index 0000000..139517b
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-nb/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Sjåfør"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-ne/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-ne/strings.xml
new file mode 100644
index 0000000..21d4f74
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-ne/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"चालक"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-night/colors_car.xml b/car_product/overlay/frameworks/base/core/res/res/values-night/colors_car.xml
new file mode 100644
index 0000000..74a60bf
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-night/colors_car.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * Copyright 2018, 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>
+
+    <color name="car_colorPrimary">@color/car_grey_958</color>
+    <color name="car_tint_light">@color/car_grey_300</color>
+
+    <color name="car_colorSecondary">@color/car_grey_972</color>
+    <color name="car_colorPrimaryDark">@color/car_grey_958</color>
+
+    <color name="car_body1_light">@color/car_grey_300</color>
+    <color name="car_body1">@color/car_body1_light</color>
+
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-nl/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-nl/strings.xml
new file mode 100644
index 0000000..c634d43
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-nl/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Chauffeur"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-or/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-or/strings.xml
new file mode 100644
index 0000000..04f5336
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-or/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"ଡ୍ରାଇଭର୍"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-pa/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-pa/strings.xml
new file mode 100644
index 0000000..354b580
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-pa/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"ਡਰਾਈਵਰ"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-pl/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-pl/strings.xml
new file mode 100644
index 0000000..315bf44
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-pl/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Kierowca"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-pt-rPT/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-pt-rPT/strings.xml
new file mode 100644
index 0000000..fa09574
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-pt-rPT/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Condutor"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-pt/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-pt/strings.xml
new file mode 100644
index 0000000..af84856
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-pt/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Motorista"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-ro/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-ro/strings.xml
new file mode 100644
index 0000000..c6ca011
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-ro/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Șofer"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-ru/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-ru/strings.xml
new file mode 100644
index 0000000..87359fb
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-ru/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Водитель"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-si/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-si/strings.xml
new file mode 100644
index 0000000..a2aa811
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-si/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"රියදුරු"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-sk/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-sk/strings.xml
new file mode 100644
index 0000000..94a4723
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-sk/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Vodič"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-sl/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-sl/strings.xml
new file mode 100644
index 0000000..9f75529
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-sl/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Voznik"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-sq/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-sq/strings.xml
new file mode 100644
index 0000000..4e6cd54
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-sq/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Drejtuesi"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-sr/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-sr/strings.xml
new file mode 100644
index 0000000..ea97216
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-sr/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Возач"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-sv/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-sv/strings.xml
new file mode 100644
index 0000000..12d2369
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-sv/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Förare"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-sw/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-sw/strings.xml
new file mode 100644
index 0000000..90924e1
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-sw/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Dereva"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-ta/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-ta/strings.xml
new file mode 100644
index 0000000..47a7058
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-ta/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"கார் உரிமையாளர்"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-te/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-te/strings.xml
new file mode 100644
index 0000000..ebbb6b3
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-te/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"డ్రైవర్"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-th/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-th/strings.xml
new file mode 100644
index 0000000..c3d4c8c
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-th/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"ผู้ขับรถ"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-tl/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-tl/strings.xml
new file mode 100644
index 0000000..a4a3e1a
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-tl/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Driver"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-tr/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-tr/strings.xml
new file mode 100644
index 0000000..67b565b
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-tr/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Sürücü"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-uk/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-uk/strings.xml
new file mode 100644
index 0000000..1bc0b22
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-uk/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Водій"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-ur/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-ur/strings.xml
new file mode 100644
index 0000000..f69a738
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-ur/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"ڈرائیور"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-uz/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-uz/strings.xml
new file mode 100644
index 0000000..07264f4
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-uz/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Haydovchi"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-vi/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-vi/strings.xml
new file mode 100644
index 0000000..ef6b702
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-vi/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Tài xế"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-w1280dp/dimens.xml b/car_product/overlay/frameworks/base/core/res/res/values-w1280dp/dimens.xml
index 2e2f851..de9bc8b 100644
--- a/car_product/overlay/frameworks/base/core/res/res/values-w1280dp/dimens.xml
+++ b/car_product/overlay/frameworks/base/core/res/res/values-w1280dp/dimens.xml
@@ -19,4 +19,5 @@
     <dimen name="car_keyline_2">108dp</dimen>
     <dimen name="car_keyline_3">128dp</dimen>
     <dimen name="car_keyline_4">168dp</dimen>
+    <dimen name="car_margin">148dp</dimen>
 </resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-w1920dp/dimens.xml b/car_product/overlay/frameworks/base/core/res/res/values-w1920dp/dimens.xml
index 389f162..7a0f7a5 100644
--- a/car_product/overlay/frameworks/base/core/res/res/values-w1920dp/dimens.xml
+++ b/car_product/overlay/frameworks/base/core/res/res/values-w1920dp/dimens.xml
@@ -16,4 +16,5 @@
 
 <resources>
     <dimen name="car_keyline_4">184dp</dimen>
+    <dimen name="car_margin">192dp</dimen>
 </resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-zh-rCN/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-zh-rCN/strings.xml
new file mode 100644
index 0000000..0347e14
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-zh-rCN/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"司机"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-zh-rHK/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-zh-rHK/strings.xml
new file mode 100644
index 0000000..37aab13
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-zh-rHK/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"司機"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-zh-rTW/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-zh-rTW/strings.xml
new file mode 100644
index 0000000..8ecce72
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-zh-rTW/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"駕駛"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-zu/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values-zu/strings.xml
new file mode 100644
index 0000000..b5ec2c1
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-zu/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+    Copyright 2019 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="owner_name" msgid="3416113395996003764">"Umshayeli"</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values/config.xml b/car_product/overlay/frameworks/base/core/res/res/values/config.xml
index 0ab814f..1de7df0 100644
--- a/car_product/overlay/frameworks/base/core/res/res/values/config.xml
+++ b/car_product/overlay/frameworks/base/core/res/res/values/config.xml
@@ -50,10 +50,6 @@
     <!-- Automotive Bluetooth pairing option -->
     <bool name="enable_pbap_pce_profile">true</bool>
 
-    <!-- Component name of a custom ResolverActivity (Intent resolver) to be used instead of
-         the default framework version. -->
-    <string name="config_customResolverActivity" translatable="false">com.android.support.car.lenspicker/.LensResolverActivity</string>
-
     <!-- Flag indicating that the entire notification header can be clicked to expand the
          notification. If false, then the expand icon has to be clicked in order for the expand
          to occur. -->
@@ -65,9 +61,6 @@
     <!-- The action buttons should always take the default color. -->
     <bool name="config_tintNotificationActionButtons">false</bool>
 
-    <!-- Home screen(Launcher) app presence -->
-    <bool name="config_noHomeScreen">true</bool>
-
     <!-- Flag indicating that this device does not rotate and will always remain in its default
          orientation. Activities that desire to run in a non-compatible orientation will find that
          they are not able to. -->
diff --git a/car_product/overlay/frameworks/base/core/res/res/values/dimens.xml b/car_product/overlay/frameworks/base/core/res/res/values/dimens.xml
index f343e93..cf09310 100644
--- a/car_product/overlay/frameworks/base/core/res/res/values/dimens.xml
+++ b/car_product/overlay/frameworks/base/core/res/res/values/dimens.xml
@@ -17,12 +17,12 @@
 */
 -->
 <resources>
-    <dimen name="status_bar_height">96dp</dimen>
-    <dimen name="status_bar_height_landscape">96dp</dimen>
-    <dimen name="status_bar_height_portrait">96dp</dimen>
-    <dimen name="car_qs_header_system_icons_area_height">96dp</dimen>
-    <dimen name="navigation_bar_height">128dp</dimen>
-    <dimen name="navigation_bar_height_landscape">128dp</dimen>
+    <dimen name="status_bar_height">76dp</dimen>
+    <dimen name="status_bar_height_landscape">76dp</dimen>
+    <dimen name="status_bar_height_portrait">76dp</dimen>
+    <dimen name="car_qs_header_system_icons_area_height">76dp</dimen>
+    <dimen name="navigation_bar_height">112dp</dimen>
+    <dimen name="navigation_bar_height_landscape">112dp</dimen>
     <dimen name="status_bar_icon_size">36dp</dimen>
 
     <!-- The height of the header of a notification. -->
diff --git a/car_product/overlay/frameworks/base/core/res/res/values/strings.xml b/car_product/overlay/frameworks/base/core/res/res/values/strings.xml
new file mode 100644
index 0000000..9217647
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Copyright 2019 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">
+    <!-- Default name of the owner user [CHAR LIMIT=20] -->
+    <string name="owner_name">Driver</string>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values/styles_device_default.xml b/car_product/overlay/frameworks/base/core/res/res/values/styles_device_default.xml
index b518858..443996f 100644
--- a/car_product/overlay/frameworks/base/core/res/res/values/styles_device_default.xml
+++ b/car_product/overlay/frameworks/base/core/res/res/values/styles_device_default.xml
@@ -23,15 +23,31 @@
     <style name="TextAppearance.DeviceDefault" parent="TextAppearance.Material.Large">
         <item name="textSize">@dimen/car_body3_size</item>
     </style>
+    <style name="TextAppearance.DeviceDefault.Inverse" parent="TextAppearance.Material.Inverse">
+        <item name="textSize">@dimen/car_body3_size</item>
+    </style>
+
     <style name="TextAppearance.DeviceDefault.Large" parent="TextAppearance.Material.Large">
         <item name="textSize">@dimen/car_body1_size</item>
     </style>
+    <style name="TextAppearance.DeviceDefault.Large.Inverse" parent="TextAppearance.Material.Large.Inverse">
+        <item name="textSize">@dimen/car_body1_size</item>
+    </style>
+
     <style name="TextAppearance.DeviceDefault.Medium" parent="TextAppearance.Material.Medium">
         <item name="textSize">@dimen/car_body2_size</item>
     </style>
+    <style name="TextAppearance.DeviceDefault.Medium.Inverse" parent="TextAppearance.Material.Medium.Inverse">
+        <item name="textSize">@dimen/car_body2_size</item>
+    </style>
+
     <style name="TextAppearance.DeviceDefault.Small" parent="TextAppearance.Material.Small">
         <item name="textSize">@dimen/car_body4_size</item>
     </style>
+    <style name="TextAppearance.DeviceDefault.Small.Inverse" parent="TextAppearance.Material.Small.Inverse">
+        <item name="textSize">@dimen/car_body4_size</item>
+    </style>
+
     <style name="TextAppearance.DeviceDefault.Widget.Button.Borderless.Colored"
            parent="TextAppearance.DeviceDefault.Widget.Button">
         <item name="textColor">@color/car_borderless_button_text_color</item>
@@ -68,19 +84,47 @@
         <item name="paddingEnd">@dimen/car_button_horizontal_padding</item>
     </style>
 
-     <style name="Widget.DeviceDefault.ProgressBar.Horizontal" parent="Widget.Material.ProgressBar.Horizontal">
-         <item name="minHeight">@dimen/car_progress_bar_height</item>
-         <item name="maxHeight">@dimen/car_progress_bar_height</item>
-     </style>
+    <style name="Widget.DeviceDefault.CompoundButton.CheckBox" parent="Widget.Material.CompoundButton.CheckBox">
+        <item name="button">@drawable/car_checkbox</item>
+    </style>
+
+    <style name="Widget.DeviceDefault.CompoundButton.Switch" parent="Widget.Material.CompoundButton.Switch">
+        <item name="thumb">@drawable/car_switch_thumb</item>
+        <item name="switchMinWidth">@dimen/car_primary_icon_size</item>
+    </style>
+
+    <style name="Widget.DeviceDefault.ProgressBar.Horizontal" parent="Widget.Material.ProgressBar.Horizontal">
+        <item name="minHeight">@dimen/car_progress_bar_height</item>
+        <item name="maxHeight">@dimen/car_progress_bar_height</item>
+    </style>
 
     <style name="Widget.DeviceDefault.SeekBar" parent="Widget.Material.SeekBar">
         <item name="progressDrawable">@drawable/car_seekbar_track</item>
         <item name="thumb">@drawable/car_seekbar_thumb</item>
     </style>
 
-    <!--TextAppearance used for edit text -->
-    <style name="TextAppearance.DeviceDefault.Medium.Inverse" parent="TextAppearance.Material.Medium.Inverse">
-        <item name="textStyle">normal</item>
-        <item name="textSize">@dimen/car_body1_size</item>
+    <style name="Widget.DeviceDefault.ActionBar.Solid" parent="Widget.Material.ActionBar.Solid">
+        <item name="textSize">@dimen/car_body3_size</item>
     </style>
+
+    <!-- Preference Styles -->
+    <style name="Preference.DeviceDefault" parent="Preference.Material">
+        <item name="layout">@layout/car_preference</item>
+    </style>
+    <style name="Preference.DeviceDefault.Category" parent="Preference.Material.Category">
+        <item name="layout">@layout/car_preference_category</item>
+    </style>
+    <style name="Preference.DeviceDefault.CheckBoxPreference" parent="Preference.Material.CheckBoxPreference">
+        <item name="layout">@layout/car_preference</item>
+    </style>
+    <style name="Preference.DeviceDefault.DialogPreference" parent="Preference.Material.DialogPreference">
+        <item name="layout">@layout/car_preference</item>
+    </style>
+    <style name="Preference.DeviceDefault.DialogPreference.EditTextPreference" parent="Preference.Material.DialogPreference.EditTextPreference">
+        <item name="layout">@layout/car_preference</item>
+    </style>
+    <style name="Preference.DeviceDefault.SwitchPreference" parent="Preference.Material.SwitchPreference">
+        <item name="layout">@layout/car_preference</item>
+    </style>
+
 </resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values/themes_device_defaults.xml b/car_product/overlay/frameworks/base/core/res/res/values/themes_device_defaults.xml
index 2489e8d..89d5716 100644
--- a/car_product/overlay/frameworks/base/core/res/res/values/themes_device_defaults.xml
+++ b/car_product/overlay/frameworks/base/core/res/res/values/themes_device_defaults.xml
@@ -20,7 +20,6 @@
 -->
 <resources>
     <style name="Theme.DeviceDefault" parent="Theme.DeviceDefaultBase">
-        <item name="background">@null</item>
         <item name="borderlessButtonStyle">@style/Widget.DeviceDefault.Button.Borderless.Colored</item>
         <item name="buttonBarButtonStyle">@style/Widget.DeviceDefault.Button.ButtonBar.AlertDialog</item>
         <item name="buttonStyle">@style/Widget.DeviceDefault.Button</item>
@@ -30,26 +29,42 @@
         <item name="colorButtonNormal">@color/car_highlight</item>
         <item name="colorControlHighlight">@color/car_card_ripple_background</item>
         <item name="colorControlNormal">@color/car_body2</item>
-        <item name="colorPrimary">@color/car_grey_928</item>
-        <item name="colorPrimaryDark">@color/car_grey_958</item>
+        <item name="colorPrimary">@color/primary_device_default_light</item>
+        <item name="colorPrimaryDark">@color/primary_device_default_dark</item>
+        <item name="colorForeground">@color/car_card_light</item>
         <item name="editTextColor">@color/car_body1</item>
+        <item name="listPreferredItemHeightSmall">@dimen/car_single_line_list_item_height</item>
         <item name="textColorHint">@color/car_body2</item>
-        <item name="textColorPrimary">@color/car_body1</item>
+        <item name="textColorPrimary">@color/primary_text</item>
         <item name="textColorSecondary">@color/car_body2</item>
+        <item name="textColorHint">@color/car_grey_400</item>
         <item name="toastFrameBackground">@drawable/toast_frame</item>
+        <item name="textAppearanceListItem">@style/TextAppearance.DeviceDefault.Large</item>
+        <item name="textAppearanceListItemSmall">@style/TextAppearance.DeviceDefault.Large</item>
+        <item name="textAppearanceListItemSecondary">@style/TextAppearance.DeviceDefault.Small</item>
+        <item name="actionBarSize">@dimen/car_app_bar_height</item>
     </style>
-    <style name="Theme.DeviceDefault.Dialog" parent="Theme.Material.Dialog" >
+    <style name="Theme.DeviceDefault.Dialog" parent="Theme.Material.Dialog">
+        <item name="textAppearanceLarge">@style/TextAppearance.DeviceDefault.Large</item>
+        <item name="textAppearanceMedium">@style/TextAppearance.DeviceDefault.Medium</item>
+        <item name="textAppearanceSmall">@style/TextAppearance.DeviceDefault.Small</item>
+        <item name="textAppearanceLargeInverse">@style/TextAppearance.DeviceDefault.Large.Inverse</item>
+        <item name="textAppearanceMediumInverse">@style/TextAppearance.DeviceDefault.Medium.Inverse</item>
+        <item name="textAppearanceSmallInverse">@style/TextAppearance.DeviceDefault.Small.Inverse</item>
+        <item name="textAppearanceListItem">@style/TextAppearance.DeviceDefault.Large</item>
+        <item name="textAppearanceListItemSmall">@style/TextAppearance.DeviceDefault.Large</item>
+        <item name="textAppearanceListItemSecondary">@style/TextAppearance.DeviceDefault.Small</item>
         <item name="borderlessButtonStyle">@style/Widget.DeviceDefault.Button.Borderless.Colored</item>
         <item name="buttonBarButtonStyle">@style/Widget.DeviceDefault.Button.ButtonBar.AlertDialog</item>
         <item name="buttonStyle">@style/Widget.DeviceDefault.Button</item>
         <item name="colorAccent">@color/accent_device_default_light</item>
-        <item name="colorBackground">@color/background_device_default_light</item>
         <item name="colorBackgroundFloating">@color/background_floating_device_default_light</item>
         <item name="colorButtonNormal">@color/car_highlight</item>
         <item name="colorControlHighlight">@color/car_card_ripple_background</item>
         <item name="colorControlNormal">@color/car_body2</item>
-        <item name="colorPrimary">@color/car_grey_928</item>
-        <item name="colorPrimaryDark">@color/car_grey_958</item>
+        <item name="colorPrimary">@color/primary_device_default_light</item>
+        <item name="colorPrimaryDark">@color/primary_device_default_dark</item>
+        <item name="colorForeground">@color/car_card_light</item>
         <item name="editTextColor">@color/car_body1</item>
         <item name="textColorHint">@color/car_body2</item>
         <item name="textColorPrimary">@color/car_body1</item>
@@ -65,19 +80,26 @@
         <item name="buttonBarButtonStyle">@style/Widget.DeviceDefault.Button.ButtonBar.AlertDialog</item>
         <item name="buttonStyle">@style/Widget.DeviceDefault.Button</item>
         <item name="colorAccent">@color/accent_device_default_light</item>
-        <item name="colorBackground">@color/background_device_default_light</item>
         <item name="colorBackgroundFloating">@color/background_floating_device_default_light</item>
         <item name="colorButtonNormal">@color/car_highlight</item>
         <item name="colorControlHighlight">@color/car_card_ripple_background</item>
         <item name="colorControlNormal">@color/car_body2</item>
-        <item name="colorPrimary">@color/car_grey_928</item>
-        <item name="colorPrimaryDark">@color/car_grey_958</item>
+        <item name="colorPrimary">@color/primary_device_default_light</item>
+        <item name="colorPrimaryDark">@color/primary_device_default_dark</item>
+        <item name="colorForeground">@color/car_card_light</item>
         <item name="editTextColor">@color/car_body1</item>
         <item name="textColorHint">@color/car_body2</item>
         <item name="textColorPrimary">@color/car_body1</item>
         <item name="textColorSecondary">@color/car_body2</item>
         <item name="toastFrameBackground">@drawable/toast_frame</item>
+        <item name="textAppearanceListItem">@style/TextAppearance.DeviceDefault.Large</item>
+        <item name="textAppearanceListItemSmall">@style/TextAppearance.DeviceDefault.Large</item>
+        <item name="textAppearanceListItemSecondary">@style/TextAppearance.DeviceDefault.Small</item>
     </style>
+
+    <style name="Theme.DeviceDefault.Settings.Dialog" parent="Theme.DeviceDefault.Dialog.Alert">
+    </style>
+
     <!-- The light theme is defined to be the same as the default since currently there is only one
         defined theme palette -->
     <style name="Theme.DeviceDefault.Light"/>
@@ -105,4 +127,60 @@
 
     <style name="Theme.DeviceDefault.Settings"/>
     <style name="Theme.DeviceDefault.Settings.NoActionBar" parent="Theme.DeviceDefault.NoActionBar"/>
+
+    <style name="Theme.DeviceDefault.Light.DarkActionBar"  parent="Theme.DeviceDefault"/>
+      <!-- DeviceDefault theme for the default system theme.  -->
+    <style name="Theme.DeviceDefault.System" parent="Theme.DeviceDefault.Light.DarkActionBar" />
+
+    <!-- Theme used for the intent picker activity. -->
+    <style name="Theme.DeviceDefault.Resolver" parent="Theme.DeviceDefault">
+        <item name="windowEnterTransition">@empty</item>
+        <item name="windowExitTransition">@empty</item>
+        <item name="windowIsTranslucent">true</item>
+        <item name="windowNoTitle">true</item>
+        <item name="windowBackground">@color/transparent</item>
+        <item name="backgroundDimEnabled">true</item>
+        <item name="statusBarColor">@color/transparent</item>
+        <item name="windowContentOverlay">@null</item>
+        <item name="colorControlActivated">?attr/colorControlHighlight</item>
+        <item name="listPreferredItemPaddingStart">?attr/dialogPreferredPadding</item>
+        <item name="listPreferredItemPaddingEnd">?attr/dialogPreferredPadding</item>
+
+        <!-- Dialog attributes -->
+        <item name="dialogCornerRadius">@dimen/config_dialogCornerRadius</item>
+        <item name="alertDialogTheme">@style/Theme.DeviceDefault.Light.Dialog.Alert</item>
+
+        <!-- Button styles -->
+        <item name="buttonCornerRadius">@dimen/config_buttonCornerRadius</item>
+        <item name="buttonBarButtonStyle">@style/Widget.DeviceDefault.Button.ButtonBar.AlertDialog</item>
+        <item name="borderlessButtonStyle">@style/Widget.DeviceDefault.Button.Borderless.Colored</item>
+        <item name="buttonStyle">@style/Widget.DeviceDefault.Button</item>
+
+        <!-- Color palette -->
+        <item name="colorPrimary">@color/primary_device_default_light</item>
+        <item name="colorPrimaryDark">@color/primary_device_default_dark</item>
+        <item name="colorAccent">@color/accent_device_default_light</item>
+        <item name="colorError">@color/error_color_device_default_light</item>
+        <item name="colorBackgroundFloating">@color/background_floating_device_default_light</item>
+        <item name="colorButtonNormal">@color/car_highlight</item>
+        <item name="colorControlHighlight">@color/car_card_ripple_background</item>
+        <item name="colorControlNormal">@color/car_body2</item>
+        <item name="colorForeground">@color/car_card_light</item>
+        <item name="editTextColor">@color/car_body1</item>
+        <item name="textColorHint">@color/car_body2</item>
+        <item name="textColorPrimary">@color/car_body1</item>
+        <item name="textColorSecondary">@color/car_body2</item>
+
+        <!-- Progress bar attributes -->
+        <item name="colorProgressBackgroundNormal">@color/config_progress_background_tint</item>
+        <item name="progressBarCornerRadius">@dimen/config_progressBarCornerRadius</item>
+
+        <!-- Toolbar attributes -->
+        <item name="toolbarStyle">@style/Widget.DeviceDefault.Toolbar</item>
+
+        <item name="toastFrameBackground">@drawable/toast_frame</item>
+        <item name="textAppearanceListItem">@style/TextAppearance.DeviceDefault.Large</item>
+        <item name="textAppearanceListItemSmall">@style/TextAppearance.DeviceDefault.Large</item>
+        <item name="textAppearanceListItemSecondary">@style/TextAppearance.DeviceDefault.Small</item>
+    </style>
 </resources>
diff --git a/car_product/overlay/frameworks/base/packages/SystemUI/res/values-h600dp/dimens.xml b/car_product/overlay/frameworks/base/packages/CarSystemUI/res/values-h600dp/dimens.xml
similarity index 100%
rename from car_product/overlay/frameworks/base/packages/SystemUI/res/values-h600dp/dimens.xml
rename to car_product/overlay/frameworks/base/packages/CarSystemUI/res/values-h600dp/dimens.xml
diff --git a/car_product/overlay/frameworks/base/packages/SystemUI/res/values-sw600dp/dimens.xml b/car_product/overlay/frameworks/base/packages/CarSystemUI/res/values-sw600dp/dimens.xml
similarity index 100%
rename from car_product/overlay/frameworks/base/packages/SystemUI/res/values-sw600dp/dimens.xml
rename to car_product/overlay/frameworks/base/packages/CarSystemUI/res/values-sw600dp/dimens.xml
diff --git a/car_product/overlay/frameworks/base/packages/SystemUI/res/values-w1024dp/dimens.xml b/car_product/overlay/frameworks/base/packages/CarSystemUI/res/values-w1024dp/dimens.xml
similarity index 100%
rename from car_product/overlay/frameworks/base/packages/SystemUI/res/values-w1024dp/dimens.xml
rename to car_product/overlay/frameworks/base/packages/CarSystemUI/res/values-w1024dp/dimens.xml
diff --git a/car_product/overlay/frameworks/base/packages/SystemUI/res/values-w550dp-land/dimens.xml b/car_product/overlay/frameworks/base/packages/CarSystemUI/res/values-w550dp-land/dimens.xml
similarity index 100%
rename from car_product/overlay/frameworks/base/packages/SystemUI/res/values-w550dp-land/dimens.xml
rename to car_product/overlay/frameworks/base/packages/CarSystemUI/res/values-w550dp-land/dimens.xml
diff --git a/car_product/overlay/frameworks/base/packages/SystemUI/res/values/config.xml b/car_product/overlay/frameworks/base/packages/CarSystemUI/res/values/config.xml
similarity index 100%
rename from car_product/overlay/frameworks/base/packages/SystemUI/res/values/config.xml
rename to car_product/overlay/frameworks/base/packages/CarSystemUI/res/values/config.xml
diff --git a/car_product/overlay/frameworks/base/packages/SystemUI/res/values/dimens.xml b/car_product/overlay/frameworks/base/packages/CarSystemUI/res/values/dimens.xml
similarity index 100%
rename from car_product/overlay/frameworks/base/packages/SystemUI/res/values/dimens.xml
rename to car_product/overlay/frameworks/base/packages/CarSystemUI/res/values/dimens.xml
diff --git a/car_product/overlay/frameworks/base/packages/SystemUI/res-keyguard/drawable/ic_backspace.xml b/car_product/overlay/frameworks/base/packages/SystemUI/res-keyguard/drawable/ic_backspace.xml
deleted file mode 100644
index f3a2f0f..0000000
--- a/car_product/overlay/frameworks/base/packages/SystemUI/res-keyguard/drawable/ic_backspace.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Copyright 2018, 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.
--->
-
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="36dp"
-        android:height="36dp"
-        android:viewportWidth="24.0"
-        android:viewportHeight="24.0">
-    <path
-        android:fillColor="#FF000000"
-        android:pathData="M9,15.59L12.59,12L9,8.41L10.41,7L14,10.59L17.59,7L19,8.41L15.41,12L19,15.59L17.59,17L14,13.41L10.41,17L9,15.59zM21,6H8l-4.5,6L8,18h13V6M21,4c1.1,0 2,0.9 2,2v12c0,1.1 -0.9,2 -2,2H8c-0.63,0 -1.22,-0.3 -1.6,-0.8L1,12l5.4,-7.2C6.78,4.3 7.37,4 8,4H21L21,4z"/>
-</vector>
diff --git a/car_product/overlay/frameworks/base/packages/SystemUI/res-keyguard/drawable/ic_done.xml b/car_product/overlay/frameworks/base/packages/SystemUI/res-keyguard/drawable/ic_done.xml
deleted file mode 100644
index ef0aac2..0000000
--- a/car_product/overlay/frameworks/base/packages/SystemUI/res-keyguard/drawable/ic_done.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Copyright 2018, 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.
--->
-
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="36dp"
-        android:height="36dp"
-        android:viewportWidth="24.0"
-        android:viewportHeight="24.0">
-    <path
-        android:fillColor="#FF000000"
-        android:pathData="M9,16.2l-3.5,-3.5a0.984,0.984 0,0 0,-1.4 0,0.984 0.984,0 0,0 0,1.4l4.19,4.19c0.39,0.39 1.02,0.39 1.41,0L20.3,7.7a0.984,0.984 0,0 0,0 -1.4,0.984 0.984,0 0,0 -1.4,0L9,16.2z"/>
-</vector>
diff --git a/car_product/overlay/frameworks/base/packages/SystemUI/res-keyguard/drawable/keyguard_button_background.xml b/car_product/overlay/frameworks/base/packages/SystemUI/res-keyguard/drawable/keyguard_button_background.xml
deleted file mode 100644
index b428931..0000000
--- a/car_product/overlay/frameworks/base/packages/SystemUI/res-keyguard/drawable/keyguard_button_background.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Copyright 2018, 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.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_pressed="true">
-        <shape android:shape="rectangle">
-            <corners android:radius="@dimen/car_button_radius"/>
-            <solid android:color="#131315"/>
-        </shape>
-    </item>
-    <item>
-        <shape android:shape="rectangle">
-            <corners android:radius="@dimen/car_button_radius"/>
-            <solid android:color="@color/button_background"/>
-        </shape>
-    </item>
-</selector>
diff --git a/car_product/overlay/frameworks/base/packages/SystemUI/res-keyguard/layout-land/keyguard_pattern_view.xml b/car_product/overlay/frameworks/base/packages/SystemUI/res-keyguard/layout-land/keyguard_pattern_view.xml
deleted file mode 100644
index bd94b20..0000000
--- a/car_product/overlay/frameworks/base/packages/SystemUI/res-keyguard/layout-land/keyguard_pattern_view.xml
+++ /dev/null
@@ -1,85 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-**
-** Copyright 2018, 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.
-*/
--->
-
-<!-- Car customizations
-     - Added title "Enter your Pattern" at the top
-     - Hid the emergency call at the bottom
--->
-
-<com.android.keyguard.KeyguardPatternView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/keyguard_pattern_view"
-    android:orientation="horizontal"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:paddingHorizontal="@dimen/car_margin">
-
-    <FrameLayout
-        android:layout_height="match_parent"
-        android:layout_width="0dp"
-        android:layout_weight="1">
-
-        <com.android.internal.widget.LockPatternView
-            android:id="@+id/lockPatternView"
-            android:layout_width="@dimen/keyguard_pattern_dimension"
-            android:layout_height="@dimen/keyguard_pattern_dimension"
-            android:layout_gravity="center"/>
-    </FrameLayout>
-
-    <LinearLayout
-        android:id="@+id/container"
-        android:layout_height="match_parent"
-        android:layout_width="0dp"
-        android:layout_weight="1"
-        android:orientation="vertical"
-        android:gravity="center_vertical">
-
-        <TextView
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_margin="@dimen/car_padding_2"
-            android:gravity="center"
-            android:textColor="@android:color/white"
-            android:textSize="@dimen/car_body1_size"
-            android:text="@string/keyguard_enter_your_pattern" />
-
-        <include layout="@layout/keyguard_message_area"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_marginBottom="@dimen/car_padding_4"/>
-
-        <Button
-            android:id="@+id/cancel_button"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_gravity="center"
-            style="@style/KeyguardButton"
-            android:text="@string/cancel"/>
-
-        <include layout="@layout/keyguard_eca"
-            android:id="@+id/keyguard_selector_fade_container"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:orientation="vertical"
-            android:layout_gravity="bottom|center_horizontal"
-            android:gravity="center_horizontal"
-            android:visibility="gone" />
-    </LinearLayout>
-
-</com.android.keyguard.KeyguardPatternView>
diff --git a/car_product/overlay/frameworks/base/packages/SystemUI/res-keyguard/layout-land/keyguard_pin_view.xml b/car_product/overlay/frameworks/base/packages/SystemUI/res-keyguard/layout-land/keyguard_pin_view.xml
deleted file mode 100644
index 788ecfc..0000000
--- a/car_product/overlay/frameworks/base/packages/SystemUI/res-keyguard/layout-land/keyguard_pin_view.xml
+++ /dev/null
@@ -1,191 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Copyright 2018, 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.
--->
-
-<!-- Car customizations
-     - Added title "Enter your PIN" under the entry field
-     - Put backspace and enter buttons in row 4
-     - PIN pad is on start side while entry field and title are on the end side
-     -  Hid the emergency call at the bottom
--->
-
-<com.android.keyguard.KeyguardPINView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:id="@+id/keyguard_pin_view"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:orientation="horizontal"
-    android:paddingHorizontal="@dimen/car_margin">
-
-    <FrameLayout
-        android:layout_width="0dp"
-        android:layout_weight="1"
-        android:layout_height="match_parent">
-
-        <GridLayout
-            android:id="@+id/container"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_gravity="center"
-            android:gravity="center"
-            android:columnCount="3">
-
-            <!-- Row 1 -->
-            <com.android.keyguard.NumPadKey
-                android:id="@+id/key1"
-                style="@style/NumPadKeyButton"
-                app:digit="@string/one" />
-            <com.android.keyguard.NumPadKey
-                android:id="@+id/key2"
-                style="@style/NumPadKeyButton"
-                app:digit="@string/two" />
-            <com.android.keyguard.NumPadKey
-                android:id="@+id/key3"
-                style="@style/NumPadKeyButton"
-                app:digit="@string/three" />
-
-            <!-- Row 2 -->
-            <com.android.keyguard.NumPadKey
-                android:id="@+id/key4"
-                style="@style/NumPadKeyButton"
-                app:digit="@string/four" />
-            <com.android.keyguard.NumPadKey
-                android:id="@+id/key5"
-                style="@style/NumPadKeyButton"
-                app:digit="@string/five" />
-            <com.android.keyguard.NumPadKey
-                android:id="@+id/key6"
-                style="@style/NumPadKeyButton"
-                app:digit="@string/six" />
-
-            <!-- Row 3 -->
-            <com.android.keyguard.NumPadKey
-                android:id="@+id/key7"
-                style="@style/NumPadKeyButton"
-                app:digit="@string/seven" />
-            <com.android.keyguard.NumPadKey
-                android:id="@+id/key8"
-                style="@style/NumPadKeyButton"
-                app:digit="@string/eight" />
-            <com.android.keyguard.NumPadKey
-                android:id="@+id/key9"
-                style="@style/NumPadKeyButton"
-                app:digit="@string/nine" />
-
-            <!-- Row 4 -->
-            <ImageButton
-                android:id="@+id/delete_button"
-                style="@style/NumPadKeyButton"
-                android:gravity="center_vertical"
-                android:src="@drawable/ic_backspace"
-                android:clickable="true"
-                android:tint="@android:color/white"
-                android:background="@drawable/ripple_drawable"
-                android:contentDescription="@string/keyboardview_keycode_delete" />
-            <com.android.keyguard.NumPadKey
-                android:id="@+id/key0"
-                style="@style/NumPadKeyButton"
-                app:digit="@string/zero" />
-            <ImageButton
-                android:id="@+id/key_enter"
-                style="@style/NumPadKeyButton"
-                android:src="@drawable/ic_done"
-                android:tint="@android:color/white"
-                android:background="@drawable/ripple_drawable"
-                android:contentDescription="@string/keyboardview_keycode_enter" />
-        </GridLayout>
-    </FrameLayout>
-
-    <LinearLayout
-        android:layout_width="0dp"
-        android:layout_height="match_parent"
-        android:layout_weight="1"
-        android:gravity="center"
-        android:orientation="vertical">
-
-        <com.android.keyguard.PasswordTextView
-            android:id="@+id/pinEntry"
-            android:layout_width="@dimen/keyguard_security_width"
-            android:layout_height="@dimen/pin_entry_height"
-            android:gravity="center"
-            app:scaledTextSize="@integer/password_text_view_scale"
-            android:contentDescription="@string/keyguard_accessibility_pin_area" />
-
-        <View
-            android:id="@+id/divider"
-            android:layout_width="@dimen/keyguard_security_width"
-            android:layout_height="@dimen/divider_height"
-            android:background="@android:color/white" />
-
-        <TextView
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_margin="@dimen/car_padding_2"
-            android:gravity="center"
-            android:textColor="@android:color/white"
-            android:textSize="@dimen/car_body1_size"
-            android:text="@string/keyguard_enter_your_pin" />
-
-        <include layout="@layout/keyguard_message_area"
-             android:layout_width="wrap_content"
-             android:layout_height="wrap_content"
-             android:layout_marginBottom="@dimen/car_padding_4"/>
-
-        <Button
-            android:id="@+id/cancel_button"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_gravity="center"
-            style="@style/KeyguardButton"
-            android:text="@string/cancel"/>
-    </LinearLayout>
-
-    <!-- KeyguardPinView references these resources ids in code so removing them will cause the
-         keyguard to crash. Instead put them down here where they are out of the way and set their
-         visibility to gone. -->
-    <com.android.keyguard.AlphaOptimizedRelativeLayout
-        android:id="@+id/row0"
-        android:layout_width="0dp"
-        android:layout_height="0dp"
-        android:visibility="gone" />
-    <LinearLayout
-        android:id="@+id/row1"
-        android:layout_width="0dp"
-        android:layout_height="0dp"
-        android:visibility="gone" />
-    <LinearLayout
-        android:id="@+id/row2"
-        android:layout_width="0dp"
-        android:layout_height="0dp"
-        android:visibility="gone" />
-    <LinearLayout
-        android:id="@+id/row3"
-        android:layout_width="0dp"
-        android:layout_height="0dp"
-        android:visibility="gone" />
-    <LinearLayout
-        android:id="@+id/row4"
-        android:layout_width="0dp"
-        android:layout_height="0dp"
-        android:visibility="gone" />
-
-    <include layout="@layout/keyguard_eca"
-         android:id="@+id/keyguard_selector_fade_container"
-         android:layout_width="0dp"
-         android:layout_height="0dp"
-         android:visibility="gone" />
-</com.android.keyguard.KeyguardPINView>
diff --git a/car_product/overlay/frameworks/base/packages/SystemUI/res-keyguard/layout/keyguard_bouncer.xml b/car_product/overlay/frameworks/base/packages/SystemUI/res-keyguard/layout/keyguard_bouncer.xml
deleted file mode 100644
index 062f7bd..0000000
--- a/car_product/overlay/frameworks/base/packages/SystemUI/res-keyguard/layout/keyguard_bouncer.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><!--
-  ~ Copyright (C) 2018 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
-  -->
-
-<!-- Car customizations
-     Car has solid black background instead of a transparent one
--->
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:background="@android:color/black"
-    android:fitsSystemWindows="true">
-
-    <include
-        style="@style/BouncerSecurityContainer"
-        layout="@layout/keyguard_host_view"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content" />
-</FrameLayout>
-
diff --git a/car_product/overlay/frameworks/base/packages/SystemUI/res-keyguard/layout/keyguard_num_pad_key.xml b/car_product/overlay/frameworks/base/packages/SystemUI/res-keyguard/layout/keyguard_num_pad_key.xml
deleted file mode 100644
index c7eda38..0000000
--- a/car_product/overlay/frameworks/base/packages/SystemUI/res-keyguard/layout/keyguard_num_pad_key.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><!--
-  ~ Copyright (C) 2018 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
-  -->
-
-<!-- Car customizations
-     The mnemonics is not shown for car but KeyguardPinView references the resource id in code.
-     Removing it will cause the keyguard to crash. Hide them instead
--->
-<merge xmlns:android="http://schemas.android.com/apk/res/android">
-    <TextView
-        android:id="@+id/digit_text"
-        style="@style/Widget.TextView.NumPadKey"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        />
-    <!-- The mnemonics is not shown for car but KeyguardPinView references the resource id in code.
-         Removing it will cause the keyguard to crash. Hide them instead -->
-    <TextView
-        android:id="@+id/klondike_text"
-        android:layout_width="0dp"
-        android:layout_height="0dp"
-        android:visibility="gone"
-        />
-</merge>
-
diff --git a/car_product/overlay/frameworks/base/packages/SystemUI/res-keyguard/layout/keyguard_password_view.xml b/car_product/overlay/frameworks/base/packages/SystemUI/res-keyguard/layout/keyguard_password_view.xml
deleted file mode 100644
index cab52e8..0000000
--- a/car_product/overlay/frameworks/base/packages/SystemUI/res-keyguard/layout/keyguard_password_view.xml
+++ /dev/null
@@ -1,109 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-**
-** Copyright 2018, 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.
-*/
--->
-
-<!-- Car customizations
-     - Added title "Enter your Password" below the password field
-     - Hid the emergency call at the bottom
--->
-
-<com.android.keyguard.KeyguardPasswordView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:androidprv="http://schemas.android.com/apk/res-auto"
-    android:id="@+id/keyguard_password_view"
-    android:orientation="vertical"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    androidprv:layout_maxWidth="@dimen/keyguard_security_width"
-    androidprv:layout_maxHeight="@dimen/keyguard_security_height"
-    android:gravity="center"
-    >
-
-    <include
-        layout="@layout/keyguard_message_area"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_marginBottom="@dimen/car_padding_2"/>
-
-    <!-- Password entry field -->
-    <LinearLayout
-         android:layout_height="wrap_content"
-         android:layout_width="wrap_content"
-         android:layout_gravity="center_horizontal"
-         android:orientation="vertical"
-         android:theme="?attr/passwordStyle">
-
-        <EditText
-            android:id="@+id/passwordEntry"
-            android:layout_width="@dimen/password_field_width"
-            android:layout_height="wrap_content"
-            android:gravity="center_horizontal"
-            android:singleLine="true"
-            android:textStyle="normal"
-            android:inputType="textPassword"
-            android:textSize="@dimen/car_body1_size"
-            android:textColor="?attr/wallpaperTextColor"
-            android:textAppearance="?android:attr/textAppearanceMedium"
-            android:imeOptions="flagForceAscii|actionDone"
-            android:maxLength="@integer/password_text_view_scale"
-         />
-
-        <TextView
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_margin="@dimen/car_padding_2"
-            android:gravity="center"
-            android:textColor="@android:color/white"
-            android:textSize="@dimen/car_body1_size"
-            android:text="@string/keyguard_enter_your_password" />
-
-        <Button
-            android:id="@+id/cancel_button"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_gravity="center"
-            style="@style/KeyguardButton"
-            android:text="@string/cancel"/>
-
-        <ImageView android:id="@+id/switch_ime_button"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_marginBottom="12dp"
-            android:src="@drawable/ic_lockscreen_ime"
-            android:contentDescription="@string/accessibility_ime_switch_button"
-            android:clickable="true"
-            android:padding="8dp"
-            android:tint="@color/background_protected"
-            android:layout_gravity="end|center_vertical"
-            android:background="?android:attr/selectableItemBackground"
-            android:visibility="gone"
-        />
-    </LinearLayout>
-
-    <include layout="@layout/keyguard_eca"
-        android:id="@+id/keyguard_selector_fade_container"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_marginBottom="12dp"
-        android:orientation="vertical"
-        android:layout_gravity="bottom|center_horizontal"
-        android:gravity="center_horizontal"
-        android:visibility="gone"
-    />
-
-</com.android.keyguard.KeyguardPasswordView>
diff --git a/car_product/overlay/frameworks/base/packages/SystemUI/res-keyguard/layout/keyguard_pattern_view.xml b/car_product/overlay/frameworks/base/packages/SystemUI/res-keyguard/layout/keyguard_pattern_view.xml
deleted file mode 100644
index de879e0..0000000
--- a/car_product/overlay/frameworks/base/packages/SystemUI/res-keyguard/layout/keyguard_pattern_view.xml
+++ /dev/null
@@ -1,86 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-**
-** Copyright 2018, 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.
-*/
--->
-
-<!-- Car customizations
-     - Added title "Enter your Pattern" at the top
-     - Hid the emergency call at the bottom
--->
-
-<com.android.keyguard.KeyguardPatternView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:androidprv="http://schemas.android.com/apk/res-auto"
-    android:id="@+id/keyguard_pattern_view"
-    android:orientation="vertical"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    androidprv:layout_maxWidth="@dimen/keyguard_security_width"
-    android:gravity="center_horizontal">
-
-    <FrameLayout
-        android:layout_width="match_parent"
-        android:layout_height="match_parent">
-
-        <LinearLayout
-            android:id="@+id/container"
-            android:layout_height="wrap_content"
-            android:layout_width="wrap_content"
-            android:orientation="vertical"
-            android:layout_gravity="center">
-
-            <TextView
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:layout_margin="@dimen/car_padding_2"
-                android:gravity="center"
-                android:textColor="@android:color/white"
-                android:textSize="@dimen/car_body1_size"
-                android:text="@string/keyguard_enter_your_pattern" />
-
-            <include layout="@layout/keyguard_message_area"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content" />
-
-            <com.android.internal.widget.LockPatternView
-                android:id="@+id/lockPatternView"
-                android:layout_width="@dimen/keyguard_pattern_dimension"
-                android:layout_height="@dimen/keyguard_pattern_dimension"
-                android:layout_marginVertical="@dimen/pin_pattern_pad_margin_vertical"
-                android:layout_gravity="center_horizontal"
-                android:gravity="center" />
-
-            <Button
-                android:id="@+id/cancel_button"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_gravity="center"
-                style="@style/KeyguardButton"
-                android:text="@string/cancel"/>
-
-          <include layout="@layout/keyguard_eca"
-              android:id="@+id/keyguard_selector_fade_container"
-              android:layout_width="match_parent"
-              android:layout_height="wrap_content"
-              android:orientation="vertical"
-              android:layout_gravity="bottom|center_horizontal"
-              android:gravity="center_horizontal"
-              android:visibility="gone" />
-        </LinearLayout>
-    </FrameLayout>
-
-</com.android.keyguard.KeyguardPatternView>
diff --git a/car_product/overlay/frameworks/base/packages/SystemUI/res-keyguard/layout/keyguard_pin_view.xml b/car_product/overlay/frameworks/base/packages/SystemUI/res-keyguard/layout/keyguard_pin_view.xml
deleted file mode 100644
index 657595b..0000000
--- a/car_product/overlay/frameworks/base/packages/SystemUI/res-keyguard/layout/keyguard_pin_view.xml
+++ /dev/null
@@ -1,191 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Copyright 2018, 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.
--->
-
-<!-- Car customizations
-     - Added title "Enter your PIN" under the entry field
-     - Put backspace and enter buttons in row 4
-     - Hid the emergency call at the bottom
--->
-
-<com.android.keyguard.KeyguardPINView
-        xmlns:android="http://schemas.android.com/apk/res/android"
-        xmlns:app="http://schemas.android.com/apk/res-auto"
-        android:id="@+id/keyguard_pin_view"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent">
-
-    <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:layout_marginLeft="@dimen/num_pad_margin_left"
-        android:layout_marginRight="@dimen/num_pad_margin_right"
-        android:orientation="vertical"
-        android:gravity="center">
-
-        <LinearLayout
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:gravity="center"
-            android:orientation="vertical">
-
-            <com.android.keyguard.PasswordTextView
-                android:id="@+id/pinEntry"
-                android:layout_width="@dimen/keyguard_security_width"
-                android:layout_height="@dimen/pin_entry_height"
-                android:gravity="center"
-                app:scaledTextSize="@integer/password_text_view_scale"
-                android:contentDescription="@string/keyguard_accessibility_pin_area" />
-
-            <View
-                android:id="@+id/divider"
-                android:layout_width="@dimen/keyguard_security_width"
-                android:layout_height="@dimen/divider_height"
-                android:background="@android:color/white" />
-
-            <TextView
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_margin="@dimen/car_padding_2"
-                android:gravity="center"
-                android:textColor="@android:color/white"
-                android:textSize="@dimen/car_body1_size"
-                android:text="@string/keyguard_enter_your_pin" />
-
-            <include
-                layout="@layout/keyguard_message_area"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"/>
-        </LinearLayout>
-
-        <GridLayout
-            android:id="@+id/container"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_marginVertical="@dimen/pin_pattern_pad_margin_vertical"
-            android:columnCount="3">
-
-            <!-- Row 1 -->
-            <com.android.keyguard.NumPadKey
-                android:id="@+id/key1"
-                style="@style/NumPadKeyButton"
-                app:digit="@string/one" />
-            <com.android.keyguard.NumPadKey
-                android:id="@+id/key2"
-                style="@style/NumPadKeyButton"
-                app:digit="@string/two" />
-            <com.android.keyguard.NumPadKey
-                android:id="@+id/key3"
-                style="@style/NumPadKeyButton"
-                app:digit="@string/three" />
-
-            <!-- Row 2 -->
-            <com.android.keyguard.NumPadKey
-                android:id="@+id/key4"
-                style="@style/NumPadKeyButton"
-                app:digit="@string/four" />
-            <com.android.keyguard.NumPadKey
-                android:id="@+id/key5"
-                style="@style/NumPadKeyButton"
-                app:digit="@string/five" />
-            <com.android.keyguard.NumPadKey
-                android:id="@+id/key6"
-                style="@style/NumPadKeyButton"
-                app:digit="@string/six" />
-
-            <!-- Row 3 -->
-            <com.android.keyguard.NumPadKey
-                android:id="@+id/key7"
-                style="@style/NumPadKeyButton"
-                app:digit="@string/seven" />
-            <com.android.keyguard.NumPadKey
-                android:id="@+id/key8"
-                style="@style/NumPadKeyButton"
-                app:digit="@string/eight" />
-            <com.android.keyguard.NumPadKey
-                android:id="@+id/key9"
-                style="@style/NumPadKeyButton"
-                app:digit="@string/nine" />
-
-            <!-- Row 4 -->
-            <ImageButton
-                android:id="@+id/delete_button"
-                style="@style/NumPadKeyButton"
-                android:gravity="center_vertical"
-                android:src="@drawable/ic_backspace"
-                android:clickable="true"
-                android:tint="@android:color/white"
-                android:background="@drawable/ripple_drawable"
-                android:contentDescription="@string/keyboardview_keycode_delete" />
-            <com.android.keyguard.NumPadKey
-                android:id="@+id/key0"
-                style="@style/NumPadKeyButton"
-                app:digit="@string/zero" />
-            <ImageButton
-                android:id="@+id/key_enter"
-                style="@style/NumPadKeyButton"
-                android:src="@drawable/ic_done"
-                android:tint="@android:color/white"
-                android:background="@drawable/ripple_drawable"
-                android:contentDescription="@string/keyboardview_keycode_enter" />
-        </GridLayout>
-
-        <Button
-            android:id="@+id/cancel_button"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_gravity="center"
-            style="@style/KeyguardButton"
-            android:text="@string/cancel"/>
-
-    </LinearLayout>
-
-    <!-- KeyguardPinView references these resources ids in code so removing them will cause the
-         keyguard to crash. Instead put them down here where they are out of the way and set their
-         visibility to gone. -->
-    <com.android.keyguard.AlphaOptimizedRelativeLayout
-        android:id="@+id/row0"
-        android:layout_width="0dp"
-        android:layout_height="0dp"
-        android:visibility="gone" />
-    <LinearLayout
-        android:id="@+id/row1"
-        android:layout_width="0dp"
-        android:layout_height="0dp"
-        android:visibility="gone" />
-    <LinearLayout
-        android:id="@+id/row2"
-        android:layout_width="0dp"
-        android:layout_height="0dp"
-        android:visibility="gone" />
-    <LinearLayout
-        android:id="@+id/row3"
-        android:layout_width="0dp"
-        android:layout_height="0dp"
-        android:visibility="gone" />
-    <LinearLayout
-        android:id="@+id/row4"
-        android:layout_width="0dp"
-        android:layout_height="0dp"
-        android:visibility="gone" />
-
-    <include
-        layout="@layout/keyguard_eca"
-        android:id="@+id/keyguard_selector_fade_container"
-        android:layout_width="0dp"
-        android:layout_height="0dp"
-        android:visibility="gone" />
-</com.android.keyguard.KeyguardPINView>
diff --git a/car_product/overlay/frameworks/base/packages/SystemUI/res-keyguard/values-h1000dp/dimens.xml b/car_product/overlay/frameworks/base/packages/SystemUI/res-keyguard/values-h1000dp/dimens.xml
deleted file mode 100644
index 24f1ee3..0000000
--- a/car_product/overlay/frameworks/base/packages/SystemUI/res-keyguard/values-h1000dp/dimens.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Copyright 2018s, 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>
-    <dimen name="pin_pattern_pad_margin_vertical">178dp</dimen>
-</resources>
diff --git a/car_product/overlay/frameworks/base/packages/SystemUI/res-keyguard/values/colors.xml b/car_product/overlay/frameworks/base/packages/SystemUI/res-keyguard/values/colors.xml
deleted file mode 100644
index a75dd88..0000000
--- a/car_product/overlay/frameworks/base/packages/SystemUI/res-keyguard/values/colors.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Copyright 2018, 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>
-    <color name="button_background">@color/car_dark_blue_grey_600</color>
-    <color name="button_text">@color/car_action1_dark</color>
-</resources>
\ No newline at end of file
diff --git a/car_product/overlay/frameworks/base/packages/SystemUI/res-keyguard/values/dimens.xml b/car_product/overlay/frameworks/base/packages/SystemUI/res-keyguard/values/dimens.xml
deleted file mode 100644
index b7967c4..0000000
--- a/car_product/overlay/frameworks/base/packages/SystemUI/res-keyguard/values/dimens.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Copyright 2017, 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>
-    <dimen name="num_pad_margin_left">112dp</dimen>
-    <dimen name="num_pad_margin_right">144dp</dimen>
-    <dimen name="num_pad_key_width">120dp</dimen>
-    <dimen name="num_pad_key_height">80dp</dimen>
-    <dimen name="num_pad_key_margin">12dp</dimen>
-    <dimen name="pin_entry_height">@dimen/num_pad_key_height</dimen>
-    <dimen name="divider_height">1dp</dimen>
-    <dimen name="key_enter_margin_top">128dp</dimen>
-    <dimen name="keyguard_pattern_dimension">400dp</dimen>
-    <dimen name="password_field_width">350dp</dimen>
-    <dimen name="pin_pattern_pad_margin_vertical">0dp</dimen>
-</resources>
diff --git a/car_product/overlay/frameworks/base/packages/SystemUI/res-keyguard/values/integers.xml b/car_product/overlay/frameworks/base/packages/SystemUI/res-keyguard/values/integers.xml
deleted file mode 100644
index bad1346..0000000
--- a/car_product/overlay/frameworks/base/packages/SystemUI/res-keyguard/values/integers.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Copyright 2017, 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>
-    <integer name="password_text_view_scale">40</integer>
-    <integer name="password_max_length">500</integer>
-</resources>
diff --git a/car_product/overlay/frameworks/base/packages/SystemUI/res-keyguard/values/strings.xml b/car_product/overlay/frameworks/base/packages/SystemUI/res-keyguard/values/strings.xml
deleted file mode 100644
index cabeec2..0000000
--- a/car_product/overlay/frameworks/base/packages/SystemUI/res-keyguard/values/strings.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Copyright 2017, 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">
-    <string name="zero">0</string>
-    <string name="one">1</string>
-    <string name="two">2</string>
-    <string name="three">3</string>
-    <string name="four">4</string>
-    <string name="five">5</string>
-    <string name="six">6</string>
-    <string name="seven">7</string>
-    <string name="eight">8</string>
-    <string name="nine">9</string>
-</resources>
diff --git a/car_product/overlay/frameworks/base/packages/SystemUI/res-keyguard/values/styles.xml b/car_product/overlay/frameworks/base/packages/SystemUI/res-keyguard/values/styles.xml
deleted file mode 100644
index e26c515..0000000
--- a/car_product/overlay/frameworks/base/packages/SystemUI/res-keyguard/values/styles.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Copyright 2017, 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">
-
-    <!-- The style for the volume icons in the volume dialog. This style makes the icon scale to
-         fit its container since auto wants the icon to be larger. The padding is added to make it
-         so the icon does not press along the edges of the dialog. -->
-    <style name="NumPadKeyButton">
-        <item name="android:layout_width">@dimen/num_pad_key_width</item>
-        <item name="android:layout_height">@dimen/num_pad_key_height</item>
-        <item name="android:layout_margin">@dimen/num_pad_key_margin</item>
-        <item name="textView">@id/pinEntry</item>
-    </style>
-
-    <style name="KeyguardButton" parent="Widget.Car.Button">
-        <item name="android:background">@drawable/keyguard_button_background</item>
-        <item name="android:textColor">@color/button_text</item>
-        <item name="android:textAllCaps">false</item>
-    </style>
-
-    <style name="Widget.TextView.NumPadKey" parent="@android:style/Widget.TextView">
-        <!-- Only replaces the text size. -->
-        <item name="android:textSize">@dimen/car_body1_size</item>
-    </style>
-</resources>
diff --git a/car_product/preloaded-classes-car b/car_product/preloaded-classes-car
deleted file mode 100644
index 962099f..0000000
--- a/car_product/preloaded-classes-car
+++ /dev/null
@@ -1 +0,0 @@
-# Classes which are preloaded by com.android.internal.os.ZygoteInit.
diff --git a/car_product/sepolicy/private/carservice_app.te b/car_product/sepolicy/private/carservice_app.te
index fa2577f..44e18b7 100644
--- a/car_product/sepolicy/private/carservice_app.te
+++ b/car_product/sepolicy/private/carservice_app.te
@@ -41,6 +41,9 @@
 # Read and write /data/data subdirectory.
 allow carservice_app system_app_data_file:dir create_dir_perms;
 allow carservice_app system_app_data_file:{ file lnk_file } create_file_perms;
+# R/W /data/system/car
+allow carservice_app system_car_data_file:dir create_dir_perms;
+allow carservice_app system_car_data_file:{ file lnk_file } create_file_perms;
 
 # For I/O stats tracker
 allow carservice_app proc_uid_io_stats:file { read open getattr };
diff --git a/car_product/sepolicy/private/file_contexts b/car_product/sepolicy/private/file_contexts
index 5283993..b8f62fa 100644
--- a/car_product/sepolicy/private/file_contexts
+++ b/car_product/sepolicy/private/file_contexts
@@ -1 +1,4 @@
 /system/bin/com\.android\.car\.procfsinspector     u:object_r:procfsinspector_exec:s0
+
+
+/data/system/car(/.*)? u:object_r:system_car_data_file:s0
diff --git a/car_product/sepolicy/private/procfsinspector.te b/car_product/sepolicy/private/procfsinspector.te
index e2aa062..7d22e42 100644
--- a/car_product/sepolicy/private/procfsinspector.te
+++ b/car_product/sepolicy/private/procfsinspector.te
@@ -10,3 +10,4 @@
 
 dontaudit procfsinspector domain:dir getattr;
 
+binder_service(procfsinspector)
diff --git a/car_product/sepolicy/public/file.te b/car_product/sepolicy/public/file.te
index ea79a24..8555d29 100644
--- a/car_product/sepolicy/public/file.te
+++ b/car_product/sepolicy/public/file.te
@@ -3,3 +3,6 @@
 # Vendors are supposed to extend genfs_contexts with the
 # partition names for their devices.
 type sysfs_fs_lifetime_write, sysfs_type, fs_type;
+
+# /data/system/car
+type system_car_data_file, file_type, data_file_type, core_data_file_type;
\ No newline at end of file
diff --git a/evs/app/WindowSurface.cpp b/evs/app/WindowSurface.cpp
index 04e7ac4..dbd245b 100644
--- a/evs/app/WindowSurface.cpp
+++ b/evs/app/WindowSurface.cpp
@@ -34,8 +34,12 @@
     }
 
     // Get main display parameters.
-    sp<IBinder> mainDpy = SurfaceComposerClient::getBuiltInDisplay(
-            ISurfaceComposer::eDisplayIdMain);
+    sp<IBinder> mainDpy = SurfaceComposerClient::getInternalDisplayToken();
+    if (mainDpy == nullptr) {
+        fprintf(stderr, "ERROR: no internal display\n");
+        return;
+    }
+
     DisplayInfo mainDpyInfo;
     err = SurfaceComposerClient::getDisplayInfo(mainDpy, &mainDpyInfo);
     if (err != NO_ERROR) {
diff --git a/evs/sampleDriver/GlWrapper.cpp b/evs/sampleDriver/GlWrapper.cpp
index fbd36a2..84e06df 100644
--- a/evs/sampleDriver/GlWrapper.cpp
+++ b/evs/sampleDriver/GlWrapper.cpp
@@ -207,8 +207,12 @@
     }
 
     // Get main display parameters.
-    sp <IBinder> mainDpy = SurfaceComposerClient::getBuiltInDisplay(
-            ISurfaceComposer::eDisplayIdMain);
+    sp<IBinder> mainDpy = SurfaceComposerClient::getInternalDisplayToken();
+    if (mainDpy == nullptr) {
+        ALOGE("ERROR: no internal display");
+        return false;
+    }
+
     DisplayInfo mainDpyInfo;
     err = SurfaceComposerClient::getDisplayInfo(mainDpy, &mainDpyInfo);
     if (err != NO_ERROR) {
diff --git a/evs/sepolicy/evs_app.te b/evs/sepolicy/evs_app.te
index ef78f0b..d85a5b7 100644
--- a/evs/sepolicy/evs_app.te
+++ b/evs/sepolicy/evs_app.te
@@ -20,3 +20,11 @@
 # Permit communication with the vehicle HAL
 # (Communcations with the rest of the EVS stack is allowed via hal_evs)
 binder_call(evs_app, hal_vehicle);
+
+# Allow use of hwservice, ion device, and system files
+allow evs_app hal_configstore_ISurfaceFlingerConfigs:hwservice_manager find;
+allow evs_app hal_configstore_default:binder call;
+allow evs_app hal_graphics_mapper_hwservice:hwservice_manager find;
+allow evs_app hal_evs_hwservice:hwservice_manager find;
+allow evs_app ion_device:chr_file { open read };
+allow evs_app system_file:dir { open read };
diff --git a/evs/sepolicy/evs_driver.te b/evs/sepolicy/evs_driver.te
index 5d316a4..44ec010 100644
--- a/evs/sepolicy/evs_driver.te
+++ b/evs/sepolicy/evs_driver.te
@@ -18,3 +18,10 @@
 allow hal_evs_driver hal_graphics_allocator_default_tmpfs:file { read write };
 allow hal_evs_driver self:capability dac_override;
 allow hal_evs_driver servicemanager:binder call;
+
+# Allow use of hwservices
+allow hal_evs_driver hal_evs_hwservice:hwservice_manager add;
+allow hal_evs_driver hidl_base_hwservice:hwservice_manager add;
+allow hal_evs_driver hal_configstore_ISurfaceFlingerConfigs:hwservice_manager find;
+allow hal_evs_driver hal_configstore_default:binder call;
+allow hal_evs_driver ion_device:chr_file { ioctl open read };
diff --git a/evs/sepolicy/evs_manager.te b/evs/sepolicy/evs_manager.te
index 1f99d96..1d4a29e 100644
--- a/evs/sepolicy/evs_manager.te
+++ b/evs/sepolicy/evs_manager.te
@@ -6,3 +6,8 @@
 # allow init to launch processes in this context
 type evs_manager_exec, exec_type, file_type;
 init_daemon_domain(evs_manager)
+
+# allow use of hwservices
+allow evs_manager hal_evs_hwservice:hwservice_manager { add find };
+allow evs_manager hidl_base_hwservice:hwservice_manager add;
+allow evs_manager hal_graphics_allocator_default:fd use;
diff --git a/service/AndroidManifest.xml b/service/AndroidManifest.xml
index 4a16579..1f221ac 100644
--- a/service/AndroidManifest.xml
+++ b/service/AndroidManifest.xml
@@ -23,7 +23,7 @@
     <original-package android:name="com.android.car" />
      <permission-group
         android:name="android.car.permission-group.CAR_MONITORING"
-        android:icon="@drawable/car_ic_mode"
+        android:icon="@drawable/perm_group_car"
         android:description="@string/car_permission_desc"
         android:label="@string/car_permission_label" />
     <permission
@@ -188,29 +188,37 @@
         android:description="@string/car_permission_desc_audio_settings" />
 
     <permission
-            android:name="android.car.permission.BIND_INSTRUMENT_CLUSTER_RENDERER_SERVICE"
-            android:protectionLevel="signature"
-            android:label="@string/car_permission_label_bind_instrument_cluster_rendering"
-            android:description="@string/car_permission_desc_bind_instrument_cluster_rendering"/>
+        android:name="android.car.permission.BIND_INSTRUMENT_CLUSTER_RENDERER_SERVICE"
+        android:protectionLevel="signature"
+        android:label="@string/car_permission_label_bind_instrument_cluster_rendering"
+        android:description="@string/car_permission_desc_bind_instrument_cluster_rendering"/>
 
     <permission
-            android:name="android.car.permission.BIND_CAR_INPUT_SERVICE"
-            android:protectionLevel="signature"
-            android:label="@string/car_permission_label_bind_input_service"
-            android:description="@string/car_permission_desc_bind_input_service"/>
+        android:name="android.car.permission.BIND_CAR_INPUT_SERVICE"
+        android:protectionLevel="signature"
+        android:label="@string/car_permission_label_bind_input_service"
+        android:description="@string/car_permission_desc_bind_input_service"/>
 
     <permission
-            android:name="android.car.permission.CAR_DISPLAY_IN_CLUSTER"
-            android:protectionLevel="system|signature"
-            android:label="@string/car_permission_car_display_in_cluster"
-            android:description="@string/car_permission_desc_car_display_in_cluster" />
+        android:name="android.car.permission.CAR_DISPLAY_IN_CLUSTER"
+        android:protectionLevel="system|signature"
+        android:label="@string/car_permission_car_display_in_cluster"
+        android:description="@string/car_permission_desc_car_display_in_cluster" />
 
-    <permission android:name="android.car.permission.CAR_INSTRUMENT_CLUSTER_CONTROL"
-                android:protectionLevel="system|signature"
-                android:label="@string/car_permission_car_cluster_control"
-                android:description="@string/car_permission_desc_car_cluster_control" />
+    <permission
+        android:name="android.car.permission.CAR_INSTRUMENT_CLUSTER_CONTROL"
+        android:protectionLevel="system|signature"
+        android:label="@string/car_permission_car_cluster_control"
+        android:description="@string/car_permission_desc_car_cluster_control" />
 
-    <permission android:name="android.car.permission.STORAGE_MONITORING"
+    <permission
+        android:name="android.car.permission.CAR_UX_RESTRICTIONS_CONFIGURATION"
+        android:protectionLevel="system|signature"
+        android:label="@string/car_permission_label_car_ux_restrictions_configuration"
+        android:description="@string/car_permission_desc_car_ux_restrictions_configuration" />
+
+    <permission
+        android:name="android.car.permission.STORAGE_MONITORING"
         android:protectionLevel="system|signature"
         android:label="@string/car_permission_label_storage_monitoring"
         android:description="@string/car_permission_desc_storage_monitoring" />
diff --git a/service/res/drawable-hdpi/car_ic_mode.png b/service/res/drawable-hdpi/car_ic_mode.png
deleted file mode 100644
index a8f719f..0000000
--- a/service/res/drawable-hdpi/car_ic_mode.png
+++ /dev/null
Binary files differ
diff --git a/service/res/drawable-mdpi/car_ic_mode.png b/service/res/drawable-mdpi/car_ic_mode.png
deleted file mode 100644
index 38a9747..0000000
--- a/service/res/drawable-mdpi/car_ic_mode.png
+++ /dev/null
Binary files differ
diff --git a/service/res/drawable-xhdpi/car_ic_mode.png b/service/res/drawable-xhdpi/car_ic_mode.png
deleted file mode 100644
index 58a1aca..0000000
--- a/service/res/drawable-xhdpi/car_ic_mode.png
+++ /dev/null
Binary files differ
diff --git a/service/res/drawable/perm_group_car.xml b/service/res/drawable/perm_group_car.xml
new file mode 100644
index 0000000..79e3f03
--- /dev/null
+++ b/service/res/drawable/perm_group_car.xml
@@ -0,0 +1,24 @@
+<!--
+    Copyright (C) 2018 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportHeight="192.0"
+        android:viewportWidth="192.0">
+
+    <path android:fillColor="#FFFFFFFF"
+          android:pathData="M36.9,180.4l5.6,5.6L96,164l53.4,22l5.6,-5.6L96,73L36.9,180.4zM184,145.8L105.7,11.6C103.7,8.1 100,6 96,6c-4,0 -7.7,2.1 -9.8,5.6L7.5,146.5c-2,3.5 -2.1,7.3 0,10.8c2,3.5 5.8,5.7 9.8,5.7H38l54.6,-99h6.8l54.6,99h20.3c6.2,0 11.7,-4.6 11.7,-10.8C186,149.8 185.3,147.6 184,145.8z"/>
+</vector>
diff --git a/service/res/layout/activity_blocking.xml b/service/res/layout/activity_blocking.xml
index 5eddbf9..0c10016 100644
--- a/service/res/layout/activity_blocking.xml
+++ b/service/res/layout/activity_blocking.xml
@@ -20,16 +20,9 @@
     android:orientation="vertical"
     android:background="@color/activity_blocking_activity_background"
     android:gravity="center">
-    <TextView
-        android:id="@+id/blocking_text"
-        android:layout_height="wrap_content"
-        android:layout_width="wrap_content"
-        android:textAppearance="@style/ActivityBlockingActivityText" />
-
     <LinearLayout
         android:layout_height="wrap_content"
         android:layout_width="match_parent"
-        android:layout_marginTop="@dimen/common_margin"
         android:orientation="horizontal"
         android:gravity="center">
         <ImageView
@@ -45,8 +38,23 @@
             android:textAppearance="@style/ActivityBlockingActivityText" />
     </LinearLayout>
 
+    <TextView
+        android:id="@+id/blocking_text"
+        android:layout_height="wrap_content"
+        android:layout_width="wrap_content"
+        android:layout_marginTop="@dimen/common_margin"
+        android:gravity="center"
+        android:textAppearance="@style/ActivityBlockingActivityText" />
+
+    <!-- Show exit button if we need to (and are able to) restart the blocked task -->
+    <TextView
+        android:id="@+id/exit_button_message"
+        android:layout_height="wrap_content"
+        android:layout_width="wrap_content"
+        android:layout_marginTop="@dimen/common_margin"
+        android:textAppearance="@style/ActivityBlockingActivityText" />
     <Button
-        android:id="@+id/exit"
+        android:id="@+id/exit_button"
         android:layout_height="wrap_content"
         android:layout_width="wrap_content"
         android:layout_marginTop="@dimen/common_margin"
diff --git a/service/res/values-af/config.xml b/service/res/values-af/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-af/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-af/strings.xml b/service/res/values-af/strings.xml
new file mode 100644
index 0000000..721cfa9
--- /dev/null
+++ b/service/res/values-af/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Motorinligting"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Toegang tot jou motor se inligting."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Motorkajuit"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Toegang tot jou motor se bykomstighede, insluitend deure, spieëls, sitplekke en vensters."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Motorkamera"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Toegang tot motor se kamera(s)."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Motorenergie"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Toegang tot jou motor se energie-inligting."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"Motor-HVAC (verhitting, ventilasie en lugversorging)"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Toegang tot jou motor se HVAC (verhitting, venitalise en lugversorging)."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Motorryafstand"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Toegang tot jou motor se ryafstandinligting."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Motorspoed"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Toegang tot jou motor se spoed."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Voertuigdinamikastaat"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Toegang tot jou motor se dinamikastaat"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Motorverskafferkanaal"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Toegang tot jou motor se verskafferkanaal om motorspesifieke inligting uit te ruil."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Motorradio"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Toegang tot jou motor se radio."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Motorprojeksie"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Motoroudiovolume"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Motoroudio-instellings"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Wys foonkoppelvlak op motorskerm"</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Boots voertuig-HAL na"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Boots jou motor se voertuig-HAL na vir interne toetsdoeleindes."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Beheer jou motor se oudiovolume."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Beheer jou motor se oudio-instellings."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Programblokkering"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Beheer programblokkering terwyl jy bestuur."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Navigasiebestuurder"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Rapporteer navigasiedata aan instrumentgroep"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Direkte lewering na instrumentgroep"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Laat \'n program toe om aktiwiteite te verklaar om in die instrumentgroep gewys te word"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Instrumentgroepbeheer"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Begin programme in die instrumentgroep"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Instrumentgroeplewering"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Ontvang instrumentgroepdata"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"UX-beperkingsopstelling"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"Stel UX-beperkings op"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Motorinvoerdiens"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Hanteer invoergebeurtenisse"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"CAN-bus het misluk"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN-bus reageer nie. Ontprop hoofeenheidkas, prop dit weer in, en herbegin die motor"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"Vir jou veiligheid is dié aktiwiteit nie beskikbaar terwyl jy bestuur nie.\nWag totdat jy geparkeer het om voort te gaan."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"Kies <xliff:g id="EXIT_BUTTON">%s</xliff:g> om oor te begin met veilige programkenmerke."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Terug"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Ontfoutin."</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Diagnostiese data"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Lees diagnostiese data van die motor af"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Diagnostiese data"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Vee diagnostiese data in die motor uit"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"VMS-publiseerder"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"Publiseer VMS-boodskappe"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"VMS-intekenaar"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"Teken in op VMS-boodskappe"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Flitsbergingkontrolering"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Monitor flitsberginggebruik"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Bestuurstaat"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Luister na bestuurstaatveranderinge"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Engin gedetailleerd"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Toegang tot motor se gedetailleerde enjininligting"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Energiepoorte"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Toegang tot energiepoorte"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Motoridentifikasie"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Toegang tot motor se identifikasie"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Motordeure"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Beheer motor se deure"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Motorvensters"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Beheer motor se vensters"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Motorspieëls"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Beheer motor se spieëls"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Motorsitplekke"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Beheer motor se sitplekke"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Basiese motorinligting"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Toegang tot basiese motorinligting"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Motorbuiteligte"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Toegang tot motorbuiteligtestaat"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Motorbuiteligte"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Beheer buitemotorligte"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Motorbuitetemperatuur"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Toegang tot buitetemperatuur"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Motorbande"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Toegang tot motorbandinligting"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Motorkragoorbringstelsel"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Toegang tot kragoorbringstelselinligting"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Motorkrag"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Toegang tot motorkragstaat"</string>
+</resources>
diff --git a/service/res/values-am/config.xml b/service/res/values-am/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-am/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-am/strings.xml b/service/res/values-am/strings.xml
new file mode 100644
index 0000000..e66ba66
--- /dev/null
+++ b/service/res/values-am/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"የመኪና መረጃ"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"የመኪናዎን መረጃ ይድረሱበት።"</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"የመኪና ጋቢና"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"የእርስዎን መኪና ተቀፅላዎች በሮችን፣ መስታውቶችን፣ ወንበሮችን እና መስኮቶችን ጨምሮ ይድረሱባቸው።"</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"የመኪና ካሜራ"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"የእርስዎን ካሜራ(ዎች) ይደርሱበት(ባቸው)።"</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"የመኪና ኃይል"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"የእርስዎን መኪና ኃይል መረጃ ይድረሱበት።"</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"የመኪና Hvac"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"የእርስዎን መኪና hvac ይድረሱበት።"</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"መኪና የተነዳበት ርቀት"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"የመኪናዎን የጉዞ ርቀት መለኪያ መረጃ ይድረሱበት።"</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"የመኪና ፍጥነት"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"የመኪናዎን ፍጥነት ይድረሱበት።"</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"የመኪና ተለዋዋጭ ውሂብ"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"የእርስዎን መኪና ተለዋዋጭ ሁኔታ ይድረሱባቸው"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"የመኪና አቅራቢ ሰርጥ"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"መኪና ተኮር መረጃ ለመለዋወጥ የመኪናዎ አቅራቢ ሰርጥ ላይ ይድረሱበት።"</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"የመኪና ሬዲዮ"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"የእርስዎን መኪና ሬዲዮ ይድረሱበት።"</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"የመኪና ማሳያ"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"የመኪና ኦዲዮ ድምፅ መጠን"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"የመኪና ኦዲዮ ቅንብሮች"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"የስልክ በይነገጽ በመኪና ማሳያ ላይ አሳይ።"</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"የመኪና HAL አቅርብ"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"ለውስጣዊ ምርመራ ዓላማ የእርስዎን መኪና HAL ያቅርቡ።"</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"የእርስዎን መኪና ኦዲዮ ድምፅ መጠንን ይቆጣጠሩ።"</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"የእርስዎን መኪና ኦዲዮ ቅንብሮች ይቆጣጠሩ።"</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"የመተግበሪያ እገዳ"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"እየነዱ እያሉ የመተግበሪያ እገዳን ይቆጣጠሩ።"</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"የዳሰሳ አስተዳዳሪ"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"የዳሰሳ ውሂብ ወደ መሣሪያ ስብስብ ሪፖርት ያድርጉ"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"ወደ መሣሪያ ስብስብ በቀጥታ ማቅረብ"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"በመሣሪያ ስብስብ ውስጥ የሚታዩትን እንቅስቃሴዎች ይፋ ለማድረግ እንዲችል ለመተግበሪያው ይፍቀዱለት"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"የመሣሪያ ስብስብ ቁጥጥር"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"መተግበሪያዎችን በመሣሪያ ስብስብ ውስጥ አስጀምር"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"የመሣሪያ ስብስብ አቅርቦት"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"የመሣሪያ ስብስብ ውሂብን ተቀበል"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"UX ገደቦች ውቅረት"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"የUX ገደቦችን ያዋቅሩ"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"የመኪና ግቤት አገልግሎት"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"የግቤት ክስተቶችን ያስተናግዱ"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"CAN አውቶብስ አልተሳካም"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN አውቶብስ ምላሽ አይሰጥም። የጭንቅላት አሃድ መያዣ ሳጥኑን ይሰኩ እና ይንቀሉ በመቀጠል መኪናውን ዳግም ያስጀምሩ"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"ለእርስዎ ደህንነት ሲባል፣ ይህ እንቅስቃሴ እርስዎ በሚነዱበት ጊዜ አይገኝም። \nለመቀጠል እንዲችሉ፣ መኪናዎ እስከሚቆም ድረስ ይጠብቁ።"</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"ከደህንነት አስተማማኝ የሆኑ የመተግበሪያ ባህሪያት ጋር መልሶ ለመጀመር፣ <xliff:g id="EXIT_BUTTON">%s</xliff:g>ን ይምረጡ።"</string>
+    <string name="exit_button" msgid="5829638404777671253">"ተመለስ"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"የአርም መረጃ"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"የምርመራ ውሂብ"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"ከመኪናው ላይ የምርመራ ውሂብን ያንብቡ"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"የምርመራ ውሂብ"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"ከመኪናው ላይ የምርመራ ውሂብን አጽዳ"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"VMS አታሚ"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"የvms መልእክቶችን ያትሙ"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"VMS ደንበኝነት ተመዝጋቢ"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"ወደ vms መልዕክቶች በደንበኝነት ይመዝገቡ"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"የማከማቻ ቁጥጥር አደራረግ ብልጭታ"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"የብልጭታ ማከማቻ አጠቃቀምን ይቆጣጠሩ"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"የመንዳት ሁኔታ"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"ለመኪና አነዳድ ሁኔታ ለውጦች ያዳምጡ"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"የሞተር ዝርዝር መረጃ"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"የእርስዎን መኪና በዝርዝር የቀረበ የሞተር መረጃ ይድረሱበት።"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"የጉልበት ወደቦች"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"የኃይል ወደቦችን ይድረሱባቸው"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"የመኪና ለይቶ ማወቂያ"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"የመኪና ለይቶ ማወቂያን ይድረሱበት"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"የመኪና በሮች"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"የመኪና በሮችን ይቆጣጠሩ"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"የመኪና መስኮቶች"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"የመኪና መስኮቶችን ይቆጣጠሩ።"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"የመኪና መስታውቶች"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"የመኪና መስታውቶችን ይቆጣጠሩ"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"የመኪና ወንበሮች"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"የመኪና ወንበሮችን ይቆጣጠሩ"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"የመኪና መሠረታዊ መረጃ"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"የመኪና መሠረታዊ መረጃን ይድረሱበት"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"የመኪና ውጫዊ መብራቶች"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"የመኪና ውጫዊ መብራቶችን ሁኔታ ይድረሱባቸው"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"የመኪና ውጫዊ መብራቶች"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"የመኪና ውጫዊ መብራቶችን ይቆጣጠሩ"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"የመኪና ውጫዊ ሙቀት"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"የመኪናውን ውጫዊ ሙቀት ይደረሱበት"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"የመኪና ጎማዎች"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"የመኪና ጎማ መረጃን ይድረሱበት"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"የመኪና ኃይል ባቡር"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"የመኪና የጉልበት ባቡር መረጃን ይደረሱበት"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"የመኪና ጉልበት"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"የመኪና የኃይል ሁኔታን ይድረሱበት"</string>
+</resources>
diff --git a/service/res/values-ar/config.xml b/service/res/values-ar/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-ar/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-ar/strings.xml b/service/res/values-ar/strings.xml
new file mode 100644
index 0000000..2f503f7
--- /dev/null
+++ b/service/res/values-ar/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"معلومات السيارة"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"الحصول على معلومات عن السيارة"</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"مقصورة القيادة"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"الحصول على معلومات ملحقات السيارة، بما في ذلك الأبواب والمرايا والمقاعد والنوافذ"</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"كاميرا السيارة"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"الوصول إلى الكاميرات في السيارة"</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"طاقة السيارة"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"الحصول على معلومات الطاقة في السيارة"</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"التدفئة والتهوية وتكييف الهواء في السيارة"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"الحصول على معلومات التدفئة والتهوية وتكييف الهواء في السيارة"</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"المسافة التي تقطعها السيارة بالأميال"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"الحصول على معلومات المسافة المقطوعة بالأميال في سيارتك"</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"سرعة السيارة"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"الحصول على معلومات عن سرعة السيارة"</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"الحالة الديناميكية للسيارة"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"الحصول على معلومات عن الحالة الديناميكية للسيارة"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"قناة مورِّد السيارة"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"الحصول على معلومات قناة المورِّد في السيارة لتبادل معلومات خاصة بالسيارة."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"راديو السيارة"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"الوصول إلى راديو السيارة"</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"العرض متعدّد الأبعاد للسيارة"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"مستوى الصوت في السيارة"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"إعدادات الصوت في السيارة"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"عرض واجهة الهاتف على شاشة السيارة"</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"محاكاة HAL في السيارة"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"محاكاة HAL في السيارة لغرض الاختبار الداخلي"</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"التحكم في مستوى الصوت داخل السيارة"</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"التحكم في إعدادات الصوت في السيارة"</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"حظر التطبيقات"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"التحكم في حظر التطبيقات أثناء القيادة"</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"مدير التنقّل"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"إبلاغ مجموعة الأدوات ببيانات التنقل"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"العرض المباشر في مجموعة العدادات"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"يمكنك السماح لتطبيق بإعلان الأنشطة المطلوب عرضها في مجموعة العدادات."</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"التحكم في مجموعة العدادات"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"تشغيل التطبيقات في مجموعة العدادات"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"جارٍ عرض مجموعة العدادات"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"تلقّي بيانات مجموعة الأدوات"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"ضبط قيود تجربة المستخدم"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"ضبط قيود تجربة المُستخدِم"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"خدمة إدخال السيارة"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"التعامل مع أحداث الإدخال"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"حدث خطأ في موصّل CAN"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"لا استجابة من موصّل CAN. يمكنك فصل صندوق وحدة الرأس وإعادة تشغيل السيارة."</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"حرصًا على سلامتك، لا يتوفّر هذا النشاط أثناء القيادة.\nللمتابعة، يمكنك الانتظار حتى تتوقّف السيارة."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"للبدء من جديد باستخدام ميزات تطبيق آمنة، اختَر <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
+    <string name="exit_button" msgid="5829638404777671253">"رجوع"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"التصحيح"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"البيانات التشخيصية"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"قراءة البيانات التشخيصية من السيارة"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"البيانات التشخيصية"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"محو البيانات التشخيصية من السيارة"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"ناشر الأجهزة الافتراضية"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"نشر رسائل الأجهزة الافتراضية"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"المشترك في الجهاز الافتراضي"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"الاشتراك في رسائل الأجهزة الافتراضية"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"مراقبة سعة تخزين الفلاش"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"مراقبة استخدام سعة تخزين الفلاش"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"وضع القيادة"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"الاستماع إلى التغييرات في حالة \"القيادة\""</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"تفاصيل المحرّك"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"الحصول على معلومات مفصّلة عن محرّك السيارة"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"منافذ الطاقة"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"الحصول على معلومات منافذ الطاقة"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"تحديد هوية السيارة"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"الحصول على معلومات عن تحديد هوية السيارة"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"أبواب السيارة"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"التحكم في أبواب السيارة"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"نوافذ السيارة"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"التحكم في نوافذ السيارة"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"مرايا السيارة"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"التحكم في مرايا السيارة"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"مقاعد السيارة"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"التحكم في مقاعد السيارة"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"المعلومات الأساسية عن السيارة"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"الحصول على معلومات أساسية عن السيارة"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"الإضاءة الخارجية للسيارة"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"الحصول على معلومات عن حالة الإضاءة الخارجية في السيارة"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"الإضاءة الخارجية للسيارة"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"التحكّم في الإضاءة الخارجية للسيارة"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"درجة الحرارة الخارجية للسيارة"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"الحصول على معلومات درجة الحرارة الخارجية في السيارة"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"إطارات السيارة"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"الحصول على معلومات عن إطارات السيارة"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"مجموعة قدرة السيارة"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"الحصول على معلومات مجموعة القدرة"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"قدرة السيارة"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"الحصول على معلومات عن حالة قدرة السيارة"</string>
+</resources>
diff --git a/service/res/values-as/config.xml b/service/res/values-as/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-as/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-as/strings.xml b/service/res/values-as/strings.xml
new file mode 100644
index 0000000..80f9d42
--- /dev/null
+++ b/service/res/values-as/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"গাড়ীৰ তথ্য"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"আপোনাৰ গাড়ীৰ তথ্য এক্সেছ কৰিব।"</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"গাড়ীৰ কেবিন"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"দৰ্জা, আইনা, আসন আৰু খিৰিকীসহ আপোনাৰ গাড়ীৰ আনুষংগিক সামগ্ৰীসমূহ এক্সেছ কৰিব।"</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"গাড়ীৰ কেমেৰা"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"আপোনাৰ গাড়ীৰ কেমেৰা এক্সেছ কৰিব।"</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"গাড়ীৰ শক্তি বিষয়ক তথ্য"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"আপোনাৰ গাড়ীৰ শক্তি সম্পৰ্কীয় তথ্য এক্সেছ কৰিব।"</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"গাড়ীৰ Hvac"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"আপোনাৰ গাড়ীৰ hvac এক্সেছ কৰিব।"</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"গাড়ীৰ মাইলেজ"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"আপোনাৰ গাড়ীৰ মাইলেজৰ তথ্য চাব।"</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"গাড়ীৰ গতিবেগ"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"আপোনাৰ গাড়ীৰ বেগ চাব।"</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"বাহনৰ ডায়নামিক্স স্থিতি"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"আপোনাৰ গাড়ীৰ ডায়নামিক্স স্থিতি এক্সেছ কৰিব"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"গাড়ী বিক্ৰেতাৰ চ্চেনেল"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"নিৰ্দিষ্ট গাড়ী বিষয়ক তথ্য বিনিময়ৰ বাবে গাড়ীৰ বিক্ৰেতাৰ চ্চেনেল এক্সেছ কৰিব।"</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"গাড়ীৰ ৰেডিঅ’"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"আপোনাৰ গাড়ীৰ ৰেডিঅ’ এক্সেছ কৰিব।"</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"গাড়ীৰ প্ৰজেকশ্বন"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"গাড়ীৰ অডিঅ’ৰ ভলিউম কিমান জানিব"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"গাড়ীৰ অডিঅ’ ছেটিং"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"গাড়ীৰ ডিছপ্লে’ত ফ’ন ইণ্টাৰফে’চ দেখুওৱাব"</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"বাহনৰ HAL ইমুলে’ট কৰক"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"আভ্যন্তৰীণ পৰীক্ষণৰ উদ্দেশ্যে আপোনাৰ গাড়ীৰ বাহন HAL ইমুলে’ট কৰিব।"</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"আপোনাৰ গাড়ীৰ অডিঅ’ৰ ভলিউম নিয়ন্ত্ৰণ কৰিব।"</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"আপোনাৰ গাড়ীৰ অডিঅ’ ছেটিং নিয়ন্ত্ৰণ কৰক।"</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"এপ্লিকেশ্বন অৱৰোধ"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"গাড়ী চলাই থাকোঁতে এপ্ অৱৰোধ কৰা কাৰ্য নিয়ন্ত্ৰণ কৰিব।"</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"নেভিগেশ্বন মেনেজাৰ"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"ইনষ্ট্ৰুমেণ্ট ক্লাষ্টাৰক নেভিগেশ্বন সম্পৰ্কীয় ডেটা যোগান ধৰিব"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"ইনষ্ট্ৰুমেণ্ট ক্লাষ্টাৰলৈ পোনপটীয়াকৈ ৰেণ্ডাৰ কৰা হৈছে"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"কোনো এপ্লিকেশ্বনক ইনষ্ট্ৰুমেণ্ট ক্লাষ্টাৰত প্ৰদৰ্শন কৰিবলৈ কাৰ্যকলাপ ঘোষণা কৰিবলৈ অনুমতি দিয়ক"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"ইনষ্ট্ৰুমেণ্ট ক্লাষ্টাৰ নিয়ন্ত্ৰণ"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"ইনষ্ট্ৰুমেণ্ট ক্লাষ্টাৰত এপ্ লঞ্চ কৰিব"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"ইনষ্ট্ৰুমেণ্ট ক্লাষ্টাৰ ৰেণ্ডাৰ কৰি থকা হৈছে"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"ইনষ্ট্ৰুমেণ্ট ক্লাষ্টাৰৰ ডেটা পায়"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"UX সীমাবদ্ধতা কনফিগাৰেশ্বন"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"UXৰ সীমাবদ্ধতা কনফিগাৰ কৰক"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"গাড়ীৰ ইনপুট সেৱা"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"ইনপুট ইভেণ্ট নিয়ন্ত্ৰণ কৰিব"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"CAN বাছ বিফল হৈছে"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN বাছে সঁহাৰি দিয়া নাই। হে’ড ইউনিট বাকচটো আঁতৰাই পুনৰ লগাওক"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"আপোনাৰ নিৰাপত্তাৰ বাবে এই কাৰ্যকলাপটো গাড়ী চলাই থকা সময়ত কৰিব নোৱাৰি।\nগাড়ীখন পাৰ্ক কৰি কামটো কৰক।"</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"সুৰক্ষিত এপ্ সুবিধাসহ আকৌ আৰম্ভ কৰিবলৈ <xliff:g id="EXIT_BUTTON">%s</xliff:g> বাছনি কৰক।"</string>
+    <string name="exit_button" msgid="5829638404777671253">"উভতি যাওক"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"ডিবাগ তথ্য"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"ডায়েগন’ষ্টিক ডেটা"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"গাড়ীৰ ডায়গ’ষ্টিক তথ্য পঢ়িব"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"ডায়েগন’ষ্টিক ডেটা"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"ডায়গ’ষ্টিক ডেটা গাড়ীৰ পৰা মচিব"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"VMS প্ৰকাশক"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"vms বাৰ্তা প্ৰকাশ কৰিব পাৰে"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"VMS গ্ৰাহকভুক্তি"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"vms বাৰ্তাৰ গ্ৰাহকভুক্ত কৰিব"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"সঞ্চয়াগাৰ নিৰীক্ষণ কৰিব"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"সঞ্চয়াগাৰ ব্যৱহাৰৰ তথ্য নিৰীক্ষণ কৰিব"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"গাড়ী চালনাৰ স্থিতি"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"গাড়ী চালনাৰ স্থিতি সলনি হ’লে তাক জানিব"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"ইঞ্জিন ডিটেইলড"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"আপোনাৰ গাড়ীৰ ইঞ্জিনৰ সবিশেষ তথ্য এক্সেছ কৰিব"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"এনাৰ্জী প’ৰ্ট"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"এনাৰ্জী প’ৰ্ট এক্সেছ কৰিব"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"গাড়ীৰ চিনাক্তকাৰী তথ্য"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"গাড়ীৰ চিনাক্তকাৰী তথ্য এক্সেছ কৰিব"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"গাড়ীৰ দৰ্জা"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"গাড়ীৰ দৰ্জা নিয়ন্ত্ৰণ কৰিব"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"গাড়ীৰ খিৰিকী"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"গাড়ীৰ খিৰিকী নিয়ন্ত্ৰণ কৰিব"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"গাড়ীৰ আইনা"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"গাড়ীৰ আইনা নিয়ন্ত্ৰণ কৰিব"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"গাড়ীৰ আসন"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"গাড়ীৰ আসন নিয়ন্ত্ৰণ কৰিব"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"গাড়ীৰ প্ৰাথমিক তথ্য"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"গাড়ীৰ বিষয়ে প্ৰাথমিক তথ্য এক্সেছ কৰিব"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"গাড়ীৰ বাহ্যিক লাইট"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"গাড়ীৰ বাহ্যিক লাইটৰ স্থিতি এক্সেছ কৰিব"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"গাড়ীৰ বাহ্যিক লাইট"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"গাড়ীৰ বাহ্যিক লাইট নিয়ন্ত্ৰণ কৰিব"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"গাড়ীৰ বাহ্যিক তাপমান"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"গাড়ীৰ বাহ্যিক তাপমান এক্সেছ কৰিব"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"গাড়ীৰ টায়াৰ"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"গাড়ীৰ টায়াৰৰ তথ্য এক্সেছ কৰিব"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"গাড়ীৰ পাৱাৰট্ৰেইন"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"গাড়ীৰ পাৱাৰট্ৰেইন সম্পৰ্কীয় তথ্য এক্সেছ কৰিব"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"গাড়ীৰ শক্তি"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"গাড়ীৰ শক্তিৰ স্থিতি এক্সেছ কৰিব"</string>
+</resources>
diff --git a/service/res/values-az/config.xml b/service/res/values-az/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-az/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-az/strings.xml b/service/res/values-az/strings.xml
new file mode 100644
index 0000000..831ffe4
--- /dev/null
+++ b/service/res/values-az/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Avtomobil məlumatı"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Avtomobil məlumatlarına giriş."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Avtomobilin kabinası"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Avtomobilin aksesuarlarına, o cümlədən qapılar, güzgülər, oturacaqlar və pəncərələrə giriş."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Avtomobilin kamerası"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Avtomobilin kameralarına giriş."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Avtomobil enerjisi"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Avtomobilin enerji məlumatlarına giriş."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"Avtomobilin Hvac mexanizmi"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Avtomobilin HVAC mexanizminə giriş."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Avtomobilin kilometrajı"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Avtomobilin kilometraj məlumatlarına giriş."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Avtomobilin sürəti"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Avtomobilin sürət məlumatlarına giriş."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Avtomobilin dinamik vəziyyəti"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Avtomobilin dinamik vəziyyətinə giriş"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Avtomobilin təchizatçı kanalı"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Avtomobilə aid məlumatların mübadiləsi üçün onun təchizatçı kanalına giriş."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Avtomobilin radiosu"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Avtomobilin radiosuna giriş."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Avtomobilin proyeksiyası"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Avtomobil Audio Səsi"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Avtomobilin Audio Ayarları"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Telefon interfeysinin avtomobil displeyində proyeksiyası."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Avtomobilin HAL mexanizminin emulyasiyası"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Daxili test məqsədilə avtomobilin HAL mexanizmini emulyasiya etmək."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Avtomobilin audio səsini tənzimləmək."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Avtomobilin audio ayarlarını tənzimləmək."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Tətbiqin bloklanması"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Avtomobil idarə edərkən tətbiqin bloklanmasını tənzimləmək"</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Naviqasiya Meneceri"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Naviqasiya məlumatlarının alət klasterinə bildirilməsi"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Alət klasterinə birbaşa ötürmə"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Alət klasterində göstəriləcək fəaliyyətlərin tətbiq tərəfindən bildirilməsinə icazə verin"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Alət klasterini tənzimləmək"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Alət klasterində tətbiqləri işə salmaq"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Alət Klasterinin Təchizatı"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Alət klasteri məlumatlarını almaq"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"UX Məhdudiyyətləri Konfiqurasiyası"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"UX Məhdudiyyətlərinin Konfiqurasiyası"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Avtomobil Daxiletmə Xidməti"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Daxiletmələri idarə etmək"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"CAN idarəetmə mexanizmi uğursuz oldu"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN mexanizmi cavab vermir. Əsas cihaz panelini ayırın və yenidən qoşun, sonra avtomobili yenidən işə salın"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"Təhlükəsizliyiniz üçün bu əməliyyat sürüş zamanı əlçatan deyil.\nDavam etmək üçün park edənədək gözləyin."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"Təhlükəsiz tətbiq xüsusiyyətləri ilə başlamaq üçün <xliff:g id="EXIT_BUTTON">%s</xliff:g> seçin."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Geri"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Debaq məlumatı"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Diaqnoztika Məlumatları"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Avtomobilin diaqnoztika məlumatlarını oxumaq"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Diaqnoztika Məlumatları"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Avtomobilin diaqnoztika məlumatlarını silmək"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"VMS naşiri"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"Vms mesajlarının nəşri"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"VMS abunəçisi"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"Vms mesajlara abunə olmaq"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Fleş yaddaşa nəzarət"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Fleş yaddaş istifadəsinə nəzarət"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Sürücülük Vəziyyəti"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Sürücülük vəziyyəti dəyişikliklərini dinləmək"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Ətraflı Mühərrik Məlumatları"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Avtomobilin ətraflı mühərrik məlumatlarına giriş"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Enerji Portları"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Enerji portlarına giriş"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Avtomobilin identifikasiyası"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Avtomobilin identifikasiyasına giriş"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Avtomobilin qapıları"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Avtomobilin qapılarını tənzimləmək"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Avtomobilin pəncərələri"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Avtomobil pəncərələrini tənzimləmək"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Avtomobilin güzgüləri"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Avtomobilin güzgülərini tənzimləmək"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Avtomobilin Oturacaqları"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Avtomobilin oturacaqlarını tənzimləmək"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Avtomobilin əsas məlumatları"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Avtomobilin əsas məlumatlarına giriş"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Avtomobilin eksteryer işıqları"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Avtomobilin eksteryer işıqlarının vəziyyətinə giriş"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Avtomobilin eksteryer işıqları"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Avtomobilin eksteryer işıqlarını tənzimləmək"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Avtomobilin xarici temperaturu"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Avtomobilin xarici temperaturuna giriş"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Avtomobilin şinləri"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Avtomobilin şin məlumatlarına giriş"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Avtomobilin güc mexanizmi"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Avtomobilin güc mexanizmi məlumatlarına giriş"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Avtomobilin Gücü"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Avtomobilin güc vəziyyətinə giriş"</string>
+</resources>
diff --git a/service/res/values-b+sr+Latn/config.xml b/service/res/values-b+sr+Latn/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-b+sr+Latn/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-b+sr+Latn/strings.xml b/service/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 0000000..ede8513
--- /dev/null
+++ b/service/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Informacije o automobilu"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Pristupi informacijama o automobilu."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Putnički prostor"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Pristupi opremi automobila, uključujući vrata, retrovizore, sedišta i prozore."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Kamera automobila"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Pristupi kamerama automobila."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Energija automobila"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Pristupi informacijama o energiji automobila."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"Grejanje, ventilacija i klimatizacija automobila"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Pristupi grejanju, ventilaciji i klimatizaciji automobila"</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Pređeni put automobila"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Pristupi informacijama o pređenom putu automobila."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Brzina automobila"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Pristupi brzini automobila."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Status dinamike vozila"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Pristupi statusu dinamike automobila"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Kanal prodavca automobila"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Pristupi kanalu prodavca automobila radi razmene posebnih informacija u vezi sa automobilom"</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Radio automobila"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Pristupa radiju automobila."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Projekcija u automobilu"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Jačina zvuka u automobilu"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Podešavanja zvuka u automobilu"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Projektuje interfejs telefona na ekran u automobilu."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Emulacija HAL vozila"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Emulira HAL vozila za automobil u svrhe internog testiranja"</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Kontroliše jačinu zvuka u automobilu."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Kontroliše podešavanja zvuka u automobilu."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Blokiranje aplikacija"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Kontroliše blokiranje aplikacija tokom vožnje."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Menadžer navigacije"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Šalje podatke za navigaciju instrument tabli"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Direktno prikazivanje na instrument tabli"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Dozvoli da aplikacija navede aktivnosti koje će se prikazivati na instrument tabli"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Kontrola instrument table"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Pokreće aplikacije na instrument tabli"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Prikazivanje na instrument tabli"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Prima podatke sa instrument table"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"Konfiguracija ograničenja KD-a"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"Konfiguriše ograničenja KD-a"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Usluga automobilskog unosa"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Upravlja događajima unosa"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"Greška CAN magistrale"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN magistrala ne reaguje. Isključite i ponovo uključite glavnu jedinicu i ponovo pokrenite automobil"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"Ova aktivnost nije dostupna dok vozite radi vaše bezbednosti.\nDa biste nastavili, prvo se parkirajte."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"Da biste ponovo počeli sa bezbednim funkcijama aplikacije, izaberite <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Nazad"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Debug Info"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Dijagnostički podaci"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Čita dijagnostičke podatke iz automobila"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Dijagnostički podaci"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Briše dijagnostičke podatke iz automobila"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"Objavljivanje VMS podataka"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"Objavljuje vms poruke"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"Pretplati na VMS poruke"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"Prijavi na vms poruke"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Praćenje fleš memorije"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Nadgleda korišćenje fleš memorije"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Status vožnje"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Sluša promena statusa vožnje"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Detaljni podaci o automobilu"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Pristupi detaljnim podacima o motoru automobila"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Energetski portovi"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Pristupi energetskim portovima"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Identifikacija automobila"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Pristup podacima za identifikaciju automobila"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Vrata automobila"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Kontroliše vrata automobila"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Prozori automobila"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Kontroliše prozore automobila"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Retrovizori automobila"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Kontroliše retrovizore automobila"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Sedišta u automobilu"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Kontroliše sedišta u automobilu"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Osnovne informacije o automobilu"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Pristupi osnovnim podacima o automobilu"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Spoljna svetla automobila"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Pristupi statusu spoljnih svetla automobila"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Spoljna svetla automobila"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Kontroliše spoljna svetla automobila"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Spoljna temperatura automobila"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Pristupi spoljnoj temperaturi automobila"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Gume automobila"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Pristup podacima o gumama automobila"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Pogon automobila"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Pristupi podacima o pogonu automobila"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Napajanje automobila"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Pristup statusu napajanja automobila"</string>
+</resources>
diff --git a/service/res/values-be/config.xml b/service/res/values-be/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-be/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-be/strings.xml b/service/res/values-be/strings.xml
new file mode 100644
index 0000000..c2762af
--- /dev/null
+++ b/service/res/values-be/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Інфармацыя пра аўтамабіль"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Доступ да інфармацыі пра аўтамабіль."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Салон аўтамабіля"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Доступ да элементаў кузава і салона, такім як дзверы, люстэркі, сядзенні і вокны."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Камера ў аўтамабілі"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Доступ да камер аўтамабіля."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Энергарэсурсы аўтамабіля"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Доступ да інфармацыі пра энергарэсурсы аўтамабіля."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"АВіК аўтамабіля"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Доступ да сістэмы АВіК аўтамабіля."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Прабег аўтамабіля"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Доступ да інфармацыі пра прабег аўтамабіля."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Хуткасць аўтамабіля"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Доступ да інфармацыі пра хуткасць аўтамабіля."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Дынамічны стан транспартнага сродку"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Інфармацыя пра дынамічны стан аўтамабіля"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Канал пастаўшчыка аўтамабіля"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Доступ да канала пастаўшчыка аўтамабіля з мэтай абмену інфармацыяй, якая датычыцца аўтамабіля."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Радыё ў аўтамабілі"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Доступ да радыё ў аўтамабілі."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Трансляцыя на экран аўтамабіля"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Гучнасць аўдыя ў аўтамабілі"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Налады аўдыясістэмы аўтамабіля"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Праекцыя інтэрфейсу тэлефона на экран аўтамабіля."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Эмуляцыя інтэрфейсу HAL аўтамабіля"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Магчымасць эмуляваць інтэрфейс HAL для ўнутранага тэсціравання транспартнага сродку."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Рэгуляванне гучнасці аўдыясістэмы ў аўтамабілі."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Змяненне налад аўдыясістэмы аўтамабіля."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Блакіроўка праграм"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Магчымасць блакіраваць праграмы, калі вы за рулём."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Навігатар"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Паказ даных навігатара на прыборнай панэлі"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Паказ маршруту на прыборнай панэлі"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Дазволіць праграме вызначаць, якія даныя паказваць на прыборнай панэлі"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Кіраванне прыборнай панэллю"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Запуск праграмы з прыборнай панэлі"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Візуалізацыя на прыборнай панэлі"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Магчымасць атрымліваць даныя з прыборнай панэлі"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"Канфігурацыя абмежаванняў UX"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"Наладжванне абмежаванняў UX"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Сэрвіс уводу аўтамабіля"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Магчымасць апрацоўваць падзеі ўводу"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"CAN-шына парушана"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN-шына не адказвае. Перападключыце канектар, а затым выключыце запальванне і паўторна завядзіце аўтамабіль"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"Дзеля вашай бяспекі гэта дзеянне недаступнае, калі вы за рулём.\nСпачатку прыпаркуйцеся."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"Каб перазапусціць праграму ў бяспечным рэжыме, націсніце кнопку \"<xliff:g id="EXIT_BUTTON">%s</xliff:g>\"."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Назад"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Debug Info"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Даныя дыягностыкі"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Счытванне дыягнастычных даных аўтамабіля"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Даныя дыягностыкі"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Выдаленне дыягнастычных даных аўтамабіля"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"Публікацыя VMS-паведамленняў"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"Магчымасць публікаваць VMS-паведамленні"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"Падпіска на VMS-паведамленні"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"Магчымасць атрымліваць VMS-паведамленні"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Маніторынг флэш-сховішча"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Магчымасць адсочваць выкарыстанне флэш-сховішча"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Стан падчас язды"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Адсочванне змен падчас язды"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Рухавік"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Доступ да падрабязнай інфармацыі пра рухавік аўтамабіля"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Парты энергарэсурсаў"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Доступ да энергетычных партоў"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Ідэнтыфікацыя аўтамабіля"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Доступ да ідэнтыфікацыйнага нумара аўтамабіля"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Дзверы аўтамабіля"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Кантроль дзвярэй аўтамабіля"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Вокны аўтамабіля"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Кіраванне вокнамі аўтамабіля"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Люстэркі аўтамабіля"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Кіраванне люстэркамі аўтамабіля"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Сядзенні аўтамабіля"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Рэгуляванне сядзенняў аўтамабіля"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Асноўная інфармацыя пра аўтамабіль"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Доступ да асноўнай інфармацыі пра аўтамабіль"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Вонкавае асвятленне аўтамабіля"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Інфармацыя пра вонкавае асвятленне аўтамабіля"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Вонкавае асвятленне аўтамабіля"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Кіраванне знешнімі асвятляльнымі прыборамі аўтамабіля"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Тэмпература звонку аўтамабіля"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Доступ да звестак пра тэмпературу звонку аўтамабіля"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Шыны аўтамабіля"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Доступ да інфармацыі пра шыны аўтамабіля"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Трансмісія аўтамабіля"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Доступ да інфармацыі пра трансмісію аўтамабіля"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Сілкаванне аўтамабіля"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Інфармацыя пра сілкаванне аўтамабіля"</string>
+</resources>
diff --git a/service/res/values-bg/config.xml b/service/res/values-bg/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-bg/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-bg/strings.xml b/service/res/values-bg/strings.xml
new file mode 100644
index 0000000..eac0abb
--- /dev/null
+++ b/service/res/values-bg/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Информация за автомобила"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Достъп до информацията за автомобила ви."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Купе на автомобила"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Достъп до аксесоарите на автомобила ви, включително врати, огледала, седалки и прозорци."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Камера на автомобила"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Достъп до камерата или съответно камерите на автомобила ви."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Енергия на автомобила"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Достъп до информацията за енергията на автомобила."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"ОВК система на автомобила"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Достъп до ОВК системата на автомобила."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Километраж на автомобила"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Достъп до информацията за километража на автомобила ви."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Скорост на автомобила"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Достъп до данните за скоростта на автомобила ви."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Състояние на динамичните компоненти на превозното средство"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Достъп до състоянието на динамичните компоненти на автомобила"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Канал на автомобилния производител"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Достъп до канала на производителя с цел обмен на конкретна информация за автомобила ви."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Радио на автомобила"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Достъп до радиото на автомобила."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Прожектиране в автомобила"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Сила на звука на автомобилната аудиосистема"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Звукови настройки на автомобила"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Прожектиране на интерфейса на телефона на автомобилния екран."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Емулиране на HAL интерфейса на превозното средство"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Емулиране на HAL интерфейса на автомобила ви с цел вътрешно тестване."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Контролиране на силата на звука на автомобилната аудиосистема."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Контролиране на звуковите настройки на автомобила."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Блокиране на приложения"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Контролиране на блокирането на приложения при шофиране."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Навигационен мениджър"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Съобщаване на навигационни данни в арматурното табло"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Директно изобразяване в арматурното табло"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Разрешаване на приложение да декларира активности, които да се показват в арматурното табло"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Контролиране на арматурното табло"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Стартиране на приложения в арматурното табло"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Изобразяване в арматурното табло"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Получаване на данни за арматурното табло"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"Конфигуриране на ограничения за ПРП"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"Конфигуриране на ограничения за ПРП"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Автомобилна услуга за входящи данни"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Обработване на входящи събития"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"Грешка в CAN шината"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN шината не реагира. Изключете и включете отново захранването на основното устройство и рестартирайте автомобила"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"От съображения за безопасност тази функция не е достъпна при шофиране.\nЗа да продължите, трябва първо да паркирате."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"За да рестартирате приложението и безопасните му функции, изберете „<xliff:g id="EXIT_BUTTON">%s</xliff:g>“."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Назад"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Debug Info"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Диагностични данни"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Четене на диагностични данни от автомобила"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Диагностични данни"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Изчистване на диагностичните данни от автомобила"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"Публикуване на VMS"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"Публикуване на VMS съобщения"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"Абониране за VMS"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"Абониране за VMS съобщения"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Наблюдение на флаш хранилището"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Наблюдение на използването на флаш хранилището"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Състояние при шофиране"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Слушане за промени в състоянието на шофиране"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Подробни данни за двигателя"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Достъп до подробна информация за двигателя на автомобила"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Портове за зареждане"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Достъп до портовете за зареждане"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Идентификационни данни на автомобила"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Достъп до идентификационните данни на автомобила"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Врати на автомобила"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Контролиране на вратите на автомобила"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Прозорци на автомобила"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Контролиране на прозорците на автомобила"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Огледала на автомобила"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Контролиране на огледалата на автомобила"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Седалки на автомобила"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Контролиране на седалките на автомобила"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Основна информация за автомобила"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Достъп до основна информация за автомобила"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Външни светлини на автомобила"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Достъп до състоянието на външните светлини на автомобила"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Външни светлини на автомобила"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Контролиране на външните светлини на автомобила"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Външна температура на автомобила"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Достъп до данните за външната температура на автомобила"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Гуми на автомобила"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Достъп до информацията за гумите на автомобила"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Задвижваща система на автомобила"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Достъп до информацията за задвижващата система на автомобила"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Захранване на автомобила"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Достъп до състоянието на захранването на автомобила"</string>
+</resources>
diff --git a/service/res/values-bn/config.xml b/service/res/values-bn/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-bn/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-bn/strings.xml b/service/res/values-bn/strings.xml
new file mode 100644
index 0000000..f7e1cef
--- /dev/null
+++ b/service/res/values-bn/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"গাড়ির তথ্য"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"আপনার গাড়ির তথ্য অ্যাক্সেস করা।"</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"গাড়ির কেবিন"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"আপনার গাড়ির বিভিন্ন অ্যাক্সেসরি যেমন দরজা, আয়না, সিট এবং জানালা অ্যাক্সেস করা।"</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"গাড়ির ক্যামেরা"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"আপনার গাড়ির ক্যামেরা(গুলি) অ্যাক্সেস করা।"</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"গাড়ির এনার্জি"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"আপনার গাড়ির এনার্জি তথ্য অ্যাক্সেস করা।"</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"গাড়ির HVAC"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"আপনার গাড়ির HVAC অ্যাক্সেস করা।"</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"গাড়ির মাইলেজ"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"আপনার গাড়ির মাইলেজের তথ্য অ্যাক্সেস করা।"</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"গাড়ির স্পিড"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"আপনার গাড়ির স্পিড অ্যাক্সেস করা।"</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"গাড়ির ডায়নামিক অবস্থা"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"আপনার গাড়ির ডায়নামিক অবস্থা অ্যাক্সেস করা"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"গাড়ির ভেন্ডর চ্যানেল অ্যাক্সেস করা"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"গাড়ির নির্দিষ্ট তথ্য বিনিময় করতে আপনার গাড়ির ভেন্ডর চ্যানেল অ্যাক্সেস করা।"</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"গাড়ির রেডিও"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"আপনার গাড়ির রেডিও অ্যাক্সেস করা।"</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"গাড়ির প্রোজেকশন"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"গাড়ির অডিওর ভলিউম"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"গাড়ি অডিও সেটিংস"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"গাড়ির ডিসপ্লেতে ফোনের ইন্টারফেস দেখানো।"</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"গাড়ির HAL অনুকরণ করা"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"অভ্যন্তরীণ পরীক্ষার জন্য আপনার গাড়ির HAL অনুকরণ করা।"</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"আপনার গাড়ির ভলিউম নিয়ন্ত্রণ করা।"</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"আপনার গাড়ির অডিও সেটিংস নিয়ন্ত্রণ করা।"</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"অ্যাপ্লিকেশন ব্লক করা"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"ড্রাইভ করার সময় অ্যাপ্লিকেশন ব্লকিং নিয়ন্ত্রণ করা।"</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"নেভিগেশন ম্যানেজার"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"ইনস্ট্রুমেন্ট ক্লাস্টারে নেভিগেশন ডেটা রিপোর্ট করা"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"ইনস্ট্রুমেন্ট ক্লাস্টারে সরাসরি রেন্ডার করা"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"কোনও অ্যাপ্লিকেশনকে ইনস্ট্রুমেন্ট ক্লাস্টারে অ্যাক্টিভিটি দেখানোর অনুমতি দিন"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"ইনস্ট্রুমেন্ট ক্লাস্টার কন্ট্রোল"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"ইনস্ট্রুমেন্ট ক্লাস্টারে অ্যাপ চালু করা"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"ইনস্ট্রুমেন্ট ক্লাস্টার রেন্ডার করা"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"ইনস্ট্রুমেন্ট ক্লাস্টার ডেটা পান"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"UX বিধিনিষেধ কনফিগারেশন"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"UX বিধিনিষেধ কনফিগার করা"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"গাড়ির ইনপুট সার্ভিস"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"ইনপুট ইভেন্ট হ্যান্ডেল করা"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"CAN বাস কাজ করছে না"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN বাস কাজ করছে না। হেডইউনিট বক্স খুলে নিয়ে আবার লাগান ও গাড়ি রিস্টার্ট করুন"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"আপনার সুরক্ষার জন্য, ড্রাইভ করার সময় এটি করা যাবে না।\nচালিয়ে যেতে, গাড়ি পার্ক করা পর্যন্ত অপেক্ষা করুন।"</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"অ্যাপের সুরক্ষিত ফিচারগুলি নিয়ে আবার শুরু করতে, <xliff:g id="EXIT_BUTTON">%s</xliff:g> বেছে নিন।"</string>
+    <string name="exit_button" msgid="5829638404777671253">"আবার চালু করুন"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"ডিবাগ তথ্য"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"ডায়াগনস্টিক ডেটা"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"গাড়ির ডায়াগনস্টিক ডেটা পড়া"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"ডায়াগনস্টিক ডেটা"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"গাড়ি থেকে ডায়াগনস্টিক ডেটা মুছে ফেলা"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"VMS প্রকাশক"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"vms মেসেজ প্রকাশ করা"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"VMS সাবস্ক্রাইবার"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"vms মেসেজের সাবস্ক্রিপশন নিন"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"ফ্ল্যাশ স্টোরেজ মনিটর করা"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"ফ্ল্যাশ স্টোরেজের ব্যবহার মনিটর করা"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"ড্রাইভিংয়ের অবস্থা"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"ড্রাইভিংয়ের স্ট্যাটাস পরিবর্তন করার বিষয়ে শোনা"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"ইঞ্জিনের বিবরণ"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"আপনার গাড়ির ইঞ্জিনের বিবরণ অ্যাক্সেস করা"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"এনার্জি পোর্ট"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"এনার্জি পোর্ট অ্যাক্সেস করা"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"গাড়ি শনাক্তকরণ"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"গাড়ির শনাক্তকরণ অ্যাক্সেস করা"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"গাড়ির দরজা"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"গাড়ির দরজা নিয়ন্ত্রণ করা"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"গাড়ির জানালা"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"গাড়ির জানালা নিয়ন্ত্রণ করা"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"গাড়ির আয়না"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"গাড়ির আয়না নিয়ন্ত্রণ করা"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"গাড়ির সিট"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"গাড়ির সিট নিয়ন্ত্রণ করা"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"গাড়ির সাধারণ তথ্য"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"গাড়ির সাধারণ তথ্য অ্যাক্সেস করা"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"গাড়ির এক্সটিরিয়র লাইট"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"গাড়ির এক্সটিরিয়র লাইটের অবস্থা অ্যাক্সেস করা"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"গাড়ির এক্সটিরিয়র লাইট"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"গাড়ির এক্সটিরিয়র লাইট নিয়ন্ত্রণ করা"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"গাড়ির বাইরের তাপমাত্রা"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"গাড়ির বাইরের তাপমাত্রা অ্যাক্সেস করা"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"গাড়ির টায়ার"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"গাড়ির টায়ারের তথ্য অ্যাক্সেস করা"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"গাড়ির পাওয়ারট্রেন"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"গাড়ির পাওয়ারট্রেনের তথ্য অ্যাক্সেস করা"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"গাড়ির পাওয়ার"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"গাড়ির পাওয়ারের অবস্থা অ্যাক্সেস করা"</string>
+</resources>
diff --git a/service/res/values-bs/config.xml b/service/res/values-bs/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-bs/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-bs/strings.xml b/service/res/values-bs/strings.xml
new file mode 100644
index 0000000..116c959
--- /dev/null
+++ b/service/res/values-bs/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Informacije o automobilu"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Pristupiti informacijama o automobilu."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Putnički prostor"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Pristupiti perifernim uređajima automobila, uključujući vrata, retrovizore, sjedala i prozore."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Kamera automobila"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Pristupiti kameri(ama) automobila."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Energija automobila"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Pristupiti informacijama o energiji automobila."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"Grijanje, ventilacija i klimatizacija automobila"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Pristupiti grijanju, ventilaciji i klimatizaciji automobila."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Pređeni kilometri"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Pristupiti informacijama o pređenim kilometrima."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Brzina automobila"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Pristupiti informacijama o brzini automobila."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Stanje dinamike vozila"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Pristupiti stanju dinamike automobila"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Kanal trgovca automobilima"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Pristupiti kanalu trgovca automobilima radi razmjene posebnih informacija o automobilu."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Radio automobila"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Pristupiti radiju automobila."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Projekcija u automobilu"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Jačina zvuka u automobilu"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Postavke zvuka automobila"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Prikazati interfejs telefona na ekranu automobila."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Emulirati HAL vozila"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Emulirati HAL vozila u svrhu internog testiranja."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Kontrolirati jačinu zvuka u automobilu."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Kontrolirajte postavke zvuka automobila."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Blokiranje aplikacija"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Kontrolirati blokiranje aplikacija tokom vožnje."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Upravitelj navigacije"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Dostaviti podatke o navigaciji kontrolnoj tabli"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Direktno iscrtavanje na kontrolnoj ploči"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Dopustiti aplikaciji da navede aktivnosti koje će se prikazivati na kontrolnoj tabli"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Upravljanje kontrolnom tablom"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Pokrenuti aplikacije na kontrolnoj tabli"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Iscrtavanje na kontrolnoj tabli"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Primite podatke s kontrolne ploče"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"Konfiguracija ograničenja IK-a"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"Konfigurirajte ograničenja IK-a"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Usluga unosa za automobil"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Rukovati događajima unosa"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"Greška CAN busa"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN bus ne reagira. Isključite i ponovo uključite glavnu jedinicu i ponovo pokrenite automobil"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"Radi vaše sigurnosti, ova aktivnost nije dostupna tokom vožnje.\nDa nastavite, sačekajte da se zaustavite."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"Da počnete ponovo s funkcijama sigurne aplikacije, odaberite <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Nazad"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Debug Info"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Dijagnostički podaci"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Pročitati dijagnostičke podatke automobila"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Dijagnostički podaci"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Brisati dijagnostičke podatke automobila"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"VMS izdavač"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"Objaviti vms poruke"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"VMS pretplatnik"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"Pretplatiti se na vms poruke"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Nadzor flash pohrane"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Pratiti korištenje flash pohrane"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Stanje vožnje"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Slušati izmjene stanja vožnje"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Detalji o motoru"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Pristupiti detaljnim informacijama o motoru automobila"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Energetski priključci"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Pristupiti energetskim priključcima"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Identifikacija automobila"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Pristupiti identifikaciji automobila"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Vrata automobila"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Kontrolirati vrata automobila"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Prozori automobila"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Kontrolirati prozore automobila"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Retrovizori automobila"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Kontrolirati retrovizore automobila"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Sjedala automobila"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Kontrolirati sjedala automobila"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Osnovne informacije o automobilu"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Pristupiti osnovnim informacijama o automobilu"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Vanjska svjetla automobila"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Pristupiti stanju vanjskih svjetala automobila"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Vanjska svjetla automobila"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Kontrolirati vanjska svjetla automobila"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Vanjska temperatura automobila"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Pristupiti temperaturi vanjskog dijela automobila"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Gume automobila"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Pristupiti informacijama o gumama automobila"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Pogon automobila"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Pristupiti informacijama o pogonu automobila"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Napajanje automobila"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Pristupiti stanju napajanja automobila"</string>
+</resources>
diff --git a/service/res/values-ca/config.xml b/service/res/values-ca/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-ca/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-ca/strings.xml b/service/res/values-ca/strings.xml
new file mode 100644
index 0000000..bdd4345
--- /dev/null
+++ b/service/res/values-ca/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Informació del cotxe"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Accedir a la informació del cotxe"</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Cabina del cotxe"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Accedir als accessoris del cotxe, inclosos els retrovisors, les portes, els seients i les finestres"</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Càmera del cotxe"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Accedir a la càmera del cotxe"</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Energia del cotxe"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Accedir a la informació sobre l\'energia del cotxe"</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"Sistema HVAC del cotxe"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Accedir al sistema HVAC del cotxe"</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Quilometratge del cotxe"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Accedir a la informació sobre el quilometratge del cotxe"</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Velocitat del cotxe"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Accedir a la velocitat del cotxe"</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Estat de la dinàmica del vehicle"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Accedir a l\'estat de la dinàmica del cotxe"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Canal del fabricant del cotxe"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Accedir al canal del fabricant del cotxe per intercanviar informació específica del cotxe"</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Ràdio del cotxe"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Accedir a la ràdio del cotxe"</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Projecció del cotxe"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Volum d\'àudio del cotxe"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Configuració d\'àudio del cotxe"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Projectar la interfície del telèfon al monitor del cotxe"</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Emular l\'API vehicle HAL"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Emular l\'API vehicle HAL del cotxe per fer proves internes"</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Controlar el volum d\'àudio del cotxe"</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Controlar la configuració d\'àudio del cotxe"</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Bloqueig d\'aplicacions"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Controlar el bloqueig d\'aplicacions mentre condueixes"</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Gestor de navegació"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Informar de dades de navegació al quadre de comandament"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Renderització directa al quadre de comandament"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Permetre que una aplicació determini quines activitats es mostren al quadre de comandament"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Control del quadre de comandament"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Executar aplicacions al quadre de comandament"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Renderització del quadre de comandament"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Rebre dades del quadre de comandament"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"Configuració de les restriccions de l\'experiència d\'usuari"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"Configurar les restriccions de l\'experiència d\'usuari"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Servei d\'entrada del cotxe"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Gestionar els esdeveniments d\'entrada"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"Ha fallat el bus CAN"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"El bus CAN no respon. Desendolla i torna a endollar el capçal i torna a engegar el cotxe."</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"Per motius de seguretat, aquesta activitat no està disponible mentre condueixes.\nPer continuar, has d\'estar aparcat."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"Per tornar a començar amb unes funcions d\'aplicació segures, selecciona <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Enrere"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Depuració"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Dades de diagnòstic"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Llegir les dades de diagnòstic del cotxe"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Dades de diagnòstic"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Esborrar les dades de diagnòstic del cotxe"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"Editor de VMS"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"Publicar missatges VMS"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"Subscriptor de VMS"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"Subscriure\'s als missatges VMS"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Supervisió de l\'emmagatzematge flaix"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Supervisar l\'ús d\'emmagatzematge flaix"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Estat de conducció"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Escoltar els canvis en l\'estat de conducció"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Detalls del motor"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Accedir a la informació detallada sobre el motor del cotxe"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Ports d\'energia"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Accedir als ports d\'energia"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Identificació del cotxe"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Accedir a la identificació del cotxe"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Portes del cotxe"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Controlar les portes del cotxe"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Finestres del cotxe"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Controlar les finestres del cotxe"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Retrovisors del cotxe"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Controlar els retrovisors del cotxe"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Seients del cotxe"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Controlar els seients del cotxe"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Informació bàsica del cotxe"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Accedir a la informació bàsica del cotxe"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Llums exteriors del cotxe"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Accedir a l\'estat dels llums exteriors del cotxe"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Llums exteriors del cotxe"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Controlar els llums exteriors del cotxe"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Temperatura exterior del cotxe"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Accedir a la temperatura exterior del cotxe"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Rodes del cotxe"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Accedir a la informació sobre les rodes del cotxe"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Potència del cotxe"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Accedir a la informació sobre la potència del cotxe"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Potència del cotxe"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Accedir a l\'estat de la potència del cotxe"</string>
+</resources>
diff --git a/service/res/values-cs/config.xml b/service/res/values-cs/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-cs/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-cs/strings.xml b/service/res/values-cs/strings.xml
new file mode 100644
index 0000000..5317b61
--- /dev/null
+++ b/service/res/values-cs/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Informace o autě"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Přístup k informacím o autě"</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Kabina auta"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Přístup k příslušenství auta včetně dveří, zrcátek, sedadel a okének."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Kamera auta"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Přístup ke kamerám auta."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Energie auta"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Přístup k údajům o energii auta."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"Systém HVAC auta"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Přístup k systému HVAC auta."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Ujeté kilometry"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Přístup k údajům o spotřebě auta."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Rychlost auta"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Přístup k rychlosti auta."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Dynamický stav vozidla"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Přístup k dynamickému stavu auta"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Kanál dodavatele auta"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Přístup do kanálu dodavatele auta za účelem výměny informací o autě."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Autorádio"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Přístup k autorádiu."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Promítání do auta"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Hlasitost zvuku v autě"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Nastavení zvuku v autě"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Promítání rozhraní telefonu na displeji auta."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Emulace vrstvy HAL"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Emulace vrstvy HAL auta pro účely interního testování."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Ovládání hlasitosti zvuku v autě."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Ovládání nastavení zvuku v autě."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Blokování aplikací"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Ovládání blokování aplikací při řízení."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Správce navigace"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Hlášení navigačních údajů do přístrojové desky"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Přímé vykreslování do přístrojové desky"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Povolit aplikaci deklarovat aktivity, které mají být zobrazeny na přístrojové desce"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Ovládání přístrojové desky"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Spouštění aplikací na přístrojové desce"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Vykreslování na přístrojové desce"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Přijímat údaje z přístrojové desky"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"Konfigurace omezení uživatelského prostředí"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"Konfigurace omezení uživatelského prostředí"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Služba vstupu auta"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Zpracování vstupních událostí"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"Sběrnice CAN selhala"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"Sběrnice CAN neodpovídá. Odpojte a opět zapojte autorádio a znovu nastartujte auto"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"Tato aktivita není při řízení z bezpečnostních důvodů dostupná.\nPokračovat můžete, až zaparkujete."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"Chcete-li začít znovu s bezpečnými funkcemi aplikace, vyberte <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Zpět"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Debug Info"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Diagnostická data"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Čtení diagnostických dat z auta"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Diagnostická data"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Vymazání diagnostických údajů z auta"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"Vydavatel VMS"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"Publikování zpráv VMS"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"Odběratel VMS"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"Přihlášení k odběru zpráv vms"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Sledování úložiště flash"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Sledování využití úložiště flash"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Jízda autem"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Poslech změn jízdy autem"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Podrobnosti o motoru"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Přístup k podrobným údajům o motoru auta"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Energetické porty"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Přístup k energetickým portům"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Identifikace auta"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Přístup k identifikaci auta"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Dveře auta"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Ovládání dveří auta"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Okénka auta"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Ovládání okének auta"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Zrcátka auta"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Ovládání zrcátek auta"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Autosedačky"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Ovládání autosedaček"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Základní informace o autě"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Přístup k základním údajům o autě"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Venkovní světla auta"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Přístup ke stavu venkovních světel auta"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Venkovní světla auta"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Ovládání venkovních světel auta"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Venkovní teplota vozidla"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Přístup k venkovní teplotě auta"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Pneumatiky auta"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Přístup k údajům o pneumatikách auta"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Pohon auta"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Přístup k údajům o pohonu auta"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Výkon auta"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Přístup ke stavu výkonu auta"</string>
+</resources>
diff --git a/service/res/values-da/config.xml b/service/res/values-da/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-da/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-da/strings.xml b/service/res/values-da/strings.xml
new file mode 100644
index 0000000..7e61019
--- /dev/null
+++ b/service/res/values-da/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Biloplysninger"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Få adgang til oplysninger om din bil."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Bilens kabine"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Få adgang til bilens tilbehør, bl.a. døre, spejle, sæder og vinduer."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Bilkamera"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Få adgang til bilens kameraer."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Bilens energiforbrug"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Få adgang til oplysninger om bilens energiforbrug"</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"Bilens VVAC-system"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Få adgang til bilens VVAC-system."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Bilens kilometertal"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Få adgang til oplysninger om bilens kilometertal."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Bilens hastighed"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Få adgang til oplysninger om bilens hastighed."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Køretøjets tilstand Dynamik"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Få adgang til bilens tilstand Dynamik"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Bilens producentkanal"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Få adgang til bilens producentkanal for at udveksle bilspecifikke oplysninger."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Bilradio"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Få adgang til bilens radio."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Bilprojicering"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Bilens lydstyrke"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Bilens lydindstillinger"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Projicer telefonens grænseflade til bilens display."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Efterlign Vehicle HAL (Hardware Abstraction Layer)"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Efterlign bilens Vehicle HAL (Hardware Abstraction Layer) til interne testformål."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Styr lydstyrken i din bil."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Styr bilens lydindstillinger."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Appblokering"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Styr appblokering, mens du kører."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Navigationsadministrator"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Rapportér navigationsdata på instrumentbrættet"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Direkte gengivelse på instrumentbrættet"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Giv en app tilladelse til at angive aktiviteter, der skal vises på instrumentbrættet"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Styring af instrumentbrættet"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Start apps på instrumentbrættet"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Gengivelse af instrumentbrættet"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Modtag instrumentbrætdata"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"Konfiguration af UX-begrænsninger"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"Konfigurer UX-begrænsninger"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Bilens inputservice"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Håndter input"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"CAN-bus (Controller Area Network) mislykkedes"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN-bus (Controller Area Network) svarer ikke. Afbryd forbindelsen til bilens hovedenhed, tilslut den igen, og genstart bilen"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"Af hensyn til din sikkerhed kan du ikke få adgang til denne aktivitet, mens du kører.\nParkér, før du kan fortsætte."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"Vælg <xliff:g id="EXIT_BUTTON">%s</xliff:g> for at starte forfra med sikre appfunktioner."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Tilbage"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Debug Info"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Diagnosticeringsdata"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Se diagnosticeringsdata fra bilen"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Diagnosticeringsdata"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Ryd diagnosticeringsdata fra bilen"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"VMS-udgiver"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"Udgiv VMS-meddelelser"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"VMS-abonnent"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"Abonner på VMS-meddelelser"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Overvågning af Flash-lager"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Overvåg Flash-lagerforbrug"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Tilstanden Kører"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Lyt til ændringer i tilstanden Kører"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Detaljerede oplysninger om motoren"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Få adgang til detaljerede oplysninger om bilens motor"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Tankdæksel og batteriport"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Få adgang til tankdæksel og batteriport"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Bilidentifikation"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Få adgang til bilens identifikation"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Bildøre"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Styr bilens døre"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Bilvinduer"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Styr bilens vinduer"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Bilens spejle"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Styr bilens spejle"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Bilsæder"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Styr bilens sæder"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Grundlæggende oplysninger om bilen"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Få adgang til grundlæggende oplysninger om bilen"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Bilens lygter"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Få adgang til bilens lygter"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Bilens lygter"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Styr bilens lygter"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Bilens udvendige temperatur"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Få adgang til bilens udvendige temperatur"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Bildæk"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Få adgang til oplysninger om bilens dæk"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Bilens motor og transmission"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Få adgang til oplysninger om bilens motor og transmission"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Bilens batteri"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Få adgang til bilens batteritilstand"</string>
+</resources>
diff --git a/service/res/values-de/config.xml b/service/res/values-de/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-de/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-de/strings.xml b/service/res/values-de/strings.xml
new file mode 100644
index 0000000..df6a0e0
--- /dev/null
+++ b/service/res/values-de/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Fahrzeuginformationen"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Auf Fahrzeuginformationen zugreifen."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Fahrzeuginnenraum"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Auf Autozubehör zugreifen, wie Türen, Spiegel, Sitze und Fenster."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Autokamera"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Auf Autokamera(s) zugreifen."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Energieinformationen für das Auto"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Auf Energieinformationen des Autos zugreifen."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"Klimaanlage"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Auf Klimaanlage des Autos zugreifen."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Kilometerstand"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Auf Informationen zum Kilometerstand zugreifen."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Fahrzeuggeschwindigkeit"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Auf Informationen zur Fahrzeuggeschwindigkeit zugreifen."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Fahrdynamikzustand"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Auf Fahrdynamikinformationen zugreifen"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Herstellerkanal"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Zum Abrufen fahrzeugspezifischer Informationen auf den Herstellerkanal zugreifen."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Autoradio"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Auf Autoradio zugreifen."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Übertragung an Auto"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Lautstärke der Audioanlage des Autos"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Einstellungen der Auto-Audioanlage"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Smartphone-Benutzeroberfläche auf Autodisplay übertragen."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Fahrzeug-HAL emulieren"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Zu Testzwecken Vehicle HAL des Autos emulieren."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Lautstärke der Audioanlage des Autos steuern."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Audioeinstellungen des Autos steuern."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Apps blockieren"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"App-Sperre während der Fahrt steuern."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Navigationsmanager"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Navigationsdaten an Kombi-Instrument senden"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Direktes Rendering auf Kombi-Instrument"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Apps erlauben, Aktivitäten für die Anzeige auf dem Kombi-Instrument freizugeben"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Steuerung des Kombi-Instruments"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Apps im Kombi-Instrument starten"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Kombi-Instrument-Rendering"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Daten von Kombi-Instrument erhalten"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"UX-Einschränkungen konfigurieren"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"UX-Einschränkungen konfigurieren"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Eingabedienst für das Auto"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Eingabe-Ereignisse verwalten"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"CAN-Bus ausgefallen"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN-Bus reagiert nicht. Trenne die Haupteinheit vom Stromnetz, schließe sie wieder an und starte das Auto."</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"Aus Sicherheitsgründen ist diese Aktivität während der Fahrt nicht verfügbar.\nWarte, bis das Fahrzeug geparkt ist."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"Wähle <xliff:g id="EXIT_BUTTON">%s</xliff:g>, um die App mit sicheren Funktionen neu zu starten."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Zurück"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Debug Info"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Diagnosedaten"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Diagnosedaten zum Auto lesen"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Diagnosedaten"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Diagnosedaten des Fahrzeugs löschen"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"VMS-Herausgeber"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"VMS-Meldungen senden"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"VMS-Abonnent"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"VMS-Meldungen abonnieren"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Flash-Speicher-Nutzung verfolgen"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Flash-Speicher-Nutzung verfolgen"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Fahrzustand"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Informationen zu Fahrzustandsänderungen entgegennehmen"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Detaillierte Motorinformationen"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Auf detaillierte Motorinformationen zugreifen"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Tanköffnungen"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Auf Tanköffnungen zugreifen"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Fahrzeug-Identifizierungsnummer"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Auf Fahrzeug-Identifizierungsnummer zugreifen"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Autotüren"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Autotüren steuern"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Autofenster"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Autofenster steuern"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Autospiegel"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Autospiegel steuern"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Autositze"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Autositze steuern"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Grundlegende Fahrzeuginformationen"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Auf grundlegende Fahrzeuginformationen zugreifen"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Informationen zur Außenbeleuchtung"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Auf Zustand der Außenbeleuchtung zugreifen"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Außenbeleuchtung"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Außenbeleuchtung steuern"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Außentemperaturangabe des Autos"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Auf Außentemperaturangabe zugreifen"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Angaben zu den Autoreifen"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Auf Reifeninformationen zugreifen"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Antriebsstrang"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Auf Antriebsstrang-Informationen zugreifen"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Energieinformationen für das Auto"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Auf Status der Energieversorgung zugreifen"</string>
+</resources>
diff --git a/service/res/values-el/config.xml b/service/res/values-el/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-el/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-el/strings.xml b/service/res/values-el/strings.xml
new file mode 100644
index 0000000..3d4e95c
--- /dev/null
+++ b/service/res/values-el/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Πληροφορίες αυτοκινήτου"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Πρόσβαση στις πληροφορίες του αυτοκινήτου σας."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Καμπίνα αυτοκινήτου"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Πρόσβαση στα αξεσουάρ του αυτοκινήτου σας, συμπεριλαμβανομένων των θυρών, καθρεπτών, καθισμάτων και παραθύρων."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Κάμερα αυτοκινήτου"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Πρόσβαση στις κάμερες του αυτοκινήτου σας."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Ενέργεια αυτοκινήτου"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Πρόσβαση σε πληροφορίες ενέργειας του αυτοκινήτου σας."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"Σύστημα θέρμανσης, αερισμού, και κλιματισμού αυτοκινήτου"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Πρόσβαση στο σύστημα θέρμανσης, αερισμού, και κλιματισμού του αυτοκινήτου σας."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Διανυθείσα απόσταση αυτοκινήτου"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Πρόσβαση στις πληροφορίες σχετικά με τα χιλιόμετρα που διένυσε το αυτοκίνητό σας."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Ταχύτητα αυτοκινήτου"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Πρόσβαση στην ταχύτητα του αυτοκινήτου σας."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Κατάσταση δυναμικής οχήματος"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Πρόσβαση στην κατάσταση δυναμικής του αυτοκινήτου σας"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Κανάλι προμηθευτή αυτοκινήτου"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Πρόσβαση στο κανάλι προμηθευτή του αυτοκινήτου σας, για ανταλλαγή πληροφοριών σχετικά με το αυτοκίνητο."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Ραδιόφωνο αυτοκινήτου"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Πρόσβαση στο ραδιόφωνο του αυτοκινήτου σας."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Προβολή στο αυτοκίνητο"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Ένταση ήχου αυτοκινήτου"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Ρυθμίσεις ήχου αυτοκινήτου"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Προβολή διεπαφής τηλεφώνου στην οθόνη του αυτοκινήτου."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Προσομοίωση HAL οχήματος"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Προσομοίωση του HAL οχήματος του αυτοκινήτου σας για εσωτερική δοκιμή."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Έλεγχος έντασης ήχου του αυτοκινήτου σας."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Ελέγξτε τις ρυθμίσεις ήχου του αυτοκινήτου σας."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Αποκλεισμός εφαρμογών"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Έλεγχος αποκλεισμού εφαρμογών όταν οδηγείτε."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Διαχείριση πλοήγησης"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Αναφορά δεδομένων πλοήγησης στο καντράν"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Απευθείας απόδοση στο καντράν"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Να επιτρέπεται σε μια εφαρμογή η δήλωση δραστηριοτήτων για προβολή στο καντράν"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Έλεγχος καντράν"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Εκκίνηση εφαρμογών στο καντράν"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Απόδοση καντράν"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Λήψη δεδομένων καντράν"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"Διαμόρφωση περιορισμών εμπειρίας χρήστη"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"Διαμόρφωση περιορισμών εμπειρίας χρήστη"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Υπηρεσία εισόδου αυτοκινήτου"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Χειρισμός συμβάντων εισόδου"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"Αποτυχία διαύλου CAN"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"Ο δίαυλος CAN δεν αποκρίνεται. Αποσυνδέστε και συνδέστε ξανά το πλαίσιο μονάδας κεφαλής και έπειτα επανεκκινήστε το αυτοκίνητο"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"Για λόγους ασφαλείας, η δραστηρ. δεν είναι διαθέσιμη όταν οδηγείτε.\nΓια να συνεχίσετε, περιμένετε μέχρι να σταθμεύσετε."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"Για να ξεκινήσετε από την αρχή με ασφαλείς λειτουργίες εφαρμογής, επιλέξτε <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Πίσω"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Πλ. εντ. σφ."</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Δεδομένα διαγνωστικών στοιχείων"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Ανάγνωση διαγνωστικών δεδομένων από το αυτοκίνητο"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Δεδομένα διαγνωστικών στοιχείων"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Διαγραφή διαγνωστικών δεδομένων από το αυτοκίνητο"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"Εκδότης VMS"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"Δημοσίευση μηνυμάτων vms"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"Συνδρομητής VMS"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"Εγγραφή σε μηνύματα vms"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Παρακολούθηση αποθηκευτικού χώρου flash"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Παρακολούθηση χρήσης αποθηκευτικού χώρου flash"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Κατάσταση οδήγησης"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Ακρόαση αλλαγών κατάστασης οδήγησης"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Λεπτομέρειες κινητήρα"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Πρόσβαση σε λεπτομερείς πληροφορίες του κινητήρα του αυτοκινήτου σας"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Θύρες ενέργειας"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Πρόσβαση στις θύρες ενέργειας"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Στοιχεία αυτοκινήτου"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Πρόσβαση στα στοιχεία αυτοκινήτου"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Θύρες αυτοκινήτου"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Έλεγχος θυρών αυτοκινήτου"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Παράθυρα αυτοκινήτου"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Έλεγχος παραθύρων αυτοκινήτου"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Καθρέπτες αυτοκινήτου"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Έλεγχος καθρεπτών αυτοκινήτου"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Καθίσματα αυτοκινήτου"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Έλεγχος καθισμάτων αυτοκινήτου"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Βασικές πληροφορίες αυτοκινήτου"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Πρόσβαση σε βασικές πληροφορίες αυτοκινήτου"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Εξωτερικά φώτα αυτοκινήτου"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Πρόσβαση στην κατάσταση εξωτερικών φωτών"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Εξωτερικά φώτα αυτοκινήτου"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Έλεγχος εξωτερικών φωτών αυτοκινήτου"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Εξωτερική θερμοκρασία αυτοκινήτου"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Πρόσβαση στην εξωτερική θερμοκρασία αυτοκινήτου"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Ελαστικά αυτοκινήτου"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Πρόσβαση σε πληροφορίες ελαστικών αυτοκινήτου"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Μετάδοση αυτοκινήτου"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Πρόσβαση σε πληροφορίες μετάδοσης αυτοκινήτου"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Ισχύς αυτοκινήτου"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Πρόσβαση στην κατάσταση ισχύος αυτοκινήτου"</string>
+</resources>
diff --git a/service/res/values-en-rAU/config.xml b/service/res/values-en-rAU/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-en-rAU/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-en-rAU/strings.xml b/service/res/values-en-rAU/strings.xml
new file mode 100644
index 0000000..0314f14
--- /dev/null
+++ b/service/res/values-en-rAU/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Car information"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Access your car’s information."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Car cabin"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Access your car’s accessories, including doors, mirrors, seats and windows."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Car camera"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Access your car’s camera(s)."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Car energy"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Access your car’s energy information."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"Car HVAC"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Access your car’s HVAC."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Car mileage"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Access your car’s mileage information."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Car speed"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Access your car’s speed."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Vehicle dynamic\'s state"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Access your car’s dynamics state"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Car vendor channel"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Access your car’s vendor channel to exchange car-specific information."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Car radio"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Access your car’s radio."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Car projection"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Car audio volume"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Car audio settings"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Project phone interface on car display."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Emulate vehicle HAL"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Emulate your car’s vehicle HAL for internal testing purpose."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Control your car’s audio volume."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Control your car’s audio settings."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Application blocking"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Control application blocking while driving."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Navigation manager"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Report navigation data to instrument cluster"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Direct rendering to instrument cluster"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Allow an application to declare activities to be displayed in the instrument cluster"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Instrument cluster control"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Launch apps in the instrument cluster"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Instrument cluster rendering"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Receive instrument cluster data"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"UX restrictions configuration"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"Configure UX restrictions"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Car input service"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Handle input events"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"CAN bus failed"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN bus does not respond. Unplug and plug back in head unit box and restart the car"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"For your safety, this activity isn’t available while driving.\nTo continue, wait until you’ve parked."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"To start again with safe app features, select <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Back"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Debug info"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Diagnostic data"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Read diagnostic data from the car"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Diagnostic data"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Clear diagnostic data from the car"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"VMS publisher"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"Publish VMS messages"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"VMS subscriber"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"Subscribe to VMS messages"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Flash storage monitoring"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Monitor flash storage usage"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Driving state"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Listen to driving state changes"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Engine detailed"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Access your car’s detailed engine information"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Energy ports"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Access energy ports"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Car identification"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Access car’s identification"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Car doors"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Control car’s doors"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Car windows"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Control car’s windows"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Car mirrors"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Control car’s mirrors"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Car seats"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Control car’s seats"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Car basic information"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Access car basic information"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Car exterior lights"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Access car exterior lights state"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Car exterior lights"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Control car exterior lights"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Car exterior temperature"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Access car exterior temperature"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Car tyres"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Access car tyre information"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Car powertrain"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Access car powertrain information"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Car power"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Access car\'s power state"</string>
+</resources>
diff --git a/service/res/values-en-rCA/config.xml b/service/res/values-en-rCA/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-en-rCA/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-en-rCA/strings.xml b/service/res/values-en-rCA/strings.xml
new file mode 100644
index 0000000..0314f14
--- /dev/null
+++ b/service/res/values-en-rCA/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Car information"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Access your car’s information."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Car cabin"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Access your car’s accessories, including doors, mirrors, seats and windows."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Car camera"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Access your car’s camera(s)."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Car energy"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Access your car’s energy information."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"Car HVAC"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Access your car’s HVAC."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Car mileage"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Access your car’s mileage information."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Car speed"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Access your car’s speed."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Vehicle dynamic\'s state"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Access your car’s dynamics state"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Car vendor channel"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Access your car’s vendor channel to exchange car-specific information."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Car radio"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Access your car’s radio."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Car projection"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Car audio volume"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Car audio settings"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Project phone interface on car display."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Emulate vehicle HAL"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Emulate your car’s vehicle HAL for internal testing purpose."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Control your car’s audio volume."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Control your car’s audio settings."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Application blocking"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Control application blocking while driving."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Navigation manager"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Report navigation data to instrument cluster"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Direct rendering to instrument cluster"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Allow an application to declare activities to be displayed in the instrument cluster"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Instrument cluster control"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Launch apps in the instrument cluster"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Instrument cluster rendering"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Receive instrument cluster data"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"UX restrictions configuration"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"Configure UX restrictions"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Car input service"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Handle input events"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"CAN bus failed"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN bus does not respond. Unplug and plug back in head unit box and restart the car"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"For your safety, this activity isn’t available while driving.\nTo continue, wait until you’ve parked."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"To start again with safe app features, select <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Back"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Debug info"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Diagnostic data"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Read diagnostic data from the car"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Diagnostic data"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Clear diagnostic data from the car"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"VMS publisher"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"Publish VMS messages"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"VMS subscriber"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"Subscribe to VMS messages"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Flash storage monitoring"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Monitor flash storage usage"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Driving state"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Listen to driving state changes"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Engine detailed"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Access your car’s detailed engine information"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Energy ports"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Access energy ports"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Car identification"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Access car’s identification"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Car doors"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Control car’s doors"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Car windows"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Control car’s windows"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Car mirrors"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Control car’s mirrors"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Car seats"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Control car’s seats"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Car basic information"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Access car basic information"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Car exterior lights"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Access car exterior lights state"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Car exterior lights"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Control car exterior lights"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Car exterior temperature"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Access car exterior temperature"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Car tyres"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Access car tyre information"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Car powertrain"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Access car powertrain information"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Car power"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Access car\'s power state"</string>
+</resources>
diff --git a/service/res/values-en-rGB/config.xml b/service/res/values-en-rGB/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-en-rGB/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-en-rGB/strings.xml b/service/res/values-en-rGB/strings.xml
new file mode 100644
index 0000000..0314f14
--- /dev/null
+++ b/service/res/values-en-rGB/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Car information"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Access your car’s information."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Car cabin"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Access your car’s accessories, including doors, mirrors, seats and windows."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Car camera"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Access your car’s camera(s)."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Car energy"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Access your car’s energy information."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"Car HVAC"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Access your car’s HVAC."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Car mileage"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Access your car’s mileage information."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Car speed"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Access your car’s speed."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Vehicle dynamic\'s state"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Access your car’s dynamics state"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Car vendor channel"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Access your car’s vendor channel to exchange car-specific information."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Car radio"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Access your car’s radio."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Car projection"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Car audio volume"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Car audio settings"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Project phone interface on car display."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Emulate vehicle HAL"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Emulate your car’s vehicle HAL for internal testing purpose."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Control your car’s audio volume."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Control your car’s audio settings."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Application blocking"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Control application blocking while driving."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Navigation manager"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Report navigation data to instrument cluster"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Direct rendering to instrument cluster"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Allow an application to declare activities to be displayed in the instrument cluster"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Instrument cluster control"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Launch apps in the instrument cluster"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Instrument cluster rendering"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Receive instrument cluster data"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"UX restrictions configuration"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"Configure UX restrictions"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Car input service"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Handle input events"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"CAN bus failed"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN bus does not respond. Unplug and plug back in head unit box and restart the car"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"For your safety, this activity isn’t available while driving.\nTo continue, wait until you’ve parked."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"To start again with safe app features, select <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Back"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Debug info"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Diagnostic data"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Read diagnostic data from the car"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Diagnostic data"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Clear diagnostic data from the car"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"VMS publisher"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"Publish VMS messages"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"VMS subscriber"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"Subscribe to VMS messages"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Flash storage monitoring"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Monitor flash storage usage"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Driving state"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Listen to driving state changes"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Engine detailed"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Access your car’s detailed engine information"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Energy ports"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Access energy ports"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Car identification"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Access car’s identification"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Car doors"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Control car’s doors"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Car windows"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Control car’s windows"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Car mirrors"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Control car’s mirrors"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Car seats"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Control car’s seats"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Car basic information"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Access car basic information"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Car exterior lights"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Access car exterior lights state"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Car exterior lights"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Control car exterior lights"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Car exterior temperature"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Access car exterior temperature"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Car tyres"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Access car tyre information"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Car powertrain"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Access car powertrain information"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Car power"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Access car\'s power state"</string>
+</resources>
diff --git a/service/res/values-en-rIN/config.xml b/service/res/values-en-rIN/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-en-rIN/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-en-rIN/strings.xml b/service/res/values-en-rIN/strings.xml
new file mode 100644
index 0000000..0314f14
--- /dev/null
+++ b/service/res/values-en-rIN/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Car information"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Access your car’s information."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Car cabin"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Access your car’s accessories, including doors, mirrors, seats and windows."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Car camera"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Access your car’s camera(s)."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Car energy"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Access your car’s energy information."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"Car HVAC"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Access your car’s HVAC."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Car mileage"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Access your car’s mileage information."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Car speed"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Access your car’s speed."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Vehicle dynamic\'s state"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Access your car’s dynamics state"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Car vendor channel"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Access your car’s vendor channel to exchange car-specific information."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Car radio"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Access your car’s radio."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Car projection"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Car audio volume"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Car audio settings"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Project phone interface on car display."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Emulate vehicle HAL"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Emulate your car’s vehicle HAL for internal testing purpose."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Control your car’s audio volume."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Control your car’s audio settings."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Application blocking"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Control application blocking while driving."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Navigation manager"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Report navigation data to instrument cluster"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Direct rendering to instrument cluster"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Allow an application to declare activities to be displayed in the instrument cluster"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Instrument cluster control"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Launch apps in the instrument cluster"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Instrument cluster rendering"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Receive instrument cluster data"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"UX restrictions configuration"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"Configure UX restrictions"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Car input service"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Handle input events"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"CAN bus failed"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN bus does not respond. Unplug and plug back in head unit box and restart the car"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"For your safety, this activity isn’t available while driving.\nTo continue, wait until you’ve parked."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"To start again with safe app features, select <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Back"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Debug info"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Diagnostic data"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Read diagnostic data from the car"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Diagnostic data"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Clear diagnostic data from the car"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"VMS publisher"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"Publish VMS messages"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"VMS subscriber"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"Subscribe to VMS messages"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Flash storage monitoring"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Monitor flash storage usage"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Driving state"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Listen to driving state changes"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Engine detailed"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Access your car’s detailed engine information"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Energy ports"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Access energy ports"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Car identification"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Access car’s identification"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Car doors"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Control car’s doors"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Car windows"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Control car’s windows"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Car mirrors"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Control car’s mirrors"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Car seats"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Control car’s seats"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Car basic information"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Access car basic information"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Car exterior lights"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Access car exterior lights state"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Car exterior lights"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Control car exterior lights"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Car exterior temperature"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Access car exterior temperature"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Car tyres"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Access car tyre information"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Car powertrain"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Access car powertrain information"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Car power"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Access car\'s power state"</string>
+</resources>
diff --git a/service/res/values-en-rXC/config.xml b/service/res/values-en-rXC/config.xml
new file mode 100644
index 0000000..78aea3b
--- /dev/null
+++ b/service/res/values-en-rXC/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‎‏‎‎‎‏‏‎‏‏‏‏‏‎‏‎‎‏‎‏‎‎‏‎‏‎‎‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‎‏‏‏‎‎‎‎‎‎‏‎‎android.car.input.service/.DefaultInputService‎‏‎‎‏‎"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‎‏‏‏‏‎‎‏‏‎‎‏‎‎‏‎‏‎‏‎‎‏‎‏‏‏‎‎‏‏‏‎‏‎‏‏‎‎‏‏‎‎‏‎android.car.cluster.loggingrenderer/.LoggingClusterRenderingService‎‏‎‎‏‎"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‎‎‏‎‎‏‎‏‎‏‏‏‏‎‎‎‎‎‏‏‏‏‏‏‏‎‎‎‎‏‎‎‏‎‎‎‏‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‏‎‏‎‎com.android.car/com.android.car.pm.ActivityBlockingActivity‎‏‎‎‏‎"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‎‎‏‎‏‎‎‏‎‎‎‎‎‏‎‎‏‎‏‎‏‏‏‏‏‎‏‎‏‏‏‎‏‏‎‏‎‏‏‎‏‎‎‎‎‏‎‏‎‎‏‏‎‎‏‎‎com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity‎‏‎‎‏‎"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‏‏‏‎‏‎‏‏‎‏‏‏‏‎‎‏‎‎‎‎‎‏‏‎‎‏‏‎‏‏‏‏‏‎‏‏‏‏‎‎‏‏‎‎‎‎‎‏‏‏‏‏‎com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity‎‏‎‎‏‎"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‏‎‎‎‎‎‏‎‎‎‎‏‎‎‎‏‏‎‏‎‏‏‎‏‏‏‎‏‎‏‎‏‏‎‏‎‎‏‏‎‎‎‏‎‎‏‏‏‏‎‎‎‏‎‏‎com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver‎‏‎‎‏‎"</string>
+</resources>
diff --git a/service/res/values-en-rXC/strings.xml b/service/res/values-en-rXC/strings.xml
new file mode 100644
index 0000000..bb90c3e
--- /dev/null
+++ b/service/res/values-en-rXC/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‏‎‏‏‏‏‎‏‏‎‎‎‏‎‏‎‎‏‏‎‎‎‎‎‎‎‎‎‎‎‎‏‎‎‎‏‎‎‎‏‎‏‏‎‏‎‏‏‏‏‏‏‏‏‎‏‎Car information‎‏‎‎‏‎"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‎‎‎‎‎‏‎‏‎‏‎‎‎‎‏‎‏‏‏‎‎‏‎‏‏‎‏‎‏‏‏‏‎‏‎‎‎‎‏‎‎‏‎‏‏‏‎‏‏‏‎‏‎‏‎Access your car’s information.‎‏‎‎‏‎"</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‏‎‎‎‎‎‎‎‎‏‎‎‏‎‎‏‏‏‏‏‎‏‎‏‎‏‏‏‏‏‎‎‎‎‏‎‏‎‏‏‎‏‎‏‎‏‏‎‎‏‎‎‏‏‎Car Cabin‎‏‎‎‏‎"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‎‏‏‎‎‏‎‎‎‏‎‎‏‏‏‏‏‎‎‎‏‏‏‏‏‎‏‏‏‎‏‎‎‏‏‎‎‏‎‎‎‎‏‎‏‎‏‎‎‎‎‏‏‏‏‎‎Access your car’s accessories, including doors, mirrors, seats, and windows.‎‏‎‎‏‎"</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‏‏‏‎‎‏‏‎‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‎‏‎‏‏‏‏‏‎‏‏‎‏‎‏‎‏‎‎‎‏‎‎‏‏‎‎‎‎‏‏‎‎Car Camera‎‏‎‎‏‎"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‏‎‏‏‏‎‎‏‏‏‏‎‏‏‎‏‎‏‎‏‎‎‎‏‎‎‏‏‎‎‏‏‏‏‎‏‎‏‏‏‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‎Access your car’s camera(s).‎‏‎‎‏‎"</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‎‎‏‎‏‎‎‎‎‏‏‏‎‎‏‏‏‎‎‎‎‏‎‎‏‎‏‎‎‏‎‏‏‎‎‏‏‎‎‎‏‏‏‎‏‎‎‏‎‏‎‏‏‎‎‏‎Car energy‎‏‎‎‏‎"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‎‎‎‏‎‏‏‎‎‎‏‏‏‎‏‎‏‎‎‏‏‎‏‏‏‏‎‎‏‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‎‎‏‎‏‏‎‎‏‏‏‏‎Access your car’s energy information.‎‏‎‎‏‎"</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‏‎‏‏‎‏‏‎‏‎‏‎‎‏‎‏‏‏‎‏‎‎‏‎‎‏‏‎‏‏‎‎‎‎‎‏‏‎‏‎‏‏‏‎‎‏‏‏‏‏‎‏‎‎‎Car Hvac‎‏‎‎‏‎"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‎‎‎‏‏‎‎‏‏‎‏‏‎‏‎‎‎‎‎‎‎‏‎‎‎‏‏‏‎‎‏‎‏‏‎‏‏‎‎‏‏‏‏‏‎‎‏‏‎‏‏‏‎‎‏‏‎Access your car’s hvac.‎‏‎‎‏‎"</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‎‎‎‏‎‎‎‎‏‎‏‎‏‏‎‎‏‏‎‎‏‏‎‎‏‏‎‎‎‎‏‏‎‎‎‎‎‎‎‎‎‏‏‎‏‎‏‎‎‎‏‎‏‏‎Car mileage‎‏‎‎‏‎"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‏‎‎‎‏‏‏‎‎‎‏‎‏‏‏‎‎‏‎‎‏‎‏‎‏‏‏‎‏‏‎‎‎‏‎‎‎‏‏‎‎‏‏‎‎‎‎‎‎‎‎‎‏‎‎Access your car’s mileage information.‎‏‎‎‏‎"</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‎‏‏‏‎‏‎‎‎‎‏‏‏‏‎‎‏‏‎‏‏‏‎‎‎‎‎‎‏‏‏‏‎‎‏‎‏‎‎‏‎Car speed‎‏‎‎‏‎"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‎‏‏‎‏‎‏‏‏‏‎‏‎‏‎‏‎‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‎‎‎‎‎‎‏‏‏‎‎‏‎‏‏‎‎‎‏‏‎‎‎‏‎Access your car’s speed.‎‏‎‎‏‎"</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‏‎‏‏‏‏‎‏‏‎‎‏‏‏‎‏‎‎‎‏‎‏‎‎‎‏‏‏‎‎‎‏‎‏‏‎‏‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‎‎‏‎Vehicle dynamics state‎‏‎‎‏‎"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‎‏‎‏‎‎‎‏‏‎‏‏‏‎‏‎‎‏‏‏‏‏‎‏‏‎‎‏‏‏‏‎‏‏‏‎‎‎‏‏‏‏‎‎‎‎‎‏‏‏‎‎‏‎Access your car’s dynamics state‎‏‎‎‏‎"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‎‎‎‏‎‏‏‏‎‏‏‏‏‎‎‎‎‎‏‏‏‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‎‎‏‎‏‏‏‏‎‏‏‎Car vendor channel‎‏‎‎‏‎"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‎‎‏‏‏‎‏‎‎‎‎‏‏‏‎‎‏‎‏‏‏‏‎‏‎‎‎‎‎‎‏‏‎‏‎‏‎‏‏‏‎‏‎‏‎‎‎‎‏‎‏‏‎‎‏‏‎Access your car’s vendor channel to exchange car-specific information.‎‏‎‎‏‎"</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‎‏‎‏‏‎‏‏‏‎‎‏‏‎‎‎‏‏‏‎‏‏‏‎‏‏‏‏‏‏‎‎‏‏‎‏‎‎‏‏‏‏‎‎‏‏‏‏‎‏‎‎‎‎‏‎Car Radio‎‏‎‎‏‎"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‏‏‏‏‏‏‎‏‎‏‏‏‏‏‎‎‎‎‏‎‏‏‎‎‏‏‏‏‏‎‏‎‏‎‏‎‎‏‏‏‏‏‎‎‏‎‏‏‏‏‎‏‎‏‎‎‎Access your car’s radio.‎‏‎‎‏‎"</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‏‎‏‎‎‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‎‏‏‎‏‏‏‏‎‎‏‏‏‎‎‏‏‏‏‎‎‏‎‎Car Projection‎‏‎‎‏‎"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‏‎‎‏‎‏‎‎‎‎‎‏‎‎‎‎‎‎‏‎‎‏‏‎‎‎‏‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‏‏‏‎‎‎‏‎‎‏‎‎‎Car Audio Volume‎‏‎‎‏‎"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‎‏‎‏‎‏‏‎‏‏‎‎‏‎‎‎‏‏‏‎‏‎‎‏‎‎‎‏‎‏‎‎‏‎‏‎‏‏‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‎Car Audio Settings‎‏‎‎‏‎"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‎‎‏‏‎‎‎‏‎‏‎‎‎‏‏‎‏‏‎‎‏‎‏‏‏‏‎‎‏‎‏‏‎‎‎‏‎‎‏‏‏‏‎‎‏‏‏‏‏‏‏‎‎‏‏‏‎Project phone interface on car display.‎‏‎‎‏‎"</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‎‏‏‎‎‏‎‏‎‎‎‎‏‏‏‎‎‎‎‎‎‎‎‎‏‏‏‏‎‏‎‏‎‎‎‎‎‏‎‎‎‏‏‏‎‎‏‏‏‏‎‏‏‎‎Emulate vehicle HAL‎‏‎‎‏‎"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‎‏‎‏‎‎‎‏‎‎‏‎‎‏‏‎‏‎‎‎‏‎‎‏‏‏‎‏‏‏‏‎‎‏‏‎‏‏‏‎‏‏‏‎‎‏‎‎‏‎‎‎‎‏‏‎Emulate your car’s vehicle HAL for internal testing purpose.‎‏‎‎‏‎"</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‎‎‏‎‎‏‏‏‏‎‏‎‏‎‏‎‏‏‎‎‎‎‏‏‎‏‎‏‎‎‎‏‏‎‎‏‎‎‎‎‏‏‎‎‎‎‏‏‎‎‎‏‎Control your car’s audio volume.‎‏‎‎‏‎"</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‎‏‏‏‏‎‎‏‎‎‏‎‎‎‏‏‎‏‎‏‎‏‎‏‏‎‏‏‎‎‏‎‏‎‎‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‎Control your car’s audio settings.‎‏‎‎‏‎"</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‏‎‏‎‏‏‏‏‎‎‏‏‏‎‎‏‏‏‎‎‏‎‎‎‎‏‏‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‎‎‏‎‏‎‏‎‎Application blocking‎‏‎‎‏‎"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‎‎‎‎‏‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‎‎‎‏‎‎‏‏‏‎‎‎‏‎‏‎‏‎‏‏‏‎‏‏‏‎‏‏‏‏‏‏‎‎Control application blocking while driving.‎‏‎‎‏‎"</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‎‎‎‏‎‏‏‏‎‎‎‎‎‎‎‎‎‎‏‎‎‏‎‏‏‏‎‏‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎Navigation Manager‎‏‎‎‏‎"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‏‏‎‎‎‏‎‏‏‎‏‏‏‎‎‎‏‎‎‏‎‏‏‎‏‏‏‏‎‎‎‏‎‏‎‏‎‎‎‏‏‎‏‎‏‏‎‎‎‏‏‎‎‎‏‎Report navigation data to instrument cluster‎‏‎‎‏‎"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‎‎‏‏‎‎‎‎‎‏‎‎‎‎‎‏‎‎‎‏‎‏‎‎‎‏‎‎‏‏‏‏‏‎‏‏‏‎‏‎‏‏‏‏‏‎‎‏‎‏‏‏‏‎‎‎Direct rendering to instrument cluster‎‏‎‎‏‎"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‎‎‎‎‎‏‏‏‏‎‏‏‎‏‎‏‎‎‏‏‎‏‎‏‏‏‎‎‎‏‏‏‎‏‎‏‏‎‎‎‏‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎Allow an application to declare activities to be displayed in the instrument cluster‎‏‎‎‏‎"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‎‎‏‎‏‏‏‎‏‎‏‏‏‎‏‎‏‎‎‎‎‎‏‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‏‏‎‏‎‎‏‎‏‎‏‎‏‎‎Instrument cluster control‎‏‎‎‏‎"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‎‏‎‏‎‎‎‎‎‏‏‎‏‎‎‎‎‎‎‏‏‎‏‏‎‎‎‏‎‏‎‎‎‎‏‏‏‎‏‏‏‏‏‎Launch apps in the instrument cluster‎‏‎‎‏‎"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‏‎‏‎‏‏‏‏‏‎‎‎‎‎‏‎‏‎‏‎‎‏‏‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‎‎‏‎‎‏‏‏‎‎‏‎‏‎‎Instrument Cluster Rendering‎‏‎‎‏‎"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‏‏‎‏‎‎‏‎‎‎‎‏‎‎‏‎‏‏‏‏‎‎‎‏‏‏‏‏‏‏‎‏‏‎‎‏‎‏‎‏‏‎‏‏‎‎‏‏‎‏‏‏‏‏‏‎Receive instrument cluster data‎‏‎‎‏‎"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‏‏‎‎‎‏‏‎‏‏‎‎‏‏‏‏‏‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‎‏‎‏‏‎‎‏‎‎‏‎‏‏‏‏‏‏‎‏‎UX Restrictions Configuration‎‏‎‎‏‎"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‏‎‎‎‏‎‎‏‏‎‏‎‏‏‏‎‏‎‎‎‏‏‏‎‎‎‎‎‏‏‏‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‏‏‏‎‏‎‎‎‏‎Configure UX Restrictions‎‏‎‎‏‎"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‏‏‏‎‏‎‏‏‏‎‏‎‎‎‎‎‏‎‎‏‎‎‏‎‏‎‎‏‏‎‎‏‏‎‏‏‏‎‏‏‏‎‎‎‏‏‏‎‏‎‏‎‏‏‎‎Car Input Service‎‏‎‎‏‎"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‎‎‏‎‏‏‏‎‎‎‏‎‏‏‏‎‎‏‎‎‏‏‎‎‏‏‏‏‏‎‎‏‎‎‎‎‏‏‏‎‎‏‎‏‎‎‎‏‏‏‏‏‏‎‏‎‎Handle input events‎‏‎‎‏‎"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‎‏‏‎‎‏‎‎‎‎‏‎‏‎‎‏‎‎‏‎‎‏‎‏‏‎‏‏‎‎‏‏‏‎‎‏‎‏‏‎‏‎‏‎‏‎‏‎‎‎‎‎‏‎‏‎‎CAN bus failed‎‏‎‎‏‎"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‎‏‎‎‎‎‎‎‏‏‎‎‎‏‏‏‎‎‏‎‎‏‎‏‏‎‎‎‏‏‏‎‎‏‎‎‏‏‎‎‏‎‏‏‏‎‎‏‏‏‏‏‏‏‎‏‎CAN bus does not respond. Unplug and plug back headunit box and restart the car‎‏‎‎‏‎"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‎‏‎‎‎‏‏‎‎‎‎‎‎‎‎‏‏‎‎‎‏‎‎‎‏‏‎‏‎‏‏‏‎‎‏‏‏‏‎‏‏‏‏‏‎‏‏‎‏‎‏‎‎‏‎‎For your safety, this activity isn’t available while driving.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎To continue, wait until you’re parked.‎‏‎‎‏‎"</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‎‎‎‎‏‎‎‎‎‎‎‏‏‎‏‏‎‏‏‏‎‏‎‏‎‎‎‎‏‎‏‏‎‏‎‎‎‎‏‎‏‎To start over with safe app features, select ‎‏‎‎‏‏‎<xliff:g id="EXIT_BUTTON">%s</xliff:g>‎‏‎‎‏‏‏‎.‎‏‎‎‏‎"</string>
+    <string name="exit_button" msgid="5829638404777671253">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‏‏‎‎‏‏‏‎‎‎‎‏‎‎‏‎‎‏‏‏‏‏‎‎‎‎‎‏‏‎‏‏‎‏‏‏‏‏‏‎‏‏‏‏‎‏‎‎‏‎‏‎‏‎‏‎Back‎‏‎‎‏‎"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‏‎‎‎‎‏‎‏‎‏‏‏‏‎‎‏‎‏‎‎‎‎‏‎‎‎‎‏‎‎‎‏‏‏‎‎‏‎‏‏‎‎‏‎‎‎‎‏‎‏‎‎‏‎‎‎Debug Info‎‏‎‎‏‎"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‏‎‎‏‏‏‏‎‏‏‎‏‎‎‎‏‏‏‎‏‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‎‎‏‏‎‎‎‎‏‏‏‎‎Diagnostic Data‎‏‎‎‏‎"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‏‏‎‏‏‏‎‎‏‎‏‎‎‎‎‏‏‎‏‏‏‏‏‎‎‎‏‎‎‎‎‏‎‎‎‏‎‏‏‏‏‎‏‎‎‎‎‎‏‏‏‎‎‎‏‎Read diagnostic data from the car‎‏‎‎‏‎"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‎‏‏‏‎‏‏‏‎‎‎‎‎‏‎‎‎‏‏‎‎‏‏‏‎‎‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎‏‏‏‎‏‎‎‎‎‏‎Diagnostic Data‎‏‎‎‏‎"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‏‏‏‏‎‏‏‏‏‎‏‏‏‎‏‏‏‏‏‎‎‎‏‏‎‏‎‎‎‎‎‎‎‏‏‎‎‎‎‏‎‎‏‎‏‏‎‏‎‎‎‎‏‎Clear diagnostic data from the car‎‏‎‎‏‎"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‎‏‎‎‎‏‏‎‏‏‎‏‎‎‎‎‎‎‏‏‎‏‏‎‎‏‎‏‎‏‎‏‎‎‎‎‎‎‏‎‏‏‎‏‎‏‎‎‎‏‏‎‎‎‎‎VMS publisher‎‏‎‎‏‎"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‏‎‎‏‏‎‎‎‏‎‏‎‏‎‏‎‎‎‏‎‏‎‎‏‏‎‎‎‏‏‎‏‏‏‏‏‎‎‏‏‎‏‎‎‏‎‎‎‏‏‏‎‏‏‎Publish vms messages‎‏‎‎‏‎"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‏‎‎‎‏‎‎‎‎‏‏‎‎‎‏‏‏‏‏‎‎‎‎‎‏‏‎‎‏‎‏‎‎‎‏‏‏‎‎‎‎‎‏‏‎‎‎‎‎‏‎‏‎‎‏‎‎VMS subscriber‎‏‎‎‏‎"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‎‎‎‎‎‏‎‏‎‎‎‏‎‏‏‎‎‏‎‎‏‎‎‎‎‎‎‏‎‎‏‎‏‎‏‎‏‏‎‎‎‎‏‎‎‏‎‎‎‏‏‎‎‏‎‎Subscribe to vms messages‎‏‎‎‏‎"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‎‏‎‎‏‏‎‏‎‏‏‎‏‏‏‏‏‎‏‎‎‏‏‏‎‎‏‏‏‏‏‎‏‎‏‏‎‎‏‎‏‎‏‎‎‎‏‎‏‏‏‏‎‏‎‏‎Flash storage monitoring‎‏‎‎‏‎"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‏‏‎‎‏‏‏‎‎‏‏‎‏‎‎‏‎‏‎‏‎‎‎‎‎‎‏‎‎‎‎‏‎‎‏‏‎‎‏‏‎‎‎‎‏‏‎‏‎‎‎‏‎‏‏‎‎Monitor flash storage usage‎‏‎‎‏‎"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‎‏‏‏‎‏‏‏‏‏‎‎‏‎‎‎‏‎‏‏‏‎‎‏‏‏‎‏‏‎‏‏‏‏‎‎‏‎‎‎‏‎‏‎‎‏‏‎‏‏‏‏‎‎‎‎Driving State‎‏‎‎‏‎"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‏‎‏‎‏‎‎‎‏‎‎‏‏‎‏‏‏‎‏‏‏‎‎‎‏‎‎‏‎‎‎‏‎‏‎‏‎‏‏‎‏‎‏‏‎‏‏‎‎‎‎‏‎‏‎‎‎Listen to Driving state changes‎‏‎‎‏‎"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‎‎‎‏‎‏‏‎‎‏‏‎‎‏‏‏‎‏‏‏‏‎‏‎‏‏‎‏‎‎‎‎‎‏‏‏‎‎‎‎‏‏‎‎‎‎‎‎‎‎‏‎Engine Detailed‎‏‎‎‏‎"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‏‎‏‎‎‎‏‎‏‎‎‏‎‎‏‎‎‎‏‏‎‎‎‎‏‏‏‏‏‏‎‎‎‏‎‏‎‎‎‎‏‎‏‎‏‏‎‏‎‎‎‏‏‏‏‏‎Access your car’s detailed engine information‎‏‎‎‏‎"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‎‏‎‏‏‎‎‏‎‎‏‎‏‏‏‎‏‏‎‏‎‏‏‎‏‏‎‎‎‏‎‏‎‎‎‎‏‏‎‏‎‏‏‏‎‏‏‎‏‎‏‎‏‎‎‎Energy Ports‎‏‎‎‏‎"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‏‏‏‏‎‎‏‎‎‏‎‏‎‏‎‏‏‏‏‎‎‏‎‎‎‏‎‎‏‏‏‏‎‎‎‎‏‎‏‏‏‎‎‎‏‏‏‏‎‏‏‎‎‎Access energy ports‎‏‎‎‏‎"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‎‏‎‎‎‎‏‏‎‏‎‏‏‎‎‎‏‏‏‎‎‎‏‏‎‎‏‎‏‏‎‎‎‏‎‎‎‏‎‎‎‎‎Car identification‎‏‎‎‏‎"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‎‏‎‏‏‎‎‏‎‏‏‏‎‎‎‎‏‎‎‏‎‏‏‎‎‏‏‎‎‎‏‎‎‏‏‎‏‏‏‏‏‎‏‏‎‏‎‎‏‏‏‎‏‎‏‎Access car’s identification‎‏‎‎‏‎"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‎‏‎‎‎‎‏‎‏‏‎‎‏‎‎‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‎‎‎‏‏‎‏‎‎‏‎‏‎Car Doors‎‏‎‎‏‎"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‎‏‏‎‏‏‎‏‎‏‏‏‎‎‎‏‎‎‎‎‏‏‏‎‏‎‎‏‎‏‏‎‏‎‏‎‏‎‎‎‏‏‏‎‏‏‎‎‏‏‏‎‏‎‎‏‎Control car’s doors‎‏‎‎‏‎"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‎‎‏‎‏‏‏‎‎‏‏‏‏‎‎‏‎‏‎‎‏‏‏‎‏‏‏‏‏‎‎‎‏‏‏‎‏‏‎‏‎‎‏‎‏‎‏‎‎‎‎‎‏‎Car Windows‎‏‎‎‏‎"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‏‏‏‎‏‎‏‎‎‎‏‎‏‎‏‎‏‎‏‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‏‎‎‎‎‎‏‏‎‎‎‎‏‏‏‏‏‎‎Control car’s windows‎‏‎‎‏‎"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‎‎‎‏‎‎‎‏‏‎‏‎‎‎‏‏‏‎‎‏‎‏‎‏‏‎‏‏‏‏‏‏‎‎‎‎‏‎‎‎‏‏‏‎‎‏‎‎‏‏‎‎‏‎‎‎Car Mirrors‎‏‎‎‏‎"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‎‏‎‏‏‎‎‎‏‏‏‎‎‏‎‏‎‎‎‏‏‏‎‎‎‎‏‎‏‏‎‏‏‏‏‎‏‏‎‎‎‎‏‎‎‎‏‏‎‏‎‎‏‎‏‎‎‎Control car’s mirrors‎‏‎‎‏‎"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‏‎‎‎‎‎‏‏‎‏‏‎‎‎‏‏‎‎‎‎‏‎‎‏‎‎‏‏‏‏‎‎‎‏‎‎‏‎‏‏‎‎‎‎‏‏‎‏‏‎Car Seats‎‏‎‎‏‎"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‎‏‏‎‎‎‎‏‎‎‏‏‎‎‏‏‎‏‎‏‎‏‎‏‎‏‏‏‎‎‏‎‏‎‎‏‏‎‎‏‏‎‏‏‎‎‏‎‎‏‏‏‎‏‏‏‎Control car’s seats‎‏‎‎‏‎"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‏‎‎‎‎‎‎‏‎‎‏‏‏‏‎‎‏‏‏‎‎‎‏‏‎‏‎‎‎‏‎‎‏‎‎‏‏‏‏‎‎‎‎‎‎‎‎‏‎‎‏‎‏‏‏‎Car basic information‎‏‎‎‏‎"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‎‎‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‎‏‏‎‎‎‏‎‏‎‎‎‎‏‎‏‎‏‏‎‎‏‎‏‎‏‎‏‏‎‏‎‏‎‏‎‎‎‎Access car basic information‎‏‎‎‏‎"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‏‎‎‎‏‎‏‏‎‏‎‏‏‎‎‏‏‏‎‎‎‏‏‏‎‏‏‎‎‎‏‏‎‏‎‏‎‏‏‎‎‎‎‏‏‎‎‎‎‏‎‎‎‎‎‎Car exterior lights‎‏‎‎‏‎"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‎‎‎‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‎‎‎‎‏‏‎‎‏‎‎‏‎‎‎‎‏‎‎‏‎‏‏‎‏‏‏‎‏‏‏‏‏‏‎‏‎‎Access car exterior lights state‎‏‎‎‏‎"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‏‎‏‎‏‏‏‎‎‎‏‎‎‏‏‎‎‏‎‏‎‎‏‏‏‎‎‎‏‏‎‏‏‏‏‎‏‎‎‏‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎Car exterior lights‎‏‎‎‏‎"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‎‏‏‎‎‏‎‏‎‏‎‎‏‏‎‎‏‏‎‏‏‎‎‎‏‎‏‎‎‏‏‎‏‏‏‎‎‏‏‎‎‏‎‏‏‎‏‏‏‏‎‏‎‏‎‎Control car exterior lights‎‏‎‎‏‎"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‏‏‎‏‎‏‎‎‎‏‏‏‎‎‎‎‏‏‎‏‎‎‎‏‏‏‎‏‏‎‎‏‏‎‏‎‎‎‎‎‏‏‎‏‎‏‏‏‎‏‏‎‏‏‎Car exterior temperature‎‏‎‎‏‎"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‏‎‎‎‏‎‏‎‎‏‏‎‏‏‏‏‎‎‎‏‏‎‎‏‎‏‏‏‎‏‏‎‏‏‏‎‎‏‏‎‏‏‎‏‎‏‏‏‎‏‎‏‏‏‎Access car exterior temperature‎‏‎‎‏‎"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‎‎‎‏‎‏‎‏‏‎‏‎‏‎‏‏‏‏‏‎‏‏‏‏‎‎‎‏‎‎‏‎‏‎‏‎‏‎‏‎‎‎‎‎‎‎‎‏‎‎‏‎‏‏‎Car tires‎‏‎‎‏‎"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‎‎‎‏‎‏‎‎‏‏‏‎‏‏‎‏‎‏‏‎‎‎‏‎‏‏‎‎‎‏‎‏‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‎‎‏‏‏‏‎‎‎Access car tire information‎‏‎‎‏‎"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‏‎‏‎‏‎‏‎‎‏‏‏‎‏‏‎‏‏‏‎‎‏‏‏‏‎‏‏‏‏‎‏‏‎‏‎‎‏‏‏‎‏‎‎‏‎‎‎‎‏‏‎‎‎‎Car Powertrain‎‏‎‎‏‎"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‏‏‏‏‏‎‏‎‎‏‏‏‏‏‏‎‎‎‎‎‎‎‏‎‎‎‎‎‏‎‎‏‏‎‎‎‎‎‎‎Access car powertrain information‎‏‎‎‏‎"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‏‏‏‏‎‎‏‎‏‎‏‎‎‎‎‏‏‏‏‏‏‎‎‎‎‏‏‎‎‎‎‏‎‏‎‎‎‏‏‎‏‏‏‎‎‎‎‏‏‏‏‎‏‎‎‏‎Car Power‎‏‎‎‏‎"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‏‏‎‏‎‎‏‏‏‏‎‎‎‏‎‎‏‏‏‎‏‎‏‎‎‏‎‏‎‎‏‏‏‎‏‎‎‏‏‏‎‎‎‎‏‎‎‎‎‏‏‎Access car power state‎‏‎‎‏‎"</string>
+</resources>
diff --git a/service/res/values-es-rUS/config.xml b/service/res/values-es-rUS/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-es-rUS/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-es-rUS/strings.xml b/service/res/values-es-rUS/strings.xml
new file mode 100644
index 0000000..066376a
--- /dev/null
+++ b/service/res/values-es-rUS/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Información del auto"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Acceder a la información del auto"</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Cabina del auto"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Acceder a los accesorios del auto, incluidas las puertas, espejos, asientos y ventanillas"</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Cámara del auto"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Acceder a las cámaras del auto"</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Batería del auto"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Acceder a la información de energía del auto"</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"Sistema HVAC del auto"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Acceder al sistema HVAC del auto."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Kilometraje del auto"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Acceder a la información de kilometraje del auto"</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Velocidad del auto"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Acceder a la velocidad del auto"</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Estado de dinámicas del vehículo"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Acceder al estado de dinámicas del auto"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Canal del fabricante del auto"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Acceder al canal del fabricante del auto para intercambiar información específica"</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Radio del auto"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Acceder a la radio del auto"</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Proyección del auto"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Volumen del audio del auto"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Configuración del audio del auto"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Proyectar la interfaz del teléfono en la pantalla del auto"</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Emular API de vehicle HAL"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Emular API de vehicle HAL del auto para realizar pruebas internas"</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Controlar el volumen del audio del auto"</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Controlar la configuración de audio del auto"</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Bloqueo de aplicaciones"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Controlar el bloqueo de aplicaciones al conducir"</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Administrador de navegación"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Informar los datos de navegación al clúster de instrumentos"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Procesamiento directo de clúster de instrumentos"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Permitir que una aplicación declare las actividades que se mostrarán en el clúster de instrumentos"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Control del clúster de instrumentos"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Iniciar apps en el clúster de instrumentos"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Procesamiento de clúster de instrumentos"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Recibir datos del clúster de instrumentos"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"Configuración de restricciones de UX"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"Configurar restricciones de UX"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Servicio de entrada del auto"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Controlar eventos de entrada"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"Error de bus CAN"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN bus no responde. Desconecta y vuelve a conectar la caja de la unidad central y enciende nuevamente el auto"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"Por razones de seguridad, esta actividad no está disponible al conducir.\nPara continuar espera hasta que estaciones."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"Para volver a comenzar con funciones de app seguras, selecciona <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Atrás"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Depuración"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Datos de diagnóstico"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Leer datos de diagnóstico del auto"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Datos de diagnóstico"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Borrar datos de diagnóstico del auto"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"Publicador de VMS"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"Publicar mensajes VMS"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"Suscriptor de VMS"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"Suscribirse a mensajes VMS"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Supervisión del almacenamiento flash"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Controlar el uso del almacenamiento flash"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Estado de la conducción"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Escuchar los cambios de estado de la conducción"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Detalles del motor"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Acceder a la información detallada del motor del auto"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Puertos de carga de batería"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Acceder a los puertos de carga de batería"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Identificación del auto"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Acceder a la identificación del auto"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Puertas del auto"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Controlar las puertas del auto"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Ventanillas del auto"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Controlar las ventanillas del auto"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Espejos del auto"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Controlar los espejos del auto"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Asientos del auto"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Controlar asientos del auto"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Información básica del auto"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Acceder a la información básica del auto"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Luces exteriores del auto"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Acceder al estado de las luces exteriores del auto"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Luces exteriores del auto"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Controlar las luces exteriores del auto"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Temperatura exterior del auto"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Acceder a la temperatura exterior del auto"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Neumáticos del auto"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Acceder a la información de los neumáticos del auto"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Sistema de transmisión del auto"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Acceder a la información del sistema de transmisión del auto"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Energía del auto"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Acceder al estado de energía del auto"</string>
+</resources>
diff --git a/service/res/values-es/config.xml b/service/res/values-es/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-es/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-es/strings.xml b/service/res/values-es/strings.xml
new file mode 100644
index 0000000..2e3141a
--- /dev/null
+++ b/service/res/values-es/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Información sobre el coche"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Acceder a la información del coche."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Cabina del coche"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Acceder a los accesorios del coche, como puertas, espejos, asientos y ventanillas."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Cámara del coche"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Acceder a las cámaras del coche."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Energía del coche"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Acceder a la información sobre el nivel de energía del coche."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"CVAA"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Acceder al sistema de CVAA del coche."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Kilometraje del coche"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Accede a la información del kilometraje de tu coche."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Velocidad del coche"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Acceder a la velocidad del coche."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Estado de dinámicas del vehículo"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Acceder al estado de dinámicas del coche"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Canal del fabricante del coche"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Acceder al canal de fabricante para intercambiar información específica del coche."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Radio del coche"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Acceder a la radio del coche."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Proyección del coche"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Volumen del audio del coche"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Ajustes del audio del coche"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Proyectar interfaz del teléfono en la pantalla del coche."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Emular HAL del vehículo"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Emular HAL del vehículo para realizar pruebas internas."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Controlar el volumen del audio del coche."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Controlar los ajustes de audio del coche."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Bloqueo de aplicaciones"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Controlar el bloqueo de aplicaciones mientras conduces."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Administrador de navegación"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Mostrar datos de navegación en el panel de instrumentos"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Representación directa de datos en el panel de instrumentos"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Permitir que una aplicación determine las actividades que se pueden mostrar en el panel de instrumentos"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Control de panel de instrumentos"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Iniciar aplicaciones en el panel de instrumentos"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Representación de datos en el panel de instrumentos"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Recibir datos del panel de instrumentos"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"Configuración de restricciones de la experiencia de usuario"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"Configurar restricciones de la experiencia de usuario"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Servicio de entrada del coche"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Gestionar eventos de entrada"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"Fallo de bus CAN"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"El bus CAN no responde. Desconecta el cabezal, conéctalo de nuevo y reinicia el coche"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"Por tu seguridad, esta actividad no está disponible mientras conduces.\nPuedes continuar cuando hayas aparcado."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"Para volver a empezar con funciones de aplicaciones seguras, selecciona <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Atrás"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Depuración"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Datos de diagnóstico"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Leer datos de diagnóstico del coche"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Datos de diagnóstico"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Borrar datos de diagnóstico del coche"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"Publicar VMS"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"Publicar mensajes VMS"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"Suscriptor de VMS"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"Suscribirse a mensajes VMS"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Supervisión de almacenamiento flash"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Supervisar uso del almacenamiento flash"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Estado de conducción"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Escuchar cambios en el estado de conducción"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Información detallada del motor"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Acceder a información detallada sobre el motor del coche"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Puertos de energía"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Acceder a los puertos de energía"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Identificación del coche"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Acceder a la identificación del coche"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Puertas del coche"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Controlar las puertas del coche"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Ventanillas del coche"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Controlar las ventanillas del coche"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Espejos del coche"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Controlar los espejos del coche"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Asientos del coche"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Controlar asientos del coche"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Información básica del coche"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Acceder a la información básica del coche"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Luces exteriores del coche"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Acceder al estado de las luces exteriores del coche"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Luces exteriores del coche"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Controlar las luces exteriores del coche"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Temperatura exterior del coche"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Acceder a la temperatura exterior del coche"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Neumáticos del coche"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Acceder a información sobre los neumáticos del coche"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Potencia del coche"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Acceder a información sobre la potencia del coche"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Potencia del coche"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Acceder al estado de la potencia del coche"</string>
+</resources>
diff --git a/service/res/values-et/config.xml b/service/res/values-et/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-et/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-et/strings.xml b/service/res/values-et/strings.xml
new file mode 100644
index 0000000..47800e1
--- /dev/null
+++ b/service/res/values-et/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Auto teave"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Juurdepääs auto andmetele."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Auto salong"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Juurdepääs auto osadele (nagu uksed, peeglid, istmed ja aknad)."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Auto kaamera"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Juurdepääs auto kaameratele."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Auto energia"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Juurdepääs auto energiateabele."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"Auto kliimatehnika"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Juurdepääs auto kliimatehnikale."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Auto läbisõit"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Juurdepääs auto läbisõidu andmetele."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Auto kiirus"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Juurdepääs auto kiirusele."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Sõiduki dünaamiline olek"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Juurdepääs auto dünaamilisele olekule"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Auto edasimüüja kanal"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Juurdepääs auto edasimüüja kanalile, et autopõhist teavet vahetada."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Auto raadio"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Juurdepääs auto raadiole."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Auto projektsioon"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Auto helitugevus"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Auto heliseaded"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Telefoniliidese kuvamine auto ekraanil."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Sõiduki HAL-i jäljendamine"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Jälgige sisemise testimise eesmärgil oma auto sõiduki HAL-i."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Auto helitugevuse kontrollimine."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Auto heliseadete kontrollimine"</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Rakenduste blokeerimine"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Rakenduste blokeerimise kontrollimine sõidu ajal."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Navigeerimishaldur"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Näidikulauale navigeerimisandmete edastamine"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Otsene renderdamine näidikulauale"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Lubage rakendusel valida toimingud, mis kuvatakse näidikulaual"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Näidikulaua kontrollimine"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Kuva rakendusi näidikulaual"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Näidikulaua renderdamine"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Näidikulaua teabe saamine"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"Kasutuskogemuse piirangute seadistus"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"Kasutuskogemuse piirangute seadistamine"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Auto sisendteenus"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Sisestussündmuste töötlemine"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"CAN-siin ebaõnnestus"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN-siin ei reageeri. Eemaldage autoraadio üksus ja pange see tagasi ning taaskäivitage auto"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"Teie turvalisuse tõttu ei ole see toiming sõitmise ajal saadaval.\nJätkamiseks oodake, kuni olete parkinud."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"Uuesti alustamiseks turvaliste rakenduste funktsioonidega valige <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Tagasi"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Sil.-teave"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Diagnostikaandmed"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Auto diagnostikaandmete lugemine"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Diagnostikaandmed"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Auto diagnostikaandmete kustutamine"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"VMS-avaldaja"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"VMS-sõnumite avaldamine"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"VMS-tellija"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"VMS-sõnumite tellimine"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Välkmälu jälgimine"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Välkmälu kasutuse jälgimine"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Sõitmise olek"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Sõitmise oleku muudatuste kuulamine"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Mootor, üksikasjalik"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Juurdepääs auto üksikasjalikule mootoriteabele"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Energiapordid"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Juurdepääs energiaportidele"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Auto tuvastamine"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Juurdepääs auto tuvastamisteabele"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Autouksed"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Autouste kontrollimine"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Autoaknad"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Autoakende kontrollimine"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Autopeeglid"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Autopeeglite kontrollimine"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Autoistmed"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Autoistmete kontrollimine"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Auto põhiteave"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Juurdepääs auto põhiteabele"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Auto välistuled"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Juurdepääs auto välistulede olekule"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Auto välistuled"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Auto välistulede kontrollimine"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Auto välistemperatuur"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Juurdepääs auto välistemperatuurile"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Autorehvid"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Juurdepääs auto rehviteabele"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Auto jõuülekanne"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Juurdepääs auto jõuülekande teabele"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Auto toide"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Juurdepääs auto toiteolekule"</string>
+</resources>
diff --git a/service/res/values-eu/config.xml b/service/res/values-eu/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-eu/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-eu/strings.xml b/service/res/values-eu/strings.xml
new file mode 100644
index 0000000..2a757b7
--- /dev/null
+++ b/service/res/values-eu/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Autoari buruzko informazioa"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Atzitu autoari buruzko informazioa."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Autoaren kabina"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Atzitu autoaren osagarriak; besteak beste, ateak, ispiluak, eserlekuak eta leihoak."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Autoaren kamera"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Atzitu autoaren kamerak."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Autoaren energia"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Atzitu autoaren energiari buruzko informazioa"</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"Autoaren berogailua, haizagailua eta aire-girogailua."</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Atzitu autoaren berogailua, haizagailua eta aire-girogailua."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Autoaren kilometro kopurua"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Atzitu autoaren kilometro kopuruari buruzko informazioa."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Autoaren abiadura"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Atzitu autoaren abiadura."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Ibilgailuaren egoera dinamikoa"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Atzitu autoaren egoera dinamikoa"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Auto-saltzailearen kanala"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Atzitu auto-saltzailearen kanala autoari buruzko informazio zehatza trukatzeko."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Autoaren irratia"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Atzitu autoaren irratia."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Autoaren proiekzioa"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Autoaren audioaren bolumena"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Autoaren audio-ezarpenak"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Proiektatu telefonoaren interfazea autoaren pantailan."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Emulatu autoaren hardware-abstrakzioaren geruza (HAL)"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Emulatu autoaren hardware-abstrakzioaren geruza (HAL) barneko probak egiteko."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Kontrolatu autoaren audioaren bolumena."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Kontrolatu autoaren audio-ezarpenak."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Aplikazioak blokeatzea"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Kontrolatu gidatu bitartean blokeatzen diren aplikazioak."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Nabigazio-kudeatzailea"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Jakinarazi nabigazio-datuak instrumentu lukuari"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Zuzeneko errendatzea instrumentu lukuan"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Baimendu aplikazioari instrumentu lukuan bistaratu beharreko jarduerak erabakitzea"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Instrumentu lukua kontrolatzeko aukera"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Abiarazi aplikazioak instrumentu lukuan"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Instrumentu lukuaren errendatzea"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Jaso instrumentu lukuaren datuak"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"Erabiltzaileen esperientziaren murriztapenen konfigurazioa"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"Konfiguratu erabiltzaileen esperientziaren murriztapenak"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Autoaren sarrerako zerbitzua"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Kudeatu sarrerako gertaerak"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"CAN autobusak huts egin du"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN bus-ak ez du erantzuten. Desentxufatu eta entxufatu berriro gailu nagusia eta berrabiarazi autoa."</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"Zure segurtasuna bermatzeko, eginbide hau ezin da erabili gidatu bitartean.\nAurrera egiteko, itxaron autoa aparkatu arte."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"Berriro hasi nahi baduzu aplikazioaren eginbide seguruekin, hautatu <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Atzera"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Debug Info"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Datu diagnostikoak"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Irakurri autoaren datu diagnostikoak"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Datu diagnostikoak"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Garbitu autoaren datu diagnostikoak"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"VMS argitaratzailea"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"Argitaratu VMS mezuak"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"VMS harpideduna"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"Harpidetu VMS mezuetara"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Flash-memoria gainbegiratzea"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Gainbegiratu flash-memoriaren erabilera"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Gidatze-egoera"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Entzun gidatze-egoeraren inguruko aldaketak"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Motorrari buruzko xehetasunak"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Atzitu autoaren motorrari buruzko informazio xehatua"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Energia-atakak"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Atzitu energia-atakak"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Autoaren identifikazioa"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Atzitu autoaren identifikazioa"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Autoaren ateak"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Kontrolatu autoaren ateak"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Autoaren leihoak"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Kontrolatu autoaren leihoak"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Autoaren ispiluak"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Kontrolatu autoaren ispiluak"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Autoaren eserlekuak"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Kontrolatu autoaren eserlekuak"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Autoari buruzko oinarrizko informazioa"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Atzitu autoari buruzko oinarrizko informazioa"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Autoaren kanpoaldeko argiak"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Atzitu autoaren kanpoaldeko argien egoera"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Autoaren kanpoaldeko argiak"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Kontrolatu autoaren kanpoaldeko argiak"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Autoaren kanpoaldeko tenperatura"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Atzitu autoaren kanpoaldeko tenperatura"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Pneumatikoak"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Atzitu autoaren pneumatikoei buruzko informazioa"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Atzitu autoaren transmisio-sistema"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Atzitu autoaren transmisio-sistemari buruzko oinarrizko informazioa"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Autoaren energia"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Atzitu autoaren energia-egoera"</string>
+</resources>
diff --git a/service/res/values-fa/config.xml b/service/res/values-fa/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-fa/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-fa/strings.xml b/service/res/values-fa/strings.xml
new file mode 100644
index 0000000..500f049
--- /dev/null
+++ b/service/res/values-fa/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"اطلاعات خودرو"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"دسترسی به اطلاعات خودرو"</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"اتاقک خودرو"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"دسترسی به لوازم جانبی خودرو، ازجمله درها، آینه‌ها، صندلی‌ها و پنجره‌ها."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"دوربین خودرو"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"دسترسی به دوربین(های) خودرو."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"انرژی خودرو"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"دسترسی اطلاعات انرژی خودرو."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"اچ‌وی‌ای‌سی خودرو"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"دسترسی به اچ‌وی‌ای‌سی خودرو."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"مسافت طی‌شده خودرو"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"دسترسی به اطلاعات مسافت پیموده‌شده خودرو."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"سرعت خودکار"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"دسترسی به سرعت خودرو."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"حالت پویای خودرو"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"دسترسی به حالت پویای خودرو"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"کانال فروشنده خودرو"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"دسترسی به کانال فروشنده خودروی شما برای تبادل اطلاعات خاص خودرو."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"رادیو خودرو"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"دسترسی به رادیو خودرو."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"طرح سه‌بعدی خودرو"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"میزان صدای خودرو"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"تنظیمات صدای خودرو"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"نمایش واسط تلفن روی نمایشگر خودرو."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"شبیه‌سازی HAL خودرو"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"شبیه‌سازی HAL خودرو برای هدف آزمایش داخلی."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"کنترل میزان صدای خودرو"</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"کنترل تنظیمات صدای خودرو."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"انسداد برنامه"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"کنترل انسداد برنامه درحین رانندگی."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"مدیر ناوبری"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"گزارش داده‌های ناوبری به داشبورد"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"پرداز مستقیم در داشبورد"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"اجازه به برنامه برای اعلام فعالیت‌هایی که باید در داشبورد نمایش داده شوند"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"کنترل داشبورد"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"راه‌اندازی برنامه‌ها در داشبورد"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"پرداز داشبورد"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"دریافت داده‌های داشبورد"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"پیکربندی محدودیت‌های UX"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"پیکربندی محدودیت‌های UX"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"سرویس ورودی خودرو"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"مدیریت رویدادهای ورودی"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"گذرگاه CAN ناموفق بود"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"گذرگاه CAN پاسخ نمی‌دهد. محفظه ضبط‌وپخش را جدا و سپس وصل کنید و خودرو را دوباره روشن کنید"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"بنا به دلایل ایمنی، این فعالیت درحین رانندگی دردسترس نیست.\n برای ادامه، تا زمان توقف خودرو صبر کنید."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"برای شروع مجدد با ویژگی‌های برنامه امن، <xliff:g id="EXIT_BUTTON">%s</xliff:g> را انتخاب کنید."</string>
+    <string name="exit_button" msgid="5829638404777671253">"برگشت"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"اطلاعات اشکال‌زدایی"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"داده‌های عیب‌یابی"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"خواندن داده‌های عیب‌یابی خودرو"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"داده‌های عیب‌یابی"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"پاک کردن داده‌های عیب‌یابی خودرو"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"ناشر VMS"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"انتشار پیام‌های vms"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"مشترک VMS"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"مشترک شدن در پیام‌های vms"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"پایش فضای ذخیره‌سازی فلاش"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"پایش مصرف فضای ذخیره‌سازی فلاش"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"حالت رانندگی"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"گوش دادن تغییرات حالت رانندگی"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"اطلاعات کامل موتور"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"دسترسی به اطلاعات کامل موتور خودرو"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"درگاه‌های انرژی"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"دسترسی به درگاه‌های انرژی"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"شناسه خودرو"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"دسترسی به شناسه خودرو"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"درب‌های خودرو"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"کنترل درهای خودرو"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"پنجره‌های خودرو"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"کنترل پنجره‌های خودرو"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"آینه‌های خودرو"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"کنترل آینه‌های خودرو"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"صندلی‌های کودک"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"کنترل صندلی‌های کودک"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"اطلاعات اصلی خودرو"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"دسترسی به اطلاعات اصلی خودرو"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"چراغ‌های خارجی خودرو"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"دسترسی به حالت چراغ‌های خارجی خودرو"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"چراغ‌های خارجی خودرو"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"کنترل چراغ‌های خارج خودرو"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"دمای خارجی خودرو"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"دسترسی به دمای خارجی خودرو"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"تایرهای خودرو"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"دسترسی به اطلاعات تایر خودرو"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"انتقال نیروی خودرو"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"دسترسی به اطلاعات انتقال قدرت خودرو"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"برق خودرو"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"دسترسی به حالت برق خودرو"</string>
+</resources>
diff --git a/service/res/values-fi/config.xml b/service/res/values-fi/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-fi/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-fi/strings.xml b/service/res/values-fi/strings.xml
new file mode 100644
index 0000000..7389553
--- /dev/null
+++ b/service/res/values-fi/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Auton tiedot"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"nähdä auton tiedot"</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Auton sisätilat"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"käyttää auton lisälaitteita, kuten ovia, peilejä, istuimia ja ikkunoita"</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Auton kamera"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"käyttää auton kameroita"</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Auton energiatiedot"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"nähdä auton energiatiedot"</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"Auton lämmitys-, ilmanvaihto- ja ilmastointijärjestelmä"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"käyttää auton lämmitys-,ilmanvaihto- ja ilmastointijärjestelmää"</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Matkamittarilukema"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"nähdä auton matkamittarilukeman"</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Auton nopeus"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"tarkistaa auton nopeuden"</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Ajoneuvon dynamiikan tila"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"nähdä auton dynamiikan tilan"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Auton myyjän kanava"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"tarkistaa auton myyjän kanavalta autokohtaisia tietoja"</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Autoradio"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"käyttää autoradiota"</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Auton suoratoisto"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Auton äänenvoimakkuus"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Auton ääniasetukset"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"suoratoistaa puhelimen käyttöliittymän auton näytölle"</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"jäljitellä auton ajoneuvo-HAL:ää"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"jäljitellä auton ajoneuvo-HAL:ää sisäistä testausta varten"</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"säätää auton äänenvoimakkuutta"</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"ohjata auton ääniasetuksia"</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Sovellusten esto"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"ohjata sovellusten estoa ajon aikana"</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Navigoinnin määritys"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"raportoida navigointidataa instrumenttijoukolle"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Suora renderöinti instrumenttijoukkoon"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Salli sovelluksen ilmoittaa instrumenttijoukossa näytettävistä toiminnoista"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Instrumenttijoukon hallinta"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"käynnistää sovelluksia instrumenttijoukossa"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Instrumenttijoukon renderöinti"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"vastaanottaa instrumenttijoukkojen dataa"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"UX-rajoitusten määritys"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"Määritä UX-rajoitukset"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Auton syötepalvelu"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"käsitellä syötteitä"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"CAN-väylä hylättiin"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN-väylä ei vastaa. Irrota pääyksikkö ja liitä se takaisin. Käynnistä auto sitten uudelleen."</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"Turvallisuussyistä toiminto ei ole käytettävissä ajon aikana.\nVoit jatkaa, kun olet pysäköinyt auton."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"Jos haluat aloittaa alusta turvallisilla sovellusominaisuuksilla, valitse <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Takaisin"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Debug Info"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Diagnostiikkadata"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"lukea auton diagnostiikkadataa"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Diagnostiikkadata"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"tyhjentää auton diagnostiikkadatan"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"VMS-julkaisija"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"julkaista vms-viestejä"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"VMS-tilaaja"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"tilata vms-viestejä"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"seurata flash-tallennustilaa"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"valvoa flash-tallennustilan käyttöä"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Ajotila"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"kuunnella ajotilan muutoksia"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Moottorin tarkat tiedot"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"nähdä yksityiskohtaisia tietoja auton moottorista"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Virtaportit"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"käyttää virtaportteja"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Auton tunnistetiedot"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"nähdä auton tunnistetiedot"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Auton ovet"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"ohjata auton ovia"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Auton ikkunat"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"ohjata auton ikkunoita."</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Auton peilit"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"ohjata auton peilejä"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Auton istuimet"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"ohjata auton istuimia"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Auton perustiedot"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"nähdä auton perustiedot"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Auton ulkovalot"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"ohjata auton ulkovalojen tilaa"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Auton ulkovalot"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"ohjata auton ulkovaloja"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Auton ulkolämpötila"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"nähdä auton ulkolämpötilan"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Auton renkaat"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"nähdä auton renkaiden tiedot"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Auton voimansiirtolaite"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"nähdä auton voimansiirtolaitteen tiedot"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Auton virta"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"nähdä auton virran tilan"</string>
+</resources>
diff --git a/service/res/values-fr-rCA/config.xml b/service/res/values-fr-rCA/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-fr-rCA/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-fr-rCA/strings.xml b/service/res/values-fr-rCA/strings.xml
new file mode 100644
index 0000000..5e91500
--- /dev/null
+++ b/service/res/values-fr-rCA/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Renseignements sur la voiture"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Accéder aux renseignements relatifs à la voiture."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Habitacle de la voiture"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Accéder aux accessoires de la voiture, y compris les portières, les rétroviseurs, les sièges et les vitres."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Caméra de la voiture"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Accéder aux caméras de la voiture."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Énergie de la voiture"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Accéder aux renseignements énergétiques de la voiture."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"Élément CVC de la voiture"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Accéder à l\'élément CVC de la voiture."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Kilométrage de la voiture"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Accéder au kilométrage de la voiture."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Vitesse de la voiture"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Accéder à la vitesse de la voiture."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"État des éléments dynamiques de la voiture"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Accéder à l\'état de la dynamique de la voiture"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Chaîne du fournisseur de la voiture"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Accéder à la chaîne du fournisseur de la voiture afin d\'échanger de l\'information propre à cette dernière."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Radio de la voiture"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Accéder à la radio de la voiture."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Projection de la voiture"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Volume audio de la voiture"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Paramètres audio de la voiture"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Projeter l\'interface du téléphone sur l\'écran de la voiture."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Émuler le système HAL du véhicule"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Émuler le système HAL de la voiture à des fins de test interne."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Contrôlez le volume audio de la voiture."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Contrôler les paramètres audio de la voiture."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Blocage d\'applications"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Contrôler le blocage des applications pendant la conduite."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Gestionnaire de navigation"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Transmettre les données de navigation au groupe d\'instruments"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Diriger le rendu vers le groupe d\'instruments"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Autoriser une application à déclarer des activités à afficher dans le groupe d\'instruments"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Contrôle du groupe d\'instruments"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Lancer les applications dans le groupe d\'instruments"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Rendu du groupe d\'instruments"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Recevoir les données du groupe d\'instruments"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"Configuration des restrictions relatives à l\'expérience utilisateur"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"Configurer les restrictions relatives à l\'expérience utilisateur"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Service d\'entrée de la voiture"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Gérer les événements d\'entrée"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"Défaillance du bus de données CAN"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"Le bus de données CAN ne répond pas. Débranchez et rebranchez le boîtier de l\'unité centrale, puis redémarrez la voiture"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"Pour votre sécurité, cette activité est bloquée lorsque vous conduisez.\nVous devez être stationné pour continuer."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"Pour recommencer avec des fonctionnalités d\'application sécurisées, sélectionnez <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Retour"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Info débog"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Données de diagnostic"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Lire les données de diagnostic à partir de la voiture"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Données de diagnostic"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Effacer les données de diagnostic de la voiture"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"Éditeur de messages de signalisation dynamique"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"Publier les messages de signalisation dynamique"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"Abonné aux messages de signalisation dynamique"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"S\'abonner aux messages de signalisation dynamique"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Surveillance de la mémoire flash"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Surveiller l\'utilisation de la mémoire flash"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"État de la conduite"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Détecter les changements relatifs à la conduite"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Détails sur le moteur"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Accéder aux renseignements détaillés sur le moteur de la voiture"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Ports énergétiques"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Accéder aux ports énergétiques"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Identification de la voiture"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Accéder à l\'identification de la voiture"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Portières de la voiture"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Contrôler les portières de la voiture"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Vitres de la voiture"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Contrôler les vitres de la voiture"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Rétroviseurs de la voiture"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Contrôler les rétroviseurs de la voiture"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Sièges de la voiture"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Contrôler les sièges de la voiture"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Renseignements de base sur la voiture"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Accéder aux renseignements de base de la voiture"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Feux extérieurs de la voiture"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Accéder à l\'état des feux extérieurs de la voiture"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Feux extérieurs de la voiture"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Contrôler les feux extérieurs de la voiture"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Température extérieure de la voiture"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Accéder à la température extérieure de la voiture"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Pneus de la voiture"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Accéder aux renseignements sur les pneus de la voiture"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Groupe motopropulseur de la voiture"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Accéder aux renseignements sur le groupe motopropulseur de la voiture"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Alimentation de la voiture"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Accéder à l\'état de l\'alimentation de la voiture"</string>
+</resources>
diff --git a/service/res/values-fr/config.xml b/service/res/values-fr/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-fr/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-fr/strings.xml b/service/res/values-fr/strings.xml
new file mode 100644
index 0000000..2015153
--- /dev/null
+++ b/service/res/values-fr/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Informations relatives à la voiture"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Accéder aux informations relatives à la voiture."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Habitacle de la voiture"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Accéder aux accessoires de la voiture, y compris les portes, les rétroviseurs, les sièges et les fenêtres."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Caméra de la voiture"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Accéder aux caméras de la voiture."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Énergie de la voiture"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Accéder aux informations énergétiques de la voiture."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"Éléments CVC de la voiture"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Accéder aux éléments CVC de la voiture"</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Kilométrage de la voiture"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Accéder aux informations relatives au kilométrage de la voiture."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Vitesse de la voiture"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Accéder à la vitesse de la voiture."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"État des éléments dynamiques de la voiture"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Accéder à l\'état des éléments dynamiques de la voiture"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Chaîne du fournisseur de la voiture"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Accéder à la chaîne du fournisseur de votre voiture afin d\'échanger des informations spécifiques à cette dernière."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Autoradio"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Accéder à l\'autoradio."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Système de projection de la voiture"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Volume audio de la voiture"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Paramètres audio de la voiture"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Afficher l\'interface du téléphone sur l\'écran de la voiture."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Émuler la couche d\'abstraction du matériel de la voiture"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Émuler la couche d\'abstraction du matériel de la voiture afin d\'effectuer des tests internes."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Contrôler le volume audio de la voiture."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Contrôler les paramètres audio de la voiture."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Blocage d\'applications"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Contrôler le blocage des applications pendant la conduite."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Gestionnaire de navigation"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Reporter les données de navigation dans le groupe d\'instruments"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Rediriger le rendu vers le groupe d\'instruments"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Autoriser une application à déclarer des activités à afficher au niveau du groupe d\'instruments"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Contrôle du groupe d\'instruments"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Lancer des applications au niveau du groupe d\'instruments"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Rendu du groupe d\'instruments"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Recevoir les données du groupe d\'instruments"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"Configuration des restrictions relatives à l\'expérience utilisateur"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"Configurer les restrictions relatives à l\'expérience utilisateur"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Service d\'entrée de la voiture"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Gérer les événements d\'entrée"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"Échec du bus de données CAN"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"Le bus de données CAN ne répond pas. Débranchez et rebranchez le boîtier de l\'unité principale, puis redémarrez la voiture"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"Pour votre sécurité, cette activité n\'est pas disponible pendant la conduite.\nPour continuer, attendez d\'être garé."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"Pour recommencer avec des fonctionnalités d\'application sécurisées, sélectionnez <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Retour"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Debug Info"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Données de diagnostic"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Lire les données de diagnostic de la voiture"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Données de diagnostic"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Effacer les données de diagnostic de la voiture"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"Éditeur de messages VMS"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"Publier des messages VMS"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"Abonné VMS"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"S\'abonner aux messages VMS"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Contrôle du stockage Adobe Flash Player"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Contrôler l\'utilisation du stockage Adobe Flash Player"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"État de la conduite"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Détecter les changements de conduite"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Informations détaillées sur le moteur"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Accéder à des informations détaillées sur le moteur de la voiture"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Ports d\'énergie"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Accéder aux ports d\'énergie"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Identification de la voiture"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Accéder à l\'identification de la voiture"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Portes de la voiture"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Contrôler les portes de la voiture"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Fenêtres de la voiture"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Contrôler les fenêtres de la voiture"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Rétroviseurs de la voiture"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Contrôler les rétroviseurs de la voiture"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Sièges de la voiture"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Contrôler les sièges de la voiture"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Informations de base de la voiture"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Accéder aux informations de base de la voiture"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Phares de la voiture"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Accéder à l\'état des phares de la voiture"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Phares de la voiture"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Contrôler les phares de la voiture"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Température à l\'extérieur de la voiture"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Accéder à la température à l\'extérieur de la voiture"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Pneus de la voiture"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Accéder aux informations relatives aux pneus de la voiture"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Groupe propulseur de la voiture"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Accéder aux informations sur le groupe propulseur de la voiture"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Puissance de la voiture"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Accéder à l\'état de la puissance de la voiture"</string>
+</resources>
diff --git a/service/res/values-gl/config.xml b/service/res/values-gl/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-gl/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-gl/strings.xml b/service/res/values-gl/strings.xml
new file mode 100644
index 0000000..b1be01d
--- /dev/null
+++ b/service/res/values-gl/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Información do coche"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Acceder a información do coche."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Cabina do coche"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Acceder aos accesorios do coche, como as portas, os espellos, os asentos e as ventás."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Cámara do coche"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Acceder ás cámaras do coche."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Enerxía do coche"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Acceder a información de enerxía do coche."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"Sistema de HVAC"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Acceder ao sistema de HVAC coche."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Quilometraxe do coche"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Acceder a información da quilometraxe do coche."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Velocidade do coche"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Acceder á velocidade do coche."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Estado da dinámica do vehículo"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Acceder ao estado da dinámica do coche"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Canle do vendedor do coche"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Acceder á canle do vendedor do coche para intercambiar información específica do coche."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Radio do coche"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Acceder á radio do coche."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Proxección do coche"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Volume do audio do coche"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Configuración do audio do coche"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Proxectar a interface do teléfono na pantalla do coche."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Emular a API vehicle HAL"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Emular a API vehicle HAL do coche para realizar probas internas."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Controlar o volume de audio do coche."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Controlar a configuración do audio do coche."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Bloqueo de aplicacións"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Controlar o bloqueo das aplicacións mentres conduces."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Xestor de navegación"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Notificar os datos de navegación ao panel de instrumentos"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Representación directa dos datos no panel de instrumentos"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Permitir que unha aplicación determine as actividades que se poden mostrar no panel de instrumentos"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Control do panel de instrumentos"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Iniciar aplicacións do panel de instrumentos"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Representación do panel de instrumentos"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Recibir datos do panel de instrumentos"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"Configuración de restricións da experiencia de usuario"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"Configurar restricións da experiencia de usuario"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Servizo de entrada do coche"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Controlar os eventos de entrada"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"Produciuse un erro no bus CAN"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"O bus CAN non responde. Desconecta a caixa da unidade principal, conéctaa de novo e reinicia o coche"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"Pola túa seguranza, esta actividade non está dispoñible mentres conduces.\nPodes continuar cando aparques."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"Para comezar de novo coas funcións de aplicacións seguras, selecciona o botón <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Atrás"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Info. dep."</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Datos de diagnóstico"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Ler datos de diagnóstico do coche"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Datos de diagnóstico"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Borrar datos de diagnóstico do coche"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"Editor de VMS"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"Publicar mensaxes VMS"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"Subscritor de VMS"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"Subscribirse ás mensaxes VMS"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Supervisión de almacenamento da unidade flash"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Controlar o uso de almacenamento da unidade flash"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Estado de condución"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Escoitar cambios no estado de condución"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Motor detallado"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Acceder a información detallada sobre o motor do coche"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Portos de enerxía"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Acceder aos portos de enerxía"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Identificación do coche"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Acceder á identificación do coche"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Portas do coche"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Controlar as portas do coche"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Ventás do coche"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Controlar as ventás do coche"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Espellos do coche"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Controlar espellos do coche"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Asentos do coche"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Controlar os asentos do coche"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Información básica do coche"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Acceder a información básica do coche"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Luces exteriores do coche"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Acceder ao estado das luces exteriores do coche"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Luces exteriores do coche"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Controlar as luces exteriores do coche"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Temperatura exterior do coche"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Acceder á temperatura exterior do coche"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Neumáticos do coche"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Acceder a información de neumáticos do coche"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Potencia do coche"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Acceder a información sobre o a potencia do coche"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Potencia do coche"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Acceder ao estado da potencia do coche"</string>
+</resources>
diff --git a/service/res/values-gu/config.xml b/service/res/values-gu/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-gu/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-gu/strings.xml b/service/res/values-gu/strings.xml
new file mode 100644
index 0000000..87572a8
--- /dev/null
+++ b/service/res/values-gu/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"કારની માહિતી"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"તમારી કારની માહિતીને ઍક્સેસ કરો."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"કારની કેબિન"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"તમારી કારની ઍક્સેસરી સહિત દરવાજા, અરીસા, સીટ્સ અને બારીઓ ઍક્સેસ કરો."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"કારનો કૅમેરા"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"તમારી કારના કૅમેરાને ઍક્સેસ કરવાની મંજૂરી આપો."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"કારની ઊર્જા"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"તમારી કારની ઊર્જાની માહિતી ઍક્સેસ કરવાની મંજૂરી આપો."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"કારની hvac"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"તમારી કારની hvac ઍક્સેસ કરો."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"કારનું માઇલેજ"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"તમારી કારના માઇલેજની માહિતી ઍક્સેસ કરો."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"કારની ઝડપ"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"તમારી કારની ગતિ ઍક્સેસ કરો."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"તમારી કારના ગતિશાસ્ત્રની સ્થિતિ"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"તમારી કારના ગતિશાસ્ત્રની સ્થિતિ ઍક્સેસ કરો"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"કારની વિક્રેતા ચેનલ"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"કાર સંબંધિત માહિતીના વિનિમય માટે તમારી કારના વિક્રેતાની ચૅનલ ઍક્સેસ કરો."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"કારનો રેડિયો"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"તમારી કારનો રેડિયો ઍક્સેસ કરો."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"કારનું પ્રોજેક્શન"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"કારના ઑડિયોનું વૉલ્યૂમ"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"કારની ઑડિયો સેટિંગ નિયંત્રિત કરવાની મંજૂરી આપો"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"કારના ડિસ્પ્લે પર ફોન ઇન્ટરફેસ પ્રોજેક્ટ કરવાની મંજૂરી આપો."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"કારના HALનું અનુસરણ કરો"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"આંતરિક પરીક્ષણ હેતુથી તમારી કારના HALનું અનુસરણ કરો."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"તમારી કારના ઑડિયોનું વૉલ્યૂમ નિયંત્રિત કરવાની મંજૂરી આપો."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"તમારી કારના ઑડિઓ સેટિંગ્સ નિયંત્રિત કરો."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"ઍપ્લિકેશન બ્લૉકિંગ"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"ડ્રાઇવિંગ કરતી વખતે ઍપ્લિકેશન બ્લૉકિંગ નિયંત્રિત કરો."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"નૅવિગેશન મેનેજર"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"નૅવિગેશન ડેટાની ઇન્સ્ટ્રુમેન્ટ ક્લસ્ટરને જાણ કરો"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"ઇન્સ્ટ્રુમેન્ટ ક્લસ્ટરને સીધું રેન્ડરિંગ કરવાની સુવિધા"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"પ્રવૃત્તિઓ ઇન્સ્ટ્રુમેન્ટ ક્લસ્ટરમાં પ્રદર્શિત થાય તેવું જાહેર કરવાની ઍપ્લિકેશનને મંજૂરી આપો"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"ઇન્સ્ટ્રુમેન્ટ ક્લસ્ટર નિયંત્રણ"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"ઇન્સ્ટ્રુમેન્ટ ક્લસ્ટરમાં ઍપ્લિકેશન લૉન્ચ કરો"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"ઇન્સ્ટ્રુમેન્ટ ક્લસ્ટર રેન્ડર કરી રહ્યું છે"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"ઇન્સ્ટ્રુમેન્ટ ક્લસ્ટરનો ડેટા પ્રાપ્ત કરો"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"UX પ્રતિબંધોની ગોઠવણી"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"UX પ્રતિબંધોને ગોઠવણી કરો"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"કારની ઇનપુટ સેવા"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"ઇનપુટ ઇવેન્ટ્સને હૅન્ડલ કરો"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"CAN બસ નિષ્ફળ રહી"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN બસ પ્રતિસાદ આપતી નથી. હેડયુનિટ બોક્સને અનપ્લગ કરી ફરી પ્લગ કરો અને કારને ફરી શરૂ કરો"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"તમારી સલામતી માટે કાર ચલાવતી વખતે આ પ્રવૃત્તિ ઉપલબ્ધ નથી.\nચાલુ રાખવા માટે કાર પાર્ક થવા સુધી રાહ જુઓ."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"સુરક્ષિત ઍપ્લિકેશન સુવિધાઓ સાથે ફરી શરૂ કરવા, <xliff:g id="EXIT_BUTTON">%s</xliff:g> પસંદ કરો."</string>
+    <string name="exit_button" msgid="5829638404777671253">"પાછળ"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"ડિબગમાહિતી"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"નિદાનના ડેટાને ઍક્સેસ કરવાની મંજૂરી આપો"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"કારમાંથી ડાયગ્નોસ્ટિક ડેટા વાંચો"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"નિદાનના ડેટાને ઍક્સેસ કરવાની મંજૂરી આપો"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"કારમાંથી ડાયગ્નોસ્ટિક ડેટા સાફ કરો"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"VMS પ્રકાશકની મંજૂરી"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"vms સંદેશા પ્રકાશિત કરવાની મંજૂરી આપો"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"VMS સબસ્ક્રાઇબર"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"vms સંદેશાને સબ્સ્ક્રાઇબ કરો"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"પેન ડ્રાઇવના સ્ટોરેજનું નિરીક્ષણ કરવાની મંજૂરી આપો"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"ફ્લૅશ સ્ટોરેજના વપરાશનું નિરીક્ષણ કરો"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"ડ્રાઇવિંગના ફેરફારો નોંધવાની મંજૂરી"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"ડ્રાઇવ કરવાની સ્થિતિના ફેરફારો સાંભળવાની મંજૂરી આપો"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"એન્જિન વિગતવાર"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"તમારી કારના એન્જિનની વિગતવાર માહિતી ઍક્સેસ કરવાની મંજૂરી આપો"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"ઊર્જાના પોર્ટના ઍક્સેસની મંજૂરી"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"ઊર્જાના પોર્ટ ઍક્સેસ કરો"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"કારની ઓળખ"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"કારની ઓળખ ઍક્સેસ કરો"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"કારના દરવાજા"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"કારના દરવાજા નિયંત્રિત કરો"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"કારની બારીઓ"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"કારની બારીઓ નિયંત્રિત કરો"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"કારના અરીસા"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"કારના અરીસા નિયંત્રિત કરો"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"કારની સીટના નિયંત્રણની મંજૂરી"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"કારની સીટ્સ નિયંત્રિત કરો"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"કારની મૂળભૂત માહિતી"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"કારની મૂળભૂત માહિતી ઍક્સેસ કરવાની મંજૂરી આપો"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"કારની બાહ્ય લાઇટ"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"કારની બાહ્ય લાઇટની સ્થિતિ ઍક્સેસ કરો"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"કારની બાહ્ય લાઇટ"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"કારની બાહ્ય લાઇટ નિયંત્રિત કરવાની મંજૂરી આપો"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"કારનું બાહ્ય તાપમાન"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"કારના બાહ્ય તાપમાનને ઍક્સેસ કરવાની મંજૂરી આપો"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"કારના ટાયરની માહિતી ઍક્સેસ કરવાની મંજૂરી આપો"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"કારના ટાયરની માહિતી ઍક્સેસ કરો"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"કારની પાવરટ્રેન"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"કારના પાવરટ્રેનની માહિતી ઍક્સેસ કરવાની મંજૂરી આપો"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"કારનો પાવર"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"કારના પાવરની સ્થિતિ ઍક્સેસ કરો"</string>
+</resources>
diff --git a/service/res/values-hi/config.xml b/service/res/values-hi/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-hi/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-hi/strings.xml b/service/res/values-hi/strings.xml
new file mode 100644
index 0000000..94c2364
--- /dev/null
+++ b/service/res/values-hi/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"कार की जानकारी"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"आपकी कार की जानकारी एक्सेस कर सकता है"</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"कार का केबिन"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"आपकी कार के दरवाज़ों, शीशों, सीटों, और खिड़कियों के साथ ही उसकी एक्सेसरी एक्सेस कर सकता है."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"कार का कैमरा"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"आपकी कार के कैमरे एक्सेस कर सकता है."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"कार की ऊर्जा"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"आपकी कार की ऊर्जा से जुड़ी जानकारी एक्सेस कर सकता है."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"कार का एचवीएसी"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"आपकी कार का एचवीएसी एक्सेस कर सकता है."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"कार की माइलेज"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"आपकी कार की माइलेज से जुड़ी जानकारी एक्सेस कर सकता है."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"कार की रफ़्तार"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"आपकी कार की रफ़्तार की जानकारी एक्सेस कर सकता है."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"वाहन की गतिशीलता की स्थिति"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"आपकी कार की गतिशीलता की स्थिति एक्सेस कर सकता है"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"कार का विक्रेता चैनल"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"कार की खास जानकारी लेने-देने के लिए आपकी कार का विक्रेता, चैनल एक्सेस कर सकता है."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"कार का रेडियो"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"आपकी कार का रेडियो एक्सेस कर सकता है."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"कार का प्रोजेक्शन"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"कार के ऑडियो की आवाज़"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"कार की ऑडियो सेटिंग"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"फ़ोन इंटरफ़ेस को कार के डिसप्ले पर ला सकता है."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"vehicle HAL की तरह काम करना"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"अंदरूनी टेस्ट के मकसद से आपकी कार के vehicle HAL की तरह काम कर सकता है."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"आपकी कार के ऑडियो की आवाज़ नियंत्रित कर सकता है."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"आपकी कार की ऑडियो सेटिंग नियंत्रित कर सकता है."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"ऐप्लिकेशन ब्लॉक करना"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"गाड़ी चलाते समय ऐप्लिकेशन ब्लॉक करने की सुविधा नियंत्रित कर सकता है."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"नेविगेशन मैनेजर"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"इंस्ट्रूमेंट क्लस्टर में नेविगेशन डेटा की रिपोर्ट कर सकता है"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"इंस्ट्रूमेंट क्लस्टर में सीधे तौर पर होने वाली रेंडरिंग"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"ऐप्लिकेशन को इंस्ट्रूमेंट क्लस्टर में दिखाई जाने वाली गतिविधियों की घोषणा करने दें"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"इंस्ट्रूमेंट क्लस्टर का नियंत्रण"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"इंस्ट्रूमेंट क्लस्टर में ऐप्लिकेशन लॉन्च करें"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"इंस्ट्रूमेंट क्लस्टर रेंडर करने की सुविधा"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"इंस्ट्रूमेंट क्लस्टर का डेटा पाएं"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"UX पाबंदियों का कॉन्फ़िगरेशन"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"UX की पाबंदियां कॉन्फ़िगर करें"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"कार की इनपुट सेवा"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"इनपुट से जुड़े इवेंट प्रबंधित कर सकता है"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"\'CAN बस\' काम नहीं कर पा रहा है"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"\'CAN बस\' जवाब नहीं दे रहा है. हेडयूनिट बॉक्स का प्लग निकालकर वापस लगाएं और कार को रीस्टार्ट करें"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"आपकी सुरक्षा के लिए, गाड़ी चलाते समय यह गतिविधि मौजूद नहीं रहती है.\nजारी रखने के लिए गाड़ी पार्क करनी होगी."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"सुरक्षित ऐप्लिकेशन सुविधाएं फिर से शुरू करने के लिए, <xliff:g id="EXIT_BUTTON">%s</xliff:g> चुनें."</string>
+    <string name="exit_button" msgid="5829638404777671253">"वापस शुरू करें"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Debug Info"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"निदान का डेटा"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"कार से निदान का डेटा पढ़ सकता है"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"निदान का डेटा"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"कार से निदान का डेटा हटा सकता है"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"VMS प्रकाशित कर सकता है"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"vms मैसेज प्रकाशित कर सकता है"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"VMS का सदस्य"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"vms मैसेज की सदस्यता ले सकता है"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"फ़्लैश डिवाइस की मेमोरी पर नज़र रख सकता है"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"फ़्लैश डिवाइस की मेमोरी के इस्तेमाल की निगरानी कर सकता है"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"गाड़ी चलाने के दौरान की स्थिति"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"गाड़ी चलाने के समय की स्थिति में होने वाले बदलावों पर नज़र रख सकता है"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"इंजन की पूरी जानकारी"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"आपकी कार के इंजन की पूरी जानकारी एक्सेस कर सकता है"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"एनर्जी पोर्ट"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"इनर्जी पोर्ट एक्सेस कर सकता है"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"कार की पहचान"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"कार की पहचान एक्सेस कर सकता है"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"कार के दरवाज़े"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"कार के दरवाज़े नियंत्रित कर सकता है"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"कार की खिड़कियां"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"कार की खिड़कियां नियंत्रित कर सकता है"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"कार के शीशे"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"कार के शीशे नियंत्रित कर सकता है"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"कार की सीटें"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"कार की सीटें नियंत्रित कर सकता है"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"कार की बुनियादी जानकारी"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"कार की बुनियादी जानकारी एक्सेस कर सकता है"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"कार की बाहर की लाइटें"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"कार की बाहर की लाइटों की स्थिति एक्सेस कर सकता है"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"कार की बाहर की लाइटें"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"कार की बाहर की लाइटें नियंत्रित कर सकता है"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"कार के बाहर का तापमान"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"कार के बाहर के तापमान की जानकारी एक्सेस कर सकता है"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"कार के टायर"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"कार के टायर की जानकारी एक्सेस कर सकता है"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"कार का पावरट्रेन"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"कार के पावरट्रेन की जानकारी एक्सेस कर सकता है"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"कार का पावर"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"कार के पावर की स्थिति एक्सेस कर सकता है"</string>
+</resources>
diff --git a/service/res/values-hr/config.xml b/service/res/values-hr/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-hr/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-hr/strings.xml b/service/res/values-hr/strings.xml
new file mode 100644
index 0000000..1c190ac
--- /dev/null
+++ b/service/res/values-hr/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"podaci o automobilu"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"pristupiti podacima o automobilu"</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"putnički prostor"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"pristupiti opremi automobila, uključujući vrata, retrovizore, sjedala i prozore"</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"automobilska kamera"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"pristupiti kamerama automobila"</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"energija automobila"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"pristupiti informacijama o energiji automobila"</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"grijanje, ventilacija i klimatizacija automobila"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"pristupiti grijanju, ventilaciji i klimatizaciji vašeg automobila"</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"kilometraža automobila"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"pristupiti informacijama o kilometraži automobila"</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"brzina automobila"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"pristupiti brzini automobila"</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"stanje dinamike vozila"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"pristupiti stanju dinamike automobila"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"kanal dobavljača automobila"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"pristupiti kanalu dobavljača automobila radi razmjene podataka o automobilu"</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"automobilski radio"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"pristupiti automobilskom radiju"</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"projekcija u automobilu"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"glasnoća zvuka za automobil"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"postavke zvuka za automobil"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"projicirati sučelje telefona na zaslonu automobila"</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"emulirati HAL vozila"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"emulirati HAL vozila za vaš automobil u svrhu internog testiranja"</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"upravljati glasnoćom zvuka za automobil"</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"upravljati postavkama zvuka za automobil"</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"blokiranje aplikacija"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"upravljati blokiranjem aplikacija tijekom vožnje"</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"upravitelj navigacije"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"dostaviti instrumentnoj ploči podatke o navigaciji"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"izravno generiranje na instrumentnoj ploči"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"dopustiti aplikaciji da navede aktivnosti koje će se prikazivati na instrumentnoj ploči"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"upravljanje instrumentnom pločom"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"pokretati aplikacije na instrumentnoj ploči"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"generiranje na instrumentnoj ploči"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"primati podatke instrumentne ploče"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"konfiguracija ograničenja UX-a"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"konfigurirati ograničenja UX-a"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"usluga automobilskog unosa"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"rukovati događajima unosa"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"Pogreška CAN busa"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN bus ne odgovara. Iskopčajte i ponovo ukopčajte glavnu jedinicu i ponovo pokrenite automobil"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"Radi vaše sigurnosti ta aktivnost nije dostupna tijekom vožnje.\nDa biste nastavili, pričekajte dok se ne zaustavite."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"Da biste započeli ponovo sa sigurnim značajkama aplikacije, odaberite <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Natrag"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Inf. o otkl. pogrešaka"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"dijagnostički podaci"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"čitati dijagnostičke podatke automobila"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"dijagnostički podaci"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"brisati dijagnostičke podatke automobila"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"VMS izdavač"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"objavljivati VMS poruke"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"VMS pretplatnik"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"pretplatiti se na VMS poruke"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"nadzor flash pohrane"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"nadzirati upotrebu flash pohrane"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Stanje vožnje"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"slušati promjene stanja vožnje"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"pojedinosti o motoru"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"pristupiti detaljnim podacima o motoru automobila"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"energetski priključci"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"pristupiti energetskim priključcima"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"identifikacija automobila"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"pristupiti identifikaciji automobila"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"automobilska vrata"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"upravljati automobilskim vratima"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"automobilski prozori"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"upravljati automobilskim prozorima"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"automobilski retrovizori"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"upravljati automobilskim retrovizorima"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"automobilska sjedala"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"upravljati automobilskim sjedalima"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"osnovni podaci o automobilu"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"pristupiti osnovnim podacima o automobilu"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"vanjska svjetla automobila"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"pristupiti stanju vanjskih svjetala automobila"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"vanjska svjetla automobila"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"upravljati vanjskim svjetlima automobila"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"temperatura vanjskog prostora automobila"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"pristupiti temperaturi vanjskog prostora automobila"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"automobilske gume"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"pristupiti podacima o automobilskim gumama"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"pogonski sklop automobila"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"pristupiti podacima o pogonskom sklopu automobila"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"napajanje automobila"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"pristupiti stanju napajanja automobila"</string>
+</resources>
diff --git a/service/res/values-hu/config.xml b/service/res/values-hu/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-hu/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-hu/strings.xml b/service/res/values-hu/strings.xml
new file mode 100644
index 0000000..1b531fb
--- /dev/null
+++ b/service/res/values-hu/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Az autó adatai"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Hozzáférhet az autó adataihoz."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Az autó utastere"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Hozzáférhet az autó részeihez (pl. ajtók, tükrök, ülések és ablakok)."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Az autó kamerája"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Hozzáférhet az autó kameráihoz."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Az autó energiafelhasználása"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Hozzáférhet az autó energiafelhasználására vonatkozó adatokhoz."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"Az autó HVAC-adatai"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Hozzáférhet az autó HVAC-adataihoz."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Az autó kilométeradatai"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Hozzáférhet az autó kilométeradataihoz."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Az autó sebessége"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Hozzáférhet az autó sebességadataihoz."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Jármű dinamikai állapota"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Hozzáférhet az autó dinamikai állapotához"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Az autó gyártói csatornája"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Hozzáférhet az autó gyártói csatornájához az autóval kapcsolatos információcsere céljából."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Autórádió"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Hozzáférhet az autó rádiójához."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Kivetítés az autó képernyőjére"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Az autó multimédia-rendszerének hangereje"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Az autó multimédia-rendszerének beállításai"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"A telefon kezelőfelületét az autó képernyőjére vetítheti."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Jármű hardverabsztrakciós rétegének (HAL) emulálása"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Emulálhatja a jármű hardverabsztrakciós rétegét (HAL) belső tesztelési célokból."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Vezérelheti az autó multimédia-rendszerének hangerejét."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Vezérelheti az autó multimédia-rendszerének beállításait."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Alkalmazás letiltása"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Vezérelheti az alkalmazások vezetés közbeni letiltását."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Navigációkezelő"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Jelentheti a navigációs adatokat a műszerfalon"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Közvetlen megjelenítés a műszerfalon"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Engedélyezheti az alkalmazásnak a műszerfalon megjelenítendő tevékenységek bejelentését"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"A műszerfal vezérlése"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Az alkalmazások műszerfalon való indítása"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Műszerfalon való megjelenítés"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Műszerfaladatok fogadása"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"Felhasználói élményre vonatkozó korlátozások beállítása"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"Felhasználói élményre vonatkozó korlátozások beállítása"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Az autó beviteli szolgáltatása"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Kezelheti a beviteli eseményeket"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"A CAN-busz hibát észlelt"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"A CAN-busz nem válaszol. Csatlakoztassa újra a fejegységet, és indítsa újra az autót."</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"Az Ön biztonsága érdekében ez a tevékenység nem végezhető vezetés közben.\nLeparkolás után folytathatja a tevékenységet."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"Ha biztonságos alkalmazásfunkciókkal szeretné újrakezdeni, válassza a következő gombot: <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Vissza"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Hibakeresési adatok"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Diagnosztikai adatok"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Olvashatja az autó diagnosztikai adatait"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Diagnosztikai adatok"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Törölheti az autó diagnosztikai adatait"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"Megjeleníthet változtatható jelzésképű táblákat"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"Változtatható jelzésképű táblák üzeneteinek megjelenítése"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"Feliratkozva a változtatható jelzésképű táblák üzeneteire"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"Feliratkozhat a változtatható jelzésképű táblák üzeneteire"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Flash-tárhely figyelése"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Figyelheti a Flash-tárhely használatát"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Vezetési állapot"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Meghallgathatja a vezetési állapot változásait"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Részletes motoradatok"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Hozzáférhet az autó részletes motoradataihoz"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Töltőnyílás/tanksapka"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Hozzáférhet a töltőnyíláshoz/tanksapkához"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Jármű-azonosító szám"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Hozzáférhet a jármű-azonosító számhoz"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Az autó ajtói"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Vezérelheti az autó ajtóit"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Az autó ablakai"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Vezérelheti az autó ablakait"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Az autó tükrei"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Vezérelheti az autó tükreit"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Az autó ülései"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Vezérelheti az autó üléseit"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Az autó alapvető adatai"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Hozzáférhet az autó alapvető adataihoz"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Az autó külső világítása"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Hozzáférhet az autó külső világításának állapotához"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Az autó külső világítása"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Vezérelheti az autó külső világítását"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Az autó külső hőmérséklete"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Hozzáférhet az autó külső hőmérsékletéhez"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Gumiabroncsok"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Hozzáférhet a gumiabroncsok adataihoz"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Az autó hajtáslánca"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Hozzáférhet az autó hajtásláncával kapcsolatos adatokhoz"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Az autó energiaszintje"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Hozzáférhet az autó energiaszintjével kapcsolatos adataihoz"</string>
+</resources>
diff --git a/service/res/values-hy/config.xml b/service/res/values-hy/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-hy/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-hy/strings.xml b/service/res/values-hy/strings.xml
new file mode 100644
index 0000000..3bf00a7
--- /dev/null
+++ b/service/res/values-hy/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Տեղեկություններ մեքենայի մասին"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Ընթերցել մեքենայի մասին տեղեկությունները"</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Խցիկ"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Կառավարել թափքի և խցիկի տարրերը՝ դռները, հայելիները, նստատեղերը և պատուհանները"</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Մեքենայի տեսախցիկ"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Կառավարել մեքենայի տեսախցիկ(ներ)ը"</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Էներգառեսուրսներ"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Ընթերցել մեքենայի էներգառեսուրսների մասին տվյալները"</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"HVAC համակարգ"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Կառավարել HVAC համակարգը"</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Մեքենայի վազքը"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Օգտագործել մեքենայի վազքի մասին տեղեկությունները"</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Մեքենայի արագություն"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Ընթերցել մեքենայի արագության մասին տեղեկությունները"</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Մեքենայի դինամիկայի մասին տվյալներ"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Ընթերցել մեքենայի դինամիկայի մասին տվյալները"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Մեքենայի վաճառողի ալիք"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Մուտք գործել վաճառողի ալիք՝ մեքենային բնորոշ տեղեկություններ փոխանակելու համար"</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Ռադիո"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Կառավարել մեքենայի ռադիոն"</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"ՀԵռարձակում մեքենայի էկրանին"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Աուդիո համակարգի ձայնի ուժգնություն"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Մեքենայի աուդիո համակարգի կարգավորումներ"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Ցուցադրել հեռախոսի միջերեսը մեքենայի էկրանին"</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Նմանակել HAL միջերեսը"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Նմանակել HAL միջերեսը ներքին փորձարկման համար"</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Կառավարել մեքենայի աուդիո համակարգի ձայնի ուժգնությունը"</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Կառավարել մեքենայի աուդիո համակարգի կարգավորումները"</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Հավելվածների արգելափակում"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Արգելափակել հավելվածները վարելու ռեժիմում"</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Նավիգատոր"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Ցույց տալ նավիգացիայի տվյալները սարքերի վահանակի վրա"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Տվյալների ցուցադրում սարքերի վահանակի վրա"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Թույլատրել հավելվածին որոշել՝ ինչ տվյալներ ցուցադրվեն սարքերի վահանակի վրա"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Սարքերի վահանակի կառավարում"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Գործարկել հավելվածներ սարքերի վահանակի վրա"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Սարքերի վահանակի արտապատկերում"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Ստանալ տվյալներ սարքերի վահանակից"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"Գործառույթների օգտագործման սահմանափակում"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"Սահմանափակել գործառույթների օգտագործումը"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Ներածման ծառայություն"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Մշակել ներածման իրադարձությունները"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"CAN անվադողի սխալ"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN անվադողը չի պատասխանում: Անջատեք և նորից միացրեք միակցիչը, ապա անջատեք վառոցքը և վերագործարկեք մեքենան:"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"Անվտանգության նկատառումներով այս գործողությունը հասանելի չէ վարելու ռեժիմում:\nՇարունակելու համար կայանեք մեքենան:"</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"Հավելվածն անվտանգ ռեժիմում վերագործարկելու համար սեղմեք<xliff:g id="EXIT_BUTTON">%s</xliff:g> կոճակը:"</string>
+    <string name="exit_button" msgid="5829638404777671253">"Հետ"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Debug Info"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Ախտորոշման տվյալներ"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Ընթերցել մեքենայի ախտորոշման տվյալները"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Ախտորոշման տվյալներ"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Ջնջել մեքենայի ախտորոշման տվյալները"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"VMS հաղորդագրությունների հրապարակում"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"Հրապարակել VMS հաղորդագրություններ"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"Բաժանորդագրում VMS հաղորդագրություններին"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"Բաժանորդագրվել VMS հաղորդագրություններին"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Ֆլեշ պահեստի մոնիթորինգ"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Հետագծել ֆլեշ պահեստի օգտագործումը"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Վարելու ռեժիմ"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Հետագծել վարելու ռեժիմի փոփոխությունները"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Շարժիչ"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Ընթերցել շարժիչի մասին մանրամասն տեղեկությունները"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Վառելիքի բաքի դռնակ կամ լիցքավորման վարդակ"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Կառավարել վառելիքի բաքի դռնակը կամ լիցքավորման վարդակը"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Մեքենայի նույնականացում"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Ընթերցել մեքենայի նույնականացման տվյալները"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Մեքենայի դռներ"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Կառավարել մեքենայի դռները"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Պատուհաններ"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Կառավարել մեքենայի պատուհանները"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"ՄԵքենայի հայելիներ"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Կառավարել մեքենայի հայելիները"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Նստատեղեր"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Կառավարել նստատեղերը"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Ընդհանուր տեղեկություններ մեքենայի մասին"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Ընթերցել մեքենայի մասին ընդհանուր տեղեկությունները"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Մեքենայի արտաքին լույսեր"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Ընթերցել արտաքին լույսերի վիճակի մասին տվյալները"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Մեքենայի արտաքին լույսեր"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Կառավարել մեքենայի արտաքին լույսերը"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"ՄԵքենայի արտաքին ջերմաստիճանը"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Իմանալ մեքենայի արտաքին ջերմաստիճանը"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Անվադողեր"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Ընթերցել անվադողերի մասին տվյալները"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Շարժահաղորդում"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Ընթերցել շարժահաղորդման մասին տվյալները"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Էլեկտրասնուցում"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Ընթերցել մեքենայի էլեկտրասնուցման մասին տվյալները"</string>
+</resources>
diff --git a/service/res/values-in/config.xml b/service/res/values-in/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-in/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-in/strings.xml b/service/res/values-in/strings.xml
new file mode 100644
index 0000000..ab880c0
--- /dev/null
+++ b/service/res/values-in/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Informasi mobil"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Mengakses informasi mobil Anda."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Kabin Mobil"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Mengakses aksesori mobil Anda, termasuk pintu, spion, kursi, dan jendela."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Kamera Mobil"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Mengakses kamera mobil Anda."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Energi mobil"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Mengakses informasi energi mobil Anda."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"Hvac Mobil"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Mengakses hvac mobil Anda."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Jarak tempuh mobil"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Mengakses informasi jarak tempuh mobil."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Kecepatan mobil"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Mengakses kecepatan mobil Anda."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Status dinamika kendaraan"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Mengakses status dinamika mobil Anda"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Saluran vendor mobil"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Mengakses saluran vendor mobil untuk bertukar informasi mengenai mobil."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Radio Mobil"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Mengakses radio mobil Anda."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Proyeksi Mobil"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Volume Audio Mobil"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Setelan Audio Mobil"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Memproyeksikan antarmuka ponsel di layar mobil."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Mengemulasi HAL kendaraan"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Mengemulasi HAL kendaraan mobil Anda untuk tujuan pengujian internal."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Mengontrol volume audio mobil Anda."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Mengontrol setelan audio mobil Anda."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Pemblokiran aplikasi"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Mengontrol pemblokiran aplikasi saat mengemudi."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Pengelola Navigasi"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Melaporkan data navigasi ke kluster instrumen"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Melakukan rendering langsung ke kluster instrumen"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Mengizinkan aplikasi mendeklarasikan aktivitas untuk ditampilkan di kluster instrumen"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Kontrol kluster instrumen"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Luncurkan aplikasi di kluster instrumen"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Rendering Kluster Instrumen"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Menerima data kluster instrumen"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"Konfigurasi Batasan UX"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"Mengonfigurasi Batasan UX"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Layanan Masukan Mobil"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Menangani aktivitas masukan"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"CAN bus gagal"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN bus tidak merespons. Cabut dan colokkan kembali boks headunit, lalu nyalakan ulang mobil"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"Demi keamanan Anda, aktivitas ini tidak tersedia saat Anda mengemudi.\nUntuk melanjutkan, tunggu hingga mobil terparkir."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"Untuk mulai dari awal dengan fitur apl yang aman, pilih <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Kembali"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Info Debug"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Data Diagnostik"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Membaca data diagnostik dari mobil"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Data Diagnostik"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Menghapus data diagnostik dari mobil"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"Penayang VMS"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"Memublikasikan pesan vms"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"Pelanggan VMS"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"Berlangganan ke pesan vms"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Pemantauan penyimpanan flash"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Memantau penggunaan penyimpanan flash"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Status Mengemudi"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Mendengar perubahan status Mengemudi"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Detail Mesin"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Mengakses informasi mendetail tentang mesin mobil Anda"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Port Energi"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Mengakses port energi"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Identifikasi mobil"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Mengakses identifikasi mobil"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Pintu Mobil"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Mengontrol pintu mobil"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Jendela Mobil"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Mengontrol jendela mobil"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Spion Mobil"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Mengontrol spion mobil"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Kursi Mobil"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Mengontrol kursi mobil"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Informasi dasar mobil"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Mengakses informasi dasar mobil"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Lampu eksterior mobil"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Mengakses status lampu eksterior mobil"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Lampu eksterior mobil"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Mengontrol lampu eksterior mobil"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Suhu eksterior mobil"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Mengakses suhu eksterior mobil"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Ban mobil"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Mengakses informasi ban mobil"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Pembangkit Tenaga Mobil"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Mengakses informasi pembangkit tenaga mobil"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Daya Mobil"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Mengakses status daya mobil"</string>
+</resources>
diff --git a/service/res/values-is/config.xml b/service/res/values-is/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-is/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-is/strings.xml b/service/res/values-is/strings.xml
new file mode 100644
index 0000000..b43a60c
--- /dev/null
+++ b/service/res/values-is/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Upplýsingar um bíl"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Fá aðgang að upplýsingum um bílinn."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Farþegarými bíls"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Aðgangur að aukahlutum bílsins, þ.m.t. hurðum, speglum, sætum og gluggum."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Myndavél bíls"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Fá aðgang að myndavél(um) bílsins."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Orka bílsins"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Aðgangur að upplýsingum um orkunotkun bílsins."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"Hita- og loftræstikerfi bíls"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Fá aðgang að hitun og loftræstingu bílsins."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Ekin vegalengd bíls"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Fá aðgang að upplýsingum um ekna vegalengd bílsins."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Hraði bíls"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Fá upplýsingar um hraða bílsins."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Staða aksturseiginleika bíls"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Aðgangur að stöðu aksturseiginleika bílsins"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Framleiðandarás bíls"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Fá aðgang að framleiðandarás bílsins til að skiptast á bílatengdum upplýsingum."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Útvarp bíls"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Fá aðgang að útvarpi bílsins."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Vörpun bíls"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Hljóðstyrkur í bílnum"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Stillingar á hljóðkerfi bíls"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Sýna viðmót síma á skjá bílsins."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Líkja eftir HAL ökutækis"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Líkja eftir HAL ökutækis til að gera innri prófanir."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Stjórna hljóðstyrk í bílnum."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Stjórna stillingum fyrir hljóðkerfi bílsins."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Lokað á forrit"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Stjórna útilokun forrita við akstur."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Umsjón með leiðsögn"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Tilkynna leiðsagnargögn til mælaborðs"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Bein teiknun á mælaborði"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Leyfa forriti að velja aðgerðir til birtingar á mælaborði."</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Stjórnun mælaborðs"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Opna forrit á mælaborði"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Teiknun mælaborðs"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Fá mælaborðsgögn"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"Grunnstilling takmarkana á upplifun notanda"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"Stilla takmarkanir á upplifun notanda"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Inntaksþjónusta bíls"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Stjórna inntakstilvikum"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"Bilun í CAN-gagnabraut"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN-gagnabraut svarar ekki. Taktu stjórneiningarboxið úr sambandi, settu það aftur í samband og gangsettu bílinn aftur."</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"Af öryggisástæðum er þessi aðgerð ekki í boði við akstur.\nLeggðu ökutækinu áður en þú heldur áfram."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"Til að byrja aftur að setja upp örugga forritseiginleika skaltu velja <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Til baka"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Villuleit"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Greiningargögn"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Lesa greiningargögn úr bílnum"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Greiningargögn"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Hreinsa greiningargögn úr bíl"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"VMS-útgefandi"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"Birta VMS-skilaboð"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"VMS-áskrifandi"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"Gerast áskrifandi að VMS-skilaboðum"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Eftirlit með Flash-geymslu"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Fylgjast með notkun á Flash-geymslu"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Akstursstaða"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Hlusta á breytingar í akstursstöðu"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Upplýsingar um vél"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Fá aðgang að ítarlegum upplýsingum um vél bílsins"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Áfyllingarop"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Aðgangur að áfyllingaropum"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Auðkenni bíls"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Fá aðgang að auðkenni bílsins"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Bílhurðir"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Stjórna hurðum bílsins"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Gluggar bíls"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Stjórna gluggum bílsins"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Speglar bíls"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Stjórna speglum bíls"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Bílsæti"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Stjórna bílsætum"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Grunnupplýsingar um bíl"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Fá aðgang að grunnupplýsingum bílsins"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Ljós bíls að utanverðu"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Aðgangur að stöðu ljósa bíls að utanverðu"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Ljós bíls að utanverðu"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Stjórna ljósum bíls að utanverðu"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Ytra hitastig bíls"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Fá aðgang að útihitamæli bílsins"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Bíldekk"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Fá aðgang að upplýsingum um dekk bílsins"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Aflrás bíls"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Fá aðgang að upplýsingum um aflrás bílsins"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Orka bíls"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Aðgangur að orkustöðu bíls"</string>
+</resources>
diff --git a/service/res/values-it/config.xml b/service/res/values-it/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-it/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-it/strings.xml b/service/res/values-it/strings.xml
new file mode 100644
index 0000000..4f434c1
--- /dev/null
+++ b/service/res/values-it/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Informazioni sull\'auto"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Consente di accedere alle informazioni dell\'automobile."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Abitacolo"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Consente di accedere agli accessori dell\'automobile, inclusi specchietti, portiere, sedili e finestrini."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Videocamera dell\'automobile"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Consente di accedere alle videocamere dell\'automobile."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Livello di batteria dell\'auto"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Consente di accedere alle informazioni sulla carica dell\'automobile."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"Sistema HVAC dell\'automobile"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Consente di accedere al sistema HVAC dell\'automobile."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Consumo di carburante dell\'automobile"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Consente di accedere alle informazioni sul consumo di carburante dell\'automobile."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Velocità dell\'auto"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Consente di accedere alle informazioni sulla velocità dell\'automobile."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Stato dei componenti dinamici del veicolo"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Consente di accedere allo stato dei componenti dinamici dell\'automobile."</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Canale del produttore dell\'automobile"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Consente di accedere al canale del produttore per uno scambio di informazioni specifiche sull\'automobile."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Autoradio"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Consente di accedere alla radio dell\'automobile."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Proiezione nell\'automobile"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Volume dell\'audio dell\'automobile"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Impostazioni audio dell\'automobile"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Consente di proiettare l\'interfaccia del telefono sul display dell\'automobile."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Emulazione vehicle HAL"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Consente di emulare la vehicle HAL dell\'automobile per test interni."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Consente di regolare il volume dell\'audio dell\'automobile."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Consente di controllare le impostazioni audio dell\'automobile."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Blocco di app"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Consente di controllare il blocco delle app durante la guida."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Gestione della navigazione"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Consente di segnalare dati di navigazione al quadro strumenti."</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Visualizzazione diretta sul quadro strumenti"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Consente a un\'app di comunicare la visualizzazione delle attività sul quadro strumenti."</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Controllo del quadro strumenti"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Consente di avviare app nel quadro strumenti."</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Visualizzazione sul quadro strumenti"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Consente di ricevere dati del quadro strumenti."</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"Configurazione delle limitazioni dell\'esperienza utente"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"Consente di configurare le limitazioni dell\'esperienza utente."</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Servizio di input dell\'auto"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Consente di gestire gli eventi di input."</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"Comunicazione tramite bus CAN non riuscita"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"Il bus CAN non risponde. Scollega e ricollega l\'unità principale e riaccendi il motore."</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"Per motivi di sicurezza, questa attività non è disponibile durante la guida.\nPotrai continuare quando avrai parcheggiato."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"Seleziona <xliff:g id="EXIT_BUTTON">%s</xliff:g> per ricominciare con le funzionalità sicure dell\'app."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Indietro"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Info debug"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Dati diagnostici"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Consente di leggere i dati diagnostici dell\'automobile."</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Dati diagnostici"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Consente di cancellare i dati diagnostici dell\'automobile."</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"Publisher VMS"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"Consente di pubblicare messaggi VMS."</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"Abbonamento ai dati VMS"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"Consente di abbonarsi ai messaggi VMS."</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Monitoraggio della memoria flash"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Consente di monitorare l\'uso della memoria flash."</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Stato Alla guida"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Ascolto delle modifiche dello stato Alla guida."</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Informazioni dettagliate sul motore"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Consente di accedere a informazioni dettagliate sul motore dell\'automobile."</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Porte di alimentazione"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Consente di accedere alle porte di alimentazione."</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Identificazione dell\'auto"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Consente di accedere all\'identificazione dell\'automobile."</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Portiere dell\'automobile"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Consente di controllare le portiere dell\'automobile."</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Finestrini dell\'automobile"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Consente di controllare i finestrini dell\'automobile."</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Specchietti dell\'automobile"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Consente di regolare gli specchietti dell\'automobile."</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Sedili"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Consente di regolare i sedili dell\'automobile."</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Informazioni di base sull\'automobile"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Consente di accedere alle informazioni di base dell\'automobile."</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Luci esterne dell\'automobile"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Consente di accedere allo stato delle luci esterne dell\'automobile."</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Luci esterne dell\'automobile"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Consente di controllare le luci esterne dell\'automobile."</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Temperatura esterna indicata dall\'automobile"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Consente di accedere alla temperatura esterna indicata dall\'automobile."</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Pneumatici"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Consente di accedere alle informazioni sui pneumatici dell\'automobile."</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Gruppo motopropulsore dell\'automobile"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Consente di accedere alle informazioni sul gruppo motopropulsore dell\'automobile."</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Alimentazione"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Consente di accedere allo stato di alimentazione dell\'automobile."</string>
+</resources>
diff --git a/service/res/values-iw/config.xml b/service/res/values-iw/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-iw/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-iw/strings.xml b/service/res/values-iw/strings.xml
new file mode 100644
index 0000000..0b82dc4
--- /dev/null
+++ b/service/res/values-iw/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"פרטי הרכב"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"גישה לנתוני הרכב."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"תא הנהג ברכב"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"גישה לאביזרי הרכב, כולל דלתות, מראות, מושבים וחלונות."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"מצלמת הרכב"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"גישה למצלמות הרכב."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"אנרגיית הרכב"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"גישה למידע על אנרגיית הרכב"</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"מערכת החימום, האוורור ומיזוג האוויר (HVAC) של הרכב"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"גישה למערכת החימום, האוורור ומיזוג האוויר (HVAC) של הרכב."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"קילומטראז\' של הרכב"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"גישה אל נתוני הקילומטראז\' של הרכב."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"מהירות הרכב"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"גישה לנתוני המהירות של הרכב."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"מצב דינמי של הרכב"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"גישה למצב הדינמי של הרכב"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"ערוץ הספק של הרכב"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"גישה אל ערוץ הספק של הרכב לצורך חילופי מידע הספציפי לרכב."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"הרדיו של הרכב"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"גישה לרדיו של הרכב."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"מערכת ההקרנה של הרכב"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"עוצמת האודיו ברכב"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"הגדרות האודיו של הרכב"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"הקרנת ממשק הטלפון במסך הרכב."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"אמולציה של ממשק vehicle HAL"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"אמולציה של ממשק vehicle HAL של הרכב למטרות בדיקה פנימית."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"שליטה בעוצמת האודיו של הרכב."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"שליטה בהגדרות האודיו של הרכב."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"חסימת אפליקציות"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"שליטה בחסימת האפליקציות בזמן נהיגה."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"מנהל ניווט"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"דיווח על נתוני ניווט לאשכול הכלים"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"עיבוד ישיר לאשכול כלים"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"מתן הרשאה לאפליקציה להכריז על הצגת פעיליויות באשכול הכלים"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"שליטה באשכול הכלים"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"הפעלת אפליקציות באשכול הכלים"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"עיבוד של אשכול הכלים"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"קבלת נתונים של אשכול כלים"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"הגדרת הגבלות של חוויית משתמש (UX)"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"הגדרת הגבלות של חוויית משתמש (UX)"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"שירות הקלט של הרכב"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"ניהול אירועי קלט"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"פרוטוקול CAN bus נכשל"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"פרוטוקול CAN bus לא מגיב. יש לנתק ולחבר שוב את מערכת הסטריאו ולהתניע מחדש את הרכב"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"מטעמי בטיחות, פעילות זו אינה זמינה בזמן נהיגה.\nכדי להמשיך, צריך להמתין עד לחניית הרכב."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"כדי להפעיל מחדש את האפליקציה במצב בטוח, יש ללחוץ על <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
+    <string name="exit_button" msgid="5829638404777671253">"הקודם"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Debug Info"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"נתוני אבחון"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"קריאת נתוני אבחון מהרכב"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"נתוני אבחון"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"מחיקת נתוני אבחון מהרכב"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"מפרסם נתוני VMS"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"פרסום הודעות VMS"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"מנוי לנתוני VMS"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"הרשמה להודעות VMS"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"מעקב אחר אחסון הבזק"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"מעקב אחר השטח האחסון הפנוי בכונן ההבזק"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"מצב נהיגה"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"האזנה לשינויים במצב הנהיגה"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"נתונים מפורטים של המנוע"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"גישה למידע המפורט של מנוע הרכב"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"שקעי טעינה"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"גישה לשקעי הטעינה"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"פרטי זיהוי של הרכב"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"גישה לפרטי הזיהוי של הרכב"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"דלתות הרכב"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"שליטה בדלתות הרכב"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"חלונות הרכב"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"שליטה בחלונות הרכב"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"מראות הרכב"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"שליטה במראות הרכב"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"מושבי הרכב"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"שליטה במושבי הרכב"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"נתונים בסיסיים של הרכב"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"גישה לנתונים הבסיסיים של הרכב"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"הפנסים החיצוניים של הרכב"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"גישה למצב הפנסים החיצוניים של הרכב"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"הפנסים החיצוניים של הרכב"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"שליטה בפנסים החיצוניים של הרכב"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"הטמפרטורה החיצונית של הרכב"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"גישה לטמפרטורה החיצונית של הרכב"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"צמיגי הרכב"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"גישה לנתוני הצמיגים של הרכב"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"מערכת ההינע של הרכב"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"גישה למידע על מערכת ההינע של הרכב"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"מצב הטעינה של הרכב"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"גישה למצב הטעינה של הרכב"</string>
+</resources>
diff --git a/service/res/values-ja/config.xml b/service/res/values-ja/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-ja/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-ja/strings.xml b/service/res/values-ja/strings.xml
new file mode 100644
index 0000000..85e4f47
--- /dev/null
+++ b/service/res/values-ja/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"自動車の情報"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"車の情報にアクセスします。"</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"車のキャビン"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"車のアクセサリ(ドア、ミラー、シート、ウィンドウなど)にアクセスします。"</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"車載カメラ"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"車載カメラにアクセスします。"</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"車のエネルギー"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"車のエネルギー情報にアクセスします。"</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"車のエアコン ユニット"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"車のエアコン ユニットにアクセスします。"</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"自動車の走行距離"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"車の走行距離情報にアクセスします。"</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"自動車の速度"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"車の速度にアクセスします。"</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"車両の動態"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"車の動態情報にアクセスします"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"自動車のメーカー チャンネル"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"車のメーカー チャンネルにアクセスして仕様情報をやり取りします。"</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"カーラジオ"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"カーラジオにアクセスします。"</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"車での投影"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"カーオーディオの音量"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"カーオーディオの設定"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"車のディスプレイに電話インターフェースを映します。"</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"車両ハードウェア抽象化レイヤのエミュレート"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"内部テスト用に車の車両ハードウェア抽象化レイヤをエミュレートします。"</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"カーオーディオの音量を調節します。"</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"カーオーディオの設定を調節します。"</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"アプリのブロック"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"運転中のアプリのブロックを制御します。"</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"ナビゲーション マネージャー"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"ナビゲーション データをインストルメント クラスタにレポートします"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"インストルメント クラスタに直接レンダリング"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"アプリがインストルメント クラスタに表示されるアクティビティを指定できるようにします"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"インストルメント クラスタ制御"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"インストルメント クラスタでアプリを起動します"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"インストルメント クラスタのレンダリング"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"インストルメント クラスタ データを受信します"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"UX 制限の設定"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"UX 制限を設定します"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"車の入力サービス"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"入力イベントを処理します"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"CAN バスでエラーが発生しました"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN バスが応答しません。ヘッドユニット ボックスのプラグを抜いて接続し直し、車を再始動してください"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"安全上の理由により、運転中はこのアクティビティをご利用いただけません。\n続行するには駐車してください。"</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"アプリをセーフモードで再起動するには、<xliff:g id="EXIT_BUTTON">%s</xliff:g> を選択します。"</string>
+    <string name="exit_button" msgid="5829638404777671253">"戻る"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"デバッグ情報"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"診断データ"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"車から診断データを読み取ります"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"診断データ"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"車から診断データを消去します"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"VMS パブリッシャー"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"VMS メッセージを送信します"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"VMS サブスクライバー"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"VMS メッセージに登録します"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"フラッシュ ストレージのモニタリング"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"フラッシュ ストレージの使用状況をモニタリングします"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"車の状態"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"車の状態が変わると通知されます"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"エンジンの詳細情報"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"車の詳細なエンジン情報にアクセスします"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"エネルギー ポート"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"エネルギー ポートにアクセスします"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"車の ID"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"車の ID にアクセスします"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"車のドア"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"車のドアを制御します"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"カーウィンドウ"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"カーウィンドウを調節します"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"カーミラー"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"カーミラーを調節します"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"カーシート"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"カーシートを調節します"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"車の基本情報"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"車の基本情報にアクセスします"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"車のエクステリア ライト"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"車のエクステリア ライトの状態にアクセスします"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"車のエクステリア ライト"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"車のエクステリア ライトを調節します"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"車の外気温度"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"車の外気温度を確認します"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"車のタイヤ"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"車のタイヤ情報にアクセスします"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"車のパワートレイン"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"車のパワートレイン情報にアクセスします"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"車の電力"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"車の電力状態にアクセスします"</string>
+</resources>
diff --git a/service/res/values-ka/config.xml b/service/res/values-ka/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-ka/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-ka/strings.xml b/service/res/values-ka/strings.xml
new file mode 100644
index 0000000..74c6bfd
--- /dev/null
+++ b/service/res/values-ka/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"მანქანის ინფორმაცია"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"თქვენი მანქანის ინფორმაციაზე წვდომა."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"მანქანის სალონი"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"თქვენი მანქანის აქსესუარებზე (მათ შორის, კარებზე, სარკეებზე, სავარძლებსა და ფანჯრებზე) წვდომა."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"მანქანის კამერა"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"თქვენი მანქანის კამერებზე წვდომა."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"მანქანის ენერგორესურსები"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"თქვენი მანქანის ენერგორესურსების ინფორმაციაზე წვდომა."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"მანქანის HVAC-სისტემა"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"თქვენი მანქანის HVAC (გათბობა, ვენტილაცია და ჰაერის კონდიცირება) სისტემაზე წვდომა."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"მანქანის გარბენი"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"თქვენი მანქანის გარბენის შესახებ ინფორმაციაზე წვდომა."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"მანქანის სიჩქარე"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"თქვენი მანქანის სიჩქარეზე წვდომა."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"ავტომობილის დინამიკური მდგომარეობა"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"თქვენი მანქანის დინამიკურ მდგომარეობაზე წვდომა"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"მანქანის მწარმოებლის არხი"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"თქვენი მანქანის მწარმოებლის არხზე წვდომა მანქანასთან დაკავშირებული ინფორმაციის მიმოცვლისთვის."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"მანქანის რადიო"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"თქვენი მანქანის რადიოზე წვდომა."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"მანქანის ეკრანზე პროეცირება"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"მანქანაში აუდიოს ხმის სიძლიერე"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"მანქანის აუდიოს პარამეტრები"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"ტელეფონის ინტერფეისის პროეცირება მანქანის ეკრანზე."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"ავტომობილის HAL-ინტერფეისის ემულაცია"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"თქვენი მანქანის HAL-ინტერფეისის ემულაცია შიდა ტესტირების მიზნით."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"თქვენი მანქანის აუდიოს ხმის სიძლიერის გაკონტროლება."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"თქვენი მანქანის აუდიოს პარამეტრების გაკონტროლება."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"აპლიკაციების დაბლოკვა"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"მანქანის მართვისას აპლიკაციების დაბლოკვის გაკონტროლება."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"ნავიგაციის მენეჯერი"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"ხელსაწყოთა პანელისთვის ნავიგაციის მონაცემების შეტყობინება"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"პირდაპირი რენდერი ხელსაწყოთა პანელზე"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"აპლიკაციისთვის იმ აქტივობის განსაზღვრის დაშვება, რომელიც უნდა გამოჩნდეს ხელსაწყოთა პანელზე"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"ხელსაწყოთა პანელის გაკონტროლება"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"აპების გაშვება ხელსაწყოთა პანელზე"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"რენდერი ხელსაწყოთა პანელზე"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"ხელსაწყოთა პანელის მონაცემების მიღება"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"UX შეზღუდვების კონფიგურაცია"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"UX შეზღუდვების კონფიგურაცია"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"მანქანის შეყვანის სერვისი"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"შეტანის მოვლენების დამუშავება"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"წარმოიშვა CAN-სალტის შეცდომა"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN-სალტე არ რეაგირებს. გამოაერთეთ და ხელახლა მიაერთეთ საინფორმაციო-გასართობი მოწყობილობა, შემდეგ კი ხელახლა დაქოქეთ მანქანა"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"ეს აქტივობა მიუწვდომელია მანქანის მართვისას, უსაფრთხოების მოსაზრებებიდან გამომდინარე.\nგთხოვთ, ჯერ გააჩეროთ მანქანა."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"აპის უსაფრთხო რეჟიმში გასაშვებად აირჩიეთ „<xliff:g id="EXIT_BUTTON">%s</xliff:g>“."</string>
+    <string name="exit_button" msgid="5829638404777671253">"უკან"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"გამართვის ინფორმაცია"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"დიაგნოსტიკური მონაცემები"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"დიაგნოსტიკური მონაცემების წაკითხვა მანქანიდან"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"დიაგნოსტიკური მონაცემები"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"დიაგნოსტიკური მონაცემების გასუფთავება მანქანიდან"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"VMS-შეტყობინებების გამომქვეყნებელი"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"VMS-შეტყობინებების გამოქვეყნება"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"VMS-შეტყობინებების გამომწერი"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"VMS-შეტყობინებების გამოწერა"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"ფლეშ-მეხსიერების მონიტორინგი"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"ფლეშ-მეხსიერების გამოყენების მონიტორინგი"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"მანქანის მართვის მდგომარეობა"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"მანქანის მართვის მდგომარეობის ცვლილებებისთვის თვალის მიდევნება"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"ძრავას დეტალური ინფორმაცია"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"თქვენი მანქანის ძრავას დეტალურ ინფორმაციაზე წვდომა"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"ენერგოპორტები"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"ენერგოპორტებზე წვდომა"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"მანქანის საიდენტიფიკაციო მონაცემები"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"მანქანის საიდენტიფიკაციო მონაცემებზე წვდომა"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"მანქანის კარები"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"მანქანის კარების გაკონტროლება"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"მანქანის ფანჯრები"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"მანქანის ფანჯრების გაკონტროლება"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"მანქანის სარკეები"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"მანქანის სარკეების გაკონტროლება"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"მანქანის სავარძლები"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"მანქანის სავარძლების გაკონტროლება"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"მანქანის ძირითადი ინფორმაცია"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"მანქანის ძირითად ინფორმაციაზე წვდომა"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"მანქანის გარე განათება"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"მანქანის გარე განათების მდგომარეობაზე წვდომა"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"მანქანის გარე განათება"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"მანქანის გარე განათების გაკონტროლება"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"მანქანის გარე ტემპერატურა"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"მანქანის გარე ტემპერატურაზე წვდომა"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"მანქანის საბურავები"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"მანქანის საბურავების შესახებ ინფორმაციაზე წვდომა"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"მანქანის ძალური აგრეგატი"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"მანქანის ძალური აგრეგატის ინფორმაციაზე წვდომა"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"მანქანის ელკვება"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"მანქანის ელკვების მდგომარეობაზე წვდომა"</string>
+</resources>
diff --git a/service/res/values-kk/config.xml b/service/res/values-kk/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-kk/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-kk/strings.xml b/service/res/values-kk/strings.xml
new file mode 100644
index 0000000..11ff6f6
--- /dev/null
+++ b/service/res/values-kk/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Көлік туралы ақпарат"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Көлік туралы ақпаратты көруге болады."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Көлік салоны"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Көліктің есіктері, айналары, орындықтары және терезелері сияқты керек-жарақтарын басқаруға болады."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Көлік камерасы"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Көліктің камераларын пайдалануға болады."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Көліктің қуаты"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Көліктің қуаты туралы ақпаратты көруге болады."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"Көліктің климат басқару жүйесі"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Көліктің кондиционерін пайдалануға болады."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Көлік километражы"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Көліктің километражы туралы ақпаратты көруге болады."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Көлік жылдамдығы"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Көлік жылдамдығын көруге болады."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Көліктің жүріп бара жатқандағы күйі"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Көліктің жүріп бара жатқандағы күйін көруге болады"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Көлік жеткізушісінің арнасы"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Көлік туралы ақпарат алмасу үшін көлік жеткізушісінің арнасына кіруіңізге болады."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Көлік радиосы"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Көліктің радиосын пайдалануға болады."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Көлік проекциясы"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Көліктегі аудионың дыбыс деңгейі"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Көліктің аудио параметрлері"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Көлік дисплейінде телефон интерфейсін көруге болады."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Көліктің HAL интерфейсін қолдану"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Ішкі сынақтар үшін көліктің HAL интерфейсін қолдануға болады."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Көліктегі аудионың дыбыс деңгейін басқаруға болады."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Көліктің аудио параметрлерін басқару"</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Қолданбаны бөгеу"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Жүргізу кезінде қолданбаны блоктау функциясын басқаруға болады."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Навигация басқарушысы"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Навигациялық деректерді құралдар кластеріне хабарлауға болады"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Құралдар кластеріне тікелей рендеринг"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Қолданбаға құралдар кластерінде көрсетілетін әрекеттерді мәлімдеуге рұқсат ету"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Құралдар кластерін басқару"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Құралдар кластеріндегі қолданбаларды іске қосу"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Құралдар кластерін көрсету"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Құралдар кластері туралы дерек алу"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"UX шектеулеріне қатысты конфигурация"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"UX шектеулерін конфигурациялау"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Көліктің дерек енгізу қызметі"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Деректерді енгізу оқиғаларын басқаруға болады"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"CAN шинасы істен шықты"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN шинасы жауап бермейді. Негізгі модульді ажыратып, қайта жалғаңыз және көлікті қайта оталдырыңыз"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"Көлік жүргізгенде, қауіпсіздік мақсатында бұл әрекетті орындау мүмкін емес.\nЖалғастыру үшін көлікті тұраққа қойыңыз."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"Қолданбаны қауіпсіз күйде қайта іске қосу үшін <xliff:g id="EXIT_BUTTON">%s</xliff:g> түймесін басыңыз."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Артқа"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Түзету"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Диагностикалық дерек"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Көліктен диагностикалық деректі оқуға болады"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Диагностикалық дерек"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Көліктен диагностикалық деректерді өшіріп тастауға болады"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"VMS жариялаушы"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"VMS хабарларын жариялау"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"VMS жазылушысы"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"VMS хабарларына жазылуға болады"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Флэш жадын бақылау"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Флэш жадының қолданысын бақылау"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Көлік жүргізу күйі"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Жүргізу кезіндегі өзгерістерді тыңдауға болады"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Қозғалтқыш туралы толық ақпаратты көруге болады"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Көлігіңіздің қозғалтқышы туралы толық ақпарат көруге болады"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Жанармай құю немесе зарядтау порттары"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Жанармай құю немесе зарядтау порттарын көруге болады"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Көліктің идентификациялық нөмірі"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Көліктің идентификациялық нөмірін көруге болады"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Көлік есіктері"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Көліктің есіктерін басқаруға болады"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Көлік терезелері"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Көліктің терезелерін басқаруға болады"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Көлік айналары"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Көліктің айналарын басқаруға болады"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Көлік орындықтары"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Көліктің орындықтарын басқаруға болады"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Көлік туралы негізгі ақпарат"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Көлік туралы негізгі ақпаратты көруге болады"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Көліктің сыртқы шамдары"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Көліктің сыртқы шамдарының күйін көруге болады"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Көліктің сыртқы шамдары"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Көліктің сыртқы шамдарын басқаруға болады"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Көлік сыртындағы температура"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Көлік сыртындағы температура өзгерісін көруге болады"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Көлік шиналары"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Көліктің шиналары туралы ақпаратты көруге болады"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Көлік трансмиссиясы"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Көлік трансмиссиясы туралы ақпаратты көруге болады"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Көліктің қуаты"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Көліктің қуатын көруге болады"</string>
+</resources>
diff --git a/service/res/values-km/config.xml b/service/res/values-km/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-km/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-km/strings.xml b/service/res/values-km/strings.xml
new file mode 100644
index 0000000..b1b1c29
--- /dev/null
+++ b/service/res/values-km/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"ព័ត៌មាន​រថយន្ត"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"ចូលប្រើ​ព័ត៌មាន​របស់រថយន្តអ្នក។"</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"កាប៊ីន​រថយន្ត"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"ចូលប្រើ​គ្រឿងបរិក្ខារ​របស់រថយន្តអ្នក រួមមាន​ទ្វារ កញ្ចក់ កៅអី និងបង្អួច។"</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"កាមេរ៉ា​រថយន្ត"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"ចូលប្រើ​កាមេរ៉ារបស់​រថយន្តអ្នក។"</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"ថាមពល​របស់រថយន្ត"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"ចូលប្រើ​ព័ត៌មាន​ថាមពលរបស់​រថយន្តអ្នក។"</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"ប្រព័ន្ធកម្តៅ ខ្យល់ និងម៉ាស៊ីនត្រជាក់​របស់រថយន្ត"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"ចូលប្រើ​ប្រព័ន្ធកម្តៅ ខ្យល់ និងម៉ាស៊ីនត្រជាក់​របស់រថយន្តអ្នក។"</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"រយៈចម្ងាយរត់​របស់រថយន្ត"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"ចូលប្រើ​ព័ត៌មាន​អំពីរយៈចម្ងាយរត់​របស់រថយន្តអ្នក។"</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"ល្បឿន​រថយន្ត"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"ចូលប្រើ​ល្បឿន​របស់រថយន្តអ្នក។"</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"ស្ថានភាព​ឌីណាមិច​របស់យានជំនិះ"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"ចូលប្រើ​ស្ថានភាព​ឌីណាមិច​របស់រថយន្ត​អ្នក"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"បណ្តាញ​អ្នកលក់​រថយន្ត"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"ចូលប្រើ​បណ្ដាញ​អ្នកលក់​របស់រថយន្តអ្នក ដើម្បី​ផ្លាស់ប្ដូរ​ព័ត៌មាន​ជាក់លាក់​ទាក់ទង​នឹងរថយន្ត។"</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"វិទ្យុ​រថយន្ត"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"ចូលប្រើ​វិទ្យុ​របស់រថយន្ត​អ្នក។"</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"ការបញ្ចាំង​របស់រថយន្ត"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"កម្រិតសំឡេង​របស់រថយន្ត"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"ការកំណត់សំឡេង​របស់រថយន្ត"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"បញ្ចាំង​ផ្ទៃទូរសព្ទ​នៅលើ​ឧបករណ៍បញ្ចាំង​របស់រថយន្ត។"</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"ត្រាប់តាម HAL នៃយានជំនិះ"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"ត្រាប់តាម HAL នៃយានជំនិះ​របស់រថយន្តអ្នក ក្នុងបំណង​ធ្វើតេស្តផ្នែកខាងក្នុង។"</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"គ្រប់គ្រង​កម្រិតសំឡេង​របស់រថយន្ត​អ្នក។"</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"គ្រប់គ្រង​ការកំណត់​សំឡេង​របស់​រថយន្តអ្នក។"</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"ការទប់ស្កាត់​កម្មវិធី"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"គ្រប់គ្រង​ការទប់ស្កាត់​កម្មវិធី ខណៈពេល​កំពុងបើកបរ។"</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"អ្នកគ្រប់គ្រង​ការរុករក"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"រាយការណ៍​ទិន្នន័យ​រុករក​ទៅ​បណ្ដុំ​ឧបករណ៍"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"ការបំប្លែង​ផ្ទាល់ទៅ​បណ្ដុំឧបករណ៍"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"អនុញ្ញាតឱ្យ​កម្មវិធី​ប្រកាស​សកម្មភាព ដែលត្រូវបង្ហាញ​នៅក្នុង​បណ្ដុំឧបករណ៍"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"ការគ្រប់គ្រង​បណ្ដុំឧបករណ៍"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"ចាប់ផ្ដើម​កម្មវិធី​នៅក្នុង​បណ្ដុំឧបករណ៍"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"ការបំប្លែង​បណ្ដុំឧបករណ៍"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"ទទួលបាន​ទិន្នន័យ​បណ្ដុំឧបករណ៍"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"ការកំណត់រចនាសម្ព័ន្ធ​ការរឹតបន្តឹង UX"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"កំណត់រចនាសម្ព័ន្ធ​ការរឹតបន្តឹង UX"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"សេវាកម្ម​បញ្ចូលរបស់​រថយន្ត"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"គ្រប់គ្រង​ព្រឹត្តិការណ៍​បញ្ចូល"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"មិនអាច​ដំណើរការ CAN bus បានទេ"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN bus មិនឆ្លើយតបទេ។ សូមផ្ដាច់ រួចភ្ជាប់​ប្រអប់​ឧបករណ៍ចាក់តន្ត្រី​ម្តងទៀត បន្ទាប់មក​បញ្ឆេះ​រថយន្ត​ឡើងវិញ"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"ដើម្បី​សុវត្ថិភាព​របស់អ្នក សកម្មភាពនេះ​មិនអាចប្រើបានទេ ពេល​កំពុងបើកបរ។\nដើម្បីបន្ត សូមរង់ចាំ​រហូតទាល់តែ​អ្នកចត​រថយន្តរួច។"</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"ដើម្បី​ចាប់ផ្តើមឡើងវិញ​ដោយប្រើ​មុខងារកម្មវិធី​ដែលមានសុវត្ថិភាព សូមជ្រើសរើស <xliff:g id="EXIT_BUTTON">%s</xliff:g> ។"</string>
+    <string name="exit_button" msgid="5829638404777671253">"ថយក្រោយ"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"ព័ត៌មានជួសជុល"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"ទិន្នន័យ​វិភាគ"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"អាន​ទិន្នន័យ​វិភាគពី​រថយន្ត"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"ទិន្នន័យ​វិភាគ"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"សម្អាត​ទិន្នន័យ​វិភាគពី​រថយន្ត"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"អ្នកបោះផ្សាយ VMS"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"បោះផ្សាយ​សារ vms"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"អ្នកជាវ VMS"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"ជាវ​សារ vms"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"ការតាមដាន​ឧបករណ៍ផ្ទុក​ទិន្នន័យ"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"តាមដាន​ការប្រើប្រាស់​ឧបករណ៍ផ្ទុក​ទិន្នន័យ"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"ស្ថានភាព​បើកបរ"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"ស្តាប់​ការផ្លាស់ប្តូរ​ស្ថានភាព​បើកបរ"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"ព័ត៌មានលម្អិត​របស់ម៉ាស៊ីន"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"ចូលប្រើ​ព័ត៌មាន​លម្អិត​នៃម៉ាស៊ីនរបស់​រថយន្តអ្នក"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"រន្ធ​ថាមពល"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"ចូលប្រើ​រន្ធ​ថាមពល"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"ការកំណត់​អត្តសញ្ញាណរបស់​រថយន្ត"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"ចូលប្រើ​ការកំណត់អត្តសញ្ញាណ​របស់រថយន្ត"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"ទ្វារ​របស់រថយន្ត"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"គ្រប់គ្រង​ទ្វាររបស់រថយន្ត"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"បង្អួច​រថយន្ត"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"គ្រប់គ្រង​បង្អួច​របស់រថយន្ត"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"កញ្ចក់​របស់រថយន្ត"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"គ្រប់គ្រង​កញ្ចក់របស់​រថយន្ត"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"កៅអី​របស់​រថយន្ត"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"គ្រប់គ្រង​កៅអីរបស់​រថយន្ត"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"ព័ត៌មាន​មូលដ្ឋាន​របស់រថយន្ត"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"ចូលប្រើ​ព័ត៌មាន​មូលដ្ឋាន​របស់រថយន្ត"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"អំពូលភ្លើង​ផ្នែកខាងក្រៅ​រថយន្ត"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"ចូលប្រើ​ស្ថានភាពអំពូលភ្លើង​ផ្នែកខាងក្រៅ​របស់រថយន្ត"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"អំពូលភ្លើង​ផ្នែកខាងក្រៅ​រថយន្ត"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"គ្រប់គ្រង​អំពូលភ្លើង​ផ្នែកខាងក្រៅ​របស់រថយន្ត"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"សីតុណ្ហភាព​ផ្នែកខាងក្រៅ​របស់រថយន្ត"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"ចូលប្រើ​សីតុណ្ហភាព​ផ្នែកខាងក្រៅរបស់​រថយន្ត"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"សំបកកង់​របស់​រថយន្ត"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"ចូលប្រើ​ព័ត៌មាន​អំពីសំបកកង់​របស់រថយន្ត"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"ប្រព័ន្ធម៉ាស៊ីន​របស់រថយន្ត"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"ចូលប្រើ​ព័ត៌មាន​នៃប្រព័ន្ធម៉ាស៊ីន​របស់រថយន្ត"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"ថាមពល​របស់រថយន្ត"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"ចូលប្រើ​ស្ថានភាព​ថាមពល​របស់រថយន្ត"</string>
+</resources>
diff --git a/service/res/values-kn/config.xml b/service/res/values-kn/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-kn/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-kn/strings.xml b/service/res/values-kn/strings.xml
new file mode 100644
index 0000000..a040550
--- /dev/null
+++ b/service/res/values-kn/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"ಕಾರಿನ ಮಾಹಿತಿ"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"ನಿಮ್ಮ ಕಾರಿನ ಮಾಹಿತಿಯನ್ನು ಪಡೆಯಿರಿ"</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"ಕಾರಿನ ಕ್ಯಾಬಿನ್"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"ಬಾಗಿಲುಗಳು, ಕನ್ನಡಿಗಳು, ಆಸನಗಳು ಮತ್ತು ಕಿಟಿಕಿಗಳು ಸಹಿತ ನಿಮ್ಮ ಕಾರಿನ ಭಾಗಗಳನ್ನು ನಿಯಂತ್ರಿಸಿ."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"ಕಾರಿನ ಕ್ಯಾಮರ"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"ನಿಮ್ಮ ಕಾರಿನ ಕ್ಯಾಮರವನ್ನು(ಗಳನ್ನು) ಪ್ರವೇಶಿಸಿ."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"ಕಾರಿನ ಶಕ್ತಿ"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"ನಿಮ್ಮ ಕಾರಿನ ಶಕ್ತಿ ಮಾಹಿತಿಯನ್ನು ಪಡೆಯಿರಿ."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"ಕಾರಿನ ಎಚ್‌ವಿಎಸಿ"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"ಕಾರಿನ ಎಚ್‌ವಿಎಸಿಯ ಮಾಹಿತಿನ್ನು ಪಡೆಯಿರಿ."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"ಕಾರಿನ ಮೈಲೇಜ್"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"ನಿಮ್ಮ ಕಾರ್‌ನ ಮೈಲೇಜ್‌‌ ಮಾಹಿತಿಯನ್ನು ಪಡೆಯಿರಿ."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"ಕಾರಿನ ವೇಗ"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"ಕಾರಿನ ವೇಗದ ಮಾಹಿತಿಯನ್ನು ಪಡೆಯಿರಿ."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"ವಾಹನದ ಚಲನಶೀಲ ಸ್ಥಿತಿ"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"ಕಾರಿನ ಚಲನಶೀಲ ಸ್ಥಿತಿಯ ಮಾಹಿತಿಯನ್ನು ಪಡೆಯಿರಿ"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"ಕಾರಿನ ಮಾರಾಟಗಾರ ಚಾನಲ್"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"ನಿಮ್ಮ ಕಾರಿನ ನಿರ್ದಿಷ್ಟ ಮಾಹಿತಿಯನ್ನು ವಿನಿಮಯ ಮಾಡಿಕೊಳ್ಳಲು, ನಿಮ್ಮ ಕಾರಿನ ಮಾರಾಟಗಾರ ಚಾನಲ್ ಅನ್ನು ಪ್ರವೇಶಿಸಿ"</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"ಕಾರಿನ ರೇಡಿಯೊ"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"ಕಾರಿನ ರೇಡಿಯೋವನ್ನು ನಿಯಂತ್ರಿಸಿ."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"ಕಾರಿನ ಪ್ರೊಜೆಕ್ಷನ್"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"ಕಾರಿನ ಆಡಿಯೋ ವಾಲ್ಯೂಮ್"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"ಕಾರಿನ ಆಡಿಯೋ ಆಯ್ಕೆಗಳು"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"ಫೋನ್ ಇಂಟರ್‌ಫೇಸ್ ಅನ್ನು ಕಾರಿನ ಪರದೆಯಲ್ಲಿ ಪ್ರದರ್ಶಿಸಿ."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"ವಾಹನ ಎಚ್‌ಎಎಲ್ ಅನ್ನು ಅನುಕರಿಸು"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"ನಿಮ್ಮ ಕಾರಿನ ವಾಹನ ಎಚ್‌ಎಎಲ್ ಅನ್ನು ಆಂತರಿಕ ಪರೀಕ್ಷೆಗಾಗಿ ಅನುಕರಿಸಿ"</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"ಕಾರಿನ ಆಡಿಯೋ ವಾಲ್ಯೂಮ್ ಅನ್ನು ನಿಯಂತ್ರಿಸು."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"ನಿಮ್ಮ ಕಾರಿನ ಆಡಿಯೋ ಆಯ್ಕೆಗಳನ್ನು ನಿಯಂತ್ರಿಸಿ."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"ಅಪ್ಲಿಕೇಶನ್ ನಿರ್ಬಂಧ"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"ಅಪ್ಲಿಕೇಶನ್ ನಿರ್ಬಂಧನೆಯನ್ನು ವಾಹನ ಚಲಾಯಿಸುತ್ತಿರುವಾಗ ನಿಯಂತ್ರಿಸಿ."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"ನ್ಯಾವಿಗೇಷನ್ ಮ್ಯಾನೇಜರ್"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"ನ್ಯಾವಿಗೇಶನ್ ಮಾಹಿತಿಯನ್ನು ಸಲಕರಣೆ ಸಂಚಯಕ್ಕೆ ವರದಿ ಮಾಡಿ"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"ಸಲಕರಣೆ ಸಂಚಯಕ್ಕೆ ನೇರ ವರ್ಗಾವಣೆ"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"ಸಲಕರಣೆ ಸಂಚಯದಲ್ಲಿ ಚಟುವಟಿಕೆಗಳ ಘೋಷಣೆಯನ್ನು ಪ್ರದರ್ಶಿಸಲು ಅಪ್ಲಿಕೇಶನ್‌ಗೆ ಅನುವು ಮಾಡಿ"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"ಸಲಕರಣೆ ಸಂಚಯ ನಿಯಂತ್ರಣ"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"ಸಲಕರಣೆ ಸಂಚಯದಲ್ಲಿ ಆಪ್‌ಗಳನ್ನು ಪ್ರಾರಂಭಿಸಿ"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"ಸಲಕರಣೆ ಸಂಚಯ ತೋರಿಸು"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"ಸಲಕರಣೆ ಸಂಚಯ ಮಾಹಿತಿಯನ್ನು ಸ್ವೀಕರಿಸು"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"UX ನಿರ್ಬಂಧಗಳ ಸಂರಚನೆ"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"ಯುಎಕ್ಸ್ ನಿರ್ಬಂಧಗಳನ್ನು ಸಂರಚಿಸು"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"ಕಾರಿನ ಇನ್‌ಪುಟ್ ಸೇವೆ"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"ಊಡಿಕೆ ಘಟನೆಗಳನ್ನು ನಿಯಂತ್ರಿಸಿ"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"ಸಿಎಎನ್ ಬಸ್ ಕೆಟ್ಟಿದೆ"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN ಬಸ್ ಸ್ಪಂದಿಸುತ್ತಿಲ್ಲ. ಹೆಡ್ ಯುನಿಟ್ ಪೆಟ್ಟಿಗೆಯನ್ನು ಅನ್‌ಪ್ಲಗ್ ಮಾಡಿ ಮತ್ತೆ ಪ್ಲಗ್ ಮಾಡಿ ಕಾರನ್ನು ಪುನರಾರಂಭಿಸಿ"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"ನಿಮ್ಮ ಸುರಕ್ಷೆಗಾಗಿ, ಈ ಚಟುವಟಿಕೆಯು ವಾಹನ ಚಲಾಯಿಸುತ್ತಿರುವಾಗ ಲಭ್ಯವಿಲ್ಲ. ಮುಂದುವರೆಯಲು \n ಮಾಡಿ, ನೀವು ಪಾರ್ಕ್ ಮಾಡುವ ತನಕ ಕಾಯಿರಿ."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"ಆಪ್‌ನ ಸುರಕ್ಷೆ ಗುಣಲಕ್ಷಣಗಳನ್ನು ಒಳಗೊಂಡು ಮತ್ತೆ ಪ್ರಾರಂಭಿಸಲು, <xliff:g id="EXIT_BUTTON">%s</xliff:g> ಆಯ್ಕೆ ಮಾಡಿ."</string>
+    <string name="exit_button" msgid="5829638404777671253">"ಹಿಂದಕ್ಕೆ"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"ಡೀಬಗ್ ಮಾಹಿ"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"ಪರಿಶೀಲನೆಯ ಮಾಹಿತಿ"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"ಕಾರಿನಿಂದ ಅದರ ಪರಿಶೀಲನೆಯ ಮಾಹಿತಿಯನ್ನು ಪಡೆಯಿರಿ"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"ಪರಿಶೀಲನೆಯ ಮಾಹಿತಿ"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"ಕಾರಿನಿಂದ ಪರಿಶೀಲನಾ ಮಾಹಿತಿಯನ್ನು ಅಳಿಸಿ"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"ವಿಎಂಎಸ್ ಪ್ರಕಾಶಕ"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"ವಿಎಂಎಸ್ ಸಂದೇಶಗಳನ್ನು ಪ್ರಕಟಿಸು"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"VMS ಸಬ್‌ಸ್ಕ್ರೈಬರ್"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"vms ಸಂದೇಶಗಳಿಗೆ ಸಬ್‌ಸ್ಕ್ರೈಬರ್ ಆಗಿ"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"ಫ್ಲಾಶ್ ಸಂಗ್ರಹದ ಉಸ್ತುವಾರಿ"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"ಫ್ಲಾಶ್ ಸಂಗ್ರಹ ಬಳಕೆಯ ಉಸ್ತುವಾರಿ"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"ವಾಹನ ಚಾಲನಾ ಸ್ಥಿತಿ"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"ಚಾಲನೆಯ ಸ್ಥಿತಿಯ ಬದಲಾವಣೆಯನ್ನು ಆಲಿಸಿ"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"ಇಂಜಿನ್ ವಿವರ"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"ಕಾರಿನ ಇಂಜಿನಿನ ವಿವರವಾದ ಮಾಹಿತಿಯನ್ನು ಪಡೆಯು"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"ಶಕ್ತಿ ಕಿಂಡಿಗಳು"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"ಶಕ್ತಿ ಕಿಂಡಿಗಳನ್ನು ಪ್ರವೇಶಿಸಿ"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"ಕಾರು ಪರಿಚಯ"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"ಕಾರಿನ ಗುರುತನ್ನು ಪಡೆಯಿರಿ"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"ಕಾರಿನ ಬಾಗಿಲುಗಳು"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"ಕಾರಿನ ಬಾಗಿಲುಗಳನ್ನು ನಿಯಂತ್ರಿಸಿ"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"ಕಾರಿನ ಕಿಟಿಕಿಗಳು"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"ಕಾರಿನ ಕಿಟಿಕಿಗಳನ್ನು ನಿಯಂತ್ರಿಸಿ"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"ಕಾರಿನ ಕನ್ನಡಿಗಳು"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"ಕಾರಿನ ಕನ್ನಡಿಗಳನ್ನು ನಿಯಂತ್ರಿಸಿ"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"ಕಾರಿನ ಆಸನಗಳು"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"ಕಾರಿನ ಆಸನಗಳನ್ನು ನಿಯಂತ್ರಿಸಿ"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"ಕಾರಿನ ಮೂಲಭೂತ ಮಾಹಿತಿ"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"ಕಾರಿನ ಮೂಲಭೂತ ಮಾಹಿತಿ ಪಡೆಯಿರಿ"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"ಕಾರಿನ ಬಾಹ್ಯ ದೀಪಗಳು"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"ಕಾರಿನ ಬಾಹ್ಯ ದೀಪಗಳ ಸ್ಥಿತಿಯ ಮಾಹಿತಿಯನ್ನು ಪಡೆಯಿರಿ"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"ಕಾರಿನ ಬಾಹ್ಯ ದೀಪಗಳು"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"ಕಾರಿನ ಬಾಹ್ಯ ದೀಪಗಳನ್ನು ನಿಯಂತ್ರಿಸಿ"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"ಕಾರಿನ ಬಾಹ್ಯ ತಾಪಮಾನ"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"ಕಾರಿನ ಬಾಹ್ಯ ತಾಪಮಾನವನ್ನು ತಿಳಿಯಿರಿ"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"ಕಾರಿನ ಟಯರ್‌ಗಳು"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"ಕಾರಿನ ಟಯರ್ ಮಾಹಿತಿಯನ್ನು ಪಡೆಯಿರಿ"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"ಕಾರ್ ಪವರ್‌ಟ್ರೈನ್"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"ಕಾರಿನ ಪವರ್‌ಟ್ರೈನ್ ಮಾಹಿತಿಯನ್ನು ಪಡೆಯು"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"ಕಾರಿನ ಶಕ್ತಿ"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"ಕಾರಿನ ಶಕ್ತಿಯ ಸ್ಥಿತಿಯ ಮಾಹಿತಿಯನ್ನು ಪಡೆಯಿರಿ"</string>
+</resources>
diff --git a/service/res/values-ko/config.xml b/service/res/values-ko/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-ko/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-ko/strings.xml b/service/res/values-ko/strings.xml
new file mode 100644
index 0000000..cc9d6c0
--- /dev/null
+++ b/service/res/values-ko/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"차량 정보"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"차량 정보에 액세스"</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"차량 실내"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"차량의 도어, 미러, 시트, 윈도와 같은 부속품에 액세스"</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"차량 카메라"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"차량 카메라에 액세스"</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"차량 에너지"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"차량 에너지 정보에 액세스"</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"차량 공조기"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"차량 공조기에 액세스합니다."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"차량 주행거리"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"차량 주행거리 정보에 액세스"</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"차량 속도"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"차량 속도에 액세스"</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"차량 운동 상태"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"차량 운동 상태에 액세스"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"차량 공급업체 채널"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"차량 정보 교환을 위해 차량 공급업체 채널에 액세스"</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"차량 라디오"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"차량 라디오에 액세스"</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"차량 프로젝션"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"차량 오디오 볼륨"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"차량 오디오 설정"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"차량 디스플레이에 스마트폰 인터페이스 표시"</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"차량 HAL 에뮬레이션"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"내부 테스트 목적으로 차량의 HAL을 에뮬레이션"</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"차량 오디오 볼륨 제어"</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"차량 오디오 설정 제어"</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"애플리케이션 차단"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"운전 중 애플리케이션 차단 제어"</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"내비게이션 관리자"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"내비게이션 데이터를 계기판에 보냄"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"계기판으로 렌더링 보내기"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"애플리케이션이 계기판에 표시할 활동을 선언하도록 허용"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"계기판 제어"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"계기판에서 앱 실행"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"계기판 렌더링"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"계기판 데이터 수신"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"UX 제한사항 설정"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"UX 제한사항 설정"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"차량 입력 서비스"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"입력 이벤트 처리"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"CAN 버스 실패"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN 버스가 응답하지 않습니다. 헤드유닛 박스를 분리한 후 다시 연결한 다음 시동을 다시 걸어 보세요."</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"안전을 위해 운전 중에는 이용할 수 없는 활동입니다.\n계속하려면 먼저 주차하세요."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"안전한 앱 기능으로 다시 시작하려면 <xliff:g id="EXIT_BUTTON">%s</xliff:g>을(를) 선택하세요."</string>
+    <string name="exit_button" msgid="5829638404777671253">"뒤로"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"디버그 정보"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"진단 데이터"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"차량의 진단 데이터 읽기"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"진단 데이터"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"차량에서 진단 데이터 삭제"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"VMS 게시자"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"VMS 메시지 게시"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"VMS 구독자"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"VMS 메시지 구독"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"플래시 저장소 모니터링"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"플래시 저장소 사용 모니터링"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"운전 상태"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"운전 상태 변화 감지"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"상세한 엔진 정보"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"차량의 상세한 엔진 정보에 액세스"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"에너지 포트"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"에너지 포트에 액세스"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"차량 ID"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"차량 ID에 액세스"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"차량 도어"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"차량 도어 제어"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"차량 윈도"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"차량 윈도 제어"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"차량 미러"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"차량 미러 제어"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"차량 시트"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"차량 시트 제어"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"차량 기본 정보"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"차량 기본 정보 액세스"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"차량 외부 조명"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"차량 외부 조명 상태에 액세스"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"차량 외부 조명"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"차량 외부 조명 제어"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"차량 외부 온도"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"차량 외부 온도 액세스"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"차량 타이어"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"차량 타이어 정보에 액세스"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"차량 동력 전달 장치"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"차량 동력 전달 장치 정보에 액세스"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"차량 전원"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"전원 상태 액세스"</string>
+</resources>
diff --git a/service/res/values-ky/config.xml b/service/res/values-ky/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-ky/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-ky/strings.xml b/service/res/values-ky/strings.xml
new file mode 100644
index 0000000..ccf77e6
--- /dev/null
+++ b/service/res/values-ky/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Унаа тууралуу маалымат"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Унааңыздын маалыматына мүмкүнчүлүк алуу."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Унаанын кабинасы"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Унааңыздын шаймандарын, анын ичинде эшиктерди, терезелерди, орундуктарды жана терезелерди башкаруу."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Унаанын камерасы"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Унааңыздын камераларын колдонуу."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Унаанын кубаты"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Унааңыздын кубаты тууралуу маалыматты көрүү."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"Унаанын жылыткыч жана вентиляция тутумдары"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Унааңыздын жылыткыч жана вентилиция тутумдарын көрүү."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Унаанын километражы"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Унааңыздын километраж маалыматын көрүү."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Унаанын ылдамдыгы"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Унааңыздын ылдамдыгын билип туруу."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Унаанын динамикалык абалы"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Унааңыздын динамикалык абалын билип туруу"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Унаа сатуучусунун каналы"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Унаага тиешелүү маалыматты алмашуу үчүн унаа сатуучунун каналына кириңиз."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Унаанын радиосу"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Унаадагы радиону колдонуу."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Унааны долбоорлоо"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Унаадагы аудионун үнүнүн катуулугу"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Унаадагы аудионун жөндөөлөрү"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Унаанын дисплейиндеги телефондун интерфейсинин долбоору."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Унаадагы HAL\'ды иштетип көрүү"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Ички сыноо үчүн унааңыздагы HAL\'ды иштетип көрүү."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Унааңыздагы аудионун үнүнүн катуулугун көзөмөлдөө."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Унааңыздагы аудионун жөндөөлөрүн көзөмөлдөө."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Колдонмолорду бөгөттөө"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Унаа айдап баратканда колдонмолордун бөгөттөлүшүн көзөмөлдөө."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Чабыттоону башкаруучу"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Чабытоо дайындарын куралдар кластерине өткөрүү"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Куралдар кластерине түздөн-түз өткөрүү"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Колдонмого куралдар кластеринде көрсөтүлүүчү иш-аракеттерди жарыялоого уруксат берүү"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Куралдар кластерин көзөмөлдөө"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Куралдар кластериндеги колдонмолорду иштетүү"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Куралдар кластери түзүлүүдө"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Куралдар кластеринин дайындарын алуу"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"UX чектөөлөрүнүн конфигурациясы"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"КТ чектөөлөрүн конфигурациялоо"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Унаанын киргизүү кызматы"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Киргизүү аракеттерин башкаруу"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"CAN иштебей калды"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN жооп бербей жатат. Башкы шайман блогун сууруп, кайра сайгандан кийин унааны кайра жүргүзүңүз"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"Коопсуздугуңузду коргоо максатында, бул иш-аракетти унаа айдап баратканда аткарууга болбойт.\nТоктоп туруп, улантыңыз."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"Колдонмонун коопсуз функцияларын иштетүү үчүн <xliff:g id="EXIT_BUTTON">%s</xliff:g> баскычын басыңыз."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Артка"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Мүчүлүштүк"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Мүчүлүштүктөрдү аныктоо дайындары"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Унаадагы мүчүлүштүктөрдү аныктоо дайындарын окуу"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Мүчүлүштүктөрдү аныктоо дайындары"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Унаадагы мүчүлүштүктөрдү аныктоо дайындарын тазалоо"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"VMS жарыялоочу"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"VMS билдирүүлөрүн жарыялоо"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"VMS жазылуучу"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"VMS билдирүүлөрүн алып туруу үчүн жазылуу"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Флэш-сактагычты көзөмөлдөө"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Флэш-сактагычтын колдонулушун көзөмөлдөө"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Унаа айдоо абалы"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Унаа айдоо абалынын өзгөрүүлөрүн угуу"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Кыймылдаткычтын чоо-жайы"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Унааңыздын кыймылдаткычы тууралуу толук маалыматты көрүү"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Кубаттагыч порттору"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Кубаттагыч портторун колдонуу"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Унаанын идентификатору"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Унаанын идентификаторун көрүү"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Унаанын эшиктери"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Унаанын эшиктерин көзөмөлдөө"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Унаанын терезелери"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Унаанын терезелерин көзөмөлдөө"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Унаанын күзгүлөрү"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Унаанын күзгүлөрүн көзөмөлдөө"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Унаадагы орундуктар"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Унаадагы орундуктарды көзөмөлдөө"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Унаа тууралуу негизги маалымат"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Унаа тууралуу негизги маалыматты колдонуу"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Унаанын сыртындагы жарыктар"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Унаанын сыртындагы жарыктардын абалын көрүү"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Унаанын сыртындагы жарыктар"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Унаанын сыртындагы жарыктарды көзөмөлдөө"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Унаанын сыртындагы температура"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Унаанын ичиндеги температураны көрүү"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Унаанын дөңгөлөктөрү"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Унаанын дөңгөлөктөрү тууралуу маалыматты көрүү"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Унаанын кубат агрегаты"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Унаанын кубат агрегаты тууралуу маалыматты колдонуу"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Унаанын кубаты"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Унаанын кубаттуулук абалын көрүү"</string>
+</resources>
diff --git a/service/res/values-lo/config.xml b/service/res/values-lo/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-lo/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-lo/strings.xml b/service/res/values-lo/strings.xml
new file mode 100644
index 0000000..4d99a47
--- /dev/null
+++ b/service/res/values-lo/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"ຂໍ້ມູນລົດ"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"ເຂົ້າເຖິງຂໍ້ມູນລົດຂອງທ່ານ."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"ຫ້ອງໂດຍສານໃນລົດ"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"ເຂົ້າເຖິງອຸປະກອນເສີມຂອງລົດທ່ານ, ຮວມທັງປະຕູ,​ ແວ່ນ, ບ່ອນນັ່ງ ແລະ ປ່ອງຢ້ຽມ."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"ກ້ອງຂອງລົດ"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"ເຂົ້າເຖິງກ້ອງຂອງລົດທ່ານ."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"ພະລັງງານຂອງລົດ"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"ເຂົ້າເຖິງຂໍ້ມູນພະລັງງານຂອງລົດທ່ານ."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"HVAC ຂອງລົດ"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"ເຂົ້າເຖິງ HVAC ຂອງລົດທ່ານ."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"ຈຳນວນໄມລ໌ຂອງລົດ"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"ເຂົ້າຫາຂໍ້ມູນຈໍານວນໄມລ໌ຂອງລົດທ່ານ."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"ຄວາມໄວລົດ"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"ເຂົ້າເຖິງຂໍ້ມູນຄວາມໄວຂອງລົດທ່ານ."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"ສະຖານະໄດນາມິກຂອງພາຫະນະ"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"ເຂົ້າເຖິງສະພາວະໄດນາມິກຂອງລົດທ່ານ"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"ຊ່ອງທາງຜູ້ຂາຍລົດ"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"ເຂົ້າເຖິງຊ່ອງທາງຜູ້ຂາຍລົດຂອງທ່ານເພື່ອແລກປ່ຽນຂໍ້ມູນສະເພາະຂອງລົດ."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"ວິທະຍຸຂອງລົດ"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"ເຂົ້າເຖິງວິທະຍຸຂອງລົດທ່ານ."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"ການສາຍພາບໃນຈໍສະແດງຜົນຂອງລົດ"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"ລະດັບສຽງຂອງເຄື່ອງສຽງໃນລົດ"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"ການຕັ້ງຄ່າເຄື່ອງສຽງໃນລົດ"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"ສາຍພາບສ່ວນຕິດຕໍ່ຂອງໂທລະສັບຢູ່ໃນໜ້າຈໍຂອງລົດ."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"ຈຳລອງ HAL ພາຫະນະ"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"ຈໍາລອງ HAL ພາຫະນະຂອງລົດທ່ານສຳລັບຈຸດປະສົງການທົດສອບພາຍໃນ."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"ຄວບຄຸມລະດັບສຽງຂອງເຄື່ອງສຽງໃນລົດຂອງທ່ານ."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"ຄວບຄຸມການຕັ້ງຄ່າເຄື່ອງສຽງໃນລົດຂອງທ່ານ."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"ການບລັອກແອັບພລິເຄຊັນ"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"ຄວບຄຸມການບລັອກແອັບພລິເຄຊັນໃນຂະນະຂັບລົດ."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"ຕົວຈັດການການນໍາທາງ"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"ລາຍງານຂໍ້ມູນການນໍາທາງຫາແຜງໜ້າປັດ"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"ການສະແດງຜົນໄປຍັງແຜງໜ້າປັດໂດຍກົງ"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"ອະນຸຍາດໃຫ້ແອັບພລິເຄຊັນປະກາດກິດຈະກຳທີ່ຈະສະແດງໃນແຜງໜ້າປັດ"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"ການຄວບຄຸມແຜງໜ້າປັດ"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"ເປີດໃຊ້ແອັບໃນແຜງໜ້າປັດ"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"ການສະແດງຜົນແຜງໜ້າປັດ"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"ຮັບຂໍ້ມູນຈາກແຜງໜ້າປັດ"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"ການກຳນົດຄ່າຂໍ້ຈຳກັດ UX"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"ກຳນົດຄ່າຂໍ້ຈຳກັດ UX"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"ການບໍລິການປ້ອນຂໍ້ມູນຂອງລົດ"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"ຈັດການເຫດການປ້ອນຂໍ້ມູນ"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"CAN bus ບໍ່ສຳເລັດ"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN bus ບໍ່ຕອບສະໜອງ. ຖອດປລັກກ່ອງເຄື່ອງຫຼິ້ນວິທະຍຸ (Headunit) ແລ້ວສຽບເຂົ້າຄືນໃໝ່ ແລະ ຣິສະຕາດລົດ"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"ເພື່ອຄວາມປອດໄພຂອງທ່ານ, ກິດຈະກຳນີ້ບໍ່ມີໃຫ້ນໍາໃຊ້ໃນຂະນະທີ່ທ່ານກຳລັງຂັບລົດຢູ່. \nເພື່ອສືບຕໍ່, ກະລຸນາລໍຖ້າຈົນກວ່າວ່າທ່ານຈອດລົດ."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"ເພື່ອເລີ່ມຕົ້ນຄືນໃໝ່ດ້ວຍຄຸນສົມບັດແອັບທີ່ປອດໄພ,​ ກະລຸນາເລືອກ <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
+    <string name="exit_button" msgid="5829638404777671253">"ກັບຄືນ"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Debug Info"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"ຂໍ້ມູນການວິເຄາະ"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"ອ່ານຂໍ້ມູນການວິເຄາະຈາກລົດ"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"ຂໍ້ມູນການວິເຄາະ"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"ລຶບລ້າງຂໍ້ມູນການວິເຄາະຈາກລົດ"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"ຜູ້ເຜີຍແຜ່ຂໍ້ມູນ VMS"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"ເຜີຍແຜ່ຂໍ້ຄວາມ VMS"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"ຜູ້ສະໝັກໃຊ້ VMS"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"ສະໝັກໃຊ້ຂໍ້ຄວາມ VMS"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"ການຕິດຕາມພື້ນທີ່ຈັດເກັບຂໍ້ມູນຂອງແຟລດ"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"ຕິດຕາມການໃຊ້ພື້ນທີ່ເກັບຂໍ້ມູນແຟລດ"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"ສະຖານະການຂັບລົດ"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"ຟັງການປ່ຽນແປງສະພາບການຂັບຂີ່"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"ລາຍລະອຽດເຄື່ອງຈັກ"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"ເຂົ້າເຖິງຂໍ້ມູນເຄື່ອງຈັກລະອຽດຂອງລົດທ່ານ"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"ຝາຖັງນໍ້າມັນ ຫຼື ຜອດສາກໄຟ"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"ເຂົ້າເຖິງຝາຖັງນໍ້າມັນ ຫຼື ຜອດສາກໄຟ"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"ການລະບຸຕົວລົດ"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"ເຂົ້າເຖິງການລະບຸຕົວລົດ"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"ປະຕູລົດ"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"ຄວບຄຸມປະຕູລົດ"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"ປ່ອງຢ້ຽມລົດ"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"ຄວບຄຸມປ່ອງຢ້ຽມລົດ"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"ແວ່ນລົດ"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"ຄວບຄຸມແວ່ນລົດ"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"ບ່ອນນັ່ງໃນລົດ"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"ຄວບຄຸມບ່ອນນັ່ງໃນລົດ"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"ຂໍ້ມູນພື້ນຖານຂອງລົດ"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"ເຂົ້າເຖິງຂໍ້ມູນພື້ນຖານຂອງລົດ"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"ແສງພາຍນອກລົດ"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"ເຂົ້າເຖິງສະຖານະແສງພາຍນອກລົດ"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"ແສງພາຍນອກລົດ"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"ຄວບຄຸມແສງພາຍນອກລົດ"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"ອຸນຫະພູມພາຍນອກລົດ"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"ເຂົ້າເຖິງຂໍ້ມູນອຸນຫະພູມພາຍນອກລົດ"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"ຢາງລົດ"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"ເຂົ້າເຖິງຂໍ້ມູນຢາງລົດ"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"ລະບົບສົ່ງກໍາລັງຂອງລົດ"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"ເຂົ້າເຖິງຂໍ້ມູນລະບົບສົ່ງກໍາລັງຂອງລົດ"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"ພະລັງງານຂອງລົດ"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"ເຂົ້າເຖິງສະຖານະພະລັງງານຂອງລົດ"</string>
+</resources>
diff --git a/service/res/values-lt/config.xml b/service/res/values-lt/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-lt/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-lt/strings.xml b/service/res/values-lt/strings.xml
new file mode 100644
index 0000000..d01aee7
--- /dev/null
+++ b/service/res/values-lt/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Automobilio informacija"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Pasiekti automobilio informaciją."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Automobilio salonas"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Pasiekti automobilio priedus, įskaitant duris, veidrodėlius, sėdynes ir langus."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Automobilio fotoaparatas"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Pasiekti automobilio fotoaparatą (-us)."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Automobilio energija"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Pasiekti automobilio energijos informaciją."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"Automobilio HVAC"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Pasiekti automobilio HVAC."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Automobilio rida"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Pasiekti automobilio ridos informaciją."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Automobilio greitis"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Pasiekti automobilio greičio informaciją."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Transporto priemonės varomosios jėgos būsena"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Pasiekti automobilio varomosios jėgos būseną."</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Automobilio paslaugų teikėjo kanalas"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Pasiekti automobilio paslaugų teikėjo kanalą, kad būtų galima siųsti ir gauti automobilio informaciją."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Automobilio radijas"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Pasiekti automobilio radiją."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Automobilio projekcija"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Automobilio garsų garsumas"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Automobilio garso nustatymai"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Projektuoti telefono sąsają automobilio ekrane."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Imituoti transporto priemonės HAL"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Imituoti automobilio transporto priemonės HAL vidinio testavimo tikslais."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Valdyti automobilio garsų garsumą."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Valdyti automobilio garso nustatymus."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Programos blokavimas"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Valdyti programos blokavimą vairuojant."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Navigacijos tvarkymo priemonė"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Pranešti navigacijos duomenis instrumentų blokiniui."</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Tiesioginis pateikimas instrumentų blokinyje"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Leisti programai skelbti veiklą, kuri turėtų būti pateikta instrumentų blokinyje"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Instrumentų blokinio valdymas"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Pristatyti programas instrumentų blokinyje"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Instrumentų blokinio pateikimas"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Gauti instrumentų blokinio duomenis"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"NP apribojimų konfigūravimas"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"Konfigūruoti NP apribojimus"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Automobilio įvesties paslauga"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Apdoroti įvesties įvykius."</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"CAN BUS klaida"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN BUS nereaguoja. Atjunkite ir vėl prijunkite pagrindinio įtaiso dėžutę."</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"Siekiant užtikrinti jūsų saugą, ši veikla nepasiekiama vairuojant.\nJei norite tęsti, palaukite, kol sustosite."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"Jei norite pradėti iš naujo naudodami saugias programos funkcijas, pasirinkite <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Atgal"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Der. inf."</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Diagnostikos duomenys"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Skaityti automobilio diagnostikos duomenis."</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Diagnostikos duomenys"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Išvalyti diagnostikos duomenis iš automobilio."</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"VMS leidėjas"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"Skelbti VMS pranešimus."</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"VMS prenumeratorius"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"Prenumeruoti VMS pranešimus."</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Atmintuko stebėjimas"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Stebėti atmintuko naudojimą."</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Vairavimo būsena"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Klausyti vairavimo būsenos pakeitimų."</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Išsami variklio informacija"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Pasiekti išsamią automobilio variklio informaciją."</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Energijos prievadai"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Pasiekti energijos prievadus."</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Automobilio identifikavimo duomenys"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Pasiekti automobilio identifikavimo duomenis"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Automobilio durys"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Valdyti automobilio duris."</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Automobilio langai"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Valdyti automobilio langus."</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Automobilio veidrodėliai"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Valdyti automobilio veidrodėlius."</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Automobilio sėdynės"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Valdyti automobilio sėdynes."</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Pagrindinė automobilio informacija"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Pasiekti pagrindinę automobilio informaciją."</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Automobilio išoriniai žibintai"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Pasiekti automobilio išorinių žibintų būseną."</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Automobilio išoriniai žibintai"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Valdyti automobilio išorinius žibintus"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Automobilio išorės temperatūra"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Pasiekti automobilio išorės temperatūrą."</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Automobilio padangos"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Pasiekti automobilio padangų informaciją."</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Automobilio transmisija"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Pasiekti automobilio transmisijos informaciją."</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Automobilio maitinimas"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Pasiekti automobilio maitinimo būseną."</string>
+</resources>
diff --git a/service/res/values-lv/config.xml b/service/res/values-lv/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-lv/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-lv/strings.xml b/service/res/values-lv/strings.xml
new file mode 100644
index 0000000..1afe700
--- /dev/null
+++ b/service/res/values-lv/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Informācija par automašīnu"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Piekļūt informācijai par automašīnu."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Automašīnas salons"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Piekļūt automašīnas piederumiem, tostarp durvīm, spoguļiem, sēdekļiem un logiem."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Automašīnas kamera"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Piekļūt automašīnas kamerai(-ām)."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Automašīnas enerģija"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Piekļūt informācijai par automašīnas enerģiju."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"Automašīnas gaisa kondicionēšanas sistēma"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Piekļūt automašīnas gaisa kondicionēšanas sistēmai."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Automašīnas nobraukuma informācija"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Piekļūt informācijai par automašīnas nobraukumu."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Informācija par automašīnas ātrumu"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Piekļūt informācijai par automašīnas ātrumu."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Transportlīdzekļa dinamikas stāvoklis"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Piekļūt informācijai par automašīnas dinamikas stāvokli."</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Automašīnas ražotāja kanāls"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Piekļūt automašīnas ražotāja kanālam, lai veiktu ar automašīnu saistītas informācijas apmaiņu."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Automašīnas radio"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Piekļūt automašīnas radio."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Projicēšana automašīnā"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Automašīnas audio skaļums"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Automašīnas audio iestatījumi"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Projicēt tālruņa saskarni automašīnas displejā."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Transportlīdzekļa HAL imitēšana"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Imitēt jūsu automašīnas Vehicle HAL, lai veiktu iekšējo testēšanu."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Kontrolēt automašīnas audio skaļumu."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Kontrolēt automašīnas audio iestatījumus."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Lietojumprogrammu bloķēšana"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Kontrolēt lietojumprogrammu bloķēšanu braukšanas laikā."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Navigācijas pārvaldnieks"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Reģistrēt navigācijas datus mēraparātu blokā."</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Tieša renderēšana uz mēraparātu bloku"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Atļaut lietojumprogrammai deklarēt, kuras darbības jāattēlo mēraparātu blokā."</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Mēraparātu bloka kontrole"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Palaist lietotnes mēraparātu blokā."</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Atveide mēraparātu blokā"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Saņemt datus no mēraparātu bloka."</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"Lietotāja pieredzes ierobežojumu konfigurēšana"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"Konfigurēt lietotāja pieredzes ierobežojumus."</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Automašīnas ievades pakalpojums"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Apstrādāt ievades notikumus."</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"Radās atteice datu maģistrālē"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"Datu maģistrāle nereaģē. Atvienojiet un atkal pievienojiet stereosistēmas paneļa kabeli un atkārtoti iedarbiniet automašīnu"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"Drošības apsvērumu dēļ šī darbība nav pieejama braukšanas laikā.\nTurpiniet, kad automašīna būs novietota stāvēšanai."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"Lai atsāktu darbu ar drošām lietotnes funkcijām, atlasiet pogu <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Atpakaļ"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Debug Info"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Diagnostikas dati"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Nolasīt no automašīnas diagnostikas datus."</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Diagnostikas dati"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Notīrīt diagnostikas datus no automašīnas."</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"VMS publicētājs"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"Publicēt VMS ziņojumus."</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"VMS abonents"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"Abonēt VMS ziņojumus."</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Zibatmiņas uzraudzība"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Uzraudzīt zibatmiņas lietojumu."</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Braukšanas režīms"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Noklausīties braukšanas režīma izmaiņas."</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Detalizēta informācija par dzinēju"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Piekļūt detalizētai informācijai par automašīnas dzinēju."</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Enerģijas pieslēgvietas"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Piekļūt enerģijas pieslēgvietām."</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Automašīnas identifikācija"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Piekļūt automašīnas identifikācijas numuram."</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Automašīnas durvis"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Kontrolēt automašīnas durvis."</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Automašīnas logi"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Kontrolēt automašīnas logus."</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Automašīnas spoguļi"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Kontrolēt automašīnas spoguļus."</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Automašīnas sēdekļi"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Kontrolēt automašīnas sēdekļus."</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Pamatinformācija par automašīnu"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Piekļūt pamatinformācijai par automašīnu"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Automašīnas ārējās ugunis"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Piekļūt informācijai par automašīnas ārējo uguņu stāvokli."</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Automašīnas ārējās ugunis"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Kontrolēt automašīnas ārējās ugunis."</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Temperatūra automašīnas ārpusē"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Piekļūt informācijai par temperatūru automašīnas ārpusē."</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Automašīnas riepas"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Piekļūt informācijai par automašīnas riepām."</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Automašīnas jaudas piedziņas ķēde"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Piekļūt informācijai par automašīnas jaudas piedziņas ķēdi."</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Automašīnas aizdedzes stāvoklis"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Piekļūt informācijai par automašīnas aizdedzes stāvokli."</string>
+</resources>
diff --git a/service/res/values-mk/config.xml b/service/res/values-mk/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-mk/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-mk/strings.xml b/service/res/values-mk/strings.xml
new file mode 100644
index 0000000..4e6d64a
--- /dev/null
+++ b/service/res/values-mk/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Информации за автомобилот"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Пристапува до информациите за автомобилот."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Кабина на автомобилот"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Пристапува до додатоците на автомобилот, вклучувајќи ги вратите, ретровизорите, седиштата и прозорците."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Камера на автомобилот"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Пристапува до камерите на автомобилот."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Енергија на автомобилот"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Пристапува до информациите за енергијата на автомобилот."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"Клима-уред на автомобилот"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Пристапува до клима-уредот на автомобилот."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Поминати километри на автомобилот"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Пристапува до информациите за поминатите километри на автомобилот."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Брзина на автомобилот"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Пристапува до информациите за брзината на автомобилот."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Динамичка состојба на автомобилот"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Пристапува до динамичката состојба на автомобилот"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Канал на продавачот на автомобилот"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Пристапува до каналот на продавачот на автомобилот за да размени информации во врска со автомобилот."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Радио на автомобилот"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Пристапува до радиото на автомобилот."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Прикажување во автомобилот"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Јачина на звукот на автомобилот"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Поставки за звук на автомобилот"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Го прикажува интерфејсот на телефонот на екранот на автомобилот."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Го поддржува HAL за возило"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Го поддржува HAL за возило на автомобилот за внатрешно тестирање."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Ја контролира јачината на звукот на автомобилот."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Ги контролира поставките за звук на автомобилот."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Блокирање на апликацијата"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Го контролира блокирањето на апликацијата додека возите"</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Управник за навигација"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Пријавува податоци за навигацијата до инструменталната табла."</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Директно прикажување на инструменталната табла"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Овозможува апликацијата да најавува активности за прикажување на инструменталната табла"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Контрола на инструменталната табла"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Стартува апликации на инструменталната табла"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Прикажување на инструменталната табла"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Примајте податоци од инструменталната табла"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"Конфигурација на ограничувањата на корисничкото искуство"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"Конфигурирајте ги ограничувањата на корисничкото искуство"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Влезна услуга на автомобилот"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Ракува со влезните настани"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"CAN-магистралата не успеа"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN-магистралата не реагира. Откачете ја и повторно прикачете ја кутијата на главната единица и рестартирајте го автомобилот"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"За ваша безбедност, оваа активност не е достапна додека возите.\nЗа да продолжите, почекајте да се паркирате."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"За да започнете одново со безбедносните фунции на апликацијата, изберете <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Назад"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Debug Info"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Дијагностички податоци"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Чита дијагностички податоци од автомобилот"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Дијагностички податоци"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Ги брише дијагностичките податоци од автомобилот"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"Издавач на VMS"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"Објавува vms-пораки"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"Претплатник на VMS"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"Се претплатува на vms-пораки"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Следење на флеш меморијата"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Го следи користењето на флеш меморијата"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Состојба на возење"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Ги слуша промените во состојбата на возење"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Темелно чистење на моторот"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Пристапува до деталните информации за моторот на автомобилот."</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Енергетски порти"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Пристапува до енергетските порти"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Идентификација на автомобилот"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Пристапува до идентификацијата на автомобилот"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Врати на автомобилот"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Ги контролира вратите на автомобилот"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Прозорци на автомобилот"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Ги контролира прозорците на автомобилот"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Ретровизори на автомобилот"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Ги контролира ретровизорите на автомобилот"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Седишта на автомобилот"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Ги контролира седиштата на автомобилот"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Основни информации за автомобилот"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Пристапува до основните информации за автомобилот"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Надворешни светла на автомобилот"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Пристапува до состојбата на надворешните светла на автомобилот"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Надворешни светла на автомобилот"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Ги контролира надворешните светла на автомобилот"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Надворешна температура на автомобилот"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Пристапува до надворешната температура на автомобилот"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Гуми на автомобилот"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Пристапува до информациите за гумите на автомобилот"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Електроника на автомобилот"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Пристапува до информациите за електрониката на автомобилот"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Моќност на автомобилот"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Пристапува до состојбата на моќност на автомобилот"</string>
+</resources>
diff --git a/service/res/values-ml/config.xml b/service/res/values-ml/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-ml/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-ml/strings.xml b/service/res/values-ml/strings.xml
new file mode 100644
index 0000000..b928745
--- /dev/null
+++ b/service/res/values-ml/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"കാർ വിവരങ്ങൾ"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"നിങ്ങളുടെ കാർ വിവരങ്ങൾ ആക്‌സസ് ചെയ്യുക."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"കാർ ക്യാബിൻ"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"വിൻഡോകൾ, സീറ്റുകൾ, കണ്ണാടികൾ, ഡോറുകൾ ഉൾപ്പെടെയുള്ള നിങ്ങളുടെ കാറിന്റെ ഘടകഭാഗങ്ങൾ ആക്‌സസ് ചെയ്യുക."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"കാറിന്റെ ക്യാമറ"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"നിങ്ങളുടെ കാറിന്റെ ക്യാമറ(കൾ) ആക്‌സസ് ചെയ്യുക."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"കാർ എനർജി"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"നിങ്ങളുടെ കാറിന്റെ എനർജി വിവരങ്ങൾ ആക്‌സസ് ചെയ്യുക."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"കാർ Hvac"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"നിങ്ങളുടെ കാറിന്റെ hvac ആക്‌സസ് ചെയ്യുക."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"കാറിന്റെ മൈലേജ്"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"നിങ്ങളുടെ കാറിന്റെ മൈലേജ് വിവരങ്ങൾ ആക്‌സസ് ചെയ്യുക."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"കാറിന്റെ വേഗത"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"നിങ്ങളുടെ കാറിന്റെ വേഗത ആക്‌സസ് ചെയ്യുക."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"വാഹനത്തിന്റെ ചലനാത്മക നില"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"നിങ്ങളുടെ കാറിന്റെ ചലനാത്മക നില ആക്‌സസ് ചെയ്യുക"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"കാർ വെൻഡർ ചാനൽ"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"കാർ-നിർദ്ദിഷ്‌ട വിവരം മാറ്റാൻ കൈമാറാൻ കാറിന്റെ വെൻഡർ ചാനൽ ആക്‌സസ് ചെയ്യുക."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"കാർ റേഡിയോ"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"നിങ്ങളുടെ കാർ റേഡിയോ ആക്‌സസ് ചെയ്യുക."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"കാർ പ്രൊജക്ഷൻ"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"കാറിന്റെ ഓഡിയോ വോളിയം"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"കാറിന്റെ ഓഡിയോ ക്രമീകരണം"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"കാർ പ്രദർശനത്തിൽ, ഫോൺ ഇന്റർഫേസ് പ്രൊജക്റ്റ് ചെയ്യുക."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"വാഹന HAL എമുലേറ്റ് ചെയ്യുക"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"ആന്തരിക പരിശോധനയ്ക്കായി, നിങ്ങളുടെ കാറിന്റെ വാഹന HAL എമുലേറ്റ് ചെയ്യുക."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"നിങ്ങളുടെ കാറിന്റെ ഓഡിയോ വോളിയം നിയന്ത്രിക്കുക."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"നിങ്ങളുടെ കാറിന്റെ ഓഡിയോ ക്രമീകരണം നിയന്ത്രിക്കുക."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"ആപ്പ് ബ്ലോക്ക് ചെയ്യൽ"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"ഡ്രൈവ് ചെയ്യുമ്പോൾ ആപ്പ് ബ്ലോക്ക് ചെയ്യുന്നത് നിയന്ത്രിക്കുക."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"നാവിഗേഷൻ മാനേജർ"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"ഇൻസ്‌ട്രുമെന്റ് ക്ലസ്‌റ്ററിൽ നാവിഗേഷൻ ഡാറ്റ റിപ്പോർട്ട് ചെയ്യുക"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"ഇൻസ്‌ട്രുമെന്റ് ക്ലസ്‌റ്ററിലേക്ക് നേരിട്ട് റെൻഡർ ചെയ്യുക"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"ഇൻസ്‌ട്രുമെന്റ് ക്ലസ്‌റ്ററിൽ പ്രദർശിപ്പിക്കാനുള്ള ആക്റ്റിവിറ്റികൾ പ്രഖ്യാപിക്കാൻ ആപ്പിനെ അനുവദിക്കുക"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"ഇൻസ്‌ട്രുമെന്റ് ക്ലസ്‌റ്റർ നിയന്ത്രണം"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"ഇൻസ്‌ട്രുമെന്റ് ക്ലസ്‌റ്ററിൽ ആപ്പുകൾ ലോഞ്ച് ചെയ്യുക"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"ഇൻസ്‌ട്രുമെന്റ് ക്ലസ്‌റ്റർ റെൻഡർ ചെയ്യൽ"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"ഇൻസ്‌ട്രുമെന്റ് ക്ലസ്‌റ്റർ ഡാറ്റ സ്വീകരിക്കുക"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"UX നിയന്ത്രണങ്ങളുടെ കോൺഫിഗറേഷൻ"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"UX നിയന്ത്രണങ്ങൾ കോൺഫിഗർ ചെയ്യുക"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"കാറിന്റെ ഇൻപുട്ട് സേവനം"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"ഇൻപുട്ട് ഇവന്റുകൾ കൈകാര്യം ചെയ്യുക"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"CAN ബസ് പരാജയപ്പെട്ടു"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN ബസ് പ്രതികരിക്കുന്നില്ല. ഹെഡ്‌യൂണിറ്റ് ബോക്‌സ്, അൺപ്ലഗ് ചെയ്‌ത്, വീണ്ടും പ്ലഗ് ചെയ്‌ത്, കാർ റീസ്‌റ്റാർട്ട് ചെയ്യുക"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"നിങ്ങളുടെ സുരക്ഷയ്ക്ക്, ഡ്രൈവ് ചെയ്യുമ്പോൾ ഈ ആക്റ്റിവിറ്റി ലഭ്യമല്ല.\nതുടരാൻ, നിങ്ങൾ പാർക്ക് ചെയ്യുന്നതുവരെ കാത്തിരിക്കുക."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"സുരക്ഷിതമായ ആപ്പ് ഫീച്ചറുകൾ ഉപയോഗിച്ച് പുനരാരംഭിക്കാൻ, <xliff:g id="EXIT_BUTTON">%s</xliff:g> തിരഞ്ഞെടുക്കുക."</string>
+    <string name="exit_button" msgid="5829638404777671253">"മടങ്ങുക"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"ഡീബഗ് വിവരം"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"പ്രശ്‌നനിർണ്ണയ ഡാറ്റ"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"കാറിൽ നിന്ന് പ്രശ്‌നനിർണ്ണയ ഡാറ്റ വായിക്കുക"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"പ്രശ്‌നനിർണ്ണയ ഡാറ്റ"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"കാറിൽ നിന്ന് ഡയഗ്നോസ്‌റ്റിക് ഡാറ്റ മായ്ക്കുക"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"VMS പ്രസാധകൻ"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"vms മെസേജുകൾ പ്രസിദ്ധീകരിക്കുക"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"VMS വരിക്കാർ"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"vms മെസേജിന്റെ വരിക്കാരാകുക"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"ഫ്ലാഷ് സ്‌റ്റോറേജ് നിരീക്ഷിക്കുന്നു"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"ഫ്ലാഷ് സ്‌റ്റോറേജ് ഉപയോഗം നിരീക്ഷിക്കുക"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"ഡ്രൈവിംഗ് നില"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"ഡ്രൈവിംഗ് നിലയിലെ മാറ്റങ്ങൾ ശ്രദ്ധിക്കുക"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"എഞ്ചിൻ വിശദാംശങ്ങൾ നൽകിയിരിക്കുന്നു"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"നിങ്ങളുടെ കാറിന്റെ വിശദമായ എഞ്ചിൻ വിവരങ്ങൾ ആക്‌സസ് ചെയ്യുക"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"എനർജി പോർട്ടുകൾ"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"എനർജി പോർട്ടുകൾ ആക്‌സസ് ചെയ്യുക"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"കാറിന്റെ ഐഡന്റിഫിക്കേഷൻ"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"കാറിന്റെ ഐഡന്റിഫിക്കേഷൻ ആക്‌സസ് ചെയ്യുക"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"കാറിന്റെ ഡോറുകൾ"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"കാറിന്റെ ഡോറുകൾ നിയന്ത്രിക്കുക"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"കാർ വിൻഡോകൾ"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"കാറിന്റെ വിൻഡോകൾ നിയന്ത്രിക്കുക"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"കാറിന്റെ കണ്ണാടികൾ"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"കാറിന്റെ കണ്ണാടികളെ നിയന്ത്രിക്കുക"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"കാറിന്റെ സീറ്റുകൾ"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"കാറിന്റെ സീറ്റുകൾ നിയന്ത്രിക്കുക"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"കാറിന്റെ അടിസ്ഥാന വിവരങ്ങൾ"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"കാറിന്റെ അടിസ്ഥാന വിവരങ്ങൾ ആക്‌സസ് ചെയ്യുക"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"കാറിന്റെ പുറംഭാഗത്തെ ലൈറ്റുകൾ"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"കാറിന്റെ പുറംഭാഗത്തെ ലൈറ്റുകളുടെ നില ആക്‌സസ് ചെയ്യുക"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"കാറിന്റെ പുറംഭാഗത്തെ ലൈറ്റുകൾ"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"കാറിന്റെ പുറംഭാഗത്തുള്ള ലൈറ്റുകൾ നിയന്ത്രിക്കുക"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"കാറിന്റെ പുറംഭാഗത്തെ താപനില"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"കാറിന്റെ പുറംഭാഗത്തെ താപനില ആക്‌സസ് ചെയ്യുക"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"കാർ ടയറുകൾ"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"കാർ ടയറിന്റെ വിവരങ്ങൾ ആക്‌സസ് ചെയ്യുക"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"കാർ Powertrain"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"കാറിന്റെ powertrain വിവരങ്ങൾ ആക്‌സസ് ചെയ്യുക"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"കാറിന്റെ പവർ"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"കാറിന്റെ പവർ നില ആക്‌സസ് ചെയ്യുക"</string>
+</resources>
diff --git a/service/res/values-mn/config.xml b/service/res/values-mn/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-mn/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-mn/strings.xml b/service/res/values-mn/strings.xml
new file mode 100644
index 0000000..b8a2d1c
--- /dev/null
+++ b/service/res/values-mn/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Машины мэдээлэл"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Машиныхаа мэдээлэлд хандана уу."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Машины бүхээг"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Машиныхаа хаалга, толь, суудал болон цонх зэрэг нэмэлт хэрэгсэлд хандана уу."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Машины камер"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Машиныхаа камерт хандана уу."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Машины эрчим хүч"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Машиныхаа эрчим хүчний мэдээлэлд хандана уу."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"Машины халаалт, агааржуулалт болон aгаар цэвэршүүлэгч"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Машиныхаа халаалт, агааржуулалт болон aгаар цэвэршүүлэгчид хандана уу."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Машины явсан миль"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Машиныхаа явсан милийн мэдээлэлд хандана уу."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Машины хурд"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Машиныхаа хурдны мэдээлэлд хандана уу."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Тээврийн хэрэгслийн динамик төлөв"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Машиныхаа динамик төлөвт хандах"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Машины нийлүүлэгчийн суваг"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Машинтай холбоотой мэдээллийг солилцохын тулд машин нийлүүлэгчийнхээ сувагт хандана уу."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Машины радио"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Машиныхаа радионд хандана уу."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Машины проекц"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Машины аудионы түвшин"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Машины аудионы тохиргоо"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Утасны харагдах байдлыг машины дэлгэцэд тооцоолно уу."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Тээврийн хэрэгслийн HAL-г дахин боловсруулах"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Машиныхаа тээврийн хэрэгслийн HAL-г дотоод шалгалтын зорилгоор дахин боловсруулна уу."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Машиныхаа аудионы түвшнийг хянана уу."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Машиныхаа аудионы тохиргоог хянана уу."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Апп блоклолт"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Жолоодох үеийн аппын блоклолтыг хянана уу."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Навигацийн менежер"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Навигацийн өгөгдлийг хяналтын самбарт мэдээлэх"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Хяналтын самбарын тайлбарт шууд харуулах"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Үйл ажиллагааг хяналтын самбарт мэдэгдэхийг аппад зөвшөөрөх"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Хяналтын самбарын хяналт"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Аппуудыг хяналтын самбарт эхлүүлэх"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Хяналтын самбарын буулгалт"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Хяналтын самбарын өгөгдлийг хүлээн авах"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"UX Хязгаарлалтын тохируулга"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"UX хязгаарлалтыг тохируулах"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Машины оролтын үйлчилгээ"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Оролтын арга хэмжээг боловсруулах"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"CAN bus амжилтгүй болсон"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN bus хариу өгөхгүй байна. Хөгжим тоглуулагчийн хайрцгийг салгаад, дахин залгаж, машиныг дахин эхлүүлнэ үү"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"Таны аюулгүй байдлын үүднээс жолоодох явцад энэ үйл ажиллагааг хийх боломжгүй.\nМашинаа зогсоолд байршуулаад үргэлжлүүлнэ үү."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"Аппын аюулгүй онцлогуудтайгаар дахин эхлүүлэхийн тулд <xliff:g id="EXIT_BUTTON">%s</xliff:g>-г сонгоно уу."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Буцах"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Дебаг хийх мэдээлэл"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Оношилгооны өгөгдөл"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Машины оношилгооны өгөгдлийг унших"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Оношилгооны өгөгдөл"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Машины оношилгооны өгөгдлийг устгах"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"VMS нийтлэгч"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"Vms мессежийг нийтлэх"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"VMS-н захиалагч"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"Vms мессежийг захиалах"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Гэрэл хадгалалтын хяналт"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Гэрэл хадгалалтын ашиглалтыг хянах"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Жолоодлогын төлөв"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Жолоодлогын төлөвийн өөрчлөлтийг сонсох"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Хөдөлгүүрийн дэлгэрэнгүй мэдээлэл"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Машиныхаа хөдөлгүүрийн дэлгэрэнгүй мэдээлэлд хандах"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Эрчим хүчний порт"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Эрчим хүчний портод хандах"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Машины тодорхойлолт"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Машины тодорхойлолтод хандах"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Машины хаалга"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Машины хаалгыг хянах"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Машины цонх"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Машины цонхыг хянах"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Машины толь"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Машины цонхыг хянах"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Машины суудал"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Машины суудлыг хянах"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Машины ерөнхий мэдээлэл"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Машины ерөнхий мэдээлэлд хандах"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Машины гадна талын гэрэлтүүлэг"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Машины гадна талын гэрэлтүүлгийн төлөвт хандах"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Машины гадна талын гэрэлтүүлэг"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Машины гадна талын гэрлийг хянах"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Машины гадна талын температур"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Машины гадаад температурт хандах"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Машины дугуй"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Машины дугуйны мэдээлэлд хандах"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Машин хүч дамжуулах анги"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Машины хүч дамжуулах ангийн мэдээлэлд хандах"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Машины хөдөлгүүрийн хүч"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Машины хөдөлгүүрийн хүчний төлөвт хандах"</string>
+</resources>
diff --git a/service/res/values-mr/config.xml b/service/res/values-mr/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-mr/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-mr/strings.xml b/service/res/values-mr/strings.xml
new file mode 100644
index 0000000..b14d138
--- /dev/null
+++ b/service/res/values-mr/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"कार माहिती"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"तुमच्या कारची माहिती अॅक्सेस करा."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"कार केबिन"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"दारे, आरसे, आसने आणि खिडक्यांसह, तुमच्या कारच्या अ‍ॅक्सेसरी अ‍ॅक्सेस करा."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"कार कॅमेरा"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"तुमच्या कारचा(चे) कॅमेरा(रे) अ‍ॅक्सेस करा."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"कार ऊर्जा"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"तुमच्या कारची ऊर्जा माहिती अ‍ॅक्सेस करा."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"कार Hvac"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"तुमच्या कारचे hvac अ‍ॅक्सेस करा."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"कार मायलेज"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"तुमच्या कारची मायलेज माहिती अ‍ॅक्सेस करा."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"कार गती"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"तुमच्या कारची गती अ‍ॅक्सेस करा."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"वाहन डायनॅमिक्स स्थिती"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"तुमच्या कारची डायनॅमिक्स स्थिती अ‍ॅक्सेस करा"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"कार विक्रेता चॅनेल"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"कारसंबंधी माहितीच्या देवाण-घेवाणीसाठी तुमच्या कारचे विक्रेता चॅनेल अ‍ॅक्सेस करा."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"कार रेडिओ"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"तुमच्या कारचा रेडिओ अ‍ॅक्सेस करा."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"कार प्रोजेक्शन"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"कार ऑडिओ व्हॉल्यूम"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"कार ऑडिओ सेटिंग्ज"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"कार डिस्प्लेवर फोन इंटरफेस प्रोजेक्ट करा."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"वाहन HAL चे अनुकरण करा"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"अंतर्गत चाचणी उद्देशांसाठी तुमच्या कारच्या वाहन HAL चे अनुकरण करा."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"तुमच्या कारचा ऑडिओ व्हॉल्यूम नियंत्रित करा."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"तुमच्या कारची ऑडिओ सेटिंग्ज नियंत्रित करा."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"अॅप्लिकेशन ब्लॉक करणे"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"ड्रायव्हिंग करत असताना अॅप्लिकेशन ब्लॉक करणे नियंत्रित करा."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"नेव्हिगेशन व्यवस्थापक"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"इंस्ट्रुमेंट क्लस्टरला नेव्हिगेशन डेटाचा अहवाल द्या"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"इंस्ट्रुमेंट क्लस्टरवर थेट रेंडरिंग"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"अ‍ॅप्लिकेशनला इंस्ट्रुमेंट क्लस्टरमध्ये अ‍ॅक्टिव्हिटी दाखवल्या जाण्याची घोषणा करू द्या"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"इंस्ट्रुमेंट क्लस्टर नियंत्रण"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"इंस्ट्रुमेंट क्लस्टरमध्ये अ‍ॅप्स लाँच करा"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"इंस्ट्रुमेंट क्लस्टर रेंडरिंग"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"इंस्ट्रुमेंट क्लस्टर डेटा मिळवा"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"UX निर्बंध कॉन्फिगरेशन"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"UX निर्बंध कॉन्फिगर करा"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"कार इनपुट सेवा"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"इनपुट इव्हेंट हाताळा"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"CAN बस अयशस्वी"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN बस प्रतिसाद देत नाही. हेडयुनिट बॉक्स अनप्लग करून पुन्हा प्लग करा आणि कार रीस्टार्ट करा"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"तुमच्या सुरक्षेसाठी, ड्रायव्हिंग करत असताना ही अ‍ॅक्टिव्हिटी उपलब्ध नाही.\nसुरू ठेवण्यासाठी, पार्क करेपर्यंत वाट पहा."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"सुरक्षित अ‍ॅप वैशिष्ट्यांसोबत पुन्हा सुरुवात करण्यासाठी, <xliff:g id="EXIT_BUTTON">%s</xliff:g> निवडा."</string>
+    <string name="exit_button" msgid="5829638404777671253">"मागे जा"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"डीबग माहिती"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"निदान डेटा"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"कारचा निदान डेटा वाचा"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"निदान डेटा"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"कारचा निदान डेटा साफ करा"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"VMS प्रकाशक"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"vms मेसेज प्रकाशित करा"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"VMS सदस्य"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"vms मेसेजचे सदस्य व्हा"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"फ्लॅश स्टोरेज परीक्षण"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"फ्लॅश स्टोरेज वापराचे परीक्षण करा"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"ड्रायव्हिंग स्थिती"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"ड्रायव्हिंग स्थितीतील बदल ऐका"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"इंजिन तपशीलवार"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"तुमच्या कारची तपशीलवार इंजिन माहिती अ‍ॅक्सेस करा"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"ऊर्जा पोर्ट"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"ऊर्जा पोर्ट ॲक्सेस करा"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"कार ओळख"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"कारची ओळख अ‍ॅक्सेस करा"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"कारची दारे"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"कारची दारे नियंत्रित करा"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"कारच्या खिडक्या"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"कारच्या खिडक्या नियंत्रित करा"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"कारचे आरसे"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"कारचे आरसे नियंत्रित करा"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"कार आसने"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"कारची आसने नियंत्रित करा"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"कारची प्राथमिक माहिती"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"कारची प्राथमिक माहिती अ‍ॅक्सेस करा"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"कारचे बाह्य लाइट"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"कारची बाह्य लाइट स्थिती अ‍ॅक्सेस करा"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"कारचे बाह्य लाइट"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"कारचे बाह्य लाइट नियंत्रित करा"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"कारचे बाह्य तापमान"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"कारचे बाह्य तापमान अ‍ॅक्सेस करा"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"कार टायर"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"कार टायरची माहिती अ‍ॅक्सेस करा"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"कार पॉवरट्रेन"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"कारची पॉवरट्रेन माहिती अ‍ॅक्सेस करा"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"कार पॉवर"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"कारची पॉवर स्थिती अ‍ॅक्सेस करा"</string>
+</resources>
diff --git a/service/res/values-ms/config.xml b/service/res/values-ms/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-ms/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-ms/strings.xml b/service/res/values-ms/strings.xml
new file mode 100644
index 0000000..81e8941
--- /dev/null
+++ b/service/res/values-ms/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Maklumat kereta"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Akses maklumat kereta anda."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Kabin Kereta"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Akses aksesori kereta anda, termasuk pintu, cermin, tempat duduk dan tingkap."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Kamera Kereta"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Akses kamera kereta anda."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Tenaga kereta"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Akses maklumat tenaga kereta anda."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"Hvac Kereta"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Akses hvac kereta anda."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Perbatuan kereta"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Akses maklumat perbatuan kereta anda."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Kelajuan kereta"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Akses kelajuan kereta anda."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Keadaan dinamik kenderaan"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Akses keadaan dinamik kereta anda"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Saluran penjual kereta"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Akses saluran penjual kereta anda untuk bertukar maklumat khusus kereta."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Radio Kereta"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Akses radio kereta anda."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Unjuran Kereta"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Kelantangan Audio Kereta"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Tetapan Audio Kereta"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Tayangkan antara muka telefon pada paparan kereta."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Tiru HAL kenderaan"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Tiru HAL kenderaan kereta anda untuk tujuan ujian dalaman."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Kawal kelantangan audio kereta anda."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Kawal tetapan audio kereta anda."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Penyekatan aplikasi"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Kawal penyekatan aplikasi semasa memandu."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Pengurus Navigasi"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Laporkan data navigasi ke kluster alatan"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Pemaparan langsung ke kluster alatan"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Benarkan aplikasi mengisytiharkan aktiviti yang akan dipaparkan dalam kluster alatan"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Kawalan kluster alatan"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Lancarkan apl dalam kluster alatan"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Pemaparan Kluster Alatan"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Terima data kluster alatan"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"Konfigurasi Sekatan UX"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"Konfigurasikan Sekatan UX"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Perkhidmatan Input Kereta"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Kendalikan peristiwa input"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"Bas CAN gagal"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"Bas CAN tidak bertindak balas. Cabut dan palamkan kembali kotak unit stereo dan mulakan semula kereta"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"Untuk keselamatan anda, aktiviti ini tidak tersedia semasa memandu.\nUntuk meneruskan, tunggu kereta diberhentikan."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"Untuk bermula semula dengan ciri apl selamat, pilih <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Kembali"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Nyhpepijat"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Data Diagnostik"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Baca data diagnostik daripada kereta"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Data Diagnostik"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Kosongkan data diagnostik daripada kereta"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"Penerbit VMS"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"Terbitkan mesej vms"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"Pelanggan VMS"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"Langgan mesej vms"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Pemantauan storan pemacu kilat"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Pantau penggunaan storan pemacu kilat"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Keadaan Pemanduan"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Dengar Perubahan keadaan pemanduan"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Perincian Enjin"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Akses maklumat enjin terperinci kereta anda"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Port Tenaga"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Akses port tenaga"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Pengenalan kereta"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Akses pengenalan kereta"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Pintu Kereta"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Kawal pintu kereta"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Tingkap Kereta"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Kawal tingkap kereta"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Cermin Kereta"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Kawal cermin kereta"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Tempat Duduk Kereta"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Kawal tempat duduk kereta"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Maklumat asas kereta"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Akses maklumat asas kereta"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Cahaya luar kereta"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Akses keadaan cahaya luar kereta"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Cahaya luar kereta"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Kawal cahaya luar kereta"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Suhu luar kereta"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Akses suhu luar kereta"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Tayar kereta"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Akses maklumat tayar kereta"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Rangkaian Kuasa Kereta"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Akses maklumat rangkaian kuasa kereta"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Kuasa Kereta"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Akses keadaan kuasa kereta"</string>
+</resources>
diff --git a/service/res/values-my/config.xml b/service/res/values-my/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-my/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-my/strings.xml b/service/res/values-my/strings.xml
new file mode 100644
index 0000000..799ece1
--- /dev/null
+++ b/service/res/values-my/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"ကားအချက်အလက်"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"သင့်ကား၏ အချက်အလက်ကို အသုံးပြုပါမည်။"</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"ကားရှေ့ခန်း"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"တံခါးများ၊ ကြည့်မှန်များ၊ ထိုင်ခုံများနှင့် ပြတင်းပေါက်များပါဝင်သည့် သင့်ကား၏ ဆက်စပ်ပစ္စည်းများကို အသုံးပြုပါမည်။"</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"ကားကင်မရာ"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"သင့်ကား၏ ကင်မရာ(များ)ကို ဝင်ရောက်အသုံးပြုပါမည်။"</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"ကား၏ စွမ်းအင်"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"ကား၏ စွမ်းအင်ဆိုင်ရာ အချက်အလက်ကို အသုံးပြုပါမည်။"</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"Car Hvac"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"သင့်ကား၏ \"havc စနစ်\" ကို အသုံးပြုပါမည်။"</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"ကားခရီးမိုင်"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"သင့်ကား၏ ခရီးမိုင်အချက်အလက်ကို အသုံးပြုပါမည်။"</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"ကားအမြန်နှုန်း"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"သင့်ကား၏ အမြန်နှုန်းကို အသုံးပြုပါမည်။"</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"ယာဉ်၏ လှုပ်ရှားမှုစက်အား အခြေအနေ"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"သင့်ကား၏ လှုပ်ရှားမှုစက်အား အခြေအနေကို အသုံးပြုပါမည်"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"ကားရောင်းချသူ ချန်နယ်"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"ကား၏တိကျသည့်အချက်အလက်များကို ဖလှယ်ရန် သင့်ကားအား ရောင်းချသူ၏ချန်နယ်ကို အသုံးပြုပါမည်။"</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"ကားရေဒီယို"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"သင့်ကား၏ ရေဒီယိုကို အသုံးပြုပါမည်။"</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"ကားအား ပုံရိပ်ဖော်ပြသမှု"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"ကားတွင် အသံအတိုးအကျယ်"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"ကားတွင် အသံဆက်တင်များ"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"ကားရှိ မျက်နှာပြင်ပြသမှုပေါ်တွင် ဖုန်းအင်တာဖေ့စ်ကို ဖော်ပြပါမည်။"</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"ယာဉ်၏ \"HAL အလွှာ\" ကို အသွင်ယူလုပ်ဆောင်ရန်"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"အတွင်းပိုင်းစမ်းသပ်မှုဆိုင်ရာ ရည်ရွယ်ချက်အတွက် သင့်ယာဉ်၏ HAL အလွှာကို အသွင်ယူလုပ်ဆောင်ပါမည်။"</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"သင့်ကားတွင် အသံအတိုးအကျယ်ကို ထိမ်းချုပ်သည်။"</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"သင့်ကားတွင် အသံဆက်တင်များကို ထိမ်းချုပ်ပါမည်။"</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"အပလီကေးရှင်းကို ပိတ်ထားခြင်း"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"ကားမောင်းနေစဉ် အပလီကေးရှင်းပိတ်ထားခြင်းကို ထိန်းချုပ်ပါမည်။"</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"လမ်းညွှန်မှု မန်နေဂျာ"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"လမ်းညွှန်ချက်ဒေတာကို ကိရိယာအစုအဝေးထံသို့  သတင်းပို့ပါမည်"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"ကိရိယာပစ္စည်းများ အစုအဝေးကို တိုက်ရိုက်ပြင်ဆင်ခြင်း"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"လုပ်ဆောင်ချက်များကို ကိရိယာအစုအဝေးအတွင်း၌ ပြသရန် အပလီကေးရှင်းတစ်ခုအား ခွင့်ပြုရန်"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"ကိရိယာအစုအဝေး ထိန်းချုပ်စနစ်"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"ကိရိယာအစုအဝေးအတွင်းရှိ အက်ပ်များကို စတင်ရန်"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"ကိရိယာအစုအဝေးကို ပြင်ဆင်ခြင်း"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"ကိရိယာအစုအဝေး ဒေတာကို လက်ခံရန်"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"UX ကန့်သတ်ချက်များ စီစဉ်သတ်မှတ်မှု"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"UX ကန့်သတ်ချက်များကို စီစဉ်သတ်မှတ်ရန်"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"ကား၏ အချက်အလက်ထည့်သွင်းခြင်း ဝန်ဆောင်မှု"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"အချက်အလက်ထည့်သွင်းခြင်း အစီအစဉ်များကို စီမံပါမည်"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"\"CAN bus\" စနစ် အသုံးပြုမှု မအောင်မြင်ပါ"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN bus စနစ်က တုန့်ပြန်မှုမရှိပါ။ စက်အထိုင်ဘောက်စ်ကို ပလတ်ဖြုတ်ပြီး ပြန်တပ်ကာ ကားကို ပြန်လည်စတင်ပါ"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"သင့် လုံခြုံမှုအတွက် ဤလုပ်ဆောင်ချက်ကို ကားမောင်းနေစဉ် အသုံးမပြုနိုင်ပါ။\nဆက်လက်လုပ်ဆောင်ရန် ကားရပ်နားသည်အထိစောင့်ပါ။"</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"စိတ်ချရသော အက်ပ်လုပ်ဆောင်ချက်များနှင့်အတူ အစမှပြန်စရန် <xliff:g id="EXIT_BUTTON">%s</xliff:g> ကို ရွေးချယ်ပါ။"</string>
+    <string name="exit_button" msgid="5829638404777671253">"နောက်သို့"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"တွေ့ရှိမှု"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"စစ်ဆေးတွေ့ရှိသည့် ဒေတာ"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"ကားမှ စစ်ဆေးတွေ့ရှိသည့် ဒေတာကို ဖတ်ရှုပါမည်"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"စစ်ဆေးတွေ့ရှိသည့် ဒေတာ"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"ကားမှ စစ်ဆေးတွေ့ရှိသည့် ရှင်းလင်းပြတ်သားသောဒေတာ"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"VMS ထုတ်ဝေသူ"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"VMS မက်ဆေ့ဂျ်များကို ထုတ်ဝေပါမည်"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"\"VMS \" အတွက် စာရင်းသွင်းသူ"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"VMS မက်ဆေ့ဂျ်များရယူရန်အတွက် စာရင်းသွင်းရန်"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"မြန်နှုန်းမြင့် သိုလှောင်မှုအား  စောင့်ကြည့်ခြင်း"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"မြန်နှုန်းမြင့်သိုလှောင်မှုအား အသုံးပြုခြင်းကို စောင့်ကြည့်ပါမည်"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"မောင်းနှင်မှုအခြေအနေ"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"\'မောင်းနှင်မှုဆိုင်ရာ\' အခြေအနေ ပြောင်းလဲမှုများကို နားထောင်ပါမည်"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"အသေးစိတ်ဖော်ပြထားသည့် အင်ဂျင်"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"သင့်ကား၏ အင်ဂျင်ဆိုင်ရာ အသေးစိတ်အချက်အလက်ကို အသုံးပြုပါမည်"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"စွမ်းအင်ပို့တ်များ"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"စွမ်းအင်ပို့တ်များကို အသုံးပြုပါမည်"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"ကား၏ အထောက်အထား"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"ကား၏ အထောက်အထားကို အသုံးပြုပါမည်"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"ကားတံခါးများ"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"ကားပြတင်းပေါက်များကို ထိန်းချုပ်ရန်"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"ကားပြတင်းပေါက်များ"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"သင့်ကား၏ ပြတင်းပေါက်များကို ထိမ်းချုပ်ပါမည်"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"ကားကြည့်မှန်များ"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"ကားကြည့်မှန်များကို ထိန်းချုပ်ပါမည်"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"ကားထိုင်ခုံများ"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"ကားထိုင်ခုံများကို ထိန်းချုပ်ပါမည်"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"ကား၏ အခြေခံအချက်အလက်"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"ကား၏ အခြေခံအချက်အလက်ကို အသုံးပြုပါမည်"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"ကားပြင်ပမီးများ"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"ကားပြင်ပမီးများ၏ အခြေအနေကို အသုံးပြုပါမည်"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"ကားပြင်ပမီးများ"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"ကားပြင်ပမီးများကို ထိမ်းချုပ်ပါမည်"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"ကားပြင်ပ အပူချိန်"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"ကား၏ ပြင်ပအပူချိန်ကို အသုံးပြုပါမည်"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"ကားတာယာများ"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"ကားတာယာ အချက်အလက်ကို အသုံးပြုပါမည်"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"ကား၏ ပင်မစက်အားစီမံမှုစနစ်"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"ကား၏ ပင်မစက်အားစီမံမှုစနစ်ဆိုင်ရာ အချက်အလက်များ အသုံးပြုရန်"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"ကား၏ စက်စွမ်းအား"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"ကား၏ စက်စွမ်းအားအခြေအနေကို အသုံးပြုပါမည်"</string>
+</resources>
diff --git a/service/res/values-nb/config.xml b/service/res/values-nb/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-nb/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-nb/strings.xml b/service/res/values-nb/strings.xml
new file mode 100644
index 0000000..c637b0e
--- /dev/null
+++ b/service/res/values-nb/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Informasjon om bilen"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Tilgang til informasjon om bilen."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Kupé"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Tilgang til bildeler, inkludert dørene, speilene, setene og vinduene."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Bilkamera"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Tilgang til bilens kamera(er)."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Bilens energibruk"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Tilgang til informasjon om bilens energibruk."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"Bilens klimaanlegg"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Tilgang til bilens klimaanlegg."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Bilens kjørelengde"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Tilgang til informasjon om bilens kjørelengde."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Bilens hastighet"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Tilgang til bilens hastighet."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Kjøretøyets dynamiske tilstand"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Tilgang til bilens dynamiske status"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Billeverandør"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Tilgang til billeverandøren for utveksling av informasjon som er spesifikk for bilen."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Bilradio"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Tilgang til bilradioen."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Speiling i bilen"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Lydvolumet i bilen"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Lydinnstillinger i bilen"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Speiling av telefongrensesnittet på skjermen i bilen."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Emulering av kjøretøys-HAL"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Emulering av bilens kjøretøys-HAL for intern testing."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Styring av lydvolumet i bilen."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Styring av lydinnstillingene i bilen."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Appblokkering"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Styring av appblokkering mens du kjører."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Navigeringsadministrering"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Rapportering av navigeringsdata til instrumentpanelet"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Direkte gjengivelse på instrumentpanelet"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Tillatelsestildeling for at apper skal kunne erklære at aktiviteter skal vises på instrumentpanelet"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Styring av instrumentpanelet"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Åpning av apper på instrumentpanelet"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Gjengivelse på instrumentpanelet"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Mottak av data fra instrumentpanelet"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"Konfigurering av begrensninger tilknyttet brukeropplevelsen"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"Konfigurering av begrensninger tilknyttet brukeropplevelsen"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Bilens inndatatjeneste"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Behandling av inndatahendelser"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"CAN-bus mislyktes"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN-bus svarer ikke. Koble bilens hovedenhet ut og inn igjen, og start bilen på nytt"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"Av sikkerhetshensyn er denne aktiviteten utilgjengelig når du kjører.\nDu kan ikke fortsette før du stopper bilen."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"For å starte på nytt med sikre appfunksjoner, velg <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Tilbake"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Debug Info"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Diagnostikkdata"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Avlesing av diagnostikkdata fra bilen"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Diagnostikkdata"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Fjerning av diagnostikkdata fra bilen"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"VMS-publisist"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"Publisering av VMS-meldinger"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"VMS-abonnent"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"Oppstart av abonnement på VMS-meldinger"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Overvåking av flash-lagring"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Overvåking av bruk av flash-lagring"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Kjøretilstand"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Lytting etter endringer i kjøretilstanden"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Motordetaljer"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Tilgang til detaljert informasjon om bilmotoren"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Energiporter"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Tilgang til energiporten(e)"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Bilidentifikasjon"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Tilgang til bilens identifikasjon"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Bildører"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Styring av bildørene"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Bilvinduer"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Styring av bilvinduene"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Bilens speil"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Styring av bilens speil"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Bilseter"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Styring av bilsetene"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Grunnleggende informasjon om bilen"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Tilgang til grunnleggende informasjon om bilen"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Bilens utvendige lys"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Tilgang til tilstanden til bilens utvendige lys"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Bilens utvendige lys"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Styring av bilens utvendige lys"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Temperatur utenfor bilen"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Tilgang til temperaturen utenfor bilen"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Bildekk"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Tilgang til informasjon om bildekkene"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Bilens drivlinje"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Tilgang til informasjon om bilens drivlinje"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Bilens tenning"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Tilgang til bilens tenningstilstand"</string>
+</resources>
diff --git a/service/res/values-ne/config.xml b/service/res/values-ne/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-ne/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-ne/strings.xml b/service/res/values-ne/strings.xml
new file mode 100644
index 0000000..bc4ecd3
--- /dev/null
+++ b/service/res/values-ne/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"कारको जानकारी"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"तपाईंको कारको जानकारीमाथि पहुँच राख्ने।"</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"कारको क्याबिन"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"ढोका, ऐना, सिट तथा झ्यालहरूलगायत तपाईंको कारका सामग्रीहरूमाथि पहुँच राख्ने।"</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"कारको क्यामेरा"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"तपाईंको कारका क्यामेरा(हरू) माथि पहुँच राख्ने।"</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"कारको ऊर्जा"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"तपाईंको कारको ऊर्जासम्बन्धी जानकारीमाथि पहुँच राख्ने।"</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"कारको Hvac"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"तपाईंको कारको hvac माथि पहुँच राख्ने।"</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"कारको माइलेज"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"तपाईंको कारको माइलेजसम्बन्धी जानकारीमाथि पहुँच राख्ने।"</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"कारको गति"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"तपाईंको कारको गतिमाथि पहुँच राख्ने।"</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"सवारी साधनको गतिशील स्थिति"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"तपाईंको कारको गतिशील स्थितिमाथि पहुँच राख्ने"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"कार विक्रेताको च्यानल"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"कार विशेष जानकारी आदान प्रदान गर्न तपाईंको कार विक्रेताको च्यानलमाथि पहुँच राख्ने।"</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"कारको रेडियो"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"तपाईंको कारको रेडियोमाथि पहुँच राख्ने।"</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"कारको प्रक्षेपण"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"कारको अडियोको भोल्युम"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"कारको अडियोका सेटिङहरू"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"कारको डिस्प्लेमा फोनको इन्टरफेस देखाउने।"</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"सवारी साधनको HAL को अनुकरण गर्नुहोस्‌"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"आन्तरिक परीक्षण गर्ने प्रयोजनका लागि तपाईंको कारको सवारी साधन HAL को अनुकरण गर्ने।"</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"तपाईंको कारको अडियोको भोल्युम नियन्त्रण गर्ने।"</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"आफ्नो कारको अडियोसम्बन्धी सेटिङहरू नियन्त्रण गर्नुहोस्।"</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"अनुप्रयोगमाथि रोक लगाउने कार्य"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"सवारी साधन चलाइरहेका बेलामा अनुप्रयोगलाई रोक लगाउने प्रक्रिया नियन्त्रण गर्ने।"</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"नेभिगेसन प्रबन्धक"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"नेभिगेसनसम्बन्धी डेटालाई उपकरणको क्लस्टरमा रिपोर्ट गर्ने"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"उपकरणको क्लस्टरमा प्रत्यक्ष रेन्डर गर्ने प्रक्रिया"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"कुनै अनुप्रयोगलाई उपकरणको क्लस्टरमा देखाइने क्रियाकलापहरूको घोषणा गर्न दिनुहोस्‌"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"उपकरणको क्लस्टरको नियन्त्रण"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"उपकरणको क्लस्टरमा अनुप्रयोगहरू सुरु गर्नुहोस्"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"उपकरणको क्लस्टर रेन्डर गर्ने प्रक्रिया"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"उपकरणको क्लस्टरको डेटा प्राप्त गर्नुहोस्‌"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"UX सम्बन्धी प्रतिबन्धहरूको कन्फिगुरेसन"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"UX सम्बन्धी प्रतिबन्धहरू कन्फिगर गर्नुहोस्‌"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"कारको इनपुट सेवा"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"इनपुट गरिएका कार्यक्रमहरू व्यवस्थापन गर्ने"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"CAN bus असफल भयो"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN bus ले प्रतिक्रिया जनाएन। हेडयुनिट बाकसलाई प्लगबाट निकालेर फेरि प्लगमा घुसाउनुहोस् र कार पुनःसुरु गर्नुहोस्‌"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"तपाईंको सुरक्षाका लागि, तपाईंले सवारी साधन चलाइरहेका बेलामा यो क्रियाकलाप उपलब्ध हुँदैन।\nजारी राख्न, पार्क नगरुन्जेल पर्खनुहोस्‌।"</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"अनुप्रयोगका सुरक्षित सुविधाहरूको प्रयोग गरी फेरि सुरु गर्न <xliff:g id="EXIT_BUTTON">%s</xliff:g> चयन गर्नुहोस्‌।"</string>
+    <string name="exit_button" msgid="5829638404777671253">"पछाडि"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"डिबगसम्बन्धी जानकारी"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"निदानसम्बन्धी डेटा"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"कारको निदानसम्बन्धी डेटा पढ्ने"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"निदानसम्बन्धी डेटा"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"कारको निदानसम्बन्धी डेटा खाली गर्ने"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"VMS प्रकाशक"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"vms सन्देशहरू प्रकाशित गर्ने"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"VMS को सदस्य"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"vms का सन्देशहरूको सदस्यता लिने"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"फ्ल्यास भण्डारणको अनुगमन"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"फ्ल्यास भण्डारणको प्रयोगको अनुगमन गर्ने"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"ड्राइभिङको स्थिति"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"ड्राइभिङको स्थितिमा हुने परिवर्तनहरू सुन्ने"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"इन्जिनका विस्तृत विवरणहरू"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"तपाईंको कारको इन्जिनको विस्तृत जानकारीमाथि पहुँच राख्ने"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"ऊर्जाका पोर्टहरू"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"ऊर्जाका पोर्टहरूमाथि पहुँच राख्ने"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"कारको पहिचानसम्बन्धी जानकारी"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"कारको पहिचानसम्बन्धी जानकारीमाथि पहुँच राख्ने"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"कारका ढोकाहरू"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"कारका ढोकाहरू नियन्त्रण गर्ने"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"कारका झ्यालहरू"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"कारका झ्यालहरू नियन्त्रण गर्ने"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"कारका ऐनाहरू"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"कारका ऐनाहरू नियन्त्रण गर्ने"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"कारका सिटहरू"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"कारका सिटहरू नियन्त्रण गर्ने"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"कारको आधारभूत जानकारी"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"कारको आधारभूत जानकारीमाथि पहुँच राख्ने"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"कारका बाहिरी बत्तीहरू"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"कारका बाहिरी बत्तीहरूको स्थितिमाथि पहुँच राख्ने"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"कारका बाहिरी बत्तीहरू"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"कारका बाहिरी बत्तीहरू नियन्त्रण गर्ने"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"कारको बाहिरी भागको तापक्रम"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"कारको बाहिरी भागको तापक्रममाथि पहुँच राख्ने"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"कारका टायरहरू"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"कारको टायरसम्बन्धी जानकारीमाथि पहुँच राख्ने"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"कारको पावरट्रेन"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"कारको पावरट्रेनसम्बन्धी जानकारीमाथि पहुँच राख्ने"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"कारको ऊर्जा"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"कारको ऊर्जाको स्थितिमाथि पहुँच राख्ने"</string>
+</resources>
diff --git a/service/res/values-nl/config.xml b/service/res/values-nl/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-nl/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-nl/strings.xml b/service/res/values-nl/strings.xml
new file mode 100644
index 0000000..5cc1d8f
--- /dev/null
+++ b/service/res/values-nl/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Autogegevens"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Toegang tot gegevens van je auto."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Auto-interieur"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Toegang tot de accessoires van je auto, zoals de deuren, spiegels, stoelen en ramen."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Camera van auto"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Toegang tot de camera(\'s) van je auto."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Energieniveau van auto"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Toegang tot informatie over het energieniveau van je auto."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"HVAC van auto"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Toegang tot de HVAC van je auto."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Brandstofverbruik van auto"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Toegang tot informatie over het brandstofverbruik van je auto."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Snelheid van auto"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Toegang tot de snelheid van je auto."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Dynamische staat van voertuig"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Toegang tot de dynamische staat van je auto"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Leverancierskanaal van auto"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Toegang tot het leverancierskanaal van je auto om autospecifieke informatie uit te wisselen."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Autoradio"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Toegang tot je autoradio."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Projectie van auto"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Audiovolume van auto"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Audio-instellingen voor auto"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Telefooninterface weergeven op display van auto."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Voertuig-HAL emuleren"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"De voertuig-HAL van je auto emuleren voor interne tests"</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Het volume van je auto bedienen."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"De audio-instellingen van je auto bedienen."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"App-blokkering"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"App-blokkering tijdens het rijden bedienen"</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Navigatiebeheer"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Navigatiegegevens rapporteren aan instrumentcluster"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Rechtstreekse weergave naar instrumentcluster"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Een app toestaan om activiteiten te declareren die worden weergegeven in de instrumentcluster"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Instrumentcluster bedienen"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Apps openen in de instrumentcluster"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Weergave instrumentcluster"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Gegevens van instrumentcluster ontvangen"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"Configuratie van beperkingen voor gebruikerservaring"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"Beperkingen voor gebruikerservaring configureren"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Invoerservice van auto"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Invoergebeurtenissen verwerken"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"CAN-bus is mislukt"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN-bus reageert niet. Koppel de hoofdeenheid los en sluit deze vervolgens weer aan. Start de auto daarna opnieuw."</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"Voor jouw veiligheid is deze activiteit niet beschikbaar als je aan het rijden bent.\nJe moet parkeren om door te gaan."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"Selecteer <xliff:g id="EXIT_BUTTON">%s</xliff:g> om opnieuw te beginnen met de veilige app-functies."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Vorige"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Debug-info"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Diagnostische gegevens"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Diagnostische gegevens van de auto lezen"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Diagnostische gegevens"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Diagnostische gegevens van de auto wissen"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"VMS-uitgever"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"VMS-berichten publiceren"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"VMS-abonnee"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"Abonneren op VMS-berichten"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Flash-geheugen controleren"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Gebruik van Flash-geheugen controleren"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Rijstand"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Luisteren naar wijzigingen van de rijstand"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Gedetailleerde informatie over motor"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Toegang tot gedetailleerde informatie over de motor van je auto"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Energiepoorten"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Toegang tot energiepoorten"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Identificatie van auto"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Toegang tot identificatie van je auto"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Autodeuren"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Autodeuren bedienen"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Autoramen"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"De ramen van je auto bedienen"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Autospiegels"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"De spiegels van je auto bedienen"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Autostoelen"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Autostoelen bedienen"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Basisgegevens van auto"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Toegang tot basisgegevens over je auto"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Buitenverlichting van auto"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Toegang tot de staat van de buitenverlichting van je auto"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Buitenverlichting van auto"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Buitenverlichting van je auto bedienen"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Buitentemperatuur van je auto"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Toegang tot de buitentemperatuur van de auto"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Autobanden"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Toegang tot informatie over de banden van je auto"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Powertrain van auto"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Toegang tot informatie over de powertrain van je auto"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Stroom van auto"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Toegang tot de stroomstatus van je auto"</string>
+</resources>
diff --git a/service/res/values-or/config.xml b/service/res/values-or/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-or/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-or/strings.xml b/service/res/values-or/strings.xml
new file mode 100644
index 0000000..5a6b215
--- /dev/null
+++ b/service/res/values-or/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"କାର୍‌ର ସୂଚନା"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"ଆପଣଙ୍କ କାର୍‍ର ସୂଚନା ଆକ୍ସେସ୍ କରିପାରେ।"</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"କାର୍‍ର କ୍ୟାବିନ୍"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"ଆପଣଙ୍କ କାର୍‍ର ଡୋର୍, ମିରର୍, ସିଟ୍ ଓ ୱିଣ୍ଡୋ ପରି ଆକ୍ସେସରିଗୁଡ଼ିକ ଆକ୍ସେସ୍ କରିପାରେ।"</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"କାର୍‍ର କ୍ୟାମେରା"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"ଆପଣଙ୍କ କାର୍‍ର କ୍ୟାମେରା(ଗୁଡ଼ିକ) ଆକ୍ସେସ୍ କରିପାରେ।"</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"କାର୍‍ର ଶକ୍ତି"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"ଆପଣଙ୍କ କାର୍‍ର ଶକ୍ତି ସୂଚନା ଆକ୍ସେସ୍ କରିପାରେ।"</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"କାର୍‍ର Hvac"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"ଆପଣଙ୍କ କାର୍‍ର hvac ଆକ୍ସେସ୍ କରିପାରେ।"</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"କାର୍‌ର ମାଇଲେଜ୍"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"ଆପଣଙ୍କ କାର୍‍ର ମାଇଲେଜ୍ ସୂଚନା ଆକ୍ସେସ୍ କରିପାରେ।"</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"କାର୍‍ର ସ୍ପିଡ୍"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"ଆପଣଙ୍କ କାର୍‍ର ସ୍ପିଡ୍ ଆକ୍ସେସ୍ କରିପାରେ।"</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"ଯାନବାହନର ଡାଇନାମିକ୍ ସ୍ଥିତି"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"ଆପଣଙ୍କ କାର୍‍ର ଡାଇନାମିକ୍ ସ୍ଥିତି ଆକ୍ସେସ୍ କରିପାରେ"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"କାର୍‍ର ବିକ୍ରେତା ଚ୍ୟାନେଲ୍"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"କାର୍‍ର ନିର୍ଦ୍ଦିଷ୍ଟ ସୂଚନା ଆଦାନପ୍ରଦାନ କରିବା ପାଇଁ ଆପଣଙ୍କ କାର୍‍ର ବିକ୍ରେତା ଚ୍ୟାନେଲ୍ ଆକ୍ସେସ୍ କରିପାରେ।"</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"କାର୍‌ର ରେଡିଓ"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"ଆପଣଙ୍କ କାର୍‍ର ରେଡିଓ ଆକ୍ସେସ୍ କରିପାରେ।"</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"କାର୍‍ର ପ୍ରୋଜେକ୍ସନ୍"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"କାର୍‌ର ଅଡିଓ ଭଲ୍ୟୁମ୍"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"କାର୍‌ର ଅଡିଓ ସେଟିଂସ୍"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"କାର୍‌ର ଡିସ୍‌ପ୍ଲେରେ ଫୋନ୍ ଇର୍ଣ୍ଟଫେସ୍ ଦେଖାଏ।"</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"ଯାନବାହନ HALକୁ ଅନୁକରଣ କରିପାରେ"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"ଇଣ୍ଟର୍ନଲ୍ ପରୀକ୍ଷଣ ଉଦ୍ଦେଶ୍ୟରେ ଆପଣଙ୍କ କାର୍‍ର ଯାନବାହନ HALକୁ ଅନୁକରଣ କରିପାରେ।"</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"ଆପଣଙ୍କ କାର୍‍ର ଅଡିଓ ଭଲ୍ୟୁମ୍ ନିୟନ୍ତ୍ରଣ କରିପାରେ।"</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"ଆପଣଙ୍କ କାର୍‍ର ଅଡିଓ ସେଟିଂସ୍ ନିୟନ୍ତ୍ରଣ କରନ୍ତୁ।"</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"ଆପ୍ଲିକେସନ୍ ବ୍ଲକ୍ କରିବା ପ୍ରକ୍ରିୟା"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"ଡ୍ରାଇଭ୍ କରିବା ସମୟରେ ଆପ୍ଲିକେସନ୍ ବ୍ଲକ୍ କରିବାର ସୁବିଧା ନିୟନ୍ତ୍ରଣ କରିପାରେ।"</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"ନେଭିଗେସନ୍ ପରିଚାଳକ"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"ଇନ୍‍ଷ୍ଟ୍ରୁମେଣ୍ଟ କ୍ଲଷ୍ଟର୍‌ରେ ନେଭିଗେସନ୍ ଡାଟାର ରିପୋର୍ଟ କରନ୍ତୁ"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"ଇନ୍‍ଷ୍ଟ୍ରୁମେଣ୍ଟ କ୍ଲଷ୍ଟର୍‌ରେ ପ୍ରତ୍ୟକ୍ଷ ରେଣ୍ଡରିଂ"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"ଏକ ଆପ୍ଲିକେସନ୍‍କୁ ଇନ୍‍ଷ୍ଟ୍ରୁମେଣ୍ଟ କ୍ଲଷ୍ଟର୍‌ରେ ପ୍ରଦର୍ଶିତ ହେବାକୁ ଥିବା ଗତିବିଧିକୁ ଘୋଷଣା କରିବାର ଅନୁମତି ଦିଅନ୍ତୁ"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"ଇନ୍‍ଷ୍ଟ୍ରୁମେଣ୍ଟ କ୍ଲଷ୍ଟର୍‍ର ନିୟନ୍ତ୍ରଣ"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"ଇନ୍‍ଷ୍ଟ୍ରୁମେଣ୍ଟ କ୍ଲଷ୍ଟର୍‌ରେ ଆପ୍ସ ଲଞ୍ଚ କରନ୍ତୁ"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"ଇନ୍‍ଷ୍ଟ୍ରୁମେଣ୍ଟ କ୍ଲଷ୍ଟର୍ ରେଣ୍ଡରିଂ"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"ଇନ୍‍ଷ୍ଟ୍ରୁମେଣ୍ଟ କ୍ଲଷ୍ଟର୍‌ର ଡାଟା ପ୍ରାପ୍ତ କରନ୍ତୁ"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"UX ପ୍ରତିବନ୍ଧତା କନଫିଗ୍‌ରେଶନ୍"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"UX ପ୍ରତିବନ୍ଧତା କନ୍‌ଫିଗର୍ କରନ୍ତୁ"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"କାର୍‍ର ଇନ୍‍ପୁଟ୍ ସେବା"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"ଇନ୍‍ପୁଟ୍ ଇଭେଣ୍ଟଗୁଡ଼ିକ ପରିଚାଳନା କରିପାରେ"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"CAN ବସ୍ ବିଫଳ ହେଲା"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN ବସ୍ ପ୍ରତିକ୍ରିୟା ଦେଉନାହିଁ। ହେଡୟୁନିଟ୍ ବାକ୍ସର ପ୍ଲଗ୍ କାଢ଼ି ପୁଣି ଲଗାନ୍ତୁ ଏବଂ କାର୍‍କୁ ରିଷ୍ଟାର୍ଟ କରନ୍ତୁ"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"ଆପଣଙ୍କ ସୁରକ୍ଷା ପାଇଁ, ଡ୍ରାଇଭିଂ କରିବା ସମୟରେ ଏହି ଗତିବିଧି ଉପଲବ୍ଧ ନାହିଁ।\nଜାରି ରଖିବା ପାଇଁ, ପାର୍କ କରିବା ପର୍ଯ୍ୟନ୍ତ ଅପେକ୍ଷା କରନ୍ତୁ।"</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"ସୁରକ୍ଷିତ ଆପ୍ ବୈଶିଷ୍ଟ୍ୟଗୁଡ଼ିକୁ ନେ‍ଇ ପୁଣି ଆରମ୍ଭ କରିବା ପାଇଁ, <xliff:g id="EXIT_BUTTON">%s</xliff:g> ଚୟନ କରନ୍ତୁ।"</string>
+    <string name="exit_button" msgid="5829638404777671253">"ପଛକୁ ଫେରନ୍ତୁ"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"ଡିବଗ୍ ସୂଚନା"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"ଡାଏଗ୍ନୋଷ୍ଟିକ୍ ଡାଟା"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"କାର୍‍ର ଡାଏଗ୍ନୋଷ୍ଟିକ୍ ଡାଟା ପଢ଼ିପାରେ"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"ଡାଏଗ୍ନୋଷ୍ଟିକ୍ ଡାଟା"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"କାର୍‍ରୁ ଡାଏଗ୍ନୋଷ୍ଟିକ୍ ଡାଟା ଖାଲି କରନ୍ତୁ"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"VMS ପ୍ରକାଶକ"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"vms ମେସେଜ୍ ମାଧ୍ୟମରେ ପ୍ରକାଶ କରିପାରେ"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"VMS ସଦସ୍ୟ"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"vms ମେସେଜ୍‍ର ସଦସ୍ୟତା ନେ‍ଇପାରେ"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"ଫ୍ଲାସ୍ ଷ୍ଟୋରେଜ୍‌କୁ ନିରୀକ୍ଷଣ କରିପାରେ"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"ଫ୍ଲାସ୍ ଷ୍ଟୋରେଜ୍‍ର ବ୍ୟବହାରକୁ ନିରୀକ୍ଷଣ କରିପାରେ"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"ଡ୍ରାଇଭିଂ କରିବା ସମୟରେ ସ୍ଥିତି"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"ଡ୍ରାଇଭିଂ କରିବା ସମୟରେ ସ୍ଥିତିରେ ହେଉଥିବା ପରିବର୍ତ୍ତନ ଉପରେ ନଜର ରଖିପାରେ"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"ଇଞ୍ଜିନ୍‍ର ବିସ୍ତୃତ ବିବରଣୀ"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"ଆପଣଙ୍କ କାର୍‍ର ବିସ୍ତୃତ ଇଞ୍ଜିନ୍ ସୂଚନା ଆକ୍ସେସ୍ କରିପାରେ"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"ଶକ୍ତି ପୋର୍ଟ"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"ଶକ୍ତି ପୋର୍ଟ ଆକ୍ସେସ୍ କରିପାରେ"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"କାର୍‌ର ଚିହ୍ନଟକରଣ"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"କାର୍‍ର ଚିହ୍ନଟକରଣ ଆକ୍ସେସ୍ କରିପାରେ"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"କାର୍‍ର ଡୋର୍"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"କାର୍‍ର ଡୋର୍ ନିୟନ୍ତ୍ରଣ କରିପାରେ"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"କାର୍‍ର ୱିଣ୍ଡୋ"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"କାର୍‍ର ୱିଣ୍ଡୋ ନିୟନ୍ତ୍ରଣ କରିପାରେ"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"କାର୍‍ର ମିରର୍"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"କାର୍‍ର ମିରର୍ ନିୟ୍ନନ୍ତ୍ରଣ କରିପାରେ"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"କାର୍‌ର ସିଟ୍"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"କାର୍‌ର ସିଟ୍ ନିୟନ୍ତ୍ରଣ କରିପାରେ"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"କାର୍‍ର ମୌଳିକ ସୂଚନା"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"କାର୍‌ର ମୌଳିକ ସୂଚନା ଆକ୍ସେସ୍ କରିପାରେ"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"କାର୍‍ର ବାହାରପଟର ଲାଇଟ୍"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"କାର୍‌ର ବାହାରପଟର ଲାଇଟ୍‍ର ସ୍ଥିତି ଆକ୍ସେସ୍ କରିପାରେ"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"କାର୍‍ର ବାହାରପଟର ଲାଇଟ୍"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"କାର୍‌ର ବାହାରପଟର ଲାଇଟ୍ ନିୟନ୍ତ୍ରଣ କରିପାରେ"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"କାର୍‌ର ବାହାରପଟର ତାପାମାତ୍ରା"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"କାର୍‌ର ବାହାରପଟର ତାପମାତ୍ରା ଆକ୍ସେସ୍ କରେ"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"କାର୍‌ର ଟାୟାର୍"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"କାର୍‌ର ଟାୟାର୍‍ର ସୂଚନା ଆକ୍ସେସ୍ କରିପାରେ"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"କାର୍‌ର ପାୱାର୍‍‍ଟ୍ରେନ୍"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"କାର୍‌ର ପାୱାର୍‌ଟ୍ରେନ୍‌ର ସୂଚନା ଆକ୍ସେସ୍ କରିପାରେ"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"କାର୍‍ର ପାୱାର୍"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"କାର୍‍ର ପାୱାର୍ ସ୍ଥିତି ଆକ୍ସେସ୍ କରିପାରେ"</string>
+</resources>
diff --git a/service/res/values-pa/config.xml b/service/res/values-pa/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-pa/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-pa/strings.xml b/service/res/values-pa/strings.xml
new file mode 100644
index 0000000..4013b25
--- /dev/null
+++ b/service/res/values-pa/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"ਕਾਰ ਦੀ ਜਾਣਕਾਰੀ"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"ਤੁਹਾਡੀ ਕਾਰ ਦੀ ਜਾਣਕਾਰੀ ਤੱਕ ਪਹੁੰਚ"</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"ਕਾਰ ਦਾ ਕੈਬਿਨ"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"ਦਰਵਾਜ਼ੇ, ਸ਼ੀਸ਼ੇ, ਸੀਟਾਂ ਅਤੇ ਤਾਕੀਆਂ ਸਮੇਤ ਤੁਹਾਡੀ ਕਾਰ ਦੇ ਉਪਸਾਧਨਾਂ ਤੱਕ ਪਹੁੰਚ।"</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"ਕਾਰ ਦਾ ਕੈਮਰਾ"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"ਤੁਹਾਡੀ ਕਾਰ ਦੇ ਕੈਮਰੇ ਤੱਕ ਪਹੁੰਚ।"</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"ਕਾਰ ਊਰਜਾ"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"ਤੁਹਾਡੀ ਕਾਰ ਦੀ ਊਰਜਾ ਸੰਬੰਧੀ ਜਾਣਕਾਰੀ ਤੱਕ ਪਹੁੰਚ।"</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"ਕਾਰ ਦਾ Hvac ਸਿਸਟਮ"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"ਤੁਹਾਡੀ ਕਾਰ ਦੇ hvac ਸਿਸਟਮ ਤੱਕ ਪਹੁੰਚ।"</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"ਕਾਰ ਮਾਈਲੇਜ"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"ਤੁਹਾਡੀ ਕਾਰ ਦੀ ਮਾਈਲੇਜ ਜਾਣਕਾਰੀ ਤੱਕ ਪਹੁੰਚ।"</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"ਕਾਰ ਦੀ ਗਤੀ"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"ਤੁਹਾਡੀ ਕਾਰ ਦੀ ਗਤੀ ਤੱਕ ਪਹੁੰਚ।"</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"ਵਾਹਨ ਦੀ ਗਤੀ ਦੀ ਸਥਿਤੀ"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"ਤੁਹਾਡੀ ਕਾਰ ਦੀ ਗਤੀ ਦੀ ਸਥਿਤੀ ਤੱਕ ਪਹੁੰਚ"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"ਕਾਰ ਵਿਕਰੇਤਾ ਚੈਨਲ"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"ਕਾਰ ਦੀ ਖਾਸ ਜਾਣਕਾਰੀ ਦੇ ਵਟਾਂਦਰੇ ਲਈ ਤੁਹਾਡੀ ਕਾਰ ਦੇ ਵਿਕਰੇਤਾ ਚੈਨਲ ਤੱਕ ਪਹੁੰਚ।"</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"ਕਾਰ ਦਾ ਰੇਡੀਓ"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"ਤੁਹਾਡੀ ਕਾਰ ਦੇ ਰੇਡੀਓ ਤੱਕ ਪਹੁੰਚ।"</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"ਕਾਰ ਦੀ ਯੋਜਨਾਬੰਦੀ"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"ਕਾਰ ਦੇ ਆਡੀਓ ਦੀ ਅਵਾਜ਼"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"ਕਾਰ ਦੀਆਂ ਆਡੀਓ ਸੈਟਿੰਗਾਂ"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"ਕਾਰ ਡਿਸਪਲੇ \'ਤੇ ਫ਼ੋਨ ਇੰਟਰਫੇਸ ਪ੍ਰੋਜੈਕਟ।"</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"ਵਾਹਨ HAL ਦੀ ਨਕਲ ਕਰੋ"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"ਅੰਦਰੂਨੀ ਜਾਂਚ ਦੇ ਉਦੇਸ਼ ਲਈ ਤੁਹਾਡੀ ਕਾਰ ਦੇ ਵਾਹਨ HAL ਦੀ ਨਕਲ।"</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"ਤੁਹਾਡੀ ਕਾਰ ਦੇ ਆਡੀਓ ਦੀ ਅਵਾਜ਼ ਨੂੰ ਕੰਟਰੋਲ।"</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"ਆਪਣੀ ਕਾਰ ਦੀਆਂ ਆਡੀਓ ਸੈਟਿੰਗਾਂ ਨੂੰ ਕੰਟਰੋਲ ਕਰੋ।"</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"ਐਪਲੀਕੇਸ਼ਨ ਬਲਾਕਿੰਗ"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"ਗੱਡੀ ਚਲਾਉਣ ਵੇਲੇ ਐਪਲੀਕੇਸ਼ਨ ਬਲਾਕਿੰਗ \'ਤੇ ਕੰਟਰੋਲ।"</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"ਨੈਵੀਗੇਸ਼ਨ ਪ੍ਰਬੰਧਕ"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"ਇੰਸਟਰੂਮੈਂਟ ਕਲੱਸਟਰ ਨੂੰ ਨੈਵੀਗੇਸ਼ਨ ਡਾਟੇ ਦੀ ਰਿਪੋਰਟ"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"ਇੰਸਟਰੂਮੈਂਟ ਕਲੱਸਟਰ \'ਤੇ ਸਿੱਧੀ ਰੈਂਡਰਿੰਗ"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"ਕਿਸੇ ਐਪ ਨੂੰ ਇੰਸਟਰੂਮੈਂਟ ਕਲੱਸਟਰ ਵਿੱਚ ਦਿਖਣ ਵਾਲੀਆਂ ਸਰਗਰਮੀਆਂ ਦੀ ਘੋਸ਼ਣਾ ਕਰਨ ਦਿਓ"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"ਇੰਸਟਰੂਮੈਂਟ ਕਲੱਸਟਰ ਕੰਟਰੋਲ"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"ਇੰਸਟਰੂਮੈਂਟ ਕਲੱਸਟਰ ਵਿੱਚ ਐਪਾਂ ਲਾਂਚ ਕਰੋ"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"ਇੰਸਟਰੂਮੈਂਟ ਕਲੱਸਟਰ ਰੈਂਡਰਿੰਗ"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"ਇੰਸਟਰੂਮੈਂਟ ਕਲੱਸਟਰ ਡਾਟਾ ਪ੍ਰਾਪਤ ਕਰੋ"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"UX ਪਾਬੰਦੀਆਂ ਦਾ ਸੰਰੂਪਣ"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"UX ਪਾਬੰਦੀਆਂ ਦਾ ਸੰਰੂਪਣ ਕਰੋ"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"ਕਾਰ ਇਨਪੁੱਟ ਸਰਵਿਸ"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"ਇਨਪੁੱਟ ਇਵੈਂਟਾਂ ਦੀ ਸੰਭਾਲ"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"CAN ਬੱਸ ਅਸਫਲ ਰਹੀ"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN ਬੱਸ ਕੰਮ ਨਹੀਂ ਕਰਦੀ। ਹੈੱਡ ਯੂਨਿਟ ਬਾਕਸ ਨੂੰ ਅਨਪਲੱਗ ਕਰੋ ਅਤੇ ਦੁਬਾਰਾ ਪਲੱਗ ਲਗਾ ਕੇ ਕਾਰ ਨੂੰ ਮੁੜ-ਚਾਲੂ ਕਰੋ"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"ਤੁਹਾਡੀ ਸੁਰੱਖਿਆ ਲਈ, ਗੱਡੀ ਚਲਾਉਣ ਵੇਲੇ ਇਹ ਸਰਗਰਮੀ ਉਪਲਬਧ ਨਹੀਂ ਹੈ।\nਜਾਰੀ ਰੱਖਣ ਲਈ, ਗੱਡੀ ਰੋਕਣ ਤੱਕ ਉਡੀਕ ਕਰੋ।"</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"ਸੁਰੱਖਿਅਤ ਐਪ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਨਾਲ ਮੁੜ ਤੋਂ ਸ਼ੁਰੂ ਕਰਨ ਲਈ, <xliff:g id="EXIT_BUTTON">%s</xliff:g> ਚੁਣੋ।"</string>
+    <string name="exit_button" msgid="5829638404777671253">"ਪਿੱਛੇ"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"ਡੀਬੱਗ ਜਾਣਕਾਰੀ"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"ਤਸ਼ਖੀਸੀ ਡਾਟਾ"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"ਕਾਰ ਦਾ ਤਸ਼ਖੀਸੀ ਡਾਟਾ ਪੜ੍ਹੋ"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"ਤਸ਼ਖੀਸੀ ਡਾਟਾ"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"ਕਾਰ ਦਾ ਤਸ਼ਖੀਸੀ ਡਾਟਾ ਕਲੀਅਰ ਕਰਨਾ"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"VMS ਪ੍ਰਕਾਸ਼ਕ"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"vms ਸੁਨੇਹੇ ਪ੍ਰਕਾਸ਼ਿਤ"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"VMS ਗਾਹਕ"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"vms ਸੁਨੇਹੇ ਗਾਹਕੀ ਲਓ"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"ਫਲੈਸ਼ ਸਟੋਰੇਜ ਦਾ ਨਿਰੀਖਣ"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"ਫਲੈਸ਼ ਸਟੋਰੇਜ ਵਰਤੋਂ ਦਾ ਨਿਰੀਖਣ"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"ਗੱਡੀ ਚਲਾਉਣ ਦੀ ਸਥਿਤੀ"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"ਗੱਡੀ ਚਲਾਉਣ ਵੇਲੇ ਸਥਿਤੀ ਵਿੱਚ ਹੋਣ ਵਾਲੀਆਂ ਤਬਦੀਲੀਆਂ ਨੂੰ ਸੁਣੋ"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"ਇੰਜਣ ਦੇ ਵੇਰਵੇ"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"ਤੁਹਾਡੀ ਕਾਰ ਦੇ ਇੰਜਣ ਦੀ ਵੇਰਵੇ ਸਹਿਤ ਜਾਣਕਾਰੀ ਤੱਕ ਪਹੁੰਚ"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"ਊਰਜਾ ਪੋਰਟ"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"ਊਰਜਾ ਪੋਰਟਾਂ ਤੱਕ ਪਹੁੰਚ"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"ਕਾਰ ਦੀ ਪਛਾਣ"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"ਕਾਰ ਦੀ ਪਛਾਣ ਤੱਕ ਪਹੁੰਚ"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"ਕਾਰ ਦੇ ਦਰਵਾਜ਼ੇ"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"ਕਾਰ ਦੇ ਦਰਵਾਜ਼ਿਆਂ \'ਤੇ ਕੰਟਰੋਲ"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"ਕਾਰ ਦੀਆਂ ਤਾਕੀਆਂ"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"ਕਾਰ ਦੀਆਂ ਤਾਕੀਆਂ \'ਤੇ ਕੰਟਰੋਲ"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"ਕਾਰ ਦੇ ਸ਼ੀਸ਼ੇ"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"ਕਾਰ ਦੇ ਸ਼ੀਸ਼ਿਆਂ \'ਤੇ ਕੰਟਰੋਲ"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"ਕਾਰ ਦੀਆਂ ਸੀਟਾਂ"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"ਕਾਰ ਦੀਆਂ ਸੀਟਾਂ \'ਤੇ ਕੰਟਰੋਲ"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"ਕਾਰ ਦੀ ਮੁੱਢਲੀ ਜਾਣਕਾਰੀ"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"ਕਾਰ ਦੀ ਮੁੱਢਲੀ ਜਾਣਕਾਰੀ ਤੱਕ ਪਹੁੰਚ"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"ਕਾਰ ਦੀਆਂ ਬਾਹਰੀ ਲਾਈਟਾਂ"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"ਕਾਰ ਦੀਆਂ ਬਾਹਰੀ ਲਾਈਟਾਂ ਦੀ ਸਥਿਤੀ ਤੱਕ ਪਹੁੰਚ"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"ਕਾਰ ਦੀਆਂ ਬਾਹਰੀ ਲਾਈਟਾਂ"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"ਕਾਰ ਦੀਆਂ ਬਾਹਰੀ ਲਾਈਟਾਂ \'ਤੇ ਕੰਟਰੋਲ"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"ਕਾਰ ਦਾ ਬਾਹਰੀ ਤਾਪਮਾਨ"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"ਕਾਰ ਦੇ ਬਾਹਰੀ ਤਾਪਮਾਨ ਤੱਕ ਪਹੁੰਚ"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"ਕਾਰ ਦੇ ਟਾਇਰ"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"ਕਾਰ ਦੇ ਟਾਇਰ ਸੰਬੰਧੀ ਜਾਣਕਾਰੀ ਤੱਕ ਪਹੁੰਚ"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"ਕਾਰ ਦੀ ਪਾਵਰਟ੍ਰੇਨ"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"ਕਾਰ ਦੀ ਪਾਵਰਟ੍ਰੇਨ ਜਾਣਕਾਰੀ ਤੱਕ ਪਹੁੰਚ"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"ਕਾਰ ਦੀ ਪਾਵਰ"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"ਕਾਰ ਦੀ ਪਾਵਰ ਸਥਿਤੀ ਤੱਕ ਪਹੁੰਚ"</string>
+</resources>
diff --git a/service/res/values-pl/config.xml b/service/res/values-pl/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-pl/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-pl/strings.xml b/service/res/values-pl/strings.xml
new file mode 100644
index 0000000..ee933bc
--- /dev/null
+++ b/service/res/values-pl/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Informacje o samochodzie"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Dostęp do informacji o samochodzie."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Wnętrze samochodu"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Dostęp do wyposażenia samochodu, w tym drzwi, lusterek, foteli i szyb."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Kamera samochodu"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Dostęp do kamer samochodu."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Zasilanie w samochodzie"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Dostęp do informacji o zasilaniu w samochodzie."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"System sterowania temperaturą w samochodzie"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Dostęp do systemu sterowania temperaturą w samochodzie."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Przebieg samochodu"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Dostęp do informacji o przebiegu samochodu."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Informacje o prędkości samochodu"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Dostęp do informacji o prędkości samochodu."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Parametry jezdne pojazdu"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Dostęp do parametrów jezdnych samochodu"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Kanał sprzedawcy samochodu"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Dostęp do kanału sprzedawcy samochodu i możliwość wymiany informacji o danym samochodzie."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Radio samochodowe"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Dostęp do radia samochodowego."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Wyświetlanie treści w samochodzie"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Głośność dźwięku w samochodzie"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Ustawienia dźwięku w samochodzie"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Wyświetlanie interfejsu telefonu na wyświetlaczu w samochodzie."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Emulowanie interfejsu HAL pojazdu"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Emulowanie interfejsu HAL samochodu na potrzeby testów wewnętrznych."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Sterowanie głośnością dźwięku w samochodzie."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Sterowanie ustawieniami dźwięku w samochodzie."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Blokowanie aplikacji"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Sterowanie blokowaniem aplikacji podczas jazdy."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Menedżer nawigacji"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Raportowanie danych nawigacyjnych w klastrze przyrządów"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Renderowanie bezpośrednio w klastrze przyrządów"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Zezwolenie na deklarowanie przez aplikację wyświetlania aktywności w klastrze przyrządów"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Sterowanie klastrem przyrządów"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Uruchamianie aplikacji w klastrze przyrządów"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Renderowanie w klastrze przyrządów"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Otrzymywanie danych o klastrze przyrządów"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"Konfiguracja ograniczeń UX"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"Konfigurowanie ograniczeń UX"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Usługa wprowadzania danych w samochodzie"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Obsługa zdarzeń wprowadzania danych"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"Błąd magistrali CAN"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"Magistrala CAN nie odpowiada. Odłącz i jeszcze raz podłącz moduł główny i ponownie uruchom samochód."</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"Dla Twojego bezpieczeństwa ta funkcja jest wyłączona podczas jazdy.\nAby jej użyć, zaparkuj samochód."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"Aby jeszcze raz przejść do funkcji bezpieczeństwa w aplikacji, wybierz <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Wstecz"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Dane debugowania"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Dane diagnostyczne"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Odczytywanie danych diagnostycznych samochodu"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Dane diagnostyczne"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Usuwanie danych diagnostycznych z samochodu"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"Wydawca komunikatów VMS"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"Wysyłanie komunikatów VMS"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"Subskrypcja komunikatów VMS"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"Subskrybowanie komunikatów VMS"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Monitorowanie pamięci flash"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Monitorowanie użycia pamięci flash"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Jazda samochodem"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Nasłuchiwanie zmian podczas jazdy samochodem"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Szczegółowe informacje o silniku"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Dostęp do szczegółowych informacji o silniku"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Porty zasilania"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Dostęp do portów zasilania"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Dane identyfikacyjne samochodu"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Dostęp do danych identyfikacyjnych samochodu"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Drzwi samochodu"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Sterowanie drzwiami samochodu"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Szyby w samochodzie"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Sterowanie szybami w samochodzie"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Lusterka samochodu"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Sterowanie lusterkami samochodu"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Fotele samochodowe"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Sterowanie fotelami samochodowymi"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Podstawowe informacje o samochodzie"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Dostęp do podstawowych informacji o samochodzie"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Zewnętrzne światła samochodu"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Dostęp do stanu zewnętrznych świateł samochodu"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Zewnętrzne światła samochodu"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Sterowanie zewnętrznymi światłami samochodu"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Temperatura na zewnątrz samochodu"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Dostęp do pomiarów temperatury na zewnątrz samochodu"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Opony samochodu"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Dostęp do informacji o oponach samochodu"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Zespół napędowy samochodu"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Dostęp do informacji o zespole napędowym samochodu"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Zasilanie w samochodzie"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Dostęp do stanu zasilania w samochodzie"</string>
+</resources>
diff --git a/service/res/values-pt-rPT/config.xml b/service/res/values-pt-rPT/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-pt-rPT/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-pt-rPT/strings.xml b/service/res/values-pt-rPT/strings.xml
new file mode 100644
index 0000000..4d7f371
--- /dev/null
+++ b/service/res/values-pt-rPT/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Informações do automóvel"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Aceda às informações do seu automóvel."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Cabine do automóvel"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Aceda aos acessórios do automóvel, incluindo portas, espelhos, assentos e janelas."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Câmara do automóvel"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Aceda à(s) câmara(s) do automóvel."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Energia do automóvel"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Aceda às informações de energia do automóvel."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"AVAC do automóvel"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Aceda ao AVAC do automóvel."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Quilometragem do automóvel"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Aceda às informações de quilometragem do automóvel."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Velocidade do automóvel"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Aceda à velocidade do seu automóvel."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Estado dinâmico do automóvel"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Aceda ao estado dinâmico do automóvel."</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Canal do fabricante do automóvel"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Aceda ao canal do fabricante do seu automóvel para trocar informações específicas do automóvel."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Rádio do automóvel"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Aceda ao rádio do automóvel."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Projeção do automóvel"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Volume do áudio do automóvel"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Definições de áudio do automóvel"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Projete a interface do telemóvel no ecrã do automóvel."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Emular a HAL do veículo"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Emule a HAL do veículo automóvel para fins de testes internos."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Controle o volume do áudio do automóvel."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Controle as definições de áudio do automóvel."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Bloqueio de aplicações"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Controle o bloqueio de aplicações enquanto estiver a conduzir."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Gestor de navegação"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Comunique os dados de navegação para o cluster do instrumento."</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Renderização direta para o cluster do instrumento"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Permita que uma aplicação declare atividades a apresentar no cluster do instrumento."</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Controlo do cluster do instrumento"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Inicie aplicações no cluster do instrumento."</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Renderização do cluster do instrumento"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Receba os dados do cluster do instrumento."</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"Configuração das restrições da experiência do utilizador"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"Configure restrições da experiência do utilizador."</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Serviço de entrada do automóvel"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Processe eventos de entrada."</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"Falha no CAN bus."</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"O CAN bus não responde. Desligue e volte a ligar a caixa da unidade principal e reinicie o automóvel."</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"Para sua segurança, esta atividade não está disponível enquanto estiver a conduzir.\nPode continuar após estacionar."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"Para começar de novo com funcionalidades de aplicações seguras, selecione <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Anterior"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Informações de depuração"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Dados de diagnóstico"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Leia os dados de diagnóstico do automóvel."</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Dados de diagnóstico"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Limpe os dados de diagnóstico do automóvel."</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"Publicador de VMS"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"Publique mensagens VMS."</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"Subscritor de VMS"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"Subscreva as mensagens VMS."</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Monitorização do armazenamento flash"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Monitorize a utilização do armazenamento flash."</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Estado: condução"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Ouça as alterações no estado Condução."</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Motor detalhado"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Aceda às informações detalhadas do motor do automóvel."</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Portas de energia"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Aceda às portas de energia."</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Identificação do automóvel"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Aceda à identificação do automóvel."</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Portas do automóvel"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Controle as portas do automóvel."</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Janelas do automóvel"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Controle as janelas do automóvel."</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Espelhos do automóvel"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Controle os espelhos do automóvel."</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Assentos do automóvel"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Controle os assentos do automóvel."</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Informações básicas do automóvel"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Aceda às informações básicas do automóvel."</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Luzes exteriores do automóvel"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Aceda ao estado das luzes exteriores do automóvel."</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Luzes exteriores do automóvel"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Controle as luzes exteriores do automóvel."</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Temperatura exterior do automóvel"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Aceda à temperatura exterior do automóvel."</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Pneus do automóvel"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Aceda às informações dos pneus do automóvel."</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Grupo motopropulsor do automóvel"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Aceda às informações do grupo motopropulsor do automóvel."</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Energia do automóvel"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Aceda ao estado de energia do automóvel."</string>
+</resources>
diff --git a/service/res/values-pt/config.xml b/service/res/values-pt/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-pt/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-pt/strings.xml b/service/res/values-pt/strings.xml
new file mode 100644
index 0000000..f8bc655
--- /dev/null
+++ b/service/res/values-pt/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Informações do carro"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Acessar as informações do carro."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Cabine do carro"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Acessar os acessórios do carro, inclusive portas, espelhos, bancos e janelas."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Câmera do carro"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Acessar câmeras do carro."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Abastecimento do carro"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Acessar informações de abastecimento do carro."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"HVAC (Aquecimento, ventilação e ar condicionado) do carro"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Acessar o HVAC (Aquecimento, ventilação e ar condicionado) do carro."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Quilometragem do carro"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Acessar informações sobre a quilometragem do carro."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Velocidade do carro"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Acessar a velocidade do carro."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Estado dinâmico do veículo"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Acessar estado dinâmico do carro"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Canal do fornecedor do carro"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Acessar o canal do fornecedor do carro para trocar informações específicas sobre o veículo."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Rádio do carro"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Acessar áudio do carro."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Projeção do carro"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Volume do áudio do carro"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Configurações de áudio do carro"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Projetar interface do smartphone na tela do carro."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Emular camada de abstração de hardware (HAL, na sigla em inglês) do veículo"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Emular camada de abstração de hardware (HAL, na sigla em inglês) do carro para fins de testes internos."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Controlar volume do áudio do carro."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Controlar configurações de áudio do carro."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Bloqueio de app"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Controlar bloqueio de app ao dirigir."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Gerenciador de navegação"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Enviar dados de navegação para o cluster de instrumento"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Renderização direta para cluster de instrumento"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Permitir que um app determine a exibição de atividades no cluster de instrumento"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Controle do cluster de instrumento"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Iniciar apps no cluster de instrumento"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Renderização de cluster de instrumento"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Receber dados do cluster de instrumento"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"Configuração das restrições de UX"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"Configurar restrições de UX"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Serviço de entrada do carro"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Gerenciar eventos de entrada"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"Falha no barramento CAN"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"O barramento CAN parou de responder. Desconecte e conecte novamente a caixa da unidade principal, depois ligue o carro"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"Para sua segurança, essa atividade não está disponível enquanto você dirige.\nPara continuar, aguarde até estacionar."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"Para reiniciar o app com recursos de segurança, selecione <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Voltar"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Info de depuração"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Dados de diagnóstico"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Ler dados de diagnóstico do carro"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Dados de diagnóstico"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Limpar dados de diagnóstico do carro"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"Editor de VMS"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"Publicar mensagens de VMS"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"Inscrição em VMS"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"Inscrever-se em mensagens de VMS"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Monitoramento do armazenamento flash"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Monitorar uso do armazenamento flash"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Estado de condução"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Ouvir quando o estado de condução for alterado"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Informações detalhadas do motor"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Acessar informações detalhadas do motor do carro"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Entradas de combustível"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Acessar entradas de abastecimento"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Identificação do carro"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Acessar identificação do carro"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Portas do carro"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Controlar portas do carro"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Janelas do carro"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Controlar janelas do carro"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Espelhos do carro"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Controlar espelhos do carro"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Bancos do carro"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Controlar bancos do carro"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Informações básicas do carro"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Acessar informações básicas do carro"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Luzes externas do carro"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Acessar estado das luzes externas do carro"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Luzes externas do carro"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Controlar as luzes externas do carro"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Temperatura externa do carro"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Acessar temperatura externa do carro"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Pneus do carro"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Acessar informações dos pneus do carro"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Sistema de transmissão do carro"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Informações sobre o sistema de transmissão do carro"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Potência do carro"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Acessar estado da potência do carro"</string>
+</resources>
diff --git a/service/res/values-ro/config.xml b/service/res/values-ro/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-ro/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-ro/strings.xml b/service/res/values-ro/strings.xml
new file mode 100644
index 0000000..78e5384
--- /dev/null
+++ b/service/res/values-ro/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Accesează informațiile despre mașină"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Accesează informațiile despre mașină."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Controlează cabina mașinii"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Accesează accesoriile mașinii, inclusiv ușile, oglinzile, locurile și geamurile."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Controlează camera mașinii"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Accesează camerele mașinii."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Accesează informațiile despre energia mașinii"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Accesează informațiile despre energie ale mașinii."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"Controlează sistemul Hvac al mașinii"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Accesează sistemul hvac al mașinii."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Accesează kilometrajul mașinii"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Accesează informațiile despre kilometrajul mașinii."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Accesează viteza mașinii"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Accesează viteza mașinii"</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Accesează starea dinamică a vehiculului"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Accesează starea dinamică a mașinii"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Accesează canalul furnizorului auto"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Accesați canalul furnizorului auto pentru a face schimb de informații specifice mașinii."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Controlează radioul mașinii"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Accesează radioul mașinii."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Controlează proiecția mașinii"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Controlează volumul audio din mașină"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Setările audio pentru mașină"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Accesează interfața telefonică a proiectului pe ecranul din mașină."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Imitați nivelul HAL al vehiculului"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Imită nivelul HAL al mașinii pentru testare internă."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Controlează volumul audio din mașină."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Controlați setările audio ale mașinii"</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Blocarea aplicațiilor"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Controlează blocarea aplicațiilor în timp ce conduceți."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Manager de navigare"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Raportează datele de navigare la grupul de instrumente"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Redare directă pe grupul de instrumente"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Permiteți unei aplicații să declare activitățile de afișat în grupul de instrumente"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Control pentru grupul de instrumente"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Lansați aplicațiile din grupul de instrumente"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Redarea grupurilor de instrumente"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Primiți date despre grupul de instrumente"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"Configurarea restricțiilor UX"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"Configurați restricțiile UX"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Gestionează serviciul de intrare pentru mașină"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Gestionează evenimentele de intrare"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"Magistrala CAN nu a reușit"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"Magistrala CAN nu răspunde. Deconectați și reconectați unitatea radio, apoi reporniți mașina"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"Pentru siguranța dvs., activitatea nu este disponibilă în timp ce conduceți.\nCa să continuați, așteptați să parcați."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"Pentru a începe din nou cu funcțiile pentru aplicații sigure, selectați <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Înapoi"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Informații de remediere a erorilor"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Controlează datele de diagnosticare"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Citește datele de diagnosticare de la mașină"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Controlează datele de diagnosticare"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Șterg datele de diagnosticare despre mașină"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"Publică date VMS"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"Publică mesaje vms"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"Se abonează la datele VMS"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"Se abonează la mesajele vms"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Monitorizează stocarea Flash"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Monitorizează utilizarea stocării flash"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Starea La volan"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Ascultă modificările stării La volan"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Citesc data curățării motorului"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Accesează informațiile detaliate despre motorul mașinii"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Accesează porturile de energie"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Accesează porturile de energie"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Accesează identificarea mașinii"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Accesează identificarea mașinii"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Controlează portierele mașinii"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Controlează portierele mașinii"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Controlează geamurile mașinii"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Controlează geamurile mașinii"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Controlează oglinzile mașinii"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Controlează oglinzile mașinii"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Controlează locurile din mașină"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Controlează locurile din mașină"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Citesc informații de bază despre mașină"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Accesează informațiile de bază ale mașinii"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Controlează luminile exterioare ale mașinii"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Accesează starea luminilor exterioare ale mașinii"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Controlează luminile exterioare ale mașinii"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Controlează luminile exterioare ale mașinii"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Temperatura exterioară a mașinii"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Accesează temperatura exterioară a mașinii"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Anvelopele mașinii"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Accesează informațiile despre anvelopele mașinii"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Citește informațiile din Powertrain"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Accesează informațiile powertrain ale mașinii"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Informații despre starea de încărcare a mașinii"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Accesează starea de încărcare a mașinii"</string>
+</resources>
diff --git a/service/res/values-ru/config.xml b/service/res/values-ru/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-ru/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-ru/strings.xml b/service/res/values-ru/strings.xml
new file mode 100644
index 0000000..b60a37a
--- /dev/null
+++ b/service/res/values-ru/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Данные автомобиля"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Предоставить приложению доступ к данным автомобиля"</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Салон"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Доступ к элементам кузова и салона, таким как двери, зеркала, окна и сиденья"</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Камера автомобиля"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Доступ к камерам автомобиля"</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Энергоресурсы"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Доступ к данным об энергоресурсах автомобиля"</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"ОВиК"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Доступ к системе ОВиК"</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Пробег"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Доступ к данным о пробеге автомобиля"</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Скорость автомобиля"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Доступ к данным о скорости автомобиля"</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Данные о динамике автомобиля"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Доступ к данным о динамике автомобиля"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Фирменный канал связи"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Доступ к фирменному каналу связи для обмена информацией"</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Радио в автомобиле"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Доступ к радио в автомобиле"</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Трансляция на экран автомобиля"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Громкость аудиосистемы"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Настройки аудиосистемы автомобиля"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Возможность показывать интерфейс телефона на экране автомобиля"</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Эмуляция интерфейса HAL"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Возможность эмулировать интерфейс HAL для внутреннего тестирования"</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Возможность управлять громкостью автомобильной аудиосистемы"</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Возможность управлять настройками аудиосистемы автомобиля"</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Блокировка приложений"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Возможность блокировать приложения на время вождения"</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Навигатор"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Возможность показывать данные навигатора на приборной панели"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Показ данных на приборной панели"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Возможность определять, какие данные показывать на приборной панели"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Управление приборной панелью"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Возможность запускать приложения с приборной панели"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Визуализация данных на приборной панели"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Возможность получать данные с приборной панели"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"Установка ограничений на использование функций"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"Возможность ограничивать использование функций"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Автомобильная служба ввода"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Возможность обрабатывать события ввода"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"Произошла ошибка шины CAN."</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"Шина CAN не отвечает. Переподключите коннектор, а затем выключите зажигание и заведите машину снова."</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"Во время вождения это действие недоступно.\nСначала вам нужно припарковаться."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"Чтобы перезапустить приложение в безопасном режиме, нажмите кнопку \"<xliff:g id="EXIT_BUTTON">%s</xliff:g>\"."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Назад"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Данные отладки"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Диагностическая информация"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Возможность считывать диагностические данные автомобиля"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Диагностическая информация"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Возможность удалять диагностические данные автомобиля"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"Публикация VMS-сообщений"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"Возможность публиковать VMS-сообщения"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"Подписка на VMS-сообщения"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"Возможность получать VMS-сообщения"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Мониторинг флеш-хранилища"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Возможность отслеживать использование флеш-хранилища"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Режим \"За рулем\""</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Возможность отслеживать изменения режима \"За рулем\""</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Двигатель"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Доступ к подробным данным о двигателе автомобиля"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Лючок бензобака или разъем для зарядки"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Доступ к лючку бензобака или разъему для зарядки"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Идентификационный номер автомобиля"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Доступ к идентификационным данным автомобиля"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Двери"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Возможность управлять дверями"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Окна автомобиля"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Возможность управлять окнами автомобиля"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Зеркала"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Возможность управлять зеркалами"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Сиденья"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Возможность управлять сиденьями"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Общая информация об автомобиле"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Доступ к общей информации об автомобиле"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Внешние осветительные приборы"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Доступ к данным о состоянии внешних осветительных приборов"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Внешние осветительные приборы"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Возможность управлять внешними осветительными приборами автомобиля"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Температура снаружи"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Доступ к данным о температуре снаружи"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Шины"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Доступ к данным о шинах"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Трансмиссия"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Доступ к данным о трансмиссии"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Электропитание"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Доступ к данным об электропитании автомобиля"</string>
+</resources>
diff --git a/service/res/values-si/config.xml b/service/res/values-si/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-si/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-si/strings.xml b/service/res/values-si/strings.xml
new file mode 100644
index 0000000..5190bb9
--- /dev/null
+++ b/service/res/values-si/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"මෝටර් රථයේ තොරතුරු"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"ඔබේ මෝටර් රථයේ තොරතුරු වෙත ප්‍රවේශ වන්න."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"මෝටර් රථයේ කුටීරය"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"දොරවල්, දර්පණ, අසුන්, සහ කවුළු ඇතුළුව ඔබේ මෝටර් රථයේ උපාංග වෙත ප්‍රවේශ වන්න."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"මෝටර් රථ කැමරාව"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"ඔබේ මෝටර් රථයේ කැමරා(ව) වෙත ප්‍රවේශ වන්න."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"මෝටර් රථයේ බල ශක්තිය"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"ඔබේ මෝටර් රථයේ බල ශක්ති තොරතුරු වෙත ප්‍රවේශ වන්න."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"මෝටර් රථ Hvac"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"ඔබේ මෝටර් රථයේ hvac වෙත ප්‍රවේශ වන්න."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"මෝටර් රථයේ ධාවන සැතපුම්"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"ඔබගේ මෝටර් රථයේ ධාවන සැතපුම් තොරතුරුවලට ප්‍රවේශ වන්න"</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"මෝටර් රථයේ වේගය"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"ඔබගේ මෝටර් රථයේ වේගය වෙත ප්‍රවේශ වන්න."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"වාහන ගතික තත්ත්‍වය"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"ඔබේ මෝටර් රථයේ ගතික තත්ත්‍වය වෙත ප්‍රවේශ වන්න"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"මෝටර් රථයේ අලෙවිකරු නාලිකාව"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"මෝටර් රථයට විශේෂිත තොරතුරු හුවමාරු කිරීමට ඔබේ මෝටර් රථයේ විකුණුම්කරු නාලිකාව වෙත ප්‍රවේශ වන්න."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"මෝටර් රථයේ ගුවන් විදුලිය"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"ඔබේ මෝටර් රථයේ ගුවන් විදුලියට ප්‍රවේශ වන්න."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"මෝටර් රථ ප්‍රක්‍ෂේපය"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"මෝටර් රථ ශ්‍රව්‍ය හඬ පරිමාණය"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"මෝටර් රථයේ ශ්‍රව්‍ය සැකසීම්"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"මෝටර් රථයේ සංදර්ශකය මත ව්‍යාපෘති දුරකථන අතුරුමුහුණත"</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"වාහන HAL උසස් කරන්න"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"අභ්‍යන්තර පරීක්‍ෂණ අරමුණ සඳහා ඔබේ මෝටර් රථයේ HAL උසස් කරන්න."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"ඔබේ මෝටර් රථයේ හඬ පරිමාණය පාලන කරන්න"</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"ඔබේ මෝටර් රථයේ ශ්‍රව්‍ය සැකසීම් පාලන කරන්න."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"යෙදුම් අවහිර කිරීම"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"රිය පදවන විට යෙදුම් අවහිර කිරීම පාලන කරන්න."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"සංචලන කළමනාකරු"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"උපකරණ කලඹ වෙත සංචලන දත්ත වාර්තා කරන්න"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"උපකරණ කලඹ වෙත ඍජු විදහීම"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"යෙදුමකට උපකරණ කලඹ තුළ සංදර්ශන කළ යුතු ක්‍රියාකාරකම් ප්‍රකාශ කිරීමට අවසර දෙන්න"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"උපකරණ කලප් පාලනය"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"උපකරණ කලඹ තුළ යෙදුම් දියත් කරන්න"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"උපකරණ කලප් විදහීම"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"උපකරණ කලප් දත්ත ලබා ගන්න"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"UX සීමා කිරීම් වින්‍යාසය"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"UX සීමා කිරීම් වින්‍යාස කරන්න"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"මෝටර් රථ ආදාන සේවය"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"ආදාන සිදුවීම් පරිහරණ කරන්න"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"CAN බස් අසාර්ථකයි"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN බස් ප්‍රතිචාර නොදක්වයි. හෙඩ්යුනිට් පෙට්ටිය පේනු ඉවත් කර ආපසු පේනුගත කර, මෝටර් රථය යළි අරඹන්න"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"ඔබේ ආරක්‍ෂාව සඳහා, ඔබ රිය පදවන විට මෙම ක්‍රියාකාරකම නොලැබේ.\nඉදිරියට යාමට, ඔබ ගාල් කරන තෙක් රැඳී සිටින්න."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"ආරක්‍ෂිත යෙදුම් විශේෂාංග සමඟ පටන් ගැනීමට, <xliff:g id="EXIT_BUTTON">%s</xliff:g> තෝරන්න."</string>
+    <string name="exit_button" msgid="5829638404777671253">"ආපසු"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"නිදොසීම"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"දෝෂ විනිශ්ච දත්ත"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"මෝටර් රථයෙන් දෝෂ විනිශ්ච දත්ත කියවන්න"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"දෝෂ විනිශ්ච දත්ත"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"මෝටර් රථයෙන් දෝෂ විනිශ්ච හිස් කරන්න"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"VMS ප්‍රකාශකය"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"vms පණිවුඩ ප්‍රකාශන කරන්න"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"VMS දායකයා"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"vms පණිවුඩවලට දායක වන්න"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"ෆ්ලෑෂ් ආචයන නිරීක්‍ෂණය"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"ෆ්ලෑෂ් ආචයන භාවිතය නිරීක්‍ෂණ කරන්න"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"රිය පැදවීමේ තත්ත්‍වය"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"රිය පැදවීම් තත්ත්‍ව වෙනස්කම්වලට සවන් දෙන්න"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"විස්තරාත්මක එන්ජිම"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"ඔබේ මෝටර් රථයේ විස්තරාත්මක එන්ජිම් තොරතුරු වෙත ප්‍රවේශ වන්න"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"බල ශක්ති තොටවල්"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"බල ශක්ති තොටවල් වෙත ප්‍රවේශ වන්න"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"මෝටර් රථයේ අනන්‍යතාව"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"මෝටර් රථයේ අනන්‍යතාව වෙත ප්‍රවේශ වන්න"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"මෝටර් රථයේ දොරවල්"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"මෝටර් රථයේ දොරවල් පාලන කරන්න"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"මෝටර් රථයේ කවුළු"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"මෝටර් රථයේ කවුළු පාලන කරන්න"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"මෝටර් රථයේ දර්පණ"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"මෝටර් රථයේ දර්පණ පාලන කරන්න"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"මෝටර් රථයේ ආසන"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"මෝටර් රථයේ ආසන පාලන කරන්න"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"මෝටර් රථයේ මූලික තොරතුරු"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"මෝටර් රථයේ මූලික තොරතුරු වෙත ප්‍රවේශ වන්න"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"මෝටර් රථයේ බාහිර ආලෝක"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"මෝටර් රථයේ බාහිර ආලෝක වෙත ප්‍රවේශ වන්න"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"මෝටර් රථයේ බාහිර ආලෝක"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"මෝටර් රථයේ බාහිර ආලෝක පාලන කරන්න"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"මෝටර් රථයේ බාහිර උෂ්ණත්වය"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"මෝටර් රථයේ බාහිර උෂ්ණත්වය වෙත ප්‍රවේශ වන්න"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"මෝටර් රථයේ ටයර්"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"මෝටර් රථයේ ටයර් තොරතුරු වෙත ප්‍රවේශ වන්න"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"මෝටර් රථ බල ශක්ති දාමය"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"මෝටර් රථයේ ජව දාම තොරතුරු වෙත ප්‍රවේශ වන්න"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"මෝටර් රථයේ බල ශක්තිය"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"මෝටර් රථයේ බල ශක්ති තත්ත්‍වය වෙත ප්‍රවේශ වන්න"</string>
+</resources>
diff --git a/service/res/values-sk/config.xml b/service/res/values-sk/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-sk/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-sk/strings.xml b/service/res/values-sk/strings.xml
new file mode 100644
index 0000000..f854bea
--- /dev/null
+++ b/service/res/values-sk/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Informácie o aute"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Získajte prístup k informáciám o aute."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Kabína auta"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Získajte prístup k príslušenstvu auta vrátane dverí, zrkadiel, sedadiel a okien."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Kamera auta"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Získajte prístup ku kamerám auta."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Palivo a energia auta"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Získajte prístup k informáciám o palive a energii auta."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"Vykurovanie, ventilácia a klimatizácia auta"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Získajte prístup k vykurovaniu, ventilácii a klimatizácii auta."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Počet najazdených kilometrov auta"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Získajte prístup k informáciám o počte najazdených kilometrov auta."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Rýchlosť auta"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Získajte prístup k informáciám o rýchlosti auta."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Dynamický stav vozidla"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Získať prístup k dynamickému stavu auta"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Kanál dodávateľa auta"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Získajte prístup ku kanálu dodávateľa auta s cieľom výmeny konkrétnych informácií o aute."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Rádio auta"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Získajte prístup k rádiu auta."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Projekcia v aute"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Hlasitosť zvuku v aute"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Nastavenia zvuku v aute"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Zobrazujte rozhranie telefónu na obrazovke auta."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Emulovať vrstvu HAL vozidla"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Emulujte vrstvu HAL auta na účely interného testovania."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Ovládajte hlasitosť zvuku v aute."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Ovládajte nastavenia zvuku v aute."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Blokovanie aplikácií"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Ovládajte blokovanie aplikácií počas jazdy."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Správca navigácie"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Nahlasovať údaje navigácie do klastra prístrojov"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Priame vykresľovanie do klastra prístrojov"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Povoliť aplikácii deklarovať aktivity, aby sa zobrazili v klastri prístrojov"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Ovládanie klastra prístrojov"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Spustiť aplikácie v klastri nástrojov"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Vykresľovanie klastra prístrojov"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Získavať údaje o klastri prístrojov"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"Konfigurácia obmedzení dojmu používateľa"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"Konfigurovať obmedzenia dojmu používateľa"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Služba vstupov auta"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Spravovať udalosti vstupu"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"Zbernica CAN zlyhala"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"Zbernica CAN nereaguje. Odpojte autorádio a znova ho pripojte. Potom auto znova naštartujte."</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"Z bezpečnostných dôvodov nie je táto aktivita k dispozícii počas jazdy.\nAk chcete pokračovať, počkajte, kým budete parkovať."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"Ak chcete začať odznova s bezpečnými funkciami aplikácie, vyberte tlačidlo <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Späť"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Informácie o ladení"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Diagnostické údaje"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Čítať diagnostické údaje z auta"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Diagnostické údaje"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Vymazať diagnostické údaje z auta"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"Vydavateľ VMS"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"Zverejniť správy VMS"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"Odberateľ VMS"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"Odoberať správy VMS"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Monitorovanie úložiska vo formáte Flash"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Monitorovať používanie úložiska vo formáte Flash"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Stav jazdy"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Počúvať zmeny stavu jazdy"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Podrobné informácie o motore"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Získajte prístup k podrobným informáciám o motore auta."</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Porty paliva a energie"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Získať prístup k portom paliva a energie"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Identifikačné číslo auta"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Získať prístup k identifikačnému číslu auta"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Dvere auta"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Ovládať dvere auta"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Okná auta"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Ovládať okná auta"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Zrkadlá auta"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Ovládať zrkadlá auta"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Sedadlá auta"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Ovládať sedadlá auta"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Základné informácie o aute"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Získať prístup k základným informáciám o aute"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Vonkajšie svetlá auta"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Získať prístup k stavu vonkajších svetiel auta"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Vonkajšie svetlá auta"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Ovládať vonkajšie svetlá auta"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Vonkajšia teplota auta"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Získať prístup k informáciám auta o vonkajšej teplote"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Pneumatiky auta"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Získať prístup k informáciám o pneumatikách auta"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Hnací agregát auta"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Získajte prístup k informáciám o hnacom agregáte auta"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Napájanie auta"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Získať prístup k stavu napájania auta"</string>
+</resources>
diff --git a/service/res/values-sl/config.xml b/service/res/values-sl/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-sl/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-sl/strings.xml b/service/res/values-sl/strings.xml
new file mode 100644
index 0000000..ba172bc
--- /dev/null
+++ b/service/res/values-sl/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Podatki o avtomobilu"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Dostop do podatkov o avtomobilu."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Kabina avtomobila"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Dostop do dodatkov avtomobila, vključno z vrati, ogledali, sedeži in okni."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Kamera avtomobila"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Dostop do kamer avtomobila."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Energija avtomobila"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Dostop do podatkov o energiji avtomobila."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"Sistem za ogrevanje, hlajenje in prezračevanje avtomobila"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Dostop do sistema za ogrevanje, hlajenje in prezračevanje avtomobila."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Prevoženi kilometri avtomobila"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Dostop do podatkov o prevoženih kilometrih avtomobila."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Hitrost avtomobila"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Dostop do hitrosti avtomobila."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Stanje dinamike vozila"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Dostop do stanja dinamike avtomobila"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Kanal prodajalca v avtomobilu"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Dostop do kanala prodajalca v avtomobilu za izmenjavo podatkov o avtomobilu."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Radio avtomobila"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Dostop do radia avtomobila."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Projiciranje v avtomobilu"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Glasnost zvoka v avtomobilu"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Nastavitve zvoka v avtomobilu"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Projiciranje vmesnika telefona na zaslon avtomobila."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Posnemanje HAL-a vozila"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Posnemanje HAL-a vozila za avtomobil zaradi internega preizkušanja."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Nadziranje glasnosti zvoka v avtomobilu."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Nadziranje nastavitev zvoka v avtomobilu."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Blokiranje aplikacij"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Nadziranje blokiranja aplikacij med vožnjo."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Upravitelj navigacije"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Sporočanje podatkov za navigacijo instrumentni plošči"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Usmeritev upodabljanja na instrumentno ploščo"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Omogočanje aplikaciji, da najavi dejavnosti za prikaz na instrumentni plošči"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Nadziranje instrumentne plošče"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Zagon aplikacij iz instrumentne plošče"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Upodobitev instrumentne plošče"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Prejemanje podatkov instrumentne plošče"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"Konfiguracija omejitev uporabniške izkušnje"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"Konfiguriranje omejitev uporabniške izkušnje"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Storitev za vhode avtomobila"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Obravnava dogodkov vnosa"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"Napaka vodila CAN"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"Vodilo CAN se ne odziva. Odklopite in znova priklopite ohišje avtomobilskega vmesnika ter znova zaženite avtomobil"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"Zaradi varnosti ta dejavnost med vožnjo ni na voljo.\nČe želite nadaljevati, počakajte, da bo vozilo parkirano."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"Če želite začeti znova z varnimi funkcijami aplikacij, izberite <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Nazaj"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Odpr. nap."</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Diagnostični podatki"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Branje diagnostičnih podatkov avtomobila"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Diagnostični podatki"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Brisanje diagnostičnih podatkov iz avtomobila"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"Izdajatelj za VMS"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"Objavljanje sporočil vms"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"Naročnik na VMS"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"Naročanje na sporočila vms"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Nadziranje bliskovne shrambe"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Nadziranje uporabe bliskovne shrambe"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Vozno stanje"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Poslušanje sprememb voznih stanj"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Podrobno o motorju"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Dostop do podrobnih podatkov o motorju avtomobila"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Vrata za energijo"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Dostop do vrat za energijo"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Identifikacijski podatki avtomobila"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Dostop do identifikacijskih podatkov avtomobila"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Vrata avtomobila"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Nadziranje vrat avtomobila"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Okna avtomobila"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Nadziranje oken avtomobila"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Ogledala avtomobila"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Nadziranje ogledal avtomobila"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Sedeži avtomobila"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Nadziranje sedežev avtomobila"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Osnovni podatki o avtomobilu"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Dostop do osnovnih podatkov o avtomobilu"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Zunanje luči avtomobila"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Dostop do stanja zunanjih luči avtomobila"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Zunanje luči avtomobila"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Nadziranje zunanjih luči avtomobila"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Temperatura zunaj avtomobila"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Dostop do temperature zunaj avtomobila"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Pnevmatike avtomobila"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Dostop do podatkov o pnevmatikah avtomobila"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Pogonski sistem avtomobila"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Dostop do podatkov o pogonskem sistemu avtomobila"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Napajanje avtomobila"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Dostop do stanja napajanja avtomobila"</string>
+</resources>
diff --git a/service/res/values-sq/config.xml b/service/res/values-sq/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-sq/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-sq/strings.xml b/service/res/values-sq/strings.xml
new file mode 100644
index 0000000..69aa668
--- /dev/null
+++ b/service/res/values-sq/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Informacionet e makinës"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Qasu në informacionet e makinës."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Kabina e makinës"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Qasu në aksesorët e makinës, duke përfshirë dyert, pasqyrat, ndenjëset dhe dritaret."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Kamera e makinës"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Qasu te kamera(t) e makinës."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Energjia e makinës"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Qasu tek informacionet e energjisë së makinës."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"Sistemi HVAC i makinës"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Qasu në sistemin HVAC të makinës."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Kilometrazhi i makinës"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Qasu në informacionet e kilometrazhit të makinës."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Shpejtësia e makinës"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Qasu në shpejtësinë e makinës."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Gjendja e dinamikës së automjetit"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Qasu në gjendjen e dinamikës së makinës"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Kanali i distributorit të makinës"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Qasu në kanalin e distributorit të makinës për të shkëmbyer informacione specifik për makinën."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Radioja e makinës"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Qasu te radioja e makinës."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Projektimi i makinës"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Volumi i audios së makinës"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Cilësimet e audios së makinës"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Projekto ndërfaqen e telefonit në ekranin e makinës."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Emulo ndërfaqen HAL të automjetit"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Emulo ndërfaqen HAL të makinës për qëllime testimi të brendshëm."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Kontrollo volumin e audios së makinës."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Kontrollo cilësimet e audios së makinës."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Bllokimi i aplikacioneve"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Kontrollo bllokimin e aplikacioneve gjatë drejtimit të makinës."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Menaxhimi i navigimit"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Raporto të dhënat e navigimit te grupimi i instrumenteve"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Interpretimi i drejtpërdrejtë te grupimi i instrumenteve"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Lejo që një aplikacion të deklarojë aktivitetet për t\'u shfaqur në grupimin e instrumenteve"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Kontrolli i grupimit të instrumenteve"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Hap aplikacionet në grupimin e instrumenteve"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Interpretimi i grupimit të instrumenteve"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Merr të dhënat e grupimit të instrumenteve"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"Konfigurimi i kufizimeve për eksperiencën e përdoruesit"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"Konfiguro kufizimet për eksperiencën e përdoruesit"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Shërbimi i hyrjes së makinës"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Menaxho ngjarjet e hyrjes"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"Kanali i komunikimit CAN dështoi"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"Kanali i komunikimit CAN nuk përgjigjet. Shkëput dhe lidh përsëri kutinë e njësisë kryesore dhe rindiz makinës"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"Për sigurinë tënde, ky aktivitet nuk ofrohet kur je duke drejtuar makinën.\nPër të vazhduar, prit deri sa të parkosh."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"Për të filluar nga e para me funksionet e sigurta të aplikacionit, zgjidh <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Prapa"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Informacionet e defekteve në kod"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Të dhënat diagnostikuese"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Lexo të dhënat diagnostikuese nga makina"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Të dhënat diagnostikuese"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Pastro të dhënat diagnostikuese nga makina"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"Publikuesi i të dhënave VMS"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"Publiko mesazhet VMS"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"Abonenti i të dhënave VMS"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"Abonohu te mesazhet VMS"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Monitorimi i hapësirës ruajtëse të formatit flash"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Monitoro përdorimin e hapësirës ruajtëse të formatit flash"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Gjendja e drejtimit të makinës"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Dëgjo ndryshimet e gjendjes së lëvizjes me makinë"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Motori në detaje"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Qasu tek informacionet e detajuara të motorit të makinës"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Portat e energjisë"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Qasu në portat e energjisë"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Identifikimi i makinës"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Qasu tek identifikimi i makinës"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Dyert e makinës"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Kontrollo dyert e makinës"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Dritaret e makinës"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Kontrollo dritaret e makinës"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Pasqyrat e makinës"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Kontrollo pasqyrat e makinës"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Ndenjëset e makinës"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Kontrollo ndenjëset e makinës"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Informacionet bazë të makinës"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Qasu tek informacionet bazë të makinës"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Dritat e jashtme të makinës"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Qasu te gjendja e dritave të jashtme të makinës"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Dritat e jashtme të makinës"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Kontrollo dritat e jashtme të makinës"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Temperatura e jashtme e makinës"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Qasu te temperatura e jashtme e makinës"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Gomat e makinës"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Qasu në informacionet e gomave të makinës"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Sistemi i transmetimit të makinës"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Qasu tek informacionet e sistemit të transmetimit të makinës"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Fuqia e makinës"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Qasu te gjendja e fuqisë së makinës"</string>
+</resources>
diff --git a/service/res/values-sr/config.xml b/service/res/values-sr/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-sr/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-sr/strings.xml b/service/res/values-sr/strings.xml
new file mode 100644
index 0000000..45f4d00
--- /dev/null
+++ b/service/res/values-sr/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Информације о аутомобилу"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Приступи информацијама о аутомобилу."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Путнички простор"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Приступи опреми аутомобила, укључујући врата, ретровизоре, седишта и прозоре."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Камера аутомобила"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Приступи камерама аутомобила."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Енергија аутомобила"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Приступи информацијама о енергији аутомобила."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"Грејање, вентилација и климатизација аутомобила"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Приступи грејању, вентилацији и климатизацији аутомобила"</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Пређени пут аутомобила"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Приступи информацијама о пређеном путу аутомобила."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Брзина аутомобила"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Приступи брзини аутомобила."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Статус динамике возила"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Приступи статусу динамике аутомобила"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Канал продавца аутомобила"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Приступи каналу продавца аутомобила ради размене посебних информација у вези са аутомобилом"</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Радио аутомобила"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Приступа радију аутомобила."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Пројекција у аутомобилу"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Јачина звука у аутомобилу"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Подешавања звука у аутомобилу"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Пројектује интерфејс телефона на екран у аутомобилу."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Емулација HAL возила"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Емулира HAL возила за аутомобил у сврхе интерног тестирања"</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Контролише јачину звука у аутомобилу."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Контролише подешавања звука у аутомобилу."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Блокирање апликација"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Контролише блокирање апликација током вожње."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Менаџер навигације"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Шаље податке за навигацију инструмент табли"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Директно приказивање на инструмент табли"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Дозволи да апликација наведе активности које ће се приказивати на инструмент табли"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Контрола инструмент табле"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Покреће апликације на инструмент табли"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Приказивање на инструмент табли"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Прима податке са инструмент табле"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"Конфигурација ограничења КД-а"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"Конфигурише ограничења КД-а"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Услуга аутомобилског уноса"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Управља догађајима уноса"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"Грешка CAN магистрале"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN магистрала не реагује. Искључите и поново укључите главну јединицу и поново покрените аутомобил"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"Ова активност није доступна док возите ради ваше безбедности.\nДа бисте наставили, прво се паркирајте."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"Да бисте поново почели са безбедним функцијама апликације, изаберите <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Назад"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Debug Info"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Дијагностички подаци"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Чита дијагностичке податке из аутомобила"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Дијагностички подаци"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Брише дијагностичке податке из аутомобила"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"Објављивање VMS података"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"Објављује vms поруке"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"Претплати на VMS поруке"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"Пријави на vms поруке"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Праћење флеш меморије"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Надгледа коришћење флеш меморије"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Статус вожње"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Слуша промена статуса вожње"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Детаљни подаци о аутомобилу"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Приступи детаљним подацима о мотору аутомобила"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Енергетски портови"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Приступи енергетским портовима"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Идентификација аутомобила"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Приступ подацима за идентификацију аутомобила"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Врата аутомобила"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Контролише врата аутомобила"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Прозори аутомобила"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Контролише прозоре аутомобила"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Ретровизори аутомобила"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Контролише ретровизоре аутомобила"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Седишта у аутомобилу"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Контролише седишта у аутомобилу"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Основне информације о аутомобилу"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Приступи основним подацима о аутомобилу"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Спољна светла аутомобила"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Приступи статусу спољних светла аутомобила"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Спољна светла аутомобила"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Контролише спољна светла аутомобила"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Спољна температура аутомобила"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Приступи спољној температури аутомобила"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Гуме аутомобила"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Приступ подацима о гумама аутомобила"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Погон аутомобила"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Приступи подацима о погону аутомобила"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Напајање аутомобила"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Приступ статусу напајања аутомобила"</string>
+</resources>
diff --git a/service/res/values-sv/config.xml b/service/res/values-sv/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-sv/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-sv/strings.xml b/service/res/values-sv/strings.xml
new file mode 100644
index 0000000..bacb499
--- /dev/null
+++ b/service/res/values-sv/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Information om bilen"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Åtkomst till information om bilen."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Bilens kupé"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Åtkomst till elstyrda delar som dörrar och luckor, speglar, säten och rutor."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Bilens kamera"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Åtkomst till bilens kamera eller kameror."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Bilens drivmedelsnivå"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Åtkomst till information om bilens drivmedel."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"Bilens värme-, ventilations- och AC-system"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Åtkomst till bilens värme-, ventilations- och AC-system."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Bränsleförbrukning"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Åtkomst till information om bilens bränsleförbrukning."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Bilens hastighet"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Åtkomst till information om bilens hastighet."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Fordonsdynamiskt tillstånd"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Åtkomst till bilens fordonsdynamiska tillstånd"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Information från bilens tillverkare"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Åtkomst till biltillverkarens kommunikationskanal för information om bilen."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Bilens radio"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Åtkomst till bilens radio."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Projicering i bilen"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Ljudvolym i bilen"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Inställningar för ljud i bilen"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Projicera mobilens gränssnitt på bilens skärm"</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Emulera Vehicle HAL"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Emulera bilens Vehicle HAL i internt testsyfte"</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Styra ljudvolymen i bilen."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Styra ljudinställningarna i bilen."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Appblockering"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Styra blockering av appar under körning."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Navigeringshanterare"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Visa navigeringsdata på bilens digitala instrumentbräda"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Rendering direkt på bilens digitala instrumentbräda"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Tillåt att en apps aktiviteter får visas på bilens digitala instrumentbräda"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Styrning av digital instrumentbräda"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Starta appar på bilens digitala instrumentbräda"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Rendering på digital instrumentbräda"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Ta emot data från bilens digitala instrumentbräda"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"Konfiguration för användningsbegränsningar"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"Konfigurera användningsbegränsningar"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Indatatjänst för bilen"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Hantera indatahändelser"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"Fel i CAN-bussen"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN-bussen svarar inte. Koppla från huvudenheten och koppla in den igen. Starta sedan om bilen"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"Av säkerhetsskäl är den här aktiviteten inte tillgänglig under körning.\nDu kan fortsätta med detta när du har parkerat."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"Välj <xliff:g id="EXIT_BUTTON">%s</xliff:g> om du vill starta om appen med säkra funktioner."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Tillbaka"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Debug Info"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Diagnostikdata"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Läsa diagnostisk data om bilen"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Diagnostikdata"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Rensa bilens diagnostikdata"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"VMS-publicering"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"Publicera VMS-meddelanden"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"VMS-prenumeration"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"Prenumerera på VMS-meddelanden"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Övervaka Flash-lagringsenheter"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Övervaka användning av Flash-lagringsutrymme"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Bilkörningsläge"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Reagera på ändringar av bilkörningsläget"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Detaljerad motorinformation"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Åtkomst till detaljerad information om bilens motor"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Drivmedelsportar"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Åtkomst till drivmedelsportar"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Identifiera bilen"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Åtkomst till bilens id-information"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Bilens dörrar och luckor"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Styra bilens dörrar och luckor"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Bilens rutor"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Styra bilens rutor"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Bilens speglar"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Styra bilens speglar"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Bilens säten"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Styra bilens säten"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Grundläggande information om bilen"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Åtkomst till grundläggande information om bilen"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Bilens utvändiga belysning"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Åtkomst till status för bilens utvändiga belysning"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Bilens utvändiga belysning"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Styra bilens utvändiga belysning"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Utomhustemperatur kring bilen"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Åtkomst till utomhustemperaturen kring bilen"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Bilens däck"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Åtkomst till information om bilens däck"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Bilens drivlina"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Åtkomst till information om bilens drivlina"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Bilens laddning"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Åtkomst till bilens laddning"</string>
+</resources>
diff --git a/service/res/values-sw/config.xml b/service/res/values-sw/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-sw/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-sw/strings.xml b/service/res/values-sw/strings.xml
new file mode 100644
index 0000000..62ebe5d
--- /dev/null
+++ b/service/res/values-sw/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Maelezo ya gari"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Kufikia maelezo ya gari lako"</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Kabini ya Gari"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Kufikia maelezo ya sehemu zingine za gari lako, kwa mfano milango, vioo, viti na madirisha."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Kamera ya Gari"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Kufikia kamera ya gari lako."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Nishati ya gari"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Kufikia maelezo ya nishati ya gari lako."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"Hali ya joto, hewa na kiyoyozi (Hvac) ya Gari"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Kufikia hali ya joto, hewa na kiyoyozi (hvac) ya gari lako."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Masafa ya gari"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Kufikia maelezo ya masafa ya gari lako."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Kasi ya gari"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Kufikia maelezo ya kasi ya gari lako."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Hali ya mabadiliko kwenye gari linapowekewa vipengee mbalimbali likiwa katika mwendo"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Kufikia maelezo ya mabadiliko kwenye gari linapowekewa vipengee mbalimbali likiwa katika mwendo"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Kituo cha muuzaji gari"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Kufikia kituo cha muuzaji wa gari lako ili kubadilisha taarifa mahususi za gari."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Redio ya Gari"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Kufikia redio ya gari lako."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Kuonekana kwa Gari"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Kiwango cha Sauti ya Gari"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Mipangilio ya Sauti ya Gari"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Kuonyesha kiolesura cha simu kwenye skrini ya gari."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Kuiga HAL ya Gari"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Kuiga HAL ya gari lako kwa madhumuni ya jaribio la ndani."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Kudhibiti kiwango cha sauti ya gari lako."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Kudhibiti mipangilio ya sauti ya gari lako."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Uzuiaji wa programu"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Kudhibiti uzuiaji wa programu unapoendesha gari."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Kidhibiti cha Maelekezo"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Kuripoti data ya maelekezo kwenye kikundi cha zana"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Uwasilishaji wa moja kwa moja hadi kwenye kikundi cha zana"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Ruhusu programu itangaze shughuli zinazoonyeshwa kwenye kikundi cha zana"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Kidhibiti cha kikundi cha zana"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Kuanzisha programu katika kikundi cha data"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Uwasilishaji wa Kikundi cha Zana"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Kupokea data ya kikundi cha zana"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"Mipangilio ya Masharti ya UX"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"Weka Mipangilio ya Masharti ya UX"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Huduma ya Kuweka Data ya Gari"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Kudhibiti matukio ya kuweka data"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"Imeshindwa kuleta maelezo ya kebo CAN"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"Kebo ya CAN haifanyi kazi. Ondoa kisha urudishe tena kisanduku cha sehemu kuu na uzime kisha uwashe gari"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"Kwa usalama wako, shughuli haipatikani wakati unaendesha gari. \nIli uendelee, subiri hadi utakapoegesha gari."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"Ili uanzishe tena ukitumia vipengele salama vya programu, chagua <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Rudi Nyuma"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Debug Info"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Data ya Uchunguzi"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Kusoma data ya uchunguzi kwenye gari"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Data ya Uchunguzi"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Kufuta data ya uchunguzi kwenye gari"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"Kichapishaji cha VMS"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"Kuchapisha ujumbe wa VMS"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"Mteja wa VMS"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"Kujisajili kwenye ujumbe wa VMS"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Kuchunguza nafasi ya kifaa cha kuhifadhi data"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Kudhibiti matumizi ya kifaa cha kuhifadhi"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Hali ya Kuendesha Gari"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Kusikiliza mabadiliko katika Hali ya Kuendesha Gari"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Maelezo ya Injini"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Kufikia maelezo ya kina ya injini ya gari lako"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Milango ya Nishati"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Kufikia milango ya nishati"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Utambulisho wa gari"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Kufikia utambulisho wa gari"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Milango ya Gari"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Kudhibiti milango ya gari"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Madirisha ya Gari"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Kudhibiti madirisha ya gari"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Vioo vya Gari"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Kudhibiti vioo vya gari"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Viti vya Gari"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Kudhibiti viti vya gari"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Maelezo ya msingi ya gari"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Kufikia maelezo ya msingi ya gari"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Taa za nje ya gari"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Kufikia hali ya taa za nje za gari"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Taa za nje ya gari"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Kudhibiti taa za nje za gari"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Halijoto ya nje ya gari lako"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Kufikia halijoto ya nje ya gari lako"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Magurudumu ya gari"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Kufikia maelezo ya magurudumu ya gari"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Mfumo wa Usambazaji wa Nishati Garini"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Kufikia maelezo ya kisambazaji cha nishati garini"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Nishati ya Gari"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Kufikia hali ya nishati ya gari"</string>
+</resources>
diff --git a/service/res/values-ta/config.xml b/service/res/values-ta/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-ta/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-ta/strings.xml b/service/res/values-ta/strings.xml
new file mode 100644
index 0000000..ce903db
--- /dev/null
+++ b/service/res/values-ta/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"காரின் தகவல்"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"காரின் தகவலை அணுகுதல்."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"காரின் கேபின்"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"காரின் கதவுகள், கண்ணாடிகள், இருக்கைகள், ஜன்னல்கள் போன்றவற்றை அணுகுதல்."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"காரின் கேமரா"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"காரின் கேமராவை அணுகுதல்."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"காரின் எரிபொருள்"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"காரின் எரிபொருள் தகவலை அணுகுதல்."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"காரில் வெப்பம், காற்றோட்டம், குளிர்சாதன வசதி ஆகியவற்றை உள்ளடக்கிய அமைப்பு (hvac)"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"காரில் வெப்பம், காற்றோட்டம், குளிர்சாதன வசதி ஆகியவற்றை உள்ளடக்கிய அமைப்பை (hvac) அணுகுதல்."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"காரின் மைலேஜ்"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"காரின் மைலேஜ் தகவலை அணுகுதல்."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"காரின் வேகம்"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"காரின் வேகத்தை அணுகுதல்."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"வாகனத்தின் இயக்கவியல் நிலை"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"காரின் இயக்கவியலை அணுகுதல்"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"காரின் தயாரிப்பாளர் விவரங்கள்"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"கார் பற்றிய தகவலைப் பகிர்ந்துகொள்ள காரின் தயாரிப்பாளர் விவரங்களை அணுகுதல்."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"கார் ரேடியோ"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"காரின் ரேடியோவை அணுகுதல்."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"காரின் காட்சிப்படுத்தல்"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"காரின் ஆடியோ அளவு"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"கார் ஆடியோ அமைப்புகள்"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"காரின் திரையில் மொபைல் திரையைக் காட்சிப்படுத்துதல்."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"வாகனத்தின் HAL போன்றே இன்னொன்றை உருவாக்குதல்"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"உள்ளுக்குள்ளேயே சோதனை செய்து பார்ப்பதற்காகக் காரின் HALலைப் போன்றே இன்னொன்றை உருவாக்குதல்."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"காரின் ஆடியோ அளவைச் சரிசெய்தல்."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"காரின் ஆடியோ அமைப்புகளை நிர்வகித்தல்."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"ஆப்ஸைத் தடுத்தல்"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"வாகனம் ஓட்டும்போது ஆப்ஸ் தடுக்கப்படுவதை நிர்வகித்தல்."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"வழிசெலுத்தல் நிர்வாகி"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"வழிசெலுத்தல் தரவை இன்ஸ்ட்ருமெண்ட் கிளஸ்டருக்கு அனுப்புதல்"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"இன்ஸ்ட்ருமெண்ட் கிளஸ்டரை நேரடியாக ஒழுங்கமைத்தல்"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"இன்ஸ்ட்ருமெண்ட் கிளஸ்டரில் காட்டப்பட வேண்டிய செயல்பாடுகளை அறிவிப்பதற்கு ஏதேனும் ஓர் ஆப்ஸை அனுமதித்தல்"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"இன்ஸ்ட்ருமெண்ட் கிளஸ்டரை இயக்குதல்"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"இன்ஸ்ட்ருமெண்ட் கிளஸ்டரில் ஆப்ஸை அறிமுகம் செய்தல்"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"இன்ஸ்ட்ருமெண்ட் கிளஸ்டரை ஒழுங்கமைத்தல்"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"இன்ஸ்ட்ருமெண்ட் கிளஸ்டர் தரவைப் பெறுதல்"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"UX கட்டுப்பாடுகள் உள்ளமைவு"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"UX கட்டுப்பாடுகளை உள்ளமைத்தல்"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"காருக்கு உற்பத்தியாளர் வழங்கும் சேவை"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"உற்பத்தியாளர் வழங்கும் சேவைகளைக் கையாளுதல்"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"CAN bus அமைப்பு தோல்வியடைந்தது"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN bus அமைப்பு இயங்கவில்லை. ஹெட்யூனிட் பாக்ஸைப் பிளக்கில் இருந்து அகற்றிச் செருகியபின் காரை மீண்டும் தொடங்கவும்"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"உங்கள் பாதுகாப்பை முன்னிட்டு இந்தச் செயல்பாடு, வாகனம் ஓட்டும்போது இயங்காது.\nதொடர வாகனத்தை நிறுத்தும்வரை காத்திருக்கவும்."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"ஆப்ஸைப் பாதுகாப்பான அம்சங்களுடன் மீண்டும் தொடங்க <xliff:g id="EXIT_BUTTON">%s</xliff:g>ஐத் தேர்ந்தெடுக்கவும்."</string>
+    <string name="exit_button" msgid="5829638404777671253">"பின்செல்"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"பிழைதிருத்தத் தகவல்"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"கண்டறியப்பட்ட தரவு"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"காரைக் குறித்துக் கண்டறிந்த தரவைப் படித்தல்"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"கண்டறியப்பட்ட தரவு"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"காரைக் குறித்துக் கண்டறிந்த தகவலை அழித்தல்"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"VMS தரவை அனுப்புதல்"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"vms மெசேஜ்களை அனுப்புதல்"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"VMS தரவை அணுகுதல்"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"vms மெசேஜ்களைப் பெறுதல்"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"ஃபிளாஷ் சேமிப்பகத்தைக் கண்காணித்தல்"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"ஃபிளாஷ் சேமிப்பகத்தின் உபயோகத்தைக் கண்காணித்தல்"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"வாகனம் ஓட்டும் நிலை"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"ஓட்டும் நிலையில் ஏற்படும் மாற்றங்களைக் கவனித்தல்"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"இன்ஜின் விவரம்"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"காரின் இன்ஜின் தகவலை முழுமையாக அணுகுதல்"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"எரிபொருள் டாங்கின் போர்ட்டுகள்"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"எரிபொருள் டாங்கின் போர்ட்டுகளை அணுகுதல்"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"காரின் VIN"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"காரின் VIN தகவலை அணுகுதல்"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"கார் கதவுகள்"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"காரின் கதவுகளை இயக்குதல்"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"காரின் ஜன்னல்கள்"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"காரின் ஜன்னல்களை இயக்குதல்"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"கார் கண்ணாடிகள்"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"காரின் கண்ணாடிகளை இயக்குதல்"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"கார் இருக்கைகள்"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"காரின் இருக்கைகளை இயக்குதல்"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"காரின் அடிப்படைத் தகவல்"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"காரின் அடிப்படைத் தகவலை அணுகுதல்"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"காரின் வெளிப்புறத்தில் உள்ள முகப்பு விளக்கு, இண்டிகேட்டர் போன்றவை"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"காரின் வெளிப்புறத்தில் உள்ள முகப்பு விளக்கு, இண்டிகேட்டர் போன்றவற்றை அணுகுதல்"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"காரின் வெளிப்புறத்தில் உள்ள முகப்பு விளக்கு, இண்டிகேட்டர் போன்றவை"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"முகப்பு விளக்கு, இண்டிகேட்டர் போன்றவற்றை இயக்குதல்"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"காரின் வெளிப்புறத்தில் உள்ள வெப்பநிலை"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"காருக்கு வெளிப்புறத்தில் உள்ள முகப்பு விளக்கு, இண்டிகேட்டர் போன்றவற்றை அணுகுதல்"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"கார் டயர்கள்"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"கார் டயர் குறித்த தகவலை அணுகுதல்"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"காரின் பவர்டிரெயின்"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"காரின் பவர்டிரெயின் தகவலை அணுகுதல்"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"காரின் பவர்"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"காரின் பவர் நிலையை அணுகுதல்"</string>
+</resources>
diff --git a/service/res/values-te/config.xml b/service/res/values-te/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-te/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-te/strings.xml b/service/res/values-te/strings.xml
new file mode 100644
index 0000000..def3ff3
--- /dev/null
+++ b/service/res/values-te/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"కారు సమాచారం"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"మీ కారు సమాచారం యాక్సెస్ చేయండి"</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"కారు క్యాబిన్"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"తలుపులు, అద్దాలు, సీట్లు మరియు విండోలతో సహా మీ కారు ఉపకరణాలను యాక్సెస్ చేయండి."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"కారు కెమెరా"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"మీ కారు యొక్క కామెరా(లు)ని యాక్సెస్ చేయండి."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"కారు శక్తి"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"మీ కారు శక్తి సమాచారాన్ని యాక్సెస్ చేయండి."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"కారు Hvac"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"మీ కారు యొక్క hvacని యాక్సెస్ చేయండి"</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"కారు మైలేజీ"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"మీ కారు మైలేజీ సమాచారాన్ని యాక్సెస్ చేయండి."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"కారు వేగం"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"మీ కారు వేగం సమాచార యాక్సెస్ చేయండి"</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"వాహన డైనమిక్స్ స్థితి"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"మీ కారు యొక్క డైనమిక్స్ స్థితిని యాక్సెస్ చేయండి"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"కారు విక్రయదారు ఛానెల్"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"కారు నిర్దిష్ట సమాచారాన్ని పంచుకోవడానికి మీ కారు విక్రేత ఛానెల్‌ను యాక్సెస్ చేయండి"</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"కారు రేడియో"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"మీ కారు రేడియోను యాక్సెస్ చేయండి"</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"కారు ప్రొజెక్షన్"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"కారు ఆడియో వాల్యూమ్"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"కారు సీట్లు"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"కారు ప్రదర్శన మీద ఫోన్ ఇంటర్‌ఫేస్ ప్రోజెక్ట్ చేయండి."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"వాహన HALని అనుకరించండి"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"అంతర్గత పరీక్ష ప్రయోజనం కోసం మీ కారు వాహనం HALను మార్చుకోండి."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"మీ కారు యొక్క ఆడియో వాల్యూమ్‌ని నియంత్రించండి."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"మీ కారు ఆడియో సెట్టింగ్‌లను నియంత్రించండి."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"యాప్ బ్లాక్ చేయడం"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"డ్రైవింగ్‌లో ఉన్నప్పుడు అప్లికేషన్‌లను బ్లాక్ చేయండి"</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"నావిగేషన్ మేనేజర్"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"పరికర గుంపుకు నావిగేషన్ డేటాని నివేదించండి"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"పరికర గుంపుకు ప్రత్యక్ష రెండరింగ్"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"పరికర గుంపులో ప్రదర్శించాల్సిన కార్యకలాపలని తెలియచెప్పడానికి అప్లికేషన్‌ను అనుమతించండి."</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"పరికర గుంపు నియంత్రణ"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"పరికర గుంపు యాప్‌లను ప్రారంభించండి"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"పరికర గుంపు రెండరింగ్"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"పరికర గుంపు డేటాని పొందండి"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"UX పరిమితుల కాన్ఫిగరేషన్"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"UX పరిమితులను కాన్ఫిగర్ చెయ్యండి"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"కారు ఇన్‌పుట్ సేవ"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"ఇన్‌పుట్ ఈవెంట్‌లను హ్యాండిల్ చేయండి"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"CAN బస్సు విఫలమైంది"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN బస్సు స్పందించలేదు. హెడ్ యూనిట్ బాక్స్‌‍‌ని ప్లగ్ మరియు అన్‌ప్లగ్ చేసి కారుని పునఃప్రారంభించుము"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"మీ భద్రత విషయమై, ఈ కార్యాచరణ మీరు డ్రైవింగ్‌లో ఉన్నప్పుడు అందుబాటులో లేదు.\n కొనసాగించడానికి, మీరు పార్క్ చేయబడేవరకు వేచి ఉండండి."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"సురక్షిత యాప్ లక్షణాలతో ప్రారంభించడానికి, <xliff:g id="EXIT_BUTTON">%s</xliff:g>ని ఎంచుకోండి."</string>
+    <string name="exit_button" msgid="5829638404777671253">"వెనుకకు"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"డీబగ్ సమాచారం"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"సమస్య విశ్లేషణ డేటా"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"కారు నుండి విశ్లేషణ డేటాను చదవండి"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"సమస్య విశ్లేషణ డేటా"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"కారు నుండి విశ్లేషణ డేటాను తొలగించండి"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"VMS ప్రచురణకర్త"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"vms సందేశాలను ప్రచురించండి"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"VMS సభ్యుడు"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"Vms సందేశాలకు సభ్యత్వం పొందండి"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"ఫ్లాష్ నిల్వ పర్యవేక్షణ"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"ఫ్లాష్ నిల్వ వినియోగాన్ని పర్యవేక్షించండి"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"డ్రైవింగ్ స్థితి"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"డ్రైవింగ్ స్థితి మార్పులను వినండి"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"ఇంజిన్ వివరాలు"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"మీ కారు యొక్క సమగ్ర ఇంజిన్ సమాచారాన్ని యాక్సెస్ చేయండి"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"శక్తి పోర్ట్‌లు"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"శక్తి పోర్ట్‌లను యాక్సెస్ చేయండి"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"కారు గుర్తింపు"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"కారు యొక్క గుర్తింపును యాక్సెస్ చేయండి"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"కారు డోర్‌లు"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"కార్ యొక్క డోర్‌లను నియంత్రించండి"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"కారు విండోలు"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"కార్ యొక్క విండోలను నియంత్రించండి"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"కారు అద్దాలు"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"కారు యొక్క అద్దాలను నియంత్రించండి"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"కారు సీట్లు"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"కారు యొక్క సీట్లను నియంత్రించండి"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"కారు ప్రాథమిక సమాచారం"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"కారు యొక్క ప్రాథమిక సమాచారాన్ని యాక్సెస్ చేయండి"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"కారు బాహ్య లైట్‌లు"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"కారు యొక్క బాహ్య లైట్లను యాక్సెస్ చేయండి"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"కారు బాహ్య లైట్‌లు"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"కారు యొక్క బాహ్య లైట్లను నియంత్రించండి"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"కారు బాహ్య ఉష్ణోగ్రత"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"కారు యొక్క బాహ్య ఉష్ణోగ్రతను యాక్సెస్ చేయండి"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"కారు టైర్లు"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"కారు టైర్ యాక్సెస్ సమాచారాన్ని చేయండి"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"కారు పవర్ ట్రైన్"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"కారు పవర్ ట్రైన్ సమాచారాన్ని యాక్సెస్ చేయండి"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"కారు పవర్"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"కారు యొక్క పవర్ స్థితిని యాక్సెస్ చేయండి"</string>
+</resources>
diff --git a/service/res/values-th/config.xml b/service/res/values-th/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-th/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-th/strings.xml b/service/res/values-th/strings.xml
new file mode 100644
index 0000000..dbabe27
--- /dev/null
+++ b/service/res/values-th/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"ข้อมูลรถยนต์"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"เข้าถึงข้อมูลรถของคุณ"</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"ห้องโดยสารรถยนต์"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"เข้าถึงอุปกรณ์ในรถ ซึ่งรวมถึงประตู กระจก ที่นั่ง และหน้าต่าง"</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"กล้องของรถ"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"เข้าถึงกล้องของรถ"</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"พลังงานของรถ"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"เข้าถึงข้อมูลพลังงานของรถ"</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"Hvac ของรถ"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"เข้าถึง HVAC ของรถ"</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"ระยะไมล์ของรถ"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"เข้าถึงข้อมูลระยะไมล์ของรถ"</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"ความเร็วรถ"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"เข้าถึงความเร็วของรถ"</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"สภาวะไดนามิกของยานพาหนะ"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"เข้าถึงสภาวะไดนามิกของรถ"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"ช่องทางของผู้ขายรถ"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"เข้าถึงช่องทางของผู้ขายรถเพื่อแลกเปลี่ยนข้อมูลเฉพาะของรถยนต์"</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"วิทยุในรถ"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"เข้าถึงวิทยุในรถ"</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"การแสดงอินเทอร์เฟซโทรศัพท์ในจอแสดงผลของรถ"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"ระดับเสียงของระบบเสียงรถ"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"การตั้งค่าระบบเสียงของรถ"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"แสดงอินเทอร์เฟซโทรศัพท์ในจอแสดงผลของรถ"</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"เลียนแบบ HAL ยานพาหนะ"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"เลียนแบบ HAL ยานพาหนะของรถคุณเพื่อจุดประสงค์ด้านการทดสอบภายใน"</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"ควบคุมระดับเสียงของระบบเสียงรถ"</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"ควบคุมการตั้งค่าระบบเสียงของรถ"</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"การบล็อกแอปพลิเคชัน"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"ควบคุมการบล็อกแอปพลิเคชันขณะขับรถ"</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"ตัวจัดการการนำทาง"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"รายงานข้อมูลการนำทางไปยังแผงหน้าปัด"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"การแสดงผลไปยังแผงหน้าปัดโดยตรง"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"อนุญาตให้แอปพลิเคชันประกาศกิจกรรมที่จะแสดงในแผงหน้าปัด"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"การควบคุมแผงหน้าปัด"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"เปิดแอปต่างๆ ในแผงหน้าปัด"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"การแสดงผลแผงหน้าปัด"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"รับข้อมูลจากแผงหน้าปัด"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"การกำหนดค่าข้อจำกัด UX"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"กำหนดค่าข้อจำกัด UX"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"บริการป้อนข้อมูลของรถ"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"จัดการเหตุการณ์การป้อนข้อมูล"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"CAN Bus ล้มเหลว"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN Bus ไม่ตอบสนอง ถอดปลั๊กกล่องเครื่องเล่นวิทยุ (Headunit) แล้วเสียบกลับเข้าไป สตาร์ทรถอีกครั้ง"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"เพื่อความปลอดภัย กิจกรรมนี้จะไม่เปิดให้ใช้งานขณะขับรถ\nคุณต้องจอดรถให้เรียบร้อยก่อน จึงจะดำเนินการต่อได้"</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"เลือก <xliff:g id="EXIT_BUTTON">%s</xliff:g> เพื่อเริ่มต้นใหม่โดยใช้ฟีเจอร์แอปที่ปลอดภัย"</string>
+    <string name="exit_button" msgid="5829638404777671253">"กลับ"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Debug Info"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"ข้อมูลการวินิจฉัย"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"อ่านข้อมูลการวินิจฉัยจากรถ"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"ข้อมูลการวินิจฉัย"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"ล้างข้อมูลการวินิจฉัยจากรถ"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"ผู้เผยแพร่ข้อมูล VMS"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"เผยแพร่ข้อความ VMS"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"ผู้สมัครรับข้อมูล VMS"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"สมัครรับข้อมูล VMS"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"การตรวจสอบพื้นที่เก็บข้อมูลแฟลช"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"ตรวจสอบการใช้งานพื้นที่เก็บข้อมูลแฟลช"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"สถานะการขับรถ"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"ฟังการเปลี่ยนแปลงสถานะการขับรถ"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"รายละเอียดเครื่องยนต์"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"เข้าถึงข้อมูลเครื่องยนต์ของรถโดยละเอียด"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"ฝาถังน้ำมันหรือพอร์ตชาร์จไฟ"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"เข้าถึงฝาถังน้ำมันหรือพอร์ตชาร์จไฟ"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"การระบุตัวรถ"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"เข้าถึงการระบุตัวรถ"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"ประตูรถ"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"ควบคุมประตูรถ"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"หน้าต่างรถ"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"ควบคุมหน้าต่างรถ"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"กระจกรถ"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"ควบคุมกระจกรถ"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"ที่นั่งในรถ"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"ควบคุมที่นั่งในรถ"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"ข้อมูลเบื้องต้นของรถ"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"เข้าถึงข้อมูลเบื้องต้นของรถ"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"ไฟภายนอกรถ"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"เข้าถึงสถานะไฟภายนอกรถ"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"ไฟภายนอกรถ"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"ควบคุมแสงภายนอกรถ"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"อุณหภูมิภายนอกรถ"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"เข้าถึงข้อมูลอุณหภูมิภายนอกรถ"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"ยางรถ"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"เข้าถึงข้อมูลยางรถ"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"ระบบส่งกำลังของรถ"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"เข้าถึงข้อมูลระบบส่งกำลังของรถ"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"พลังงานของรถ"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"เข้าถึงสถานะพลังงานของรถ"</string>
+</resources>
diff --git a/service/res/values-tl/config.xml b/service/res/values-tl/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-tl/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-tl/strings.xml b/service/res/values-tl/strings.xml
new file mode 100644
index 0000000..5ac6e8b
--- /dev/null
+++ b/service/res/values-tl/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Impormasyon ng sasakyan"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"I-access ang impormasyon ng iyong sasakyan."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Cabin ng Sasakyan"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"I-access ang mga accessory ng iyong sasakyan, kabilang ang mga pintuan, salamin, upuan, at bintana."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Camera ng Sasakyan"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"I-access ang (mga) camera ng iyong sasakyan."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Enerhiya ng sasakyan"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"I-access ang impormasyon sa enerhiya ng iyong sasakyan."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"Hvac ng Sasakyan"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"I-access ang hvac ng iyong sasakyan."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Mileage ng sasakyan"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"I-access ang impormasyon sa mileage ng iyong sasakyan."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Bilis ng sasakyan"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"I-access ang bilis ng iyong sasakyan."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Status ng dynamics ng sasakyan"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"I-access ang status ng dynamics ng iyong sasakyan"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Channel ng vendor ng sasakyan"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"I-access ang channel ng vendor ng iyong sasakyan para makipagpalitan ng impormasyong partikular sa sasakyan."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Radyo ng Sasakyan"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"I-access ang radyo ng iyong sasakyan."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Pag-project ng Sasakyan"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Volume ng Audio ng Sasakyan"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Mga Setting ng Audio ng Sasakyan"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"I-project ang interface ng telepono sa display ng sasakyan."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Gayahin ang HAL ng sasakyan"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Gayahin ang HAL ng iyong sasakyan para sa layunin ng internal na pagsubok."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Kontrolin ang volume ng audio ng iyong sasakyan."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Kontrolin ang mga setting ng audio ng iyong sasakyan."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Pag-block ng application"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Kontrolin ang pag-block ng application habang nagmamaneho."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Navigation Manager"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Iulat ang navigation data sa cluster ng instrumento"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Idirekta ang pag-render sa cluster ng instrumento"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Payagan ang isang application na magpahayag ng mga aktibidad na ipapakita sa cluster ng instrumento"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Kontrol ng cluster ng instrumento"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Ilunsad ang mga app sa cluster ng instrumento"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Pag-render ng Cluster ng Instrumento"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Makatanggap ng data ng cluster ng instrumento"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"Configuration ng Mga Paghihigpit sa UX"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"I-configure ang Mga Paghihigpit sa UX"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Serbisyo sa Input ng Sasakyan"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Pangasiwaan ang mga event ng input"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"Hindi gumana ang CAN bus"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"Hindi tumugon ang CAN bus. Hugutin at muling isaksak ang headunit box at i-restart ang sasakyan"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"Para sa seguridad, hindi available ang aktibidad habang nagmamaneho.\nPara magpatuloy, maghintay hanggang sa makaparada."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"Para magsimula sa mga ligtas na feature ng app, piliin ang <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Bumalik"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Impormasyon sa Pag-debug"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Diagnostic Data"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Basahin ang data ng mga diagnostic mula sa sasakyan"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Diagnostic Data"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"I-clear ang data ng diagnostic sa sasakyan"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"Publisher ng VMS"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"Mag-publish ng mga mensahe ng vms"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"Subscriber ng VMS"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"Mag-subscribe sa mga mensahe ng vms"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Pagsubaybay sa storage ng flash"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Subaybayan ang paggamit ng storage ng flash"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Status ng Pagmamaneho"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Makinig sa mga Mga pagbabago ng status ng pagmamaneho"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Detalye ng Makina"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"I-access ang detalyadong impormasyon ng makina ng iyong sasakyan"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Mga Port ng Enerhiya"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"I-access ang mga port ng enerhiya"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Pagkakakilanlan ng sasakyan"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"I-access ang pagkakakilanlan ng sasakyan"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Mga Pintuan ng Sasakyan"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Kontrolin ang mga pintuan ng sasakyan"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Mga Bintana ng Sasakyan"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Kontrolin ang mga bintana ng sasakyan"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Mga Salamin ng Sasakyan"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Kontrolin ang mga salamin ng sasakyan"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Mga Upuan ng Sasakyan"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Kontrolin ang mga upuan ng sasakyan"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Pangunahing impormasyon ng sasakyan"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"I-access ang pangunahing impormasyon ng sasakyan"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Mga ilaw sa exterior ng sasakyan"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"I-access ang status ng mga ilaw sa exterior ng sasakyan"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Mga ilaw sa exterior ng sasakyan"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Kontrolin ang mga ilaw sa exterior ng sasakyan"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Temperatura ng exterior ng sasakyan"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"I-access ang temperatura ng exterior ng sasakyan"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Mga gulong ng sasakyan"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"I-access ang impormasyon sa gulong ng sasakyan"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Powertrain ng Sasakyan"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"I-access ang impormasyon ng powertrain ng sasakyan"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Power ng Sasakyan"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"I-access ang status ng power ng sasakyan"</string>
+</resources>
diff --git a/service/res/values-tr/config.xml b/service/res/values-tr/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-tr/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-tr/strings.xml b/service/res/values-tr/strings.xml
new file mode 100644
index 0000000..c3a3435
--- /dev/null
+++ b/service/res/values-tr/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Araç bilgileri"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Aracınızın bilgilerine erişim."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Araç Kabini"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Kapılar, aynalar, koltuklar ve camlar dahil aracınızın aksesuarlarına erişim."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Araç Kamerası"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Aracınızın kameralarına erişim."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Araç enerjisi"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Aracınızın enerji bilgilerine erişim."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"Araç HVAC\'si"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Aracınızın HVAC\'sine erişim."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Aracın kilometresi"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Aracınızın kilometre bilgilerine erişim."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Aracın hızı"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Aracınızın hız bilgilerine erişim."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Araç dinamiklerinin durumu"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Araç dinamiklerinin durumuna erişim"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Aracın tedarikçi firma kanalı"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Araca özel bilgileri gönderip almak için aracınızın tedarikçi firma kanalına erişim."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Araç Radyosu"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Aracınızın radyosuna erişim."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Araç Projeksiyonu"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Araç Ses Seviyesi"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Araç Ses Ayarları"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Telefon arayüzünü araç ekranına yansıtma."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Araç HAL\'sini taklit etme"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Şirket içi test amaçları için aracınızın HAL\'ini taklit etme."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Aracınızın ses seviyesini kontrol etme."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Aracınızın ses ayarlarını kontrol etme."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Uygulama engelleme"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Sürüş sırasında uygulama engellemeyi kontrol etme."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Navigasyon Yöneticisi"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Navigasyon verilerini gösterge grubuna bildirme"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Gösterge grubunda doğrudan oluşturma"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Uygulamaların, gösterge grubunda gösterilecek etkinlikleri bildirmesine izin verme"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Gösterge grubu kontrolü"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Gösterge grubunda uygulamaları başlatma"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Gösterge Grubunda Oluşturma"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Gösterge grubu verilerini alma"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"Kullanıcı Deneyimi Kısıtlamaları Yapılandırması"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"Kullanıcı Deneyimi Kısıtlamalarını Yapılandırma"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Araç Giriş Hizmeti"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Giriş olaylarını işleme"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"CAN veri yolu başarısız"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN veri yolu yanıt vermiyor. Ana birim kutusunu söküp tekrar takın ve aracı yeniden çalıştırın"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"Güvenliğiniz için bu etkinlik sürüş sırasında gerçekleştirilemez.\nDevam etmek için park edene dek bekleyin."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"Güvenli uygulama özellikleriyle baştan başlamak için <xliff:g id="EXIT_BUTTON">%s</xliff:g> düğmesini seçin."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Geri"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Hata Ayıklama Bilgileri"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Teşhis Verileri"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Araçtan teşhis verilerini okuma"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Teşhis Verileri"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Araçtan teşhis verilerini temizleme"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"VMS yayıncısı"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"VMS mesajlarını yayınlama"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"VMS abonesi"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"VMS mesajlarına abone olma"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Flash depolama alanını izleme"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Flash depolama alanı kullanımını izleme"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Araç Kullanma Durumu"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Araç kullanma durumundaki değişiklikleri dinleme"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Ayrıntılı Olarak Motor"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Aracınızın ayrıntılı motor bilgilerine erişim"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Enerji Noktaları"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Enerji noktalarına erişim"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Araç kimliği"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Aracın kimliğine erişim"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Araç Kapıları"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Aracın kapılarını kontrol etme"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Araç Camları"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Araç camlarını kontrol etme"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Araç Aynaları"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Aracın aynalarını kontrol etme"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Araç Koltukları"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Aracın koltuklarını kontrol etme"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Araçla ilgili temel bilgiler"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Araçla ilgili temel bilgilere erişim"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Araç dış ışıkları"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Araç dış ışıklarının durumuna erişim"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Araç dış ışıkları"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Araç dış ışıklarını kontrol etme"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Araç dış sıcaklığı"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Aracın dış sıcaklığına erişim"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Araç lastikleri"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Aracın lastik bilgilerine erişim"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Araç Güç Aktarma Mekanizması"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Aracın güç aktarma mekanizmasıyla ilgili bilgilere erişim"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Araç Gücü"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Aracın güç durumuna erişim"</string>
+</resources>
diff --git a/service/res/values-uk/config.xml b/service/res/values-uk/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-uk/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-uk/strings.xml b/service/res/values-uk/strings.xml
new file mode 100644
index 0000000..44f5883
--- /dev/null
+++ b/service/res/values-uk/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Інформація про автомобіль"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Доступ до інформації про автомобіль."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Салон автомобіля"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Доступ до другорядного обладнання автомобіля (зокрема, дверей, дзеркал, сидінь і вікон)."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Камера автомобіля"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Доступ до камер автомобіля."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Енергоспоживання автомобіля"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Доступ до інформації про енергоспоживання автомобіля."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"Система клімат-контролю автомобіля"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Доступ до системи клімат-контролю автомобіля."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Пробіг автомобіля"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Доступ до інформації про пробіг автомобіля."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Швидкість автомобіля"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Доступ до інформації про швидкість автомобіля."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Стан динаміки автомобіля"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Доступ до стану динаміки автомобіля"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Канал виробника автомобіля"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Доступ до каналу виробника для обміну інформацією про автомобіль."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Автомобільний радіоприймач"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Доступ до автомобільного радіоприймача."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Проекція на екран автомобіля"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Гучність аудіосистеми автомобіля"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Налаштування аудіосистеми автомобіля"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Проекція інтерфейсу телефона на екран автомобіля."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Емуляція рівня HAL автомобіля"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Імітація рівня HAL автомобіля для внутрішнього тестування."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Керування гучністю аудіосистеми автомобіля."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Керування налаштуваннями аудіосистеми автомобіля."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Блокування додатків"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Керування блокуванням додатків під час поїздки."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Навігатор"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Передавання даних навігації на панель приладів"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Відображення безпосередньо на панелі приладів"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Дозволити додатку оголошувати дії, які показуватимуться на панелі приладів"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Керування панеллю приладів"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Запуск додатків на панелі приладів"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Відображення панелі приладів"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Отримувати дані з панелі приладів"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"Конфігурація обмежень використання функцій"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"Налаштувати обмеження щодо використання функцій"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Сервіс даних про вхідні події автомобіля"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Обробка вхідних подій"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"Помилка CAN-шини"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN-шина не відповідає. Від’єднайте та знову під’єднайте головний пристрій аудіосистеми й заведіть автомобіль ще раз"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"Задля вашої безпеки ці дії недоступні під час поїздки.\nЩоб продовжити, зупиніть автомобіль."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"Щоб почати знову з безпечними функціями додатка, натисніть кнопку \"<xliff:g id="EXIT_BUTTON">%s</xliff:g>\"."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Назад"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Debug Info"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Дані діагностики"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Перегляд даних діагностики автомобіля"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Дані діагностики"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Очищення даних діагностики автомобіля"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"Автор дорожніх повідомлень"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"Публікація дорожніх повідомлень"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"Отримувач дорожніх повідомлень"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"Підписка на дорожні повідомлення"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Відстеження флеш-пам’яті"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Відстеження використання флеш-пам’яті"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Стан кермування"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Відстеження змін стану кермування"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Детальна інформація про двигун"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Доступ до детальної інформації про двигун автомобіля"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Кришка паливного бака/порт заряджання"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Доступ до кришки паливного бака чи порту заряджання автомобіля"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Ідентифікаційний номер автомобіля"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Доступ до ідентифікаційного номера автомобіля"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Двері автомобіля"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Керування дверима автомобіля"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Вікна автомобіля"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Керування вікнами автомобіля"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Дзеркала автомобіля"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Керування дзеркалами автомобіля"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Автомобільні сидіння"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Керування сидіннями автомобіля"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Основна інформація про автомобіль"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Доступ до основної інформації про автомобіль"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Зовнішні світлові прилади автомобіля"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Доступ до стану зовнішніх світлових приладів автомобіля"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Зовнішнє освітлення автомобіля"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Керування зовнішніми світловими приладами автомобіля"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Зовнішня температура автомобіля"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Доступ до зовнішньої температури автомобіля"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Автомобільні шини"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Доступ до інформації про шини автомобіля"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Трансмісія автомобіля"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Доступ до інформації про трансмісію автомобіля"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Заряд автомобіля"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Доступ до рівня заряду автомобіля"</string>
+</resources>
diff --git a/service/res/values-ur/config.xml b/service/res/values-ur/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-ur/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-ur/strings.xml b/service/res/values-ur/strings.xml
new file mode 100644
index 0000000..56a9dba
--- /dev/null
+++ b/service/res/values-ur/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"کار کی معلومات"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"اپنی کار کی معلومات تک رسائی حاصل کریں۔"</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"کار کی کیبن"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"اپنی کار کے لوازمات بشمول دروازوں، آئینوں، سیٹوں اور کھڑکیوں تک رسائی حاصل کریں۔"</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"کار کا کیمرا"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"اپنی کار کے کیمرے (کیمروں) تک رسائی حاصل کریں۔"</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"کار کی انرجی"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"اپنی کار کی انرجی کی معلومات تک رسائی حاصل کریں۔"</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"کار کی Hvac"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"اپنی کار کی hvac تک رسائی حاصل کریں۔"</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"کار کی مائلیج"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"اپنی کار کی مائلیج کی معلومات تک رسائی حاصل کریں۔"</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"کار کی رفتار"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"اپنی کار کی رفتار تک رسائی حاصل کریں۔"</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"گاڑی کی ڈائنیمک صورتحال"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"اپنی کار کی ڈائنیمک صورتحال تک رسائی حاصل کریں"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"کار وینڈر چینل"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"کار کی مخصوص معلومات کا تبادلہ کرنے کے لیے اپنی کار کے وینڈر چینل تک رسائی حاصل کریں۔"</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"کار کی ریڈیو"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"اپنی کار کی ریڈیو تک رسائی حاصل کریں۔"</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"کار کا پروجیکشن"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"کار کی آڈیو کا والیوم"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"کار کی آڈیو کی ترتیبات"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"کار کے ڈسپلے پر فون کے انٹرفیس کا تخمینہ کریں۔"</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"HAL وہیکل کی تقلید کریں"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"اندرونی طور پر ٹیسٹنگ کے مقصد سے اپنی کار کی وہیکل HAL کو تقلید کریں۔"</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"اپنی کار کی آڈیو کا والیوم کنٹرول کریں۔"</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"اپنی کار کی آڈیو کی ترتیبات کو کنٹرول کریں۔"</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"ایپلیکیشن کو مسدود کیا جا رہا ہے"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"ڈرائیونگ کے دوران ایپلیکیشن کے مسدود کرنے کے عمل کو کنٹرول کریں۔"</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"نیویگیشن مینیجر"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"آلہ کے گروہ کو نیویگیشن ڈیٹا کی اطلاع دیں"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"آلہ کے گروہ تک براہ راست رسائی حاصل کریں"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"آلہ کے گروہ میں ڈسپلے ہونے کے لیے ایپلیکیشن کو سرگرمیوں کو واضع کرنے کی اجازت دیں"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"آلہ کے گروہ کو کنٹرول کریں"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"آلہ کے گروہ میں اپپس کو شروع کریں"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"آلہ کے گروہ کی رینڈرنگ"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"آلہ کے گروہ کا ڈیٹا موصول کریں"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"UX کی پابندیوں کی ترتیب"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"UX کی پابندیاں ترتیب دیں"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"کار کی ان پٹ سروس"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"ایونٹس کے ان پٹ کو ہینڈل کریں"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"کین بس ناکام ہو گئی"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"کین بس جواب نہیں دیتی ہے۔ ہیڈیونٹ باکس کو ان پلگ کر کے دوبارہ پلگ کریں اور کار کو دوبارہ شروع کریں"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"آپ کی حفاظت کے لیے یہ سرگرمی آپ کے کار چلانے کے دوران دستیاب نہیں ہے۔\n جاری رکھنے کے لیے کار کے پارک ہونے تک انتظار کریں۔"</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"محفوظ اپپ کی خصوصیات کے ساتھ شروع کرنے کے لیے <xliff:g id="EXIT_BUTTON">%s</xliff:g> پر کلک کریں۔"</string>
+    <string name="exit_button" msgid="5829638404777671253">"پیچھے"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"ڈیبگ کی معلومات"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"تشخیصی ڈیٹا"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"کار کے تشخیصی ڈیٹا کو پڑھیں"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"تشخیصی ڈیٹا"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"کار کے ذریعے دی گئی تشخیصی ڈیٹا کو صاف کریں"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"VMS ناشر"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"vms پیغامات شائع کریں"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"VMS سبسکرائبر"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"vms پیغامات کو سبسکرائب کریں"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"اسٹوریج کی نگرانی کو فلیش کریں"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"فلیش کے اسٹوریج کے استعمال کی نگرانی کریں"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"ڈرائیونگ کے دوران"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"کار چلانے کے دوران کی تبدیلیوں کو سنیں"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"انجن کی تفصیلات"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"اپنی کار کے انجن کی تفصیلی معلومات تک رسائی حاصل کریں"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"انرجی پورٹس"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"انرجی پورٹس تک رسائی حاصل کریں"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"کار کی شناخت"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"کار کی شناخت تک رسائی حاصل کریں"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"کار کے دروازے"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"کار کے دروازوں کو کنٹرول کریں"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"کار کی کھڑکیاں"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"کار کی کھڑکیوں کو کنٹرول کریں"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"کار کے آئینے"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"کار کے آئینوں کو کنٹرول کریں"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"کار کی سیٹیں"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"کار کی سیٹس کو کنٹرول کریں"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"کار کی بنیادی معلومات"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"کار کی بنیادی معلومات تک رسائی حاصل کریں"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"کار کی بیرونی لائٹس"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"کار کی بیرونی لائٹس کی صورتحال تک رسائی حاصل کریں"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"کار کی بیرونی لائٹس"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"کار کی بیرونی لائٹس کو کنٹرول کریں"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"کار کا بیرونی درجہ حرارت"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"کار کے باہری درجہ حرارت تک رسائی حاصل کریں"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"کار کے ٹائرز"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"کار کی ٹائر کی معلومات تک رسائی حاصل کریں"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"کار کی پاورٹرین"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"کار کی پاورٹرین معلومات تک رسائی حاصل کریں"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"کار کا پاور"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"کار کے پاور کی صورتحال تک رسائی حاصل کریں"</string>
+</resources>
diff --git a/service/res/values-uz/config.xml b/service/res/values-uz/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-uz/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-uz/strings.xml b/service/res/values-uz/strings.xml
new file mode 100644
index 0000000..df5db6d
--- /dev/null
+++ b/service/res/values-uz/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Avtomobil haqida axborot"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Avtomobil maʼlumotlariga kirish."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Avtomobil saloni"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Avtomobilning qoʻshimcha jihozlari, shuningdek, eshik, koʻzgu, oʻrindiq va oynalaridan foydalanish."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Avtomobil kamerasi"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Avtomobil kamerasidan foydalanish"</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Energiya resurslari"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Avtomobilning energiya axborotlariga kirish"</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"Avtomobildagi HVAC tizimi"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Avtomobilning HVAC tizimiga kirish."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Avtomobil bosib oʻtgan masofa"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Avtomobil yonilgʻisi qancha masofaga yetishi haqidagi axborotga kirish."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Avtomobil tezligi"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Avtomobil tezligi haqidagi axborotga kirish."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Avtomobil dinamikasi holati"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Avtomobil dinamikasi haqidagi axborotdan foydalanish"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Avtomobil ishlab chiqaruvchisining kanali"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Avtomobillarga oid maʼlumotlarni almashish uchun avtomobil ishlab chiqaruvchisining kanaliga kirish."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Avtomobil radiosi"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Avtomobil radiosidan foydalanish."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Avtomobil ekraniga translyatsiya"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Audio tizim tovushi balandligi"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Avtomobil audio tizimi sozlamalari"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Telefon interfeysini avtomobil ekraniga chiqarish"</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"HAL interfeysini emulyatsiya qilish"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Ichki sinov uchun HAL interfeysini emulyatsiya qilish."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Audio tizim tovushi balandligini boshqarish"</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Avtomobil audio tizimi sozlamalarini boshqarish."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Ilovalarni bloklash"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Haydash vaqtida ilovani bloklashni boshqarish"</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Navigator"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Asboblar panelida navigatsiya axborotini chiqarish"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Axborotlarni asboblar paneliga chiqarish"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Amalga oshirilgan faoliyatlarni asboblar paneliga chiqarish uchun ilovaga ruxsat berish"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Asboblar panelini boshqarish"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Asboblar panelida ilovalarni ishga tushirish"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Axborotlarni asboblar paneliga chiqarish"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Asboblar panelidan axborotlarni olish"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"Funksiyadan foydalanish cheklovini oʻrnatish"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"Funksiyalardan foydalanishni cheklash"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Avtomobilda matn kiritish xizmati"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Matn kiritish hodisalari bilan ishlash imkoniyati"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"CAN shinalarida xatolik yuz berdi"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN javob bermayapti. Konnektorni chiqaring va qayta ulang, keyin avtomobilni oʻt oldiring"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"Avtomobil haydayotganingizda bu harakatni amalga oshira olmaysiz.\nUni bajarish uchun avtomobilni toʻxtating."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"Ilovani xavfsiz rejimda ishga tushirish uchun <xliff:g id="EXIT_BUTTON">%s</xliff:g> tugmasini bosing."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Orqaga"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Debug Info"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Diagnostika axboroti"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Avtomobildan diagnostika axborotini olish"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Diagnostika axboroti"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Avtomobilning diagnostika axborotini tozalash"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"VMS xabarlarni chiqarish"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"VMS xabarlarni ekranga chiqarish"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"VMS xabarlarga obuna"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"VMS xabarlarga obuna"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Flesh xotirani nazorat qilish"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Flesh xotiradan foydalanishni nazorat qilish"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Avtomobilda rejimi"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Avtomobilda rejimining oʻzgarishini kuzatish"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Dvigatel"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Avtomobil dvigateli haqidagi batafsil axborotga kirish"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Energiya portlari"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Energiya portlaridan foydalanish"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Avtomobilning identifikatsiya raqami"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Avtomobilning identifikatsiya axborotiga kirish"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Avtomobil eshiklari"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Avtomobil eshiklarini boshqarish"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Avtomobil oynalari"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Avtomobilning oynalarini boshqarish"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Avtomobil koʻzgulari"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Avtomobil oynalarini boshqarish imkoniyati"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Avtomobil oʻrindiqlari"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Avtomobil oʻrindiqlarni boshqarish"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Avtomobil haqida umumiy axborot"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Avtomobil haqidagi umumiy axborotga kirish"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Avtomobilning tashqi chiroqlari"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Avtomobilning tashqi chiroqlaridan foydalanish"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Avtomobilning tashqi chiroqlari"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Avtomobilning tashqi chiroqlarini boshqarish"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Avtomobil tashqarisidagi harorat"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Tashqaridagi harorat haqidagi axborotni olish"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Avtomobil shinalari"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Avtomobil shinalari haqidagi axborotni olish"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Avtomobil quvvat uzatmasi"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Quvvat uzatmasi (tranmissiya) haqidagi axborotga kirish"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Avtomobil quvvati"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Avtomobilning quvvati haqidagi axborotga kirish"</string>
+</resources>
diff --git a/service/res/values-vi/config.xml b/service/res/values-vi/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-vi/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-vi/strings.xml b/service/res/values-vi/strings.xml
new file mode 100644
index 0000000..5c4dbae
--- /dev/null
+++ b/service/res/values-vi/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Thông tin về ô tô"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Truy cập vào thông tin về ô tô."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Buồng lái ô tô"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Truy cập vào thông tin về phụ kiện của ô tô, bao gồm cửa, gương, ghế ngồi và cửa sổ."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Camera trên ô tô"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Truy cập vào (các) camera trên ô tô."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Mức năng lượng của ô tô"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Truy cập vào thông tin về mức năng lượng trên ô tô."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"Hvac của ô tô"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Truy cập vào hvac của ô tô."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Số dặm ô tô đã đi"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Truy cập vào thông tin về số dặm ô tô đã đi."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Tốc độ của ô tô"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Truy cập vào thông tin về tốc độ của ô tô."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Trạng thái động của phương tiện"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Truy cập vào trạng thái động của ô tô"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Kênh của nhà cung cấp ô tô"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Truy cập vào kênh của nhà cung cấp ô tô để trao đổi thông tin cụ thể về ô tô."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Đài trên ô tô"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Truy cập vào đài trên ô tô."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Chiếu trên ô tô"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Âm lượng âm thanh trên ô tô"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Tùy chọn cài đặt âm thanh trên ô tô"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Chiếu giao diện điện thoại lên màn hình trên ô tô."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Mô phỏng HAL của phương tiện"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Mô phỏng HAL phương tiện của ô tô cho mục đích kiểm tra nội bộ."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Kiểm soát âm lượng âm thanh trên ô tô."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Kiểm soát tùy chọn cài đặt âm thanh trên ô tô."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Chặn ứng dụng"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Kiểm soát tính năng chặn ứng dụng trong khi lái xe."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Trình quản lý điều hướng"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Báo cáo dữ liệu điều hướng cho nhóm dụng cụ"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Hiển thị trực tiếp với nhóm dụng cụ"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Cho phép ứng dụng khai báo các hoạt động sẽ hiển thị trong nhóm dụng cụ"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Kiểm soát nhóm dụng cụ"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Khởi chạy ứng dụng trong nhóm dụng cụ"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Hiển thị nhóm dụng cụ"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Nhận dữ liệu nhóm dụng cụ"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"Cấu hình hạn chế trải nghiệm người dùng"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"Định cấu hình các hạn chế trải nghiệm người dùng"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Dịch vụ nhập dành cho ô tô"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Xử lý sự kiện nhập"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"Đường dẫn chính CAN không hoạt động"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"Đường dẫn chính CAN không phản hồi. Rút rồi cắm lại hộp bộ đầu và khởi động lại ô tô"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"Vì lý do an toàn, bạn không sử dụng được hoạt động này trong khi lái xe.\nHãy đợi cho tới khi bạn đỗ xe để tiếp tục."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"Để bắt đầu lại với các tính năng an toàn của ứng dụng, hãy chọn <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Quay lại"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Thông tin gỡ lỗi"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Dữ liệu chẩn đoán"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Đọc dữ liệu chẩn đoán từ ô tô"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Dữ liệu chẩn đoán"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Xóa dữ liệu chẩn đoán khỏi ô tô"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"Nhà xuất bản VMS"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"Xuất bản tin nhắn vms"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"Người đăng ký nhận dữ liệu VMS"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"Đăng ký nhận tin nhắn vms"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Giám sát bộ nhớ flash"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Giám sát mức sử dụng bộ nhớ flash"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Trạng thái lái xe"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Nghe những nội dung thay đổi về trạng thái lái xe"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Thông tin chi tiết về động cơ"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Truy cập vào thông tin động cơ chi tiết của ô tô"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Cổng năng lượng"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Truy cập vào thông tin về cổng năng lượng"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Thông tin nhận dạng ô tô"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Truy cập vào thông tin nhận dạng ô tô"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Cửa trên ô tô"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Kiểm soát cửa trên ô tô"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Cửa sổ trên ô tô"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Kiểm soát cửa sổ trên ô tô"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Gương trên ô tô"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Kiểm soát gương trên ô tô"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Ghế ngồi trên ô tô"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Kiểm soát ghế ngồi trên ô tô"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Thông tin cơ bản về ô tô"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Truy cập vào thông tin cơ bản về ô tô"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Đèn bên ngoài ô tô"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Truy cập vào trạng thái đèn bên ngoài ô tô"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Đèn bên ngoài ô tô"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Kiểm soát đèn bên ngoài ô tô"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Nhiệt độ bên ngoài ô tô"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Truy cập vào thông tin về nhiệt độ bên ngoài ô tô"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Lốp ô tô"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Truy cập vào thông tin về lốp xe ô tô"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"Hệ thống truyền động của ô tô"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Truy cập vào thông tin về hệ thống truyền động của ô tô"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Nguồn điện của ô tô"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Truy cập vào thông tin về trạng thái nguồn điện của ô tô"</string>
+</resources>
diff --git a/service/res/values-zh-rCN/config.xml b/service/res/values-zh-rCN/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-zh-rCN/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-zh-rCN/strings.xml b/service/res/values-zh-rCN/strings.xml
new file mode 100644
index 0000000..63ec7b1
--- /dev/null
+++ b/service/res/values-zh-rCN/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"汽车信息"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"访问汽车信息。"</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"车厢"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"访问汽车配件(包括车门、车镜、车座和车窗)。"</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"汽车摄像头"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"访问汽车摄像头。"</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"汽车能耗信息"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"访问汽车的能耗信息。"</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"汽车 HVAC"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"访问汽车的 HVAC。"</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"汽车行驶里程"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"访问汽车的里程信息。"</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"车速"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"访问车速信息。"</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"车辆移动状态"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"访问汽车的移动状态信息"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"汽车供应商渠道"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"访问汽车的供应商渠道信息,以交换汽车专属信息。"</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"汽车收音机"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"访问汽车收音机。"</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"汽车投屏"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"汽车音频音量"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"汽车音频设置"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"将手机界面投放到汽车显示屏上。"</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"模拟车载 HAL"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"模拟汽车的车载 HAL 以进行内部测试。"</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"控制汽车的音频音量。"</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"控制汽车的音频设置。"</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"应用屏蔽"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"控制驾车时的应用屏蔽情况。"</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"导航管理器"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"将导航数据报给仪表板"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"直接呈现在仪表板上"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"允许应用声明即将在仪表板上显示的活动"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"仪表板控制"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"在仪表板上启动应用"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"仪表板呈现"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"接收仪表板数据"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"用户体验限制条件配置"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"配置用户体验限制条件"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"汽车输入服务"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"处理输入事件"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"CAN 总线故障"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN 总线没有响应。请将主机盒插头拔下并插回,然后重新启动汽车"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"为了确保您的安全,您无法在开车时执行这项活动。\n要继续,请先停车。"</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"要重新开始使用安全的应用功能,请选择<xliff:g id="EXIT_BUTTON">%s</xliff:g>。"</string>
+    <string name="exit_button" msgid="5829638404777671253">"返回"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"调试信息"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"诊断数据"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"读取汽车的诊断数据"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"诊断数据"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"清除汽车的诊断数据"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"VMS 发布商"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"发布 VMS 消息"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"VMS 订阅者"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"订阅 VMS 消息"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"闪存监控"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"监控闪存使用情况"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"驾车状态"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"监听驾车状态变化"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"引擎详情"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"访问汽车的详细引擎信息"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"能源端口"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"访问能量端口"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"汽车识别信息"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"访问汽车的标识信息"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"车门"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"控制车门"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"车窗"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"控制车窗"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"车镜"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"控制车镜"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"车座"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"控制车座"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"汽车基本信息"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"访问汽车基本信息"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"汽车外部灯具"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"访问汽车外部灯具状态信息"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"汽车外部灯具"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"控制汽车外部灯具"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"汽车外部温度"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"访问汽车外部温度信息"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"车胎"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"访问车胎信息"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"汽车动力总成"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"访问汽车动力总成信息"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"汽车电源"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"访问汽车电源状态信息"</string>
+</resources>
diff --git a/service/res/values-zh-rHK/config.xml b/service/res/values-zh-rHK/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-zh-rHK/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-zh-rHK/strings.xml b/service/res/values-zh-rHK/strings.xml
new file mode 100644
index 0000000..d709e0d
--- /dev/null
+++ b/service/res/values-zh-rHK/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"汽車資訊"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"存取汽車資訊。"</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"車箱"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"存取汽車配件,包括車門、倒後鏡、座位和車窗。"</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"汽車攝錄機"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"存取汽車攝錄機。"</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"汽車電量"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"存取汽車的電量資訊。"</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"汽車的暖通空調"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"存取汽車的暖通空調。"</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"行車里數"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"存取汽車里數資訊。"</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"車速"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"存取車速。"</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"汽車動力狀態"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"存取汽車的動力狀態"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"汽車供應商頻道"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"存取汽車供應商頻道,以交換汽車特定資訊。"</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"汽車收音機"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"存取汽車的收音機。"</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"汽車投影"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"汽車音響音量"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"汽車音響設定"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"將手機介面投放至汽車螢幕。"</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"模擬執行汽車 HAL"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"模擬執行汽車的 HAL 用作內部測試。"</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"控制汽車的音響音量。"</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"控制汽車的音響設定。"</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"封鎖的應用程式"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"控制駕駛時封鎖的應用程式。"</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"導航管理員"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"向儀表板報告導航資料"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"直接輸出至儀表板"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"允許應用程式於儀表板顯示活動"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"儀表板控制器"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"在儀表板啟動應用程式"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"正在輸出儀表板"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"接收儀表板資料"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"使用者體驗限制設定"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"設定使用者體驗限制"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"汽車輸入服務"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"處理輸入活動"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"控制器區域網路操作失敗"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"控制器區域網路未有回覆。請拔除並重新插上汽車音響主機,然後重新啟動汽車"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"基於安全理由,駕駛時無法執行此操作。\n如要繼續,請留待泊車後操作。"</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"如要以安全應用程式功能重新啟動,請選擇 <xliff:g id="EXIT_BUTTON">%s</xliff:g>。"</string>
+    <string name="exit_button" msgid="5829638404777671253">"返回"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"Debug Info"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"診斷資料"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"在汽車中讀取診斷資料"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"診斷資料"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"清除汽車的診斷資料"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"交通訊息顯示屏訊息發佈者"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"發佈交通訊息顯示屏訊息"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"交通訊息顯示屏訊息訂閱者"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"訂閱交通訊息顯示屏訊息"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"監控快閃儲存空間"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"監控快閃儲存空間使用狀態"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"駕駛狀態"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"聽取駕駛狀態變動"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"引擎詳情"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"存取汽車引擎詳情"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"電源連接埠"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"存取電源連接埠"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"汽車識別"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"存取汽車識別資訊"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"車門"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"控制車門"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"車窗"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"控制車窗"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"汽車倒後鏡"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"控制汽車倒後鏡"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"汽車座位"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"控制汽車座位"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"汽車基本資訊"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"存取汽車基本資訊"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"汽車外部燈光"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"存取汽車外部燈光狀態"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"汽車外部燈光"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"控制汽車外部燈光"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"汽車外的氣溫"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"存取汽車外的氣溫"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"車胎"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"存取車胎資訊"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"汽車動力傳動系統"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"存取汽車動力傳動系統資訊"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"汽車能源"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"存取汽車的能源狀態"</string>
+</resources>
diff --git a/service/res/values-zh-rTW/config.xml b/service/res/values-zh-rTW/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-zh-rTW/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-zh-rTW/strings.xml b/service/res/values-zh-rTW/strings.xml
new file mode 100644
index 0000000..f76aa3c
--- /dev/null
+++ b/service/res/values-zh-rTW/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"車輛資訊"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"存取車輛資訊。"</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"車艙"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"存取車輛的配件 (包含門、鏡子、座位和窗戶)。"</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"車輛鏡頭"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"存取車輛攝影機。"</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"車輛能源"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"存取車輛的能源資訊。"</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"車輛空調"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"存取車輛空調。"</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"車輛行駛里程"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"存取車輛的行駛里程資訊。"</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"車速"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"存取車速。"</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"車輛移動狀態"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"存取車輛移動狀態"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"車商頻道"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"存取車商頻道,交流車輛專屬資訊。"</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"車輛收音機"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"存取車輛收音機。"</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"車輛投放"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"車輛音訊音量"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"車輛音訊設定"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"將手機介面投放至車輛螢幕。"</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"模擬車輛 HAL"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"模擬車輛 HAL 做為內部測試用途。"</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"控制車輛音訊音量。"</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"控制車輛音訊設定。"</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"應用程式封鎖"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"開車期間控制應用程式封鎖。"</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"導航管理員"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"將導航資料回報至儀錶板"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"直接顯示在儀錶板"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"允許應用程式宣告顯示在儀錶板的活動"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"儀錶板控制"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"在儀錶板中啟動應用程式"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"儀錶板轉譯"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"接收儀錶板資料"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"使用者體驗限制設定"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"設定使用者體驗限制"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"車輛輸入服務"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"處理輸入事件"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"控制器區域網路發生問題"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"控制器區域網路無回應。請將主機盒插頭拔下並插回,然後重新啟動車輛"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"為了你的安全,開車期間不得進行這個活動。\n如要繼續,請先停車。"</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"如要使用安全應用程式功能重新啟動,請選取「離開」按鈕 <xliff:g id="EXIT_BUTTON">%s</xliff:g>。"</string>
+    <string name="exit_button" msgid="5829638404777671253">"返回"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"偵錯資訊"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"診斷資料"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"讀取車輛診斷資料"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"診斷資料"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"從車輛中清除診斷資料"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"VMS 發佈商"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"發佈 VMS 訊息"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"VMS 訂閱者"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"訂閱 VMS 訊息"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"快閃記憶體儲存空間監控"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"監控快閃記憶體用量"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"開車狀態"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"聽取開車狀態變化"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"引擎詳細資料"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"存取車輛詳細引擎資訊"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"油箱口/充電口"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"存取油箱口/充電口"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"車輛識別資料"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"存取車輛識別資料"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"車門"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"控制車門"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"車窗"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"控制車窗"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"車輛鏡子"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"控制車輛鏡子"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"車輛座位"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"控制車輛座位"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"車輛基礎資訊"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"存取車輛基本資訊"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"車輛外部燈光"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"存取車輛外部燈光狀態"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"車輛外部燈光"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"控制車輛外部燈光"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"車外溫度"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"存取車外溫度"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"車輪"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"存取車輪資訊"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"車輛動力傳動系統"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"存取車輛動力總成資訊"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"車輛動力"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"存取車輛動力狀態"</string>
+</resources>
diff --git a/service/res/values-zu/config.xml b/service/res/values-zu/config.xml
new file mode 100644
index 0000000..561fac4
--- /dev/null
+++ b/service/res/values-zu/config.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+** Copyright 2015, 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 to configure car service based on each OEM's preference.  -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="inputService" msgid="3911088558664251138">"android.car.input.service/.DefaultInputService"</string>
+    <string name="instrumentClusterRendererService" msgid="2610429499504752025">"android.car.cluster.loggingrenderer/.LoggingClusterRenderingService"</string>
+    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
+    <string name="activityWhitelist" msgid="4479116456995751218">"com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity"</string>
+    <string name="activityBlacklist" msgid="4824386090073724380"></string>
+  <string-array name="allowedAppInstallSources">
+  </string-array>
+    <string name="defaultHomeActivity" msgid="5991064545193106309"></string>
+    <string name="activityHandlerForFlashWearChanges" msgid="8628535766919400479">"com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity"</string>
+    <string name="intentReceiverForUnacceptableIoMetrics" msgid="4017502061746918341">"com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver"</string>
+</resources>
diff --git a/service/res/values-zu/strings.xml b/service/res/values-zu/strings.xml
new file mode 100644
index 0000000..78501b3
--- /dev/null
+++ b/service/res/values-zu/strings.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2015 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="car_permission_label" msgid="2215078736675564541">"Ulwazi lemoto"</string>
+    <string name="car_permission_desc" msgid="162499818870052725">"Finyelela kulwazi lwemoto yakho."</string>
+    <string name="car_permission_label_cabin" msgid="7737204489497269651">"Ikhebhini yemoto"</string>
+    <string name="car_permission_desc_cabin" msgid="4495805806748641822">"Finyelela izinsiza zemoto yakho, kufaka phakathi iminyango, izibuko, izihlalo namawindi."</string>
+    <string name="car_permission_label_camera" msgid="608969838109034886">"Ikhamera yemoto"</string>
+    <string name="car_permission_desc_camera" msgid="917024932164501426">"Finyelela ikhamera yemoto yakho."</string>
+    <string name="car_permission_label_energy" msgid="3398092932402178393">"Amandla emoto"</string>
+    <string name="car_permission_desc_energy" msgid="3392963810053235407">"Finyelela ulwazi lwamandla lwemoto yakho."</string>
+    <string name="car_permission_label_hvac" msgid="8047274427463154164">"I-Hvac yemoto"</string>
+    <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Finyelela i-hvac yemoto yakho."</string>
+    <string name="car_permission_label_mileage" msgid="811821331694754443">"Amamayela emoto"</string>
+    <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Finyelela ulwazi lamamayela wemoto yakho."</string>
+    <string name="car_permission_label_speed" msgid="7315924371063443241">"Isivinini semoto"</string>
+    <string name="car_permission_desc_speed" msgid="2047965198165448241">"Finyelela isivinini semoto yakho."</string>
+    <string name="car_permission_label_vehicle_dynamics_state" msgid="6475840407257670137">"Isimo sento yemoto"</string>
+    <string name="car_permission_desc_vehicle_dynamics_state" msgid="8226448484805146681">"Finyelela isimo sezinto zemoto yakho"</string>
+    <string name="car_permission_label_vendor_extension" msgid="9173884051360575867">"Isiteshi somthengisi semoto"</string>
+    <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"Finyelela isiteshi somthengisi semoto yakho ukuze nishintshisane ngolwazi oluthile lemoto."</string>
+    <string name="car_permission_label_radio" msgid="4768692394049267617">"Irediyo yemoto"</string>
+    <string name="car_permission_desc_radio" msgid="3385999027478186964">"Finyelela irekhidiyo yemoto yakho."</string>
+    <string name="car_permission_label_projection" msgid="7830068427803303154">"Ukuthi phoko kwemoto"</string>
+    <string name="car_permission_label_audio_volume" msgid="4802249016680066596">"Ivolomu yomsindo yemoto"</string>
+    <string name="car_permission_label_audio_settings" msgid="7788327093945466775">"Izilungiselelo zomsindo zemoto"</string>
+    <string name="car_permission_desc_projection" msgid="2680001094361534439">"Isixhumanisi sokusebenzisana esibonisini semoto."</string>
+    <string name="car_permission_label_mock_vehicle_hal" msgid="7429043278386896118">"Phinda i-HAL yemoto"</string>
+    <string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Phinda i-HAL yemoto yakho ngenhloso yokuhlola kwangaphakathi."</string>
+    <string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Lawula ivolomu yemoto yakho."</string>
+    <string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"Lawula izilungiselelo zomsindo zemoto yakho."</string>
+    <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"Ukuvimbela uhlelo lokusebenza"</string>
+    <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"Lawula ukuvimbela uhlelo lokusebenza uma ushayela."</string>
+    <string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Isiphathi sokuzula"</string>
+    <string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Bika idatha yokuzula kwinto yokusebenza"</string>
+    <string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Ukusebenzisa okuqondile kwinto yokusebenza"</string>
+    <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Vumela uhlelo lokusebenza ukuvuma imisebenzi ukuthi uboniswe kwinto yokusebenza"</string>
+    <string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Ukulawula into yokusebenza"</string>
+    <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Qalisa uhlelo lokusebenza kwinto yokusebenza"</string>
+    <string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Ukusebenzisa into yokusebenza"</string>
+    <string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"Thola idatha yento yokusebenza"</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"Ukulungiswa kwemikhawulo ye-UX"</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"Lungisa imikhawulo ye-UX"</string>
+    <string name="car_permission_label_bind_input_service" msgid="6698489034024273750">"Isevisi yokufaka yemoto"</string>
+    <string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Phatha imicimbi yokungena"</string>
+    <string name="car_can_bus_failure" msgid="2334035748788283914">"Ibhasi ye-CAN yehlulekile"</string>
+    <string name="car_can_bus_failure_desc" msgid="4125516222786484733">"Ibhasi ye-CAN ayiphenduli. Nqamula futhi uxhume ibhokisi le-headunit ukuze uqalise kabusha imoto"</string>
+    <string name="activity_blocked_text" msgid="5342114426610711378">"Ngokuphepha kwakho, lo msebenzi awutholakali uma ushayela.\nUkuze uqhubeke, linda uze umiswe."</string>
+    <string name="exit_button_message" msgid="8554690915924055685">"Ukuze uqalise futhi ngezici zohlelo lokusebenza, khetha <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
+    <string name="exit_button" msgid="5829638404777671253">"Emuva"</string>
+    <string name="debug_button_text" msgid="6395881820644544676">"ulwazi Lokususa iphutha"</string>
+    <string name="car_permission_label_diag_read" msgid="2539365760945541902">"Idatha yokuxilonga"</string>
+    <string name="car_permission_desc_diag_read" msgid="6300061847723430001">"Ukufunda idatha yokuxilonga kusuka emotweni"</string>
+    <string name="car_permission_label_diag_clear" msgid="5276954546130303905">"Idatha yokuxilonga"</string>
+    <string name="car_permission_desc_diag_clear" msgid="6890216593617069473">"Sula idatha yokuxilonga kusuka emotweni"</string>
+    <string name="car_permission_label_vms_publisher" msgid="5738544816086673968">"Umshicileli we-VMS"</string>
+    <string name="car_permission_desc_vms_publisher" msgid="154858011053838907">"Shicilela imilayezo ye-vms"</string>
+    <string name="car_permission_label_vms_subscriber" msgid="2776578987390414930">"Obhalisele we-VMS"</string>
+    <string name="car_permission_desc_vms_subscriber" msgid="6846187370448294450">"Bhalisela imilayezo ye-vms"</string>
+    <string name="car_permission_label_storage_monitoring" msgid="2327639346522530549">"Ukwengamela isitoreji se-flash"</string>
+    <string name="car_permission_desc_storage_monitoring" msgid="2075712271139671318">"Ngamela ukusetshenziswa kwesitoreji semoto"</string>
+    <string name="car_permission_label_driving_state" msgid="6069696010591163256">"Isimo sokushayela"</string>
+    <string name="car_permission_desc_driving_state" msgid="4082684279226021396">"Lale izinguquko zesimo sokushayela"</string>
+    <string name="car_permission_label_car_engine_detailed" msgid="9002892724697007617">"Injini enemininingwane"</string>
+    <string name="car_permission_desc_car_engine_detailed" msgid="2207487506454195487">"Finyelela ulwazi lwenjini olunemininingwane lemoto yakho"</string>
+    <string name="car_permission_label_car_energy_ports" msgid="4263949434683308884">"Izimbobo zamandla"</string>
+    <string name="car_permission_desc_car_energy_ports" msgid="557965577468080620">"Finyelela izimbobo zamandla"</string>
+    <string name="car_permission_label_car_identification" msgid="1729154715508060432">"Ukukhomba imoto"</string>
+    <string name="car_permission_desc_car_identification" msgid="6209540619324873333">"Finyelela isihlonzi semoto"</string>
+    <string name="car_permission_label_control_car_doors" msgid="982176169678332325">"Iminyango yemoto"</string>
+    <string name="car_permission_desc_control_car_doors" msgid="4138087940094487785">"Lawula iminyango yemoto"</string>
+    <string name="car_permission_label_control_car_windows" msgid="8495424050848179521">"Amawindi emoto"</string>
+    <string name="car_permission_desc_control_car_windows" msgid="7618554178690485310">"Lawula amawindi emoto"</string>
+    <string name="car_permission_label_control_car_mirrors" msgid="5695032398073590372">"Izibuko zemoto"</string>
+    <string name="car_permission_desc_control_car_mirrors" msgid="2644116799651071636">"Lawula izibuko zemoto"</string>
+    <string name="car_permission_label_control_car_seats" msgid="4068728236135716379">"Izihlalo zemoto"</string>
+    <string name="car_permission_desc_control_car_seats" msgid="3918469592876954231">"Lawula izihlalo zemoto"</string>
+    <string name="car_permission_label_car_info" msgid="5638680944359440535">"Ulwazi oluyisisekelo lwemoto"</string>
+    <string name="car_permission_desc_car_info" msgid="1697298888275875496">"Finyelela ulwazi oluyisisekelo lwemoto"</string>
+    <string name="car_permission_label_car_exterior_lights" msgid="6756996909877627936">"Izibani zangaphandle zemoto"</string>
+    <string name="car_permission_desc_car_exterior_lights" msgid="5404593475424542202">"Finyelela isimo sezibani zangaphandle zemoto"</string>
+    <string name="car_permission_label_control_car_exterior_lights" msgid="822902629489856498">"Izibani zangaphandle zemoto"</string>
+    <string name="car_permission_desc_control_car_exterior_lights" msgid="1131149440610151914">"Lawula izibani zangaphandle zemoto"</string>
+    <string name="car_permission_label_car_exterior_environment" msgid="7617025356417480155">"Izinga lokushisa langaphandle lemoto"</string>
+    <string name="car_permission_desc_car_exterior_environment" msgid="7665860792016287191">"Finyelela izinga lokushisa langaphandle lemoto"</string>
+    <string name="car_permission_label_car_tires" msgid="7261327603773636683">"Amathayela wemoto"</string>
+    <string name="car_permission_desc_car_tires" msgid="4398458490319322940">"Finyelela ulwazi lwethaya lemoto"</string>
+    <string name="car_permission_label_car_powertrain" msgid="246182551556313624">"I-Powertrain yemoto"</string>
+    <string name="car_permission_desc_car_powertrain" msgid="3838172429633520832">"Finyelela ulwazi lwamandla lemoto"</string>
+    <string name="car_permission_label_car_power" msgid="3671174734416372201">"Amandla emoto"</string>
+    <string name="car_permission_desc_car_power" msgid="8955018800799758403">"Finyelela isimo samandla semoto"</string>
+</resources>
diff --git a/service/res/values/attrs.xml b/service/res/values/attrs.xml
index 89c4258..be20c0f 100644
--- a/service/res/values/attrs.xml
+++ b/service/res/values/attrs.xml
@@ -18,11 +18,11 @@
 -->
 
 <resources>
-    <!-- Defines the attributes and values used in res/xml/car_volume_group.xml -->
-    <declare-styleable name="volumeGroups" />
-
+    <!-- Defines the attributes and values used in res/xml/car_volume_groups.xml -->
+    <declare-styleable name="volumeGroups">
+        <attr name="isDeprecated" format="boolean"/>
+    </declare-styleable>
     <declare-styleable name="volumeGroups_group"/>
-
     <declare-styleable name="volumeGroups_context">
         <!-- Align with hardware/interfaces/automotive/audiocontrol/1.0/types.hal:ContextNumber -->
         <attr name="context">
@@ -37,6 +37,18 @@
         </attr>
     </declare-styleable>
 
+    <!--
+      Defines the attributes and values used in car_audio_configuration.xml
+      This is a superset of car_volume_groups.xml
+    -->
+    <declare-styleable name="carAudioConfiguration">
+        <attr name="version" format="integer"/>
+        <attr name="isPrimary" format="boolean"/>
+        <attr name="name" format="string"/>
+        <attr name="address" format="string"/>
+        <attr name="display" format="string"/>
+    </declare-styleable>
+
     <!-- Defines the UX restrictions to be imposed for different driving states of a vehicle -->
     <declare-styleable name="UxRestrictions"/>
     <!-- 1. UX restriction Mapping from a driving state of the vehicle-->
diff --git a/service/res/values/config.xml b/service/res/values/config.xml
index 1d72dca..41b6815 100644
--- a/service/res/values/config.xml
+++ b/service/res/values/config.xml
@@ -24,6 +24,7 @@
           dynamic audio routing is disabled and audio works in legacy mode. It may be useful
           during initial development where audio hal does not support bus based addressing yet. -->
     <bool name="audioUseDynamicRouting">false</bool>
+
     <!--  Configuration to persist master mute state. If this is set to true,
           Android will restore the master mute state on boot. -->
     <bool name="audioPersistMasterMuteState">true</bool>
@@ -49,7 +50,7 @@
           The current implementations expects the following system packages/activities to be
           whitelisted. For general guidelines to design distraction optimized apps, please refer
           to Android Auto Driver Distraction Guidelines. -->
-    <string name="activityWhitelist">com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity</string>
+    <string name="activityWhitelist">com.android.systemui,com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity</string>
     <!--  Comma separated list of activities that will be blocked during restricted state.
           Format of each entry is either to specify package name to whitelist the whole package
           or use format of "packagename/activity_classname" for tagging each activities.-->
@@ -59,8 +60,11 @@
     </string-array>
     <!-- Default home activity -->
     <string name="defaultHomeActivity"><!--com.your.package/com.your.package.Activity--></string>
-    <!--  The com.android.car.VmsPublisherService will bind to this list of clients -->
-    <string-array translatable="false" name="vmsPublisherClients">
+    <!--  The com.android.car.vms.VmsClientManager will bind to this list of clients running as system user -->
+    <string-array translatable="false" name="vmsPublisherSystemClients">
+    </string-array>
+    <!--  The com.android.car.vms.VmsClientManager will bind to this list of clients running as current user -->
+    <string-array translatable="false" name="vmsPublisherUserClients">
     </string-array>
     <!-- Number of milliseconds to wait before trying re-bind to a crashed publisher. -->
     <integer name="millisecondsBeforeRebindToVmsPublisher">10000</integer>
diff --git a/service/res/values/strings.xml b/service/res/values/strings.xml
index 599e41f..12e4511 100644
--- a/service/res/values/strings.xml
+++ b/service/res/values/strings.xml
@@ -13,52 +13,51 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<resources>
-    <string name="app_title">Car service</string>
-
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_title" translatable="false">Car service</string>
     <!--  For permissions -->
     <!-- Permission text: can access your car's information [CHAR LIMIT=NONE] -->
     <string name="car_permission_label">Car information</string>
     <!-- Permission text: can access your car's information [CHAR LIMIT=NONE] -->
-    <string name="car_permission_desc">Access your car\'s information.</string>
+    <string name="car_permission_desc">Access your car\u2019s information.</string>
     <!-- Permission text: apps can control car cabin [CHAR LIMIT=NONE] -->
     <string name="car_permission_label_cabin">Car Cabin</string>
     <!-- Permission text: apps can control car cabin [CHAR LIMIT=NONE] -->
-    <string name="car_permission_desc_cabin">Access your car\'s accessories, including doors,
+    <string name="car_permission_desc_cabin">Access your car\u2019s accessories, including doors,
         mirrors, seats, and windows.</string>
     <!-- Permission text: apps can control car camera [CHAR LIMIT=NONE] -->
     <string name="car_permission_label_camera">Car Camera</string>
     <!-- Permission text: apps can control car camera [CHAR LIMIT=NONE] -->
-    <string name="car_permission_desc_camera">Access your car\'s camera(s).</string>
+    <string name="car_permission_desc_camera">Access your car\u2019s camera(s).</string>
     <!-- Permission text: can access your car's energy information [CHAR LIMIT=NONE] -->
     <string name="car_permission_label_energy">Car energy</string>
     <!-- Permission text: can access your car's energy information [CHAR LIMIT=NONE] -->
-    <string name="car_permission_desc_energy">Access your car\'s energy information.</string>
+    <string name="car_permission_desc_energy">Access your car\u2019s energy information.</string>
     <!-- Permission text: apps can control car hvac [CHAR LIMIT=NONE] -->
     <string name="car_permission_label_hvac">Car Hvac</string>
     <!-- Permission text: apps can control car hvac [CHAR LIMIT=NONE] -->
-    <string name="car_permission_desc_hvac">Access your car\'s hvac.</string>
+    <string name="car_permission_desc_hvac">Access your car\u2019s hvac.</string>
     <!-- Permission text: can access your car's mileage information [CHAR LIMIT=NONE] -->
     <string name="car_permission_label_mileage">Car mileage</string>
     <!-- Permission text: can access your car's mileage information [CHAR LIMIT=NONE] -->
-    <string name="car_permission_desc_mileage">Access your car\'s mileage information.</string>
+    <string name="car_permission_desc_mileage">Access your car\u2019s mileage information.</string>
     <!-- Permission text: can access your car's speed [CHAR LIMIT=NONE] -->
     <string name="car_permission_label_speed">Car speed</string>
     <!-- Permission text: can access your car's speed [CHAR LIMIT=NONE] -->
-    <string name="car_permission_desc_speed">Access your car\'s speed.</string>
+    <string name="car_permission_desc_speed">Access your car\u2019s speed.</string>
     <!-- Permission text: can access your car's dynamics state [CHAR LIMIT=NONE] -->
     <string name="car_permission_label_vehicle_dynamics_state">Vehicle dynamics state</string>
     <!-- Permission text: can access your car's dynamic state [CHAR LIMIT=NONE] -->
-    <string name="car_permission_desc_vehicle_dynamics_state">Access your car\'s dynamics state</string>
+    <string name="car_permission_desc_vehicle_dynamics_state">Access your car\u2019s dynamics state</string>
     <!-- Permission text: apps can access car-manufacturer specific data [CHAR LIMIT=NONE] -->
     <string name="car_permission_label_vendor_extension">Car vendor channel</string>
     <!-- Permission text: apps can access car-manufacturer specific data [CHAR LIMIT=NONE] -->
-    <string name="car_permission_desc_vendor_extension">Access your car\'s vendor channel to
+    <string name="car_permission_desc_vendor_extension">Access your car\u2019s vendor channel to
         exchange car-specific information.</string>
     <!-- Permission text: apps can control car-radio [CHAR LIMIT=NONE] -->
     <string name="car_permission_label_radio">Car Radio</string>
     <!-- Permission text: apps can control car-radio [CHAR LIMIT=NONE] -->
-    <string name="car_permission_desc_radio">Access your car\'s radio.</string>
+    <string name="car_permission_desc_radio">Access your car\u2019s radio.</string>
     <!-- Permission text: apps can control car-projection [CHAR LIMIT=NONE] -->
     <string name="car_permission_label_projection">Car Projection</string>
     <!-- Permission text: apps can control car-audio-volume [CHAR LIMIT=NONE] -->
@@ -69,11 +68,11 @@
     <string name="car_permission_desc_projection">Project phone interface on car display.</string>
     <string name="car_permission_label_mock_vehicle_hal">Emulate vehicle HAL</string>
     <!-- Permission text: can emulate information from your car [CHAR LIMIT=NONE] -->
-    <string name="car_permission_desc_mock_vehicle_hal">Emulate your car\'s vehicle HAL for internal
+    <string name="car_permission_desc_mock_vehicle_hal">Emulate your car\u2019s vehicle HAL for internal
         testing purpose.</string>
     <!-- Permission text: can adjust the audio volume on your car [CHAR LIMIT=NONE] -->
-    <string name="car_permission_desc_audio_volume">Control your car\'s audio volume.</string>
-    <string name="car_permission_desc_audio_settings">Control your car\'s audio settings.</string>
+    <string name="car_permission_desc_audio_volume">Control your car\u2019s audio volume.</string>
+    <string name="car_permission_desc_audio_settings">Control your car\u2019s audio settings.</string>
     <string name="car_permission_label_control_app_blocking">Application blocking</string>
     <!-- Permission text: can emulate information from your car [CHAR LIMIT=NONE] -->
     <string name="car_permission_desc_control_app_blocking">Control application blocking while
@@ -90,6 +89,8 @@
     <string name="car_permission_desc_car_cluster_control">Launch apps in the instrument cluster</string>
     <string name="car_permission_label_bind_instrument_cluster_rendering">Instrument Cluster Rendering</string>
     <string name="car_permission_desc_bind_instrument_cluster_rendering">Receive instrument cluster data</string>
+    <string name="car_permission_label_car_ux_restrictions_configuration">UX Restrictions Configuration</string>
+    <string name="car_permission_desc_car_ux_restrictions_configuration">Configure UX Restrictions</string>
 
     <!-- Permission text: apps can handle input events [CHAR LIMIT=NONE] -->
     <string name="car_permission_label_bind_input_service">Car Input Service</string>
@@ -104,11 +105,13 @@
         box and restart the car</string>
 
     <!-- Blocking activity: Message to show to user when a feature of current application is not allowed. [CHAR LIMIT=120] -->
-    <string name="activity_blocked_text">For your safety, this activity isn’t available while you’re driving</string>
+    <string name="activity_blocked_text">For your safety, this activity isn\u2019t available while driving.\nTo continue, wait until you\u2019re parked.</string>
+    <!-- Blocking activity: Message to accompany the exit_button that restarts the blocked app. [CHAR LIMIT=120] -->
+    <string name="exit_button_message">To start over with safe app features, select <xliff:g id="exit_button" example="Back">%s</xliff:g>.</string>
+    <!-- Blocking activity: Text for button that restarts the current blocked application. [CHAR LIMIT=15] -->
+    <string name="exit_button">Back</string>
     <!-- Blocking activity: Text for button that shows debug info for non-user build. [CHAR LIMIT=10] -->
     <string name="debug_button_text">Debug Info</string>
-    <!-- Blocking activity: Text for button that restarts the current blocked application. [CHAR LIMIT=15] -->
-    <string name="exit_button">Restart App</string>
 
     <!-- Permission text: apps can control diagnostic data [CHAR LIMIT=NONE] -->
     <string name="car_permission_label_diag_read">Diagnostic Data</string>
@@ -143,7 +146,7 @@
     <!-- Permission text: apps read Engine Detailed [CHAR LIMIT=NONE] -->
     <string name="car_permission_label_car_engine_detailed">Engine Detailed</string>
     <!-- Permission text: apps can listen to Engine Detailed [CHAR LIMIT=NONE] -->
-    <string name="car_permission_desc_car_engine_detailed">Access your car\'s detailed engine information</string>
+    <string name="car_permission_desc_car_engine_detailed">Access your car\u2019s detailed engine information</string>
 
     <!-- Permission text: apps can access car's fuel door and ev charge port [CHAR LIMIT=NONE] -->
     <string name="car_permission_label_car_energy_ports">Energy Ports</string>
@@ -153,27 +156,27 @@
     <!-- Permission text: apps can access car's VIN information [CHAR LIMIT=NONE] -->
     <string name="car_permission_label_car_identification">Car identification</string>
     <!-- Permission text: apps can access car's VIN information [CHAR LIMIT=NONE] -->
-    <string name="car_permission_desc_car_identification">Access car\'s identification</string>
+    <string name="car_permission_desc_car_identification">Access car\u2019s identification</string>
 
     <!-- Permission text: apps can control car doors [CHAR LIMIT=NONE] -->
     <string name="car_permission_label_control_car_doors">Car Doors</string>
     <!-- Permission text: apps can control car doors [CHAR LIMIT=NONE] -->
-    <string name="car_permission_desc_control_car_doors">Control car\'s doors</string>
+    <string name="car_permission_desc_control_car_doors">Control car\u2019s doors</string>
 
     <!-- Permission text: apps can control car windows [CHAR LIMIT=NONE] -->
     <string name="car_permission_label_control_car_windows">Car Windows</string>
     <!-- Permission text: apps can control car windows [CHAR LIMIT=NONE] -->
-    <string name="car_permission_desc_control_car_windows">Control car\'s windows</string>
+    <string name="car_permission_desc_control_car_windows">Control car\u2019s windows</string>
 
     <!-- Permission text: apps can control car mirrors [CHAR LIMIT=NONE] -->
     <string name="car_permission_label_control_car_mirrors">Car Mirrors</string>
     <!-- Permission text: apps can control car mirrors [CHAR LIMIT=NONE] -->
-    <string name="car_permission_desc_control_car_mirrors">Control car\'s mirrors</string>
+    <string name="car_permission_desc_control_car_mirrors">Control car\u2019s mirrors</string>
 
     <!-- Permission text: apps can control car seats [CHAR LIMIT=NONE] -->
     <string name="car_permission_label_control_car_seats">Car Seats</string>
     <!-- Permission text: apps can control car seats [CHAR LIMIT=NONE] -->
-    <string name="car_permission_desc_control_car_seats">Control car\'s seats</string>
+    <string name="car_permission_desc_control_car_seats">Control car\u2019s seats</string>
 
     <!-- Permission text: apps read car's basic information [CHAR LIMIT=NONE] -->
     <string name="car_permission_label_car_info">Car basic information</string>
diff --git a/service/res/xml/car_volume_groups.xml b/service/res/xml/car_volume_groups.xml
index 9bfc305..c900329 100644
--- a/service/res/xml/car_volume_groups.xml
+++ b/service/res/xml/car_volume_groups.xml
@@ -15,6 +15,18 @@
 -->
 
 <!--
+  This configuration is replaced by car_audio_configuration.xml
+
+  Notes on backward compatibility
+  - A new audioUseUnifiedConfiguration flag is added, and the default value
+  is false
+  - If OEM does not explicitly set audioUseUnifiedConfiguration to be true,
+  car_volume_groups.xml will be used, CarAudioService also queries
+  IAudioControl HAL (getBusForContext)
+  - Otherwise, CarAudioService loads the new car_audio_configuration.xml
+
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
   Defines the all available volume groups for volume control in a car.
   One can overlay this configuration to customize the groups.
 
@@ -33,7 +45,8 @@
   Important note: when overlaying this configuration,
   make sure the resources are in the same package as CarAudioService.
 -->
-<volumeGroups xmlns:car="http://schemas.android.com/apk/res-auto">
+<volumeGroups xmlns:car="http://schemas.android.com/apk/res-auto"
+        car:isDeprecated="true">
     <group>
         <context car:context="music"/>
         <context car:context="call_ring"/>
diff --git a/service/src/com/android/car/BluetoothDeviceConnectionPolicy.java b/service/src/com/android/car/BluetoothDeviceConnectionPolicy.java
index 51bbf8d..5d7fc0e 100644
--- a/service/src/com/android/car/BluetoothDeviceConnectionPolicy.java
+++ b/service/src/com/android/car/BluetoothDeviceConnectionPolicy.java
@@ -20,6 +20,7 @@
 import static android.car.settings.CarSettings.Secure.KEY_BLUETOOTH_AUTOCONNECT_MUSIC_DEVICES;
 import static android.car.settings.CarSettings.Secure.KEY_BLUETOOTH_AUTOCONNECT_NETWORK_DEVICES;
 import static android.car.settings.CarSettings.Secure.KEY_BLUETOOTH_AUTOCONNECT_PHONE_DEVICES;
+import static android.car.settings.CarSettings.Secure.KEY_BLUETOOTH_PROFILES_INHIBITED;
 
 import android.annotation.Nullable;
 import android.app.ActivityManager;
@@ -46,13 +47,19 @@
 import android.content.IntentFilter;
 import android.hardware.automotive.vehicle.V2_0.VehicleIgnitionState;
 import android.hardware.automotive.vehicle.V2_0.VehicleProperty;
+import android.os.Binder;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.Looper;
 import android.os.ParcelUuid;
 import android.os.Parcelable;
 import android.os.RemoteException;
 import android.os.UserHandle;
 import android.provider.Settings;
+import android.text.TextUtils;
 import android.util.Log;
 
+import com.android.internal.annotations.GuardedBy;
 import com.android.internal.annotations.VisibleForTesting;
 
 import java.io.PrintWriter;
@@ -62,8 +69,10 @@
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Set;
 import java.util.concurrent.locks.ReentrantLock;
+import java.util.stream.Collectors;
 
 
 /**
@@ -91,6 +100,10 @@
     private static final String TAG = "BTDevConnectionPolicy";
     private static final String SETTINGS_DELIMITER = ",";
     private static final boolean DBG = Utils.DBG;
+
+    private static final Binder RESTORED_PROFILE_INHIBIT_TOKEN = new Binder();
+    private static final long RESTORE_BACKOFF_MILLIS = 1000L;
+
     private final Context mContext;
     private boolean mInitialized = false;
     private boolean mUserSpecificInfoInitialized = false;
@@ -146,6 +159,17 @@
     // Maintain a list of Paired devices which haven't connected on any profiles yet.
     private Set<BluetoothDevice> mPairedButUnconnectedDevices = new HashSet<>();
 
+    // State for profile inhibits.
+    @GuardedBy("this")
+    private final SetMultimap<ConnectionParams, InhibitRecord> mProfileInhibits =
+            new SetMultimap<>();
+    @GuardedBy("this")
+    private final HashSet<InhibitRecord> mRestoredInhibits = new HashSet<>();
+    @GuardedBy("this")
+    private final HashSet<ConnectionParams> mAlreadyDisabledProfiles = new HashSet<>();
+
+    private final Handler mHandler = new Handler(Looper.getMainLooper());
+
     public static BluetoothDeviceConnectionPolicy create(Context context,
             CarPropertyService carPropertyService, PerUserCarServiceHelper userServiceHelper,
             CarUxRestrictionsManagerService uxrService, CarBluetoothService bluetoothService) {
@@ -218,38 +242,142 @@
      * Used as the currency that methods use to talk to each other in the policy.
      */
     public static class ConnectionParams {
-        private BluetoothDevice mBluetoothDevice;
-        private Integer mBluetoothProfile;
+        // Examples:
+        // 01:23:45:67:89:AB/9
+        // null/0
+        // null/null
+        private static final String FLATTENED_PATTERN =
+                "^(([0-9A-F]{2}:){5}[0-9A-F]{2}|null)/([0-9]+|null)$";
+
+        @Nullable private final BluetoothDevice mBluetoothDevice;
+        @Nullable private final Integer mBluetoothProfile;
 
         public ConnectionParams() {
-            // default constructor
+            this(null, null);
         }
 
-        public ConnectionParams(Integer profile) {
-            mBluetoothProfile = profile;
+        public ConnectionParams(@Nullable Integer profile) {
+            this(profile, null);
         }
 
-        public ConnectionParams(Integer profile, BluetoothDevice device) {
+        public ConnectionParams(@Nullable Integer profile, @Nullable BluetoothDevice device) {
             mBluetoothProfile = profile;
             mBluetoothDevice = device;
         }
 
-        // getters & Setters
-        public void setBluetoothDevice(BluetoothDevice device) {
-            mBluetoothDevice = device;
-        }
-
-        public void setBluetoothProfile(Integer profile) {
-            mBluetoothProfile = profile;
-        }
-
+        @Nullable
         public BluetoothDevice getBluetoothDevice() {
             return mBluetoothDevice;
         }
 
+        @Nullable
         public Integer getBluetoothProfile() {
             return mBluetoothProfile;
         }
+
+        @Override
+        public boolean equals(Object other) {
+            if (this == other) {
+                return true;
+            }
+            if (!(other instanceof ConnectionParams)) {
+                return false;
+            }
+            ConnectionParams otherParams = (ConnectionParams) other;
+            return Objects.equals(mBluetoothDevice, otherParams.mBluetoothDevice)
+                && Objects.equals(mBluetoothProfile, otherParams.mBluetoothProfile);
+        }
+
+        @Override
+        public int hashCode() {
+            return Objects.hash(mBluetoothDevice, mBluetoothProfile);
+        }
+
+        @Override
+        public String toString() {
+            return flattenToString();
+        }
+
+        /** Converts these {@link ConnectionParams} to a parseable string representation. */
+        public String flattenToString() {
+            return mBluetoothDevice + "/" + mBluetoothProfile;
+        }
+
+        /**
+         * Creates a {@link ConnectionParams} from a previous output of {@link #flattenToString()}.
+         *
+         * @param flattenedParams A flattened string representation of a {@link ConnectionParams}.
+         * @param adapter A {@link BluetoothAdapter} used to convert Bluetooth addresses into
+         *         {@link BluetoothDevice} objects.
+         */
+        public static ConnectionParams parse(String flattenedParams, BluetoothAdapter adapter) {
+            if (!flattenedParams.matches(FLATTENED_PATTERN)) {
+                throw new IllegalArgumentException("Bad format for flattened ConnectionParams");
+            }
+            String[] parts = flattenedParams.split("/");
+
+            BluetoothDevice device;
+            if (!"null".equals(parts[0])) {
+                device = adapter.getRemoteDevice(parts[0]);
+            } else {
+                device = null;
+            }
+
+            Integer profile;
+            if (!"null".equals(parts[1])) {
+                profile = Integer.valueOf(parts[1]);
+            } else {
+                profile = null;
+            }
+
+            return new ConnectionParams(profile, device);
+        }
+    }
+
+    private class InhibitRecord implements IBinder.DeathRecipient {
+        private final ConnectionParams mParams;
+        private final IBinder mToken;
+
+        private boolean mRemoved = false;
+
+        InhibitRecord(ConnectionParams params, IBinder token) {
+            this.mParams = params;
+            this.mToken = token;
+        }
+
+        public ConnectionParams getParams() {
+            return mParams;
+        }
+
+        public IBinder getToken() {
+            return mToken;
+        }
+
+        public boolean removeSelf() {
+            synchronized (BluetoothDeviceConnectionPolicy.this) {
+                if (mRemoved) {
+                    return true;
+                }
+
+                if (removeInhibitRecord(this)) {
+                    mRemoved = true;
+                    return true;
+                } else {
+                    return false;
+                }
+            }
+        }
+
+        @Override
+        public void binderDied() {
+            if (DBG) {
+                Log.d(TAG, "Releasing inhibit request on profile "
+                        + Utils.getProfileName(mParams.getBluetoothProfile())
+                        + " for device " + mParams.getBluetoothDevice()
+                        + ": requesting process died");
+            }
+            removeSelf();
+        }
     }
 
     /**
@@ -372,6 +500,23 @@
         }
         if (mCarBluetoothUserService != null) {
             for (Integer profile : mProfilesToConnect) {
+                synchronized (this) {
+                    ConnectionParams params = new ConnectionParams(profile, device);
+                    // If this profile is inhibited, don't try to change its priority until the
+                    // inhibit is released. Instead, if the profile is being enabled, take it off of
+                    // the "previously disabled profiles" list, so it will be restored when all
+                    // inhibits are removed.
+                    if (mProfileInhibits.keySet().contains(params)) {
+                        if (DBG) {
+                            Log.i(TAG, "Not setting profile " + profile + " priority of "
+                                    + device.getAddress() + " to " + priority + ": inhibited");
+                        }
+                        if (priority == BluetoothProfile.PRIORITY_ON) {
+                            mAlreadyDisabledProfiles.remove(params);
+                        }
+                        continue;
+                    }
+                }
                 setBluetoothProfilePriorityIfUuidFound(uuids, profile, device, priority);
             }
         }
@@ -440,6 +585,10 @@
             mCarBluetoothUserService = setupBluetoothUserService();
             // re-initialize for current user.
             initializeUserSpecificInfo();
+            // Restore profile inhibits, if any, that were saved from last run...
+            restoreProfileInhibitsFromSettings();
+            // ... and start trying to remove them.
+            removeRestoredProfileInhibits();
         }
 
         @Override
@@ -447,6 +596,15 @@
             if (DBG) {
                 Log.d(TAG, "Before Unbinding from UserService");
             }
+
+            // Try to release profile inhibits now, before CarBluetoothUserService goes away.
+            // This also stops any active attempts to remove restored inhibits.
+            //
+            // If any can't be released, they'll persist in settings and will be cleaned up
+            // next time this user starts. This can happen if the Bluetooth profile proxies in
+            // CarBluetoothUserService unbind before we get the chance to make calls on them.
+            releaseAllInhibitsBeforeUnbind();
+
             try {
                 if (mCarBluetoothUserService != null) {
                     mCarBluetoothUserService.closeBluetoothConnectionProxy();
@@ -456,6 +614,7 @@
                         "Remote Exception during closeBluetoothConnectionProxy(): "
                                 + e.getMessage());
             }
+
             // Clean up information related to user who went background.
             cleanupUserSpecificInfo();
         }
@@ -820,6 +979,309 @@
     }
 
     /**
+     * Request to disconnect the given profile on the given device, and prevent it from reconnecting
+     * until either the request is released, or the process owning the given token dies.
+     * @return True if the profile was successfully inhibited, false if an error occurred.
+     */
+    boolean requestProfileInhibit(BluetoothDevice device, int profile, IBinder token) {
+        if (DBG) {
+            Log.d(TAG, "Request profile inhibit: profile " + Utils.getProfileName(profile)
+                    + ", device " + device.getAddress());
+        }
+        ConnectionParams params = new ConnectionParams(profile, device);
+        InhibitRecord record = new InhibitRecord(params, token);
+        return addInhibitRecord(record);
+    }
+
+    /**
+     * Undo a previous call to {@link #requestProfileInhibit} with the same parameters,
+     * and reconnect the profile if no other requests are active.
+     *
+     * @return True if the request was released, false if an error occurred.
+     */
+    boolean releaseProfileInhibit(BluetoothDevice device, int profile, IBinder token) {
+        if (DBG) {
+            Log.d(TAG, "Release profile inhibit: profile " + Utils.getProfileName(profile)
+                    + ", device " + device.getAddress());
+        }
+
+        ConnectionParams params = new ConnectionParams(profile, device);
+        InhibitRecord record;
+        synchronized (this) {
+            record = findInhibitRecordLocked(params, token);
+        }
+
+        if (record == null) {
+            Log.e(TAG, "Record not found");
+            return false;
+        }
+
+        return record.removeSelf();
+    }
+
+    /** Add a profile inhibit record, disabling the profile if necessary. */
+    private synchronized boolean addInhibitRecord(InhibitRecord record) {
+        ConnectionParams params = record.getParams();
+        if (!isProxyAvailable(params.getBluetoothProfile())) {
+            return false;
+        }
+
+        Set<InhibitRecord> previousRecords = mProfileInhibits.get(params);
+        if (findInhibitRecordLocked(params, record.getToken()) != null) {
+            Log.e(TAG, "Inhibit request already registered - skipping duplicate");
+            return false;
+        }
+
+        try {
+            record.getToken().linkToDeath(record, 0);
+        } catch (RemoteException e) {
+            Log.e(TAG, "Could not link to death on inhibit token (already dead?)", e);
+            return false;
+        }
+
+        boolean isNewlyAdded = previousRecords.isEmpty();
+        mProfileInhibits.put(params, record);
+
+        if (isNewlyAdded) {
+            try {
+                int priority =
+                        mCarBluetoothUserService.getProfilePriority(
+                                params.getBluetoothProfile(),
+                                params.getBluetoothDevice());
+                if (priority == BluetoothProfile.PRIORITY_OFF) {
+                    // This profile was already disabled (and not as the result of an inhibit).
+                    // Add it to the already-disabled list, and do nothing else.
+                    mAlreadyDisabledProfiles.add(params);
+
+                    if (DBG) {
+                        Log.d(TAG, "Profile " + Utils.getProfileName(params.getBluetoothProfile())
+                                + " already disabled for device " + params.getBluetoothDevice()
+                                + " - suppressing re-enable");
+                    }
+                } else {
+                    mCarBluetoothUserService.setProfilePriority(
+                            params.getBluetoothProfile(),
+                            params.getBluetoothDevice(),
+                            BluetoothProfile.PRIORITY_OFF);
+                    mCarBluetoothUserService.bluetoothDisconnectFromProfile(
+                            params.getBluetoothProfile(),
+                            params.getBluetoothDevice());
+                    if (DBG) {
+                        Log.d(TAG, "Disabled profile "
+                                + Utils.getProfileName(params.getBluetoothProfile())
+                                + " for device " + params.getBluetoothDevice());
+                    }
+                }
+            } catch (RemoteException e) {
+                Log.e(TAG, "Could not disable profile", e);
+                record.getToken().unlinkToDeath(record, 0);
+                mProfileInhibits.remove(params, record);
+                return false;
+            }
+        }
+
+        saveProfileInhibitsToSettingsLocked();
+        return true;
+    }
+
+    /** Remove a given profile inhibit record, reconnecting if necessary. */
+    private synchronized boolean removeInhibitRecord(InhibitRecord record) {
+        ConnectionParams params = record.getParams();
+        if (!isProxyAvailable(params.getBluetoothProfile())) {
+            return false;
+        }
+        if (!mProfileInhibits.containsEntry(params, record)) {
+            Log.e(TAG, "Record already removed");
+            // Removing something a second time vacuously succeeds.
+            return true;
+        }
+
+        // Re-enable profile before unlinking and removing the record, in case of error.
+        // The profile should be re-enabled if this record is the only one left for that
+        // device and profile combination.
+        if (mProfileInhibits.get(params).size() == 1) {
+            if (!restoreProfilePriority(params)) {
+                return false;
+            }
+        }
+
+        record.getToken().unlinkToDeath(record, 0);
+        mProfileInhibits.remove(params, record);
+
+        saveProfileInhibitsToSettingsLocked();
+        return true;
+    }
+
+    /** Find the inhibit record, if any, corresponding to the given parameters and token. */
+    @Nullable
+    private InhibitRecord findInhibitRecordLocked(ConnectionParams params, IBinder token) {
+        return mProfileInhibits.get(params)
+            .stream()
+            .filter(r -> r.getToken() == token)
+            .findAny()
+            .orElse(null);
+    }
+
+    /** Re-enable and reconnect a given profile for a device. */
+    private boolean restoreProfilePriority(ConnectionParams params) {
+        if (!isProxyAvailable(params.getBluetoothProfile())) {
+            return false;
+        }
+
+        if (mAlreadyDisabledProfiles.remove(params)) {
+            // The profile does not need any state changes, since it was disabled
+            // before it was inhibited. Leave it disabled.
+            if (DBG) {
+                Log.d(TAG, "Not restoring profile "
+                        + Utils.getProfileName(params.getBluetoothProfile()) + " for device "
+                        + params.getBluetoothDevice() + " - was manually disabled");
+            }
+            return true;
+        }
+
+        try {
+            mCarBluetoothUserService.setProfilePriority(
+                    params.getBluetoothProfile(),
+                    params.getBluetoothDevice(),
+                    BluetoothProfile.PRIORITY_ON);
+            mCarBluetoothUserService.bluetoothConnectToProfile(
+                    params.getBluetoothProfile(),
+                    params.getBluetoothDevice());
+            if (DBG) {
+                Log.d(TAG, "Restored profile " + Utils.getProfileName(params.getBluetoothProfile())
+                        + " for device " + params.getBluetoothDevice());
+            }
+            return true;
+        } catch (RemoteException e) {
+            Log.e(TAG, "Could not enable profile", e);
+            return false;
+        }
+    }
+
+    /** Dump all currently-active profile inhibits to {@link Settings.Secure}. */
+    private void saveProfileInhibitsToSettingsLocked() {
+        Set<ConnectionParams> inhibitedProfiles = new HashSet<>(mProfileInhibits.keySet());
+        // Don't write out profiles that were disabled before a request was made, since
+        // restoring those profiles is a no-op.
+        inhibitedProfiles.removeAll(mAlreadyDisabledProfiles);
+        String savedDisconnects =
+                inhibitedProfiles
+                        .stream()
+                        .map(ConnectionParams::flattenToString)
+                        .collect(Collectors.joining(SETTINGS_DELIMITER));
+
+        if (DBG) {
+            Log.d(TAG, "Saving inhibits to settings for u" + mUserId + ": " + savedDisconnects);
+        }
+
+        Settings.Secure.putStringForUser(
+                mContext.getContentResolver(), KEY_BLUETOOTH_PROFILES_INHIBITED,
+                savedDisconnects, mUserId);
+    }
+
+    /** Create {@link InhibitRecord}s for all profile inhibits written to settings. */
+    private synchronized void restoreProfileInhibitsFromSettings() {
+        if (mBluetoothAdapter == null) {
+            Log.e(TAG, "Cannot restore inhibit records - Bluetooth not available");
+            return;
+        }
+
+        String savedConnectionParams = Settings.Secure.getStringForUser(
+                mContext.getContentResolver(),
+                KEY_BLUETOOTH_PROFILES_INHIBITED,
+                mUserId);
+
+        if (TextUtils.isEmpty(savedConnectionParams)) {
+            return;
+        }
+
+        if (DBG) {
+            Log.d(TAG, "Restoring profile inhibits: " + savedConnectionParams);
+        }
+
+        for (String paramsStr : savedConnectionParams.split(SETTINGS_DELIMITER)) {
+            try {
+                ConnectionParams params = ConnectionParams.parse(paramsStr, mBluetoothAdapter);
+                InhibitRecord record =
+                        new InhibitRecord(params, RESTORED_PROFILE_INHIBIT_TOKEN);
+                mProfileInhibits.put(params, record);
+                mRestoredInhibits.add(record);
+                if (DBG) {
+                    Log.d(TAG, "Restored profile inhibits for " + params);
+                }
+            } catch (IllegalArgumentException e) {
+                Log.e(TAG, "Bad format for saved profile inhibit: " + paramsStr, e);
+                // We won't ever be able to fix a bad parse, so skip it and move on.
+            }
+        }
+    }
+
+    /**
+     * Try once to remove all restored profile inhibits.
+     *
+     * If the CarBluetoothUserService is not yet available, or it hasn't yet bound its profile
+     * proxies, the removal will fail, and will need to be retried later.
+     */
+    private void tryRemoveRestoredProfileInhibitsLocked() {
+        HashSet<InhibitRecord> successfullyRemoved = new HashSet<>();
+
+        for (InhibitRecord record : mRestoredInhibits) {
+            if (removeInhibitRecord(record)) {
+                successfullyRemoved.add(record);
+            }
+        }
+
+        mRestoredInhibits.removeAll(successfullyRemoved);
+    }
+
+    /**
+     * Keep trying to remove all profile inhibits that were restored from settings
+     * until all such inhibits have been removed.
+     */
+    private synchronized void removeRestoredProfileInhibits() {
+        tryRemoveRestoredProfileInhibitsLocked();
+
+        if (!mRestoredInhibits.isEmpty()) {
+            if (DBG) {
+                Log.d(TAG, "Could not remove all restored profile inhibits - "
+                        + "trying again in " + RESTORE_BACKOFF_MILLIS + "ms");
+            }
+            mHandler.postDelayed(
+                    this::removeRestoredProfileInhibits,
+                    RESTORED_PROFILE_INHIBIT_TOKEN,
+                    RESTORE_BACKOFF_MILLIS);
+        }
+    }
+
+    /** Release all active inhibit records prior to user switch or shutdown. */
+    private synchronized void releaseAllInhibitsBeforeUnbind() {
+        if (DBG) {
+            Log.d(TAG, "Unbinding CarBluetoothUserService - releasing all profile inhibits");
+        }
+        for (ConnectionParams params : mProfileInhibits.keySet()) {
+            for (InhibitRecord record : mProfileInhibits.get(params)) {
+                record.removeSelf();
+            }
+        }
+
+        // Some inhibits might be hanging around because they couldn't be cleaned up.
+        // Make sure they get persisted...
+        saveProfileInhibitsToSettingsLocked();
+        // ...then clear them from the map.
+        mProfileInhibits.clear();
+
+        // We don't need to maintain previously-disabled profiles any more - they were already
+        // skipped in saveProfileInhibitsToSettingsLocked() above, and they don't need any
+        // further handling when the user resumes.
+        mAlreadyDisabledProfiles.clear();
+
+        // Clean up bookkeeping for restored inhibits. (If any are still around, they'll be
+        // restored again when this user restarts.)
+        mHandler.removeCallbacksAndMessages(RESTORED_PROFILE_INHIBIT_TOKEN);
+        mRestoredInhibits.clear();
+    }
+
+    /**
      * Add or remove a device based on the bonding state change.
      *
      * @param device    - device to add/remove
@@ -946,13 +1408,9 @@
                 if (DBG) {
                     Log.d(TAG, "Found device to connect to");
                 }
-                BluetoothDeviceConnectionPolicy.ConnectionParams btParams =
-                        new BluetoothDeviceConnectionPolicy.ConnectionParams(
-                                mConnectionInFlight.getBluetoothProfile(),
-                                mConnectionInFlight.getBluetoothDevice());
                 // set up a time out
                 mBluetoothAutoConnectStateMachine.sendMessageDelayed(
-                        BluetoothAutoConnectStateMachine.CONNECT_TIMEOUT, btParams,
+                        BluetoothAutoConnectStateMachine.CONNECT_TIMEOUT, mConnectionInFlight,
                         BluetoothAutoConnectStateMachine.CONNECTION_TIMEOUT_MS);
                 break;
             } else {
@@ -1072,8 +1530,7 @@
                 devInfo.setConnectionStateLocked(device, BluetoothProfile.STATE_CONNECTING);
                 // Increment the retry count & cache what is being connected to
                 // This method is already called from a synchronized context.
-                mConnectionInFlight.setBluetoothDevice(device);
-                mConnectionInFlight.setBluetoothProfile(profile);
+                mConnectionInFlight = new ConnectionParams(profile, device);
                 devInfo.incrementRetryCountLocked();
                 if (DBG) {
                     Log.d(TAG, "Increment Retry to: " + devInfo.getRetryCountLocked() +
@@ -1097,8 +1554,7 @@
      * @param devInfo the {@link BluetoothDevicesInfo} where the info is to be reset.
      */
     private void setProfileOnDeviceToUnavailable(BluetoothDevicesInfo devInfo) {
-        mConnectionInFlight.setBluetoothProfile(0);
-        mConnectionInFlight.setBluetoothDevice(null);
+        mConnectionInFlight = new ConnectionParams(0, null);
         devInfo.setDeviceAvailableToConnectLocked(false);
     }
 
@@ -1625,5 +2081,10 @@
         writer.println("*BluetoothDeviceConnectionPolicy*");
         printDeviceMap(writer);
         mBluetoothAutoConnectStateMachine.dump(writer);
+        String inhibits;
+        synchronized (this) {
+            inhibits = mProfileInhibits.keySet().toString();
+        }
+        writer.println("Inhibited profiles: " + inhibits);
     }
 }
diff --git a/service/src/com/android/car/CarBluetoothService.java b/service/src/com/android/car/CarBluetoothService.java
index d36db43..d34d165 100644
--- a/service/src/com/android/car/CarBluetoothService.java
+++ b/service/src/com/android/car/CarBluetoothService.java
@@ -15,22 +15,14 @@
  */
 package com.android.car;
 
-import static android.car.settings.CarSettings.Secure
-        .KEY_BLUETOOTH_AUTOCONNECT_MESSAGING_DEVICE_PRIORITY_0;
-import static android.car.settings.CarSettings.Secure
-        .KEY_BLUETOOTH_AUTOCONNECT_MESSAGING_DEVICE_PRIORITY_1;
-import static android.car.settings.CarSettings.Secure
-        .KEY_BLUETOOTH_AUTOCONNECT_MUSIC_DEVICE_PRIORITY_0;
-import static android.car.settings.CarSettings.Secure
-        .KEY_BLUETOOTH_AUTOCONNECT_MUSIC_DEVICE_PRIORITY_1;
-import static android.car.settings.CarSettings.Secure
-        .KEY_BLUETOOTH_AUTOCONNECT_NETWORK_DEVICE_PRIORITY_0;
-import static android.car.settings.CarSettings.Secure
-        .KEY_BLUETOOTH_AUTOCONNECT_NETWORK_DEVICE_PRIORITY_1;
-import static android.car.settings.CarSettings.Secure
-        .KEY_BLUETOOTH_AUTOCONNECT_PHONE_DEVICE_PRIORITY_0;
-import static android.car.settings.CarSettings.Secure
-        .KEY_BLUETOOTH_AUTOCONNECT_PHONE_DEVICE_PRIORITY_1;
+import static android.car.settings.CarSettings.Secure.KEY_BLUETOOTH_AUTOCONNECT_MESSAGING_DEVICE_PRIORITY_0;
+import static android.car.settings.CarSettings.Secure.KEY_BLUETOOTH_AUTOCONNECT_MESSAGING_DEVICE_PRIORITY_1;
+import static android.car.settings.CarSettings.Secure.KEY_BLUETOOTH_AUTOCONNECT_MUSIC_DEVICE_PRIORITY_0;
+import static android.car.settings.CarSettings.Secure.KEY_BLUETOOTH_AUTOCONNECT_MUSIC_DEVICE_PRIORITY_1;
+import static android.car.settings.CarSettings.Secure.KEY_BLUETOOTH_AUTOCONNECT_NETWORK_DEVICE_PRIORITY_0;
+import static android.car.settings.CarSettings.Secure.KEY_BLUETOOTH_AUTOCONNECT_NETWORK_DEVICE_PRIORITY_1;
+import static android.car.settings.CarSettings.Secure.KEY_BLUETOOTH_AUTOCONNECT_PHONE_DEVICE_PRIORITY_0;
+import static android.car.settings.CarSettings.Secure.KEY_BLUETOOTH_AUTOCONNECT_PHONE_DEVICE_PRIORITY_1;
 
 import android.app.ActivityManager;
 import android.bluetooth.BluetoothDevice;
@@ -39,6 +31,7 @@
 import android.car.ICarBluetooth;
 import android.content.Context;
 import android.content.pm.PackageManager;
+import android.os.IBinder;
 import android.provider.Settings;
 import android.util.Log;
 
@@ -57,7 +50,7 @@
     private static final String TAG = "CarBluetoothService";
     private final Context mContext;
     private final BluetoothDeviceConnectionPolicy mBluetoothDeviceConnectionPolicy;
-    private static final boolean DBG = false;
+    private static final boolean DBG = Utils.DBG;
 
     public CarBluetoothService(Context context, CarPropertyService carPropertyService,
             PerUserCarServiceHelper userSwitchService, CarUxRestrictionsManagerService uxrService) {
@@ -158,6 +151,34 @@
     }
 
     /**
+     * Request to disconnect the given profile on the given device, and prevent it from reconnecting
+     * until either the request is released, or the process owning the given token dies.
+     *
+     * @param device  The device on which to inhibit a profile.
+     * @param profile The {@link android.bluetooth.BluetoothProfile} to inhibit.
+     * @param token   A {@link IBinder} to be used as an identity for the request. If the process
+     *                owning the token dies, the request will automatically be released.
+     * @return True if the profile was successfully inhibited, false if an error occurred.
+     */
+    boolean requestProfileInhibit(BluetoothDevice device, int profile, IBinder token) {
+        return mBluetoothDeviceConnectionPolicy.requestProfileInhibit(device, profile, token);
+    }
+
+    /**
+     * Release an inhibit request made by {@link #requestProfileInhibit}, and reconnect the
+     * profile if no other inhibit requests are active.
+     *
+     * @param device  The device on which to release the inhibit request.
+     * @param profile The profile on which to release the inhibit request.
+     * @param token   The token provided in the original call to
+     *                {@link #requestProfileInhibit}.
+     * @return True if the request was released, false if an error occurred.
+     */
+    boolean releaseProfileInhibit(BluetoothDevice device, int profile, IBinder token) {
+        return mBluetoothDeviceConnectionPolicy.releaseProfileInhibit(device, profile, token);
+    }
+
+    /**
      * Returns the Bluetooth device address as a String that has been tagged with the given priority
      * for the given profile.
      *
diff --git a/service/src/com/android/car/CarBluetoothUserService.java b/service/src/com/android/car/CarBluetoothUserService.java
index 1b94742..5a57f19 100644
--- a/service/src/com/android/car/CarBluetoothUserService.java
+++ b/service/src/com/android/car/CarBluetoothUserService.java
@@ -15,22 +15,20 @@
  */
 package com.android.car;
 
-
-import android.bluetooth.BluetoothProfile;
 import android.bluetooth.BluetoothA2dpSink;
 import android.bluetooth.BluetoothAdapter;
 import android.bluetooth.BluetoothDevice;
 import android.bluetooth.BluetoothHeadsetClient;
 import android.bluetooth.BluetoothMapClient;
-import android.bluetooth.BluetoothPbapClient;
 import android.bluetooth.BluetoothPan;
+import android.bluetooth.BluetoothPbapClient;
+import android.bluetooth.BluetoothProfile;
 import android.car.ICarBluetoothUserService;
 import android.util.Log;
 
 import java.util.Arrays;
 import java.util.List;
 
-
 public class CarBluetoothUserService extends ICarBluetoothUserService.Stub {
     private static final boolean DBG = true;
     private static final String TAG = "CarBluetoothUsrSvc";
@@ -147,8 +145,13 @@
             Log.e(TAG, "Cannot connect to Profile. Proxy Unavailable");
             return;
         }
+        if (device == null) {
+            Log.e(TAG, "Cannot connect to profile on null device");
+            return;
+        }
         if (DBG) {
-            Log.d(TAG, "Trying to connect to " + device.getName() + " Profile: " + profile);
+            Log.d(TAG, "Trying to connect to " + device.getName() + " (" + device.getAddress()
+                    + ") Profile: " + Utils.getProfileName(profile));
         }
         switch (profile) {
             case BluetoothProfile.A2DP_SINK:
@@ -169,12 +172,93 @@
 
             case BluetoothProfile.PAN:
                 mBluetoothPan.connect(device);
+                break;
 
             default:
                 Log.d(TAG, "Unknown profile");
                 break;
         }
-        return;
+    }
+
+    @Override
+    public void bluetoothDisconnectFromProfile(int profile, BluetoothDevice device) {
+        if (!isBluetoothConnectionProxyAvailable(profile)) {
+            Log.e(TAG, "Cannot disconnect from profile. Proxy Unavailable");
+            return;
+        }
+        if (device == null) {
+            Log.e(TAG, "Cannot disconnect from profile on null device");
+            return;
+        }
+        if (DBG) {
+            Log.d(TAG, "Trying to disconnect from " + device.getName() + " (" + device.getAddress()
+                    + ") Profile: " + Utils.getProfileName(profile));
+        }
+        switch (profile) {
+            case BluetoothProfile.A2DP_SINK:
+                mBluetoothA2dpSink.disconnect(device);
+                break;
+
+            case BluetoothProfile.HEADSET_CLIENT:
+                mBluetoothHeadsetClient.disconnect(device);
+                break;
+
+            case BluetoothProfile.MAP_CLIENT:
+                mBluetoothMapClient.disconnect(device);
+                break;
+
+            case BluetoothProfile.PBAP_CLIENT:
+                mBluetoothPbapClient.disconnect(device);
+                break;
+
+            case BluetoothProfile.PAN:
+                mBluetoothPan.disconnect(device);
+                break;
+
+            default:
+                Log.d(TAG, "Unknown profile");
+                break;
+        }
+    }
+
+    /**
+     * Get the priority of the given Bluetooth profile for the given remote device
+     * @param profile - Bluetooth profile
+     * @param device - remote Bluetooth device
+     */
+    @Override
+    public int getProfilePriority(int profile, BluetoothDevice device) {
+        if (!isBluetoothConnectionProxyAvailable(profile)) {
+            Log.e(TAG, "Cannot get profile priority. Proxy Unavailable");
+            return BluetoothProfile.PRIORITY_UNDEFINED;
+        }
+        if (device == null) {
+            Log.e(TAG, "Cannot get profile priority on null device");
+            return BluetoothProfile.PRIORITY_UNDEFINED;
+        }
+        int priority;
+        switch (profile) {
+            case BluetoothProfile.A2DP_SINK:
+                priority = mBluetoothA2dpSink.getPriority(device);
+                break;
+            case BluetoothProfile.HEADSET_CLIENT:
+                priority = mBluetoothHeadsetClient.getPriority(device);
+                break;
+            case BluetoothProfile.MAP_CLIENT:
+                priority = mBluetoothMapClient.getPriority(device);
+                break;
+            case BluetoothProfile.PBAP_CLIENT:
+                priority = mBluetoothPbapClient.getPriority(device);
+                break;
+            default:
+                Log.d(TAG, "Unknown Profile");
+                return BluetoothProfile.PRIORITY_UNDEFINED;
+        }
+        if (DBG) {
+            Log.d(TAG, Utils.getProfileName(profile) + " priority for " + device.getName() + " ("
+                    + device.getAddress() + ") = " + priority);
+        }
+        return priority;
     }
 
     /**
@@ -186,9 +270,17 @@
     @Override
     public void setProfilePriority(int profile, BluetoothDevice device, int priority) {
         if (!isBluetoothConnectionProxyAvailable(profile)) {
-            Log.e(TAG, "Cannot connect to Profile. Proxy Unavailable");
+            Log.e(TAG, "Cannot set profile priority. Proxy Unavailable");
             return;
         }
+        if (device == null) {
+            Log.e(TAG, "Cannot set profile priority on null device");
+            return;
+        }
+        if (DBG) {
+            Log.d(TAG, "Setting " + Utils.getProfileName(profile) + " priority for "
+                    + device.getName() + " (" + device.getAddress() + ") to " + priority);
+        }
         switch (profile) {
             case BluetoothProfile.A2DP_SINK:
                 mBluetoothA2dpSink.setPriority(device, priority);
diff --git a/service/src/com/android/car/CarInputService.java b/service/src/com/android/car/CarInputService.java
index c95674e..ab3ca3a 100644
--- a/service/src/com/android/car/CarInputService.java
+++ b/service/src/com/android/car/CarInputService.java
@@ -18,6 +18,7 @@
 import static android.hardware.input.InputManager.INJECT_INPUT_EVENT_MODE_ASYNC;
 import static android.service.voice.VoiceInteractionSession.SHOW_SOURCE_PUSH_TO_TALK;
 
+import android.annotation.Nullable;
 import android.app.ActivityManager;
 import android.car.input.CarInputHandlingService;
 import android.car.input.CarInputHandlingService.InputFilter;
@@ -30,10 +31,11 @@
 import android.net.Uri;
 import android.os.Binder;
 import android.os.Bundle;
+import android.os.Handler;
 import android.os.IBinder;
+import android.os.Looper;
 import android.os.Parcel;
 import android.os.RemoteException;
-import android.os.SystemClock;
 import android.os.UserHandle;
 import android.provider.CallLog.Calls;
 import android.telecom.TelecomManager;
@@ -42,84 +44,126 @@
 import android.view.KeyEvent;
 
 import com.android.car.hal.InputHalService;
+import com.android.internal.annotations.GuardedBy;
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.app.AssistUtils;
 import com.android.internal.app.IVoiceInteractionSessionShowCallback;
 
 import java.io.PrintWriter;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
+import java.util.function.Supplier;
 
 public class CarInputService implements CarServiceBase, InputHalService.InputListener {
 
+    /** An interface to receive {@link KeyEvent}s as they occur. */
     public interface KeyEventListener {
-        boolean onKeyEvent(KeyEvent event);
+        /** Called when a key event occurs. */
+        void onKeyEvent(KeyEvent event);
     }
 
     private static final class KeyPressTimer {
-        private static final long LONG_PRESS_TIME_MS = 1000;
-
+        private final Handler mHandler;
+        private final Runnable mLongPressRunnable;
+        private final Runnable mCallback = this::onTimerExpired;
+        @GuardedBy("this")
         private boolean mDown = false;
-        private long mDuration = -1;
+        @GuardedBy("this")
+        private boolean mLongPress = false;
 
+        KeyPressTimer(Handler handler, Runnable longPressRunnable) {
+            mHandler = handler;
+            mLongPressRunnable = longPressRunnable;
+        }
+
+        /** Marks that a key was pressed, and starts the long-press timer. */
         synchronized void keyDown() {
             mDown = true;
-            mDuration = SystemClock.elapsedRealtime();
+            mLongPress = false;
+            mHandler.removeCallbacks(mCallback);
+            mHandler.postDelayed(mCallback, LONG_PRESS_TIME_MS);
         }
 
-        synchronized void keyUp() {
-            if (!mDown) {
-                throw new IllegalStateException("key can't go up without being down");
-            }
-            mDuration = SystemClock.elapsedRealtime() - mDuration;
+        /**
+         * Marks that a key was released, and stops the long-press timer.
+         *
+         * Returns true if the press was a long-press.
+         */
+        synchronized boolean keyUp() {
+            mHandler.removeCallbacks(mCallback);
             mDown = false;
+            return mLongPress;
         }
 
-        synchronized boolean isLongPress() {
-            if (mDown) {
-                throw new IllegalStateException("can't query press length during key down");
+        private void onTimerExpired() {
+            synchronized (this) {
+                // If the timer expires after key-up, don't retroactively make the press long.
+                if (!mDown) {
+                    return;
+                }
+                mLongPress = true;
             }
-            return mDuration >= LONG_PRESS_TIME_MS;
+
+            mLongPressRunnable.run();
         }
     }
 
-    private IVoiceInteractionSessionShowCallback mShowCallback =
+    private final IVoiceInteractionSessionShowCallback mShowCallback =
             new IVoiceInteractionSessionShowCallback.Stub() {
-        @Override
-        public void onFailed() {
-            Log.w(CarLog.TAG_INPUT, "Failed to show VoiceInteractionSession");
-        }
+                @Override
+                public void onFailed() {
+                    Log.w(CarLog.TAG_INPUT, "Failed to show VoiceInteractionSession");
+                }
 
-        @Override
-        public void onShown() {
-            if (DBG) {
-                Log.d(CarLog.TAG_INPUT, "IVoiceInteractionSessionShowCallback onShown()");
-            }
-        }
-    };
+                @Override
+                public void onShown() {
+                    if (DBG) {
+                        Log.d(CarLog.TAG_INPUT, "IVoiceInteractionSessionShowCallback onShown()");
+                    }
+                }
+            };
 
     private static final boolean DBG = false;
-    private static final String EXTRA_CAR_PUSH_TO_TALK =
+    @VisibleForTesting
+    static final String EXTRA_CAR_PUSH_TO_TALK =
             "com.android.car.input.EXTRA_CAR_PUSH_TO_TALK";
 
+    private static final int LONG_PRESS_TIME_MS = 1000;
+
     private final Context mContext;
     private final InputHalService mInputHalService;
     private final TelecomManager mTelecomManager;
-    private final InputManager mInputManager;
     private final AssistUtils mAssistUtils;
+    // The ComponentName of the CarInputListener service. Can be changed via resource overlay,
+    // or overridden directly for testing.
+    @Nullable
+    private final ComponentName mCustomInputServiceComponent;
+    // The default handler for main-display input events. By default, injects the events into
+    // the input queue via InputManager, but can be overridden for testing.
+    private final KeyEventListener mMainDisplayHandler;
+    // The supplier for the last-called number. By default, gets the number from the call log.
+    // May be overridden for testing.
+    private final Supplier<String> mLastCalledNumberSupplier;
 
-    private KeyEventListener mVoiceAssistantKeyListener;
-    private KeyEventListener mLongVoiceAssistantKeyListener;
+    @GuardedBy("this")
+    private Runnable mVoiceAssistantKeyListener;
+    @GuardedBy("this")
+    private Runnable mLongVoiceAssistantKeyListener;
 
-    private final KeyPressTimer mVoiceKeyTimer = new KeyPressTimer();
-    private final KeyPressTimer mCallKeyTimer = new KeyPressTimer();
+    private final KeyPressTimer mVoiceKeyTimer;
+    private final KeyPressTimer mCallKeyTimer;
 
+    @GuardedBy("this")
     private KeyEventListener mInstrumentClusterKeyListener;
 
-    private ICarInputListener mCarInputListener;
+    @GuardedBy("this")
+    @VisibleForTesting
+    ICarInputListener mCarInputListener;
+
+    @GuardedBy("this")
     private boolean mCarInputListenerBound = false;
-    private final Map<Integer, Set<Integer>> mHandledKeys = new HashMap<>();
+
+    // Maps display -> keycodes handled.
+    @GuardedBy("this")
+    private final SetMultimap<Integer, Integer> mHandledKeys = new SetMultimap<>();
 
     private final Binder mCallback = new Binder() {
         @Override
@@ -144,14 +188,18 @@
                 Log.d(CarLog.TAG_INPUT, "onServiceConnected, name: "
                         + name + ", binder: " + binder);
             }
-            mCarInputListener = ICarInputListener.Stub.asInterface(binder);
+            synchronized (this) {
+                mCarInputListener = ICarInputListener.Stub.asInterface(binder);
+            }
 
             try {
                 binder.linkToDeath(() -> CarServiceUtils.runOnMainSync(() -> {
                     Log.w(CarLog.TAG_INPUT, "Input service died. Trying to rebind...");
-                    mCarInputListener = null;
-                    // Try to rebind with input service.
-                    mCarInputListenerBound = bindCarInputService();
+                    synchronized (this) {
+                        mCarInputListener = null;
+                        // Try to rebind with input service.
+                        mCarInputListenerBound = bindCarInputService();
+                    }
                 }), 0);
             } catch (RemoteException e) {
                 Log.e(CarLog.TAG_INPUT, e.getMessage(), e);
@@ -161,29 +209,56 @@
         @Override
         public void onServiceDisconnected(ComponentName name) {
             Log.d(CarLog.TAG_INPUT, "onServiceDisconnected, name: " + name);
-            mCarInputListener = null;
-            // Try to rebind with input service.
-            mCarInputListenerBound = bindCarInputService();
+            synchronized (this) {
+                mCarInputListener = null;
+                // Try to rebind with input service.
+                mCarInputListenerBound = bindCarInputService();
+            }
         }
     };
 
-    public CarInputService(Context context, InputHalService inputHalService) {
-        mContext = context;
-        mInputHalService = inputHalService;
-        mTelecomManager = context.getSystemService(TelecomManager.class);
-        mInputManager = context.getSystemService(InputManager.class);
-        mAssistUtils = new AssistUtils(context);
+    @Nullable
+    private static ComponentName getDefaultInputComponent(Context context) {
+        String carInputService = context.getString(R.string.inputService);
+        if (TextUtils.isEmpty(carInputService)) {
+            return null;
+        }
+
+        return ComponentName.unflattenFromString(carInputService);
     }
 
-    private synchronized void setHandledKeys(InputFilter[] handledKeys) {
+    public CarInputService(Context context, InputHalService inputHalService) {
+        this(context, inputHalService, new Handler(Looper.getMainLooper()),
+                context.getSystemService(TelecomManager.class), new AssistUtils(context),
+                event ->
+                        context.getSystemService(InputManager.class)
+                                .injectInputEvent(event, INJECT_INPUT_EVENT_MODE_ASYNC),
+                () -> Calls.getLastOutgoingCall(context),
+                getDefaultInputComponent(context));
+    }
+
+    @VisibleForTesting
+    CarInputService(Context context, InputHalService inputHalService, Handler handler,
+            TelecomManager telecomManager, AssistUtils assistUtils,
+            KeyEventListener mainDisplayHandler, Supplier<String> lastCalledNumberSupplier,
+            @Nullable ComponentName customInputServiceComponent) {
+        mContext = context;
+        mInputHalService = inputHalService;
+        mTelecomManager = telecomManager;
+        mAssistUtils = assistUtils;
+        mMainDisplayHandler = mainDisplayHandler;
+        mLastCalledNumberSupplier = lastCalledNumberSupplier;
+        mCustomInputServiceComponent = customInputServiceComponent;
+
+        mVoiceKeyTimer = new KeyPressTimer(handler, this::handleVoiceAssistLongPress);
+        mCallKeyTimer = new KeyPressTimer(handler, this::handleCallLongPress);
+    }
+
+    @VisibleForTesting
+    synchronized void setHandledKeys(InputFilter[] handledKeys) {
         mHandledKeys.clear();
         for (InputFilter handledKey : handledKeys) {
-            Set<Integer> displaySet = mHandledKeys.get(handledKey.mTargetDisplay);
-            if (displaySet == null) {
-                displaySet = new HashSet<Integer>();
-                mHandledKeys.put(handledKey.mTargetDisplay, displaySet);
-            }
-            displaySet.add(handledKey.mKeyCode);
+            mHandledKeys.put(handledKey.mTargetDisplay, handledKey.mKeyCode);
         }
     }
 
@@ -191,9 +266,8 @@
      * Set listener for listening voice assistant key event. Setting to null stops listening.
      * If listener is not set, default behavior will be done for short press.
      * If listener is set, short key press will lead into calling the listener.
-     * @param listener
      */
-    public void setVoiceAssistantKeyListener(KeyEventListener listener) {
+    public void setVoiceAssistantKeyListener(Runnable listener) {
         synchronized (this) {
             mVoiceAssistantKeyListener = listener;
         }
@@ -203,9 +277,8 @@
      * Set listener for listening long voice assistant key event. Setting to null stops listening.
      * If listener is not set, default behavior will be done for long press.
      * If listener is set, short long press will lead into calling the listener.
-     * @param listener
      */
-    public void setLongVoiceAssistantKeyListener(KeyEventListener listener) {
+    public void setLongVoiceAssistantKeyListener(Runnable listener) {
         synchronized (this) {
             mLongVoiceAssistantKeyListener = listener;
         }
@@ -228,7 +301,9 @@
 
 
         mInputHalService.setInputListener(this);
-        mCarInputListenerBound = bindCarInputService();
+        synchronized (this) {
+            mCarInputListenerBound = bindCarInputService();
+        }
     }
 
     @Override
@@ -247,9 +322,13 @@
     @Override
     public void onKeyEvent(KeyEvent event, int targetDisplay) {
         // Give a car specific input listener the opportunity to intercept any input from the car
-        if (mCarInputListener != null && isCustomEventHandler(event, targetDisplay)) {
+        ICarInputListener carInputListener;
+        synchronized (this) {
+            carInputListener = mCarInputListener;
+        }
+        if (carInputListener != null && isCustomEventHandler(event, targetDisplay)) {
             try {
-                mCarInputListener.onKeyEvent(event, targetDisplay);
+                carInputListener.onKeyEvent(event, targetDisplay);
             } catch (RemoteException e) {
                 Log.e(CarLog.TAG_INPUT, "Error while calling car input service", e);
             }
@@ -273,58 +352,79 @@
         if (targetDisplay == InputHalService.DISPLAY_INSTRUMENT_CLUSTER) {
             handleInstrumentClusterKey(event);
         } else {
-            handleMainDisplayKey(event);
+            mMainDisplayHandler.onKeyEvent(event);
         }
     }
 
     private synchronized boolean isCustomEventHandler(KeyEvent event, int targetDisplay) {
-        Set<Integer> displaySet = mHandledKeys.get(targetDisplay);
-        if (displaySet == null) {
-            return false;
-        }
-        return displaySet.contains(event.getKeyCode());
+        return mHandledKeys.containsEntry(targetDisplay, event.getKeyCode());
     }
 
     private void handleVoiceAssistKey(KeyEvent event) {
         int action = event.getAction();
-        if (action == KeyEvent.ACTION_DOWN) {
+        if (action == KeyEvent.ACTION_DOWN && event.getRepeatCount() == 0) {
             mVoiceKeyTimer.keyDown();
         } else if (action == KeyEvent.ACTION_UP) {
-            mVoiceKeyTimer.keyUp();
-            final KeyEventListener listener;
+            if (mVoiceKeyTimer.keyUp()) {
+                // Long press already handled by handleVoiceAssistLongPress(), nothing more to do.
+                return;
+            }
 
+            final Runnable listener;
             synchronized (this) {
-                listener = (mVoiceKeyTimer.isLongPress()
-                    ? mLongVoiceAssistantKeyListener : mVoiceAssistantKeyListener);
+                listener = mVoiceAssistantKeyListener;
             }
 
             if (listener != null) {
-                listener.onKeyEvent(event);
+                listener.run();
             } else {
                 launchDefaultVoiceAssistantHandler();
             }
         }
     }
 
+    private void handleVoiceAssistLongPress() {
+        Runnable listener;
+
+        synchronized (this) {
+            listener = mLongVoiceAssistantKeyListener;
+        }
+
+        if (listener != null) {
+            listener.run();
+        } else {
+            launchDefaultVoiceAssistantHandler();
+        }
+    }
+
     private void handleCallKey(KeyEvent event) {
         int action = event.getAction();
-        if (action == KeyEvent.ACTION_DOWN) {
+        if (action == KeyEvent.ACTION_DOWN && event.getRepeatCount() == 0) {
             mCallKeyTimer.keyDown();
         } else if (action == KeyEvent.ACTION_UP) {
-            mCallKeyTimer.keyUp();
-
-            // Handle a phone call regardless of press length.
-            if (mTelecomManager != null && mTelecomManager.isRinging()) {
-                Log.i(CarLog.TAG_INPUT, "call key while ringing. Answer the call!");
-                mTelecomManager.acceptRingingCall();
-            } else if (mCallKeyTimer.isLongPress()) {
-                dialLastCallHandler();
-            } else {
-                launchDialerHandler();
+            if (mCallKeyTimer.keyUp()) {
+                // Long press already handled by handleCallLongPress(), nothing more to do.
+                return;
             }
+
+            if (acceptCallIfRinging()) {
+                // Ringing call answered, nothing more to do.
+                return;
+            }
+
+            launchDialerHandler();
         }
     }
 
+    private void handleCallLongPress() {
+        // Long-press answers call if ringing, same as short-press.
+        if (acceptCallIfRinging()) {
+            return;
+        }
+
+        dialLastCallHandler();
+    }
+
     private void launchDialerHandler() {
         Log.i(CarLog.TAG_INPUT, "call key, launch dialer intent");
         Intent dialerIntent = new Intent(Intent.ACTION_DIAL);
@@ -334,8 +434,8 @@
     private void dialLastCallHandler() {
         Log.i(CarLog.TAG_INPUT, "call key, dialing last call");
 
-        String lastNumber = Calls.getLastOutgoingCall(mContext);
-        if (lastNumber != null && !lastNumber.isEmpty()) {
+        String lastNumber = mLastCalledNumberSupplier.get();
+        if (!TextUtils.isEmpty(lastNumber)) {
             Intent callLastNumberIntent = new Intent(Intent.ACTION_CALL)
                     .setData(Uri.fromParts("tel", lastNumber, null))
                     .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
@@ -343,6 +443,16 @@
         }
     }
 
+    private boolean acceptCallIfRinging() {
+        if (mTelecomManager != null && mTelecomManager.isRinging()) {
+            Log.i(CarLog.TAG_INPUT, "call key while ringing. Answer the call!");
+            mTelecomManager.acceptRingingCall();
+            return true;
+        }
+
+        return false;
+    }
+
     private void launchDefaultVoiceAssistantHandler() {
         Log.i(CarLog.TAG_INPUT, "voice key, invoke AssistUtils");
 
@@ -369,31 +479,26 @@
         listener.onKeyEvent(event);
     }
 
-    private void handleMainDisplayKey(KeyEvent event) {
-        mInputManager.injectInputEvent(event, INJECT_INPUT_EVENT_MODE_ASYNC);
-    }
-
     @Override
-    public void dump(PrintWriter writer) {
+    public synchronized void dump(PrintWriter writer) {
         writer.println("*Input Service*");
         writer.println("mCarInputListenerBound:" + mCarInputListenerBound);
         writer.println("mCarInputListener:" + mCarInputListener);
     }
 
     private boolean bindCarInputService() {
-        String carInputService = mContext.getString(R.string.inputService);
-        if (TextUtils.isEmpty(carInputService)) {
+        if (mCustomInputServiceComponent == null) {
             Log.i(CarLog.TAG_INPUT, "Custom input service was not configured");
             return false;
         }
 
-        Log.d(CarLog.TAG_INPUT, "bindCarInputService, component: " + carInputService);
+        Log.d(CarLog.TAG_INPUT, "bindCarInputService, component: " + mCustomInputServiceComponent);
 
         Intent intent = new Intent();
         Bundle extras = new Bundle();
         extras.putBinder(CarInputHandlingService.INPUT_CALLBACK_BINDER_KEY, mCallback);
         intent.putExtras(extras);
-        intent.setComponent(ComponentName.unflattenFromString(carInputService));
+        intent.setComponent(mCustomInputServiceComponent);
         return mContext.bindService(intent, mInputServiceConnection, Context.BIND_AUTO_CREATE);
     }
 }
diff --git a/service/src/com/android/car/CarLocalServices.java b/service/src/com/android/car/CarLocalServices.java
new file mode 100644
index 0000000..2c619af
--- /dev/null
+++ b/service/src/com/android/car/CarLocalServices.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2019 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.car;
+
+import android.util.ArrayMap;
+
+import com.android.internal.annotations.VisibleForTesting;
+
+/**
+ * Copy of frameworks/base/core/java/com/android/server/LocalServices.java
+ * This is for accessing other car service components.
+ */
+public class CarLocalServices {
+    private CarLocalServices() {}
+
+    private static final ArrayMap<Class<?>, Object> sLocalServiceObjects =
+            new ArrayMap<Class<?>, Object>();
+
+    /**
+     * Returns a local service instance that implements the specified interface.
+     *
+     * @param type The type of service.
+     * @return The service object.
+     */
+    @SuppressWarnings("unchecked")
+    public static <T> T getService(Class<T> type) {
+        synchronized (sLocalServiceObjects) {
+            return (T) sLocalServiceObjects.get(type);
+        }
+    }
+
+    /**
+     * Adds a service instance of the specified interface to the global registry of local services.
+     */
+    public static <T> void addService(Class<T> type, T service) {
+        synchronized (sLocalServiceObjects) {
+            if (sLocalServiceObjects.containsKey(type)) {
+                throw new IllegalStateException("Overriding service registration");
+            }
+            sLocalServiceObjects.put(type, service);
+        }
+    }
+
+    /**
+     * Remove a service instance, must be only used in tests.
+     */
+    @VisibleForTesting
+    public static <T> void removeServiceForTest(Class<T> type) {
+        synchronized (sLocalServiceObjects) {
+            sLocalServiceObjects.remove(type);
+        }
+    }
+
+    /**
+     * Remove all registered services. Should be called when car service restarts.
+     */
+    public static void removeAllServices() {
+        synchronized (sLocalServiceObjects) {
+            sLocalServiceObjects.clear();
+        }
+    }
+}
diff --git a/service/src/com/android/car/CarLocationService.java b/service/src/com/android/car/CarLocationService.java
index c8543fa..e0f227f 100644
--- a/service/src/com/android/car/CarLocationService.java
+++ b/service/src/com/android/car/CarLocationService.java
@@ -17,7 +17,6 @@
 package com.android.car;
 
 import android.car.Car;
-import android.car.CarNotConnectedException;
 import android.car.hardware.CarPropertyValue;
 import android.car.hardware.power.CarPowerManager;
 import android.car.hardware.power.CarPowerManager.CarPowerStateListener;
@@ -84,12 +83,8 @@
     private final ServiceConnection mCarServiceConnection = new ServiceConnection() {
         @Override
         public void onServiceConnected(ComponentName name, IBinder service) {
-            try {
-                mCarPowerManager = (CarPowerManager) mCar.getCarManager(Car.POWER_SERVICE);
-                mCarPowerManager.setListener(CarLocationService.this);
-            } catch (CarNotConnectedException e) {
-                Log.e(TAG, "Failed to get CarPowerManager instance", e);
-            }
+            mCarPowerManager = (CarPowerManager) mCar.getCarManager(Car.POWER_SERVICE);
+            mCarPowerManager.setListener(CarLocationService.this);
         }
 
         @Override
@@ -160,12 +155,6 @@
     }
 
     @Override
-    public void onStateChanged(int state) {
-        throw new UnsupportedOperationException(
-                "Should not be here. This API obsolete and is not used.");
-    }
-
-    @Override
     public void onStateChanged(int state, CompletableFuture<Void> future) {
         logd("onStateChanged: " + state);
         switch (state) {
diff --git a/service/src/com/android/car/CarPowerManagementService.java b/service/src/com/android/car/CarPowerManagementService.java
index 5b6fca0..0bec14c 100644
--- a/service/src/com/android/car/CarPowerManagementService.java
+++ b/service/src/com/android/car/CarPowerManagementService.java
@@ -70,6 +70,8 @@
     private HandlerThread mHandlerThread;
     @GuardedBy("this")
     private PowerHandler mHandler;
+    @GuardedBy("this")
+    private boolean mTimerActive;
     private int mNextWakeupSec = 0;
     private int mTokenValue = 1;
     private boolean mShutdownOnFinish = false;
@@ -244,7 +246,7 @@
 
     private void handleWaitForVhal(CpmsState state) {
         int carPowerStateListenerState = state.mCarPowerStateListenerState;
-        sendPowerManagerEvent(carPowerStateListenerState, false);
+        sendPowerManagerEvent(carPowerStateListenerState);
         // Inspect CarPowerStateListenerState to decide which message to send via VHAL
         switch (carPowerStateListenerState) {
             case CarPowerStateListener.WAIT_FOR_VHAL:
@@ -261,7 +263,7 @@
 
     private void handleOn() {
         mSystemInterface.setDisplayState(true);
-        sendPowerManagerEvent(CarPowerStateListener.ON, false);
+        sendPowerManagerEvent(CarPowerStateListener.ON);
         mHal.sendOn();
     }
 
@@ -273,7 +275,7 @@
                 || !newState.mCanSleep;
         if (newState.mCanPostpone) {
             Log.i(CarLog.TAG_POWER, "starting shutdown postpone");
-            sendPowerManagerEvent(CarPowerStateListener.SHUTDOWN_PREPARE, true);
+            sendPowerManagerEvent(CarPowerStateListener.SHUTDOWN_PREPARE);
             mHal.sendShutdownPrepare();
             doHandlePreprocessing();
         } else {
@@ -281,12 +283,16 @@
             synchronized (this) {
                 releaseTimerLocked();
             }
-            doHandleShutdown();
+            // Notify hal that we are shutting down and since it is immediate, don't schedule next
+            // wake up
+            mHal.sendShutdownStart(0);
+            // shutdown HU
+            mSystemInterface.shutdown();
         }
     }
 
     private void handleWaitForFinish(CpmsState state) {
-        sendPowerManagerEvent(state.mCarPowerStateListenerState, false);
+        sendPowerManagerEvent(state.mCarPowerStateListenerState);
         switch (state.mCarPowerStateListenerState) {
             case CarPowerStateListener.SUSPEND_ENTER:
                 mHal.sendSleepEntry(mNextWakeupSec);
@@ -299,7 +305,8 @@
 
     private void handleFinish() {
         if (mShutdownOnFinish) {
-            doHandleShutdown();
+            // shutdown HU
+            mSystemInterface.shutdown();
         } else {
             doHandleDeepSleep();
         }
@@ -307,10 +314,13 @@
 
     @GuardedBy("this")
     private void releaseTimerLocked() {
-        if (mTimer != null) {
-            mTimer.cancel();
+        synchronized (this) {
+            if (mTimer != null) {
+                mTimer.cancel();
+            }
+            mTimer = null;
+            mTimerActive = false;
         }
-        mTimer = null;
     }
 
     private void doHandlePreprocessing() {
@@ -321,6 +331,7 @@
             mProcessingStartTime = SystemClock.elapsedRealtime();
             releaseTimerLocked();
             mTimer = new Timer();
+            mTimerActive = true;
             mTimer.scheduleAtFixedRate(
                     new ShutdownProcessingTimerTask(pollingCount),
                     0 /*delay*/,
@@ -328,26 +339,46 @@
         }
     }
 
-    private void sendPowerManagerEvent(int newState, boolean useTokens) {
+    private void sendPowerManagerEvent(int newState) {
+        // Based on new state, do we need to use tokens? In current design, SHUTDOWN_PREPARE
+        // is the only state where we need to maintain callback from listener components.
+        boolean useTokens = (newState == CarPowerStateListener.SHUTDOWN_PREPARE);
+
+        // First lets generate the tokens
+        generateTokensList(useTokens);
+
+        // Now lets notify listeners that we are making a state transition
+        sendBroadcasts(newState, useTokens);
+    }
+
+    private void generateTokensList(boolean useTokens) {
         synchronized (mPowerManagerListenerTokens) {
             if (useTokens) {
                 mPowerManagerListenerTokens.clear();
             }
             int i = mPowerManagerListeners.beginBroadcast();
             while (i-- > 0) {
+                ICarPowerStateListener listener = mPowerManagerListeners.getBroadcastItem(i);
+                if (useTokens) {
+                    mPowerManagerListenerTokens.put(listener.asBinder(), mTokenValue);
+                    mTokenValue++;
+                }
+            }
+            mPowerManagerListeners.finishBroadcast();
+        }
+    }
+
+    private void sendBroadcasts(int newState, boolean useTokens) {
+        synchronized (mPowerManagerListenerTokens) {
+            int i = mPowerManagerListeners.beginBroadcast();
+            while (i-- > 0) {
+                ICarPowerStateListener listener = mPowerManagerListeners.getBroadcastItem(i);
+                int token = useTokens ? mPowerManagerListenerTokens.get(listener.asBinder()) : 0;
                 try {
-                    int token = 0;
-                    ICarPowerStateListener listener = mPowerManagerListeners.getBroadcastItem(i);
-                    if (useTokens) {
-                        listener.onStateChanged(newState, mTokenValue);
-                        mPowerManagerListenerTokens.put(listener.asBinder(), mTokenValue);
-                        mTokenValue++;
-                    } else {
-                        listener.onStateChanged(newState, 0);
-                    }
+                    listener.onStateChanged(newState, token);
                 } catch (RemoteException e) {
                     // Its likely the connection snapped. Let binder death handle the situation.
-                    Log.e(CarLog.TAG_POWER, "onStateChanged calling failed: " + e);
+                    Log.e(CarLog.TAG_POWER, "onStateChanged() call failed: " + e, e);
                 }
             }
             mPowerManagerListeners.finishBroadcast();
@@ -408,12 +439,6 @@
         }
     }
 
-    private void doHandleShutdown() {
-        // now shutdown
-        mHal.sendShutdownStart(mHal.isTimedWakeupAllowed() ? mNextWakeupSec : 0);
-        mSystemInterface.shutdown();
-    }
-
     private void doHandleProcessingComplete() {
         synchronized (this) {
             releaseTimerLocked();
@@ -473,7 +498,7 @@
     public void registerListener(ICarPowerStateListener listener) {
         ICarImpl.assertPermission(mContext, Car.PERMISSION_CAR_POWER);
         mPowerManagerListeners.register(listener);
-        // TODO:  Need to send current state to newly registered listener?  If so, need to handle
+        // TODO: Need to send current state to newly registered listener?  If so, need to handle
         //          token for SHUTDOWN_PREPARE state
     }
 
@@ -517,6 +542,11 @@
             Log.w(CarLog.TAG_POWER, "Next wake up can not be in negative time. Ignoring!");
             return;
         }
+        if (!mHal.isTimedWakeupAllowed()) {
+            Log.w(CarLog.TAG_POWER, "Setting timed wakeups are disabled in HAL. Skipping");
+            mNextWakeupSec = 0;
+            return;
+        }
         if (mNextWakeupSec == 0 || mNextWakeupSec > seconds) {
             mNextWakeupSec = seconds;
         } else {
@@ -626,16 +656,20 @@
 
         @Override
         public void run() {
-            mCurrentCount++;
-            if (mCurrentCount > mExpirationCount) {
-                PowerHandler handler;
-                synchronized (CarPowerManagementService.this) {
+            synchronized (this) {
+                if (!mTimerActive) {
+                    // Ignore timer expiration since we got cancelled
+                    return;
+                }
+                mCurrentCount++;
+                if (mCurrentCount > mExpirationCount) {
+                    PowerHandler handler;
                     releaseTimerLocked();
                     handler = mHandler;
+                    handler.handleProcessingComplete();
+                } else {
+                    mHal.sendShutdownPostpone(SHUTDOWN_EXTEND_MAX_MS);
                 }
-                handler.handleProcessingComplete();
-            } else {
-                mHal.sendShutdownPostpone(SHUTDOWN_EXTEND_MAX_MS);
             }
         }
     }
diff --git a/service/src/com/android/car/CarProjectionService.java b/service/src/com/android/car/CarProjectionService.java
index f47362c..582d535 100644
--- a/service/src/com/android/car/CarProjectionService.java
+++ b/service/src/com/android/car/CarProjectionService.java
@@ -28,6 +28,7 @@
 import static android.net.wifi.WifiManager.WIFI_AP_STATE_ENABLING;
 
 import android.annotation.Nullable;
+import android.bluetooth.BluetoothDevice;
 import android.car.CarProjectionManager;
 import android.car.CarProjectionManager.ProjectionAccessPointCallback;
 import android.car.ICarProjection;
@@ -54,7 +55,6 @@
 import android.os.RemoteException;
 import android.os.UserHandle;
 import android.util.Log;
-import android.view.KeyEvent;
 
 import com.android.internal.annotations.GuardedBy;
 
@@ -79,6 +79,7 @@
 
     private final ProjectionCallbackHolder mProjectionCallbacks;
     private final CarInputService mCarInputService;
+    private final CarBluetoothService mCarBluetoothService;
     private final Context mContext;
     private final WifiManager mWifiManager;
     private final Handler mHandler;
@@ -110,23 +111,11 @@
 
     private final WifiConfiguration mProjectionWifiConfiguration;
 
-    private final CarInputService.KeyEventListener mVoiceAssistantKeyListener =
-            new CarInputService.KeyEventListener() {
-                @Override
-                public boolean onKeyEvent(KeyEvent event) {
-                    handleVoiceAssitantRequest(false);
-                    return true;
-                }
-            };
+    private final Runnable mVoiceAssistantKeyListener =
+            () -> handleVoiceAssistantRequest(false);
 
-    private final CarInputService.KeyEventListener mLongVoiceAssistantKeyListener =
-            new CarInputService.KeyEventListener() {
-                @Override
-                public boolean onKeyEvent(KeyEvent event) {
-                    handleVoiceAssitantRequest(true);
-                    return true;
-                }
-            };
+    private final Runnable mLongVoiceAssistantKeyListener =
+            () -> handleVoiceAssistantRequest(true);
 
     private final ServiceConnection mConnection = new ServiceConnection() {
             @Override
@@ -140,7 +129,7 @@
             public void onServiceDisconnected(ComponentName className) {
                 // Service has crashed.
                 Log.w(CarLog.TAG_PROJECTION, "Service disconnected: " + className);
-                synchronized (CarProjectionService.this) {
+                synchronized (mLock) {
                     mRegisteredService = null;
                 }
                 unbindServiceIfBound();
@@ -150,10 +139,12 @@
     private boolean mBound;
     private Intent mRegisteredService;
 
-    CarProjectionService(Context context, CarInputService carInputService) {
+    CarProjectionService(Context context, CarInputService carInputService,
+            CarBluetoothService carBluetoothService) {
         mContext = context;
         mHandler = new Handler();
         mCarInputService = carInputService;
+        mCarBluetoothService = carBluetoothService;
         mProjectionCallbacks = new ProjectionCallbackHolder(this);
         mWifiManager = context.getSystemService(WifiManager.class);
         mProjectionWifiConfiguration = createWifiConfiguration(context);
@@ -163,7 +154,7 @@
     public void registerProjectionRunner(Intent serviceIntent) {
         // We assume one active projection app running in the system at one time.
         synchronized (mLock) {
-            if (serviceIntent.filterEquals(mRegisteredService)) {
+            if (serviceIntent.filterEquals(mRegisteredService) && mBound) {
                 return;
             }
             if (mRegisteredService != null) {
@@ -203,11 +194,13 @@
                 return;
             }
             mBound = false;
+            mRegisteredService = null;
         }
         mContext.unbindService(mConnection);
     }
 
-    private void handleVoiceAssitantRequest(boolean isTriggeredByLongPress) {
+    private void handleVoiceAssistantRequest(boolean isTriggeredByLongPress) {
+        Log.i(TAG, "Voice assistant request, long press = " + isTriggeredByLongPress);
         synchronized (mLock) {
             for (BinderInterfaceContainer.BinderInterface<ICarProjectionCallback> listener :
                     mProjectionCallbacks.getInterfaces()) {
@@ -271,6 +264,70 @@
         }
     }
 
+    /**
+     * Request to disconnect the given profile on the given device, and prevent it from reconnecting
+     * until either the request is released, or the process owning the given token dies.
+     *
+     * @param device  The device on which to inhibit a profile.
+     * @param profile The {@link android.bluetooth.BluetoothProfile} to inhibit.
+     * @param token   A {@link IBinder} to be used as an identity for the request. If the process
+     *                owning the token dies, the request will automatically be released.
+     * @return True if the profile was successfully inhibited, false if an error occurred.
+     */
+    @Override
+    public boolean requestBluetoothProfileInhibit(
+            BluetoothDevice device, int profile, IBinder token) {
+        if (DBG) {
+            Log.d(TAG, "requestBluetoothProfileInhibit device=" + device + " profile=" + profile
+                    + " from uid " + Binder.getCallingUid());
+        }
+        try {
+            if (device == null) {
+                // Will be caught by AIDL and thrown to caller.
+                throw new NullPointerException("Device must not be null");
+            }
+            if (token == null) {
+                throw new NullPointerException("Token must not be null");
+            }
+            return mCarBluetoothService.requestProfileInhibit(device, profile, token);
+        } catch (RuntimeException e) {
+            Log.e(TAG, "Error in requestBluetoothProfileInhibit", e);
+            throw e;
+        }
+    }
+
+    /**
+     * Release an inhibit request made by {@link #requestBluetoothProfileInhibit}, and reconnect the
+     * profile if no other inhibit requests are active.
+     *
+     * @param device  The device on which to release the inhibit request.
+     * @param profile The profile on which to release the inhibit request.
+     * @param token   The token provided in the original call to
+     *                {@link #requestBluetoothProfileInhibit}.
+     * @return True if the request was released, false if an error occurred.
+     */
+    @Override
+    public boolean releaseBluetoothProfileInhibit(
+            BluetoothDevice device, int profile, IBinder token) {
+        if (DBG) {
+            Log.d(TAG, "releaseBluetoothProfileInhibit device=" + device + " profile=" + profile
+                    + " from uid " + Binder.getCallingUid());
+        }
+        try {
+            if (device == null) {
+                // Will be caught by AIDL and thrown to caller.
+                throw new NullPointerException("Device must not be null");
+            }
+            if (token == null) {
+                throw new NullPointerException("Token must not be null");
+            }
+            return mCarBluetoothService.releaseProfileInhibit(device, profile, token);
+        } catch (RuntimeException e) {
+            Log.e(TAG, "Error in releaseBluetoothProfileInhibit", e);
+            throw e;
+        }
+    }
+
     private void startAccessPoint() {
         synchronized (mLock) {
             switch (mWifiMode) {
@@ -529,6 +586,8 @@
             writer.println("Wireless clients: " +  mWirelessClients.size());
             writer.println("Current wifi mode: " + mWifiMode);
             writer.println("SoftApCallback: " + mSoftApCallback);
+            writer.println("Bound to projection app: " + mBound);
+            writer.println("Registered Service: " + mRegisteredService);
         }
     }
 
diff --git a/service/src/com/android/car/CarPropertyService.java b/service/src/com/android/car/CarPropertyService.java
index 35fd295..961ba5e 100644
--- a/service/src/com/android/car/CarPropertyService.java
+++ b/service/src/com/android/car/CarPropertyService.java
@@ -18,7 +18,6 @@
 
 import static java.lang.Integer.toHexString;
 
-import android.car.Car;
 import android.car.hardware.CarPropertyConfig;
 import android.car.hardware.CarPropertyValue;
 import android.car.hardware.property.CarPropertyEvent;
@@ -81,8 +80,7 @@
             try {
                 mListenerBinder.linkToDeath(this, 0);
             } catch (RemoteException e) {
-                Log.e(TAG, "Failed to link death for recipient. " + e);
-                throw new IllegalStateException(Car.CAR_NOT_CONNECTED_EXCEPTION_MSG);
+                throw new IllegalStateException("Client already dead", e);
             }
             mClientMap.put(mListenerBinder, this);
         }
diff --git a/service/src/com/android/car/CarStorageMonitoringService.java b/service/src/com/android/car/CarStorageMonitoringService.java
index 80434c1..fb487b4 100644
--- a/service/src/com/android/car/CarStorageMonitoringService.java
+++ b/service/src/com/android/car/CarStorageMonitoringService.java
@@ -120,9 +120,9 @@
         }
 
         mUidIoStatsProvider = systemInterface.getUidIoStatsProvider();
-        mUptimeTrackerFile = new File(systemInterface.getFilesDir(), UPTIME_TRACKER_FILENAME);
-        mWearInfoFile = new File(systemInterface.getFilesDir(), WEAR_INFO_FILENAME);
-        mLifetimeWriteFile = new File(systemInterface.getFilesDir(), LIFETIME_WRITES_FILENAME);
+        mUptimeTrackerFile = new File(systemInterface.getSystemCarDir(), UPTIME_TRACKER_FILENAME);
+        mWearInfoFile = new File(systemInterface.getSystemCarDir(), WEAR_INFO_FILENAME);
+        mLifetimeWriteFile = new File(systemInterface.getSystemCarDir(), LIFETIME_WRITES_FILENAME);
         mOnShutdownReboot = new OnShutdownReboot(mContext);
         mSystemInterface = systemInterface;
         mWearInformationProviders = systemInterface.getFlashWearInformationProviders();
diff --git a/service/src/com/android/car/CarUxRestrictionsConfigurationXmlParser.java b/service/src/com/android/car/CarUxRestrictionsConfigurationXmlParser.java
new file mode 100644
index 0000000..95bcb2c
--- /dev/null
+++ b/service/src/com/android/car/CarUxRestrictionsConfigurationXmlParser.java
@@ -0,0 +1,316 @@
+/*
+ * Copyright (C) 2018 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.car;
+
+import android.annotation.Nullable;
+import android.annotation.XmlRes;
+import android.car.drivingstate.CarDrivingStateEvent;
+import android.car.drivingstate.CarUxRestrictions;
+import android.car.drivingstate.CarUxRestrictionsConfiguration;
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.content.res.XmlResourceParser;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.util.Pair;
+import android.util.Xml;
+
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.IOException;
+
+/**
+ * @hide
+ */
+public final class CarUxRestrictionsConfigurationXmlParser {
+    private static final String TAG = "UxRConfigParser";
+    private static final int UX_RESTRICTIONS_UNKNOWN = -1;
+    private static final float INVALID_SPEED = -1f;
+    // XML tags to parse
+    private static final String ROOT_ELEMENT = "UxRestrictions";
+    private static final String RESTRICTION_MAPPING = "RestrictionMapping";
+    private static final String RESTRICTION_PARAMETERS = "RestrictionParameters";
+    private static final String DRIVING_STATE = "DrivingState";
+    private static final String RESTRICTIONS = "Restrictions";
+    private static final String STRING_RESTRICTIONS = "StringRestrictions";
+    private static final String CONTENT_RESTRICTIONS = "ContentRestrictions";
+
+    private final Context mContext;
+
+    private CarUxRestrictionsConfiguration.Builder mConfigBuilder;
+
+    private CarUxRestrictionsConfigurationXmlParser(Context context) {
+        mContext = context;
+    }
+
+    /**
+     * Loads the UX restrictions related information from the XML resource.
+     *
+     * @return parsed CarUxRestrictionsConfiguration; {@code null} if the XML is malformed.
+     */
+    @Nullable
+    public static CarUxRestrictionsConfiguration parse(Context context, @XmlRes int xmlResource)
+            throws IOException, XmlPullParserException {
+        return new CarUxRestrictionsConfigurationXmlParser(context).parse(xmlResource);
+    }
+
+    @Nullable
+    private CarUxRestrictionsConfiguration parse(@XmlRes int xmlResource)
+            throws IOException, XmlPullParserException {
+        mConfigBuilder = new CarUxRestrictionsConfiguration.Builder();
+
+        XmlResourceParser parser = mContext.getResources().getXml(xmlResource);
+        if (parser == null) {
+            Log.e(TAG, "Invalid Xml resource");
+            return null;
+        }
+
+        if (!traverseUntilStartTag(parser)) {
+            Log.e(TAG, "XML root element invalid: " + parser.getName());
+            return null;
+        }
+
+        if (!traverseUntilEndOfDocument(parser)) {
+            Log.e(TAG, "Could not parse XML to end");
+            return null;
+        }
+
+        return mConfigBuilder.build();
+    }
+
+    private boolean traverseUntilStartTag(XmlResourceParser parser)
+            throws IOException, XmlPullParserException {
+        int type;
+        // Traverse till we get to the first tag
+        while ((type = parser.next()) != XmlResourceParser.END_DOCUMENT
+                && type != XmlResourceParser.START_TAG) {
+            // Do nothing.
+        }
+        return ROOT_ELEMENT.equals(parser.getName());
+    }
+
+    private boolean traverseUntilEndOfDocument(XmlResourceParser parser)
+            throws XmlPullParserException, IOException {
+        AttributeSet attrs = Xml.asAttributeSet(parser);
+        while (parser.getEventType() != XmlResourceParser.END_DOCUMENT) {
+            // Every time we hit a start tag, check for the type of the tag
+            // and load the corresponding information.
+            if (parser.next() == XmlResourceParser.START_TAG) {
+                switch (parser.getName()) {
+                    case RESTRICTION_MAPPING:
+                        if (!mapDrivingStateToRestrictions(parser, attrs)) {
+                            Log.e(TAG, "Could not map driving state to restriction.");
+                            return false;
+                        }
+                        break;
+                    case RESTRICTION_PARAMETERS:
+                        if (!parseRestrictionParameters(parser, attrs)) {
+                            // Failure to parse is automatically handled by falling back to
+                            // defaults. Just log the information here.
+                            if (Log.isLoggable(TAG, Log.INFO)) {
+                                Log.i(TAG, "Error reading restrictions parameters. "
+                                        + "Falling back to platform defaults.");
+                            }
+                        }
+                        break;
+                    default:
+                        Log.w(TAG, "Unknown class:" + parser.getName());
+                }
+            }
+        }
+        return true;
+    }
+
+    /**
+     * Parses the information in the <restrictionMapping> tag to construct the mapping from
+     * driving state to UX restrictions.
+     */
+    private boolean mapDrivingStateToRestrictions(XmlResourceParser parser, AttributeSet attrs)
+            throws IOException, XmlPullParserException {
+        if (parser == null || attrs == null) {
+            Log.e(TAG, "Invalid arguments");
+            return false;
+        }
+        // The parser should be at the <RestrictionMapping> tag at this point.
+        if (!RESTRICTION_MAPPING.equals(parser.getName())) {
+            Log.e(TAG, "Parser not at RestrictionMapping element: " + parser.getName());
+            return false;
+        }
+        if (!traverseToTag(parser, DRIVING_STATE)) {
+            Log.e(TAG, "No <" + DRIVING_STATE + "> tag in XML");
+            return false;
+        }
+        // Handle all the <DrivingState> tags.
+        while (DRIVING_STATE.equals(parser.getName())) {
+            if (parser.getEventType() == XmlResourceParser.START_TAG) {
+                // 1. Get the driving state attributes: driving state and speed range
+                TypedArray a = mContext.getResources().obtainAttributes(attrs,
+                        R.styleable.UxRestrictions_DrivingState);
+                int drivingState = a
+                        .getInt(R.styleable.UxRestrictions_DrivingState_state,
+                                CarDrivingStateEvent.DRIVING_STATE_UNKNOWN);
+                float minSpeed = a
+                        .getFloat(
+                                R.styleable
+                                        .UxRestrictions_DrivingState_minSpeed,
+                                INVALID_SPEED);
+                float maxSpeed = a
+                        .getFloat(
+                                R.styleable
+                                        .UxRestrictions_DrivingState_maxSpeed,
+                                INVALID_SPEED);
+                a.recycle();
+
+                // 2. Traverse to the <Restrictions> tag
+                if (!traverseToTag(parser, RESTRICTIONS)) {
+                    Log.e(TAG, "No <" + RESTRICTIONS + "> tag in XML");
+                    return false;
+                }
+
+                // 3. Parse the restrictions for this driving state
+                Pair<Boolean, Integer> restrictions = parseRestrictions(parser, attrs);
+                if (Log.isLoggable(TAG, Log.DEBUG)) {
+                    Log.d(TAG, "Map " + drivingState + " : " + restrictions);
+                }
+
+                // Update the builder if the driving state and restrictions info are valid.
+                if (drivingState != CarDrivingStateEvent.DRIVING_STATE_UNKNOWN
+                        && restrictions != null) {
+                    addToRestrictions(drivingState, minSpeed, maxSpeed, restrictions.first,
+                            restrictions.second);
+                }
+            }
+            parser.next();
+        }
+        return true;
+    }
+
+    /**
+     * Parses the <restrictions> tag nested with the <drivingState>.  This provides the restrictions
+     * for the enclosing driving state.
+     */
+    @Nullable
+    private Pair<Boolean, Integer> parseRestrictions(XmlResourceParser parser, AttributeSet attrs)
+            throws IOException, XmlPullParserException {
+        int restrictions = UX_RESTRICTIONS_UNKNOWN;
+        boolean requiresOpt = true;
+        if (parser == null || attrs == null) {
+            Log.e(TAG, "Invalid Arguments");
+            return null;
+        }
+
+        while (RESTRICTIONS.equals(parser.getName())
+                && parser.getEventType() == XmlResourceParser.START_TAG) {
+            TypedArray a = mContext.getResources().obtainAttributes(attrs,
+                    R.styleable.UxRestrictions_Restrictions);
+            restrictions = a.getInt(
+                    R.styleable.UxRestrictions_Restrictions_uxr,
+                    CarUxRestrictions.UX_RESTRICTIONS_FULLY_RESTRICTED);
+            requiresOpt = a.getBoolean(
+                    R.styleable.UxRestrictions_Restrictions_requiresDistractionOptimization, true);
+            a.recycle();
+            parser.next();
+        }
+        return new Pair<>(requiresOpt, restrictions);
+    }
+
+    private void addToRestrictions(int drivingState, float minSpeed, float maxSpeed,
+            boolean requiresOpt, int restrictions) {
+        CarUxRestrictionsConfiguration.Builder.SpeedRange speedRange = null;
+        if (Float.compare(minSpeed, INVALID_SPEED) != 0) {
+            if (Float.compare(maxSpeed, INVALID_SPEED) == 0) {
+                // Setting min speed but not max implies MAX_SPEED.
+                maxSpeed = CarUxRestrictionsConfiguration.Builder.SpeedRange.MAX_SPEED;
+            }
+            speedRange = new CarUxRestrictionsConfiguration.Builder.SpeedRange(minSpeed, maxSpeed);
+        }
+        mConfigBuilder.setUxRestrictions(drivingState, speedRange, requiresOpt, restrictions);
+    }
+
+    private boolean traverseToTag(XmlResourceParser parser, String tag)
+            throws IOException, XmlPullParserException {
+        if (tag == null || parser == null) {
+            return false;
+        }
+        int type;
+        while ((type = parser.next()) != XmlResourceParser.END_DOCUMENT) {
+            if (type == XmlResourceParser.START_TAG && parser.getName().equals(tag)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Parses the information in the <RestrictionParameters> tag to read the parameters for the
+     * applicable UX restrictions
+     */
+    private boolean parseRestrictionParameters(XmlResourceParser parser, AttributeSet attrs)
+            throws IOException, XmlPullParserException {
+        if (parser == null || attrs == null) {
+            Log.e(TAG, "Invalid arguments");
+            return false;
+        }
+        // The parser should be at the <RestrictionParameters> tag at this point.
+        if (!RESTRICTION_PARAMETERS.equals(parser.getName())) {
+            Log.e(TAG, "Parser not at RestrictionParameters element: " + parser.getName());
+            return false;
+        }
+        while (parser.getEventType() != XmlResourceParser.END_DOCUMENT) {
+            int type = parser.next();
+            // Break if we have parsed all <RestrictionParameters>
+            if (type == XmlResourceParser.END_TAG && RESTRICTION_PARAMETERS.equals(
+                    parser.getName())) {
+                return true;
+            }
+            if (type == XmlResourceParser.START_TAG) {
+                TypedArray a = null;
+                switch (parser.getName()) {
+                    case STRING_RESTRICTIONS:
+                        a = mContext.getResources().obtainAttributes(attrs,
+                                R.styleable.UxRestrictions_StringRestrictions);
+                        mConfigBuilder.setMaxStringLength(a.getInt(
+                                R.styleable.UxRestrictions_StringRestrictions_maxLength,
+                                UX_RESTRICTIONS_UNKNOWN));
+
+                        break;
+                    case CONTENT_RESTRICTIONS:
+                        a = mContext.getResources().obtainAttributes(attrs,
+                                R.styleable.UxRestrictions_ContentRestrictions);
+                        mConfigBuilder.setMaxCumulativeContentItems(a.getInt(
+                                R.styleable.UxRestrictions_ContentRestrictions_maxCumulativeItems,
+                                UX_RESTRICTIONS_UNKNOWN));
+                        mConfigBuilder.setMaxContentDepth(a.getInt(
+                                R.styleable.UxRestrictions_ContentRestrictions_maxDepth,
+                                UX_RESTRICTIONS_UNKNOWN));
+                        break;
+                    default:
+                        if (Log.isLoggable(TAG, Log.DEBUG)) {
+                            Log.d(TAG, "Unsupported Restriction Parameters in XML: "
+                                    + parser.getName());
+                        }
+                        break;
+                }
+                if (a != null) {
+                    a.recycle();
+                }
+            }
+        }
+        return true;
+    }
+}
+
diff --git a/service/src/com/android/car/CarUxRestrictionsManagerService.java b/service/src/com/android/car/CarUxRestrictionsManagerService.java
index b90939b..d4d34be 100644
--- a/service/src/com/android/car/CarUxRestrictionsManagerService.java
+++ b/service/src/com/android/car/CarUxRestrictionsManagerService.java
@@ -16,32 +16,54 @@
 
 package com.android.car;
 
+import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
+
 import android.annotation.Nullable;
+import android.car.Car;
 import android.car.drivingstate.CarDrivingStateEvent;
 import android.car.drivingstate.CarDrivingStateEvent.CarDrivingState;
 import android.car.drivingstate.CarUxRestrictions;
+import android.car.drivingstate.CarUxRestrictionsConfiguration;
 import android.car.drivingstate.ICarDrivingStateChangeListener;
 import android.car.drivingstate.ICarUxRestrictionsChangeListener;
 import android.car.drivingstate.ICarUxRestrictionsManager;
 import android.car.hardware.CarPropertyValue;
 import android.car.hardware.property.CarPropertyEvent;
 import android.car.hardware.property.ICarPropertyEventListener;
+import android.car.userlib.CarUserManagerHelper;
+import android.content.BroadcastReceiver;
 import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
 import android.content.pm.PackageManager;
 import android.hardware.automotive.vehicle.V2_0.VehicleProperty;
+import android.os.AsyncTask;
 import android.os.Binder;
 import android.os.Build;
 import android.os.IBinder;
 import android.os.Process;
 import android.os.RemoteException;
+import android.os.SystemClock;
+import android.os.UserHandle;
+import android.util.AtomicFile;
+import android.util.JsonReader;
+import android.util.JsonWriter;
 import android.util.Log;
 
 import com.android.internal.annotations.GuardedBy;
+import com.android.internal.annotations.VisibleForTesting;
 
 import org.xmlpull.v1.XmlPullParserException;
 
+import java.io.File;
+import java.io.FileOutputStream;
 import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
 import java.io.PrintWriter;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
 import java.util.ArrayList;
 import java.util.LinkedList;
 import java.util.List;
@@ -49,6 +71,13 @@
 /**
  * A service that listens to current driving state of the vehicle and maps it to the
  * appropriate UX restrictions for that driving state.
+ * <p>
+ * <h1>UX Restrictions Configuration</h1>
+ * When this service starts, it will first try reading the configuration set through
+ * {@link #saveUxRestrictionsConfigurationForNextBoot(CarUxRestrictionsConfiguration)}.
+ * If one is not available, it will try reading the configuration saved in
+ * {@code R.xml.car_ux_restrictions_map}. If XML is somehow unavailable, it will
+ * fall back to a hard-coded configuration.
  */
 public class CarUxRestrictionsManagerService extends ICarUxRestrictionsManager.Stub implements
         CarServiceBase {
@@ -57,55 +86,186 @@
     private static final int MAX_TRANSITION_LOG_SIZE = 20;
     private static final int PROPERTY_UPDATE_RATE = 5; // Update rate in Hz
     private static final float SPEED_NOT_AVAILABLE = -1.0F;
+
+    @VisibleForTesting
+    /* package */ static final String CONFIG_FILENAME_PRODUCTION = "prod_config.json";
+    @VisibleForTesting
+    /* package */ static final String CONFIG_FILENAME_STAGED = "staged_config.json";
+
     private final Context mContext;
     private final CarDrivingStateService mDrivingStateService;
     private final CarPropertyService mCarPropertyService;
-    private final CarUxRestrictionsServiceHelper mHelper;
+    private final CarUserManagerHelper mCarUserManagerHelper;
     // List of clients listening to UX restriction events.
     private final List<UxRestrictionsClient> mUxRClients = new ArrayList<>();
+    private CarUxRestrictionsConfiguration mCarUxRestrictionsConfiguration;
     private CarUxRestrictions mCurrentUxRestrictions;
     private float mCurrentMovingSpeed;
-    private boolean mFallbackToDefaults;
     // Flag to disable broadcasting UXR changes - for development purposes
     @GuardedBy("this")
     private boolean mUxRChangeBroadcastEnabled = true;
     // For dumpsys logging
     private final LinkedList<Utils.TransitionLog> mTransitionLogs = new LinkedList<>();
 
+    // When UXR service boots up the context does not have access to storage yet, so it
+    // will likely read configuration from XML resource. Register to receive broadcast to
+    // attempt to read saved configuration when it becomes available.
+    private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            String action = intent.getAction();
+            if (Intent.ACTION_LOCKED_BOOT_COMPLETED.equals(action)) {
+                // If the system user is not headless, then we can read config as soon as the
+                // system has completed booting.
+                if (!mCarUserManagerHelper.isHeadlessSystemUser()) {
+                    logd("not headless on boot complete");
+                    PendingResult pendingResult = goAsync();
+                    LoadRestrictionsTask task = new LoadRestrictionsTask(pendingResult);
+                    task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+                }
+            } else if (Intent.ACTION_USER_SWITCHED.equals(action)) {
+                int userHandle = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, -1);
+                logd("USER_SWITCHED: " + userHandle);
+                if (mCarUserManagerHelper.isHeadlessSystemUser()
+                        && userHandle > UserHandle.USER_SYSTEM) {
+                    PendingResult pendingResult = goAsync();
+                    LoadRestrictionsTask task = new LoadRestrictionsTask(pendingResult);
+                    task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+                }
+            }
+        }
+    };
+
+    private class LoadRestrictionsTask extends AsyncTask<Void, Void, Void> {
+        private final BroadcastReceiver.PendingResult mPendingResult;
+
+        private LoadRestrictionsTask(BroadcastReceiver.PendingResult pendingResult) {
+            mPendingResult = pendingResult;
+        }
+
+        @Override
+        protected Void doInBackground(Void... params) {
+            mCarUxRestrictionsConfiguration = loadConfig();
+            handleDispatchUxRestrictions(mDrivingStateService.getCurrentDrivingState().eventValue,
+                    getCurrentSpeed());
+            return null;
+        }
+
+        @Override
+        protected void onPostExecute(Void result) {
+            super.onPostExecute(result);
+            mPendingResult.finish();
+        }
+    }
 
     public CarUxRestrictionsManagerService(Context context, CarDrivingStateService drvService,
-            CarPropertyService propertyService) {
+            CarPropertyService propertyService, CarUserManagerHelper carUserManagerHelper) {
         mContext = context;
         mDrivingStateService = drvService;
         mCarPropertyService = propertyService;
-        mHelper = new CarUxRestrictionsServiceHelper(mContext, R.xml.car_ux_restrictions_map);
+        mCarUserManagerHelper = carUserManagerHelper;
+        // NOTE: during boot phase context cannot access file system so we most likely will
+        // use XML config. If prod config is set, it will be loaded in broadcast receiver.
+        mCarUxRestrictionsConfiguration = loadConfig();
         // Unrestricted until driving state information is received. During boot up, we don't want
         // everything to be blocked until data is available from CarPropertyManager.  If we start
         // driving and we don't get speed or gear information, we have bigger problems.
-        mCurrentUxRestrictions = mHelper.createUxRestrictionsEvent(false,
-                CarUxRestrictions.UX_RESTRICTIONS_BASELINE);
+        mCurrentUxRestrictions = new CarUxRestrictions.Builder(/* reqOpt= */ false,
+                CarUxRestrictions.UX_RESTRICTIONS_BASELINE, SystemClock.elapsedRealtimeNanos())
+                .build();
     }
 
     @Override
     public synchronized void init() {
-        try {
-            if (!mHelper.loadUxRestrictionsFromXml()) {
-                Log.e(TAG, "Error reading Ux Restrictions Mapping. Falling back to defaults");
-                mFallbackToDefaults = true;
-            }
-        } catch (IOException | XmlPullParserException e) {
-            Log.e(TAG, "Exception reading UX restrictions XML mapping", e);
-            mFallbackToDefaults = true;
-        }
         // subscribe to driving State
         mDrivingStateService.registerDrivingStateChangeListener(
                 mICarDrivingStateChangeEventListener);
         // subscribe to property service for speed
         mCarPropertyService.registerListener(VehicleProperty.PERF_VEHICLE_SPEED,
                 PROPERTY_UPDATE_RATE, mICarPropertyEventListener);
+        registerReceiverToLoadConfig();
         initializeUxRestrictions();
     }
 
+    private void registerReceiverToLoadConfig() {
+        IntentFilter filter = new IntentFilter();
+        filter.addAction(Intent.ACTION_USER_SWITCHED);
+        filter.addAction(Intent.ACTION_LOCKED_BOOT_COMPLETED);
+        mContext.registerReceiver(mBroadcastReceiver, filter);
+    }
+
+    @Override
+    public CarUxRestrictionsConfiguration getConfig() {
+        return mCarUxRestrictionsConfiguration;
+    }
+
+    /**
+     * Loads a UX restrictions configuration and returns it.
+     * <p>Reads config from the following sources in order:
+     * <ol>
+     * <li>saved config set by
+     * {@link #saveUxRestrictionsConfigurationForNextBoot(CarUxRestrictionsConfiguration)};
+     * <li>XML resource config from {@code R.xml.car_ux_restrictions_map};
+     * <li>hardcoded default config.
+     * </ol>
+     */
+    @VisibleForTesting
+    /* package */ synchronized CarUxRestrictionsConfiguration loadConfig() {
+        promoteStagedConfig();
+
+        CarUxRestrictionsConfiguration config = null;
+        // Production config, if available, is the first choice.
+        File prodConfig = mContext.getFileStreamPath(CONFIG_FILENAME_PRODUCTION);
+        if (prodConfig.exists()) {
+            logd("Attempting to read production config");
+            config = readPersistedConfig(prodConfig);
+            if (config != null) {
+                return config;
+            }
+        }
+
+        // XML config is the second choice.
+        logd("Attempting to read config from XML resource");
+        config = readXmlConfig();
+        if (config != null) {
+            return config;
+        }
+
+        // This should rarely happen.
+        Log.w(TAG, "Creating default config");
+        return createDefaultConfig();
+    }
+
+    @Nullable
+    private CarUxRestrictionsConfiguration readXmlConfig() {
+        try {
+            return CarUxRestrictionsConfigurationXmlParser.parse(mContext,
+                    R.xml.car_ux_restrictions_map);
+        } catch (IOException | XmlPullParserException e) {
+            Log.e(TAG, "Could not read config from XML resource", e);
+        }
+        return null;
+    }
+
+    private void promoteStagedConfig() {
+        Path stagedConfig = mContext.getFileStreamPath(CONFIG_FILENAME_STAGED).toPath();
+
+        CarDrivingStateEvent currentDrivingStateEvent =
+                mDrivingStateService.getCurrentDrivingState();
+        // Only promote staged config when car is parked.
+        if (currentDrivingStateEvent != null
+                && currentDrivingStateEvent.eventValue == CarDrivingStateEvent.DRIVING_STATE_PARKED
+                && Files.exists(stagedConfig)) {
+            Path prod = mContext.getFileStreamPath(CONFIG_FILENAME_PRODUCTION).toPath();
+            try {
+                logd("Attempting to promote stage config");
+                Files.move(stagedConfig, prod, REPLACE_EXISTING);
+            } catch (IOException e) {
+                Log.e(TAG, "Could not promote state config", e);
+            }
+        }
+    }
+
     // Update current restrictions by getting the current driving state and speed.
     private void initializeUxRestrictions() {
         CarDrivingStateEvent currentDrivingStateEvent =
@@ -159,9 +319,7 @@
     public synchronized void registerUxRestrictionsChangeListener(
             ICarUxRestrictionsChangeListener listener) {
         if (listener == null) {
-            if (DBG) {
-                Log.e(TAG, "registerUxRestrictionsChangeListener(): listener null");
-            }
+            Log.e(TAG, "registerUxRestrictionsChangeListener(): listener null");
             throw new IllegalArgumentException("Listener is null");
         }
         // If a new client is registering, create a new DrivingStateClient and add it to the list
@@ -232,6 +390,68 @@
         return mCurrentUxRestrictions;
     }
 
+    @Override
+    public synchronized boolean saveUxRestrictionsConfigurationForNextBoot(
+            CarUxRestrictionsConfiguration config) {
+        ICarImpl.assertPermission(mContext, Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION);
+        return persistConfig(config, CONFIG_FILENAME_STAGED);
+    }
+
+    @Override
+    @Nullable
+    public CarUxRestrictionsConfiguration getStagedConfig() {
+        File stagedConfig = mContext.getFileStreamPath(CONFIG_FILENAME_STAGED);
+        if (stagedConfig.exists()) {
+            logd("Attempting to read staged config");
+            return readPersistedConfig(stagedConfig);
+        } else {
+            return null;
+        }
+    }
+
+    /**
+     * Writes configuration into the specified file.
+     *
+     * IO access on file is not thread safe. Caller should ensure threading protection.
+     */
+    private boolean persistConfig(CarUxRestrictionsConfiguration config, String filename) {
+        AtomicFile stagedFile = new AtomicFile(mContext.getFileStreamPath(filename));
+        FileOutputStream fos;
+        try {
+            fos = stagedFile.startWrite();
+        } catch (IOException e) {
+            Log.e(TAG, "Could not open file to persist config", e);
+            return false;
+        }
+        try (JsonWriter jsonWriter = new JsonWriter(
+                new OutputStreamWriter(fos, StandardCharsets.UTF_8))) {
+            config.writeJson(jsonWriter);
+        } catch (IOException e) {
+            Log.e(TAG, "Could not persist config", e);
+            stagedFile.failWrite(fos);
+            return false;
+        }
+        stagedFile.finishWrite(fos);
+        return true;
+    }
+
+    @Nullable
+    private CarUxRestrictionsConfiguration readPersistedConfig(File file) {
+        if (!file.exists()) {
+            Log.e(TAG, "Could not find config file: " + file.getName());
+            return null;
+        }
+
+        AtomicFile config = new AtomicFile(file);
+        try (JsonReader reader = new JsonReader(
+                new InputStreamReader(config.openRead(), StandardCharsets.UTF_8))) {
+            return CarUxRestrictionsConfiguration.readJson(reader);
+        } catch (IOException e) {
+            Log.e(TAG, "Could not read persisted config file " + file.getName(), e);
+        }
+        return null;
+    }
+
     /**
      * Enable/disable UX restrictions change broadcast blocking.
      * Setting this to true will stop broadcasts of UX restriction change to listeners.
@@ -284,9 +504,7 @@
 
         @Override
         public void binderDied() {
-            if (DBG) {
-                Log.d(TAG, "Binder died " + listenerBinder);
-            }
+            logd("Binder died " + listenerBinder);
             listenerBinder.unlinkToDeath(this, 0);
             synchronized (CarUxRestrictionsManagerService.this) {
                 mUxRClients.remove(this);
@@ -315,9 +533,7 @@
             try {
                 listener.onUxRestrictionsChanged(event);
             } catch (RemoteException e) {
-                if (DBG) {
-                    Log.d(TAG, "Dispatch to listener failed");
-                }
+                Log.e(TAG, "Dispatch to listener failed", e);
             }
         }
     }
@@ -330,7 +546,7 @@
         if (isDebugBuild()) {
             writer.println("mUxRChangeBroadcastEnabled? " + mUxRChangeBroadcastEnabled);
         }
-        mHelper.dump(writer);
+        mCarUxRestrictionsConfiguration.dump(writer);
         writer.println("UX Restriction change log:");
         for (Utils.TransitionLog tlog : mTransitionLogs) {
             writer.println(tlog);
@@ -345,9 +561,7 @@
             new ICarDrivingStateChangeListener.Stub() {
                 @Override
                 public void onDrivingStateChanged(CarDrivingStateEvent event) {
-                    if (DBG) {
-                        Log.d(TAG, "Driving State Changed:" + event.eventValue);
-                    }
+                    logd("Driving State Changed:" + event.eventValue);
                     handleDrivingStateEvent(event);
                 }
             };
@@ -370,9 +584,7 @@
                 || drivingState == CarDrivingStateEvent.DRIVING_STATE_UNKNOWN) {
             // If speed is unavailable, but the driving state is parked or unknown, it can still be
             // handled.
-            if (DBG) {
-                Log.d(TAG, "Speed null when driving state is: " + drivingState);
-            }
+            logd("Speed null when driving state is: " + drivingState);
             mCurrentMovingSpeed = 0;
         } else {
             // If we get here with driving state != parked or unknown && speed == null,
@@ -430,14 +642,8 @@
             return;
         }
 
-        CarUxRestrictions uxRestrictions;
-        // Get UX restrictions from the parsed configuration XML or fall back to defaults if not
-        // available.
-        if (mFallbackToDefaults) {
-            uxRestrictions = getDefaultRestrictions(currentDrivingState);
-        } else {
-            uxRestrictions = mHelper.getUxRestrictions(currentDrivingState, speed);
-        }
+        CarUxRestrictions uxRestrictions =
+                mCarUxRestrictionsConfiguration.getUxRestrictions(currentDrivingState, speed);
 
         if (DBG) {
             Log.d(TAG, String.format("DO old->new: %b -> %b",
@@ -464,31 +670,23 @@
                 extraInfo.toString());
 
         mCurrentUxRestrictions = uxRestrictions;
-        if (DBG) {
-            Log.d(TAG, "dispatching to " + mUxRClients.size() + " clients");
-        }
+        logd("dispatching to " + mUxRClients.size() + " clients");
         for (UxRestrictionsClient client : mUxRClients) {
             client.dispatchEventToClients(uxRestrictions);
         }
     }
 
-    private CarUxRestrictions getDefaultRestrictions(@CarDrivingState int drivingState) {
-        int restrictions;
-        boolean requiresOpt = false;
-        switch (drivingState) {
-            case CarDrivingStateEvent.DRIVING_STATE_PARKED:
-                restrictions = CarUxRestrictions.UX_RESTRICTIONS_BASELINE;
-                break;
-            case CarDrivingStateEvent.DRIVING_STATE_IDLING:
-                restrictions = CarUxRestrictions.UX_RESTRICTIONS_BASELINE;
-                requiresOpt = false;
-                break;
-            case CarDrivingStateEvent.DRIVING_STATE_MOVING:
-            default:
-                restrictions = CarUxRestrictions.UX_RESTRICTIONS_FULLY_RESTRICTED;
-                requiresOpt = true;
-        }
-        return mHelper.createUxRestrictionsEvent(requiresOpt, restrictions);
+    CarUxRestrictionsConfiguration createDefaultConfig() {
+        return new CarUxRestrictionsConfiguration.Builder()
+                .setUxRestrictions(CarDrivingStateEvent.DRIVING_STATE_PARKED,
+                        false, CarUxRestrictions.UX_RESTRICTIONS_BASELINE)
+                .setUxRestrictions(CarDrivingStateEvent.DRIVING_STATE_IDLING,
+                        false, CarUxRestrictions.UX_RESTRICTIONS_BASELINE)
+                .setUxRestrictions(CarDrivingStateEvent.DRIVING_STATE_MOVING,
+                        true, CarUxRestrictions.UX_RESTRICTIONS_FULLY_RESTRICTED)
+                .setUxRestrictions(CarDrivingStateEvent.DRIVING_STATE_UNKNOWN,
+                        true, CarUxRestrictions.UX_RESTRICTIONS_FULLY_RESTRICTED)
+                .build();
     }
 
     private void addTransitionLog(String name, int from, int to, long timestamp, String extra) {
@@ -500,4 +698,9 @@
         mTransitionLogs.add(tLog);
     }
 
+    private static void logd(String msg) {
+        if (DBG) {
+            Log.d(TAG, msg);
+        }
+    }
 }
diff --git a/service/src/com/android/car/ICarImpl.java b/service/src/com/android/car/ICarImpl.java
index 736ffc8..e02c65c 100644
--- a/service/src/com/android/car/ICarImpl.java
+++ b/service/src/com/android/car/ICarImpl.java
@@ -42,7 +42,9 @@
 import com.android.car.internal.FeatureConfiguration;
 import com.android.car.pm.CarPackageManagerService;
 import com.android.car.systeminterface.SystemInterface;
+import com.android.car.trust.CarTrustAgentEnrollmentService;
 import com.android.car.user.CarUserService;
+import com.android.car.vms.VmsClientManager;
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.car.ICarServiceHelper;
 
@@ -83,11 +85,12 @@
     private final CarDiagnosticService mCarDiagnosticService;
     private final CarStorageMonitoringService mCarStorageMonitoringService;
     private final CarConfigurationService mCarConfigurationService;
-
+    private final CarTrustAgentEnrollmentService mCarTrustAgentEnrollmentService;
     private final CarUserManagerHelper mUserManagerHelper;
-    private CarUserService mCarUserService;
-    private VmsSubscriberService mVmsSubscriberService;
-    private VmsPublisherService mVmsPublisherService;
+    private final CarUserService mCarUserService;
+    private final VmsClientManager mVmsClientManager;
+    private final VmsSubscriberService mVmsSubscriberService;
+    private final VmsPublisherService mVmsPublisherService;
 
     private final CarServiceBase[] mAllServices;
 
@@ -111,18 +114,24 @@
         mSystemInterface = systemInterface;
         mHal = new VehicleHal(vehicle);
         mVehicleInterfaceName = vehicleInterfaceName;
+        mUserManagerHelper = new CarUserManagerHelper(serviceContext);
+        mCarUserService = new CarUserService(serviceContext, mUserManagerHelper);
         mSystemActivityMonitoringService = new SystemActivityMonitoringService(serviceContext);
         mCarPowerManagementService = new CarPowerManagementService(mContext, mHal.getPowerHal(),
                 systemInterface);
         mCarPropertyService = new CarPropertyService(serviceContext, mHal.getPropertyHal());
         mCarDrivingStateService = new CarDrivingStateService(serviceContext, mCarPropertyService);
         mCarUXRestrictionsService = new CarUxRestrictionsManagerService(serviceContext,
-                mCarDrivingStateService, mCarPropertyService);
+                mCarDrivingStateService, mCarPropertyService, mUserManagerHelper);
         mCarPackageManagerService = new CarPackageManagerService(serviceContext,
                 mCarUXRestrictionsService,
                 mSystemActivityMonitoringService);
+        mPerUserCarServiceHelper = new PerUserCarServiceHelper(serviceContext);
+        mCarBluetoothService = new CarBluetoothService(serviceContext, mCarPropertyService,
+                mPerUserCarServiceHelper, mCarUXRestrictionsService);
         mCarInputService = new CarInputService(serviceContext, mHal.getInputHal());
-        mCarProjectionService = new CarProjectionService(serviceContext, mCarInputService);
+        mCarProjectionService = new CarProjectionService(
+                serviceContext, mCarInputService, mCarBluetoothService);
         mGarageModeService = new GarageModeService(mContext);
         mAppFocusService = new AppFocusService(serviceContext, mSystemActivityMonitoringService);
         mCarAudioService = new CarAudioService(serviceContext);
@@ -131,22 +140,24 @@
                 mAppFocusService, mCarInputService);
         mSystemStateControllerService = new SystemStateControllerService(
                 serviceContext, mCarAudioService, this);
-        mPerUserCarServiceHelper = new PerUserCarServiceHelper(serviceContext);
-        mCarBluetoothService = new CarBluetoothService(serviceContext, mCarPropertyService,
-                mPerUserCarServiceHelper, mCarUXRestrictionsService);
+        mVmsClientManager = new VmsClientManager(serviceContext, mUserManagerHelper);
         mVmsSubscriberService = new VmsSubscriberService(serviceContext, mHal.getVmsHal());
-        mVmsPublisherService = new VmsPublisherService(serviceContext, mHal.getVmsHal());
+        mVmsPublisherService = new VmsPublisherService(serviceContext, mVmsClientManager,
+                mHal.getVmsHal());
         mCarDiagnosticService = new CarDiagnosticService(serviceContext, mHal.getDiagnosticHal());
         mCarStorageMonitoringService = new CarStorageMonitoringService(serviceContext,
                 systemInterface);
         mCarConfigurationService =
                 new CarConfigurationService(serviceContext, new JsonReaderImpl());
-        mUserManagerHelper = new CarUserManagerHelper(serviceContext);
         mCarLocationService = new CarLocationService(
                 mContext, mCarPropertyService, mUserManagerHelper);
+        mCarTrustAgentEnrollmentService = new CarTrustAgentEnrollmentService(serviceContext);
+
+        CarLocalServices.addService(CarUserService.class, mCarUserService);
 
         // Be careful with order. Service depending on other service should be inited later.
         List<CarServiceBase> allServices = new ArrayList<>();
+        allServices.add(mCarUserService);
         allServices.add(mSystemActivityMonitoringService);
         allServices.add(mCarPowerManagementService);
         allServices.add(mCarPropertyService);
@@ -159,18 +170,17 @@
         allServices.add(mCarAudioService);
         allServices.add(mCarNightService);
         allServices.add(mInstrumentClusterService);
-        allServices.add(mCarProjectionService);
         allServices.add(mSystemStateControllerService);
-        allServices.add(mCarBluetoothService);
-        allServices.add(mCarDiagnosticService);
         allServices.add(mPerUserCarServiceHelper);
+        allServices.add(mCarBluetoothService);
+        allServices.add(mCarProjectionService);
+        allServices.add(mCarDiagnosticService);
         allServices.add(mCarStorageMonitoringService);
         allServices.add(mCarConfigurationService);
+        allServices.add(mVmsClientManager);
         allServices.add(mVmsSubscriberService);
         allServices.add(mVmsPublisherService);
-        if (mUserManagerHelper.isHeadlessSystemUser()) {
-            allServices.add(new CarUserService(serviceContext, mUserManagerHelper));
-        }
+        allServices.add(mCarTrustAgentEnrollmentService);
         allServices.add(mCarLocationService);
         mAllServices = allServices.toArray(new CarServiceBase[allServices.size()]);
     }
@@ -194,6 +204,7 @@
             mAllServices[i].release();
         }
         mHal.release();
+        CarLocalServices.removeAllServices();
     }
 
     void vehicleHalReconnected(IVehicle vehicle) {
@@ -216,6 +227,15 @@
     }
 
     @Override
+    public void setUserLockStatus(int userHandle, int unlocked) {
+        int uid = Binder.getCallingUid();
+        if (uid != Process.SYSTEM_UID) {
+            throw new SecurityException("Only allowed from system");
+        }
+        mCarUserService.setUserLockStatus(userHandle, unlocked == 1);
+    }
+
+    @Override
     public IBinder getCarService(String serviceName) {
         switch (serviceName) {
             case Car.AUDIO_SERVICE:
@@ -272,6 +292,9 @@
                 return mCarUXRestrictionsService;
             case Car.CAR_CONFIGURATION_SERVICE:
                 return mCarConfigurationService;
+            case Car.CAR_TRUST_AGENT_ENROLLMENT_SERVICE:
+                assertTrustAgentEnrollmentPermission(mContext);
+                return mCarTrustAgentEnrollmentService;
             default:
                 Log.w(CarLog.TAG_SERVICE, "getCarService for unknown service:" + serviceName);
                 return null;
@@ -334,6 +357,14 @@
         assertPermission(context, Car.PERMISSION_VMS_SUBSCRIBER);
     }
 
+    /**
+     * Ensures the caller has the permission to enroll a Trust Agent.
+     * @param context
+     */
+    public static void assertTrustAgentEnrollmentPermission(Context context) {
+        assertPermission(context, Car.PERMISSION_CAR_ENROLL_TRUST);
+    }
+
     public static void assertPermission(Context context, String permission) {
         if (context.checkCallingOrSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) {
             throw new SecurityException("requires " + permission);
diff --git a/service/src/com/android/car/SetMultimap.java b/service/src/com/android/car/SetMultimap.java
new file mode 100644
index 0000000..48e8739
--- /dev/null
+++ b/service/src/com/android/car/SetMultimap.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2019 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.car;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * A simple implementation of a multimap that maps keys to sets of values.
+ *
+ * This class is (and should remain) drop-in replaceable with Guava's SetMultimap.
+ *
+ * @param <K> The type of the keys in the map.
+ * @param <V> The type of the values in the map.
+ */
+public class SetMultimap<K, V> {
+    private Map<K, Set<V>> mMap;
+
+    /** Creates a new {@link #SetMultimap}. */
+    public SetMultimap() {
+        mMap = new HashMap<>();
+    }
+
+    /** Gets the set of values associated with a given key. */
+    public Set<V> get(K key) {
+        return Collections.unmodifiableSet(mMap.getOrDefault(key, Collections.emptySet()));
+    }
+
+    /** Adds a value to the set associated with a key. */
+    public boolean put(K key, V value) {
+        return mMap.computeIfAbsent(key, k -> new HashSet<>()).add(value);
+    }
+
+    /** Checks if the multimap contains the given key and value. */
+    public boolean containsEntry(K key, V value) {
+        Set<V> set = mMap.get(key);
+        return set != null && set.contains(value);
+    }
+
+    /** Removes the given value from the set of the given key. */
+    public boolean remove(K key, V value) {
+        Set<V> set = mMap.get(key);
+        if (set == null) {
+            return false;
+        }
+
+        boolean removed = set.remove(value);
+        if (set.isEmpty()) {
+            mMap.remove(key);
+        }
+        return removed;
+    }
+
+    /** Clears all entries in the map. */
+    public void clear() {
+        mMap.clear();
+    }
+
+    /** Gets the set of keys stored in the map. */
+    public Set<K> keySet() {
+        return Collections.unmodifiableSet(mMap.keySet());
+    }
+}
diff --git a/service/src/com/android/car/VmsPublisherService.java b/service/src/com/android/car/VmsPublisherService.java
index 9ffecf0..6bc8d3e 100644
--- a/service/src/com/android/car/VmsPublisherService.java
+++ b/service/src/com/android/car/VmsPublisherService.java
@@ -22,26 +22,21 @@
 import android.car.vms.VmsLayer;
 import android.car.vms.VmsLayersOffering;
 import android.car.vms.VmsSubscriptionState;
-import android.content.BroadcastReceiver;
-import android.content.ComponentName;
 import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.ServiceConnection;
 import android.os.Binder;
 import android.os.Handler;
 import android.os.IBinder;
 import android.os.Message;
 import android.os.RemoteException;
-import android.os.UserHandle;
-import android.text.TextUtils;
 import android.util.ArrayMap;
 import android.util.Log;
 
 import com.android.car.hal.VmsHalService;
 import com.android.car.hal.VmsHalService.VmsHalPublisherListener;
+import com.android.car.vms.VmsClientManager;
 
 import java.io.PrintWriter;
+import java.util.Collections;
 import java.util.Map;
 import java.util.Set;
 
@@ -57,94 +52,40 @@
     private static final int MSG_HAL_SUBSCRIPTION_CHANGED = 1;
 
     private final Context mContext;
+    private final VmsClientManager mClientManager;
+    private final VmsListener mClientListener = new VmsListener();
     private final VmsHalService mHal;
-    private final Map<String, PublisherConnection> mPublisherConnectionMap = new ArrayMap<>();
-    private final Map<String, IVmsPublisherClient> mPublisherMap = new ArrayMap<>();
-    private final Handler mHandler = new EventHandler();
     private final VmsHalPublisherListener mHalPublisherListener;
+    private final Map<String, IVmsPublisherClient> mPublisherMap = Collections.synchronizedMap(
+            new ArrayMap<>());
+    private final Handler mHandler = new EventHandler();
 
-    private BroadcastReceiver mBootCompleteReceiver;
-
-    public VmsPublisherService(Context context, VmsHalService hal) {
+    public VmsPublisherService(Context context, VmsClientManager clientManager, VmsHalService hal) {
         mContext = context;
+        mClientManager = clientManager;
         mHal = hal;
-
         mHalPublisherListener = subscriptionState -> mHandler.sendMessage(
                 mHandler.obtainMessage(MSG_HAL_SUBSCRIPTION_CHANGED, subscriptionState));
     }
 
-    // Implements CarServiceBase interface.
     @Override
     public void init() {
+        mClientManager.registerConnectionListener(mClientListener);
         mHal.addPublisherListener(mHalPublisherListener);
-
-        if (isTestEnvironment()) {
-            Log.d(TAG, "Running under test environment");
-            bindToAllPublishers();
-        } else {
-            mBootCompleteReceiver = new BroadcastReceiver() {
-                @Override
-                public void onReceive(Context context, Intent intent) {
-                    if (Intent.ACTION_LOCKED_BOOT_COMPLETED.equals(intent.getAction())) {
-                        onLockedBootCompleted();
-                    } else {
-                        Log.e(TAG, "Unexpected action received: " + intent);
-                    }
-                }
-            };
-
-            mContext.registerReceiver(mBootCompleteReceiver,
-                    new IntentFilter(Intent.ACTION_LOCKED_BOOT_COMPLETED));
-        }
-        // Signal to publishers that the PublisherService is ready.
         mHal.signalPublisherServiceIsReady();
     }
 
-    private void bindToAllPublishers() {
-        String[] publisherNames = mContext.getResources().getStringArray(
-                R.array.vmsPublisherClients);
-        if (DBG) Log.d(TAG, "Publishers found: " + publisherNames.length);
-
-        for (String publisherName : publisherNames) {
-            if (TextUtils.isEmpty(publisherName)) {
-                Log.e(TAG, "empty publisher name");
-                continue;
-            }
-            ComponentName name = ComponentName.unflattenFromString(publisherName);
-            if (name == null) {
-                Log.e(TAG, "invalid publisher name: " + publisherName);
-                continue;
-            }
-
-            if (!mContext.getPackageManager().isPackageAvailable(name.getPackageName())) {
-                Log.w(TAG, "VMS publisher not installed: " + publisherName);
-                continue;
-            }
-
-            bind(name);
-        }
-    }
-
     @Override
     public void release() {
-        if (mBootCompleteReceiver != null) {
-            mContext.unregisterReceiver(mBootCompleteReceiver);
-            mBootCompleteReceiver = null;
-        }
+        mClientManager.unregisterConnectionListener(mClientListener);
         mHal.removePublisherListener(mHalPublisherListener);
-
-        for (PublisherConnection connection : mPublisherConnectionMap.values()) {
-            mContext.unbindService(connection);
-        }
-        mPublisherConnectionMap.clear();
         mPublisherMap.clear();
     }
 
     @Override
     public void dump(PrintWriter writer) {
         writer.println("*" + getClass().getSimpleName() + "*");
-        writer.println("mPublisherMap:" + mPublisherMap);
-        writer.println("mPublisherConnectionMap:" + mPublisherConnectionMap);
+        writer.println("mPublisherMap:" + mPublisherMap.keySet());
     }
 
     /* Called in arbitrary binder thread */
@@ -199,12 +140,6 @@
         return mHal.getPublisherId(publisherInfo);
     }
 
-    private void onLockedBootCompleted() {
-        if (DBG) Log.i(TAG, "onLockedBootCompleted");
-
-        bindToAllPublishers();
-    }
-
     /**
      * This method is only invoked by VmsHalService.notifyPublishers which is synchronized.
      * Therefore this method only sees a non-decreasing sequence.
@@ -222,110 +157,30 @@
         }
     }
 
-    /**
-     * Tries to bind to a publisher.
-     *
-     * @param name publisher component name (e.g. android.car.vms.logger/.LoggingService).
-     */
-    private void bind(ComponentName name) {
-        String publisherName = name.flattenToString();
-        if (DBG) {
-            Log.d(TAG, "binding to: " + publisherName);
-        }
-
-        if (mPublisherConnectionMap.containsKey(publisherName)) {
-            // Already registered, nothing to do.
-            return;
-        }
-        Intent intent = new Intent();
-        intent.setComponent(name);
-        PublisherConnection connection = new PublisherConnection(name);
-        if (mContext.bindServiceAsUser(intent, connection,
-                Context.BIND_AUTO_CREATE, UserHandle.SYSTEM)) {
-            mPublisherConnectionMap.put(publisherName, connection);
-        } else {
-            Log.e(TAG, "unable to bind to: " + publisherName);
-        }
-    }
-
-    /**
-     * Removes the publisher and associated connection.
-     *
-     * @param name publisher component name (e.g. android.car.vms.Logger).
-     */
-    private void unbind(ComponentName name) {
-        String publisherName = name.flattenToString();
-        if (DBG) {
-            Log.d(TAG, "unbinding from: " + publisherName);
-        }
-
-        boolean found = mPublisherMap.remove(publisherName) != null;
-        if (found) {
-            PublisherConnection connection = mPublisherConnectionMap.get(publisherName);
-            mContext.unbindService(connection);
-            mPublisherConnectionMap.remove(publisherName);
-        } else {
-            Log.e(TAG, "unbind: unknown publisher." + publisherName);
-        }
-    }
-
-    private boolean isTestEnvironment() {
-        // If the context has "test" in it.
-        return mContext.getBasePackageName().contains("test");
-    }
-
-    class PublisherConnection implements ServiceConnection {
-        private final IBinder mToken = new Binder();
-        private final ComponentName mName;
-
-        PublisherConnection(ComponentName name) {
-            mName = name;
-        }
-
-        private final Runnable mBindRunnable = new Runnable() {
-            @Override
-            public void run() {
-                Log.d(TAG, "delayed binding for: " + mName);
-                bind(mName);
-            }
-        };
-
+    private class VmsListener implements VmsClientManager.ConnectionListener {
         /**
-         * Once the service binds to a publisher service, the publisher binder is added to
-         * mPublisherMap
-         * and the publisher is configured to use this service.
+         * Once the manager binds to a publisher client, the client's binder is added to
+         * {@code mPublisherMap} and the client is configured to use this service.
          */
         @Override
-        public void onServiceConnected(ComponentName name, IBinder binder) {
-            if (DBG) {
-                Log.d(TAG, "onServiceConnected, name: " + name + ", binder: " + binder);
-            }
+        public void onClientConnected(String publisherName, IBinder binder) {
+            if (DBG) Log.d(TAG, "onClientConnected: " + publisherName);
             IVmsPublisherClient service = IVmsPublisherClient.Stub.asInterface(binder);
-            mPublisherMap.put(name.flattenToString(), service);
+            mPublisherMap.put(publisherName, service);
             try {
-                service.setVmsPublisherService(mToken, VmsPublisherService.this);
+                service.setVmsPublisherService(new Binder(), VmsPublisherService.this);
             } catch (RemoteException e) {
-                Log.e(TAG, "unable to configure publisher: " + name, e);
+                Log.e(TAG, "unable to configure publisher: " + publisherName, e);
             }
         }
 
         /**
-         * Tries to rebind to the publisher service.
+         * Removes disconnected clients from {@code mPublisherMap}.
          */
         @Override
-        public void onServiceDisconnected(ComponentName name) {
-            String publisherName = name.flattenToString();
-            Log.d(TAG, "onServiceDisconnected, name: " + publisherName);
-
-            int millisecondsToWait = mContext.getResources().getInteger(
-                    com.android.car.R.integer.millisecondsBeforeRebindToVmsPublisher);
-            if (!mName.flattenToString().equals(name.flattenToString())) {
-                throw new IllegalArgumentException(
-                    "Mismatch on publisherConnection. Expected: " + mName + " Got: " + name);
-            }
-            mHandler.postDelayed(mBindRunnable, millisecondsToWait);
-
-            unbind(name);
+        public void onClientDisconnected(String publisherName) {
+            if (DBG) Log.d(TAG, "onClientDisconnected: " + publisherName);
+            mPublisherMap.remove(publisherName);
         }
     }
 
diff --git a/service/src/com/android/car/VmsSubscriberService.java b/service/src/com/android/car/VmsSubscriberService.java
index 213757c..61c7929 100644
--- a/service/src/com/android/car/VmsSubscriberService.java
+++ b/service/src/com/android/car/VmsSubscriberService.java
@@ -143,8 +143,7 @@
                 try {
                     subscriberBinder.linkToDeath(deathRecipient, 0);
                 } catch (RemoteException e) {
-                    Log.e(TAG, "Failed to link death for recipient. ", e);
-                    throw new IllegalStateException(Car.CAR_NOT_CONNECTED_EXCEPTION_MSG);
+                    throw new IllegalStateException("Client already dead", e);
                 }
                 mListenerDeathRecipientMap.put(subscriberBinder, deathRecipient);
                 mSubscriberMap.put(subscriberBinder, subscriber);
diff --git a/service/src/com/android/car/audio/CarAudioDeviceInfo.java b/service/src/com/android/car/audio/CarAudioDeviceInfo.java
index 2e35c56..f45f48e 100644
--- a/service/src/com/android/car/audio/CarAudioDeviceInfo.java
+++ b/service/src/com/android/car/audio/CarAudioDeviceInfo.java
@@ -38,6 +38,26 @@
  */
 /* package */ class CarAudioDeviceInfo {
 
+    /**
+     * Parse device address. Expected format is BUS%d_%s, address, usage hint
+     * @return valid address (from 0 to positive) or -1 for invalid address.
+     */
+    static int parseDeviceAddress(String address) {
+        String[] words = address.split("_");
+        int addressParsed = -1;
+        if (words[0].toLowerCase().startsWith("bus")) {
+            try {
+                addressParsed = Integer.parseInt(words[0].substring(3));
+            } catch (NumberFormatException e) {
+                //ignore
+            }
+        }
+        if (addressParsed < 0) {
+            return -1;
+        }
+        return addressParsed;
+    }
+
     private final AudioDeviceInfo mAudioDeviceInfo;
     private final int mBusNumber;
     private final int mSampleRate;
@@ -143,26 +163,6 @@
         }
     }
 
-    /**
-     * Parse device address. Expected format is BUS%d_%s, address, usage hint
-     * @return valid address (from 0 to positive) or -1 for invalid address.
-     */
-    private int parseDeviceAddress(String address) {
-        String[] words = address.split("_");
-        int addressParsed = -1;
-        if (words[0].toLowerCase().startsWith("bus")) {
-            try {
-                addressParsed = Integer.parseInt(words[0].substring(3));
-            } catch (NumberFormatException e) {
-                //ignore
-            }
-        }
-        if (addressParsed < 0) {
-            return -1;
-        }
-        return addressParsed;
-    }
-
     private int getMaxSampleRate(AudioDeviceInfo info) {
         int[] sampleRates = info.getSampleRates();
         if (sampleRates == null || sampleRates.length == 0) {
@@ -247,12 +247,12 @@
                 + " minGain: " + mMinGain;
     }
 
-    void dump(PrintWriter writer) {
-        writer.printf("Bus Number (%d) / address (%s)\n ",
-                mBusNumber, mAudioDeviceInfo.getAddress());
-        writer.printf("\tsample rate / encoding format / channel count: %d %d %d\n",
-                getSampleRate(), getEncodingFormat(), getChannelCount());
-        writer.printf("\tGain in millibel (min / max / default/ current): %d %d %d %d\n",
-                mMinGain, mMaxGain, mDefaultGain, mCurrentGain);
+    void dump(String indent, PrintWriter writer) {
+        writer.printf("%sCarAudioDeviceInfo Bus(%d: %s)\n ",
+                indent, mBusNumber, mAudioDeviceInfo.getAddress());
+        writer.printf("%s\tsample rate / encoding format / channel count: %d %d %d\n",
+                indent, getSampleRate(), getEncodingFormat(), getChannelCount());
+        writer.printf("%s\tGain values (min / max / default/ current): %d %d %d %d\n",
+                indent, mMinGain, mMaxGain, mDefaultGain, mCurrentGain);
     }
 }
diff --git a/service/src/com/android/car/audio/CarAudioDynamicRouting.java b/service/src/com/android/car/audio/CarAudioDynamicRouting.java
new file mode 100644
index 0000000..73b810c
--- /dev/null
+++ b/service/src/com/android/car/audio/CarAudioDynamicRouting.java
@@ -0,0 +1,162 @@
+/*
+ * Copyright (C) 2018 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.car.audio;
+
+import android.hardware.automotive.audiocontrol.V1_0.ContextNumber;
+import android.media.AudioAttributes;
+import android.media.AudioFormat;
+import android.media.AudioManager;
+import android.media.audiopolicy.AudioMix;
+import android.media.audiopolicy.AudioMixingRule;
+import android.media.audiopolicy.AudioPolicy;
+import android.util.Log;
+import android.util.SparseIntArray;
+
+import com.android.car.CarLog;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Builds dynamic audio routing in a car from audio zone configuration.
+ */
+/* package */ class CarAudioDynamicRouting {
+
+    static final int[] CONTEXT_NUMBERS = new int[] {
+            ContextNumber.MUSIC,
+            ContextNumber.NAVIGATION,
+            ContextNumber.VOICE_COMMAND,
+            ContextNumber.CALL_RING,
+            ContextNumber.CALL,
+            ContextNumber.ALARM,
+            ContextNumber.NOTIFICATION,
+            ContextNumber.SYSTEM_SOUND
+    };
+
+    static final SparseIntArray USAGE_TO_CONTEXT = new SparseIntArray();
+
+    static final int DEFAULT_AUDIO_USAGE = AudioAttributes.USAGE_MEDIA;
+
+    // For legacy stream type based volume control.
+    // Values in STREAM_TYPES and STREAM_TYPE_USAGES should be aligned.
+    static final int[] STREAM_TYPES = new int[] {
+            AudioManager.STREAM_MUSIC,
+            AudioManager.STREAM_ALARM,
+            AudioManager.STREAM_RING
+    };
+    static final int[] STREAM_TYPE_USAGES = new int[] {
+            AudioAttributes.USAGE_MEDIA,
+            AudioAttributes.USAGE_ALARM,
+            AudioAttributes.USAGE_NOTIFICATION_RINGTONE
+    };
+
+    static {
+        USAGE_TO_CONTEXT.put(AudioAttributes.USAGE_UNKNOWN, ContextNumber.MUSIC);
+        USAGE_TO_CONTEXT.put(AudioAttributes.USAGE_MEDIA, ContextNumber.MUSIC);
+        USAGE_TO_CONTEXT.put(AudioAttributes.USAGE_VOICE_COMMUNICATION, ContextNumber.CALL);
+        USAGE_TO_CONTEXT.put(AudioAttributes.USAGE_VOICE_COMMUNICATION_SIGNALLING,
+                ContextNumber.CALL);
+        USAGE_TO_CONTEXT.put(AudioAttributes.USAGE_ALARM, ContextNumber.ALARM);
+        USAGE_TO_CONTEXT.put(AudioAttributes.USAGE_NOTIFICATION, ContextNumber.NOTIFICATION);
+        USAGE_TO_CONTEXT.put(AudioAttributes.USAGE_NOTIFICATION_RINGTONE, ContextNumber.CALL_RING);
+        USAGE_TO_CONTEXT.put(AudioAttributes.USAGE_NOTIFICATION_COMMUNICATION_REQUEST,
+                ContextNumber.NOTIFICATION);
+        USAGE_TO_CONTEXT.put(AudioAttributes.USAGE_NOTIFICATION_COMMUNICATION_INSTANT,
+                ContextNumber.NOTIFICATION);
+        USAGE_TO_CONTEXT.put(AudioAttributes.USAGE_NOTIFICATION_COMMUNICATION_DELAYED,
+                ContextNumber.NOTIFICATION);
+        USAGE_TO_CONTEXT.put(AudioAttributes.USAGE_NOTIFICATION_EVENT, ContextNumber.NOTIFICATION);
+        USAGE_TO_CONTEXT.put(AudioAttributes.USAGE_ASSISTANCE_ACCESSIBILITY,
+                ContextNumber.VOICE_COMMAND);
+        USAGE_TO_CONTEXT.put(AudioAttributes.USAGE_ASSISTANCE_NAVIGATION_GUIDANCE,
+                ContextNumber.NAVIGATION);
+        USAGE_TO_CONTEXT.put(AudioAttributes.USAGE_ASSISTANCE_SONIFICATION,
+                ContextNumber.SYSTEM_SOUND);
+        USAGE_TO_CONTEXT.put(AudioAttributes.USAGE_GAME, ContextNumber.MUSIC);
+        USAGE_TO_CONTEXT.put(AudioAttributes.USAGE_VIRTUAL_SOURCE, ContextNumber.INVALID);
+        USAGE_TO_CONTEXT.put(AudioAttributes.USAGE_ASSISTANT, ContextNumber.VOICE_COMMAND);
+    }
+
+    private final CarAudioZone[] mCarAudioZones;
+
+    CarAudioDynamicRouting(CarAudioZone[] carAudioZones) {
+        mCarAudioZones = carAudioZones;
+    }
+
+    void setupAudioDynamicRouting(AudioPolicy.Builder builder) {
+        for (CarAudioZone zone : mCarAudioZones) {
+            for (CarVolumeGroup group : zone.getVolumeGroups()) {
+                setupAudioDynamicRoutingForGroup(group, builder);
+            }
+        }
+    }
+
+    /**
+     * Enumerates all physical buses in a given volume group and attach the mixing rules.
+     * @param group {@link CarVolumeGroup} instance to enumerate the buses with
+     * @param builder {@link AudioPolicy.Builder} to attach the mixing rules
+     */
+    private void setupAudioDynamicRoutingForGroup(CarVolumeGroup group,
+            AudioPolicy.Builder builder) {
+        // Note that one can not register audio mix for same bus more than once.
+        for (int busNumber : group.getBusNumbers()) {
+            boolean hasContext = false;
+            CarAudioDeviceInfo info = group.getCarAudioDeviceInfoForBus(busNumber);
+            AudioFormat mixFormat = new AudioFormat.Builder()
+                    .setSampleRate(info.getSampleRate())
+                    .setEncoding(info.getEncodingFormat())
+                    .setChannelMask(info.getChannelCount())
+                    .build();
+            AudioMixingRule.Builder mixingRuleBuilder = new AudioMixingRule.Builder();
+            for (int contextNumber : group.getContextsForBus(busNumber)) {
+                hasContext = true;
+                int[] usages = getUsagesForContext(contextNumber);
+                for (int usage : usages) {
+                    mixingRuleBuilder.addRule(
+                            new AudioAttributes.Builder().setUsage(usage).build(),
+                            AudioMixingRule.RULE_MATCH_ATTRIBUTE_USAGE);
+                }
+                Log.d(CarLog.TAG_AUDIO, "Bus number: " + busNumber
+                        + " contextNumber: " + contextNumber
+                        + " sampleRate: " + info.getSampleRate()
+                        + " channels: " + info.getChannelCount()
+                        + " usages: " + Arrays.toString(usages));
+            }
+            if (hasContext) {
+                // It's a valid case that an audio output bus is defined in
+                // audio_policy_configuration and no context is assigned to it.
+                // In such case, do not build a policy mix with zero rules.
+                AudioMix audioMix = new AudioMix.Builder(mixingRuleBuilder.build())
+                        .setFormat(mixFormat)
+                        .setDevice(info.getAudioDeviceInfo())
+                        .setRouteFlags(AudioMix.ROUTE_FLAG_RENDER)
+                        .build();
+                builder.addMix(audioMix);
+            }
+        }
+    }
+
+    private int[] getUsagesForContext(int contextNumber) {
+        final List<Integer> usages = new ArrayList<>();
+        for (int i = 0; i < CarAudioDynamicRouting.USAGE_TO_CONTEXT.size(); i++) {
+            if (CarAudioDynamicRouting.USAGE_TO_CONTEXT.valueAt(i) == contextNumber) {
+                usages.add(CarAudioDynamicRouting.USAGE_TO_CONTEXT.keyAt(i));
+            }
+        }
+        return usages.stream().mapToInt(i -> i).toArray();
+    }
+}
diff --git a/service/src/com/android/car/audio/CarAudioFocus.java b/service/src/com/android/car/audio/CarAudioFocus.java
new file mode 100644
index 0000000..97f284b
--- /dev/null
+++ b/service/src/com/android/car/audio/CarAudioFocus.java
@@ -0,0 +1,416 @@
+/*
+ * Copyright (C) 2015 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.car.audio;
+
+import android.hardware.automotive.audiocontrol.V1_0.ContextNumber;
+import android.media.AudioAttributes;
+import android.media.AudioFocusInfo;
+import android.media.AudioManager;
+import android.media.audiopolicy.AudioPolicy;
+import android.util.Log;
+
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+
+
+public class CarAudioFocus extends AudioPolicy.AudioPolicyFocusListener {
+
+    private static final String TAG = "CarAudioFocus";
+
+    private final AudioManager  mAudioManager;
+    private CarAudioService     mCarAudioService;   // Dynamically assigned just after construction
+    private AudioPolicy         mAudioPolicy;       // Dynamically assigned just after construction
+
+
+    // Values for the internal interaction matrix we use to make focus decisions
+    private static final int INTERACTION_REJECT     = 0;    // Focus not granted
+    private static final int INTERACTION_EXCLUSIVE  = 1;    // Focus granted, others loose focus
+    private static final int INTERACTION_CONCURRENT = 2;    // Focus granted, others keep focus
+
+    // TODO:  Make this an overlayable resource...
+    //  MUSIC           = 1,        // Music playback
+    //  NAVIGATION      = 2,        // Navigation directions
+    //  VOICE_COMMAND   = 3,        // Voice command session
+    //  CALL_RING       = 4,        // Voice call ringing
+    //  CALL            = 5,        // Voice call
+    //  ALARM           = 6,        // Alarm sound from Android
+    //  NOTIFICATION    = 7,        // Notifications
+    //  SYSTEM_SOUND    = 8,        // User interaction sounds (button clicks, etc)
+    private static int sInteractionMatrix[][] = {
+        // Row selected by playing sound (labels along the right)
+        // Column selected by incoming request (labels along the top)
+        // Cell value is one of INTERACTION_REJECT, INTERACTION_EXCLUSIVE, INTERACTION_CONCURRENT
+        // Invalid, Music, Nav, Voice, Ring, Call, Alarm, Notification, System
+        {  0,       0,     0,   0,     0,    0,    0,     0,            0 }, // Invalid
+        {  0,       1,     2,   1,     1,    1,    1,     2,            2 }, // Music
+        {  0,       2,     2,   1,     2,    1,    2,     2,            2 }, // Nav
+        {  0,       2,     0,   2,     1,    1,    0,     0,            0 }, // Voice
+        {  0,       0,     2,   2,     2,    2,    0,     0,            2 }, // Ring
+        {  0,       0,     2,   0,     2,    2,    2,     2,            0 }, // Context
+        {  0,       2,     2,   1,     1,    1,    2,     2,            2 }, // Alarm
+        {  0,       2,     2,   1,     1,    1,    2,     2,            2 }, // Notification
+        {  0,       2,     2,   1,     1,    1,    2,     2,            2 }, // System
+    };
+
+
+    private class FocusEntry {
+        // Requester info
+        final AudioFocusInfo mAfi;                      // never null
+
+        final int mAudioContext;                        // Which HAL level context does this affect
+        final ArrayList<FocusEntry> mBlockers;          // List of requests that block ours
+
+        FocusEntry(AudioFocusInfo afi,
+                   int context) {
+            mAfi             = afi;
+            mAudioContext    = context;
+            mBlockers        = new ArrayList<FocusEntry>();
+        }
+
+        public String getClientId() {
+            return mAfi.getClientId();
+        }
+
+        public boolean wantsPauseInsteadOfDucking() {
+            return (mAfi.getFlags() & AudioManager.AUDIOFOCUS_FLAG_PAUSES_ON_DUCKABLE_LOSS) != 0;
+        }
+    }
+
+
+    // We keep track of all the focus requesters in this map, with their clientId as the key.
+    // This is used both for focus dispatch and death handling
+    // Note that the clientId reflects the AudioManager instance and listener object (if any)
+    // so that one app can have more than one unique clientId by setting up distinct listeners.
+    // Because the listener gets only LOSS/GAIN messages, this is important for an app to do if
+    // it expects to request focus concurrently for different USAGEs so it knows which USAGE
+    // gained or lost focus at any given moment.  If the SAME listener is used for requests of
+    // different USAGE while the earlier request is still in the focus stack (whether holding
+    // focus or pending), the new request will be REJECTED so as to avoid any confusion about
+    // the meaning of subsequent GAIN/LOSS events (which would continue to apply to the focus
+    // request that was already active or pending).
+    private HashMap<String, FocusEntry> mFocusHolders = new HashMap<String, FocusEntry>();
+    private HashMap<String, FocusEntry> mFocusLosers = new HashMap<String, FocusEntry>();
+
+
+    CarAudioFocus(AudioManager audioManager) {
+        mAudioManager = audioManager;
+    }
+
+
+    // This has to happen after the construction to avoid a chicken and egg problem when setting up
+    // the AudioPolicy which must depend on this object.
+    public void setOwningPolicy(CarAudioService audioService, AudioPolicy parentPolicy) {
+        mCarAudioService = audioService;
+        mAudioPolicy     = parentPolicy;
+    }
+
+
+    // This sends a focus loss message to the targeted requester.
+    private void sendFocusLoss(FocusEntry loser, boolean permanent) {
+        int lossType = (permanent ? AudioManager.AUDIOFOCUS_LOSS :
+                                    AudioManager.AUDIOFOCUS_LOSS_TRANSIENT);
+        Log.i(TAG, "sendFocusLoss to " + loser.getClientId());
+        int result = mAudioManager.dispatchAudioFocusChange(loser.mAfi, lossType, mAudioPolicy);
+        if (result != AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
+            // TODO:  Is this actually an error, or is it okay for an entry in the focus stack
+            // to NOT have a listener?  If that's the case, should we even keep it in the focus
+            // stack?
+            Log.e(TAG, "Failure to signal loss of audio focus with error: " + result);
+        }
+    }
+
+
+    /** @see AudioManager#requestAudioFocus(AudioManager.OnAudioFocusChangeListener, int, int, int) */
+    // Note that we replicate most, but not all of the behaviors of the default MediaFocusControl
+    // engine as of Android P.
+    // Besides the interaction matrix which allows concurrent focus for multiple requestors, which
+    // is the reason for this module, we also treat repeated requests from the same clientId
+    // slightly differently.
+    // If a focus request for the same listener (clientId) is received while that listener is
+    // already in the focus stack, we REJECT it outright unless it is for the same USAGE.
+    // The default audio framework's behavior is to remove the previous entry in the stack (no-op
+    // if the requester is already holding focus).
+    int evaluateFocusRequest(AudioFocusInfo afi) {
+        Log.i(TAG, "Evaluating focus request for client " + afi.getClientId());
+
+        // Is this a request for premanant focus?
+        // AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE -- Means Notifications should be denied
+        // AUDIOFOCUS_GAIN_TRANSIENT -- Means current focus holders should get transient loss
+        // AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK -- Means other can duck (no loss message from us)
+        // NOTE:  We expect that in practice it will be permanent for all media requests and
+        //        transient for everything else, but that isn't currently an enforced requirement.
+        final boolean permanent =
+                (afi.getGainRequest() == AudioManager.AUDIOFOCUS_GAIN);
+        final boolean allowDucking =
+                (afi.getGainRequest() == AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK);
+
+
+        // Convert from audio attributes "usage" to HAL level "context"
+        final int requestedContext = mCarAudioService.getContextForUsage(
+                afi.getAttributes().getUsage());
+
+        // If we happen find an entry that this new request should replace, we'll store it here.
+        FocusEntry deprecatedBlockedEntry = null;
+
+        // Scan all active and pending focus requests.  If any should cause rejection of
+        // this new request, then we're done.  Keep a list of those against whom we're exclusive
+        // so we can update the relationships if/when we are sure we won't get rejected.
+        Log.i(TAG, "Scanning focus holders...");
+        final ArrayList<FocusEntry> losers = new ArrayList<FocusEntry>();
+        for (FocusEntry entry : mFocusHolders.values()) {
+            Log.i(TAG, entry.mAfi.getClientId());
+
+            // If this request is for Notifications and a current focus holder has specified
+            // AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE, then reject the request.
+            // This matches the hardwired behavior in the default audio policy engine which apps
+            // might expect (The interaction matrix doesn't have any provision for dealing with
+            // override flags like this).
+            if ((requestedContext == ContextNumber.NOTIFICATION) &&
+                    (entry.mAfi.getGainRequest() ==
+                            AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE)) {
+                return AudioManager.AUDIOFOCUS_REQUEST_FAILED;
+            }
+
+            // We don't allow sharing listeners (client IDs) between two concurrent requests
+            // (because the app would have no way to know to which request a later event applied)
+            if (afi.getClientId().equals(entry.mAfi.getClientId())) {
+                if (entry.mAudioContext == requestedContext) {
+                    // Trivially accept if this request is a duplicate
+                    Log.i(TAG, "Duplicate request from focus holder is accepted");
+                    return AudioManager.AUDIOFOCUS_REQUEST_GRANTED;
+                } else {
+                    // Trivially reject a request for a different USAGE
+                    Log.i(TAG, "Different request from focus holder is rejected");
+                    return AudioManager.AUDIOFOCUS_REQUEST_FAILED;
+                }
+            }
+
+            // Check the interaction matrix for the relationship between this entry and the request
+            switch (sInteractionMatrix[entry.mAudioContext][requestedContext]) {
+                case INTERACTION_REJECT:
+                    // This request is rejected, so nothing further to do
+                    return AudioManager.AUDIOFOCUS_REQUEST_FAILED;
+                case INTERACTION_EXCLUSIVE:
+                    // The new request will cause this existing entry to lose focus
+                    losers.add(entry);
+                    break;
+                default:
+                    // If ducking isn't allowed by the focus requestor, then everybody else
+                    // must get a LOSS.
+                    // If a focus holder has set the AUDIOFOCUS_FLAG_PAUSES_ON_DUCKABLE_LOSS flag,
+                    // they must get a LOSS message even if ducking would otherwise be allowed.
+                    if ((!allowDucking) ||
+                            (entry.mAfi.getFlags() &
+                                    AudioManager.AUDIOFOCUS_FLAG_PAUSES_ON_DUCKABLE_LOSS) != 0) {
+                        // The new request will cause audio book to lose focus and pause
+                        losers.add(entry);
+                    }
+            }
+        }
+        Log.i(TAG, "Scanning those who've already lost focus...");
+        final ArrayList<FocusEntry> blocked = new ArrayList<FocusEntry>();
+        for (FocusEntry entry : mFocusLosers.values()) {
+            Log.i(TAG, entry.mAfi.getClientId());
+
+            // If this request is for Notifications and a pending focus holder has specified
+            // AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE, then reject the request
+            if ((requestedContext == ContextNumber.NOTIFICATION) &&
+                    (entry.mAfi.getGainRequest() ==
+                            AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE)) {
+                return AudioManager.AUDIOFOCUS_REQUEST_FAILED;
+            }
+
+            // We don't allow sharing listeners (client IDs) between two concurrent requests
+            // (because the app would have no way to know to which request a later event applied)
+            if (afi.getClientId().equals(entry.mAfi.getClientId())) {
+                if (entry.mAudioContext == requestedContext) {
+                    // This is a repeat of a request that is currently blocked.
+                    // Evaluate it as if it were a new request, but note that we should remove
+                    // the old pending request, and move it.
+                    // We do not want to evaluate the new request against itself.
+                    Log.i(TAG, "Duplicate request while waiting is being evaluated");
+                    deprecatedBlockedEntry = entry;
+                    continue;
+                } else {
+                    // Trivially reject a request for a different USAGE
+                    Log.i(TAG, "Different request while waiting is rejected");
+                    return AudioManager.AUDIOFOCUS_REQUEST_FAILED;
+                }
+            }
+
+            // Check the interaction matrix for the relationship between this entry and the request
+            switch (sInteractionMatrix[entry.mAudioContext][requestedContext]) {
+                case INTERACTION_REJECT:
+                    // Even though this entry has currently lost focus, the fact that it is
+                    // waiting to play means we'll reject this new conflicting request.
+                    return AudioManager.AUDIOFOCUS_REQUEST_FAILED;
+                case INTERACTION_EXCLUSIVE:
+                    // The new request is yet another reason this entry cannot regain focus (yet)
+                    blocked.add(entry);
+                    break;
+                default:
+                    // If ducking is not allowed by the requester, or the pending focus holder had
+                    // set the AUDIOFOCUS_FLAG_PAUSES_ON_DUCKABLE_LOSS flag,
+                    // then the pending holder must stay "lost" until this requester goes away.
+                    if ((!allowDucking) || entry.wantsPauseInsteadOfDucking()) {
+                        // The new request is yet another reason this entry cannot regain focus yet
+                        blocked.add(entry);
+                    }
+            }
+        }
+
+
+        // Now that we've decided we'll grant focus, construct our new FocusEntry
+        FocusEntry newEntry = new FocusEntry(afi, requestedContext);
+
+
+        // Now that we're sure we'll accept this request, update any requests which we would
+        // block but are already out of focus but waiting to come back
+        for (FocusEntry entry : blocked) {
+            // If we're out of focus it must be because somebody is blocking us
+            assert !entry.mBlockers.isEmpty();
+
+            if (permanent) {
+                // This entry has now lost focus forever
+                sendFocusLoss(entry, permanent);
+                final FocusEntry deadEntry = mFocusLosers.remove(entry.mAfi.getClientId());
+                assert deadEntry != null;
+            } else {
+                // Note that this new request is yet one more reason we can't (yet) have focus
+                entry.mBlockers.add(newEntry);
+            }
+        }
+
+        // Notify and update any requests which are now losing focus as a result of the new request
+        for (FocusEntry entry : losers) {
+            // If we have focus (but are about to loose it), nobody should be blocking us yet
+            assert entry.mBlockers.isEmpty();
+
+            sendFocusLoss(entry, permanent);
+
+            // The entry no longer holds focus, so take it out of the holders list
+            mFocusHolders.remove(entry.mAfi.getClientId());
+
+            if (!permanent) {
+                // Add ourselves to the list of requests waiting to get focus back and
+                // note why we lost focus so we can tell when it's time to get it back
+                mFocusLosers.put(entry.mAfi.getClientId(), entry);
+                entry.mBlockers.add(newEntry);
+            }
+        }
+
+        // If we encountered a duplicate of this request that was pending, but now we're going to
+        // grant focus, we need to remove the old pending request (without sending a LOSS message).
+        if (deprecatedBlockedEntry != null) {
+            mFocusLosers.remove(deprecatedBlockedEntry.mAfi.getClientId());
+        }
+
+        // Finally, add the request we're granting to the focus holders' list
+        mFocusHolders.put(afi.getClientId(), newEntry);
+
+        Log.i(TAG, "AUDIOFOCUS_REQUEST_GRANTED");
+        return AudioManager.AUDIOFOCUS_REQUEST_GRANTED;
+    }
+
+
+    @Override
+    public synchronized void onAudioFocusRequest(AudioFocusInfo afi, int requestResult) {
+        Log.i(TAG, "onAudioFocusRequest " + afi);
+
+        int response = evaluateFocusRequest(afi);
+
+        // Post our reply for delivery to the original focus requester
+        mAudioManager.setFocusRequestResult(afi, response, mAudioPolicy);
+    }
+
+
+    /**
+     * @see AudioManager#abandonAudioFocus(AudioManager.OnAudioFocusChangeListener, AudioAttributes)
+     * Note that we'll get this call for a focus holder that dies while in the focus stack, so
+     * we don't need to watch for death notifications directly.
+     * */
+    @Override
+    public synchronized void onAudioFocusAbandon(AudioFocusInfo afi) {
+        Log.i(TAG, "onAudioFocusAbandon " + afi);
+
+        // Remove this entry from our active or pending list
+        FocusEntry deadEntry = mFocusHolders.remove(afi.getClientId());
+        if (deadEntry == null) {
+            deadEntry = mFocusLosers.remove(afi.getClientId());
+            if (deadEntry == null) {
+                // Caller is providing an unrecognzied clientId!?
+                Log.w(TAG, "Audio focus abandoned by unrecognized client id: " + afi.getClientId());
+                // This probably means an app double released focused for some reason.  One
+                // harmless possibility is a race between an app being told it lost focus and the
+                // app voluntarily abandoning focus.  More likely the app is just sloppy.  :)
+                // The more nefarious possibility is that the clientId is actually corrupted
+                // somehow, in which case we might have a real focus entry that we're going to fail
+                // to remove. If that were to happen, I'd expect either the app to swallow it
+                // silently, or else take unexpected action (eg: resume playing spontaneously), or
+                // else to see "Failure to signal ..." gain/loss error messages in the log from
+                // this module when a focus change tries to take action on a truly zombie entry.
+                return;
+            }
+        }
+
+        // Remove this entry from the blocking list of any pending requests
+        Iterator<FocusEntry> it = mFocusLosers.values().iterator();
+        while (it.hasNext()) {
+            FocusEntry entry = it.next();
+
+            // Remove the retiring entry from all blocker lists
+            entry.mBlockers.remove(deadEntry);
+
+            // Any entry whose blocking list becomes empty should regain focus
+            if (entry.mBlockers.isEmpty()) {
+                // Pull this entry out of the focus losers list
+                it.remove();
+
+                // Add it back into the focus holders list
+                mFocusHolders.put(entry.getClientId(), entry);
+
+                // Send the focus (re)gain notification
+                int result = mAudioManager.dispatchAudioFocusChange(
+                        entry.mAfi,
+                        entry.mAfi.getGainRequest(),
+                        mAudioPolicy);
+                if (result != AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
+                    // TODO:  Is this actually an error, or is it okay for an entry in the focus
+                    // stack to NOT have a listener?  If that's the case, should we even keep
+                    // it in the focus stack?
+                    Log.e(TAG, "Failure to signal gain of audio focus with error: " + result);
+                }
+            }
+        }
+    }
+
+
+    public synchronized void dump(PrintWriter writer) {
+        writer.println("*CarAudioFocus*");
+
+        writer.println("  Current Focus Holders:");
+        for (String clientId : mFocusHolders.keySet()) {
+            System.out.println(clientId);
+        }
+
+        writer.println("  Transient Focus Losers:");
+        for (String clientId : mFocusLosers.keySet()) {
+            System.out.println(clientId);
+        }
+    }
+}
diff --git a/service/src/com/android/car/audio/CarAudioService.java b/service/src/com/android/car/audio/CarAudioService.java
index ebfe93e..b19fda5 100644
--- a/service/src/com/android/car/audio/CarAudioService.java
+++ b/service/src/com/android/car/audio/CarAudioService.java
@@ -27,7 +27,6 @@
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.pm.PackageManager;
-import android.hardware.automotive.audiocontrol.V1_0.ContextNumber;
 import android.hardware.automotive.audiocontrol.V1_0.IAudioControl;
 import android.media.AudioAttributes;
 import android.media.AudioDeviceInfo;
@@ -40,8 +39,6 @@
 import android.media.AudioPlaybackConfiguration;
 import android.media.AudioPortConfig;
 import android.media.AudioSystem;
-import android.media.audiopolicy.AudioMix;
-import android.media.audiopolicy.AudioMixingRule;
 import android.media.audiopolicy.AudioPolicy;
 import android.os.IBinder;
 import android.os.Looper;
@@ -51,7 +48,6 @@
 import android.text.TextUtils;
 import android.util.Log;
 import android.util.SparseArray;
-import android.util.SparseIntArray;
 import android.view.KeyEvent;
 
 import com.android.car.BinderInterfaceContainer;
@@ -60,10 +56,10 @@
 import com.android.car.R;
 import com.android.internal.util.Preconditions;
 
+import java.io.File;
 import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.HashSet;
 import java.util.List;
 import java.util.NoSuchElementException;
 import java.util.Set;
@@ -74,59 +70,38 @@
  */
 public class CarAudioService extends ICarAudio.Stub implements CarServiceBase {
 
-    private static final int DEFAULT_AUDIO_USAGE = AudioAttributes.USAGE_MEDIA;
+    // Turning this off will result in falling back to the default focus policy of Android
+    // (which boils down to "grant if not in a phone call, else deny").
+    // Aside from the obvious effect of ignoring the logic in CarAudioFocus, this will also
+    // result in the framework taking over responsibility for ducking in TRANSIENT_LOSS cases.
+    // Search for "DUCK_VSHAPE" in PLaybackActivityMonitor.java to see where this happens.
+    private static boolean sUseCarAudioFocus = true;
 
-    private static final int[] CONTEXT_NUMBERS = new int[] {
-            ContextNumber.MUSIC,
-            ContextNumber.NAVIGATION,
-            ContextNumber.VOICE_COMMAND,
-            ContextNumber.CALL_RING,
-            ContextNumber.CALL,
-            ContextNumber.ALARM,
-            ContextNumber.NOTIFICATION,
-            ContextNumber.SYSTEM_SOUND
+    // Key to persist master mute state in system settings
+    private static final String VOLUME_SETTINGS_KEY_MASTER_MUTE = "android.car.MASTER_MUTE";
+
+    // The trailing slash forms a directory-liked hierarchy and
+    // allows listening for both GROUP/MEDIA and GROUP/NAVIGATION.
+    private static final String VOLUME_SETTINGS_KEY_FOR_GROUP_PREFIX = "android.car.VOLUME_GROUP/";
+
+    // CarAudioService reads configuration from the following paths respectively.
+    // If the first one is found, all others are ignored.
+    // If no one is found, it fallbacks to car_volume_groups.xml resource file.
+    private static final String[] AUDIO_CONFIGURATION_PATHS = new String[] {
+            "/vendor/etc/car_audio_configuration.xml",
+            "/system/etc/car_audio_configuration.xml"
     };
 
-    private static final SparseIntArray USAGE_TO_CONTEXT = new SparseIntArray();
-
-    // For legacy stream type based volume control.
-    // Values in STREAM_TYPES and STREAM_TYPE_USAGES should be aligned.
-    private static final int[] STREAM_TYPES = new int[] {
-            AudioManager.STREAM_MUSIC,
-            AudioManager.STREAM_ALARM,
-            AudioManager.STREAM_RING
-    };
-    private static final int[] STREAM_TYPE_USAGES = new int[] {
-            AudioAttributes.USAGE_MEDIA,
-            AudioAttributes.USAGE_ALARM,
-            AudioAttributes.USAGE_NOTIFICATION_RINGTONE
-    };
-
-    static {
-        USAGE_TO_CONTEXT.put(AudioAttributes.USAGE_UNKNOWN, ContextNumber.MUSIC);
-        USAGE_TO_CONTEXT.put(AudioAttributes.USAGE_MEDIA, ContextNumber.MUSIC);
-        USAGE_TO_CONTEXT.put(AudioAttributes.USAGE_VOICE_COMMUNICATION, ContextNumber.CALL);
-        USAGE_TO_CONTEXT.put(AudioAttributes.USAGE_VOICE_COMMUNICATION_SIGNALLING,
-                ContextNumber.CALL);
-        USAGE_TO_CONTEXT.put(AudioAttributes.USAGE_ALARM, ContextNumber.ALARM);
-        USAGE_TO_CONTEXT.put(AudioAttributes.USAGE_NOTIFICATION, ContextNumber.NOTIFICATION);
-        USAGE_TO_CONTEXT.put(AudioAttributes.USAGE_NOTIFICATION_RINGTONE, ContextNumber.CALL_RING);
-        USAGE_TO_CONTEXT.put(AudioAttributes.USAGE_NOTIFICATION_COMMUNICATION_REQUEST,
-                ContextNumber.NOTIFICATION);
-        USAGE_TO_CONTEXT.put(AudioAttributes.USAGE_NOTIFICATION_COMMUNICATION_INSTANT,
-                ContextNumber.NOTIFICATION);
-        USAGE_TO_CONTEXT.put(AudioAttributes.USAGE_NOTIFICATION_COMMUNICATION_DELAYED,
-                ContextNumber.NOTIFICATION);
-        USAGE_TO_CONTEXT.put(AudioAttributes.USAGE_NOTIFICATION_EVENT, ContextNumber.NOTIFICATION);
-        USAGE_TO_CONTEXT.put(AudioAttributes.USAGE_ASSISTANCE_ACCESSIBILITY,
-                ContextNumber.VOICE_COMMAND);
-        USAGE_TO_CONTEXT.put(AudioAttributes.USAGE_ASSISTANCE_NAVIGATION_GUIDANCE,
-                ContextNumber.NAVIGATION);
-        USAGE_TO_CONTEXT.put(AudioAttributes.USAGE_ASSISTANCE_SONIFICATION,
-                ContextNumber.SYSTEM_SOUND);
-        USAGE_TO_CONTEXT.put(AudioAttributes.USAGE_GAME, ContextNumber.MUSIC);
-        USAGE_TO_CONTEXT.put(AudioAttributes.USAGE_VIRTUAL_SOURCE, ContextNumber.INVALID);
-        USAGE_TO_CONTEXT.put(AudioAttributes.USAGE_ASSISTANT, ContextNumber.VOICE_COMMAND);
+    /**
+     * Gets the key to persist volume for a volume group in settings
+     *
+     * @param zoneId The audio zone id
+     * @param groupId The volume group id
+     * @return Key to persist volume index for volume group in system settings
+     */
+    static String getVolumeSettingsKeyForGroup(int zoneId, int groupId) {
+        final int maskedGroupId = (zoneId << 8) + groupId;
+        return VOLUME_SETTINGS_KEY_FOR_GROUP_PREFIX + maskedGroupId;
     }
 
     private final Object mImplLock = new Object();
@@ -136,8 +111,6 @@
     private final AudioManager mAudioManager;
     private final boolean mUseDynamicRouting;
     private final boolean mPersistMasterMuteState;
-    private final SparseIntArray mContextToBus = new SparseIntArray();
-    private final SparseArray<CarAudioDeviceInfo> mCarAudioDeviceInfos = new SparseArray<>();
 
     private final AudioPolicy.AudioPolicyVolumeCallback mAudioPolicyVolumeCallback =
             new AudioPolicy.AudioPolicyVolumeCallback() {
@@ -147,29 +120,31 @@
             Log.v(CarLog.TAG_AUDIO,
                     "onVolumeAdjustment: " + AudioManager.adjustToString(adjustment)
                             + " suggested usage: " + AudioAttributes.usageToString(usage));
-            final int groupId = getVolumeGroupIdForUsage(usage);
-            final int currentVolume = getGroupVolume(groupId);
+            // TODO: Pass zone id into this callback.
+            final int zoneId = CarAudioManager.PRIMARY_AUDIO_ZONE;
+            final int groupId = getVolumeGroupIdForUsage(zoneId, usage);
+            final int currentVolume = getGroupVolume(zoneId, groupId);
             final int flags = AudioManager.FLAG_FROM_KEY | AudioManager.FLAG_SHOW_UI;
             switch (adjustment) {
                 case AudioManager.ADJUST_LOWER:
-                    int minValue = Math.max(currentVolume - 1, getGroupMinVolume(groupId));
-                    setGroupVolume(groupId, minValue , flags);
+                    int minValue = Math.max(currentVolume - 1, getGroupMinVolume(zoneId, groupId));
+                    setGroupVolume(zoneId, groupId, minValue , flags);
                     break;
                 case AudioManager.ADJUST_RAISE:
-                    int maxValue =  Math.min(currentVolume + 1, getGroupMaxVolume(groupId));
-                    setGroupVolume(groupId, maxValue, flags);
+                    int maxValue =  Math.min(currentVolume + 1, getGroupMaxVolume(zoneId, groupId));
+                    setGroupVolume(zoneId, groupId, maxValue, flags);
                     break;
                 case AudioManager.ADJUST_MUTE:
                     setMasterMute(true, flags);
-                    callbackMasterMuteChange(flags);
+                    callbackMasterMuteChange(zoneId, flags);
                     break;
                 case AudioManager.ADJUST_UNMUTE:
                     setMasterMute(false, flags);
-                    callbackMasterMuteChange(flags);
+                    callbackMasterMuteChange(zoneId, flags);
                     break;
                 case AudioManager.ADJUST_TOGGLE_MUTE:
                     setMasterMute(!mAudioManager.isMasterMute(), flags);
-                    callbackMasterMuteChange(flags);
+                    callbackMasterMuteChange(zoneId, flags);
                     break;
                 case AudioManager.ADJUST_SAME:
                 default:
@@ -183,10 +158,12 @@
 
     /**
      * Simulates {@link ICarVolumeCallback} when it's running in legacy mode.
+     * This receiver assumes the intent is sent to {@link CarAudioManager#PRIMARY_AUDIO_ZONE}.
      */
     private final BroadcastReceiver mLegacyVolumeChangedReceiver = new BroadcastReceiver() {
         @Override
         public void onReceive(Context context, Intent intent) {
+            final int zoneId = CarAudioManager.PRIMARY_AUDIO_ZONE;
             switch (intent.getAction()) {
                 case AudioManager.VOLUME_CHANGED_ACTION:
                     int streamType = intent.getIntExtra(AudioManager.EXTRA_VOLUME_STREAM_TYPE, -1);
@@ -194,18 +171,20 @@
                     if (groupId == -1) {
                         Log.w(CarLog.TAG_AUDIO, "Unknown stream type: " + streamType);
                     } else {
-                        callbackGroupVolumeChange(groupId, 0);
+                        callbackGroupVolumeChange(zoneId, groupId, 0);
                     }
                     break;
                 case AudioManager.MASTER_MUTE_CHANGED_ACTION:
-                    callbackMasterMuteChange(0);
+                    callbackMasterMuteChange(zoneId, 0);
                     break;
             }
         }
     };
 
     private AudioPolicy mAudioPolicy;
-    private CarVolumeGroup[] mCarVolumeGroups;
+    private CarAudioFocus mFocusHandler;
+    private String mCarAudioConfigurationPath;
+    private CarAudioZone[] mCarAudioZones;
 
     public CarAudioService(Context context) {
         mContext = context;
@@ -223,18 +202,38 @@
     @Override
     public void init() {
         synchronized (mImplLock) {
-            if (!mUseDynamicRouting) {
-                Log.i(CarLog.TAG_AUDIO, "Audio dynamic routing not configured, run in legacy mode");
-                setupLegacyVolumeChangedListener();
+            if (mUseDynamicRouting) {
+                // Enumerate all output bus device ports
+                AudioDeviceInfo[] deviceInfos = mAudioManager.getDevices(
+                        AudioManager.GET_DEVICES_OUTPUTS);
+                if (deviceInfos.length == 0) {
+                    Log.e(CarLog.TAG_AUDIO, "No output device available, ignore");
+                    return;
+                }
+                SparseArray<CarAudioDeviceInfo> busToCarAudioDeviceInfo = new SparseArray<>();
+                for (AudioDeviceInfo info : deviceInfos) {
+                    Log.v(CarLog.TAG_AUDIO, String.format("output id=%d address=%s type=%s",
+                            info.getId(), info.getAddress(), info.getType()));
+                    if (info.getType() == AudioDeviceInfo.TYPE_BUS) {
+                        final CarAudioDeviceInfo carInfo = new CarAudioDeviceInfo(info);
+                        // See also the audio_policy_configuration.xml,
+                        // the bus number should be no less than zero.
+                        if (carInfo.getBusNumber() >= 0) {
+                            busToCarAudioDeviceInfo.put(carInfo.getBusNumber(), carInfo);
+                            Log.i(CarLog.TAG_AUDIO, "Valid bus found " + carInfo);
+                        }
+                    }
+                }
+                setupDynamicRouting(busToCarAudioDeviceInfo);
             } else {
-                setupDynamicRouting();
-                setupVolumeGroups();
+                Log.i(CarLog.TAG_AUDIO, "Audio dynamic routing not enabled, run in legacy mode");
+                setupLegacyVolumeChangedListener();
             }
 
             // Restore master mute state if applicable
             if (mPersistMasterMuteState) {
                 boolean storedMasterMute = Settings.Global.getInt(mContext.getContentResolver(),
-                        CarAudioManager.VOLUME_SETTINGS_KEY_MASTER_MUTE, 0) != 0;
+                        VOLUME_SETTINGS_KEY_MASTER_MUTE, 0) != 0;
                 setMasterMute(storedMasterMute, 0);
             }
         }
@@ -247,6 +246,8 @@
                 if (mAudioPolicy != null) {
                     mAudioManager.unregisterAudioPolicyAsync(mAudioPolicy);
                     mAudioPolicy = null;
+                    mFocusHandler.setOwningPolicy(null, null);
+                    mFocusHandler = null;
                 }
             } else {
                 mContext.unregisterReceiver(mLegacyVolumeChangedReceiver);
@@ -262,40 +263,49 @@
         writer.println("\tRun in legacy mode? " + (!mUseDynamicRouting));
         writer.println("\tPersist master mute state? " + mPersistMasterMuteState);
         writer.println("\tMaster muted? " + mAudioManager.isMasterMute());
+        if (mCarAudioConfigurationPath != null) {
+            writer.println("\tCar audio configuration path: " + mCarAudioConfigurationPath);
+        }
         // Empty line for comfortable reading
         writer.println();
         if (mUseDynamicRouting) {
-            for (CarVolumeGroup group : mCarVolumeGroups) {
-                group.dump(writer);
+            for (CarAudioZone zone : mCarAudioZones) {
+                zone.dump("\t", writer);
             }
         }
     }
 
+    @Override
+    public boolean isDynamicRoutingEnabled() {
+        return mUseDynamicRouting;
+    }
+
     /**
-     * @see {@link android.car.media.CarAudioManager#setGroupVolume(int, int, int)}
+     * @see {@link android.car.media.CarAudioManager#setGroupVolume(int, int, int, int)}
      */
     @Override
-    public void setGroupVolume(int groupId, int index, int flags) {
+    public void setGroupVolume(int zoneId, int groupId, int index, int flags) {
         synchronized (mImplLock) {
             enforcePermission(Car.PERMISSION_CAR_CONTROL_AUDIO_VOLUME);
 
-            callbackGroupVolumeChange(groupId, flags);
+            callbackGroupVolumeChange(zoneId, groupId, flags);
             // For legacy stream type based volume control
             if (!mUseDynamicRouting) {
-                mAudioManager.setStreamVolume(STREAM_TYPES[groupId], index, flags);
+                mAudioManager.setStreamVolume(
+                        CarAudioDynamicRouting.STREAM_TYPES[groupId], index, flags);
                 return;
             }
 
-            CarVolumeGroup group = getCarVolumeGroup(groupId);
+            CarVolumeGroup group = getCarVolumeGroup(zoneId, groupId);
             group.setCurrentGainIndex(index);
         }
     }
 
-    private void callbackGroupVolumeChange(int groupId, int flags) {
+    private void callbackGroupVolumeChange(int zoneId, int groupId, int flags) {
         for (BinderInterfaceContainer.BinderInterface<ICarVolumeCallback> callback :
                 mVolumeCallbackContainer.getInterfaces()) {
             try {
-                callback.binderInterface.onGroupVolumeChanged(groupId, flags);
+                callback.binderInterface.onGroupVolumeChanged(zoneId, groupId, flags);
             } catch (RemoteException e) {
                 Log.e(CarLog.TAG_AUDIO, "Failed to callback onGroupVolumeChanged", e);
             }
@@ -312,11 +322,11 @@
         mAudioManager.dispatchMediaKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, keycode));
     }
 
-    private void callbackMasterMuteChange(int flags) {
+    private void callbackMasterMuteChange(int zoneId, int flags) {
         for (BinderInterfaceContainer.BinderInterface<ICarVolumeCallback> callback :
                 mVolumeCallbackContainer.getInterfaces()) {
             try {
-                callback.binderInterface.onMasterMuteChanged(flags);
+                callback.binderInterface.onMasterMuteChanged(zoneId, flags);
             } catch (RemoteException e) {
                 Log.e(CarLog.TAG_AUDIO, "Failed to callback onMasterMuteChanged", e);
             }
@@ -325,70 +335,73 @@
         // Persists master mute state if applicable
         if (mPersistMasterMuteState) {
             Settings.Global.putInt(mContext.getContentResolver(),
-                    CarAudioManager.VOLUME_SETTINGS_KEY_MASTER_MUTE,
+                    VOLUME_SETTINGS_KEY_MASTER_MUTE,
                     mAudioManager.isMasterMute() ? 1 : 0);
         }
     }
 
     /**
-     * @see {@link android.car.media.CarAudioManager#getGroupMaxVolume(int)}
+     * @see {@link android.car.media.CarAudioManager#getGroupMaxVolume(int, int)}
      */
     @Override
-    public int getGroupMaxVolume(int groupId) {
+    public int getGroupMaxVolume(int zoneId, int groupId) {
         synchronized (mImplLock) {
             enforcePermission(Car.PERMISSION_CAR_CONTROL_AUDIO_VOLUME);
 
             // For legacy stream type based volume control
             if (!mUseDynamicRouting) {
-                return mAudioManager.getStreamMaxVolume(STREAM_TYPES[groupId]);
+                return mAudioManager.getStreamMaxVolume(
+                        CarAudioDynamicRouting.STREAM_TYPES[groupId]);
             }
 
-            CarVolumeGroup group = getCarVolumeGroup(groupId);
+            CarVolumeGroup group = getCarVolumeGroup(zoneId, groupId);
             return group.getMaxGainIndex();
         }
     }
 
     /**
-     * @see {@link android.car.media.CarAudioManager#getGroupMinVolume(int)}
+     * @see {@link android.car.media.CarAudioManager#getGroupMinVolume(int, int)}
      */
     @Override
-    public int getGroupMinVolume(int groupId) {
+    public int getGroupMinVolume(int zoneId, int groupId) {
         synchronized (mImplLock) {
             enforcePermission(Car.PERMISSION_CAR_CONTROL_AUDIO_VOLUME);
 
             // For legacy stream type based volume control
             if (!mUseDynamicRouting) {
-                return mAudioManager.getStreamMinVolume(STREAM_TYPES[groupId]);
+                return mAudioManager.getStreamMinVolume(
+                        CarAudioDynamicRouting.STREAM_TYPES[groupId]);
             }
 
-            CarVolumeGroup group = getCarVolumeGroup(groupId);
+            CarVolumeGroup group = getCarVolumeGroup(zoneId, groupId);
             return group.getMinGainIndex();
         }
     }
 
     /**
-     * @see {@link android.car.media.CarAudioManager#getGroupVolume(int)}
+     * @see {@link android.car.media.CarAudioManager#getGroupVolume(int, int)}
      */
     @Override
-    public int getGroupVolume(int groupId) {
+    public int getGroupVolume(int zoneId, int groupId) {
         synchronized (mImplLock) {
             enforcePermission(Car.PERMISSION_CAR_CONTROL_AUDIO_VOLUME);
 
             // For legacy stream type based volume control
             if (!mUseDynamicRouting) {
-                return mAudioManager.getStreamVolume(STREAM_TYPES[groupId]);
+                return mAudioManager.getStreamVolume(
+                        CarAudioDynamicRouting.STREAM_TYPES[groupId]);
             }
 
-            CarVolumeGroup group = getCarVolumeGroup(groupId);
+            CarVolumeGroup group = getCarVolumeGroup(zoneId, groupId);
             return group.getCurrentGainIndex();
         }
     }
 
-    private CarVolumeGroup getCarVolumeGroup(int groupId) {
-        Preconditions.checkNotNull(mCarVolumeGroups);
-        Preconditions.checkArgument(groupId >= 0 && groupId < mCarVolumeGroups.length,
-                "groupId out of range: " + groupId);
-        return mCarVolumeGroups[groupId];
+    private CarVolumeGroup getCarVolumeGroup(int zoneId, int groupId) {
+        Preconditions.checkNotNull(mCarAudioZones);
+        Preconditions.checkArgumentInRange(zoneId, 0, mCarAudioZones.length - 1,
+                "zoneId out of range: " + zoneId);
+        return mCarAudioZones[zoneId].getVolumeGroup(groupId);
     }
 
     private void setupLegacyVolumeChangedListener() {
@@ -398,186 +411,83 @@
         mContext.registerReceiver(mLegacyVolumeChangedReceiver, intentFilter);
     }
 
-    private void setupDynamicRouting() {
-        final IAudioControl audioControl = getAudioControl();
-        if (audioControl == null) {
-            return;
+    private void setupDynamicRouting(SparseArray<CarAudioDeviceInfo> busToCarAudioDeviceInfo) {
+        final AudioPolicy.Builder builder = new AudioPolicy.Builder(mContext);
+        builder.setLooper(Looper.getMainLooper());
+
+        final CarAudioZonesLoader zonesLoader;
+        mCarAudioConfigurationPath = getAudioConfigurationPath();
+        if (mCarAudioConfigurationPath != null) {
+            zonesLoader = new CarAudioZonesHelper(mContext, mCarAudioConfigurationPath,
+                    busToCarAudioDeviceInfo);
+        } else {
+            // In legacy mode, context -> bus mapping is done by querying IAudioControl HAL.
+            final IAudioControl audioControl = getAudioControl();
+            if (audioControl == null) {
+                throw new RuntimeException(
+                        "Dynamic routing requested but audioControl HAL not available");
+            }
+            zonesLoader = new CarAudioZonesHelperLegacy(mContext, R.xml.car_volume_groups,
+                    busToCarAudioDeviceInfo, audioControl);
         }
-        AudioPolicy audioPolicy = getDynamicAudioPolicy(audioControl);
-        int r = mAudioManager.registerAudioPolicy(audioPolicy);
+        mCarAudioZones = zonesLoader.loadAudioZones();
+        for (CarAudioZone zone : mCarAudioZones) {
+            if (!zone.validateVolumeGroups()) {
+                throw new RuntimeException("Invalid volume groups configuration");
+            }
+            // Ensure HAL gets our initial value
+            zone.synchronizeCurrentGainIndex();
+            Log.v(CarLog.TAG_AUDIO, "Processed audio zone: " + zone);
+        }
+
+        // Setup dynamic routing rules by usage
+        final CarAudioDynamicRouting dynamicRouting = new CarAudioDynamicRouting(mCarAudioZones);
+        dynamicRouting.setupAudioDynamicRouting(builder);
+
+        // Attach the {@link AudioPolicyVolumeCallback}
+        builder.setAudioPolicyVolumeCallback(mAudioPolicyVolumeCallback);
+
+        if (sUseCarAudioFocus) {
+            // Configure our AudioPolicy to handle focus events.
+            // This gives us the ability to decide which audio focus requests to accept and bypasses
+            // the framework ducking logic.
+            mFocusHandler = new CarAudioFocus(mAudioManager);
+            builder.setAudioPolicyFocusListener(mFocusHandler);
+            builder.setIsAudioFocusPolicy(true);
+        }
+
+        mAudioPolicy = builder.build();
+        if (sUseCarAudioFocus) {
+            // Connect the AudioPolicy and the focus listener
+            mFocusHandler.setOwningPolicy(this, mAudioPolicy);
+        }
+
+        int r = mAudioManager.registerAudioPolicy(mAudioPolicy);
         if (r != AudioManager.SUCCESS) {
             throw new RuntimeException("registerAudioPolicy failed " + r);
         }
-        mAudioPolicy = audioPolicy;
-    }
-
-    private void setupVolumeGroups() {
-        Preconditions.checkArgument(mCarAudioDeviceInfos.size() > 0,
-                "No bus device is configured to setup volume groups");
-        final CarVolumeGroupsHelper helper = new CarVolumeGroupsHelper(
-                mContext, R.xml.car_volume_groups);
-        mCarVolumeGroups = helper.loadVolumeGroups();
-        for (CarVolumeGroup group : mCarVolumeGroups) {
-            for (int contextNumber : group.getContexts()) {
-                int busNumber = mContextToBus.get(contextNumber);
-                group.bind(contextNumber, busNumber, mCarAudioDeviceInfos.get(busNumber));
-            }
-
-            // Now that we have all our contexts, ensure the HAL gets our intial value
-            group.setCurrentGainIndex(group.getCurrentGainIndex());
-
-            Log.v(CarLog.TAG_AUDIO, "Processed volume group: " + group);
-        }
-        // Perform validation after all volume groups are processed
-        if (!validateVolumeGroups()) {
-            throw new RuntimeException("Invalid volume groups configuration");
-        }
     }
 
     /**
-     * Constraints applied here:
-     *
-     * - One context should not appear in two groups
-     * - All contexts are assigned
-     * - One bus should not appear in two groups
-     * - All gain controllers in the same group have same step value
-     *
-     * Note that it is fine that there are buses not appear in any group, those buses may be
-     * reserved for other usages.
-     * Step value validation is done in {@link CarVolumeGroup#bind(int, int, CarAudioDeviceInfo)}
-     *
-     * See also the car_volume_groups.xml configuration
+     * Read from {@link #AUDIO_CONFIGURATION_PATHS} respectively.
+     * @return File path of the first hit in {@link #AUDIO_CONFIGURATION_PATHS}
      */
-    private boolean validateVolumeGroups() {
-        Set<Integer> contextSet = new HashSet<>();
-        Set<Integer> busNumberSet = new HashSet<>();
-        for (CarVolumeGroup group : mCarVolumeGroups) {
-            // One context should not appear in two groups
-            for (int context : group.getContexts()) {
-                if (contextSet.contains(context)) {
-                    Log.e(CarLog.TAG_AUDIO, "Context appears in two groups: " + context);
-                    return false;
-                }
-                contextSet.add(context);
-            }
-
-            // One bus should not appear in two groups
-            for (int busNumber : group.getBusNumbers()) {
-                if (busNumberSet.contains(busNumber)) {
-                    Log.e(CarLog.TAG_AUDIO, "Bus appears in two groups: " + busNumber);
-                    return false;
-                }
-                busNumberSet.add(busNumber);
-            }
-        }
-
-        // All contexts are assigned
-        if (contextSet.size() != CONTEXT_NUMBERS.length) {
-            Log.e(CarLog.TAG_AUDIO, "Some contexts are not assigned to group");
-            Log.e(CarLog.TAG_AUDIO, "Assigned contexts "
-                    + Arrays.toString(contextSet.toArray(new Integer[contextSet.size()])));
-            Log.e(CarLog.TAG_AUDIO, "All contexts " + Arrays.toString(CONTEXT_NUMBERS));
-            return false;
-        }
-
-        return true;
-    }
-
     @Nullable
-    private AudioPolicy getDynamicAudioPolicy(@NonNull IAudioControl audioControl) {
-        AudioPolicy.Builder builder = new AudioPolicy.Builder(mContext);
-        builder.setLooper(Looper.getMainLooper());
-
-        // 1st, enumerate all output bus device ports
-        AudioDeviceInfo[] deviceInfos = mAudioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS);
-        if (deviceInfos.length == 0) {
-            Log.e(CarLog.TAG_AUDIO, "getDynamicAudioPolicy, no output device available, ignore");
-            return null;
-        }
-        for (AudioDeviceInfo info : deviceInfos) {
-            Log.v(CarLog.TAG_AUDIO, String.format("output id=%d address=%s type=%s",
-                    info.getId(), info.getAddress(), info.getType()));
-            if (info.getType() == AudioDeviceInfo.TYPE_BUS) {
-                final CarAudioDeviceInfo carInfo = new CarAudioDeviceInfo(info);
-                // See also the audio_policy_configuration.xml and getBusForContext in
-                // audio control HAL, the bus number should be no less than zero.
-                if (carInfo.getBusNumber() >= 0) {
-                    mCarAudioDeviceInfos.put(carInfo.getBusNumber(), carInfo);
-                    Log.i(CarLog.TAG_AUDIO, "Valid bus found " + carInfo);
-                }
+    private String getAudioConfigurationPath() {
+        for (String path : AUDIO_CONFIGURATION_PATHS) {
+            File configuration = new File(path);
+            if (configuration.exists()) {
+                return path;
             }
         }
-
-        // 2nd, map context to physical bus
-        try {
-            for (int contextNumber : CONTEXT_NUMBERS) {
-                int busNumber = audioControl.getBusForContext(contextNumber);
-                mContextToBus.put(contextNumber, busNumber);
-                CarAudioDeviceInfo info = mCarAudioDeviceInfos.get(busNumber);
-                if (info == null) {
-                    Log.w(CarLog.TAG_AUDIO, "No bus configured for context: " + contextNumber);
-                }
-            }
-        } catch (RemoteException e) {
-            Log.e(CarLog.TAG_AUDIO, "Error mapping context to physical bus", e);
-        }
-
-        // 3rd, enumerate all physical buses and build the routing policy.
-        // Note that one can not register audio mix for same bus more than once.
-        for (int i = 0; i < mCarAudioDeviceInfos.size(); i++) {
-            int busNumber = mCarAudioDeviceInfos.keyAt(i);
-            boolean hasContext = false;
-            CarAudioDeviceInfo info = mCarAudioDeviceInfos.valueAt(i);
-            AudioFormat mixFormat = new AudioFormat.Builder()
-                    .setSampleRate(info.getSampleRate())
-                    .setEncoding(info.getEncodingFormat())
-                    .setChannelMask(info.getChannelCount())
-                    .build();
-            AudioMixingRule.Builder mixingRuleBuilder = new AudioMixingRule.Builder();
-            for (int j = 0; j < mContextToBus.size(); j++) {
-                if (mContextToBus.valueAt(j) == busNumber) {
-                    hasContext = true;
-                    int contextNumber = mContextToBus.keyAt(j);
-                    int[] usages = getUsagesForContext(contextNumber);
-                    for (int usage : usages) {
-                        mixingRuleBuilder.addRule(
-                                new AudioAttributes.Builder().setUsage(usage).build(),
-                                AudioMixingRule.RULE_MATCH_ATTRIBUTE_USAGE);
-                    }
-                    Log.i(CarLog.TAG_AUDIO, "Bus number: " + busNumber
-                            + " contextNumber: " + contextNumber
-                            + " sampleRate: " + info.getSampleRate()
-                            + " channels: " + info.getChannelCount()
-                            + " usages: " + Arrays.toString(usages));
-                }
-            }
-            if (hasContext) {
-                // It's a valid case that an audio output bus is defined in
-                // audio_policy_configuration and no context is assigned to it.
-                // In such case, do not build a policy mix with zero rules.
-                AudioMix audioMix = new AudioMix.Builder(mixingRuleBuilder.build())
-                        .setFormat(mixFormat)
-                        .setDevice(info.getAudioDeviceInfo())
-                        .setRouteFlags(AudioMix.ROUTE_FLAG_RENDER)
-                        .build();
-                builder.addMix(audioMix);
-            }
-        }
-
-        // 4th, attach the {@link AudioPolicyVolumeCallback}
-        builder.setAudioPolicyVolumeCallback(mAudioPolicyVolumeCallback);
-
-        return builder.build();
+        return null;
     }
 
-    private int[] getUsagesForContext(int contextNumber) {
-        final List<Integer> usages = new ArrayList<>();
-        for (int i = 0; i < USAGE_TO_CONTEXT.size(); i++) {
-            if (USAGE_TO_CONTEXT.valueAt(i) == contextNumber) {
-                usages.add(USAGE_TO_CONTEXT.keyAt(i));
-            }
-        }
-        return usages.stream().mapToInt(i -> i).toArray();
+    /**
+     * @return Context number for a given audio usage, 0 if the given usage is unrecognized.
+     */
+    int getContextForUsage(int audioUsage) {
+        return CarAudioDynamicRouting.USAGE_TO_CONTEXT.get(audioUsage);
     }
 
     @Override
@@ -650,7 +560,7 @@
                 }
             }
 
-            return sourceAddresses.toArray(new String[sourceAddresses.size()]);
+            return sourceAddresses.toArray(new String[0]);
         }
     }
 
@@ -726,8 +636,9 @@
         Log.d(CarLog.TAG_AUDIO, "Audio patch created: " + patch[0]);
 
         // Ensure the initial volume on output device port
-        int groupId = getVolumeGroupIdForUsage(usage);
-        setGroupVolume(groupId, getGroupVolume(groupId), 0);
+        int groupId = getVolumeGroupIdForUsage(CarAudioManager.PRIMARY_AUDIO_ZONE, usage);
+        setGroupVolume(CarAudioManager.PRIMARY_AUDIO_ZONE, groupId,
+                getGroupVolume(CarAudioManager.PRIMARY_AUDIO_ZONE, groupId), 0);
 
         return new CarAudioPatchHandle(patch[0]);
     }
@@ -761,30 +672,30 @@
     }
 
     @Override
-    public int getVolumeGroupCount() {
+    public int getVolumeGroupCount(int zoneId) {
         synchronized (mImplLock) {
             enforcePermission(Car.PERMISSION_CAR_CONTROL_AUDIO_VOLUME);
-
             // For legacy stream type based volume control
-            if (!mUseDynamicRouting) return STREAM_TYPES.length;
+            if (!mUseDynamicRouting) return CarAudioDynamicRouting.STREAM_TYPES.length;
 
-            return mCarVolumeGroups == null ? 0 : mCarVolumeGroups.length;
+            Preconditions.checkArgumentInRange(zoneId, 0, mCarAudioZones.length - 1,
+                    "zoneId out of range: " + zoneId);
+            return mCarAudioZones[zoneId].getVolumeGroupCount();
         }
     }
 
     @Override
-    public int getVolumeGroupIdForUsage(@AudioAttributes.AttributeUsage int usage) {
+    public int getVolumeGroupIdForUsage(int zoneId, @AudioAttributes.AttributeUsage int usage) {
         synchronized (mImplLock) {
             enforcePermission(Car.PERMISSION_CAR_CONTROL_AUDIO_VOLUME);
+            Preconditions.checkArgumentInRange(zoneId, 0, mCarAudioZones.length - 1,
+                    "zoneId out of range: " + zoneId);
 
-            if (mCarVolumeGroups == null) {
-                return -1;
-            }
-
-            for (int i = 0; i < mCarVolumeGroups.length; i++) {
-                int[] contexts = mCarVolumeGroups[i].getContexts();
+            CarVolumeGroup[] groups = mCarAudioZones[zoneId].getVolumeGroups();
+            for (int i = 0; i < groups.length; i++) {
+                int[] contexts = groups[i].getContexts();
                 for (int context : contexts) {
-                    if (USAGE_TO_CONTEXT.get(usage) == context) {
+                    if (getContextForUsage(usage) == context) {
                         return i;
                     }
                 }
@@ -794,31 +705,28 @@
     }
 
     @Override
-    public @NonNull int[] getUsagesForVolumeGroupId(int groupId) {
+    public @NonNull int[] getUsagesForVolumeGroupId(int zoneId, int groupId) {
         synchronized (mImplLock) {
             enforcePermission(Car.PERMISSION_CAR_CONTROL_AUDIO_VOLUME);
 
             // For legacy stream type based volume control
             if (!mUseDynamicRouting) {
-                return new int[] { STREAM_TYPE_USAGES[groupId] };
+                return new int[] { CarAudioDynamicRouting.STREAM_TYPE_USAGES[groupId] };
             }
 
-            CarVolumeGroup group = getCarVolumeGroup(groupId);
+            CarVolumeGroup group = getCarVolumeGroup(zoneId, groupId);
             Set<Integer> contexts =
                     Arrays.stream(group.getContexts()).boxed().collect(Collectors.toSet());
             final List<Integer> usages = new ArrayList<>();
-            for (int i = 0; i < USAGE_TO_CONTEXT.size(); i++) {
-                if (contexts.contains(USAGE_TO_CONTEXT.valueAt(i))) {
-                    usages.add(USAGE_TO_CONTEXT.keyAt(i));
+            for (int i = 0; i < CarAudioDynamicRouting.USAGE_TO_CONTEXT.size(); i++) {
+                if (contexts.contains(CarAudioDynamicRouting.USAGE_TO_CONTEXT.valueAt(i))) {
+                    usages.add(CarAudioDynamicRouting.USAGE_TO_CONTEXT.keyAt(i));
                 }
             }
             return usages.stream().mapToInt(i -> i).toArray();
         }
     }
 
-    /**
-     * See {@link android.car.media.CarAudioManager#registerVolumeCallback(IBinder)}
-     */
     @Override
     public void registerVolumeCallback(@NonNull IBinder binder) {
         synchronized (mImplLock) {
@@ -828,9 +736,6 @@
         }
     }
 
-    /**
-     * See {@link android.car.media.CarAudioManager#unregisterVolumeCallback(IBinder)}
-     */
     @Override
     public void unregisterVolumeCallback(@NonNull IBinder binder) {
         synchronized (mImplLock) {
@@ -852,11 +757,13 @@
      * Multiple usages may share one {@link AudioDevicePort}
      */
     private @Nullable AudioDevicePort getAudioPort(@AudioAttributes.AttributeUsage int usage) {
-        final int groupId = getVolumeGroupIdForUsage(usage);
-        final CarVolumeGroup group = Preconditions.checkNotNull(mCarVolumeGroups[groupId],
+        int zoneId = CarAudioManager.PRIMARY_AUDIO_ZONE;
+        final int groupId = getVolumeGroupIdForUsage(zoneId, usage);
+        final CarVolumeGroup group = Preconditions.checkNotNull(
+                mCarAudioZones[zoneId].getVolumeGroup(groupId),
                 "Can not find CarVolumeGroup by usage: "
                         + AudioAttributes.usageToString(usage));
-        return group.getAudioDevicePortForContext(USAGE_TO_CONTEXT.get(usage));
+        return group.getAudioDevicePortForContext(getContextForUsage(usage));
     }
 
     /**
@@ -879,7 +786,7 @@
                 return playbacks.get(playbacks.size() - 1).getAudioAttributes().getUsage();
             } else {
                 // TODO(b/72695246): Otherwise, get audio usage from foreground activity/window
-                return DEFAULT_AUDIO_USAGE;
+                return CarAudioDynamicRouting.DEFAULT_AUDIO_USAGE;
             }
         }
     }
@@ -891,8 +798,8 @@
      */
     private int getVolumeGroupIdForStreamType(int streamType) {
         int groupId = -1;
-        for (int i = 0; i < STREAM_TYPES.length; i++) {
-            if (streamType == STREAM_TYPES[i]) {
+        for (int i = 0; i < CarAudioDynamicRouting.STREAM_TYPES.length; i++) {
+            if (streamType == CarAudioDynamicRouting.STREAM_TYPES[i]) {
                 groupId = i;
                 break;
             }
@@ -911,4 +818,8 @@
         }
         return null;
     }
+
+    interface CarAudioZonesLoader {
+        CarAudioZone[] loadAudioZones();
+    }
 }
diff --git a/service/src/com/android/car/audio/CarAudioZone.java b/service/src/com/android/car/audio/CarAudioZone.java
new file mode 100644
index 0000000..b827906
--- /dev/null
+++ b/service/src/com/android/car/audio/CarAudioZone.java
@@ -0,0 +1,146 @@
+/*
+ * Copyright (C) 2018 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.car.audio;
+
+import android.car.media.CarAudioManager;
+import android.util.Log;
+
+import com.android.car.CarLog;
+import com.android.internal.util.Preconditions;
+
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * A class encapsulates an audio zone in car.
+ *
+ * An audio zone can contain multiple {@link CarVolumeGroup}s, and each zone has its own
+ * {@link CarAudioFocus} instance. Additionally, there may be dedicated hardware volume keys
+ * attached to each zone.
+ *
+ * See also the unified car_audio_configuration.xml
+ */
+/* package */ class CarAudioZone {
+
+    private final int mId;
+    private final String mName;
+    private final List<CarVolumeGroup> mVolumeGroups;
+
+    CarAudioZone(int id, String name) {
+        mId = id;
+        mName = name;
+        mVolumeGroups = new ArrayList<>();
+    }
+
+    int getId() {
+        return mId;
+    }
+
+    String getName() {
+        return mName;
+    }
+
+    boolean isPrimaryZone() {
+        return mId == CarAudioManager.PRIMARY_AUDIO_ZONE;
+    }
+
+    void addVolumeGroup(CarVolumeGroup volumeGroup) {
+        mVolumeGroups.add(volumeGroup);
+    }
+
+    CarVolumeGroup getVolumeGroup(int groupId) {
+        Preconditions.checkArgumentInRange(groupId, 0, mVolumeGroups.size() - 1,
+                "groupId(" + groupId + ") is out of range");
+        return mVolumeGroups.get(groupId);
+    }
+
+    int getVolumeGroupCount() {
+        return mVolumeGroups.size();
+    }
+
+    /**
+     * @return Snapshot of available {@link CarVolumeGroup}s in array.
+     */
+    CarVolumeGroup[] getVolumeGroups() {
+        return mVolumeGroups.toArray(new CarVolumeGroup[0]);
+    }
+
+    /**
+     * Constraints applied here:
+     *
+     * - One context should not appear in two groups
+     * - All contexts are assigned
+     * - One bus should not appear in two groups
+     * - All gain controllers in the same group have same step value
+     *
+     * Note that it is fine that there are buses not appear in any group, those buses may be
+     * reserved for other usages.
+     * Step value validation is done in {@link CarVolumeGroup#bind(int, int, CarAudioDeviceInfo)}
+     */
+    boolean validateVolumeGroups() {
+        Set<Integer> contextSet = new HashSet<>();
+        Set<Integer> busNumberSet = new HashSet<>();
+        for (CarVolumeGroup group : mVolumeGroups) {
+            // One context should not appear in two groups
+            for (int context : group.getContexts()) {
+                if (contextSet.contains(context)) {
+                    Log.e(CarLog.TAG_AUDIO, "Context appears in two groups: " + context);
+                    return false;
+                }
+                contextSet.add(context);
+            }
+
+            // One bus should not appear in two groups
+            for (int busNumber : group.getBusNumbers()) {
+                if (busNumberSet.contains(busNumber)) {
+                    Log.e(CarLog.TAG_AUDIO, "Bus appears in two groups: " + busNumber);
+                    return false;
+                }
+                busNumberSet.add(busNumber);
+            }
+        }
+
+        // All contexts are assigned
+        if (contextSet.size() != CarAudioDynamicRouting.CONTEXT_NUMBERS.length) {
+            Log.e(CarLog.TAG_AUDIO, "Some contexts are not assigned to group");
+            Log.e(CarLog.TAG_AUDIO, "Assigned contexts "
+                    + Arrays.toString(contextSet.toArray(new Integer[0])));
+            Log.e(CarLog.TAG_AUDIO,
+                    "All contexts " + Arrays.toString(CarAudioDynamicRouting.CONTEXT_NUMBERS));
+            return false;
+        }
+
+        return true;
+    }
+
+    void synchronizeCurrentGainIndex() {
+        for (CarVolumeGroup group : mVolumeGroups) {
+            group.setCurrentGainIndex(group.getCurrentGainIndex());
+        }
+    }
+
+    void dump(String indent, PrintWriter writer) {
+        writer.printf("%sCarAudioZone(%s:%d) isPrimary? %b\n", indent, mName, mId, isPrimaryZone());
+        for (CarVolumeGroup group : mVolumeGroups) {
+            group.dump(indent + "\t", writer);
+        }
+        writer.println();
+    }
+}
diff --git a/service/src/com/android/car/audio/CarAudioZonesHelper.java b/service/src/com/android/car/audio/CarAudioZonesHelper.java
new file mode 100644
index 0000000..0acae73
--- /dev/null
+++ b/service/src/com/android/car/audio/CarAudioZonesHelper.java
@@ -0,0 +1,227 @@
+/*
+ * Copyright (C) 2018 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.car.audio;
+
+import android.annotation.NonNull;
+import android.car.media.CarAudioManager;
+import android.content.Context;
+import android.hardware.automotive.audiocontrol.V1_0.ContextNumber;
+import android.util.Log;
+import android.util.SparseArray;
+import android.util.Xml;
+
+import com.android.car.CarLog;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * A helper class loads all audio zones from the configuration XML file.
+ */
+/* package */ class CarAudioZonesHelper implements CarAudioService.CarAudioZonesLoader {
+
+    private static final String NAMESPACE = null;
+    private static final String TAG_ROOT = "carAudioConfiguration";
+    private static final String TAG_AUDIO_ZONES = "zones";
+    private static final String TAG_AUDIO_ZONE = "zone";
+    private static final String TAG_VOLUME_GROUPS = "volumeGroups";
+    private static final String TAG_VOLUME_GROUP = "group";
+    private static final String TAG_AUDIO_DEVICE = "device";
+    private static final String TAG_CONTEXT = "context";
+    private static final String ATTR_VERSION = "version";
+    private static final String ATTR_IS_PRIMARY = "isPrimary";
+    private static final String ATTR_ZONE_NAME = "name";
+    private static final String ATTR_DEVICE_ADDRESS = "address";
+    private static final String ATTR_CONTEXT_NAME = "context";
+    private static final int SUPPORTED_VERSION = 1;
+
+    private static final Map<String, Integer> CONTEXT_NAME_MAP;
+
+    static {
+        CONTEXT_NAME_MAP = new HashMap<>();
+        CONTEXT_NAME_MAP.put("music", ContextNumber.MUSIC);
+        CONTEXT_NAME_MAP.put("navigation", ContextNumber.NAVIGATION);
+        CONTEXT_NAME_MAP.put("voice_command", ContextNumber.VOICE_COMMAND);
+        CONTEXT_NAME_MAP.put("call_ring", ContextNumber.CALL_RING);
+        CONTEXT_NAME_MAP.put("call", ContextNumber.CALL);
+        CONTEXT_NAME_MAP.put("alarm", ContextNumber.ALARM);
+        CONTEXT_NAME_MAP.put("notification", ContextNumber.NOTIFICATION);
+        CONTEXT_NAME_MAP.put("system_sound", ContextNumber.SYSTEM_SOUND);
+    }
+
+    private final Context mContext;
+    private final String mXmlConfigurationPath;
+    private final SparseArray<CarAudioDeviceInfo> mBusToCarAudioDeviceInfo;
+
+    private int mNextSecondaryZoneId;
+
+    CarAudioZonesHelper(Context context, @NonNull String xmlConfigurationPath,
+            @NonNull SparseArray<CarAudioDeviceInfo> busToCarAudioDeviceInfo) {
+        mContext = context;
+        mXmlConfigurationPath = xmlConfigurationPath;
+        mBusToCarAudioDeviceInfo = busToCarAudioDeviceInfo;
+
+        mNextSecondaryZoneId = CarAudioManager.PRIMARY_AUDIO_ZONE + 1;
+    }
+
+    @Override
+    public CarAudioZone[] loadAudioZones() {
+        List<CarAudioZone> carAudioZones = new ArrayList<>();
+        try (InputStream stream = new FileInputStream(mXmlConfigurationPath)) {
+            final XmlPullParser parser = Xml.newPullParser();
+            parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, NAMESPACE != null);
+            parser.setInput(stream, null);
+
+            // Ensure <carAudioConfiguration> is the root
+            parser.nextTag();
+            parser.require(XmlPullParser.START_TAG, NAMESPACE, TAG_ROOT);
+
+            // Version check
+            final int versionNumber = Integer.parseInt(
+                    parser.getAttributeValue(NAMESPACE, ATTR_VERSION));
+            if (versionNumber != SUPPORTED_VERSION) {
+                throw new RuntimeException("Support version:"
+                        + SUPPORTED_VERSION + " only, got version:" + versionNumber);
+            }
+
+            // Get all zones configured under <zones> tag
+            while (parser.next() != XmlPullParser.END_TAG) {
+                if (parser.getEventType() != XmlPullParser.START_TAG) continue;
+                if (TAG_AUDIO_ZONES.equals(parser.getName())) {
+                    parseAudioZones(parser, carAudioZones);
+                } else {
+                    skip(parser);
+                }
+            }
+        } catch (Exception e) {
+            Log.e(CarLog.TAG_AUDIO, "Error parsing unified car audio configuration", e);
+        }
+        return carAudioZones.toArray(new CarAudioZone[0]);
+    }
+
+    private void parseAudioZones(XmlPullParser parser, List<CarAudioZone> carAudioZones)
+            throws XmlPullParserException, IOException {
+        while (parser.next() != XmlPullParser.END_TAG) {
+            if (parser.getEventType() != XmlPullParser.START_TAG) continue;
+            if (TAG_AUDIO_ZONE.equals(parser.getName())) {
+                carAudioZones.add(parseAudioZone(parser));
+            } else {
+                skip(parser);
+            }
+        }
+    }
+
+    private CarAudioZone parseAudioZone(XmlPullParser parser)
+            throws XmlPullParserException, IOException {
+        final boolean isPrimary = Boolean.parseBoolean(
+                parser.getAttributeValue(NAMESPACE, ATTR_IS_PRIMARY));
+        final String zoneName = parser.getAttributeValue(NAMESPACE, ATTR_ZONE_NAME);
+
+        CarAudioZone zone = new CarAudioZone(
+                isPrimary ? CarAudioManager.PRIMARY_AUDIO_ZONE : getNextSecondaryZoneId(),
+                zoneName);
+        while (parser.next() != XmlPullParser.END_TAG) {
+            if (parser.getEventType() != XmlPullParser.START_TAG) continue;
+            // Expect one <volumeGroups> in one audio zone
+            if (TAG_VOLUME_GROUPS.equals(parser.getName())) {
+                parseVolumeGroups(parser, zone);
+            } else {
+                skip(parser);
+            }
+        }
+        return zone;
+    }
+
+    private void parseVolumeGroups(XmlPullParser parser, CarAudioZone zone)
+            throws XmlPullParserException, IOException {
+        int groupId = 0;
+        while (parser.next() != XmlPullParser.END_TAG) {
+            if (parser.getEventType() != XmlPullParser.START_TAG) continue;
+            if (TAG_VOLUME_GROUP.equals(parser.getName())) {
+                zone.addVolumeGroup(parseVolumeGroup(parser, zone.getId(), groupId));
+                groupId++;
+            } else {
+                skip(parser);
+            }
+        }
+    }
+
+    private CarVolumeGroup parseVolumeGroup(XmlPullParser parser, int zoneId, int groupId)
+            throws XmlPullParserException, IOException {
+        final CarVolumeGroup group = new CarVolumeGroup(mContext, zoneId, groupId);
+        while (parser.next() != XmlPullParser.END_TAG) {
+            if (parser.getEventType() != XmlPullParser.START_TAG) continue;
+            if (TAG_AUDIO_DEVICE.equals(parser.getName())) {
+                String address = parser.getAttributeValue(NAMESPACE, ATTR_DEVICE_ADDRESS);
+                parseVolumeGroupContexts(parser, group,
+                        CarAudioDeviceInfo.parseDeviceAddress(address));
+            } else {
+                skip(parser);
+            }
+        }
+        return group;
+    }
+
+    private void parseVolumeGroupContexts(
+            XmlPullParser parser, CarVolumeGroup group, int busNumber)
+            throws XmlPullParserException, IOException {
+        while (parser.next() != XmlPullParser.END_TAG) {
+            if (parser.getEventType() != XmlPullParser.START_TAG) continue;
+            if (TAG_CONTEXT.equals(parser.getName())) {
+                group.bind(
+                        parseContextNumber(parser.getAttributeValue(NAMESPACE, ATTR_CONTEXT_NAME)),
+                        busNumber, mBusToCarAudioDeviceInfo.get(busNumber));
+            }
+            // Always skip to upper level since we're at the lowest.
+            skip(parser);
+        }
+    }
+
+    private void skip(XmlPullParser parser) throws XmlPullParserException, IOException {
+        if (parser.getEventType() != XmlPullParser.START_TAG) {
+            throw new IllegalStateException();
+        }
+        int depth = 1;
+        while (depth != 0) {
+            switch (parser.next()) {
+                case XmlPullParser.END_TAG:
+                    depth--;
+                    break;
+                case XmlPullParser.START_TAG:
+                    depth++;
+                    break;
+            }
+        }
+    }
+
+    private int parseContextNumber(String context) {
+        return CONTEXT_NAME_MAP.getOrDefault(context.toLowerCase(), ContextNumber.INVALID);
+    }
+
+    private int getNextSecondaryZoneId() {
+        int zoneId = mNextSecondaryZoneId;
+        mNextSecondaryZoneId += 1;
+        return zoneId;
+    }
+}
diff --git a/service/src/com/android/car/audio/CarAudioZonesHelperLegacy.java b/service/src/com/android/car/audio/CarAudioZonesHelperLegacy.java
new file mode 100644
index 0000000..fb5481d
--- /dev/null
+++ b/service/src/com/android/car/audio/CarAudioZonesHelperLegacy.java
@@ -0,0 +1,148 @@
+/*
+ * Copyright (C) 2018 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.car.audio;
+
+import android.annotation.NonNull;
+import android.annotation.XmlRes;
+import android.car.media.CarAudioManager;
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.content.res.XmlResourceParser;
+import android.hardware.automotive.audiocontrol.V1_0.IAudioControl;
+import android.os.RemoteException;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.util.SparseArray;
+import android.util.SparseIntArray;
+import android.util.Xml;
+
+import com.android.car.CarLog;
+import com.android.car.R;
+
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * A helper class loads volume groups from car_volume_groups.xml configuration into one zone.
+ *
+ * @deprecated This is replaced by {@link CarAudioZonesHelper}.
+ */
+@Deprecated
+/* package */ class CarAudioZonesHelperLegacy implements CarAudioService.CarAudioZonesLoader {
+
+    private static final String TAG_VOLUME_GROUPS = "volumeGroups";
+    private static final String TAG_GROUP = "group";
+    private static final String TAG_CONTEXT = "context";
+
+    private final Context mContext;
+    private final @XmlRes int mXmlConfiguration;
+    private final SparseIntArray mContextToBus;
+    private final SparseArray<CarAudioDeviceInfo> mBusToCarAudioDeviceInfo;
+
+    CarAudioZonesHelperLegacy(Context context, @XmlRes int xmlConfiguration,
+            @NonNull SparseArray<CarAudioDeviceInfo> busToCarAudioDeviceInfo,
+            @NonNull IAudioControl audioControl) {
+        mContext = context;
+        mXmlConfiguration = xmlConfiguration;
+        mBusToCarAudioDeviceInfo = busToCarAudioDeviceInfo;
+
+        // Initialize context => bus mapping once.
+        mContextToBus = new SparseIntArray();
+        try {
+            for (int contextNumber : CarAudioDynamicRouting.CONTEXT_NUMBERS) {
+                mContextToBus.put(contextNumber, audioControl.getBusForContext(contextNumber));
+            }
+        } catch (RemoteException e) {
+            Log.e(CarLog.TAG_AUDIO, "Failed to query IAudioControl HAL", e);
+            e.rethrowAsRuntimeException();
+        }
+    }
+
+    @Override
+    public CarAudioZone[] loadAudioZones() {
+        final CarAudioZone zone = new CarAudioZone(CarAudioManager.PRIMARY_AUDIO_ZONE,
+                "Primary zone");
+        for (CarVolumeGroup group : loadVolumeGroups()) {
+            zone.addVolumeGroup(group);
+            // Binding audio device to volume group.
+            for (int contextNumber : group.getContexts()) {
+                int busNumber = mContextToBus.get(contextNumber);
+                group.bind(contextNumber, busNumber, mBusToCarAudioDeviceInfo.get(busNumber));
+            }
+        }
+        return new CarAudioZone[] { zone };
+    }
+
+    /**
+     * @return all {@link CarVolumeGroup} read from configuration.
+     */
+    private List<CarVolumeGroup> loadVolumeGroups() {
+        List<CarVolumeGroup> carVolumeGroups = new ArrayList<>();
+        try (XmlResourceParser parser = mContext.getResources().getXml(mXmlConfiguration)) {
+            AttributeSet attrs = Xml.asAttributeSet(parser);
+            int type;
+            // Traverse to the first start tag
+            while ((type = parser.next()) != XmlResourceParser.END_DOCUMENT
+                    && type != XmlResourceParser.START_TAG) {
+                // ignored
+            }
+
+            if (!TAG_VOLUME_GROUPS.equals(parser.getName())) {
+                throw new RuntimeException("Meta-data does not start with volumeGroups tag");
+            }
+            int outerDepth = parser.getDepth();
+            int id = 0;
+            while ((type = parser.next()) != XmlResourceParser.END_DOCUMENT
+                    && (type != XmlResourceParser.END_TAG || parser.getDepth() > outerDepth)) {
+                if (type == XmlResourceParser.END_TAG) {
+                    continue;
+                }
+                if (TAG_GROUP.equals(parser.getName())) {
+                    carVolumeGroups.add(parseVolumeGroup(id, attrs, parser));
+                    id++;
+                }
+            }
+        } catch (Exception e) {
+            Log.e(CarLog.TAG_AUDIO, "Error parsing volume groups configuration", e);
+        }
+        return carVolumeGroups;
+    }
+
+    private CarVolumeGroup parseVolumeGroup(int id, AttributeSet attrs, XmlResourceParser parser)
+            throws XmlPullParserException, IOException {
+        List<Integer> contexts = new ArrayList<>();
+        int type;
+        int innerDepth = parser.getDepth();
+        while ((type = parser.next()) != XmlResourceParser.END_DOCUMENT
+                && (type != XmlResourceParser.END_TAG || parser.getDepth() > innerDepth)) {
+            if (type == XmlResourceParser.END_TAG) {
+                continue;
+            }
+            if (TAG_CONTEXT.equals(parser.getName())) {
+                TypedArray c = mContext.getResources().obtainAttributes(
+                        attrs, R.styleable.volumeGroups_context);
+                contexts.add(c.getInt(R.styleable.volumeGroups_context_context, -1));
+                c.recycle();
+            }
+        }
+
+        return new CarVolumeGroup(mContext, CarAudioManager.PRIMARY_AUDIO_ZONE, id,
+                contexts.stream().mapToInt(i -> i).filter(i -> i >= 0).toArray());
+    }
+}
diff --git a/service/src/com/android/car/audio/CarVolumeGroup.java b/service/src/com/android/car/audio/CarVolumeGroup.java
index eff3b4c..eb3cc4f 100644
--- a/service/src/com/android/car/audio/CarVolumeGroup.java
+++ b/service/src/com/android/car/audio/CarVolumeGroup.java
@@ -29,7 +29,9 @@
 import com.android.internal.util.Preconditions;
 
 import java.io.PrintWriter;
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.List;
 
 /**
  * A class encapsulates a volume group in car.
@@ -41,10 +43,10 @@
 /* package */ final class CarVolumeGroup {
 
     private final ContentResolver mContentResolver;
+    private final int mZoneId;
     private final int mId;
-    private final int[] mContexts;
     private final SparseIntArray mContextToBus = new SparseIntArray();
-    private final SparseArray<CarAudioDeviceInfo> mBusToCarAudioDeviceInfos = new SparseArray<>();
+    private final SparseArray<CarAudioDeviceInfo> mBusToCarAudioDeviceInfo = new SparseArray<>();
 
     private int mDefaultGain = Integer.MIN_VALUE;
     private int mMaxGain = Integer.MIN_VALUE;
@@ -53,30 +55,78 @@
     private int mStoredGainIndex;
     private int mCurrentGainIndex = -1;
 
-    CarVolumeGroup(Context context, int id, @NonNull int[] contexts) {
+    /**
+     * Constructs a {@link CarVolumeGroup} instance
+     * @param context {@link Context} instance
+     * @param zoneId Audio zone this volume group belongs to
+     * @param id ID of this volume group
+     */
+    CarVolumeGroup(Context context, int zoneId, int id) {
         mContentResolver = context.getContentResolver();
+        mZoneId = zoneId;
         mId = id;
-        mContexts = contexts;
-
         mStoredGainIndex = Settings.Global.getInt(mContentResolver,
-                CarAudioManager.getVolumeSettingsKeyForGroup(mId), -1);
+                CarAudioService.getVolumeSettingsKeyForGroup(mZoneId, mId), -1);
     }
 
-    int getId() {
-        return mId;
+    /**
+     * Constructs a {@link CarVolumeGroup} instance
+     * @param context {@link Context} instance
+     * @param zoneId Audio zone this volume group belongs to
+     * @param id ID of this volume group
+     * @param contexts Pre-populated array of car contexts, for legacy car_volume_groups.xml only
+     * @deprecated In favor of {@link #CarVolumeGroup(Context, int, int)}
+     */
+    @Deprecated
+    CarVolumeGroup(Context context, int zoneId, int id, @NonNull int[] contexts) {
+        this(context, zoneId, id);
+        // Deal with the pre-populated car audio contexts
+        for (int audioContext : contexts) {
+            mContextToBus.put(audioContext, -1);
+        }
     }
 
+    /**
+     * @param busNumber Physical bus number for the audio device port
+     * @return {@link CarAudioDeviceInfo} associated with a given bus number
+     */
+    CarAudioDeviceInfo getCarAudioDeviceInfoForBus(int busNumber) {
+        return mBusToCarAudioDeviceInfo.get(busNumber);
+    }
+
+    /**
+     * @return Array of context numbers in this {@link CarVolumeGroup}
+     */
     int[] getContexts() {
-        return mContexts;
+        final int[] contextNumbers = new int[mContextToBus.size()];
+        for (int i = 0; i < contextNumbers.length; i++) {
+            contextNumbers[i] = mContextToBus.keyAt(i);
+        }
+        return contextNumbers;
+    }
+
+    /**
+     * @param busNumber Physical bus number for the audio device port
+     * @return Array of context numbers assigned to a given bus number
+     */
+    int[] getContextsForBus(int busNumber) {
+        List<Integer> contextNumbers = new ArrayList<>();
+        for (int i = 0; i < mContextToBus.size(); i++) {
+            int value = mContextToBus.valueAt(i);
+            if (value == busNumber) {
+                contextNumbers.add(mContextToBus.keyAt(i));
+            }
+        }
+        return contextNumbers.stream().mapToInt(i -> i).toArray();
     }
 
     /**
      * @return Array of bus numbers in this {@link CarVolumeGroup}
      */
     int[] getBusNumbers() {
-        final int[] busNumbers = new int[mBusToCarAudioDeviceInfos.size()];
+        final int[] busNumbers = new int[mBusToCarAudioDeviceInfo.size()];
         for (int i = 0; i < busNumbers.length; i++) {
-            busNumbers[i] = mBusToCarAudioDeviceInfos.keyAt(i);
+            busNumbers[i] = mBusToCarAudioDeviceInfo.keyAt(i);
         }
         return busNumbers;
     }
@@ -92,7 +142,7 @@
      * @param info {@link CarAudioDeviceInfo} instance relates to the physical bus
      */
     void bind(int contextNumber, int busNumber, CarAudioDeviceInfo info) {
-        if (mBusToCarAudioDeviceInfos.size() == 0) {
+        if (mBusToCarAudioDeviceInfo.size() == 0) {
             mStepSize = info.getAudioGain().stepValue();
         } else {
             Preconditions.checkArgument(
@@ -101,7 +151,7 @@
         }
 
         mContextToBus.put(contextNumber, busNumber);
-        mBusToCarAudioDeviceInfos.put(busNumber, info);
+        mBusToCarAudioDeviceInfo.put(busNumber, info);
 
         if (info.getDefaultGain() > mDefaultGain) {
             // We're arbitrarily selecting the highest bus default gain as the group's default.
@@ -156,14 +206,14 @@
                         + gainInMillibels + "index "
                         + gainIndex);
 
-        for (int i = 0; i < mBusToCarAudioDeviceInfos.size(); i++) {
-            CarAudioDeviceInfo info = mBusToCarAudioDeviceInfos.valueAt(i);
+        for (int i = 0; i < mBusToCarAudioDeviceInfo.size(); i++) {
+            CarAudioDeviceInfo info = mBusToCarAudioDeviceInfo.valueAt(i);
             info.setCurrentGain(gainInMillibels);
         }
 
         mCurrentGainIndex = gainIndex;
         Settings.Global.putInt(mContentResolver,
-                CarAudioManager.getVolumeSettingsKeyForGroup(mId), gainIndex);
+                CarAudioService.getVolumeSettingsKeyForGroup(mZoneId, mId), gainIndex);
     }
 
     // Given a group level gain index, return the computed gain in millibells
@@ -186,33 +236,35 @@
     @Nullable
     AudioDevicePort getAudioDevicePortForContext(int contextNumber) {
         final int busNumber = mContextToBus.get(contextNumber, -1);
-        if (busNumber < 0 || mBusToCarAudioDeviceInfos.get(busNumber) == null) {
+        if (busNumber < 0 || mBusToCarAudioDeviceInfo.get(busNumber) == null) {
             return null;
         }
-        return mBusToCarAudioDeviceInfos.get(busNumber).getAudioDevicePort();
+        return mBusToCarAudioDeviceInfo.get(busNumber).getAudioDevicePort();
     }
 
     @Override
     public String toString() {
         return "CarVolumeGroup id: " + mId
                 + " currentGainIndex: " + mCurrentGainIndex
-                + " contexts: " + Arrays.toString(mContexts)
+                + " contexts: " + Arrays.toString(getContexts())
                 + " buses: " + Arrays.toString(getBusNumbers());
     }
 
     /** Writes to dumpsys output */
-    void dump(PrintWriter writer) {
-        writer.println("CarVolumeGroup " + mId);
-        writer.printf("\tGain in millibel (min / max / default/ current): %d %d %d %d\n",
-                mMinGain, mMaxGain, mDefaultGain, getGainForIndex(mCurrentGainIndex));
-        writer.printf("\tGain in index (min / max / default / current): %d %d %d %d\n",
-                getMinGainIndex(), getMaxGainIndex(), getDefaultGainIndex(), mCurrentGainIndex);
+    void dump(String indent, PrintWriter writer) {
+        writer.printf("%sCarVolumeGroup(%d)\n", indent, mId);
+        writer.printf("%sGain values (min / max / default/ current): %d %d %d %d\n",
+                indent, mMinGain, mMaxGain,
+                mDefaultGain, getGainForIndex(mCurrentGainIndex));
+        writer.printf("%sGain indexes (min / max / default / current): %d %d %d %d\n",
+                indent, getMinGainIndex(), getMaxGainIndex(),
+                getDefaultGainIndex(), mCurrentGainIndex);
         for (int i = 0; i < mContextToBus.size(); i++) {
-            writer.printf("\tContext: %s -> Bus: %d\n",
+            writer.printf("%sContext: %s -> Bus: %d\n", indent,
                     ContextNumber.toString(mContextToBus.keyAt(i)), mContextToBus.valueAt(i));
         }
-        for (int i = 0; i < mBusToCarAudioDeviceInfos.size(); i++) {
-            mBusToCarAudioDeviceInfos.valueAt(i).dump(writer);
+        for (int i = 0; i < mBusToCarAudioDeviceInfo.size(); i++) {
+            mBusToCarAudioDeviceInfo.valueAt(i).dump(indent, writer);
         }
         // Empty line for comfortable reading
         writer.println();
diff --git a/service/src/com/android/car/audio/CarVolumeGroupsHelper.java b/service/src/com/android/car/audio/CarVolumeGroupsHelper.java
deleted file mode 100644
index eddcd4f..0000000
--- a/service/src/com/android/car/audio/CarVolumeGroupsHelper.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (C) 2018 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.car.audio;
-
-import android.annotation.XmlRes;
-import android.content.Context;
-import android.content.res.TypedArray;
-import android.content.res.XmlResourceParser;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.util.Xml;
-
-import com.android.car.CarLog;
-import com.android.car.R;
-
-import org.xmlpull.v1.XmlPullParserException;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * A helper class loads all volume groups from the configuration XML file.
- */
-/* package */ class CarVolumeGroupsHelper {
-
-    private static final String TAG_VOLUME_GROUPS = "volumeGroups";
-    private static final String TAG_GROUP = "group";
-    private static final String TAG_CONTEXT = "context";
-
-    private final Context mContext;
-    private final @XmlRes int mXmlConfiguration;
-
-    CarVolumeGroupsHelper(Context context, @XmlRes int xmlConfiguration) {
-        mContext = context;
-        mXmlConfiguration = xmlConfiguration;
-    }
-
-    /**
-     * @return all {@link CarVolumeGroup} read from configuration.
-     */
-    CarVolumeGroup[] loadVolumeGroups() {
-        List<CarVolumeGroup> carVolumeGroups = new ArrayList<>();
-        try (XmlResourceParser parser = mContext.getResources().getXml(mXmlConfiguration)) {
-            AttributeSet attrs = Xml.asAttributeSet(parser);
-            int type;
-            // Traverse to the first start tag
-            while ((type = parser.next()) != XmlResourceParser.END_DOCUMENT
-                    && type != XmlResourceParser.START_TAG) {
-                // ignored
-            }
-
-            if (!TAG_VOLUME_GROUPS.equals(parser.getName())) {
-                throw new RuntimeException("Meta-data does not start with volumeGroups tag");
-            }
-            int outerDepth = parser.getDepth();
-            int id = 0;
-            while ((type = parser.next()) != XmlResourceParser.END_DOCUMENT
-                    && (type != XmlResourceParser.END_TAG || parser.getDepth() > outerDepth)) {
-                if (type == XmlResourceParser.END_TAG) {
-                    continue;
-                }
-                if (TAG_GROUP.equals(parser.getName())) {
-                    carVolumeGroups.add(parseVolumeGroup(id, attrs, parser));
-                    id++;
-                }
-            }
-        } catch (Exception e) {
-            Log.e(CarLog.TAG_AUDIO, "Error parsing volume groups configuration", e);
-        }
-        return carVolumeGroups.toArray(new CarVolumeGroup[carVolumeGroups.size()]);
-    }
-
-    private CarVolumeGroup parseVolumeGroup(int id, AttributeSet attrs, XmlResourceParser parser)
-            throws XmlPullParserException, IOException {
-        int type;
-
-        List<Integer> contexts = new ArrayList<>();
-        int innerDepth = parser.getDepth();
-        while ((type = parser.next()) != XmlResourceParser.END_DOCUMENT
-                && (type != XmlResourceParser.END_TAG || parser.getDepth() > innerDepth)) {
-            if (type == XmlResourceParser.END_TAG) {
-                continue;
-            }
-            if (TAG_CONTEXT.equals(parser.getName())) {
-                TypedArray c = mContext.getResources().obtainAttributes(
-                        attrs, R.styleable.volumeGroups_context);
-                contexts.add(c.getInt(R.styleable.volumeGroups_context_context, -1));
-                c.recycle();
-            }
-        }
-
-        return new CarVolumeGroup(mContext, id,
-                contexts.stream().mapToInt(i -> i).filter(i -> i >= 0).toArray());
-    }
-}
diff --git a/service/src/com/android/car/cluster/InstrumentClusterService.java b/service/src/com/android/car/cluster/InstrumentClusterService.java
index beb4427..fd16da5 100644
--- a/service/src/com/android/car/cluster/InstrumentClusterService.java
+++ b/service/src/com/android/car/cluster/InstrumentClusterService.java
@@ -15,55 +15,39 @@
  */
 package com.android.car.cluster;
 
-import static android.content.pm.PackageManager.PERMISSION_GRANTED;
-
 import android.annotation.Nullable;
 import android.annotation.SystemApi;
-import android.app.ActivityOptions;
-import android.car.Car;
 import android.car.CarAppFocusManager;
-import android.car.cluster.CarInstrumentClusterManager;
 import android.car.cluster.IInstrumentClusterManagerCallback;
 import android.car.cluster.IInstrumentClusterManagerService;
 import android.car.cluster.renderer.IInstrumentCluster;
-import android.car.cluster.renderer.IInstrumentClusterCallback;
 import android.car.cluster.renderer.IInstrumentClusterNavigation;
-import android.car.cluster.renderer.InstrumentClusterRenderingService;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
 import android.content.ServiceConnection;
-import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
-import android.os.Binder;
-import android.os.Bundle;
 import android.os.Handler;
 import android.os.IBinder;
-import android.os.IBinder.DeathRecipient;
 import android.os.Message;
-import android.os.Process;
 import android.os.RemoteException;
 import android.os.UserHandle;
 import android.text.TextUtils;
 import android.util.Log;
-import android.util.Pair;
 import android.view.KeyEvent;
 
 import com.android.car.AppFocusService;
 import com.android.car.AppFocusService.FocusOwnershipCallback;
 import com.android.car.CarInputService;
 import com.android.car.CarInputService.KeyEventListener;
+import com.android.car.CarLocalServices;
 import com.android.car.CarLog;
 import com.android.car.CarServiceBase;
 import com.android.car.R;
+import com.android.car.user.CarUserService;
 import com.android.internal.annotations.GuardedBy;
 
 import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.Objects;
 
 /**
  * Service responsible for interaction with car's instrument cluster.
@@ -71,41 +55,39 @@
  * @hide
  */
 @SystemApi
-public class InstrumentClusterService implements CarServiceBase,
-        FocusOwnershipCallback, KeyEventListener {
-
+public class InstrumentClusterService implements CarServiceBase, FocusOwnershipCallback,
+        KeyEventListener {
     private static final String TAG = CarLog.TAG_CLUSTER;
-    private static final Boolean DBG = false;
+    private static final ContextOwner NO_OWNER = new ContextOwner(0, 0);
 
     private final Context mContext;
-
     private final AppFocusService mAppFocusService;
     private final CarInputService mCarInputService;
-    private final PackageManager mPackageManager;
-    private final Object mSync = new Object();
-
-    private final ClusterServiceCallback mClusterCallback = new ClusterServiceCallback();
+    /**
+     * TODO: (b/121277787) Remove this on master.
+     * @deprecated CarInstrumentClusterManager is being deprecated.
+     */
+    @Deprecated
     private final ClusterManagerService mClusterManagerService = new ClusterManagerService();
-
+    private final Object mSync = new Object();
     @GuardedBy("mSync")
-    private ContextOwner mNavContextOwner;
+    private ContextOwner mNavContextOwner = NO_OWNER;
     @GuardedBy("mSync")
     private IInstrumentCluster mRendererService;
-    @GuardedBy("mSync")
-    private final HashMap<String, ClusterActivityInfo> mActivityInfoByCategory = new HashMap<>();
-    @GuardedBy("mSync")
-    private final HashMap<IBinder, ManagerCallbackInfo> mManagerCallbacks = new HashMap<>();
-
     // If renderer service crashed / stopped and this class fails to rebind with it immediately,
     // we should wait some time before next attempt. This may happen during APK update for example.
     private DeferredRebinder mDeferredRebinder;
-
+    // Whether {@link android.car.cluster.renderer.InstrumentClusterRendererService} is bound
+    // (although not necessarily connected)
     private boolean mRendererBound = false;
 
+    /**
+     * Connection to {@link android.car.cluster.renderer.InstrumentClusterRendererService}
+     */
     private final ServiceConnection mRendererServiceConnection = new ServiceConnection() {
         @Override
         public void onServiceConnected(ComponentName name, IBinder binder) {
-            if (DBG) {
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
                 Log.d(TAG, "onServiceConnected, name: " + name + ", binder: " + binder);
             }
             IInstrumentCluster service = IInstrumentCluster.Stub.asInterface(binder);
@@ -114,14 +96,17 @@
                 mRendererService = service;
                 navContextOwner = mNavContextOwner;
             }
-            if (navContextOwner !=  null && service != null) {
-                notifyNavContextOwnerChanged(service, navContextOwner.uid, navContextOwner.pid);
+            if (navContextOwner != null && service != null) {
+                notifyNavContextOwnerChanged(service, navContextOwner);
             }
         }
 
         @Override
         public void onServiceDisconnected(ComponentName name) {
-            Log.d(TAG, "onServiceDisconnected, name: " + name);
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "onServiceDisconnected, name: " + name);
+            }
+            mContext.unbindService(this);
             mRendererBound = false;
 
             synchronized (mSync) {
@@ -140,23 +125,26 @@
         mContext = context;
         mAppFocusService = appFocusService;
         mCarInputService = carInputService;
-        mPackageManager = mContext.getPackageManager();
     }
 
     @Override
     public void init() {
-        if (DBG) {
+        if (Log.isLoggable(TAG, Log.DEBUG)) {
             Log.d(TAG, "init");
         }
 
         mAppFocusService.registerContextOwnerChangedCallback(this /* FocusOwnershipCallback */);
         mCarInputService.setInstrumentClusterKeyListener(this /* KeyEventListener */);
-        mRendererBound = bindInstrumentClusterRendererService();
+        // TODO(b/124246323) Start earlier once data storage for cluster is clarified
+        //  for early boot.
+        CarLocalServices.getService(CarUserService.class).runOnUser0Unlock(() -> {
+            mRendererBound = bindInstrumentClusterRendererService();
+        });
     }
 
     @Override
     public void release() {
-        if (DBG) {
+        if (Log.isLoggable(TAG, Log.DEBUG)) {
             Log.d(TAG, "release");
         }
 
@@ -172,51 +160,51 @@
         writer.println("**" + getClass().getSimpleName() + "**");
         writer.println("bound with renderer: " + mRendererBound);
         writer.println("renderer service: " + mRendererService);
+        writer.println("context owner: " + mNavContextOwner);
     }
 
     @Override
     public void onFocusAcquired(int appType, int uid, int pid) {
-        if (appType != CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION) {
-            return;
-        }
-
-        IInstrumentCluster service;
-        synchronized (mSync) {
-            mNavContextOwner = new ContextOwner(uid, pid);
-            service = mRendererService;
-        }
-
-        if (service != null) {
-            notifyNavContextOwnerChanged(service, uid, pid);
-        }
+        changeNavContextOwner(appType, uid, pid, true);
     }
 
     @Override
     public void onFocusAbandoned(int appType, int uid, int pid) {
+        changeNavContextOwner(appType, uid, pid, false);
+    }
+
+    private void changeNavContextOwner(int appType, int uid, int pid, boolean acquire) {
         if (appType != CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION) {
             return;
         }
 
         IInstrumentCluster service;
+        ContextOwner requester = new ContextOwner(uid, pid);
+        ContextOwner newOwner = acquire ? requester : NO_OWNER;
         synchronized (mSync) {
-            if (mNavContextOwner == null
-                    || mNavContextOwner.uid != uid
-                    || mNavContextOwner.pid != pid) {
-                return;  // Nothing to do here, no active focus or not owned by this client.
+            if ((acquire && Objects.equals(mNavContextOwner, requester))
+                    || (!acquire && !Objects.equals(mNavContextOwner, requester))) {
+                // Nothing to do here. Either the same owner is acquiring twice, or someone is
+                // abandoning a focus they didn't have.
+                Log.w(TAG, "Invalid nav context owner change (acquiring: " + acquire
+                        + "), current owner: [" + mNavContextOwner
+                        + "], requester: [" + requester + "]");
+                return;
             }
 
-            mNavContextOwner = null;
+            mNavContextOwner = newOwner;
             service = mRendererService;
         }
 
         if (service != null) {
-            notifyNavContextOwnerChanged(service, 0, 0);
+            notifyNavContextOwnerChanged(service, newOwner);
         }
     }
 
-    private static void notifyNavContextOwnerChanged(IInstrumentCluster service, int uid, int pid) {
+    private static void notifyNavContextOwnerChanged(IInstrumentCluster service,
+            ContextOwner owner) {
         try {
-            service.setNavigationContextOwner(uid, pid);
+            service.setNavigationContextOwner(owner.uid, owner.pid);
         } catch (RemoteException e) {
             Log.e(TAG, "Failed to call setNavigationContextOwner", e);
         }
@@ -233,23 +221,14 @@
 
         Intent intent = new Intent();
         intent.setComponent(ComponentName.unflattenFromString(rendererService));
-        Bundle extras = new Bundle();
-        extras.putBinder(
-                InstrumentClusterRenderingService.EXTRA_KEY_CALLBACK_SERVICE,
-                mClusterCallback);
-        intent.putExtras(extras);
         return mContext.bindServiceAsUser(intent, mRendererServiceConnection,
                 Context.BIND_AUTO_CREATE | Context.BIND_IMPORTANT, UserHandle.SYSTEM);
     }
 
     @Nullable
     public IInstrumentClusterNavigation getNavigationService() {
-        IInstrumentCluster service;
-        synchronized (mSync) {
-            service = mRendererService;
-        }
-
         try {
+            IInstrumentCluster service = getInstrumentClusterRendererService();
             return service == null ? null : service.getNavigationService();
         } catch (RemoteException e) {
             Log.e(TAG, "getNavigationServiceBinder" , e);
@@ -257,21 +236,21 @@
         }
     }
 
+    /**
+     * @deprecated {@link android.car.cluster.CarInstrumentClusterManager} is now deprecated.
+     */
+    @Deprecated
     public IInstrumentClusterManagerService.Stub getManagerService() {
         return mClusterManagerService;
     }
 
     @Override
-    public boolean onKeyEvent(KeyEvent event) {
-        if (DBG) {
+    public void onKeyEvent(KeyEvent event) {
+        if (Log.isLoggable(TAG, Log.DEBUG)) {
             Log.d(TAG, "InstrumentClusterService#onKeyEvent: " + event);
         }
 
-        IInstrumentCluster service;
-        synchronized (mSync) {
-            service = mRendererService;
-        }
-
+        IInstrumentCluster service = getInstrumentClusterRendererService();
         if (service != null) {
             try {
                 service.onKeyEvent(event);
@@ -279,7 +258,14 @@
                 Log.e(TAG, "onKeyEvent", e);
             }
         }
-        return true;
+    }
+
+    private IInstrumentCluster getInstrumentClusterRendererService() {
+        IInstrumentCluster service;
+        synchronized (mSync) {
+            service = mRendererService;
+        }
+        return service;
     }
 
     private static class ContextOwner {
@@ -290,257 +276,47 @@
             this.uid = uid;
             this.pid = pid;
         }
-    }
 
-    private static class ClusterActivityInfo {
-        Bundle launchOptions;  // ActivityOptions
-        Bundle state;          // ClusterActivityState
-    }
-
-    private void enforcePermission(String permission) {
-        int callingUid = Binder.getCallingUid();
-        int callingPid = Binder.getCallingPid();
-        if (Binder.getCallingUid() == Process.myUid()) {
-            if (mContext.checkCallingOrSelfPermission(permission) != PERMISSION_GRANTED) {
-                throw new SecurityException("Permission " + permission + " is not granted to "
-                        + "client {uid: " + callingUid + ", pid: " + callingPid + "}");
-            }
-        }
-    }
-
-    private void enforceClusterControlPermission() {
-        enforcePermission(Car.PERMISSION_CAR_INSTRUMENT_CLUSTER_CONTROL);
-    }
-
-    private void doStartClusterActivity(Intent intent) {
-        enforceClusterControlPermission();
-
-        // Category from given intent should match category from cluster vendor implementation.
-        List<ResolveInfo> resolveList = mPackageManager.queryIntentActivities(intent,
-                PackageManager.GET_RESOLVED_FILTER);
-        if (resolveList == null || resolveList.isEmpty()) {
-            Log.w(TAG, "Failed to resolve an intent: " + intent);
-            return;
-        }
-
-        resolveList = checkPermission(resolveList, Car.PERMISSION_CAR_DISPLAY_IN_CLUSTER);
-        if (resolveList.isEmpty()) {
-            Log.w(TAG, String.format("intent didn't have permission %s: %s",
-                    Car.PERMISSION_CAR_DISPLAY_IN_CLUSTER, intent));
-            return;
-        }
-
-        // TODO(b/63861009): we may have multiple navigation apps that eligible to be launched in
-        // the cluster. We need to resolve intent that may have multiple activity candidates, right
-        // now we pickup the first one that matches registered category (resolveList is sorted
-        // priority).
-        Pair<ResolveInfo, ClusterActivityInfo> attributedResolveInfo =
-                findClusterActivityOptions(resolveList);
-        if (attributedResolveInfo == null) {
-            Log.w(TAG, "Unable to start an activity with intent: " + intent + " in the cluster: "
-                    + "category intent didn't match with any categories from vendor "
-                    + "implementation");
-            return;
-        }
-        ClusterActivityInfo opts = attributedResolveInfo.second;
-
-        // Intent was already checked for permission and resolved, make it explicit.
-        intent.setComponent(attributedResolveInfo.first.getComponentInfo().getComponentName());
-
-        intent.putExtra(CarInstrumentClusterManager.KEY_EXTRA_ACTIVITY_STATE, opts.state);
-        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-        // Virtual display could be private and not available to calling process.
-        final long token = Binder.clearCallingIdentity();
-        try {
-            mContext.startActivityAsUser(intent, opts.launchOptions, UserHandle.CURRENT);
-            Log.i(TAG, String.format("activity launched: %s (options: %s, displayId: %d)",
-                    opts.launchOptions, intent, new ActivityOptions(opts.launchOptions)
-                            .getLaunchDisplayId()));
-        } finally {
-            Binder.restoreCallingIdentity(token);
-        }
-    }
-
-    private List<ResolveInfo> checkPermission(List<ResolveInfo> resolveList,
-            String permission) {
-        List<ResolveInfo> permittedResolveList = new ArrayList<>(resolveList.size());
-        for (ResolveInfo info : resolveList) {
-            String pkgName = info.getComponentInfo().packageName;
-            if (mPackageManager.checkPermission(permission, pkgName) == PERMISSION_GRANTED) {
-                permittedResolveList.add(info);
-            } else {
-                Log.w(TAG, "Permission " + permission + " not granted for "
-                        + info.getComponentInfo());
-            }
-
-        }
-        return permittedResolveList;
-    }
-
-    private void doRegisterManagerCallback(IInstrumentClusterManagerCallback callback)
-            throws RemoteException {
-        enforceClusterControlPermission();
-        IBinder binder = callback.asBinder();
-
-        List<Pair<String, Bundle>> knownActivityStates = null;
-        ManagerCallbackDeathRecipient deathRecipient = new ManagerCallbackDeathRecipient(binder);
-        synchronized (mSync) {
-            if (mManagerCallbacks.containsKey(binder)) {
-                Log.w(TAG, "Manager callback already registered for binder: " + binder);
-                return;
-            }
-            mManagerCallbacks.put(binder, new ManagerCallbackInfo(callback, deathRecipient));
-            if (!mActivityInfoByCategory.isEmpty()) {
-                knownActivityStates = new ArrayList<>(mActivityInfoByCategory.size());
-                for (Map.Entry<String, ClusterActivityInfo> it : mActivityInfoByCategory.entrySet()) {
-                    knownActivityStates.add(new Pair<>(it.getKey(), it.getValue().state));
-                }
-            }
-        }
-        binder.linkToDeath(deathRecipient, 0);
-
-        // Notify manager immediately with known states.
-        if (knownActivityStates != null) {
-            for (Pair<String, Bundle> it : knownActivityStates) {
-                callback.setClusterActivityState(it.first, it.second);
-            }
-        }
-    }
-
-    private void doUnregisterManagerCallback(IBinder binder) throws RemoteException {
-        enforceClusterControlPermission();
-        ManagerCallbackInfo info;
-        synchronized (mSync) {
-            info = mManagerCallbacks.get(binder);
-            if (info == null) {
-                Log.w(TAG, "Unable to unregister manager callback binder: " + binder + " because "
-                        + "it wasn't previously registered.");
-                return;
-            }
-            mManagerCallbacks.remove(binder);
-        }
-        binder.unlinkToDeath(info.deathRecipient, 0);
-    }
-
-    @Nullable
-    private Pair<ResolveInfo, ClusterActivityInfo> findClusterActivityOptions(
-            List<ResolveInfo> resolveList) {
-        synchronized (mSync) {
-            Set<String> registeredCategories = mActivityInfoByCategory.keySet();
-
-            for (ResolveInfo resolveInfo : resolveList) {
-                if (resolveInfo.filter == null) {
-                    continue;
-                }
-                for (String category : registeredCategories) {
-                    if (resolveInfo.filter.hasCategory(category)) {
-                        ClusterActivityInfo categoryInfo = mActivityInfoByCategory.get(category);
-                        return new Pair<>(resolveInfo, categoryInfo);
-                    }
-                }
-            }
-        }
-        return null;
-    }
-
-    private class ManagerCallbackDeathRecipient implements DeathRecipient {
-        private final IBinder mBinder;
-
-        ManagerCallbackDeathRecipient(IBinder binder) {
-            mBinder = binder;
+        @Override
+        public String toString() {
+            return "uid: " + uid + ", pid: " + pid;
         }
 
         @Override
-        public void binderDied() {
-            try {
-                doUnregisterManagerCallback(mBinder);
-            } catch (RemoteException e) {
-                // Ignore, shutdown route.
-            }
+        public boolean equals(Object o) {
+            if (this == o) return true;
+            if (o == null || getClass() != o.getClass()) return false;
+            ContextOwner that = (ContextOwner) o;
+            return uid == that.uid && pid == that.pid;
+        }
+
+        @Override
+        public int hashCode() {
+            return Objects.hash(uid, pid);
         }
     }
 
+    /**
+     * TODO: (b/121277787) Remove on master
+     * @deprecated CarClusterManager is being deprecated.
+     */
+    @Deprecated
     private class ClusterManagerService extends IInstrumentClusterManagerService.Stub {
-
         @Override
         public void startClusterActivity(Intent intent) throws RemoteException {
-            doStartClusterActivity(intent);
+            // No op.
         }
 
         @Override
         public void registerCallback(IInstrumentClusterManagerCallback callback)
                 throws RemoteException {
-            doRegisterManagerCallback(callback);
+            // No op.
         }
 
         @Override
         public void unregisterCallback(IInstrumentClusterManagerCallback callback)
                 throws RemoteException {
-            doUnregisterManagerCallback(callback.asBinder());
-        }
-    }
-
-    @GuardedBy("mSync")
-    private ClusterActivityInfo getOrCreateActivityInfoLocked(String category) {
-        return mActivityInfoByCategory.computeIfAbsent(category, k -> new ClusterActivityInfo());
-    }
-
-    /** This is communication channel from vendor cluster implementation to Car Service. */
-    private class ClusterServiceCallback extends IInstrumentClusterCallback.Stub {
-
-        @Override
-        public void setClusterActivityLaunchOptions(String category, Bundle activityOptions)
-                throws RemoteException {
-            doSetActivityLaunchOptions(category, activityOptions);
-        }
-
-        @Override
-        public void setClusterActivityState(String category, Bundle clusterActivityState)
-                throws RemoteException {
-            doSetClusterActivityState(category, clusterActivityState);
-        }
-    }
-
-    /** Called from cluster vendor implementation */
-    private void doSetActivityLaunchOptions(String category, Bundle activityOptions) {
-        if (DBG) {
-            Log.d(TAG, "doSetActivityLaunchOptions, category: " + category
-                    + ", options: " + activityOptions);
-        }
-        synchronized (mSync) {
-            ClusterActivityInfo info = getOrCreateActivityInfoLocked(category);
-            info.launchOptions = activityOptions;
-        }
-    }
-
-    /** Called from cluster vendor implementation */
-    private void doSetClusterActivityState(String category, Bundle clusterActivityState)
-            throws RemoteException {
-        if (DBG) {
-            Log.d(TAG, "doSetClusterActivityState, category: " + category
-                    + ", state: " + clusterActivityState);
-        }
-
-        List<ManagerCallbackInfo> managerCallbacks;
-        synchronized (mSync) {
-            ClusterActivityInfo info = getOrCreateActivityInfoLocked(category);
-            info.state = clusterActivityState;
-            managerCallbacks = new ArrayList<>(mManagerCallbacks.values());
-        }
-
-        for (ManagerCallbackInfo cbInfo : managerCallbacks) {
-            cbInfo.callback.setClusterActivityState(category, clusterActivityState);
-        }
-    }
-
-    private static class ManagerCallbackInfo {
-        final IInstrumentClusterManagerCallback callback;
-        final ManagerCallbackDeathRecipient deathRecipient;
-
-        ManagerCallbackInfo(IInstrumentClusterManagerCallback callback,
-                ManagerCallbackDeathRecipient deathRecipient) {
-            this.callback = callback;
-            this.deathRecipient = deathRecipient;
+            // No op.
         }
     }
 
diff --git a/service/src/com/android/car/garagemode/Controller.java b/service/src/com/android/car/garagemode/Controller.java
index 33c10bc..2ddf0c2 100644
--- a/service/src/com/android/car/garagemode/Controller.java
+++ b/service/src/com/android/car/garagemode/Controller.java
@@ -18,7 +18,6 @@
 
 import android.app.job.JobScheduler;
 import android.car.Car;
-import android.car.CarNotConnectedException;
 import android.car.hardware.power.CarPowerManager;
 import android.car.hardware.power.CarPowerManager.CarPowerStateListener;
 import android.content.ComponentName;
@@ -48,12 +47,8 @@
         @Override
         public void onServiceConnected(ComponentName name, IBinder service) {
             LOG.i("Car is now connected, getting CarPowerManager service");
-            try {
-                mCarPowerManager = (CarPowerManager) mCar.getCarManager(Car.POWER_SERVICE);
-                mCarPowerManager.setListener(Controller.this);
-            } catch (CarNotConnectedException e) {
-                LOG.e("Failed to get CarPowerManager instance", e);
-            }
+            mCarPowerManager = (CarPowerManager) mCar.getCarManager(Car.POWER_SERVICE);
+            mCarPowerManager.setListener(Controller.this);
         }
 
         @Override
@@ -93,12 +88,6 @@
     }
 
     @Override
-    public void onStateChanged(int state) {
-        throw new UnsupportedOperationException(
-                "Should not be here. This API obsolete and is not used.");
-    }
-
-    @Override
     public void onStateChanged(int state, CompletableFuture<Void> future) {
         switch (state) {
             case CarPowerStateListener.SHUTDOWN_CANCELLED:
@@ -189,11 +178,7 @@
             return;
         }
         int seconds = mWakeupPolicy.getNextWakeUpInterval();
-        try {
-            mCarPowerManager.scheduleNextWakeupTime(seconds);
-        } catch (CarNotConnectedException e) {
-            LOG.e("Car is not connected.", e);
-        }
+        mCarPowerManager.scheduleNextWakeupTime(seconds);
     }
 
     private void handleSuspendExit() {
@@ -215,4 +200,4 @@
     private void handleShutdownCancelled() {
         resetGarageMode();
     }
-}
\ No newline at end of file
+}
diff --git a/service/src/com/android/car/hal/InputHalService.java b/service/src/com/android/car/hal/InputHalService.java
index c5174dc..f0993eb 100644
--- a/service/src/com/android/car/hal/InputHalService.java
+++ b/service/src/com/android/car/hal/InputHalService.java
@@ -23,35 +23,59 @@
 import android.hardware.automotive.vehicle.V2_0.VehiclePropValue;
 import android.os.SystemClock;
 import android.util.Log;
-import android.util.SparseLongArray;
+import android.util.SparseArray;
 import android.view.InputDevice;
 import android.view.KeyEvent;
 
 import com.android.car.CarLog;
+import com.android.internal.annotations.GuardedBy;
+import com.android.internal.annotations.VisibleForTesting;
 
 import java.io.PrintWriter;
 import java.util.Collection;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.function.LongSupplier;
 
 public class InputHalService extends HalServiceBase {
 
     public static final int DISPLAY_MAIN = VehicleDisplay.MAIN;
     public static final int DISPLAY_INSTRUMENT_CLUSTER = VehicleDisplay.INSTRUMENT_CLUSTER;
     private final VehicleHal mHal;
+    /** A function to retrieve the current system uptime - replaceable for testing. */
+    private final LongSupplier mUptimeSupplier;
 
     public interface InputListener {
         void onKeyEvent(KeyEvent event, int targetDisplay);
     }
 
+    /** The current press state of a key. */
+    private static class KeyState {
+        /** The timestamp (uptimeMillis) of the last ACTION_DOWN event for this key. */
+        public long mLastKeyDownTimestamp = -1;
+        /** The number of ACTION_DOWN events that have been sent for this keypress. */
+        public int mRepeatCount = 0;
+    }
+
     private static final boolean DBG = false;
 
+    @GuardedBy("this")
     private boolean mKeyInputSupported = false;
+
+    @GuardedBy("this")
     private InputListener mListener;
-    private final SparseLongArray mKeyDownTimes = new SparseLongArray();
+
+    @GuardedBy("mKeyStates")
+    private final SparseArray<KeyState> mKeyStates = new SparseArray<>();
 
     public InputHalService(VehicleHal hal) {
+        this(hal, SystemClock::uptimeMillis);
+    }
+
+    @VisibleForTesting
+    InputHalService(VehicleHal hal, LongSupplier uptimeSupplier) {
         mHal = hal;
+        mUptimeSupplier = uptimeSupplier;
     }
 
     public void setInputListener(InputListener listener) {
@@ -126,23 +150,43 @@
     }
 
     private void dispatchKeyEvent(InputListener listener, int action, int code, int display) {
-        long eventTime = SystemClock.uptimeMillis();
+        long eventTime = mUptimeSupplier.getAsLong();
 
-        if (action == KeyEvent.ACTION_DOWN) {
-            mKeyDownTimes.put(code, eventTime);
+        long downTime;
+        int repeat;
+
+        synchronized (mKeyStates) {
+            KeyState state = mKeyStates.get(code);
+            if (state == null) {
+                state = new KeyState();
+                mKeyStates.put(code, state);
+            }
+
+            if (action == KeyEvent.ACTION_DOWN) {
+                downTime = eventTime;
+                repeat = state.mRepeatCount++;
+                state.mLastKeyDownTimestamp = eventTime;
+            } else {
+                // Handle key up events without any matching down event by setting the down time to
+                // the event time. This shouldn't happen in practice - keys should be pressed
+                // before they can be released! - but this protects us against HAL weirdness.
+                downTime =
+                        (state.mLastKeyDownTimestamp == -1)
+                                ? eventTime
+                                : state.mLastKeyDownTimestamp;
+                repeat = 0;
+                state.mRepeatCount = 0;
+            }
         }
 
-        long downTime = action == KeyEvent.ACTION_UP
-                ? mKeyDownTimes.get(code, eventTime) : eventTime;
-
         KeyEvent event = KeyEvent.obtain(
                 downTime,
                 eventTime,
                 action,
                 code,
-                0 /* repeat */,
+                repeat,
                 0 /* meta state */,
-                0 /* deviceId*/,
+                0 /* deviceId */,
                 0 /* scancode */,
                 0 /* flags */,
                 InputDevice.SOURCE_CLASS_BUTTON,
diff --git a/service/src/com/android/car/hal/PropertyHalServiceIds.java b/service/src/com/android/car/hal/PropertyHalServiceIds.java
index e8d00ee..b5f1e44 100644
--- a/service/src/com/android/car/hal/PropertyHalServiceIds.java
+++ b/service/src/com/android/car/hal/PropertyHalServiceIds.java
@@ -261,6 +261,9 @@
         mProps.put(VehicleProperty.PERF_VEHICLE_SPEED_DISPLAY, new Pair<>(
                 Car.PERMISSION_SPEED,
                 Car.PERMISSION_SPEED));
+        mProps.put(VehicleProperty.PERF_STEERING_ANGLE, new Pair<>(
+                Car.PERMISSION_SPEED,
+                Car.PERMISSION_SPEED));
         mProps.put(VehicleProperty.ENGINE_COOLANT_TEMP, new Pair<>(
                 Car.PERMISSION_CAR_ENGINE_DETAILED,
                 Car.PERMISSION_CAR_ENGINE_DETAILED));
diff --git a/service/src/com/android/car/hal/VmsHalService.java b/service/src/com/android/car/hal/VmsHalService.java
index ef33b31..71e1efc 100644
--- a/service/src/com/android/car/hal/VmsHalService.java
+++ b/service/src/com/android/car/hal/VmsHalService.java
@@ -88,7 +88,7 @@
     private final Object mLock = new Object();
     private final VmsRouting mRouting = new VmsRouting();
     @GuardedBy("mLock")
-    private final Map<IBinder, VmsLayersOffering> mOfferings = new HashMap<>();
+    private final Map<IBinder, Map<Integer, VmsLayersOffering>> mOfferings = new HashMap<>();
     @GuardedBy("mLock")
     private final VmsLayersAvailability mAvailableLayers = new VmsLayersAvailability();
     private final VmsPublishersInfo mPublishersInfo = new VmsPublishersInfo();
@@ -761,10 +761,22 @@
 
     private void updateOffering(IBinder publisherToken, VmsLayersOffering offering) {
         synchronized (mLock) {
-            mOfferings.put(publisherToken, offering);
+            Map<Integer, VmsLayersOffering> publisherOfferings = mOfferings.get(publisherToken);
+            if (publisherOfferings == null) {
+                publisherOfferings = new HashMap<>();
+                mOfferings.put(publisherToken, publisherOfferings);
+            }
+            publisherOfferings.put(offering.getPublisherId(), offering);
 
             // Update layers availability.
-            mAvailableLayers.setPublishersOffering(mOfferings.values());
+            Set<VmsLayersOffering> allPublisherOfferings = new HashSet<>();
+            for (Map<Integer, VmsLayersOffering> offerings : mOfferings.values()) {
+                allPublisherOfferings.addAll(offerings.values());
+            }
+            if (DBG) {
+                Log.d(TAG, "New layer availability: " + allPublisherOfferings);
+            }
+            mAvailableLayers.setPublishersOffering(allPublisherOfferings);
         }
         notifyOfAvailabilityChange();
     }
diff --git a/service/src/com/android/car/pm/ActivityBlockingActivity.java b/service/src/com/android/car/pm/ActivityBlockingActivity.java
index fd792a6..ed9e47c 100644
--- a/service/src/com/android/car/pm/ActivityBlockingActivity.java
+++ b/service/src/com/android/car/pm/ActivityBlockingActivity.java
@@ -22,7 +22,6 @@
 
 import android.app.Activity;
 import android.car.Car;
-import android.car.CarNotConnectedException;
 import android.car.content.pm.CarPackageManager;
 import android.car.drivingstate.CarUxRestrictions;
 import android.car.drivingstate.CarUxRestrictionsManager;
@@ -57,9 +56,10 @@
     private Car mCar;
     private CarUxRestrictionsManager mUxRManager;
 
-    private TextView mBlockingText;
     private TextView mBlockedAppName;
     private ImageView mBlockedAppIcon;
+    private TextView mBlockingText;
+    private TextView mExitButtonMessage;
     private Button mExitButton;
 
     // Exiting depends on Car connection, which might not be available at the time exit was
@@ -76,7 +76,8 @@
         mBlockingText = findViewById(R.id.blocking_text);
         mBlockedAppName = findViewById(R.id.blocked_app_name);
         mBlockedAppIcon = findViewById(R.id.blocked_app_icon);
-        mExitButton = findViewById(R.id.exit);
+        mExitButton = findViewById(R.id.exit_button);
+        mExitButtonMessage = findViewById(R.id.exit_button_message);
 
         mBlockingText.setText(getString(R.string.activity_blocked_text));
 
@@ -85,20 +86,16 @@
         mCar = Car.createCar(this, new ServiceConnection() {
             @Override
             public void onServiceConnected(ComponentName name, IBinder service) {
-                try {
-                    if (mExitRequested) {
-                        handleRestartingTask();
-                    }
-                    mUxRManager = (CarUxRestrictionsManager) mCar.getCarManager(
-                            Car.CAR_UX_RESTRICTION_SERVICE);
-                    // This activity would have been launched only in a restricted state.
-                    // But ensuring when the service connection is established, that we are still
-                    // in a restricted state.
-                    handleUxRChange(mUxRManager.getCurrentCarUxRestrictions());
-                    mUxRManager.registerListener(ActivityBlockingActivity.this::handleUxRChange);
-                } catch (CarNotConnectedException e) {
-                    Log.e(CarLog.TAG_AM, "Failed to get CarUxRestrictionsManager", e);
+                if (mExitRequested) {
+                    handleRestartingTask();
                 }
+                mUxRManager = (CarUxRestrictionsManager) mCar.getCarManager(
+                        Car.CAR_UX_RESTRICTION_SERVICE);
+                // This activity would have been launched only in a restricted state.
+                // But ensuring when the service connection is established, that we are still
+                // in a restricted state.
+                handleUxRChange(mUxRManager.getCurrentCarUxRestrictions());
+                mUxRManager.registerListener(ActivityBlockingActivity.this::handleUxRChange);
             }
 
             @Override
@@ -143,6 +140,9 @@
         boolean showButton = mBlockedTaskId != INVALID_TASK_ID && isRootDO;
         mExitButton.setVisibility(showButton ? View.VISIBLE : View.GONE);
         mExitButton.setOnClickListener(v -> handleRestartingTask());
+        mExitButtonMessage.setVisibility(showButton ? View.VISIBLE : View.GONE);
+        mExitButtonMessage.setText(
+                getString(R.string.exit_button_message, getString(R.string.exit_button)));
 
         // Show more debug info for non-user build.
         if (Build.IS_ENG || Build.IS_USERDEBUG) {
@@ -197,14 +197,18 @@
     }
 
     @Override
+    protected void onStop() {
+        super.onStop();
+        // Finish when blocking activity goes invisible to avoid it accidentally re-surfaces with
+        // stale string regarding blocked activity.
+        finish();
+    }
+
+    @Override
     protected void onDestroy() {
         super.onDestroy();
         if (mCar.isConnected() && mUxRManager != null) {
-            try {
-                mUxRManager.unregisterListener();
-            } catch (CarNotConnectedException e) {
-                Log.e(CarLog.TAG_AM, "Cannot unregisterListener", e);
-            }
+            mUxRManager.unregisterListener();
             mUxRManager = null;
             mCar.disconnect();
         }
@@ -276,18 +280,12 @@
 
         // Lock on self to avoid restarting the same task twice.
         synchronized (this) {
-            try {
-                if (Log.isLoggable(CarLog.TAG_AM, Log.INFO)) {
-                    Log.i(CarLog.TAG_AM, "Restarting task " + mBlockedTaskId);
-                }
-                CarPackageManager carPm = (CarPackageManager)
-                        mCar.getCarManager(Car.PACKAGE_SERVICE);
-                carPm.restartTask(mBlockedTaskId);
-            } catch (CarNotConnectedException e) {
-                // We should never be here since Car connection is already checked.
-                Log.e(CarLog.TAG_AM, "Car connection is not available.", e);
-                return;
+            if (Log.isLoggable(CarLog.TAG_AM, Log.INFO)) {
+                Log.i(CarLog.TAG_AM, "Restarting task " + mBlockedTaskId);
             }
+            CarPackageManager carPm = (CarPackageManager)
+                    mCar.getCarManager(Car.PACKAGE_SERVICE);
+            carPm.restartTask(mBlockedTaskId);
             finish();
         }
     }
diff --git a/service/src/com/android/car/pm/CarPackageManagerService.java b/service/src/com/android/car/pm/CarPackageManagerService.java
index 1c50db9..6ac9473 100644
--- a/service/src/com/android/car/pm/CarPackageManagerService.java
+++ b/service/src/com/android/car/pm/CarPackageManagerService.java
@@ -551,14 +551,8 @@
     private void generateActivityWhitelistMap() {
         HashMap<String, AppBlockingPackageInfoWrapper> activityWhitelist = new HashMap<>();
         mConfiguredWhitelist = mContext.getString(R.string.activityWhitelist);
-        if (mConfiguredWhitelist == null) {
-            if (DBG_POLICY_CHECK) {
-                Log.d(CarLog.TAG_PACKAGE, "Null whitelist in config");
-            }
-            return;
-        }
         // Get the apps/activities that are whitelisted in the configuration XML resource
-        HashMap<String, Set<String>> configWhitelist = parseConfiglist(mConfiguredWhitelist);
+        HashMap<String, Set<String>> configWhitelist = parseConfigList(mConfiguredWhitelist);
         if (configWhitelist == null) {
             if (DBG_POLICY_CHECK) {
                 Log.w(CarLog.TAG_PACKAGE, "White list null.  No apps whitelisted");
@@ -584,7 +578,7 @@
             }
 
             int flags = 0;
-            String[] activities = null;
+            Set<String> activities = new ArraySet<>();
 
             if (info.applicationInfo.isSystemApp()
                     || info.applicationInfo.isUpdatedSystemApp()) {
@@ -602,9 +596,13 @@
                     // Whole Pkg has been whitelisted
                     flags |= AppBlockingPackageInfo.FLAG_WHOLE_ACTIVITY;
                     // Add all activities to the whitelist
-                    activities = getActivitiesInPackage(info);
-                    if (activities == null && DBG_POLICY_CHECK) {
-                        Log.d(CarLog.TAG_PACKAGE, info.packageName + ": Activities null");
+                    List<String> activitiesForPackage = getActivitiesInPackage(info);
+                    if (activitiesForPackage != null) {
+                        activities.addAll(activitiesForPackage);
+                    } else {
+                        if (DBG_POLICY_CHECK) {
+                            Log.d(CarLog.TAG_PACKAGE, info.packageName + ": Activities null");
+                        }
                     }
                 } else {
                     if (DBG_POLICY_CHECK) {
@@ -613,64 +611,64 @@
                             Log.d(CarLog.TAG_PACKAGE, a);
                         }
                     }
-                    activities = configActivitiesForPackage.toArray(
-                            new String[configActivitiesForPackage.size()]);
+                    activities.addAll(configActivitiesForPackage);
                 }
-            } else {
-                /* 2. If app is not listed in the config.xml check their Manifest meta-data to
-                  see if they have any Distraction Optimized(DO) activities.
-                  For non system apps, we check if the app install source was a permittable
-                  source. This prevents side-loaded apps to fake DO.  Bypass the check
-                  for debug builds for development convenience. */
-                if (!isDebugBuild()
-                        && !info.applicationInfo.isSystemApp()
-                        && !info.applicationInfo.isUpdatedSystemApp()) {
-                    try {
-                        if (mAllowedAppInstallSources != null) {
-                            String installerName = mPackageManager.getInstallerPackageName(
-                                    info.packageName);
-                            if (installerName == null || (installerName != null
-                                    && !mAllowedAppInstallSources.contains(installerName))) {
-                                Log.w(CarLog.TAG_PACKAGE,
-                                        info.packageName + " not installed from permitted sources "
-                                                + installerName == null ? "NULL" : installerName);
-                                continue;
-                            }
-                        }
-                    } catch (IllegalArgumentException e) {
-                        Log.w(CarLog.TAG_PACKAGE, info.packageName + " not installed!");
-                        continue;
-                    }
-                }
-
+            }
+            /* 2. If app is not listed in the config.xml check their Manifest meta-data to
+              see if they have any Distraction Optimized(DO) activities.
+              For non system apps, we check if the app install source was a permittable
+              source. This prevents side-loaded apps to fake DO.  Bypass the check
+              for debug builds for development convenience. */
+            if (!isDebugBuild()
+                    && !info.applicationInfo.isSystemApp()
+                    && !info.applicationInfo.isUpdatedSystemApp()) {
                 try {
-                    activities = CarAppMetadataReader.findDistractionOptimizedActivities(
-                            mContext,
-                            info.packageName);
-                } catch (NameNotFoundException e) {
-                    Log.w(CarLog.TAG_PACKAGE, "Error reading metadata: " + info.packageName);
+                    if (mAllowedAppInstallSources != null) {
+                        String installerName = mPackageManager.getInstallerPackageName(
+                                info.packageName);
+                        if (installerName == null || (installerName != null
+                                && !mAllowedAppInstallSources.contains(installerName))) {
+                            Log.w(CarLog.TAG_PACKAGE,
+                                    info.packageName + " not installed from permitted sources "
+                                            + (installerName == null ? "NULL" : installerName));
+                            continue;
+                        }
+                    }
+                } catch (IllegalArgumentException e) {
+                    Log.w(CarLog.TAG_PACKAGE, info.packageName + " not installed!");
                     continue;
                 }
-                if (activities != null) {
+            }
+
+            try {
+                String[] doActivities = CarAppMetadataReader.findDistractionOptimizedActivities(
+                        mContext, info.packageName);
+                if (doActivities != null) {
                     // Some of the activities in this app are Distraction Optimized.
                     if (DBG_POLICY_CHECK) {
-                        for (String activity : activities) {
+                        for (String activity : doActivities) {
                             Log.d(CarLog.TAG_PACKAGE,
                                     "adding " + activity + " from " + info.packageName
                                             + " to whitelist");
                         }
                     }
+                    activities.addAll(Arrays.asList(doActivities));
                 }
+            } catch (NameNotFoundException e) {
+                Log.w(CarLog.TAG_PACKAGE, "Error reading metadata: " + info.packageName);
+                continue;
             }
+
             // Nothing to add to whitelist
-            if (activities == null) {
+            if (activities.isEmpty()) {
                 continue;
             }
 
             Signature[] signatures;
             signatures = info.signatures;
             AppBlockingPackageInfo appBlockingInfo = new AppBlockingPackageInfo(
-                    info.packageName, 0, 0, flags, signatures, activities);
+                    info.packageName, 0, 0, flags, signatures,
+                    activities.toArray(new String[activities.size()]));
             AppBlockingPackageInfoWrapper wrapper = new AppBlockingPackageInfoWrapper(
                     appBlockingInfo, true);
             activityWhitelist.put(info.packageName, wrapper);
@@ -698,7 +696,7 @@
             }
             return;
         }
-        Map<String, Set<String>> configBlacklist = parseConfiglist(mConfiguredBlacklist);
+        Map<String, Set<String>> configBlacklist = parseConfigList(mConfiguredBlacklist);
         if (configBlacklist == null) {
             if (DBG_POLICY_CHECK) {
                 Log.w(CarLog.TAG_PACKAGE, "Black list null.  No apps blacklisted");
@@ -714,7 +712,7 @@
             }
             int flags = 0;
             PackageInfo pkgInfo;
-            String[] activities;
+            Set<String> activities = new ArraySet<>();
             try {
                 pkgInfo = mPackageManager.getPackageInfo(
                         pkg, PackageManager.GET_ACTIVITIES
@@ -734,16 +732,19 @@
             if (configActivities.size() == 0) {
                 // whole package
                 flags |= AppBlockingPackageInfo.FLAG_WHOLE_ACTIVITY;
-                activities = getActivitiesInPackage(pkgInfo);
+                List<String> activitiesInPackage = getActivitiesInPackage(pkgInfo);
+                if (activitiesInPackage != null && !activitiesInPackage.isEmpty()) {
+                    activities.addAll(activitiesInPackage);
+                }
             } else {
-                activities = configActivities.toArray(new String[configActivities.size()]);
+                activities.addAll(configActivities);
             }
 
-            if (activities == null) {
+            if (activities.isEmpty()) {
                 continue;
             }
             AppBlockingPackageInfo appBlockingInfo = new AppBlockingPackageInfo(pkg, 0, 0, flags,
-                    pkgInfo.signatures, activities);
+                    pkgInfo.signatures, activities.toArray(new String[activities.size()]));
             AppBlockingPackageInfoWrapper wrapper = new AppBlockingPackageInfoWrapper(
                     appBlockingInfo, true);
             activityBlacklist.put(pkg, wrapper);
@@ -760,7 +761,7 @@
      * included.
      */
     @Nullable
-    private HashMap<String, Set<String>> parseConfiglist(String configList) {
+    private HashMap<String, Set<String>> parseConfigList(String configList) {
         if (configList == null) {
             return null;
         }
@@ -788,7 +789,7 @@
     }
 
     @Nullable
-    private String[] getActivitiesInPackage(PackageInfo info) {
+    private List<String> getActivitiesInPackage(PackageInfo info) {
         if (info == null || info.activities == null) {
             return null;
         }
@@ -796,7 +797,7 @@
         for (ActivityInfo aInfo : info.activities) {
             activityList.add(aInfo.name);
         }
-        return activityList.toArray(new String[activityList.size()]);
+        return activityList;
     }
 
     /**
diff --git a/service/src/com/android/car/systeminterface/IOInterface.java b/service/src/com/android/car/systeminterface/IOInterface.java
index 2ce9174..8db2807 100644
--- a/service/src/com/android/car/systeminterface/IOInterface.java
+++ b/service/src/com/android/car/systeminterface/IOInterface.java
@@ -17,24 +17,30 @@
 package com.android.car.systeminterface;
 
 import android.content.Context;
+
 import java.io.File;
 
 /**
  * Interface that abstracts I/O operations
  */
 public interface IOInterface {
-    File getFilesDir();
+    /**
+     * Returns directory for car service which is /data/system/car.
+     * This directory is always available but it should not keep user sensitive data.
+     * @return File for the directory.
+     */
+    File getSystemCarDir();
 
     class DefaultImpl implements IOInterface {
-        private final File mFilesDir;
+        private final File mSystemCarDir;
 
         DefaultImpl(Context context) {
-            mFilesDir = context.getFilesDir();
+            mSystemCarDir = new File("/data/system/car");
         }
 
         @Override
-        public File getFilesDir() {
-            return mFilesDir;
+        public File getSystemCarDir() {
+            return mSystemCarDir;
         }
     }
 }
diff --git a/service/src/com/android/car/systeminterface/SystemInterface.java b/service/src/com/android/car/systeminterface/SystemInterface.java
index 5064e41..f8d6d17 100644
--- a/service/src/com/android/car/systeminterface/SystemInterface.java
+++ b/service/src/com/android/car/systeminterface/SystemInterface.java
@@ -68,8 +68,8 @@
     }
 
     @Override
-    public File getFilesDir() {
-        return mIOInterface.getFilesDir();
+    public File getSystemCarDir() {
+        return mIOInterface.getSystemCarDir();
     }
 
     @Override
diff --git a/service/src/com/android/car/trust/BleService.java b/service/src/com/android/car/trust/BleService.java
new file mode 100644
index 0000000..3ec1dca
--- /dev/null
+++ b/service/src/com/android/car/trust/BleService.java
@@ -0,0 +1,226 @@
+/*
+ * Copyright (C) 2019 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.car.trust;
+
+import static android.bluetooth.BluetoothProfile.GATT_SERVER;
+
+import android.app.Service;
+import android.bluetooth.BluetoothAdapter;
+import android.bluetooth.BluetoothDevice;
+import android.bluetooth.BluetoothGatt;
+import android.bluetooth.BluetoothGattCharacteristic;
+import android.bluetooth.BluetoothGattServer;
+import android.bluetooth.BluetoothGattServerCallback;
+import android.bluetooth.BluetoothGattService;
+import android.bluetooth.BluetoothManager;
+import android.bluetooth.BluetoothProfile;
+import android.bluetooth.le.AdvertiseCallback;
+import android.bluetooth.le.AdvertiseData;
+import android.bluetooth.le.AdvertiseSettings;
+import android.bluetooth.le.BluetoothLeAdvertiser;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.os.Handler;
+import android.os.ParcelUuid;
+import android.util.Log;
+
+/**
+ * A generic service to start a BLE
+ * TODO(b/123248433) This could move to a separate comms library.
+ */
+public abstract class BleService extends Service {
+    private static final String TAG = BleService.class.getSimpleName();
+
+    private static final int BLE_RETRY_LIMIT = 5;
+    private static final int BLE_RETRY_INTERVAL_MS = 1000;
+
+    private final Handler mHandler = new Handler();
+
+    private BluetoothManager mBluetoothManager;
+    private BluetoothLeAdvertiser mAdvertiser;
+    private BluetoothGattServer mGattServer;
+    private int mAdvertiserStartCount;
+
+    /**
+     * Starts the GATT server with the given {@link BluetoothGattService} and begins
+     * advertising.
+     *
+     * <p>It is possible that BLE service is still in TURNING_ON state when this method is invoked.
+     * Therefore, several retries will be made to ensure advertising is started.
+     *
+     * @param service {@link BluetoothGattService} that will be discovered by clients
+     */
+    protected void startAdvertising(BluetoothGattService service,
+            AdvertiseCallback advertiseCallback) {
+        if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
+            Log.e(TAG, "System does not support BLE");
+            return;
+        }
+
+        // Only open one Gatt server.
+        if (mGattServer == null) {
+            mBluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
+            mGattServer = mBluetoothManager.openGattServer(this, mGattServerCallback);
+
+            if (mGattServer == null) {
+                Log.e(TAG, "Gatt Server not created");
+                return;
+            }
+        }
+
+        mGattServer.clearServices();
+        mGattServer.addService(service);
+
+        AdvertiseSettings settings = new AdvertiseSettings.Builder()
+                .setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_LOW_LATENCY)
+                .setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_HIGH)
+                .setConnectable(true)
+                .build();
+
+        AdvertiseData data = new AdvertiseData.Builder()
+                .setIncludeDeviceName(true)
+                .addServiceUuid(new ParcelUuid(service.getUuid()))
+                .build();
+
+        mAdvertiserStartCount = 0;
+        startAdvertisingInternally(settings, data, advertiseCallback);
+    }
+
+    private void startAdvertisingInternally(AdvertiseSettings settings, AdvertiseData data,
+            AdvertiseCallback advertiseCallback) {
+        mAdvertiserStartCount += 1;
+        mAdvertiser = BluetoothAdapter.getDefaultAdapter().getBluetoothLeAdvertiser();
+        if (mAdvertiser == null && mAdvertiserStartCount < BLE_RETRY_LIMIT) {
+            mHandler.postDelayed(
+                    () -> startAdvertisingInternally(settings, data, advertiseCallback),
+                            BLE_RETRY_INTERVAL_MS);
+        } else {
+            mHandler.removeCallbacks(null);
+            mAdvertiser.startAdvertising(settings, data, advertiseCallback);
+            mAdvertiserStartCount = 0;
+        }
+    }
+
+    protected void stopAdvertising(AdvertiseCallback advertiseCallback) {
+        if (mAdvertiser != null) {
+            mAdvertiser.stopAdvertising(advertiseCallback);
+        }
+    }
+
+    /**
+     * Notifies the characteristic change via {@link BluetoothGattServer}
+     */
+    protected void notifyCharacteristicChanged(BluetoothDevice device,
+            BluetoothGattCharacteristic characteristic, boolean confirm) {
+        if (mGattServer != null) {
+            mGattServer.notifyCharacteristicChanged(device, characteristic, confirm);
+        }
+    }
+
+    @Override
+    public void onDestroy() {
+        // Stops the advertiser and GATT server. This needs to be done to avoid leaks
+        if (mAdvertiser != null) {
+            mAdvertiser.cleanup();
+        }
+
+        if (mGattServer != null) {
+            mGattServer.clearServices();
+            try {
+                for (BluetoothDevice d : mBluetoothManager.getConnectedDevices(GATT_SERVER)) {
+                    mGattServer.cancelConnection(d);
+                }
+            } catch (UnsupportedOperationException e) {
+                Log.e(TAG, "Error getting connected devices", e);
+            } finally {
+                mGattServer.close();
+            }
+        }
+        super.onDestroy();
+    }
+
+    // Delegate to subclass
+    protected void onAdvertiseStartSuccess() { }
+    protected void onAdvertiseStartFailure(int errorCode) { }
+    protected void onAdvertiseDeviceConnected(BluetoothDevice device) { }
+    protected void onAdvertiseDeviceDisconnected(BluetoothDevice device) { }
+
+    /**
+     * Triggered when this BleService receives a write request from a remote
+     * device. Sub-classes should implement how to handle requests.
+     */
+    protected abstract void onCharacteristicWrite(BluetoothDevice device, int requestId,
+            BluetoothGattCharacteristic characteristic, boolean preparedWrite, boolean
+            responseNeeded, int offset, byte[] value);
+
+    /**
+     * Triggered when this BleService receives a read request from a remote device.
+     */
+    protected abstract void onCharacteristicRead(BluetoothDevice device,
+            int requestId, int offset, BluetoothGattCharacteristic characteristic);
+
+    private final BluetoothGattServerCallback mGattServerCallback =
+            new BluetoothGattServerCallback() {
+        @Override
+        public void onConnectionStateChange(BluetoothDevice device,
+                final int status, final int newState) {
+            switch (newState) {
+                case BluetoothProfile.STATE_CONNECTED:
+                    onAdvertiseDeviceConnected(device);
+                    break;
+                case BluetoothProfile.STATE_DISCONNECTED:
+                    onAdvertiseDeviceDisconnected(device);
+                    break;
+                default:
+                    Log.w(TAG, "Connection state not connecting or disconnecting; ignoring: "
+                            + newState);
+            }
+        }
+
+        @Override
+        public void onServiceAdded(final int status, BluetoothGattService service) {
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "Service added status: " + status + " uuid: " + service.getUuid());
+            }
+        }
+
+        @Override
+        public void onCharacteristicReadRequest(BluetoothDevice device,
+                int requestId, int offset, final BluetoothGattCharacteristic characteristic) {
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "Read request for characteristic: " + characteristic.getUuid());
+            }
+
+            mGattServer.sendResponse(device, requestId,
+                    BluetoothGatt.GATT_SUCCESS, offset, characteristic.getValue());
+            onCharacteristicRead(device, requestId, offset, characteristic);
+        }
+
+        @Override
+        public void onCharacteristicWriteRequest(final BluetoothDevice device, int requestId,
+                BluetoothGattCharacteristic characteristic, boolean preparedWrite, boolean
+                responseNeeded, int offset, byte[] value) {
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "Write request for characteristic: " + characteristic.getUuid());
+            }
+
+            mGattServer.sendResponse(device, requestId, BluetoothGatt.GATT_SUCCESS,
+                    offset, value);
+            onCharacteristicWrite(device, requestId, characteristic,
+                    preparedWrite, responseNeeded, offset, value);
+        }
+    };
+}
diff --git a/service/src/com/android/car/trust/CarTrustAgentEnrollmentService.java b/service/src/com/android/car/trust/CarTrustAgentEnrollmentService.java
new file mode 100644
index 0000000..e6aeeac
--- /dev/null
+++ b/service/src/com/android/car/trust/CarTrustAgentEnrollmentService.java
@@ -0,0 +1,309 @@
+/*
+ * Copyright (C) 2019 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.car.trust;
+
+import android.annotation.Nullable;
+import android.bluetooth.BluetoothDevice;
+import android.car.trust.ICarTrustAgentBleCallback;
+import android.car.trust.ICarTrustAgentEnrollment;
+import android.car.trust.ICarTrustAgentEnrollmentCallback;
+import android.content.Context;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.util.Log;
+
+import com.android.car.CarServiceBase;
+
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * A service that enables enrolling a phone as a trusted device for authenticating a user on the
+ * IHU.  This implements the APIs that an enrollment app can call to conduct an enrollment.
+ */
+public class CarTrustAgentEnrollmentService extends ICarTrustAgentEnrollment.Stub implements
+        CarServiceBase {
+    private static final String TAG = "CarTrustAgentEnroll";
+    private final Context mContext;
+    // List of clients listening to Enrollment state change events.
+    private final List<EnrollmentStateClient> mEnrollmentStateClients = new ArrayList<>();
+    // List of clients listening to BLE state change events.
+    private final List<BleStateChangeClient> mBleStateChangeClients = new ArrayList<>();
+
+    public CarTrustAgentEnrollmentService(Context context) {
+        mContext = context;
+    }
+
+    @Override
+    public synchronized void init() {
+    }
+
+    @Override
+    public synchronized void release() {
+        for (EnrollmentStateClient client : mEnrollmentStateClients) {
+            client.mListenerBinder.unlinkToDeath(client, 0);
+        }
+        mEnrollmentStateClients.clear();
+    }
+
+
+    // Binder methods
+    // TODO(b/120911995) The methods don't do anything yet.  The implementation will be checked in
+    // a follow up CL.
+    @Override
+    public void startEnrollmentAdvertising() {
+    }
+
+    @Override
+    public void stopEnrollmentAdvertising() {
+    }
+
+    @Override
+    public void initiateEnrollmentHandshake(BluetoothDevice device) {
+    }
+
+    @Override
+    public void enrollmentHandshakeAccepted() {
+    }
+
+    @Override
+    public void terminateEnrollmentHandshake() {
+    }
+
+    @Override
+    public void activateToken(long handle) {
+    }
+
+    @Override
+    public void revokeTrust(long handle) {
+    }
+
+    @Override
+    public int[] getEnrollmentHandlesForUser(int uid) {
+        int[] handles = {};
+        return handles;
+    }
+
+    /**
+     * Registers a {@link ICarTrustAgentEnrollmentCallback} to be notified for changes to the
+     * enrollment state.
+     *
+     * @param listener {@link ICarTrustAgentEnrollmentCallback}
+     */
+    @Override
+    public synchronized void registerEnrollmentCallback(ICarTrustAgentEnrollmentCallback listener) {
+        if (listener == null) {
+            throw new IllegalArgumentException("Listener is null");
+        }
+        // If a new client is registering, create a new EnrollmentStateClient and add it to the list
+        // of listening clients.
+        EnrollmentStateClient client = findEnrollmentStateClientLocked(listener);
+        if (client == null) {
+            client = new EnrollmentStateClient(listener);
+            try {
+                listener.asBinder().linkToDeath(client, 0);
+            } catch (RemoteException e) {
+                Log.e(TAG, "Cannot link death recipient to binder ", e);
+                return;
+            }
+            mEnrollmentStateClients.add(client);
+        }
+    }
+
+    /**
+     * Iterates through the list of registered Enrollment State Change clients -
+     * {@link EnrollmentStateClient} and finds if the given client is already registered.
+     *
+     * @param listener Listener to look for.
+     * @return the {@link EnrollmentStateClient} if found, null if not
+     */
+    @Nullable
+    private EnrollmentStateClient findEnrollmentStateClientLocked(
+            ICarTrustAgentEnrollmentCallback listener) {
+        IBinder binder = listener.asBinder();
+        // Find the listener by comparing the binder object they host.
+        for (EnrollmentStateClient client : mEnrollmentStateClients) {
+            if (client.isHoldingBinder(binder)) {
+                return client;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Unregister the given Enrollment State Change listener
+     *
+     * @param listener client to unregister
+     */
+    @Override
+    public synchronized void unregisterEnrollmentCallback(
+            ICarTrustAgentEnrollmentCallback listener) {
+        if (listener == null) {
+            throw new IllegalArgumentException("Listener is null");
+        }
+
+        EnrollmentStateClient client = findEnrollmentStateClientLocked(listener);
+        if (client == null) {
+            Log.e(TAG, "unregisterEnrollmentCallback(): listener was not previously "
+                    + "registered");
+            return;
+        }
+        listener.asBinder().unlinkToDeath(client, 0);
+        mEnrollmentStateClients.remove(client);
+    }
+
+    /**
+     * Registers a {@link ICarTrustAgentBleCallback} to be notified for changes to the BLE state
+     * changes.
+     *
+     * @param listener {@link ICarTrustAgentBleCallback}
+     */
+    @Override
+    public synchronized void registerBleCallback(ICarTrustAgentBleCallback listener) {
+        if (listener == null) {
+            throw new IllegalArgumentException("Listener is null");
+        }
+        // If a new client is registering, create a new EnrollmentStateClient and add it to the list
+        // of listening clients.
+        BleStateChangeClient client = findBleStateClientLocked(listener);
+        if (client == null) {
+            client = new BleStateChangeClient(listener);
+            try {
+                listener.asBinder().linkToDeath(client, 0);
+            } catch (RemoteException e) {
+                Log.e(TAG, "Cannot link death recipient to binder " + e);
+                return;
+            }
+            mBleStateChangeClients.add(client);
+        }
+    }
+
+    /**
+     * Iterates through the list of registered BLE State Change clients -
+     * {@link BleStateChangeClient} and finds if the given client is already registered.
+     *
+     * @param listener Listener to look for.
+     * @return the {@link BleStateChangeClient} if found, null if not
+     */
+    @Nullable
+    private BleStateChangeClient findBleStateClientLocked(
+            ICarTrustAgentBleCallback listener) {
+        IBinder binder = listener.asBinder();
+        // Find the listener by comparing the binder object they host.
+        for (BleStateChangeClient client : mBleStateChangeClients) {
+            if (client.isHoldingBinder(binder)) {
+                return client;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Unregister the given BLE State Change listener
+     *
+     * @param listener client to unregister
+     */
+    @Override
+    public synchronized void unregisterBleCallback(ICarTrustAgentBleCallback listener) {
+        if (listener == null) {
+            throw new IllegalArgumentException("Listener is null");
+        }
+
+        BleStateChangeClient client = findBleStateClientLocked(listener);
+        if (client == null) {
+            Log.e(TAG, "unregisterBleCallback(): listener was not previously "
+                    + "registered");
+            return;
+        }
+        listener.asBinder().unlinkToDeath(client, 0);
+        mBleStateChangeClients.remove(client);
+    }
+
+    /**
+     * Class that holds onto client related information - listener interface, process that hosts the
+     * binder object etc.
+     * <p>
+     * It also registers for death notifications of the host.
+     */
+    private class EnrollmentStateClient implements IBinder.DeathRecipient {
+        private final IBinder mListenerBinder;
+        private final ICarTrustAgentEnrollmentCallback mListener;
+
+        EnrollmentStateClient(ICarTrustAgentEnrollmentCallback listener) {
+            mListener = listener;
+            mListenerBinder = listener.asBinder();
+        }
+
+        @Override
+        public void binderDied() {
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "Binder died " + mListenerBinder);
+            }
+            mListenerBinder.unlinkToDeath(this, 0);
+            synchronized (CarTrustAgentEnrollmentService.this) {
+                mEnrollmentStateClients.remove(this);
+            }
+        }
+
+        /**
+         * Returns if the given binder object matches to what this client info holds.
+         * Used to check if the listener asking to be registered is already registered.
+         *
+         * @return true if matches, false if not
+         */
+        public boolean isHoldingBinder(IBinder binder) {
+            return mListenerBinder == binder;
+        }
+    }
+
+    private class BleStateChangeClient implements IBinder.DeathRecipient {
+        private final IBinder mListenerBinder;
+        private final ICarTrustAgentBleCallback mListener;
+
+        BleStateChangeClient(ICarTrustAgentBleCallback listener) {
+            mListener = listener;
+            mListenerBinder = listener.asBinder();
+        }
+
+        @Override
+        public void binderDied() {
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "Binder died " + mListenerBinder);
+            }
+            mListenerBinder.unlinkToDeath(this, 0);
+            synchronized (CarTrustAgentEnrollmentService.this) {
+                mBleStateChangeClients.remove(this);
+            }
+        }
+
+        /**
+         * Returns if the given binder object matches to what this client info holds.
+         * Used to check if the listener asking to be registered is already registered.
+         *
+         * @return true if matches, false if not
+         */
+        public boolean isHoldingBinder(IBinder binder) {
+            return mListenerBinder == binder;
+        }
+
+    }
+
+    @Override
+    public void dump(PrintWriter writer) {
+    }
+}
diff --git a/service/src/com/android/car/user/CarUserService.java b/service/src/com/android/car/user/CarUserService.java
index 8716aed..258d80a 100644
--- a/service/src/com/android/car/user/CarUserService.java
+++ b/service/src/com/android/car/user/CarUserService.java
@@ -17,6 +17,7 @@
 package com.android.car.user;
 
 import android.annotation.Nullable;
+import android.car.settings.CarSettings;
 import android.car.userlib.CarUserManagerHelper;
 import android.content.BroadcastReceiver;
 import android.content.Context;
@@ -25,11 +26,14 @@
 import android.location.LocationManager;
 import android.os.UserHandle;
 import android.os.UserManager;
+import android.provider.Settings;
 import android.util.Log;
 
 import com.android.car.CarServiceBase;
+import com.android.internal.annotations.GuardedBy;
 
 import java.io.PrintWriter;
+import java.util.ArrayList;
 
 /**
  * User service for cars. Manages users at boot time. Including:
@@ -44,6 +48,12 @@
     private final Context mContext;
     private final CarUserManagerHelper mCarUserManagerHelper;
 
+    private final Object mLock = new Object();
+    @GuardedBy("mLock")
+    private boolean mUser0Unlocked;
+    @GuardedBy("mLock")
+    private final ArrayList<Runnable> mUser0UnlockTasks = new ArrayList<>();
+
     public CarUserService(
                 @Nullable Context context, @Nullable CarUserManagerHelper carUserManagerHelper) {
         if (Log.isLoggable(TAG, Log.DEBUG)) {
@@ -58,11 +68,13 @@
         if (Log.isLoggable(TAG, Log.DEBUG)) {
             Log.d(TAG, "init");
         }
-        IntentFilter filter = new IntentFilter();
-        filter.addAction(Intent.ACTION_LOCKED_BOOT_COMPLETED);
-        filter.addAction(Intent.ACTION_USER_SWITCHED);
+        if (mCarUserManagerHelper.isHeadlessSystemUser()) {
+            IntentFilter filter = new IntentFilter();
+            filter.addAction(Intent.ACTION_LOCKED_BOOT_COMPLETED);
+            filter.addAction(Intent.ACTION_USER_SWITCHED);
 
-        mContext.registerReceiver(this, filter);
+            mContext.registerReceiver(this, filter);
+        }
     }
 
     @Override
@@ -70,13 +82,20 @@
         if (Log.isLoggable(TAG, Log.DEBUG)) {
             Log.d(TAG, "release");
         }
-        mContext.unregisterReceiver(this);
+        if (mCarUserManagerHelper.isHeadlessSystemUser()) {
+            mContext.unregisterReceiver(this);
+        }
     }
 
     @Override
     public void dump(PrintWriter writer) {
         writer.println(TAG);
         writer.println("Context: " + mContext);
+        boolean user0Unlocked;
+        synchronized (mLock) {
+            user0Unlocked = mUser0Unlocked;
+        }
+        writer.println("User0Unlocked: " + user0Unlocked);
     }
 
     @Override
@@ -86,13 +105,19 @@
         }
 
         if (Intent.ACTION_LOCKED_BOOT_COMPLETED.equals(intent.getAction())) {
-            if (mCarUserManagerHelper.getAllUsers().size() == 0) {
+            // We want to set restrictions on system and guest users only once. These are persisted
+            // onto disk, so it's sufficient to do it once + we minimize the number of disk writes.
+            if (Settings.Global.getInt(mContext.getContentResolver(),
+                    CarSettings.Global.DEFAULT_USER_RESTRICTIONS_SET, /* default= */ 0) == 0) {
                 setSystemUserRestrictions();
                 mCarUserManagerHelper.initDefaultGuestRestrictions();
+                Settings.Global.putInt(mContext.getContentResolver(),
+                        CarSettings.Global.DEFAULT_USER_RESTRICTIONS_SET, 1);
             }
+
         } else if (Intent.ACTION_USER_SWITCHED.equals(intent.getAction())) {
             // Update last active user if the switched-to user is a persistent, non-system user.
-            int currentUser = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, -1);
+            final int currentUser = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, -1);
             if (currentUser > UserHandle.USER_SYSTEM
                         && mCarUserManagerHelper.isPersistentUser(currentUser)) {
                 mCarUserManagerHelper.setLastActiveUser(currentUser);
@@ -100,6 +125,51 @@
         }
     }
 
+    /**
+     * Set user lock / unlocking status. This is coming from system server through ICar binder call.
+     * @param userHandle Handle of user
+     * @param unlocked unlocked (=true) or locked (=false)
+     */
+    public void setUserLockStatus(int userHandle, boolean unlocked) {
+        if (userHandle != UserHandle.USER_SYSTEM) {
+            return;
+        }
+        ArrayList<Runnable> tasks = null;
+        synchronized (mLock) {
+            // Assumes that car service need to do it only once during boot-up
+            if (unlocked && !mUser0Unlocked) {
+                tasks = new ArrayList<>(mUser0UnlockTasks);
+                mUser0UnlockTasks.clear();
+                mUser0Unlocked = unlocked;
+            }
+        }
+        if (tasks != null && tasks.size() > 0) {
+            Log.d(TAG, "User0 unlocked, run queued tasks:" + tasks.size());
+            for (Runnable r : tasks) {
+                r.run();
+            }
+        }
+    }
+
+    /**
+     * Run give runnable when user 0 is unlocked. If user 0 is already unlocked, it is
+     * run inside this call.
+     * @param r Runnable to run.
+     */
+    public void runOnUser0Unlock(Runnable r) {
+        boolean runNow = false;
+        synchronized (mLock) {
+            if (mUser0Unlocked) {
+                runNow = true;
+            } else {
+                mUser0UnlockTasks.add(r);
+            }
+        }
+        if (runNow) {
+            r.run();
+        }
+    }
+
     private void setSystemUserRestrictions() {
         // Disable adding accounts for system user.
         mCarUserManagerHelper.setUserRestriction(mCarUserManagerHelper.getSystemUserInfo(),
diff --git a/service/src/com/android/car/vms/VmsClientManager.java b/service/src/com/android/car/vms/VmsClientManager.java
new file mode 100644
index 0000000..c341b7a
--- /dev/null
+++ b/service/src/com/android/car/vms/VmsClientManager.java
@@ -0,0 +1,353 @@
+/*
+ * Copyright (C) 2019 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.car.vms;
+
+import android.car.userlib.CarUserManagerHelper;
+import android.content.BroadcastReceiver;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.ServiceConnection;
+import android.content.pm.UserInfo;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.Looper;
+import android.os.UserHandle;
+import android.util.ArrayMap;
+import android.util.Log;
+
+import com.android.car.CarServiceBase;
+import com.android.car.R;
+import com.android.internal.annotations.GuardedBy;
+
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Map;
+
+/**
+ * Manages service connections lifecycle for VMS publisher clients.
+ *
+ * Binds to system-level clients at boot and creates/destroys bindings for userspace clients
+ * according to the Android user lifecycle.
+ */
+public class VmsClientManager implements CarServiceBase {
+    private static final boolean DBG = false;
+    private static final String TAG = "VmsClientManager";
+
+    /**
+     * Interface for receiving updates about client connections.
+     */
+    public interface ConnectionListener {
+        /**
+         * Called when a client connection is established or re-established.
+         *
+         * @param clientName String that uniquely identifies the service and user.
+         * @param binder Binder for communicating with the client.
+         */
+        void onClientConnected(String clientName, IBinder binder);
+
+        /**
+         * Called when a client connection is terminated.
+         *
+         * @param clientName String that uniquely identifies the service and user.
+         */
+        void onClientDisconnected(String clientName);
+    }
+
+    private final Context mContext;
+    private final Handler mHandler;
+    private final CarUserManagerHelper mUserManagerHelper;
+    private final int mMillisBeforeRebind;
+
+    @GuardedBy("mListeners")
+    private final ArrayList<ConnectionListener> mListeners = new ArrayList<>();
+    @GuardedBy("mSystemClients")
+    private final Map<String, ClientConnection> mSystemClients = new ArrayMap<>();
+    @GuardedBy("mCurrentUserClients")
+    private final Map<String, ClientConnection> mCurrentUserClients = new ArrayMap<>();
+    @GuardedBy("mCurrentUserClients")
+    private int mCurrentUser;
+
+    final BroadcastReceiver mBootCompletedReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            switch (intent.getAction()) {
+                case Intent.ACTION_LOCKED_BOOT_COMPLETED:
+                    bindToSystemClients();
+                    break;
+                default:
+                    Log.e(TAG, "Unexpected intent received: " + intent);
+            }
+        }
+    };
+
+    final BroadcastReceiver mUserSwitchReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            if (DBG) Log.d(TAG, "Received " + intent);
+            switch (intent.getAction()) {
+                case Intent.ACTION_USER_SWITCHED:
+                case Intent.ACTION_USER_UNLOCKED:
+                    bindToCurrentUserClients();
+                    break;
+                default:
+                    Log.e(TAG, "Unexpected intent received: " + intent);
+            }
+        }
+    };
+
+    /**
+     * Constructor for client managers.
+     *
+     * @param context Context to use for registering receivers and binding services.
+     * @param userManagerHelper User manager for querying current user state.
+     */
+    public VmsClientManager(Context context, CarUserManagerHelper userManagerHelper) {
+        mContext = context;
+        mHandler = new Handler(Looper.getMainLooper());
+        mUserManagerHelper = userManagerHelper;
+        mMillisBeforeRebind = mContext.getResources().getInteger(
+                com.android.car.R.integer.millisecondsBeforeRebindToVmsPublisher);
+    }
+
+    @Override
+    public void init() {
+        mContext.registerReceiver(mBootCompletedReceiver,
+                new IntentFilter(Intent.ACTION_LOCKED_BOOT_COMPLETED));
+
+        IntentFilter userSwitchFilter = new IntentFilter();
+        userSwitchFilter.addAction(Intent.ACTION_USER_SWITCHED);
+        userSwitchFilter.addAction(Intent.ACTION_USER_UNLOCKED);
+        mContext.registerReceiverAsUser(mUserSwitchReceiver, UserHandle.ALL, userSwitchFilter, null,
+                null);
+    }
+
+    @Override
+    public void release() {
+        mContext.unregisterReceiver(mBootCompletedReceiver);
+        mContext.unregisterReceiver(mUserSwitchReceiver);
+        synchronized (mSystemClients) {
+            unbind(mSystemClients);
+        }
+        synchronized (mCurrentUserClients) {
+            unbind(mCurrentUserClients);
+        }
+    }
+
+    @Override
+    public void dump(PrintWriter writer) {
+        writer.println("*" + getClass().getSimpleName() + "*");
+        writer.println("mListeners:" + mListeners);
+        writer.println("mSystemClients:" + mSystemClients.keySet());
+        writer.println("mCurrentUser:" + mCurrentUser);
+        writer.println("mCurrentUserClients:" + mCurrentUserClients.keySet());
+    }
+
+    /**
+     * Registers a new client connection state listener.
+     *
+     * @param listener Listener to register.
+     */
+    public void registerConnectionListener(ConnectionListener listener) {
+        synchronized (mListeners) {
+            if (!mListeners.contains(listener)) {
+                mListeners.add(listener);
+            }
+        }
+    }
+
+    /**
+     * Unregisters a client connection state listener.
+     *
+     * @param listener Listener to remove.
+     */
+    public void unregisterConnectionListener(ConnectionListener listener) {
+        synchronized (mListeners) {
+            mListeners.remove(listener);
+        }
+    }
+
+    private void bindToSystemClients() {
+        String[] clientNames = mContext.getResources().getStringArray(
+                R.array.vmsPublisherSystemClients);
+        Log.i(TAG, "Attempting to bind " + clientNames.length + " system client(s)");
+        synchronized (mSystemClients) {
+            for (String clientName : clientNames) {
+                bind(mSystemClients, clientName, UserHandle.SYSTEM);
+            }
+        }
+    }
+
+    private void bindToCurrentUserClients() {
+        UserInfo userInfo = mUserManagerHelper.getCurrentForegroundUserInfo();
+        synchronized (mCurrentUserClients) {
+            if (mCurrentUser != userInfo.id) {
+                unbind(mCurrentUserClients);
+            }
+            mCurrentUser = userInfo.id;
+
+            // To avoid the risk of double-binding, clients running as the system user must only
+            // ever be bound in bindToSystemClients().
+            // In a headless multi-user system, the system user will never be in the foreground.
+            if (mCurrentUser == UserHandle.USER_SYSTEM) {
+                Log.e(TAG, "System user in foreground. Userspace clients will not be bound.");
+                return;
+            }
+
+            String[] clientNames = mContext.getResources().getStringArray(
+                    R.array.vmsPublisherUserClients);
+            Log.i(TAG, "Attempting to bind " + clientNames.length + " user client(s)");
+            for (String clientName : clientNames) {
+                bind(mCurrentUserClients, clientName, userInfo.getUserHandle());
+            }
+        }
+    }
+
+    private void bind(Map<String, ClientConnection> connectionMap, String clientName,
+            UserHandle userHandle) {
+        if (connectionMap.containsKey(clientName)) {
+            return;
+        }
+
+        ComponentName name = ComponentName.unflattenFromString(clientName);
+        if (name == null) {
+            Log.e(TAG, "Invalid client name: " + clientName);
+            return;
+        }
+
+        if (!mContext.getPackageManager().isPackageAvailable(name.getPackageName())) {
+            Log.w(TAG, "Client not installed: " + clientName);
+            return;
+        }
+
+        ClientConnection connection = new ClientConnection(name, userHandle);
+        if (connection.bind()) {
+            Log.i(TAG, "Client bound: " + connection);
+            connectionMap.put(clientName, connection);
+        } else {
+            Log.w(TAG, "Binding failed: " + connection);
+        }
+    }
+
+    private void unbind(Map<String, ClientConnection> connectionMap) {
+        for (ClientConnection connection : connectionMap.values()) {
+            connection.unbind();
+        }
+        connectionMap.clear();
+    }
+
+    private void notifyListenersOnClientConnected(String clientName, IBinder binder) {
+        synchronized (mListeners) {
+            for (ConnectionListener listener : mListeners) {
+                listener.onClientConnected(clientName, binder);
+            }
+        }
+    }
+
+    private void notifyListenersOnClientDisconnected(String clientName) {
+        synchronized (mListeners) {
+            for (ConnectionListener listener : mListeners) {
+                listener.onClientDisconnected(clientName);
+            }
+        }
+    }
+
+    class ClientConnection implements ServiceConnection {
+        private final ComponentName mName;
+        private final UserHandle mUser;
+        private final String mFullName;
+        private boolean mIsBound = false;
+        private IBinder mBinder;
+
+        ClientConnection(ComponentName name, UserHandle user) {
+            mName = name;
+            mUser = user;
+            mFullName = mName.flattenToString() + " U=" + mUser.getIdentifier();
+        }
+
+        synchronized boolean bind() {
+            // Ignore if already bound
+            if (mIsBound) {
+                return true;
+            }
+
+            if (DBG) Log.d(TAG, "binding: " + mFullName);
+            Intent intent = new Intent();
+            intent.setComponent(mName);
+            try {
+                mIsBound = mContext.bindServiceAsUser(intent, this, Context.BIND_AUTO_CREATE,
+                        mHandler, mUser);
+            } catch (SecurityException e) {
+                Log.e(TAG, "While binding " + mFullName, e);
+            }
+
+            return mIsBound;
+        }
+
+        synchronized void unbind() {
+            if (DBG) Log.d(TAG, "unbinding: " + mFullName);
+            try {
+                mContext.unbindService(this);
+            } catch (Throwable t) {
+                Log.e(TAG, "While unbinding " + mFullName, t);
+            }
+            mIsBound = false;
+            if (mBinder != null) {
+                notifyListenersOnClientDisconnected(mFullName);
+            }
+            mBinder = null;
+        }
+
+        @Override
+        public void onServiceConnected(ComponentName name, IBinder binder) {
+            if (DBG) Log.d(TAG, "onServiceConnected: " + mFullName);
+            mBinder = binder;
+            notifyListenersOnClientConnected(mFullName, mBinder);
+        }
+
+        @Override
+        public void onServiceDisconnected(ComponentName name) {
+            if (DBG) Log.d(TAG, "onServiceDisconnected: " + mFullName);
+            if (mBinder != null) {
+                notifyListenersOnClientDisconnected(mFullName);
+            }
+            mBinder = null;
+            // No need to unbind and rebind, per onServiceDisconnected documentation:
+            // "binding to the service will remain active, and you will receive a call
+            // to onServiceConnected when the Service is next running"
+        }
+
+        @Override
+        public void onBindingDied(ComponentName name) {
+            if (DBG) Log.d(TAG, "onBindingDied: " + mFullName);
+            unbind();
+            mHandler.postDelayed(this::bind, mMillisBeforeRebind);
+        }
+
+        @Override
+        public void onNullBinding(ComponentName name) {
+            if (DBG) Log.d(TAG, "onNullBinding: " + mFullName);
+            unbind();
+        }
+
+        @Override
+        public String toString() {
+            return mFullName;
+        }
+    }
+}
diff --git a/tests/CarTrustAgentClientApp/res/values/strings.xml b/tests/CarTrustAgentClientApp/res/values/strings.xml
index ff110d8..6e33a81 100644
--- a/tests/CarTrustAgentClientApp/res/values/strings.xml
+++ b/tests/CarTrustAgentClientApp/res/values/strings.xml
@@ -15,7 +15,7 @@
   ~ limitations under the License.
   -->
 <resources>
-    <string name="app_name">CarTrustAgentClient</string>
+    <string name="app_name" translatable="false">CarTrustAgentClient</string>
 
     <!-- service/characteristics uuid for unlocking a device -->
     <string name="unlock_service_uuid" translatable="false">5e2a68a1-27be-43f9-8d1e-4546976fabd7</string>
@@ -30,8 +30,8 @@
     <string name="pref_key_token_handle" translatable="false">token-handle-key</string>
     <string name="pref_key_escrow_token" translatable="false">escrow-token-key</string>
 
-    <string name="enroll_button">Enroll new token</string>
-    <string name="enroll_scan">Scan to enroll</string>
-    <string name="unlock_button">Unlock</string>
-    <string name="unlock_scan">Scan to unlock</string>
+    <string name="enroll_button" translatable="false">Enroll new token</string>
+    <string name="enroll_scan" translatable="false">Scan to enroll</string>
+    <string name="unlock_button" translatable="false">Unlock</string>
+    <string name="unlock_scan" translatable="false">Scan to unlock</string>
 </resources>
diff --git a/tests/DefaultStorageMonitoringCompanionApp/res/values/strings.xml b/tests/DefaultStorageMonitoringCompanionApp/res/values/strings.xml
index 8c0a9bb..d8048cd 100644
--- a/tests/DefaultStorageMonitoringCompanionApp/res/values/strings.xml
+++ b/tests/DefaultStorageMonitoringCompanionApp/res/values/strings.xml
@@ -1,3 +1,3 @@
 <resources>
-  <string name="app_name">Flash Storage Wear Notification</string>
+  <string name="app_name" translatable="false">Flash Storage Wear Notification</string>
 </resources>
diff --git a/tests/DefaultStorageMonitoringCompanionApp/src/com/google/android/car/defaultstoragemonitoringcompanionapp/MainActivity.java b/tests/DefaultStorageMonitoringCompanionApp/src/com/google/android/car/defaultstoragemonitoringcompanionapp/MainActivity.java
index bcec38b..b76388e 100644
--- a/tests/DefaultStorageMonitoringCompanionApp/src/com/google/android/car/defaultstoragemonitoringcompanionapp/MainActivity.java
+++ b/tests/DefaultStorageMonitoringCompanionApp/src/com/google/android/car/defaultstoragemonitoringcompanionapp/MainActivity.java
@@ -17,7 +17,6 @@
 
 import android.app.Activity;
 import android.car.Car;
-import android.car.CarNotConnectedException;
 import android.car.storagemonitoring.CarStorageMonitoringManager;
 import android.car.storagemonitoring.WearEstimate;
 import android.car.storagemonitoring.WearEstimateChange;
@@ -28,6 +27,7 @@
 import android.os.IBinder;
 import android.util.Log;
 import android.widget.TextView;
+
 import java.time.Duration;
 import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
@@ -112,28 +112,24 @@
         public void onServiceConnected(ComponentName name, IBinder service) {
             Log.d(TAG, "Connected to " + name.flattenToString());
 
-            try {
-                CarStorageMonitoringManager storageMonitoringManager =
+            CarStorageMonitoringManager storageMonitoringManager =
                     (CarStorageMonitoringManager) mCar.getCarManager(
-                        Car.STORAGE_MONITORING_SERVICE);
-                Log.d(TAG, "Acquired a CarStorageMonitoringManager " + storageMonitoringManager);
-                List<WearEstimateChange> wearEstimateChanges = storageMonitoringManager
-                    .getWearEstimateHistory();
-                if (wearEstimateChanges.isEmpty()) {
-                    finish();
-                }
-
-                WearEstimateChange currentChange = wearEstimateChanges
-                    .get(wearEstimateChanges.size() - 1);
-
-                if (!DEBUG && currentChange.isAcceptableDegradation) {
-                    finish();
-                }
-
-                    mNotificationTextView.setText(wearChangeToString(currentChange));
-            } catch (CarNotConnectedException e) {
-                Log.e(TAG, "Failed to get a connection", e);
+                            Car.STORAGE_MONITORING_SERVICE);
+            Log.d(TAG, "Acquired a CarStorageMonitoringManager " + storageMonitoringManager);
+            List<WearEstimateChange> wearEstimateChanges =
+                    storageMonitoringManager.getWearEstimateHistory();
+            if (wearEstimateChanges.isEmpty()) {
+                finish();
             }
+
+            WearEstimateChange currentChange =
+                    wearEstimateChanges.get(wearEstimateChanges.size() - 1);
+
+            if (!DEBUG && currentChange.isAcceptableDegradation) {
+                finish();
+            }
+
+            mNotificationTextView.setText(wearChangeToString(currentChange));
         }
 
         @Override
diff --git a/tests/DirectRenderingClusterSample/Android.mk b/tests/DirectRenderingClusterSample/Android.mk
index 62918d5..4408158 100644
--- a/tests/DirectRenderingClusterSample/Android.mk
+++ b/tests/DirectRenderingClusterSample/Android.mk
@@ -37,6 +37,8 @@
 LOCAL_JAVA_LIBRARIES += android.car
 LOCAL_STATIC_ANDROID_LIBRARIES += \
     androidx.legacy_legacy-support-v4 \
-    androidx.car_car-cluster
+    androidx-constraintlayout_constraintlayout \
+    androidx.car_car-cluster \
+    car-arch-common
 
 include $(BUILD_PACKAGE)
diff --git a/tests/DirectRenderingClusterSample/AndroidManifest.xml b/tests/DirectRenderingClusterSample/AndroidManifest.xml
index be7026c..12c6bba 100644
--- a/tests/DirectRenderingClusterSample/AndroidManifest.xml
+++ b/tests/DirectRenderingClusterSample/AndroidManifest.xml
@@ -16,8 +16,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
     package="android.car.cluster.sample"
-      android:versionCode="1"
-      android:versionName="1.0">
+    android:sharedUserId="android.uid.system">
 
     <uses-sdk android:targetSdkVersion="25" android:minSdkVersion="25"/>
 
@@ -39,18 +38,27 @@
     <uses-permission android:name="android.permission.MANAGE_USERS" />
     <!-- Required to launch navigation apps -->
     <uses-permission android:name="android.car.permission.CAR_INSTRUMENT_CLUSTER_CONTROL"/>
+    <!-- Required to watch activities running on the cluster -->
+    <uses-permission android:name="android.permission.SET_ACTIVITY_WATCHER"/>
+    <!-- Required to show car sensor data -->
+    <uses-permission android:name="android.car.permission.CAR_ENERGY"/>
+    <uses-permission android:name="android.car.permission.CAR_POWERTRAIN"/>
+    <uses-permission android:name="android.car.permission.CAR_INFO"/>
+    <uses-permission android:name="android.car.permission.CAR_SPEED"/>
+    <uses-permission android:name="android.car.permission.CAR_ENGINE_DETAILED"/>
 
     <application android:label="@string/app_name"
                  android:icon="@mipmap/ic_launcher"
                  android:directBootAware="true">
-        <service android:name=".SampleClusterServiceImpl"
+        <service android:name=".ClusterRenderingServiceImpl"
                  android:exported="false"
                  android:singleUser="true"
                  android:permission="android.car.permission.BIND_INSTRUMENT_CLUSTER_RENDERER_SERVICE"/>
 
         <activity android:name=".MainClusterActivity"
             android:exported="false"
-            android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen">
+            android:showForAllUsers="true"
+            android:theme="@style/Theme.ClusterTheme">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN"/>
                 <category android:name="android.intent.category.DEFAULT"/>
diff --git a/tests/DirectRenderingClusterSample/res/color/icon_color.xml b/tests/DirectRenderingClusterSample/res/color/icon_color.xml
new file mode 100644
index 0000000..1ce35ee
--- /dev/null
+++ b/tests/DirectRenderingClusterSample/res/color/icon_color.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android" >
+    <item
+        android:color="@color/icon_selected"
+        android:state_selected="true"/>
+    <item
+        android:color="@color/icon_selected"
+        android:state_focused="true"/>
+    <item
+        android:color="@color/icon_unselected"/>
+</selector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/btn_car_info.xml b/tests/DirectRenderingClusterSample/res/drawable/btn_car_info.xml
deleted file mode 100644
index 437ad41..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/btn_car_info.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_focused="true" >
-        <layer-list>
-            <item android:drawable="@drawable/ic_car_info"/>
-            <item android:drawable="@drawable/focused_button_shape"/>
-        </layer-list>
-    </item>
-    <item android:drawable="@drawable/ic_car_info"/>
-</selector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/btn_music.xml b/tests/DirectRenderingClusterSample/res/drawable/btn_music.xml
deleted file mode 100644
index 65e01b6..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/btn_music.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_focused="true" >
-        <layer-list>
-            <item android:drawable="@drawable/ic_music"/>
-            <item android:drawable="@drawable/focused_button_shape"/>
-        </layer-list>
-    </item>
-    <item android:drawable="@drawable/ic_music"/>
-</selector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/btn_nav.xml b/tests/DirectRenderingClusterSample/res/drawable/btn_nav.xml
deleted file mode 100644
index 9f9c6bc..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/btn_nav.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_focused="true" >
-        <layer-list>
-            <item android:drawable="@drawable/ic_nav"/>
-            <item android:drawable="@drawable/focused_button_shape"/>
-        </layer-list>
-    </item>
-    <item android:drawable="@drawable/ic_nav"/>
-</selector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/btn_phone.xml b/tests/DirectRenderingClusterSample/res/drawable/btn_phone.xml
deleted file mode 100644
index 2a6e249..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/btn_phone.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_focused="true" >
-        <layer-list>
-            <item android:drawable="@drawable/ic_phone"/>
-            <item android:drawable="@drawable/focused_button_shape"/>
-        </layer-list>
-    </item>
-    <item android:drawable="@drawable/ic_phone"/>
-</selector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/direction_arrive.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_arrive.xml
index 48068bd..c83d9f0 100644
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_arrive.xml
+++ b/tests/DirectRenderingClusterSample/res/drawable/direction_arrive.xml
@@ -1 +1,5 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp" android:height="20dp" android:viewportWidth="20" android:viewportHeight="20"><path android:fillColor="#FF000000" android:pathData="M10,5a2,2,0,1,1,2-2a2,2,0,0,1-2,2Zm4.91284,8.35114l-4.90368-6.342839999999999l-4.903689999999999,6.342839999999999a.38659.38659,0,0,0,.40942.62354l2.95184-1.34375a.35542.35542,0,0,1,.5409600000000001.3690700000000007h-.007690000000000197v5.50006a.49992.49992,0,0,0,.4999400000000005.4999399999999987h1.00012a.49992.49992,0,0,0,.4999399999999987-.4999399999999987v-5.491760000000001h.00916a.35757.35757,0,0,1,.54242-.37738l2.95184,1.34375a.3866.3866,0,0,0,.4094200000000008-.6235300000000006Z"/></vector>
\ No newline at end of file
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp"
+        android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
+    <path android:fillColor="#FF000000"
+          android:pathData="M10,5a2,2,0,1,1,2-2a2,2,0,0,1-2,2Zm4.91284,8.35114l-4.90368-6.342839999999999l-4.903689999999999,6.342839999999999a.38659.38659,0,0,0,.40942.62354l2.95184-1.34375a.35542.35542,0,0,1,.5409600000000001.3690700000000007h-.007690000000000197v5.50006a.49992.49992,0,0,0,.4999400000000005.4999399999999987h1.00012a.49992.49992,0,0,0,.4999399999999987-.4999399999999987v-5.491760000000001h.00916a.35757.35757,0,0,1,.54242-.37738l2.95184,1.34375a.3866.3866,0,0,0,.4094200000000008-.6235300000000006Z"/>
+</vector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/direction_arrive_left.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_arrive_left.xml
index a74f1be..3eba85d 100644
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_arrive_left.xml
+++ b/tests/DirectRenderingClusterSample/res/drawable/direction_arrive_left.xml
@@ -1 +1,5 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp" android:height="20dp" android:viewportWidth="20" android:viewportHeight="20"><path android:fillColor="#FF000000" android:pathData="M3,12a2,2,0,1,1,2-2a2,2,0,0,1-2,2Zm10.00293-.96332a4.05782,4.05782,0,0,1,3.98877,4.07324h.008300000000001972v1.37775a.51232.51232,0,0,0,.5123299999999986.5123299999999986h.97534a.51232.51232,0,0,0,.5123300000000022-.5123299999999986v-1.4876700000000014h-.013850000000001472a6.05607,6.05607,0,0,0-5.9834-5.96332l-.011-.00183l.00012.02008h-.9918700000000005v-.009090000000000487a.35757.35757,0,0,1-.37738-.54242l1.34375-2.95184a.38659.38659,0,0,0-.62354-.40942l-6.342829999999999,4.90368l6.34283,4.90369a.3866.3866,0,0,0,.62354-.40942l-1.34375-2.95184a.35757.35757,0,0,1,.3773800000000005-.5424299999999977v.00909h1"/></vector>
\ No newline at end of file
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp"
+        android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
+    <path android:fillColor="#FF000000"
+          android:pathData="M3,12a2,2,0,1,1,2-2a2,2,0,0,1-2,2Zm10.00293-.96332a4.05782,4.05782,0,0,1,3.98877,4.07324h.008300000000001972v1.37775a.51232.51232,0,0,0,.5123299999999986.5123299999999986h.97534a.51232.51232,0,0,0,.5123300000000022-.5123299999999986v-1.4876700000000014h-.013850000000001472a6.05607,6.05607,0,0,0-5.9834-5.96332l-.011-.00183l.00012.02008h-.9918700000000005v-.009090000000000487a.35757.35757,0,0,1-.37738-.54242l1.34375-2.95184a.38659.38659,0,0,0-.62354-.40942l-6.342829999999999,4.90368l6.34283,4.90369a.3866.3866,0,0,0,.62354-.40942l-1.34375-2.95184a.35757.35757,0,0,1,.3773800000000005-.5424299999999977v.00909h1"/>
+</vector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/direction_arrive_right.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_arrive_right.xml
index 0c2372c..0401e8c 100644
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_arrive_right.xml
+++ b/tests/DirectRenderingClusterSample/res/drawable/direction_arrive_right.xml
@@ -1 +1,5 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp" android:height="20dp" android:viewportWidth="20" android:viewportHeight="20"><path android:fillColor="#FF000000" android:pathData="M15,10a2,2,0,1,1,2,2a2,2,0,0,1-2-2Zm-8,1.0549300000000006h1v-.009090000000000487a.35757.35757,0,0,1,.37738.54242l-1.3437500000000009,2.9518400000000007a.3866.3866,0,0,0,.62354.40942l6.34283-4.903680000000001l-6.34283-4.90369a.38659.38659,0,0,0-.62354.40942l1.3437500000000009,2.9518500000000003a.35757.35757,0,0,1-.3773800000000005.5424199999999999v.009090000000000487h-.9918199999999997l.00011999999999989797-.020080000000000098l-.011.00183a6.05607,6.05607,0,0,0-5.98345,5.9633199999999995h-.013849999999999696v1.48767a.51232.51232,0,0,0,.51233.5123299999999986h.9753400000000001a.51232.51232,0,0,0,.51233-.5123299999999986v-1.3777500000000007h.008300000000000196a4.05782,4.05782,0,0,1,3.98877-4.07324"/></vector>
\ No newline at end of file
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp"
+        android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
+    <path android:fillColor="#FF000000"
+          android:pathData="M15,10a2,2,0,1,1,2,2a2,2,0,0,1-2-2Zm-8,1.0549300000000006h1v-.009090000000000487a.35757.35757,0,0,1,.37738.54242l-1.3437500000000009,2.9518400000000007a.3866.3866,0,0,0,.62354.40942l6.34283-4.903680000000001l-6.34283-4.90369a.38659.38659,0,0,0-.62354.40942l1.3437500000000009,2.9518500000000003a.35757.35757,0,0,1-.3773800000000005.5424199999999999v.009090000000000487h-.9918199999999997l.00011999999999989797-.020080000000000098l-.011.00183a6.05607,6.05607,0,0,0-5.98345,5.9633199999999995h-.013849999999999696v1.48767a.51232.51232,0,0,0,.51233.5123299999999986h.9753400000000001a.51232.51232,0,0,0,.51233-.5123299999999986v-1.3777500000000007h.008300000000000196a4.05782,4.05782,0,0,1,3.98877-4.07324"/>
+</vector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/direction_arrive_straight.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_arrive_straight.xml
index 48068bd..c83d9f0 100644
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_arrive_straight.xml
+++ b/tests/DirectRenderingClusterSample/res/drawable/direction_arrive_straight.xml
@@ -1 +1,5 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp" android:height="20dp" android:viewportWidth="20" android:viewportHeight="20"><path android:fillColor="#FF000000" android:pathData="M10,5a2,2,0,1,1,2-2a2,2,0,0,1-2,2Zm4.91284,8.35114l-4.90368-6.342839999999999l-4.903689999999999,6.342839999999999a.38659.38659,0,0,0,.40942.62354l2.95184-1.34375a.35542.35542,0,0,1,.5409600000000001.3690700000000007h-.007690000000000197v5.50006a.49992.49992,0,0,0,.4999400000000005.4999399999999987h1.00012a.49992.49992,0,0,0,.4999399999999987-.4999399999999987v-5.491760000000001h.00916a.35757.35757,0,0,1,.54242-.37738l2.95184,1.34375a.3866.3866,0,0,0,.4094200000000008-.6235300000000006Z"/></vector>
\ No newline at end of file
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp"
+        android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
+    <path android:fillColor="#FF000000"
+          android:pathData="M10,5a2,2,0,1,1,2-2a2,2,0,0,1-2,2Zm4.91284,8.35114l-4.90368-6.342839999999999l-4.903689999999999,6.342839999999999a.38659.38659,0,0,0,.40942.62354l2.95184-1.34375a.35542.35542,0,0,1,.5409600000000001.3690700000000007h-.007690000000000197v5.50006a.49992.49992,0,0,0,.4999400000000005.4999399999999987h1.00012a.49992.49992,0,0,0,.4999399999999987-.4999399999999987v-5.491760000000001h.00916a.35757.35757,0,0,1,.54242-.37738l2.95184,1.34375a.3866.3866,0,0,0,.4094200000000008-.6235300000000006Z"/>
+</vector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/direction_close.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_close.xml
index 7657570..c531094 100644
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_close.xml
+++ b/tests/DirectRenderingClusterSample/res/drawable/direction_close.xml
@@ -1 +1,5 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp" android:height="20dp" android:viewportWidth="20" android:viewportHeight="20"><path android:fillColor="#FF000000" android:pathData="M17.35551,4.05855l-5.589929999999999,5.589929999999999a.49713.49713,0,0,0,0,.703l5.58993,5.58993a.49713.49713,0,0,1,0,.703l-.711.711a.49713.49713,0,0,1-.703,0l-5.58993-5.58993a.49713.49713,0,0,0-.703,0l-5.590030000000002,5.590030000000002a.49713.49713,0,0,1-.703,0l-.711-.711a.49713.49713,0,0,1,0-.703l5.58993-5.58993a.49713.49713,0,0,0,0-.703l-5.589990000000002-5.590030000000002a.49713.49713,0,0,1,0-.703l.711-.711a.49713.49713,0,0,1,.703,0l5.58999,5.5898699999999995a.49713.49713,0,0,0,.703,0l5.58993-5.58993a.49713.49713,0,0,1,.703,0l.711.711a.49713.49713,0,0,1,.00010000000000331966.7030600000000002Z"/></vector>
\ No newline at end of file
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp"
+        android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
+    <path android:fillColor="#FF000000"
+          android:pathData="M17.35551,4.05855l-5.589929999999999,5.589929999999999a.49713.49713,0,0,0,0,.703l5.58993,5.58993a.49713.49713,0,0,1,0,.703l-.711.711a.49713.49713,0,0,1-.703,0l-5.58993-5.58993a.49713.49713,0,0,0-.703,0l-5.590030000000002,5.590030000000002a.49713.49713,0,0,1-.703,0l-.711-.711a.49713.49713,0,0,1,0-.703l5.58993-5.58993a.49713.49713,0,0,0,0-.703l-5.589990000000002-5.590030000000002a.49713.49713,0,0,1,0-.703l.711-.711a.49713.49713,0,0,1,.703,0l5.58999,5.5898699999999995a.49713.49713,0,0,0,.703,0l5.58993-5.58993a.49713.49713,0,0,1,.703,0l.711.711a.49713.49713,0,0,1,.00010000000000331966.7030600000000002Z"/>
+</vector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/direction_continue.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_continue.xml
index 86526a4..231dac0 100644
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_continue.xml
+++ b/tests/DirectRenderingClusterSample/res/drawable/direction_continue.xml
@@ -1 +1,5 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp" android:height="20dp" android:viewportWidth="20" android:viewportHeight="20"><path android:fillColor="#FF000000" android:pathData="M14.50342,8.96637l-2.9518500000000003-1.3437499999999991a.35755.35755,0,0,0-.5424100000000003.3773799999999996v9.49652a.50346.50346,0,0,1-.5034799999999997.5034799999999997h-.993a.50346.50346,0,0,1-.50348-.50348v-9.49652a.35756.35756,0,0,0-.54242-.37738l-2.9518899999999997,1.3437499999999991a.38659.38659,0,0,1-.40942-.62354l4.903689999999999-6.342829999999999l4.90369,6.34283a.3866.3866,0,0,1-.40942999999999863.6235400000000002Z"/></vector>
\ No newline at end of file
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp"
+        android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
+    <path android:fillColor="#FF000000"
+          android:pathData="M14.50342,8.96637l-2.9518500000000003-1.3437499999999991a.35755.35755,0,0,0-.5424100000000003.3773799999999996v9.49652a.50346.50346,0,0,1-.5034799999999997.5034799999999997h-.993a.50346.50346,0,0,1-.50348-.50348v-9.49652a.35756.35756,0,0,0-.54242-.37738l-2.9518899999999997,1.3437499999999991a.38659.38659,0,0,1-.40942-.62354l4.903689999999999-6.342829999999999l4.90369,6.34283a.3866.3866,0,0,1-.40942999999999863.6235400000000002Z"/>
+</vector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/direction_continue_left.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_continue_left.xml
index 85dcf04..faa7027 100644
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_continue_left.xml
+++ b/tests/DirectRenderingClusterSample/res/drawable/direction_continue_left.xml
@@ -1 +1,5 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp" android:height="20dp" android:viewportWidth="20" android:viewportHeight="20"><path android:fillColor="#FF000000" android:pathData="M10,5.97986l.011.00183a6.06019,6.06019,0,0,1,5.989000000000001,6.07324v3.9450699999999994h-.003109999999999502l.002,1.50317a.49614.49614,0,0,1-.49620000000000175.4968299999999992h-1.0064700000000002a.49622.49622,0,0,1-.4962199999999992-.496220000000001v-5.448849999999998a4.05782,4.05782,0,0,0-3.98877-4.07324h-1.99878a.3576.3576,0,0,0-.37738.54248l1.3437500000000009,2.951830000000001a.38659.38659,0,0,1-.62354.40942l-6.34698-4.885420000000002l6.347-4.922a.38659.38659,0,0,1,.62354.40942l-1.3437700000000001,2.9518499999999994a.35757.35757,0,0,0,.37738.54242h1.9875500000000006"/></vector>
\ No newline at end of file
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp"
+        android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
+    <path android:fillColor="#FF000000"
+          android:pathData="M10,5.97986l.011.00183a6.06019,6.06019,0,0,1,5.989000000000001,6.07324v3.9450699999999994h-.003109999999999502l.002,1.50317a.49614.49614,0,0,1-.49620000000000175.4968299999999992h-1.0064700000000002a.49622.49622,0,0,1-.4962199999999992-.496220000000001v-5.448849999999998a4.05782,4.05782,0,0,0-3.98877-4.07324h-1.99878a.3576.3576,0,0,0-.37738.54248l1.3437500000000009,2.951830000000001a.38659.38659,0,0,1-.62354.40942l-6.34698-4.885420000000002l6.347-4.922a.38659.38659,0,0,1,.62354.40942l-1.3437700000000001,2.9518499999999994a.35757.35757,0,0,0,.37738.54242h1.9875500000000006"/>
+</vector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/direction_continue_right.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_continue_right.xml
index 4438838..6ef4749 100644
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_continue_right.xml
+++ b/tests/DirectRenderingClusterSample/res/drawable/direction_continue_right.xml
@@ -1 +1,5 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp" android:height="20dp" android:viewportWidth="20" android:viewportHeight="20"><path android:fillColor="#FF000000" android:pathData="M9.98877,7.98169a4.05782,4.05782,0,0,0-3.9887700000000006,4.07324v5.44885a.49622.49622,0,0,1-.4962200000000001.496220000000001h-1.0064700000000002a.49614.49614,0,0,1-.49615-.49683l.0019500000000007844-1.5031700000000008h-.0031100000000003902v-3.9450699999999994a6.06019,6.06019,0,0,1,5.989000000000001-6.07324l.010999999999999233-.0018299999999999983v.0018299999999999983h1.98755a.35757.35757,0,0,0,.37738-.54242l-1.3437500000000018-2.9518400000000007a.38659.38659,0,0,1,.6235300000000006-.40942999999999996l6.346990000000002,4.922000000000001l-6.347,4.88544a.38659.38659,0,0,1-.62354-.40942l1.34375-2.95184a.3576.3576,0,0,0-.37738-.54248h-1.998759999999999Z"/></vector>
\ No newline at end of file
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp"
+        android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
+    <path android:fillColor="#FF000000"
+          android:pathData="M9.98877,7.98169a4.05782,4.05782,0,0,0-3.9887700000000006,4.07324v5.44885a.49622.49622,0,0,1-.4962200000000001.496220000000001h-1.0064700000000002a.49614.49614,0,0,1-.49615-.49683l.0019500000000007844-1.5031700000000008h-.0031100000000003902v-3.9450699999999994a6.06019,6.06019,0,0,1,5.989000000000001-6.07324l.010999999999999233-.0018299999999999983v.0018299999999999983h1.98755a.35757.35757,0,0,0,.37738-.54242l-1.3437500000000018-2.9518400000000007a.38659.38659,0,0,1,.6235300000000006-.40942999999999996l6.346990000000002,4.922000000000001l-6.347,4.88544a.38659.38659,0,0,1-.62354-.40942l1.34375-2.95184a.3576.3576,0,0,0-.37738-.54248h-1.998759999999999Z"/>
+</vector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/direction_depart.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_depart.xml
index 89407e1..46c2408 100644
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_depart.xml
+++ b/tests/DirectRenderingClusterSample/res/drawable/direction_depart.xml
@@ -1 +1,5 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp" android:height="20dp" android:viewportWidth="20" android:viewportHeight="20"><path android:fillColor="#FF000000" android:pathData="M9.98172,19a2,2,0,1,1,2-2a2,2,0,0,1-2,2Zm4.912840000000001-11.65717l-4.903690000000001-6.342829999999999l-4.90368,6.34283a.38659.38659,0,0,0,.40942.62354l2.95184-1.34375a.35542.35542,0,0,1,.541.36908h-.007730000000000459v5.50006a.49992.49992,0,0,0,.49994.49994h1.00012a.49992.49992,0,0,0,.49994-.49994v-5.491760000000001h.00916a.35757.35757,0,0,1,.54242-.37738l2.95184,1.34375a.3866.3866,0,0,0,.409419999999999-.6235400000000002Z"/></vector>
\ No newline at end of file
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp"
+        android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
+    <path android:fillColor="#FF000000"
+          android:pathData="M9.98172,19a2,2,0,1,1,2-2a2,2,0,0,1-2,2Zm4.912840000000001-11.65717l-4.903690000000001-6.342829999999999l-4.90368,6.34283a.38659.38659,0,0,0,.40942.62354l2.95184-1.34375a.35542.35542,0,0,1,.541.36908h-.007730000000000459v5.50006a.49992.49992,0,0,0,.49994.49994h1.00012a.49992.49992,0,0,0,.49994-.49994v-5.491760000000001h.00916a.35757.35757,0,0,1,.54242-.37738l2.95184,1.34375a.3866.3866,0,0,0,.409419999999999-.6235400000000002Z"/>
+</vector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/direction_fork_left.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_fork_left.xml
index 88ed4ee..8ca9ced 100644
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_fork_left.xml
+++ b/tests/DirectRenderingClusterSample/res/drawable/direction_fork_left.xml
@@ -1 +1,5 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp" android:height="20dp" android:viewportWidth="20" android:viewportHeight="20"><path android:fillColor="#FF000000" android:pathData="M17.73611,6.57682a.30465.30465,0,0,1,.23032.10507l.649.74859a.30457.30457,0,0,1-.03369.43226l-2.06044,1.7384500000000012a5.4089,5.4089,0,0,0-1.73306,4.29459l.0047,3.60769a.29612.29612,0,0,1-.2961399999999994.2965300000000006h-1.0064700000000002a.29657.29657,0,0,1-.29623-.29622l-.00058-3.47624a6.99129,6.99129,0,0,1,2.269479999999998-5.626159999999999l2.077-1.75275a.30475.30475,0,0,1,.1962-.07182m0-.2a.50269.50269,0,0,0-.32516.119l-2.07704,1.7527300000000006a7.25157,7.25157,0,0,0-2.3398900000000005,5.794459999999999v3.46082a.49622.49622,0,0,0,.496220000000001.4961800000000025h1.0064700000000002a.49614.49614,0,0,0,.49615-.49681l-.0047-3.60767a5.2182,5.2182,0,0,1,1.665-4.14405l2.057410000000001-1.7358700000000002a.50455.50455,0,0,0,.05585-.71613l-.649-.74859a.50345.50345,0,0,0-.38147-.17406h0Zm-8.73542-.39511999999999947h-1.9875500000000006a.35757.35757,0,0,1-.37738-.54242l1.3437499999999991-2.9518400000000007a.38659.38659,0,0,0-.6235399999999993-.40942999999999996l-6.34698,4.922000000000001l6.347,4.88544a.38659.38659,0,0,0,.6235199999999992-.40943999999999825l-1.34375-2.951830000000001a.3576.3576,0,0,1,.37738-.54248h1.9987700000000013a4.05782,4.05782,0,0,1,3.98877,4.07324v5.44885a.49622.49622,0,0,0,.49622999999999884.496220000000001h1.00647a.49614.49614,0,0,0,.49615-.49683l-.001960000000000406-1.5031700000000008h.00311v-3.9450699999999994a6.06019,6.06019,0,0,0-5.989-6.07324l-.011-.00183"/></vector>
\ No newline at end of file
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp"
+        android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
+    <path android:fillColor="#FF000000"
+          android:pathData="M17.73611,6.57682a.30465.30465,0,0,1,.23032.10507l.649.74859a.30457.30457,0,0,1-.03369.43226l-2.06044,1.7384500000000012a5.4089,5.4089,0,0,0-1.73306,4.29459l.0047,3.60769a.29612.29612,0,0,1-.2961399999999994.2965300000000006h-1.0064700000000002a.29657.29657,0,0,1-.29623-.29622l-.00058-3.47624a6.99129,6.99129,0,0,1,2.269479999999998-5.626159999999999l2.077-1.75275a.30475.30475,0,0,1,.1962-.07182m0-.2a.50269.50269,0,0,0-.32516.119l-2.07704,1.7527300000000006a7.25157,7.25157,0,0,0-2.3398900000000005,5.794459999999999v3.46082a.49622.49622,0,0,0,.496220000000001.4961800000000025h1.0064700000000002a.49614.49614,0,0,0,.49615-.49681l-.0047-3.60767a5.2182,5.2182,0,0,1,1.665-4.14405l2.057410000000001-1.7358700000000002a.50455.50455,0,0,0,.05585-.71613l-.649-.74859a.50345.50345,0,0,0-.38147-.17406h0Zm-8.73542-.39511999999999947h-1.9875500000000006a.35757.35757,0,0,1-.37738-.54242l1.3437499999999991-2.9518400000000007a.38659.38659,0,0,0-.6235399999999993-.40942999999999996l-6.34698,4.922000000000001l6.347,4.88544a.38659.38659,0,0,0,.6235199999999992-.40943999999999825l-1.34375-2.951830000000001a.3576.3576,0,0,1,.37738-.54248h1.9987700000000013a4.05782,4.05782,0,0,1,3.98877,4.07324v5.44885a.49622.49622,0,0,0,.49622999999999884.496220000000001h1.00647a.49614.49614,0,0,0,.49615-.49683l-.001960000000000406-1.5031700000000008h.00311v-3.9450699999999994a6.06019,6.06019,0,0,0-5.989-6.07324l-.011-.00183"/>
+</vector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/direction_fork_right.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_fork_right.xml
index b77da2a..9953608 100644
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_fork_right.xml
+++ b/tests/DirectRenderingClusterSample/res/drawable/direction_fork_right.xml
@@ -1 +1,5 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp" android:height="20dp" android:viewportWidth="20" android:viewportHeight="20"><path android:fillColor="#FF000000" android:pathData="M2.27386,6.57682a.30457.30457,0,0,1,.1961400000000002.07182000000000066l2.0739999999999994,1.7501800000000003a7.00218,7.00218,0,0,1,2.27186,5.644179999999999v3.46088a.29651.29651,0,0,1-.29617999999999967.29612000000000194h-1.0065a.29613.29613,0,0,1-.29618000000000055-.2965699999999991l.003790000000000404-3.5888300000000015a5.42,5.42,0,0,0-1.73517-4.316l-2.0573699999999997-1.7358600000000015a.30461.30461,0,0,1-.03372-.43226l.649-.74859a.30466.30466,0,0,1,.23035-.10507m0-.2a.50345.50345,0,0,0-.38147.17406l-.649.74859a.50458.50458,0,0,0,.05588.71613l2.0573699999999997,1.7358600000000006a5.2182,5.2182,0,0,1,1.665,4.14405l-.0046600000000003305,3.607660000000001a.49617.49617,0,0,0,.49617999999999984.4968299999999992h1.0065a.49616.49616,0,0,0,.49615-.49615v-3.4608500000000006a7.25157,7.25157,0,0,0-2.33983-5.794459999999999l-2.077-1.7527499999999998a.50264.50264,0,0,0-.32516-.119h0Zm8.73442,1.604870000000001h1.98755a.3576.3576,0,0,1,.37738.54248l-1.3437500000000018,2.951830000000001a.38659.38659,0,0,0,.62354.40942l6.34698-4.885420000000002l-6.3469999999999995-4.922000000000001a.38659.38659,0,0,0-.62354.40942l1.34375,2.95184a.35757.35757,0,0,1-.37738.54242h-1.9875299999999996v-.0018199999999986005l-.011.00183a6.06019,6.06019,0,0,0-5.989,6.07324v3.9450699999999994h.003109999999998614l-.002,1.50317a.49614.49614,0,0,0,.4962100000000005.4968299999999992h1.0064599999999997a.49622.49622,0,0,0,.49622-.49622v-5.448849999999998a4.05782,4.05782,0,0,1,3.98877-4.07324h.011229999999999407Z"/></vector>
\ No newline at end of file
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp"
+        android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
+    <path android:fillColor="#FF000000"
+          android:pathData="M2.27386,6.57682a.30457.30457,0,0,1,.1961400000000002.07182000000000066l2.0739999999999994,1.7501800000000003a7.00218,7.00218,0,0,1,2.27186,5.644179999999999v3.46088a.29651.29651,0,0,1-.29617999999999967.29612000000000194h-1.0065a.29613.29613,0,0,1-.29618000000000055-.2965699999999991l.003790000000000404-3.5888300000000015a5.42,5.42,0,0,0-1.73517-4.316l-2.0573699999999997-1.7358600000000015a.30461.30461,0,0,1-.03372-.43226l.649-.74859a.30466.30466,0,0,1,.23035-.10507m0-.2a.50345.50345,0,0,0-.38147.17406l-.649.74859a.50458.50458,0,0,0,.05588.71613l2.0573699999999997,1.7358600000000006a5.2182,5.2182,0,0,1,1.665,4.14405l-.0046600000000003305,3.607660000000001a.49617.49617,0,0,0,.49617999999999984.4968299999999992h1.0065a.49616.49616,0,0,0,.49615-.49615v-3.4608500000000006a7.25157,7.25157,0,0,0-2.33983-5.794459999999999l-2.077-1.7527499999999998a.50264.50264,0,0,0-.32516-.119h0Zm8.73442,1.604870000000001h1.98755a.3576.3576,0,0,1,.37738.54248l-1.3437500000000018,2.951830000000001a.38659.38659,0,0,0,.62354.40942l6.34698-4.885420000000002l-6.3469999999999995-4.922000000000001a.38659.38659,0,0,0-.62354.40942l1.34375,2.95184a.35757.35757,0,0,1-.37738.54242h-1.9875299999999996v-.0018199999999986005l-.011.00183a6.06019,6.06019,0,0,0-5.989,6.07324v3.9450699999999994h.003109999999998614l-.002,1.50317a.49614.49614,0,0,0,.4962100000000005.4968299999999992h1.0064599999999997a.49622.49622,0,0,0,.49622-.49622v-5.448849999999998a4.05782,4.05782,0,0,1,3.98877-4.07324h.011229999999999407Z"/>
+</vector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/direction_merge_left.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_merge_left.xml
index 8ecec69..b8954b8 100644
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_merge_left.xml
+++ b/tests/DirectRenderingClusterSample/res/drawable/direction_merge_left.xml
@@ -1 +1,5 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp" android:height="20dp" android:viewportWidth="20" android:viewportHeight="20"><path android:fillColor="#FF000000" android:pathData="M7.8,7.2v10.302520000000001a.2978.2978,0,0,1-.2974699999999997.2974800000000002h-1.0050600000000003a.2978.2978,0,0,1-.2974699999999997-.2974800000000002v-10.302520000000001h1.5999999999999996m.20000000000000018-.1999999999999993h-2v10.50252a.49747.49747,0,0,0,.49746999999999986.4974799999999995h1.0050600000000003a.49747.49747,0,0,0,.49746999999999986-.4974799999999995v-10.50252h0Zm-.018309999999999604,3v-1.9875500000000006a.3576.3576,0,0,1,.54248-.37738l2.951830000000001,1.3437500000000009a.38659.38659,0,0,0,.40942-.62354l-4.885420000000002-6.34698l-4.922,6.347a.38659.38659,0,0,0,.40942.62354l2.9518499999999994-1.3437700000000001a.35757.35757,0,0,1,.54242.37738v1.9875500000000006h-.0018299999999991101l.00183.011a6.06019,6.06019,0,0,0,6.07324,5.989000000000001h3.9450699999999994v-.003109999999999502l1.50317.002a.49614.49614,0,0,0,.4968299999999992-.49620000000000175v-1.0064700000000002a.49622.49622,0,0,0-.496220000000001-.4962199999999992h-5.448849999999998a4.05782,4.05782,0,0,1-4.07324-3.98877v-.011229999999999407Z"/></vector>
\ No newline at end of file
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp"
+        android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
+    <path android:fillColor="#FF000000"
+          android:pathData="M7.8,7.2v10.302520000000001a.2978.2978,0,0,1-.2974699999999997.2974800000000002h-1.0050600000000003a.2978.2978,0,0,1-.2974699999999997-.2974800000000002v-10.302520000000001h1.5999999999999996m.20000000000000018-.1999999999999993h-2v10.50252a.49747.49747,0,0,0,.49746999999999986.4974799999999995h1.0050600000000003a.49747.49747,0,0,0,.49746999999999986-.4974799999999995v-10.50252h0Zm-.018309999999999604,3v-1.9875500000000006a.3576.3576,0,0,1,.54248-.37738l2.951830000000001,1.3437500000000009a.38659.38659,0,0,0,.40942-.62354l-4.885420000000002-6.34698l-4.922,6.347a.38659.38659,0,0,0,.40942.62354l2.9518499999999994-1.3437700000000001a.35757.35757,0,0,1,.54242.37738v1.9875500000000006h-.0018299999999991101l.00183.011a6.06019,6.06019,0,0,0,6.07324,5.989000000000001h3.9450699999999994v-.003109999999999502l1.50317.002a.49614.49614,0,0,0,.4968299999999992-.49620000000000175v-1.0064700000000002a.49622.49622,0,0,0-.496220000000001-.4962199999999992h-5.448849999999998a4.05782,4.05782,0,0,1-4.07324-3.98877v-.011229999999999407Z"/>
+</vector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/direction_merge_right.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_merge_right.xml
index aafc98c..ab89d03 100644
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_merge_right.xml
+++ b/tests/DirectRenderingClusterSample/res/drawable/direction_merge_right.xml
@@ -1 +1,5 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp" android:height="20dp" android:viewportWidth="20" android:viewportHeight="20"><path android:fillColor="#FF000000" android:pathData="M13.8,7.2v10.299210000000002a.30112.30112,0,0,1-.30078.3008h-.9984300000000008a.30112.30112,0,0,1-.300790000000001-.30079999999999885v-10.299210000000002h1.6m.20000000000000107-.1999999999999993h-2v10.499210000000001a.50079.50079,0,0,0,.5007900000000003.5007899999999985h.99841a.50079.50079,0,0,0,.5007999999999999-.5007899999999985v-10.499210000000001h0Zm.01831,3v-1.9875500000000006a.35757.35757,0,0,1,.54242-.37738l2.95184,1.34375a.38659.38659,0,0,0,.4094300000000004-.6235299999999988l-4.922000000000001-6.34699l-4.88544,6.347a.38659.38659,0,0,0,.40942.62354l2.95184-1.34375a.3576.3576,0,0,1,.54248.37738v1.99878a4.05782,4.05782,0,0,1-4.0732300000000015,3.9887499999999996h-5.44885a.49622.49622,0,0,0-.4962200000000001.4962199999999992v1.00647a.49614.49614,0,0,0,.49683.49615l1.50317-.001949999999999008v.003109999999999502h3.9450700000000003a6.06019,6.06019,0,0,0,6.07324-5.989l.0018299999999999983-.010999999999999233"/></vector>
\ No newline at end of file
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp"
+        android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
+    <path android:fillColor="#FF000000"
+          android:pathData="M13.8,7.2v10.299210000000002a.30112.30112,0,0,1-.30078.3008h-.9984300000000008a.30112.30112,0,0,1-.300790000000001-.30079999999999885v-10.299210000000002h1.6m.20000000000000107-.1999999999999993h-2v10.499210000000001a.50079.50079,0,0,0,.5007900000000003.5007899999999985h.99841a.50079.50079,0,0,0,.5007999999999999-.5007899999999985v-10.499210000000001h0Zm.01831,3v-1.9875500000000006a.35757.35757,0,0,1,.54242-.37738l2.95184,1.34375a.38659.38659,0,0,0,.4094300000000004-.6235299999999988l-4.922000000000001-6.34699l-4.88544,6.347a.38659.38659,0,0,0,.40942.62354l2.95184-1.34375a.3576.3576,0,0,1,.54248.37738v1.99878a4.05782,4.05782,0,0,1-4.0732300000000015,3.9887499999999996h-5.44885a.49622.49622,0,0,0-.4962200000000001.4962199999999992v1.00647a.49614.49614,0,0,0,.49683.49615l1.50317-.001949999999999008v.003109999999999502h3.9450700000000003a6.06019,6.06019,0,0,0,6.07324-5.989l.0018299999999999983-.010999999999999233"/>
+</vector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/direction_new_name_straight.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_new_name_straight.xml
index 86526a4..231dac0 100644
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_new_name_straight.xml
+++ b/tests/DirectRenderingClusterSample/res/drawable/direction_new_name_straight.xml
@@ -1 +1,5 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp" android:height="20dp" android:viewportWidth="20" android:viewportHeight="20"><path android:fillColor="#FF000000" android:pathData="M14.50342,8.96637l-2.9518500000000003-1.3437499999999991a.35755.35755,0,0,0-.5424100000000003.3773799999999996v9.49652a.50346.50346,0,0,1-.5034799999999997.5034799999999997h-.993a.50346.50346,0,0,1-.50348-.50348v-9.49652a.35756.35756,0,0,0-.54242-.37738l-2.9518899999999997,1.3437499999999991a.38659.38659,0,0,1-.40942-.62354l4.903689999999999-6.342829999999999l4.90369,6.34283a.3866.3866,0,0,1-.40942999999999863.6235400000000002Z"/></vector>
\ No newline at end of file
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp"
+        android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
+    <path android:fillColor="#FF000000"
+          android:pathData="M14.50342,8.96637l-2.9518500000000003-1.3437499999999991a.35755.35755,0,0,0-.5424100000000003.3773799999999996v9.49652a.50346.50346,0,0,1-.5034799999999997.5034799999999997h-.993a.50346.50346,0,0,1-.50348-.50348v-9.49652a.35756.35756,0,0,0-.54242-.37738l-2.9518899999999997,1.3437499999999991a.38659.38659,0,0,1-.40942-.62354l4.903689999999999-6.342829999999999l4.90369,6.34283a.3866.3866,0,0,1-.40942999999999863.6235400000000002Z"/>
+</vector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/direction_off_ramp_left.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_off_ramp_left.xml
index b00eaa2..536fd22 100644
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_off_ramp_left.xml
+++ b/tests/DirectRenderingClusterSample/res/drawable/direction_off_ramp_left.xml
@@ -1 +1,5 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp" android:height="20dp" android:viewportWidth="20" android:viewportHeight="20"><path android:fillColor="#FF000000" android:pathData="M14.5029,2.2a.29744.29744,0,0,1,.29710000000000036.2971199999999996v15.005760000000002a.29744.29744,0,0,1-.29710000000000036.2971199999999996h-1.0058000000000007a.29744.29744,0,0,1-.29710000000000036-.2971199999999996v-15.005760000000002a.29744.29744,0,0,1,.29710000000000036-.2971199999999987h1.0058m0-.2h-1.0058000000000007a.49711.49711,0,0,0-.49709999999999965.4971199999999998v15.005760000000002a.49711.49711,0,0,0,.49709999999999965.4971199999999989h1.0058a.49711.49711,0,0,0,.49709999999999965-.4971199999999989v-15.005760000000002a.49711.49711,0,0,0-.49709999999999965-.4971199999999989h0Zm-5.50212,3.9816900000000004h-1.9875500000000006a.35757.35757,0,0,1-.37738-.54242l1.3437499999999991-2.9518400000000007a.38659.38659,0,0,0-.6235399999999993-.40942999999999996l-6.34698,4.922000000000001l6.347,4.88544a.38659.38659,0,0,0,.6235199999999992-.40943999999999825l-1.34375-2.951830000000001a.3576.3576,0,0,1,.37738-.54248h1.9987700000000013a4.05782,4.05782,0,0,1,3.98877,4.07324v5.44885a.49622.49622,0,0,0,.49622999999999884.496220000000001h1.00647a.49614.49614,0,0,0,.49615-.49683l-.001960000000000406-1.5031700000000008h.00311v-3.9450699999999994a6.06019,6.06019,0,0,0-5.989-6.07324l-.011-.00183"/></vector>
\ No newline at end of file
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp"
+        android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
+    <path android:fillColor="#FF000000"
+          android:pathData="M14.5029,2.2a.29744.29744,0,0,1,.29710000000000036.2971199999999996v15.005760000000002a.29744.29744,0,0,1-.29710000000000036.2971199999999996h-1.0058000000000007a.29744.29744,0,0,1-.29710000000000036-.2971199999999996v-15.005760000000002a.29744.29744,0,0,1,.29710000000000036-.2971199999999987h1.0058m0-.2h-1.0058000000000007a.49711.49711,0,0,0-.49709999999999965.4971199999999998v15.005760000000002a.49711.49711,0,0,0,.49709999999999965.4971199999999989h1.0058a.49711.49711,0,0,0,.49709999999999965-.4971199999999989v-15.005760000000002a.49711.49711,0,0,0-.49709999999999965-.4971199999999989h0Zm-5.50212,3.9816900000000004h-1.9875500000000006a.35757.35757,0,0,1-.37738-.54242l1.3437499999999991-2.9518400000000007a.38659.38659,0,0,0-.6235399999999993-.40942999999999996l-6.34698,4.922000000000001l6.347,4.88544a.38659.38659,0,0,0,.6235199999999992-.40943999999999825l-1.34375-2.951830000000001a.3576.3576,0,0,1,.37738-.54248h1.9987700000000013a4.05782,4.05782,0,0,1,3.98877,4.07324v5.44885a.49622.49622,0,0,0,.49622999999999884.496220000000001h1.00647a.49614.49614,0,0,0,.49615-.49683l-.001960000000000406-1.5031700000000008h.00311v-3.9450699999999994a6.06019,6.06019,0,0,0-5.989-6.07324l-.011-.00183"/>
+</vector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/direction_off_ramp_right.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_off_ramp_right.xml
index a36c18a..3048587 100644
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_off_ramp_right.xml
+++ b/tests/DirectRenderingClusterSample/res/drawable/direction_off_ramp_right.xml
@@ -1 +1,5 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp" android:height="20dp" android:viewportWidth="20" android:viewportHeight="20"><path android:fillColor="#FF000000" android:pathData="M6.5029,2.2a.29744.29744,0,0,1,.2970999999999995.2971199999999996v15.005760000000002a.29744.29744,0,0,1-.2970999999999995.2971199999999996h-1.0058000000000007a.29744.29744,0,0,1-.2970999999999995-.2971199999999996v-15.005760000000002a.29744.29744,0,0,1,.2970999999999995-.2971199999999987h1.0058000000000007m0-.2h-1.0058000000000007a.49711.49711,0,0,0-.49709999999999965.4971199999999998v15.005760000000002a.49711.49711,0,0,0,.49709999999999965.4971199999999989h1.0058000000000007a.49711.49711,0,0,0,.49709999999999965-.4971199999999989v-15.005760000000002a.49711.49711,0,0,0-.49709999999999965-.4971199999999989h0Zm4.5054,5.98169h1.98755a.3576.3576,0,0,1,.37738.54248l-1.3437500000000018,2.951830000000001a.38659.38659,0,0,0,.62354.40942l6.34698-4.885420000000002l-6.3469999999999995-4.922000000000001a.38659.38659,0,0,0-.62354.40942l1.34375,2.95184a.35757.35757,0,0,1-.37738.54242h-1.9875299999999996v-.0018199999999986005l-.011.00183a6.06019,6.06019,0,0,0-5.989,6.07324v3.9450699999999994h.003109999999998614l-.002,1.50317a.49614.49614,0,0,0,.4962100000000005.4968299999999992h1.0064599999999997a.49622.49622,0,0,0,.49622-.49622v-5.448849999999998a4.05782,4.05782,0,0,1,3.98877-4.07324h.011229999999999407Z"/></vector>
\ No newline at end of file
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp"
+        android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
+    <path android:fillColor="#FF000000"
+          android:pathData="M6.5029,2.2a.29744.29744,0,0,1,.2970999999999995.2971199999999996v15.005760000000002a.29744.29744,0,0,1-.2970999999999995.2971199999999996h-1.0058000000000007a.29744.29744,0,0,1-.2970999999999995-.2971199999999996v-15.005760000000002a.29744.29744,0,0,1,.2970999999999995-.2971199999999987h1.0058000000000007m0-.2h-1.0058000000000007a.49711.49711,0,0,0-.49709999999999965.4971199999999998v15.005760000000002a.49711.49711,0,0,0,.49709999999999965.4971199999999989h1.0058000000000007a.49711.49711,0,0,0,.49709999999999965-.4971199999999989v-15.005760000000002a.49711.49711,0,0,0-.49709999999999965-.4971199999999989h0Zm4.5054,5.98169h1.98755a.3576.3576,0,0,1,.37738.54248l-1.3437500000000018,2.951830000000001a.38659.38659,0,0,0,.62354.40942l6.34698-4.885420000000002l-6.3469999999999995-4.922000000000001a.38659.38659,0,0,0-.62354.40942l1.34375,2.95184a.35757.35757,0,0,1-.37738.54242h-1.9875299999999996v-.0018199999999986005l-.011.00183a6.06019,6.06019,0,0,0-5.989,6.07324v3.9450699999999994h.003109999999998614l-.002,1.50317a.49614.49614,0,0,0,.4962100000000005.4968299999999992h1.0064599999999997a.49622.49622,0,0,0,.49622-.49622v-5.448849999999998a4.05782,4.05782,0,0,1,3.98877-4.07324h.011229999999999407Z"/>
+</vector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/direction_off_ramp_slight_left.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_off_ramp_slight_left.xml
index 761718d..91ffc9c 100644
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_off_ramp_slight_left.xml
+++ b/tests/DirectRenderingClusterSample/res/drawable/direction_off_ramp_slight_left.xml
@@ -1 +1,5 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp" android:height="20dp" android:viewportWidth="20" android:viewportHeight="20"><path android:fillColor="#FF000000" android:pathData="M14.5029,2.2a.29744.29744,0,0,1,.29710000000000036.2971199999999996v15.005760000000002a.29744.29744,0,0,1-.29710000000000036.2971199999999996h-1.0058000000000007a.29744.29744,0,0,1-.29710000000000036-.2971199999999996v-15.005760000000002a.29744.29744,0,0,1,.29710000000000036-.2971199999999987h1.0058m0-.2h-1.0058000000000007a.49711.49711,0,0,0-.49709999999999965.4971199999999998v15.005760000000002a.49711.49711,0,0,0,.49709999999999965.4971199999999989h1.0058a.49711.49711,0,0,0,.49709999999999965-.4971199999999989v-15.005760000000002a.49711.49711,0,0,0-.49709999999999965-.4971199999999989h0Zm-1.85684,6.24854l-2.457460000000001-2.07386a.3576.3576,0,0,1,.07019-.6571l2.9489100000000015-1.3501600000000007a.38658.38658,0,0,0-.20294-.71777l-8.004760000000001-.4496500000000001l1.58044,7.86a.38663.38663,0,0,0,.73938.09912l.9181799999999996-3.1106099999999985a.35758.35758,0,0,1,.6405-.16266l2.44818,2.06561a5.21819,5.21819,0,0,1,1.665,4.144l-.0047,3.60767a.49614.49614,0,0,0,.49624000000000024.49687000000000126h1.00653a.49621.49621,0,0,0,.49615-.49622v-3.4607799999999997a7.25157,7.25157,0,0,0-2.339839999999999-5.794459999999999Z"/></vector>
\ No newline at end of file
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp"
+        android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
+    <path android:fillColor="#FF000000"
+          android:pathData="M14.5029,2.2a.29744.29744,0,0,1,.29710000000000036.2971199999999996v15.005760000000002a.29744.29744,0,0,1-.29710000000000036.2971199999999996h-1.0058000000000007a.29744.29744,0,0,1-.29710000000000036-.2971199999999996v-15.005760000000002a.29744.29744,0,0,1,.29710000000000036-.2971199999999987h1.0058m0-.2h-1.0058000000000007a.49711.49711,0,0,0-.49709999999999965.4971199999999998v15.005760000000002a.49711.49711,0,0,0,.49709999999999965.4971199999999989h1.0058a.49711.49711,0,0,0,.49709999999999965-.4971199999999989v-15.005760000000002a.49711.49711,0,0,0-.49709999999999965-.4971199999999989h0Zm-1.85684,6.24854l-2.457460000000001-2.07386a.3576.3576,0,0,1,.07019-.6571l2.9489100000000015-1.3501600000000007a.38658.38658,0,0,0-.20294-.71777l-8.004760000000001-.4496500000000001l1.58044,7.86a.38663.38663,0,0,0,.73938.09912l.9181799999999996-3.1106099999999985a.35758.35758,0,0,1,.6405-.16266l2.44818,2.06561a5.21819,5.21819,0,0,1,1.665,4.144l-.0047,3.60767a.49614.49614,0,0,0,.49624000000000024.49687000000000126h1.00653a.49621.49621,0,0,0,.49615-.49622v-3.4607799999999997a7.25157,7.25157,0,0,0-2.339839999999999-5.794459999999999Z"/>
+</vector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/direction_off_ramp_slight_right.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_off_ramp_slight_right.xml
index eca1091..b549937 100644
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_off_ramp_slight_right.xml
+++ b/tests/DirectRenderingClusterSample/res/drawable/direction_off_ramp_slight_right.xml
@@ -1 +1,5 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp" android:height="20dp" android:viewportWidth="20" android:viewportHeight="20"><path android:fillColor="#FF000000" android:pathData="M8.5029,2.2a.29744.29744,0,0,1,.29710000000000036.2971199999999996v15.005760000000002a.29744.29744,0,0,1-.29710000000000036.2971199999999996h-1.0058000000000007a.29744.29744,0,0,1-.2970999999999995-.2971199999999996v-15.005760000000002a.29744.29744,0,0,1,.2970999999999995-.2971199999999987h1.0058000000000007m0-.2h-1.0058000000000007a.49711.49711,0,0,0-.49709999999999965.4971199999999998v15.005760000000002a.49711.49711,0,0,0,.49709999999999965.4971199999999989h1.0058000000000007a.49711.49711,0,0,0,.49709999999999965-.4971199999999989v-15.005760000000002a.49711.49711,0,0,0-.49709999999999965-.4971199999999989h0Zm-1.4888000000000003,12.043v3.46082a.49621.49621,0,0,0,.4961500000000001.4961800000000025h1.0065300000000006a.49614.49614,0,0,0,.49615-.49683l-.0047-3.60767a5.21819,5.21819,0,0,1,1.665-4.144l2.44818-2.06561a.35758.35758,0,0,1,.6405.16266l.91821,3.1106a.38663.38663,0,0,0,.7394400000000001-.09915000000000163l1.5804399999999994-7.859999999999999l-8.00476.44965a.38658.38658,0,0,0-.20294.71777l2.94891,1.35016a.3576.3576,0,0,1,.07019.6571l-2.457460000000001,2.0738600000000007a7.25157,7.25157,0,0,0-2.3398399999999997,5.794459999999999Z"/></vector>
\ No newline at end of file
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp"
+        android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
+    <path android:fillColor="#FF000000"
+          android:pathData="M8.5029,2.2a.29744.29744,0,0,1,.29710000000000036.2971199999999996v15.005760000000002a.29744.29744,0,0,1-.29710000000000036.2971199999999996h-1.0058000000000007a.29744.29744,0,0,1-.2970999999999995-.2971199999999996v-15.005760000000002a.29744.29744,0,0,1,.2970999999999995-.2971199999999987h1.0058000000000007m0-.2h-1.0058000000000007a.49711.49711,0,0,0-.49709999999999965.4971199999999998v15.005760000000002a.49711.49711,0,0,0,.49709999999999965.4971199999999989h1.0058000000000007a.49711.49711,0,0,0,.49709999999999965-.4971199999999989v-15.005760000000002a.49711.49711,0,0,0-.49709999999999965-.4971199999999989h0Zm-1.4888000000000003,12.043v3.46082a.49621.49621,0,0,0,.4961500000000001.4961800000000025h1.0065300000000006a.49614.49614,0,0,0,.49615-.49683l-.0047-3.60767a5.21819,5.21819,0,0,1,1.665-4.144l2.44818-2.06561a.35758.35758,0,0,1,.6405.16266l.91821,3.1106a.38663.38663,0,0,0,.7394400000000001-.09915000000000163l1.5804399999999994-7.859999999999999l-8.00476.44965a.38658.38658,0,0,0-.20294.71777l2.94891,1.35016a.3576.3576,0,0,1,.07019.6571l-2.457460000000001,2.0738600000000007a7.25157,7.25157,0,0,0-2.3398399999999997,5.794459999999999Z"/>
+</vector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/direction_on_ramp_left.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_on_ramp_left.xml
index 3da2866..65e66e2 100644
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_on_ramp_left.xml
+++ b/tests/DirectRenderingClusterSample/res/drawable/direction_on_ramp_left.xml
@@ -1 +1,5 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp" android:height="20dp" android:viewportWidth="20" android:viewportHeight="20"><path android:fillColor="#FF000000" android:pathData="M9.00078,5.97986l.011.00183a6.06019,6.06019,0,0,1,5.989,6.07324v3.9450699999999994h-.0031199999999991235l.002,1.50317a.49614.49614,0,0,1-.4962.4968299999999992h-1.0064600000000006a.49622.49622,0,0,1-.49622-.49622v-5.448849999999998a4.05782,4.05782,0,0,0-3.98878-4.07324h-1.9987700000000004a.3576.3576,0,0,0-.37738.54248l1.3437499999999991,2.951830000000001a.38659.38659,0,0,1-.62354.40942l-6.346979999999999-4.885420000000002l6.347-4.922a.38659.38659,0,0,1,.62354.40942l-1.343770000000001,2.9518499999999994a.35757.35757,0,0,0,.37738.54242h1.9875500000000015"/></vector>
\ No newline at end of file
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp"
+        android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
+    <path android:fillColor="#FF000000"
+          android:pathData="M9.00078,5.97986l.011.00183a6.06019,6.06019,0,0,1,5.989,6.07324v3.9450699999999994h-.0031199999999991235l.002,1.50317a.49614.49614,0,0,1-.4962.4968299999999992h-1.0064600000000006a.49622.49622,0,0,1-.49622-.49622v-5.448849999999998a4.05782,4.05782,0,0,0-3.98878-4.07324h-1.9987700000000004a.3576.3576,0,0,0-.37738.54248l1.3437499999999991,2.951830000000001a.38659.38659,0,0,1-.62354.40942l-6.346979999999999-4.885420000000002l6.347-4.922a.38659.38659,0,0,1,.62354.40942l-1.343770000000001,2.9518499999999994a.35757.35757,0,0,0,.37738.54242h1.9875500000000015"/>
+</vector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/direction_on_ramp_right.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_on_ramp_right.xml
index 07ad634..1647927 100644
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_on_ramp_right.xml
+++ b/tests/DirectRenderingClusterSample/res/drawable/direction_on_ramp_right.xml
@@ -1 +1,5 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp" android:height="20dp" android:viewportWidth="20" android:viewportHeight="20"><path android:fillColor="#FF000000" android:pathData="M10.99707,7.98169a4.05782,4.05782,0,0,0-3.9887700000000006,4.07324v5.44885a.49622.49622,0,0,1-.4962200000000001.496220000000001h-1.0064599999999997a.49614.49614,0,0,1-.49615-.49683l.0019399999999993867-1.5031700000000008h-.003109999999999502v-3.9450699999999994a6.06019,6.06019,0,0,1,5.989-6.07324l.011-.00183v.0018299999999999983h1.98755a.35757.35757,0,0,0,.37738-.54242l-1.34375-2.9518400000000007a.38659.38659,0,0,1,.623520000000001-.40942999999999996l6.3469999999999995,4.922000000000001l-6.347,4.88544a.38659.38659,0,0,1-.62354-.40942l1.34375-2.95184a.3576.3576,0,0,0-.37738-.54248h-1.9987599999999972Z"/></vector>
\ No newline at end of file
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp"
+        android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
+    <path android:fillColor="#FF000000"
+          android:pathData="M10.99707,7.98169a4.05782,4.05782,0,0,0-3.9887700000000006,4.07324v5.44885a.49622.49622,0,0,1-.4962200000000001.496220000000001h-1.0064599999999997a.49614.49614,0,0,1-.49615-.49683l.0019399999999993867-1.5031700000000008h-.003109999999999502v-3.9450699999999994a6.06019,6.06019,0,0,1,5.989-6.07324l.011-.00183v.0018299999999999983h1.98755a.35757.35757,0,0,0,.37738-.54242l-1.34375-2.9518400000000007a.38659.38659,0,0,1,.623520000000001-.40942999999999996l6.3469999999999995,4.922000000000001l-6.347,4.88544a.38659.38659,0,0,1-.62354-.40942l1.34375-2.95184a.3576.3576,0,0,0-.37738-.54248h-1.9987599999999972Z"/>
+</vector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/direction_on_ramp_sharp_left.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_on_ramp_sharp_left.xml
index 9d9d082..83b821a 100644
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_on_ramp_sharp_left.xml
+++ b/tests/DirectRenderingClusterSample/res/drawable/direction_on_ramp_sharp_left.xml
@@ -1 +1,5 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp" android:height="20dp" android:viewportWidth="20" android:viewportHeight="20"><path android:fillColor="#FF000000" android:pathData="M15.49771,18a.49779.49779,0,0,1-.49779-.49779v-12.4983l-.27979-.00635a2.56758,2.56758,0,0,0-2.0957.79l-5.39526,4.61285a.34918.34918,0,0,0,.08252.63177l2.92877,1.39331a.38658.38658,0,0,1-.21344.71472l-8.0105.33209l1.69568-7.836a.38661.38661,0,0,1,.74072-.0882l.8725,3.12372a.35757.35757,0,0,0,.638.17206l.0037800000000007827.00446999999999953l5.392099999999999-4.60909a4.46634,4.46634,0,0,1,3.38476-1.2412599999999996l.2641600000000004.0019999999999997797a1.92935,1.92935,0,0,1,1.43408.56885a2.10247,2.10247,0,0,1,.55713,1.46045l.00046999999999997044,12.47289a.49779.49779,0,0,1-.49779000000000195.4978100000000012h-1.0044Z"/></vector>
\ No newline at end of file
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp"
+        android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
+    <path android:fillColor="#FF000000"
+          android:pathData="M15.49771,18a.49779.49779,0,0,1-.49779-.49779v-12.4983l-.27979-.00635a2.56758,2.56758,0,0,0-2.0957.79l-5.39526,4.61285a.34918.34918,0,0,0,.08252.63177l2.92877,1.39331a.38658.38658,0,0,1-.21344.71472l-8.0105.33209l1.69568-7.836a.38661.38661,0,0,1,.74072-.0882l.8725,3.12372a.35757.35757,0,0,0,.638.17206l.0037800000000007827.00446999999999953l5.392099999999999-4.60909a4.46634,4.46634,0,0,1,3.38476-1.2412599999999996l.2641600000000004.0019999999999997797a1.92935,1.92935,0,0,1,1.43408.56885a2.10247,2.10247,0,0,1,.55713,1.46045l.00046999999999997044,12.47289a.49779.49779,0,0,1-.49779000000000195.4978100000000012h-1.0044Z"/>
+</vector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/direction_on_ramp_sharp_right.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_on_ramp_sharp_right.xml
index 336a2d4..3394364 100644
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_on_ramp_sharp_right.xml
+++ b/tests/DirectRenderingClusterSample/res/drawable/direction_on_ramp_sharp_right.xml
@@ -1 +1,5 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp" android:height="20dp" android:viewportWidth="20" android:viewportHeight="20"><path android:fillColor="#FF000000" android:pathData="M3.49789,17.99542a.49779.49779,0,0,1-.49779-.49781l.00047000000000041453-12.472889999999998a2.10247,2.10247,0,0,1,.5571299999999999-1.4604500000000002a1.92935,1.92935,0,0,1,1.43408-.56885l.26416-.002a4.46634,4.46634,0,0,1,3.38476,1.2412599999999996l5.392099999999999,4.609089999999999l.00378-.00446a.35757.35757,0,0,0,.638-.17206l.8725-3.12372a.38661.38661,0,0,1,.74072.0882l1.69568,7.836l-8.01048-.3320899999999991a.38658.38658,0,0,1-.21344-.71472l2.92877-1.39331a.34918.34918,0,0,0,.08252-.63177l-5.395280000000001-4.612840000000001a2.56758,2.56758,0,0,0-2.0957-.79l-.27979.00635v12.4983a.49779.49779,0,0,1-.49779.49779h-1.0043999999999995Z"/></vector>
\ No newline at end of file
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp"
+        android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
+    <path android:fillColor="#FF000000"
+          android:pathData="M3.49789,17.99542a.49779.49779,0,0,1-.49779-.49781l.00047000000000041453-12.472889999999998a2.10247,2.10247,0,0,1,.5571299999999999-1.4604500000000002a1.92935,1.92935,0,0,1,1.43408-.56885l.26416-.002a4.46634,4.46634,0,0,1,3.38476,1.2412599999999996l5.392099999999999,4.609089999999999l.00378-.00446a.35757.35757,0,0,0,.638-.17206l.8725-3.12372a.38661.38661,0,0,1,.74072.0882l1.69568,7.836l-8.01048-.3320899999999991a.38658.38658,0,0,1-.21344-.71472l2.92877-1.39331a.34918.34918,0,0,0,.08252-.63177l-5.395280000000001-4.612840000000001a2.56758,2.56758,0,0,0-2.0957-.79l-.27979.00635v12.4983a.49779.49779,0,0,1-.49779.49779h-1.0043999999999995Z"/>
+</vector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/direction_on_ramp_slight_left.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_on_ramp_slight_left.xml
index b0942d9..385a519 100644
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_on_ramp_slight_left.xml
+++ b/tests/DirectRenderingClusterSample/res/drawable/direction_on_ramp_slight_left.xml
@@ -1 +1,5 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp" android:height="20dp" android:viewportWidth="20" android:viewportHeight="20"><path android:fillColor="#FF000000" android:pathData="M12.9859,14.043v3.46082a.49621.49621,0,0,1-.4961500000000001.4961800000000025h-1.0065300000000015a.49614.49614,0,0,1-.49615-.49683l.0047-3.60767a5.21819,5.21819,0,0,0-1.665-4.144l-2.4482299999999997-2.0656499999999998a.35758.35758,0,0,0-.6405.16266l-.91821,3.1106a.38663.38663,0,0,1-.7393899999999993-.09910999999999959l-1.5804400000000003-7.859999999999999l8.00476.44965a.38658.38658,0,0,1,.20294.71777l-2.9489099999999997,1.3501599999999998a.3576.3576,0,0,0-.07019.6571l2.45746,2.07385a7.25157,7.25157,0,0,1,2.3398400000000024,5.7944700000000005Z"/></vector>
\ No newline at end of file
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp"
+        android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
+    <path android:fillColor="#FF000000"
+          android:pathData="M12.9859,14.043v3.46082a.49621.49621,0,0,1-.4961500000000001.4961800000000025h-1.0065300000000015a.49614.49614,0,0,1-.49615-.49683l.0047-3.60767a5.21819,5.21819,0,0,0-1.665-4.144l-2.4482299999999997-2.0656499999999998a.35758.35758,0,0,0-.6405.16266l-.91821,3.1106a.38663.38663,0,0,1-.7393899999999993-.09910999999999959l-1.5804400000000003-7.859999999999999l8.00476.44965a.38658.38658,0,0,1,.20294.71777l-2.9489099999999997,1.3501599999999998a.3576.3576,0,0,0-.07019.6571l2.45746,2.07385a7.25157,7.25157,0,0,1,2.3398400000000024,5.7944700000000005Z"/>
+</vector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/direction_on_ramp_slight_right.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_on_ramp_slight_right.xml
index f6960e0..2ee993c 100644
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_on_ramp_slight_right.xml
+++ b/tests/DirectRenderingClusterSample/res/drawable/direction_on_ramp_slight_right.xml
@@ -1 +1,5 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp" android:height="20dp" android:viewportWidth="20" android:viewportHeight="20"><path android:fillColor="#FF000000" android:pathData="M9.35394,8.24854l2.457460000000001-2.07386a.3576.3576,0,0,0-.07019-.6571l-2.9489100000000015-1.3501600000000007a.38658.38658,0,0,1,.20294-.71777l8.004760000000001-.4496500000000001l-1.58044,7.86a.38663.38663,0,0,1-.73938.09912l-.9181799999999996-3.1106099999999985a.35758.35758,0,0,0-.6405-.16266l-2.448220000000001,2.0656099999999995a5.21819,5.21819,0,0,0-1.665,4.144l.0047,3.60767a.49614.49614,0,0,1-.4961999999999982.49687000000000126h-1.0065300000000006a.49621.49621,0,0,1-.49615-.49622v-3.4607799999999997a7.25157,7.25157,0,0,1,2.3398399999999997-5.794459999999999Z"/></vector>
\ No newline at end of file
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp"
+        android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
+    <path android:fillColor="#FF000000"
+          android:pathData="M9.35394,8.24854l2.457460000000001-2.07386a.3576.3576,0,0,0-.07019-.6571l-2.9489100000000015-1.3501600000000007a.38658.38658,0,0,1,.20294-.71777l8.004760000000001-.4496500000000001l-1.58044,7.86a.38663.38663,0,0,1-.73938.09912l-.9181799999999996-3.1106099999999985a.35758.35758,0,0,0-.6405-.16266l-2.448220000000001,2.0656099999999995a5.21819,5.21819,0,0,0-1.665,4.144l.0047,3.60767a.49614.49614,0,0,1-.4961999999999982.49687000000000126h-1.0065300000000006a.49621.49621,0,0,1-.49615-.49622v-3.4607799999999997a7.25157,7.25157,0,0,1,2.3398399999999997-5.794459999999999Z"/>
+</vector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout.xml
index ce90f71..5504491 100644
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout.xml
+++ b/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout.xml
@@ -1 +1,5 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp" android:height="20dp" android:viewportWidth="20" android:viewportHeight="20"><path android:fillColor="#FF000000" android:pathData="M5.5,10.002a.17879.17879,0,0,0,.27124.18866l1.47589-.67188a.1933.1933,0,0,1,.20471.31177l-2.45184,3.17145l-2.45184-3.1714900000000004a.1933.1933,0,0,1,.20471-.31177l1.476.67188a.17876.17876,0,0,0,.2711299999999994-.18862000000000023v-.002000000000000668a5.51888,5.51888,0,0,1,2.75293-4.76563l.5.86523a4.51856,4.51856,0,0,0-2.25293,3.9003999999999994v.002Zm6.75146-3.89941a4.51948,4.51948,0,0,1,2.24854,3.897409999999999h1a5.5223,5.5223,0,0,0-2.74756-4.7627l-.001440000000000552-.00006000000000039307a.17878.17878,0,0,1-.027789999999999537-.32923999999999953l1.3197899999999994-.9422400000000004a.19332.19332,0,0,0-.16766-.33319l-3.97247.53766l1.52063,3.70911a.19331.19331,0,0,0,.37238-.02142l.1561199999999996-1.6141500000000004a.17945.17945,0,0,1,.29945999999999984-.1412299999999993Zm.4954200000000011,8.663409999999999a.17879.17879,0,0,1,.299.14053l.1561,1.61412a.1933.1933,0,0,0,.37235.02141l1.520669999999999-3.709059999999999l-3.97245-.53766a.1933.1933,0,0,0-.16764.33317l1.31982.94225a.17879.17879,0,0,1-.02781.32923l.00361-.00254a4.57684,4.57684,0,0,1-4.502,0l-.501.86523a5.50442,5.50442,0,0,0,5.50391,0Z"/></vector>
\ No newline at end of file
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp"
+        android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
+    <path android:fillColor="#FF000000"
+          android:pathData="M5.5,10.002a.17879.17879,0,0,0,.27124.18866l1.47589-.67188a.1933.1933,0,0,1,.20471.31177l-2.45184,3.17145l-2.45184-3.1714900000000004a.1933.1933,0,0,1,.20471-.31177l1.476.67188a.17876.17876,0,0,0,.2711299999999994-.18862000000000023v-.002000000000000668a5.51888,5.51888,0,0,1,2.75293-4.76563l.5.86523a4.51856,4.51856,0,0,0-2.25293,3.9003999999999994v.002Zm6.75146-3.89941a4.51948,4.51948,0,0,1,2.24854,3.897409999999999h1a5.5223,5.5223,0,0,0-2.74756-4.7627l-.001440000000000552-.00006000000000039307a.17878.17878,0,0,1-.027789999999999537-.32923999999999953l1.3197899999999994-.9422400000000004a.19332.19332,0,0,0-.16766-.33319l-3.97247.53766l1.52063,3.70911a.19331.19331,0,0,0,.37238-.02142l.1561199999999996-1.6141500000000004a.17945.17945,0,0,1,.29945999999999984-.1412299999999993Zm.4954200000000011,8.663409999999999a.17879.17879,0,0,1,.299.14053l.1561,1.61412a.1933.1933,0,0,0,.37235.02141l1.520669999999999-3.709059999999999l-3.97245-.53766a.1933.1933,0,0,0-.16764.33317l1.31982.94225a.17879.17879,0,0,1-.02781.32923l.00361-.00254a4.57684,4.57684,0,0,1-4.502,0l-.501.86523a5.50442,5.50442,0,0,0,5.50391,0Z"/>
+</vector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_left.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_left.xml
index debb54b..e3337c5 100644
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_left.xml
+++ b/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_left.xml
@@ -1 +1,5 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp" android:height="20dp" android:viewportWidth="20" android:viewportHeight="20"><path android:fillColor="#FF000000" android:pathData="M13,6.2a3.8,3.8,0,1,1-3.8000000000000007,3.8a3.80428,3.80428,0,0,1,3.8000000000000007-3.8m0,7a3.2,3.2,0,1,0-3.1999999999999993-3.1999999999999993a3.20363,3.20363,0,0,0,3.1999999999999993,3.1999999999999993m0-7.199999999999999a4,4,0,1,0,4,4a4.00458,4.00458,0,0,0-4-4h0Zm0,7a3,3,0,1,1,3-3a3.00328,3.00328,0,0,1-3,3h0Zm2.82861-5.82813a4.0315,4.0315,0,0,0-.542-.45459a4.078,4.078,0,0,0-5.11475.4541a3.96842,3.96842,0,0,0-1.141099999999998,2.328619999999999h-4.030760000000001a.17879.17879,0,0,1-.18866-.27124l.6718799999999998-1.4758899999999997a.1933.1933,0,0,0-.31177-.20471l-3.17145,2.4518400000000007l3.17145,2.45184a.1933.1933,0,0,0,.31177-.20471l-.6718799999999998-1.4758899999999997a.17879.17879,0,0,1,.1886599999999996-.2712400000000006h5v-.5a2.98063,2.98063,0,0,1,.87891-2.12158a3.06088,3.06088,0,0,1,3.83545-.34082a3.02248,3.02248,0,0,1,.40723.34131a2.99976,2.99976,0,0,1-2.1215899999999994,5.12109h-.5v4h1v-3.030760000000001a4.00038,4.00038,0,0,0,2.3286099999999994-6.797369999999999Z"/></vector>
\ No newline at end of file
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp"
+        android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
+    <path android:fillColor="#FF000000"
+          android:pathData="M13,6.2a3.8,3.8,0,1,1-3.8000000000000007,3.8a3.80428,3.80428,0,0,1,3.8000000000000007-3.8m0,7a3.2,3.2,0,1,0-3.1999999999999993-3.1999999999999993a3.20363,3.20363,0,0,0,3.1999999999999993,3.1999999999999993m0-7.199999999999999a4,4,0,1,0,4,4a4.00458,4.00458,0,0,0-4-4h0Zm0,7a3,3,0,1,1,3-3a3.00328,3.00328,0,0,1-3,3h0Zm2.82861-5.82813a4.0315,4.0315,0,0,0-.542-.45459a4.078,4.078,0,0,0-5.11475.4541a3.96842,3.96842,0,0,0-1.141099999999998,2.328619999999999h-4.030760000000001a.17879.17879,0,0,1-.18866-.27124l.6718799999999998-1.4758899999999997a.1933.1933,0,0,0-.31177-.20471l-3.17145,2.4518400000000007l3.17145,2.45184a.1933.1933,0,0,0,.31177-.20471l-.6718799999999998-1.4758899999999997a.17879.17879,0,0,1,.1886599999999996-.2712400000000006h5v-.5a2.98063,2.98063,0,0,1,.87891-2.12158a3.06088,3.06088,0,0,1,3.83545-.34082a3.02248,3.02248,0,0,1,.40723.34131a2.99976,2.99976,0,0,1-2.1215899999999994,5.12109h-.5v4h1v-3.030760000000001a4.00038,4.00038,0,0,0,2.3286099999999994-6.797369999999999Z"/>
+</vector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_right.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_right.xml
index 03add59..c4e3de7 100644
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_right.xml
+++ b/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_right.xml
@@ -1 +1,5 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp" android:height="20dp" android:viewportWidth="20" android:viewportHeight="20"><path android:fillColor="#FF000000" android:pathData="M7,6.2a3.8,3.8,0,1,1-3.8,3.8a3.80428,3.80428,0,0,1,3.8-3.8m0,7a3.2,3.2,0,1,0-3.2-3.1999999999999993a3.20363,3.20363,0,0,0,3.2,3.1999999999999993m0-7.199999999999999a4,4,0,1,0,4,4a4.00458,4.00458,0,0,0-4-4h0Zm0,7a3,3,0,1,1,3-3a3.00328,3.00328,0,0,1-3,3h0Zm7.83777-5.45184a.1933.1933,0,0,0-.31177.20471l.67188,1.47589a.17881.17881,0,0,1-.18872.2712399999999988h-5.00916v.5a2.99994,2.99994,0,0,1-3,3h-.5v4h1v-3.030760000000001a4.0032,4.0032,0,0,0,3.469239999999999-3.469239999999999h4.03992a.17881.17881,0,0,1,.18872.27124l-.6718799999999998,1.4758899999999997a.1933.1933,0,0,0,.31177.20471l3.1713900000000024-2.4518400000000007Z"/></vector>
\ No newline at end of file
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp"
+        android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
+    <path android:fillColor="#FF000000"
+          android:pathData="M7,6.2a3.8,3.8,0,1,1-3.8,3.8a3.80428,3.80428,0,0,1,3.8-3.8m0,7a3.2,3.2,0,1,0-3.2-3.1999999999999993a3.20363,3.20363,0,0,0,3.2,3.1999999999999993m0-7.199999999999999a4,4,0,1,0,4,4a4.00458,4.00458,0,0,0-4-4h0Zm0,7a3,3,0,1,1,3-3a3.00328,3.00328,0,0,1-3,3h0Zm7.83777-5.45184a.1933.1933,0,0,0-.31177.20471l.67188,1.47589a.17881.17881,0,0,1-.18872.2712399999999988h-5.00916v.5a2.99994,2.99994,0,0,1-3,3h-.5v4h1v-3.030760000000001a4.0032,4.0032,0,0,0,3.469239999999999-3.469239999999999h4.03992a.17881.17881,0,0,1,.18872.27124l-.6718799999999998,1.4758899999999997a.1933.1933,0,0,0,.31177.20471l3.1713900000000024-2.4518400000000007Z"/>
+</vector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_sharp_left.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_sharp_left.xml
index bd2ffa3..f6b3999 100644
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_sharp_left.xml
+++ b/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_sharp_left.xml
@@ -1 +1,5 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp" android:height="20dp" android:viewportWidth="20" android:viewportHeight="20"><path android:fillColor="#FF000000" android:pathData="M10.994,5.2a3.8,3.8,0,1,1-3.8,3.8a3.80428,3.80428,0,0,1,3.8-3.8m0,7a3.2,3.2,0,1,0-3.2-3.1999999999999993a3.20363,3.20363,0,0,0,3.2,3.2m0-7.2a4,4,0,1,0,4,4a4.00458,4.00458,0,0,0-4-4h0Zm0,7a3,3,0,1,1,3-3a3.00328,3.00328,0,0,1-3,3h0Zm2.8291-5.82813a4.03583,4.03583,0,0,0-.54248-.45459a4.07906,4.07906,0,0,0-5.11475.4541a4.00058,4.00058,0,0,0-.33252,5.28076l-3.0657700000000023,3.06578a.17873.17873,0,0,1-.325-.05847l-.5685799999999994-1.518740000000001a.19332.19332,0,0,0-.36523.07568l-.5087700000000002,3.9762600000000017l3.97626-.50879a.19332.19332,0,0,0,.07568-.36523l-1.5187400000000002-.5685500000000001a.17879.17879,0,0,1-.05835-.3252l-.00037-.00037l3.40378-3.40567l.33838-.353l-.34521-.34619a2.9995,2.9995,0,0,1,.0014699999999994162-4.241229999999998a3.06063,3.06063,0,0,1,3.83545-.34082a3.02673,3.02673,0,0,1,.40771.34131a3,3,0,0,1-2.1220599999999994,5.12109h-.5v4h1v-3.030760000000001a4.00076,4.00076,0,0,0,2.3290900000000008-6.797369999999999Z"/></vector>
\ No newline at end of file
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp"
+        android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
+    <path android:fillColor="#FF000000"
+          android:pathData="M10.994,5.2a3.8,3.8,0,1,1-3.8,3.8a3.80428,3.80428,0,0,1,3.8-3.8m0,7a3.2,3.2,0,1,0-3.2-3.1999999999999993a3.20363,3.20363,0,0,0,3.2,3.2m0-7.2a4,4,0,1,0,4,4a4.00458,4.00458,0,0,0-4-4h0Zm0,7a3,3,0,1,1,3-3a3.00328,3.00328,0,0,1-3,3h0Zm2.8291-5.82813a4.03583,4.03583,0,0,0-.54248-.45459a4.07906,4.07906,0,0,0-5.11475.4541a4.00058,4.00058,0,0,0-.33252,5.28076l-3.0657700000000023,3.06578a.17873.17873,0,0,1-.325-.05847l-.5685799999999994-1.518740000000001a.19332.19332,0,0,0-.36523.07568l-.5087700000000002,3.9762600000000017l3.97626-.50879a.19332.19332,0,0,0,.07568-.36523l-1.5187400000000002-.5685500000000001a.17879.17879,0,0,1-.05835-.3252l-.00037-.00037l3.40378-3.40567l.33838-.353l-.34521-.34619a2.9995,2.9995,0,0,1,.0014699999999994162-4.241229999999998a3.06063,3.06063,0,0,1,3.83545-.34082a3.02673,3.02673,0,0,1,.40771.34131a3,3,0,0,1-2.1220599999999994,5.12109h-.5v4h1v-3.030760000000001a4.00076,4.00076,0,0,0,2.3290900000000008-6.797369999999999Z"/>
+</vector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_sharp_right.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_sharp_right.xml
index f253e23..820ddf3 100644
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_sharp_right.xml
+++ b/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_sharp_right.xml
@@ -1 +1,5 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp" android:height="20dp" android:viewportWidth="20" android:viewportHeight="20"><path android:fillColor="#FF000000" android:pathData="M8.97217,5.2a3.8,3.8,0,1,1-3.8,3.8a3.8043,3.8043,0,0,1,3.8-3.8m0,7a3.2,3.2,0,1,0-3.2-3.2a3.20362,3.20362,0,0,0,3.2,3.2m0-7.2a4,4,0,1,0,4,4a4.00458,4.00458,0,0,0-4-4h0Zm0,7a3,3,0,1,1,3-3a3.00328,3.00328,0,0,1-3,3h0Zm7.491,1.02374a.19328.19328,0,0,0-.36517-.07568l-.5685199999999995,1.5187399999999993a.17883.17883,0,0,1-.32526.05835l-.00018.00018l-3.75726-3.75726l-.35352.35352a2.98022,2.98022,0,0,1-2.121089999999999.8784100000000006h-.5v4h1v-3.030760000000001a3.95621,3.95621,0,0,0,1.95264-.80859l3.07312,3.07275a.17841.17841,0,0,1-.05914.324l-1.5186900000000012.5686000000000018a.1933.1933,0,0,0,.07568.36523l3.9762200000000014.5087699999999984Z"/></vector>
\ No newline at end of file
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp"
+        android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
+    <path android:fillColor="#FF000000"
+          android:pathData="M8.97217,5.2a3.8,3.8,0,1,1-3.8,3.8a3.8043,3.8043,0,0,1,3.8-3.8m0,7a3.2,3.2,0,1,0-3.2-3.2a3.20362,3.20362,0,0,0,3.2,3.2m0-7.2a4,4,0,1,0,4,4a4.00458,4.00458,0,0,0-4-4h0Zm0,7a3,3,0,1,1,3-3a3.00328,3.00328,0,0,1-3,3h0Zm7.491,1.02374a.19328.19328,0,0,0-.36517-.07568l-.5685199999999995,1.5187399999999993a.17883.17883,0,0,1-.32526.05835l-.00018.00018l-3.75726-3.75726l-.35352.35352a2.98022,2.98022,0,0,1-2.121089999999999.8784100000000006h-.5v4h1v-3.030760000000001a3.95621,3.95621,0,0,0,1.95264-.80859l3.07312,3.07275a.17841.17841,0,0,1-.05914.324l-1.5186900000000012.5686000000000018a.1933.1933,0,0,0,.07568.36523l3.9762200000000014.5087699999999984Z"/>
+</vector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_slight_left.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_slight_left.xml
index d51152b..7891bd7 100644
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_slight_left.xml
+++ b/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_slight_left.xml
@@ -1 +1,5 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp" android:height="20dp" android:viewportWidth="20" android:viewportHeight="20"><path android:fillColor="#FF000000" android:pathData="M10.97473,7.2a3.8,3.8,0,1,1-3.8,3.8a3.80428,3.80428,0,0,1,3.8-3.8m0,7a3.2,3.2,0,1,0-3.2-3.2a3.20363,3.20363,0,0,0,3.2,3.2m0-7.2a4,4,0,1,0,4,4a4.00458,4.00458,0,0,0-4-4h0Zm0,7a3,3,0,1,1,3-3a3.00328,3.00328,0,0,1-3,3h0Zm-5.499-9.20184a.17879.17879,0,0,1,.05835000000000079-.32515999999999945l1.51872-.5685899999999999a.1933.1933,0,0,0-.0757-.36521l-3.97624-.50881l.50881,3.97625a.1933.1933,0,0,0,.36521.0757l.56854-1.51872a.17879.17879,0,0,1,.32521-.05835m6.7061,9.464a4.00038,4.00038,0,0,0,2.32861-6.79736a4.0315,4.0315,0,0,0-.542-.45459a4.07671,4.07671,0,0,0-4.73975.12256l-3.75294-3.749l-.707.708l4.439,4.43311l.353-.35352a3.05971,3.05971,0,0,1,3.83545-.34082a3.02248,3.02248,0,0,1,.40723.34131a2.99976,2.99976,0,0,1-2.1216100000000004,5.121040000000001h-.5v4h1v-3.030760000000001Z"/></vector>
\ No newline at end of file
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp"
+        android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
+    <path android:fillColor="#FF000000"
+          android:pathData="M10.97473,7.2a3.8,3.8,0,1,1-3.8,3.8a3.80428,3.80428,0,0,1,3.8-3.8m0,7a3.2,3.2,0,1,0-3.2-3.2a3.20363,3.20363,0,0,0,3.2,3.2m0-7.2a4,4,0,1,0,4,4a4.00458,4.00458,0,0,0-4-4h0Zm0,7a3,3,0,1,1,3-3a3.00328,3.00328,0,0,1-3,3h0Zm-5.499-9.20184a.17879.17879,0,0,1,.05835000000000079-.32515999999999945l1.51872-.5685899999999999a.1933.1933,0,0,0-.0757-.36521l-3.97624-.50881l.50881,3.97625a.1933.1933,0,0,0,.36521.0757l.56854-1.51872a.17879.17879,0,0,1,.32521-.05835m6.7061,9.464a4.00038,4.00038,0,0,0,2.32861-6.79736a4.0315,4.0315,0,0,0-.542-.45459a4.07671,4.07671,0,0,0-4.73975.12256l-3.75294-3.749l-.707.708l4.439,4.43311l.353-.35352a3.05971,3.05971,0,0,1,3.83545-.34082a3.02248,3.02248,0,0,1,.40723.34131a2.99976,2.99976,0,0,1-2.1216100000000004,5.121040000000001h-.5v4h1v-3.030760000000001Z"/>
+</vector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_slight_right.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_slight_right.xml
index 0b8cbe2..028dc9f 100644
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_slight_right.xml
+++ b/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_slight_right.xml
@@ -1 +1,5 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp" android:height="20dp" android:viewportWidth="20" android:viewportHeight="20"><path android:fillColor="#FF000000" android:pathData="M8.97128,7.2a3.8,3.8,0,1,1-3.8,3.8a3.80428,3.80428,0,0,1,3.8-3.8m0,7a3.2,3.2,0,1,0-3.2-3.2a3.20363,3.20363,0,0,0,3.2,3.2m0-7.2a4,4,0,1,0,4,4a4.00458,4.00458,0,0,0-4-4h0Zm0,7a3,3,0,1,1,3-3a3.00328,3.00328,0,0,1-3,3h0Zm4.081189999999999-10.548729999999999a.19328.19328,0,0,0-.07568.36517l1.51874.5686a.17878.17878,0,0,1,.05835.3252l.00006.00006l-3.8150899999999996,3.8150899999999988l.35352.35352a2.99976,2.99976,0,0,1-2.1210999999999984,5.121090000000001h-.5v3.97917h1v-3.0099300000000007a4.00123,4.00123,0,0,0,2.66016-6.42236l3.1295699999999993-3.1295399999999978a.17878.17878,0,0,1,.3252.05835l.5684999999999985,1.5187400000000002a.19332.19332,0,0,0,.36523-.07574l.50879-3.9762Z"/></vector>
\ No newline at end of file
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp"
+        android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
+    <path android:fillColor="#FF000000"
+          android:pathData="M8.97128,7.2a3.8,3.8,0,1,1-3.8,3.8a3.80428,3.80428,0,0,1,3.8-3.8m0,7a3.2,3.2,0,1,0-3.2-3.2a3.20363,3.20363,0,0,0,3.2,3.2m0-7.2a4,4,0,1,0,4,4a4.00458,4.00458,0,0,0-4-4h0Zm0,7a3,3,0,1,1,3-3a3.00328,3.00328,0,0,1-3,3h0Zm4.081189999999999-10.548729999999999a.19328.19328,0,0,0-.07568.36517l1.51874.5686a.17878.17878,0,0,1,.05835.3252l.00006.00006l-3.8150899999999996,3.8150899999999988l.35352.35352a2.99976,2.99976,0,0,1-2.1210999999999984,5.121090000000001h-.5v3.97917h1v-3.0099300000000007a4.00123,4.00123,0,0,0,2.66016-6.42236l3.1295699999999993-3.1295399999999978a.17878.17878,0,0,1,.3252.05835l.5684999999999985,1.5187400000000002a.19332.19332,0,0,0,.36523-.07574l.50879-3.9762Z"/>
+</vector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_straight.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_straight.xml
index 2d29b3e..301ce6c 100644
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_straight.xml
+++ b/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_straight.xml
@@ -1 +1,5 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp" android:height="20dp" android:viewportWidth="20" android:viewportHeight="20"><path android:fillColor="#FF000000" android:pathData="M10,8.2a3.8,3.8,0,1,1-3.8,3.8000000000000007a3.80427,3.80427,0,0,1,3.8-3.8000000000000007m0,7a3.2,3.2,0,1,0-3.2-3.1999999999999993a3.20363,3.20363,0,0,0,3.2,3.1999999999999993m0-7.199999999999999a4,4,0,1,0,4,4a4.00458,4.00458,0,0,0-4-4h0Zm0,7a3,3,0,1,1,3-3a3.00328,3.00328,0,0,1-3,3h0Zm2.83057-5.82666a3.97135,3.97135,0,0,0-2.33057-1.1425799999999988v-3.0266100000000007a.17881.17881,0,0,1,.27124-.18872l1.4758899999999997.6718700000000002a.19329.19329,0,0,0,.20471-.31177l-2.4518400000000007-3.17138l-2.45184,3.1713899999999997a.1933.1933,0,0,0,.20471.31177l1.476-.67187a.17879.17879,0,0,1,.2711299999999994.18871000000000038v3.99585h.5a3,3,0,1,1,0,6h-.5v3h1v-2.030760000000001a4.00076,4.00076,0,0,0,2.33057-6.7959Z"/></vector>
\ No newline at end of file
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp"
+        android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
+    <path android:fillColor="#FF000000"
+          android:pathData="M10,8.2a3.8,3.8,0,1,1-3.8,3.8000000000000007a3.80427,3.80427,0,0,1,3.8-3.8000000000000007m0,7a3.2,3.2,0,1,0-3.2-3.1999999999999993a3.20363,3.20363,0,0,0,3.2,3.1999999999999993m0-7.199999999999999a4,4,0,1,0,4,4a4.00458,4.00458,0,0,0-4-4h0Zm0,7a3,3,0,1,1,3-3a3.00328,3.00328,0,0,1-3,3h0Zm2.83057-5.82666a3.97135,3.97135,0,0,0-2.33057-1.1425799999999988v-3.0266100000000007a.17881.17881,0,0,1,.27124-.18872l1.4758899999999997.6718700000000002a.19329.19329,0,0,0,.20471-.31177l-2.4518400000000007-3.17138l-2.45184,3.1713899999999997a.1933.1933,0,0,0,.20471.31177l1.476-.67187a.17879.17879,0,0,1,.2711299999999994.18871000000000038v3.99585h.5a3,3,0,1,1,0,6h-.5v3h1v-2.030760000000001a4.00076,4.00076,0,0,0,2.33057-6.7959Z"/>
+</vector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/direction_turn_left.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_turn_left.xml
index 85dcf04..faa7027 100644
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_turn_left.xml
+++ b/tests/DirectRenderingClusterSample/res/drawable/direction_turn_left.xml
@@ -1 +1,5 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp" android:height="20dp" android:viewportWidth="20" android:viewportHeight="20"><path android:fillColor="#FF000000" android:pathData="M10,5.97986l.011.00183a6.06019,6.06019,0,0,1,5.989000000000001,6.07324v3.9450699999999994h-.003109999999999502l.002,1.50317a.49614.49614,0,0,1-.49620000000000175.4968299999999992h-1.0064700000000002a.49622.49622,0,0,1-.4962199999999992-.496220000000001v-5.448849999999998a4.05782,4.05782,0,0,0-3.98877-4.07324h-1.99878a.3576.3576,0,0,0-.37738.54248l1.3437500000000009,2.951830000000001a.38659.38659,0,0,1-.62354.40942l-6.34698-4.885420000000002l6.347-4.922a.38659.38659,0,0,1,.62354.40942l-1.3437700000000001,2.9518499999999994a.35757.35757,0,0,0,.37738.54242h1.9875500000000006"/></vector>
\ No newline at end of file
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp"
+        android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
+    <path android:fillColor="#FF000000"
+          android:pathData="M10,5.97986l.011.00183a6.06019,6.06019,0,0,1,5.989000000000001,6.07324v3.9450699999999994h-.003109999999999502l.002,1.50317a.49614.49614,0,0,1-.49620000000000175.4968299999999992h-1.0064700000000002a.49622.49622,0,0,1-.4962199999999992-.496220000000001v-5.448849999999998a4.05782,4.05782,0,0,0-3.98877-4.07324h-1.99878a.3576.3576,0,0,0-.37738.54248l1.3437500000000009,2.951830000000001a.38659.38659,0,0,1-.62354.40942l-6.34698-4.885420000000002l6.347-4.922a.38659.38659,0,0,1,.62354.40942l-1.3437700000000001,2.9518499999999994a.35757.35757,0,0,0,.37738.54242h1.9875500000000006"/>
+</vector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/direction_turn_right.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_turn_right.xml
index 4438838..6ef4749 100644
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_turn_right.xml
+++ b/tests/DirectRenderingClusterSample/res/drawable/direction_turn_right.xml
@@ -1 +1,5 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp" android:height="20dp" android:viewportWidth="20" android:viewportHeight="20"><path android:fillColor="#FF000000" android:pathData="M9.98877,7.98169a4.05782,4.05782,0,0,0-3.9887700000000006,4.07324v5.44885a.49622.49622,0,0,1-.4962200000000001.496220000000001h-1.0064700000000002a.49614.49614,0,0,1-.49615-.49683l.0019500000000007844-1.5031700000000008h-.0031100000000003902v-3.9450699999999994a6.06019,6.06019,0,0,1,5.989000000000001-6.07324l.010999999999999233-.0018299999999999983v.0018299999999999983h1.98755a.35757.35757,0,0,0,.37738-.54242l-1.3437500000000018-2.9518400000000007a.38659.38659,0,0,1,.6235300000000006-.40942999999999996l6.346990000000002,4.922000000000001l-6.347,4.88544a.38659.38659,0,0,1-.62354-.40942l1.34375-2.95184a.3576.3576,0,0,0-.37738-.54248h-1.998759999999999Z"/></vector>
\ No newline at end of file
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp"
+        android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
+    <path android:fillColor="#FF000000"
+          android:pathData="M9.98877,7.98169a4.05782,4.05782,0,0,0-3.9887700000000006,4.07324v5.44885a.49622.49622,0,0,1-.4962200000000001.496220000000001h-1.0064700000000002a.49614.49614,0,0,1-.49615-.49683l.0019500000000007844-1.5031700000000008h-.0031100000000003902v-3.9450699999999994a6.06019,6.06019,0,0,1,5.989000000000001-6.07324l.010999999999999233-.0018299999999999983v.0018299999999999983h1.98755a.35757.35757,0,0,0,.37738-.54242l-1.3437500000000018-2.9518400000000007a.38659.38659,0,0,1,.6235300000000006-.40942999999999996l6.346990000000002,4.922000000000001l-6.347,4.88544a.38659.38659,0,0,1-.62354-.40942l1.34375-2.95184a.3576.3576,0,0,0-.37738-.54248h-1.998759999999999Z"/>
+</vector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/direction_turn_sharp_left.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_turn_sharp_left.xml
index e4b6408..9024be2 100644
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_turn_sharp_left.xml
+++ b/tests/DirectRenderingClusterSample/res/drawable/direction_turn_sharp_left.xml
@@ -1 +1,5 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp" android:height="20dp" android:viewportWidth="20" android:viewportHeight="20"><path android:fillColor="#FF000000" android:pathData="M15.49771,17.99542a.49779.49779,0,0,1-.49779-.49779v-12.4983l-.2797799999999988-.006330000000000169a2.56758,2.56758,0,0,0-2.0957.79l-5.39527,4.61283a.34918.34918,0,0,0,.08252.63177l2.92877,1.39331a.38658.38658,0,0,1-.21344.71472l-8.0105.33209l1.69568-7.836a.38661.38661,0,0,1,.74072-.0882l.8725,3.12372a.35757.35757,0,0,0,.638.17206l.0037800000000007827.00446999999999953l5.392099999999999-4.609089999999999a4.46634,4.46634,0,0,1,3.38477-1.24121l.26416.002a1.92935,1.92935,0,0,1,1.43408.56885a2.10247,2.10247,0,0,1,.55713,1.46045l.000460000000000349,12.472840000000001a.49779.49779,0,0,1-.49779.49781h-1.0044Z"/></vector>
\ No newline at end of file
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp"
+        android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
+    <path android:fillColor="#FF000000"
+          android:pathData="M15.49771,17.99542a.49779.49779,0,0,1-.49779-.49779v-12.4983l-.2797799999999988-.006330000000000169a2.56758,2.56758,0,0,0-2.0957.79l-5.39527,4.61283a.34918.34918,0,0,0,.08252.63177l2.92877,1.39331a.38658.38658,0,0,1-.21344.71472l-8.0105.33209l1.69568-7.836a.38661.38661,0,0,1,.74072-.0882l.8725,3.12372a.35757.35757,0,0,0,.638.17206l.0037800000000007827.00446999999999953l5.392099999999999-4.609089999999999a4.46634,4.46634,0,0,1,3.38477-1.24121l.26416.002a1.92935,1.92935,0,0,1,1.43408.56885a2.10247,2.10247,0,0,1,.55713,1.46045l.000460000000000349,12.472840000000001a.49779.49779,0,0,1-.49779.49781h-1.0044Z"/>
+</vector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/direction_turn_sharp_right.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_turn_sharp_right.xml
index 336a2d4..3394364 100644
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_turn_sharp_right.xml
+++ b/tests/DirectRenderingClusterSample/res/drawable/direction_turn_sharp_right.xml
@@ -1 +1,5 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp" android:height="20dp" android:viewportWidth="20" android:viewportHeight="20"><path android:fillColor="#FF000000" android:pathData="M3.49789,17.99542a.49779.49779,0,0,1-.49779-.49781l.00047000000000041453-12.472889999999998a2.10247,2.10247,0,0,1,.5571299999999999-1.4604500000000002a1.92935,1.92935,0,0,1,1.43408-.56885l.26416-.002a4.46634,4.46634,0,0,1,3.38476,1.2412599999999996l5.392099999999999,4.609089999999999l.00378-.00446a.35757.35757,0,0,0,.638-.17206l.8725-3.12372a.38661.38661,0,0,1,.74072.0882l1.69568,7.836l-8.01048-.3320899999999991a.38658.38658,0,0,1-.21344-.71472l2.92877-1.39331a.34918.34918,0,0,0,.08252-.63177l-5.395280000000001-4.612840000000001a2.56758,2.56758,0,0,0-2.0957-.79l-.27979.00635v12.4983a.49779.49779,0,0,1-.49779.49779h-1.0043999999999995Z"/></vector>
\ No newline at end of file
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp"
+        android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
+    <path android:fillColor="#FF000000"
+          android:pathData="M3.49789,17.99542a.49779.49779,0,0,1-.49779-.49781l.00047000000000041453-12.472889999999998a2.10247,2.10247,0,0,1,.5571299999999999-1.4604500000000002a1.92935,1.92935,0,0,1,1.43408-.56885l.26416-.002a4.46634,4.46634,0,0,1,3.38476,1.2412599999999996l5.392099999999999,4.609089999999999l.00378-.00446a.35757.35757,0,0,0,.638-.17206l.8725-3.12372a.38661.38661,0,0,1,.74072.0882l1.69568,7.836l-8.01048-.3320899999999991a.38658.38658,0,0,1-.21344-.71472l2.92877-1.39331a.34918.34918,0,0,0,.08252-.63177l-5.395280000000001-4.612840000000001a2.56758,2.56758,0,0,0-2.0957-.79l-.27979.00635v12.4983a.49779.49779,0,0,1-.49779.49779h-1.0043999999999995Z"/>
+</vector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/direction_turn_slight_left.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_turn_slight_left.xml
index 6613e36..431736f 100644
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_turn_slight_left.xml
+++ b/tests/DirectRenderingClusterSample/res/drawable/direction_turn_slight_left.xml
@@ -1 +1,5 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp" android:height="20dp" android:viewportWidth="20" android:viewportHeight="20"><path android:fillColor="#FF000000" android:pathData="M14.9859,14.043v3.46082a.49621.49621,0,0,1-.4961600000000015.4961800000000025h-1.0065299999999997a.49614.49614,0,0,1-.49615-.49683l.0047-3.60767a5.21819,5.21819,0,0,0-1.665-4.144l-2.448220000000001-2.0656499999999998a.35758.35758,0,0,0-.6405.16266l-.91821,3.1106a.38663.38663,0,0,1-.7393899999999993-.09910999999999959l-1.5804400000000003-7.859999999999999l8.00476.44965a.38658.38658,0,0,1,.20294.71777l-2.9489199999999993,1.3501599999999998a.3576.3576,0,0,0-.07019.6571l2.45746,2.07385a7.25158,7.25158,0,0,1,2.339850000000002,5.7944700000000005Z"/></vector>
\ No newline at end of file
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp"
+        android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
+    <path android:fillColor="#FF000000"
+          android:pathData="M14.9859,14.043v3.46082a.49621.49621,0,0,1-.4961600000000015.4961800000000025h-1.0065299999999997a.49614.49614,0,0,1-.49615-.49683l.0047-3.60767a5.21819,5.21819,0,0,0-1.665-4.144l-2.448220000000001-2.0656499999999998a.35758.35758,0,0,0-.6405.16266l-.91821,3.1106a.38663.38663,0,0,1-.7393899999999993-.09910999999999959l-1.5804400000000003-7.859999999999999l8.00476.44965a.38658.38658,0,0,1,.20294.71777l-2.9489199999999993,1.3501599999999998a.3576.3576,0,0,0-.07019.6571l2.45746,2.07385a7.25158,7.25158,0,0,1,2.339850000000002,5.7944700000000005Z"/>
+</vector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/direction_turn_slight_right.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_turn_slight_right.xml
index fb4f274..0ab8aef 100644
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_turn_slight_right.xml
+++ b/tests/DirectRenderingClusterSample/res/drawable/direction_turn_slight_right.xml
@@ -1 +1,5 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp" android:height="20dp" android:viewportWidth="20" android:viewportHeight="20"><path android:fillColor="#FF000000" android:pathData="M7.35395,8.24854l2.45746-2.07386a.3576.3576,0,0,0-.07019-.6571l-2.94892-1.3501600000000007a.38658.38658,0,0,1,.20294-.71777l8.004760000000001-.4496500000000001l-1.58044,7.86a.38663.38663,0,0,1-.73938.09912l-.9181799999999996-3.1106099999999985a.35758.35758,0,0,0-.6405-.16266l-2.448220000000001,2.0656099999999995a5.21819,5.21819,0,0,0-1.665,4.144l.0047,3.60767a.49614.49614,0,0,1-.49618999999999946.49687000000000126h-1.0065300000000006a.49621.49621,0,0,1-.49615-.49622v-3.4607799999999997a7.25157,7.25157,0,0,1,2.3398400000000006-5.794459999999999Z"/></vector>
\ No newline at end of file
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp"
+        android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
+    <path android:fillColor="#FF000000"
+          android:pathData="M7.35395,8.24854l2.45746-2.07386a.3576.3576,0,0,0-.07019-.6571l-2.94892-1.3501600000000007a.38658.38658,0,0,1,.20294-.71777l8.004760000000001-.4496500000000001l-1.58044,7.86a.38663.38663,0,0,1-.73938.09912l-.9181799999999996-3.1106099999999985a.35758.35758,0,0,0-.6405-.16266l-2.448220000000001,2.0656099999999995a5.21819,5.21819,0,0,0-1.665,4.144l.0047,3.60767a.49614.49614,0,0,1-.49618999999999946.49687000000000126h-1.0065300000000006a.49621.49621,0,0,1-.49615-.49622v-3.4607799999999997a7.25157,7.25157,0,0,1,2.3398400000000006-5.794459999999999Z"/>
+</vector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/direction_uturn.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_uturn.xml
index 19b0a72..bfb9e0c 100644
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_uturn.xml
+++ b/tests/DirectRenderingClusterSample/res/drawable/direction_uturn.xml
@@ -1 +1,5 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp" android:height="20dp" android:viewportWidth="20" android:viewportHeight="20"><path android:fillColor="#FF000000" android:pathData="M17,8v9.49652a.50346.50346,0,0,1-.5034799999999997.5034799999999997h-.993a.50346.50346,0,0,1-.50352-.5034799999999997v-9.49652a3.5,3.5,0,0,0-7,0v4h-.009089999999999598a.35757.35757,0,0,0,.54242.37738l2.95184-1.34375a.3866.3866,0,0,1,.40942.62354l-4.9036800000000005,6.342829999999999l-4.9037500000000005-6.342829999999999a.3866.3866,0,0,1,.40942-.62354l2.95184,1.34375a.3576.3576,0,0,0,.5424900000000008-.3773800000000005h.009089999999999598v-4a5.5,5.5,0,0,1,11,0Z"/></vector>
\ No newline at end of file
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp"
+        android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
+    <path android:fillColor="#FF000000"
+          android:pathData="M17,8v9.49652a.50346.50346,0,0,1-.5034799999999997.5034799999999997h-.993a.50346.50346,0,0,1-.50352-.5034799999999997v-9.49652a3.5,3.5,0,0,0-7,0v4h-.009089999999999598a.35757.35757,0,0,0,.54242.37738l2.95184-1.34375a.3866.3866,0,0,1,.40942.62354l-4.9036800000000005,6.342829999999999l-4.9037500000000005-6.342829999999999a.3866.3866,0,0,1,.40942-.62354l2.95184,1.34375a.3576.3576,0,0,0,.5424900000000008-.3773800000000005h.009089999999999598v-4a5.5,5.5,0,0,1,11,0Z"/>
+</vector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/direction_uturn_right.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_uturn_right.xml
new file mode 100644
index 0000000..8fc9223
--- /dev/null
+++ b/tests/DirectRenderingClusterSample/res/drawable/direction_uturn_right.xml
@@ -0,0 +1,8 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp"
+        android:height="20dp" android:viewportWidth="20" android:viewportHeight="20"
+        android:pivotX="10" android:scaleX="-1">
+    <group android:pivotX="10" android:scaleX="-1">
+        <path android:fillColor="#FF000000"
+              android:pathData="M17,8v9.49652a.50346.50346,0,0,1-.5034799999999997.5034799999999997h-.993a.50346.50346,0,0,1-.50352-.5034799999999997v-9.49652a3.5,3.5,0,0,0-7,0v4h-.009089999999999598a.35757.35757,0,0,0,.54242.37738l2.95184-1.34375a.3866.3866,0,0,1,.40942.62354l-4.9036800000000005,6.342829999999999l-4.9037500000000005-6.342829999999999a.3866.3866,0,0,1,.40942-.62354l2.95184,1.34375a.3576.3576,0,0,0,.5424900000000008-.3773800000000005h.009089999999999598v-4a5.5,5.5,0,0,1,11,0Z"/>
+    </group>
+</vector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/focused_button_shape.xml b/tests/DirectRenderingClusterSample/res/drawable/focused_button_shape.xml
index b84ef30..9ded30c 100644
--- a/tests/DirectRenderingClusterSample/res/drawable/focused_button_shape.xml
+++ b/tests/DirectRenderingClusterSample/res/drawable/focused_button_shape.xml
@@ -2,12 +2,12 @@
 <shape xmlns:android="http://schemas.android.com/apk/res/android">
     <stroke
         android:width="2dp"
-        android:color="#333333" />
+        android:color="#333333"/>
     <corners
-        android:radius="7dp" />
+        android:radius="7dp"/>
     <padding
         android:left="5dp"
         android:top="5dp"
         android:right="5dp"
-        android:bottom="5dp" />
+        android:bottom="5dp"/>
 </shape>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/gradient_bottom.xml b/tests/DirectRenderingClusterSample/res/drawable/gradient_bottom.xml
new file mode 100644
index 0000000..8006864
--- /dev/null
+++ b/tests/DirectRenderingClusterSample/res/drawable/gradient_bottom.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <gradient
+        android:startColor="#00000000"
+        android:endColor="#FF000000"
+        android:angle="270"
+        android:dither="true"
+    />
+</shape>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/gradient_top.xml b/tests/DirectRenderingClusterSample/res/drawable/gradient_top.xml
new file mode 100644
index 0000000..74932ad
--- /dev/null
+++ b/tests/DirectRenderingClusterSample/res/drawable/gradient_top.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <gradient
+        android:startColor="#00000000"
+        android:endColor="#FF000000"
+        android:angle="90"
+        android:dither="true"
+    />
+</shape>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/speedometer.xml b/tests/DirectRenderingClusterSample/res/drawable/speedometer.xml
new file mode 100644
index 0000000..d97c54e
--- /dev/null
+++ b/tests/DirectRenderingClusterSample/res/drawable/speedometer.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        xmlns:aapt="http://schemas.android.com/aapt"
+        android:width="200dp"
+        android:height="200dp"
+        android:viewportHeight="64"
+        android:viewportWidth="64">
+
+    <path
+        android:pathData="M0,32
+        A32,32 0 1,1 64,32
+        A32,32 0 1,1 0,32 Z">
+        <aapt:attr name="android:fillColor">
+            <gradient
+                android:centerX="32"
+                android:centerY="32"
+                android:gradientRadius="32"
+                android:type="radial">
+                <item
+                    android:color="#FF000000"
+                    android:offset="0.0"/>
+                <item
+                    android:color="#FF000000"
+                    android:offset="0.94"/>
+                <item
+                    android:color="#00000000"
+                    android:offset="1.0"/>
+            </gradient>
+        </aapt:attr>
+    </path>
+
+    <path
+        android:fillColor="#000"
+        android:strokeWidth="0.25"
+        android:pathData="M2,32
+        A30,30 0 1,1 62,32
+        A30,30 0 1,1 2,32 Z">
+        <aapt:attr name="android:strokeColor">
+            <gradient
+                android:startX="0"
+                android:startY="10"
+                android:startColor="#000"
+                android:endX="0"
+                android:endY="150"
+                android:endColor="#000"
+                android:centerColor="#DDD"
+                android:type="linear"/>
+        </aapt:attr>
+    </path>
+
+</vector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/layout/activity_main.xml b/tests/DirectRenderingClusterSample/res/layout/activity_main.xml
index 393db54..fa8db14 100644
--- a/tests/DirectRenderingClusterSample/res/layout/activity_main.xml
+++ b/tests/DirectRenderingClusterSample/res/layout/activity_main.xml
@@ -1,97 +1,237 @@
 <?xml version="1.0" encoding="utf-8"?>
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<androidx.constraintlayout.widget.ConstraintLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:id="@+id/activity_main"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:background="@android:color/background_dark"
-    tools:context=".MainClusterActivity"
-    android:windowIsFloating="true">
+    android:windowIsFloating="true"
+    tools:context=".MainClusterActivity">
+
+    <androidx.constraintlayout.widget.Guideline
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:id="@+id/left_unobscured"
+        android:orientation="vertical"
+        app:layout_constraintGuide_begin="@dimen/speedometer_overlap_width"/>
+
+    <androidx.constraintlayout.widget.Guideline
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:id="@+id/right_unobscured"
+        android:orientation="vertical"
+        app:layout_constraintGuide_end="@dimen/speedometer_overlap_width"/>
+
+    <androidx.constraintlayout.widget.Guideline
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:id="@+id/gauges_top"
+        android:orientation="horizontal"
+        app:layout_constraintGuide_begin="@dimen/speedometer_top"/>
+
+    <androidx.viewpager.widget.ViewPager
+        android:id="@+id/pager"
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintBottom_toTopOf="@+id/info"/>
 
     <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:orientation="vertical">
-
-        <androidx.viewpager.widget.ViewPager
-            xmlns:android="http://schemas.android.com/apk/res/android"
-            android:id="@+id/pager"
-            android:layout_width="match_parent"
-            android:layout_height="0dp"
-            android:layout_weight="1"
-            />
+        android:id="@+id/info"
+        android:layout_width="0dp"
+        android:layout_height="@dimen/info_height"
+        app:layout_constraintLeft_toRightOf="@+id/left_unobscured"
+        app:layout_constraintRight_toLeftOf="@+id/right_unobscured"
+        app:layout_constraintBottom_toBottomOf="parent"
+        android:gravity="center">
 
         <LinearLayout
-            android:layout_gravity="center"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:orientation="horizontal">
+            android:orientation="vertical"
+            android:gravity="start">
 
-            <Button
-                android:id="@+id/btn_nav"
-                android:layout_width="48dp"
-                android:layout_height="48dp"
-                android:background="@drawable/btn_nav"
-                android:layout_margin="10dp"
-                android:focusableInTouchMode="true" />
-            <Button
-                android:id="@+id/btn_phone"
-                android:layout_width="48dp"
-                android:layout_height="48dp"
-                android:layout_margin="10dp"
-                android:background="@drawable/btn_phone"
-                android:focusableInTouchMode="true" />
-            <Button
-                android:id="@+id/btn_music"
-                android:layout_width="48dp"
-                android:layout_height="48dp"
-                android:layout_margin="10dp"
-                android:background="@drawable/btn_music"
-                android:focusableInTouchMode="true" />
-            <Button
-                android:id="@+id/btn_car_info"
-                android:layout_width="48dp"
-                android:layout_height="48dp"
-                android:layout_margin="10dp"
-                android:background="@drawable/btn_car_info"
-                android:focusableInTouchMode="true" />
-
-            <Space
-                android:layout_width="20dp"
-                android:layout_height="1dp" />
-
-            <ImageView
-                android:id="@+id/maneuver"
-                android:layout_width="48dp"
-                android:layout_height="48dp"
-                android:layout_margin="10dp"
-                android:tint="@android:color/white"/>
-
-            <LinearLayout
-                android:layout_width="250dp"
+            <TextView
                 android:layout_height="wrap_content"
-                android:orientation="vertical">
+                android:layout_width="wrap_content"
+                android:includeFontPadding="false"
+                android:text="@string/info_fuel_label"
+                android:textSize="@dimen/info_label_text_size"/>
 
-                <TextView
-                    android:id="@+id/distance"
-                    android:layout_height="wrap_content"
-                    android:layout_width="wrap_content"
-                    android:textSize="30sp"/>
-                <TextView
-                    android:id="@+id/segment"
-                    android:layout_height="wrap_content"
-                    android:layout_width="wrap_content"
-                    android:textSize="18sp"/>
-            </LinearLayout>
+            <TextView
+                android:id="@+id/info_fuel"
+                android:layout_height="wrap_content"
+                android:layout_width="wrap_content"
+                android:includeFontPadding="false"
+                android:text="@string/info_value_empty"
+                android:textSize="@dimen/info_value_text_size"/>
+
+            <TextView
+                android:layout_height="wrap_content"
+                android:layout_width="wrap_content"
+                android:includeFontPadding="false"
+                android:text="@string/info_range_label"
+                android:textSize="@dimen/info_label_text_size"/>
+
+            <TextView
+                android:id="@+id/info_range"
+                android:layout_height="wrap_content"
+                android:layout_width="wrap_content"
+                android:includeFontPadding="false"
+                android:text="@string/info_value_empty"
+                android:textSize="@dimen/info_value_text_size"/>
+        </LinearLayout>
+
+        <include
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            android:id="@+id/navigation_state"
+            layout="@layout/include_navigation_state"/>
+
+        <LinearLayout
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:orientation="vertical"
+            android:gravity="end">
+
+            <TextView
+                android:layout_height="wrap_content"
+                android:layout_width="wrap_content"
+                android:includeFontPadding="false"
+                android:text="@string/info_speed_label"
+                android:textSize="@dimen/info_label_text_size"/>
+
+            <TextView
+                android:id="@+id/info_speed"
+                android:layout_height="wrap_content"
+                android:layout_width="wrap_content"
+                android:includeFontPadding="false"
+                android:text="@string/info_value_empty"
+                android:textSize="@dimen/info_value_text_size"/>
+
+            <TextView
+                android:layout_height="wrap_content"
+                android:layout_width="wrap_content"
+                android:includeFontPadding="false"
+                android:text="@string/info_rpm_label"
+                android:textSize="@dimen/info_label_text_size"/>
+
+            <TextView
+                android:id="@+id/info_rpm"
+                android:layout_height="wrap_content"
+                android:layout_width="wrap_content"
+                android:includeFontPadding="false"
+                android:text="@string/info_value_empty"
+                android:textSize="@dimen/info_value_text_size"/>
         </LinearLayout>
     </LinearLayout>
 
-    <TextView
-            android:id="@+id/text_overlay"
-            android:layout_width="wrap_content"
+    <ImageView
+        android:id="@+id/left_gauge"
+        android:layout_width="@dimen/speedometer_width"
+        android:layout_height="@dimen/speedometer_height"
+        android:src="@drawable/speedometer"
+        android:elevation="2dp"
+        app:layout_constraintTop_toBottomOf="@+id/gauges_top"
+        app:layout_constraintRight_toLeftOf="@+id/left_unobscured"/>
+
+    <ImageView
+        android:id="@+id/right_gauge"
+        android:layout_width="@dimen/speedometer_width"
+        android:layout_height="@dimen/speedometer_height"
+        android:src="@drawable/speedometer"
+        android:elevation="2dp"
+        app:layout_constraintTop_toBottomOf="@+id/gauges_top"
+        app:layout_constraintLeft_toRightOf="@+id/right_unobscured"/>
+
+    <LinearLayout
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:orientation="vertical"
+        android:translationZ="4dp"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintBottom_toBottomOf="parent">
+
+        <Button
+            android:id="@+id/btn_nav"
+            android:layout_width="@dimen/facet_icon_size"
+            android:layout_height="@dimen/facet_icon_size"
+            android:layout_margin="@dimen/facet_icon_margin"
+            android:background="@drawable/ic_nav"
+            android:backgroundTint="@color/icon_color"
+            android:focusableInTouchMode="true" />
+        <Button
+            android:id="@+id/btn_phone"
+            android:layout_width="@dimen/facet_icon_size"
+            android:layout_height="@dimen/facet_icon_size"
+            android:layout_margin="@dimen/facet_icon_margin"
+            android:background="@drawable/ic_phone"
+            android:backgroundTint="@color/icon_color"
+            android:focusableInTouchMode="true" />
+        <Button
+            android:id="@+id/btn_music"
+            android:layout_width="@dimen/facet_icon_size"
+            android:layout_height="@dimen/facet_icon_size"
+            android:layout_margin="@dimen/facet_icon_margin"
+            android:background="@drawable/ic_music"
+            android:backgroundTint="@color/icon_color"
+            android:focusableInTouchMode="true" />
+        <Button
+            android:id="@+id/btn_car_info"
+            android:layout_width="@dimen/facet_icon_size"
+            android:layout_height="@dimen/facet_icon_size"
+            android:layout_margin="@dimen/facet_icon_margin"
+            android:background="@drawable/ic_car_info"
+            android:backgroundTint="@color/icon_color"
+            android:focusableInTouchMode="true" />
+    </LinearLayout>
+
+    <LinearLayout
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:orientation="vertical"
+        android:translationZ="4dp"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintBottom_toBottomOf="parent">
+
+        <TextView
+            android:id="@+id/gear_parked"
             android:layout_height="wrap_content"
-            android:layout_centerInParent="true"
-            android:background="@android:color/background_light"
-            android:textSize="30sp"
-    />
-</RelativeLayout>
+            android:layout_width="wrap_content"
+            android:layout_marginHorizontal="@dimen/gear_icon_margin"
+            android:text="@string/gear_parked"
+            android:textColor="@color/icon_color"
+            android:textSize="@dimen/gear_text_size"/>
+
+        <TextView
+            android:id="@+id/gear_reverse"
+            android:layout_height="wrap_content"
+            android:layout_width="wrap_content"
+            android:layout_marginHorizontal="@dimen/gear_icon_margin"
+            android:text="@string/gear_reverse"
+            android:textColor="@color/icon_color"
+            android:textSize="@dimen/gear_text_size"/>
+
+        <TextView
+            android:id="@+id/gear_neutral"
+            android:layout_height="wrap_content"
+            android:layout_width="wrap_content"
+            android:layout_marginHorizontal="@dimen/gear_icon_margin"
+            android:text="@string/gear_neutral"
+            android:textColor="@color/icon_color"
+            android:textSize="@dimen/gear_text_size"/>
+
+        <TextView
+            android:id="@+id/gear_drive"
+            android:layout_height="wrap_content"
+            android:layout_width="wrap_content"
+            android:layout_marginHorizontal="@dimen/gear_icon_margin"
+            android:text="@string/gear_drive"
+            android:textColor="@color/icon_color"
+            android:textSize="@dimen/gear_text_size"/>
+
+    </LinearLayout>
+</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/tests/DirectRenderingClusterSample/res/layout/fragment_navigation.xml b/tests/DirectRenderingClusterSample/res/layout/fragment_navigation.xml
index c0fb4b3..54894c2 100644
--- a/tests/DirectRenderingClusterSample/res/layout/fragment_navigation.xml
+++ b/tests/DirectRenderingClusterSample/res/layout/fragment_navigation.xml
@@ -1,22 +1,47 @@
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:background="@color/darkBlue"
     tools:context=".NavigationFragment">
 
-    <FrameLayout
-        android:id="@+id/nav_frame_layout"
+    <SurfaceView
+        android:id="@+id/nav_surface"
         android:layout_width="match_parent"
-        android:layout_height="match_parent">
+        android:layout_height="match_parent"/>
 
-        <SurfaceView
-            android:id="@+id/nav_surface"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:layout_margin="20dp"/>
+    <ProgressBar
+        android:id="@+id/progress_bar"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        app:layout_constraintVertical_chainStyle="packed"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintBottom_toTopOf="@+id/message"/>
 
-    </FrameLayout>
+    <TextView
+        android:id="@+id/message"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/select_nav_app"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/progress_bar"/>
 
+    <ImageView
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/navigation_gradient_height"
+        android:src="@drawable/gradient_top"
+        app:layout_constraintTop_toTopOf="parent"/>
 
-</FrameLayout>
+    <ImageView
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/navigation_gradient_height"
+        android:src="@drawable/gradient_bottom"
+        app:layout_constraintBottom_toBottomOf="parent"/>
+
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/layout/include_navigation_state.xml b/tests/DirectRenderingClusterSample/res/layout/include_navigation_state.xml
new file mode 100644
index 0000000..0a17c82
--- /dev/null
+++ b/tests/DirectRenderingClusterSample/res/layout/include_navigation_state.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+              android:layout_width="0dp"
+              android:layout_height="match_parent"
+              android:orientation="horizontal">
+
+    <ImageView
+        android:id="@+id/maneuver"
+        android:layout_width="@dimen/maneuver_width"
+        android:layout_height="@dimen/maneuver_height"
+        android:layout_margin="@dimen/maneuver_margin"
+        android:tint="@android:color/white"/>
+
+    <LinearLayout
+        android:layout_width="@dimen/nav_state_width"
+        android:layout_height="wrap_content"
+        android:orientation="vertical">
+
+        <TextView
+            android:id="@+id/distance"
+            android:layout_height="wrap_content"
+            android:layout_width="wrap_content"
+            android:textSize="@dimen/distance_text_size"/>
+        <TextView
+            android:id="@+id/segment"
+            android:layout_height="wrap_content"
+            android:layout_width="wrap_content"
+            android:textSize="@dimen/segment_text_size"/>
+        <TextView
+            android:id="@+id/eta"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:textSize="@dimen/eta_text_size"/>
+    </LinearLayout>
+
+    <LinearLayout
+        android:layout_width="@dimen/nav_state_width"
+        android:layout_height="wrap_content"
+        android:orientation="vertical">
+
+        <android.car.cluster.sample.CueView
+            android:id="@+id/cue"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:lineHeight="@dimen/cue_line_height"/>
+        <android.car.cluster.sample.LaneView
+            android:id="@+id/lane"
+            android:layout_width="wrap_content"
+            android:layout_height="@dimen/laneview_height"/>
+    </LinearLayout>
+</LinearLayout>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/values/colors.xml b/tests/DirectRenderingClusterSample/res/values/colors.xml
index a71c0d5..9e4cd7f 100644
--- a/tests/DirectRenderingClusterSample/res/values/colors.xml
+++ b/tests/DirectRenderingClusterSample/res/values/colors.xml
@@ -4,4 +4,18 @@
     <color name="colorPrimaryDark">#303F9F</color>
     <color name="colorAccent">#FF4081</color>
     <color name="darkBlue">#2b2b77</color>
+
+    <!-- Gear and facet icon colors -->
+    <color name="icon_selected">#6EDDFF</color>
+    <color name="icon_unselected">#1B378A</color>
+
+    <!-- LaneView highlight colors -->
+    <color name="laneDirection">#888888</color>
+    <color name="laneDirectionHighlighted">#FFFFFF</color>
+
+    <!-- Traffic colors -->
+    <color name="low_traffic">#0F9D58</color>
+    <color name="medium_traffic">#F2B300</color>
+    <color name="high_traffic">#E06055</color>
+    <color name="unknown_traffic">#4285F4</color>
 </resources>
diff --git a/tests/DirectRenderingClusterSample/res/values/dimens.xml b/tests/DirectRenderingClusterSample/res/values/dimens.xml
index 47c8224..e2c71d8 100644
--- a/tests/DirectRenderingClusterSample/res/values/dimens.xml
+++ b/tests/DirectRenderingClusterSample/res/values/dimens.xml
@@ -2,4 +2,42 @@
     <!-- Default screen margins, per the Android Design guidelines. -->
     <dimen name="activity_horizontal_margin">16dp</dimen>
     <dimen name="activity_vertical_margin">16dp</dimen>
+    <!-- Size and position of speedometers -->
+    <dimen name="speedometer_height">600dp</dimen>
+    <dimen name="speedometer_width">600dp</dimen>
+    <dimen name="speedometer_overlap_width">90dp</dimen>
+    <dimen name="speedometer_top">20dp</dimen>
+    <!-- Navigation fragment gradients -->
+    <dimen name="navigation_gradient_height">15dp</dimen>
+    <!-- Facet buttons -->
+    <dimen name="facet_icon_size">30dp</dimen>
+    <dimen name="facet_icon_margin">5dp</dimen>
+    <!-- Gears -->
+    <dimen name="gear_text_size">28sp</dimen>
+    <dimen name="gear_icon_margin">5dp</dimen>
+    <!-- Information space -->
+    <dimen name="info_height">80dp</dimen>
+    <dimen name="info_label_text_size">10sp</dimen>
+    <dimen name="info_value_text_size">20sp</dimen>
+
+    <!--                              -->
+    <!-- Navigation state componenets -->
+    <!--                              -->
+    <dimen name="nav_state_width">170dp</dimen>
+    <!-- Maneuver -->
+    <dimen name="maneuver_width">60dp</dimen>
+    <dimen name="maneuver_height">60dp</dimen>
+    <dimen name="maneuver_margin">10dp</dimen>
+    <!-- Distance -->
+    <dimen name="distance_text_size">20sp</dimen>
+    <!-- Segment -->
+    <dimen name="segment_text_size">15sp</dimen>
+    <!-- ETA -->
+    <dimen name="eta_text_size">15sp</dimen>
+    <!-- Cue -->
+    <dimen name="cue_line_height">15sp</dimen>
+    <!-- Lane -->
+    <dimen name="laneview_height">25dp</dimen>
+    <dimen name="lane_width">50dp</dimen>
+    <dimen name="lane_height">50dp</dimen>
 </resources>
diff --git a/tests/DirectRenderingClusterSample/res/values/strings.xml b/tests/DirectRenderingClusterSample/res/values/strings.xml
index 778ecf6..803811b 100644
--- a/tests/DirectRenderingClusterSample/res/values/strings.xml
+++ b/tests/DirectRenderingClusterSample/res/values/strings.xml
@@ -1,6 +1,23 @@
 <resources>
-    <string name="app_name">Fake Cluster Implementation</string>
+    <string name="app_name" translatable="false">Fake Cluster Implementation</string>
 
     <!-- TODO: Remove or change this placeholder text -->
-    <string name="hello_blank_fragment">Hello blank fragment</string>
+    <string name="hello_blank_fragment" translatable="false">Hello blank fragment</string>
+
+    <!-- Message to show when a navigation app hasn't been selected yet. [CHAR LIMIT=100] -->
+    <string name="select_nav_app" translatable="false">Select a navigation app on the main unit.</string>
+
+    <!-- Gears texts [CHAR LIMIT=1] -->
+    <string name="gear_parked" translatable="false">P</string>
+    <string name="gear_reverse" translatable="false">R</string>
+    <string name="gear_neutral" translatable="false">N</string>
+    <string name="gear_drive" translatable="false">D</string>
+
+    <!-- Information labels (shown next to driving directions) [CHAR LIMIT=30] -->
+    <string name="info_fuel_label" translatable="false">Fuel</string>
+    <string name="info_speed_label" translatable="false">Speed</string>
+    <string name="info_range_label" translatable="false">Range</string>
+    <string name="info_rpm_label" translatable="false">RPM</string>
+    <string name="info_value_empty" translatable="false">-</string>
+
 </resources>
diff --git a/tests/DirectRenderingClusterSample/res/values/styles.xml b/tests/DirectRenderingClusterSample/res/values/styles.xml
index f11f745..cd5f552 100644
--- a/tests/DirectRenderingClusterSample/res/values/styles.xml
+++ b/tests/DirectRenderingClusterSample/res/values/styles.xml
@@ -1,3 +1,5 @@
 <resources>
-
+    <style name="noAnimTheme" parent="android:Theme">
+        <item name="android:windowAnimationStyle">@null</item>
+    </style>
 </resources>
diff --git a/tests/DirectRenderingClusterSample/res/values/themes.xml b/tests/DirectRenderingClusterSample/res/values/themes.xml
new file mode 100644
index 0000000..972a036
--- /dev/null
+++ b/tests/DirectRenderingClusterSample/res/values/themes.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2018 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>
+    <style name="Theme.ClusterTheme" parent="@android:style/Theme.Black.NoTitleBar.Fullscreen">
+        <item name="android:windowAnimationStyle">@null</item>
+    </style>
+</resources>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/ActivityMonitor.java b/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/ActivityMonitor.java
new file mode 100644
index 0000000..d102a49
--- /dev/null
+++ b/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/ActivityMonitor.java
@@ -0,0 +1,146 @@
+/*
+ * Copyright (C) 2018 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 android.car.cluster.sample;
+
+import android.annotation.Nullable;
+import android.app.ActivityManager;
+import android.app.ActivityManager.StackInfo;
+import android.app.IActivityManager;
+import android.app.IProcessObserver;
+import android.app.TaskStackListener;
+import android.content.ComponentName;
+import android.os.Handler;
+import android.os.RemoteException;
+import android.util.Log;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Top activity monitor, allows listeners to be notified when a new activity comes to the foreground
+ * on a particular device.
+ */
+public class ActivityMonitor {
+    private static final String TAG = "Cluster.ActivityMonitor";
+
+    /**
+     * Listener of activity changes
+     */
+    public interface ActivityListener {
+        /**
+         * Invoked when a new activity becomes the top activity on a particular display.
+         */
+        void onTopActivityChanged(int displayId, @Nullable ComponentName activity);
+    }
+
+    private IActivityManager mActivityManager;
+    // Listeners of top activity changes, indexed by the displayId they are interested on.
+    private final Map<Integer, Set<ActivityListener>> mListeners = new HashMap<>();
+    private final Handler mHandler = new Handler();
+    private final IProcessObserver.Stub mProcessObserver = new IProcessObserver.Stub() {
+        @Override
+        public void onForegroundActivitiesChanged(int pid, int uid, boolean foregroundActivities) {
+            notifyTopActivities();
+        }
+
+        @Override
+        public void onProcessDied(int pid, int uid) {
+            notifyTopActivities();
+        }
+    };
+    private final TaskStackListener mTaskStackListener = new TaskStackListener() {
+        @Override
+        public void onTaskStackChanged() {
+            Log.i(TAG, "onTaskStackChanged");
+            notifyTopActivities();
+        }
+    };
+
+    /**
+     * Registers a new listener to receive activity updates on a particular display
+     *
+     * @param displayId identifier of the display to monitor
+     * @param listener listener to be notified
+     */
+    public void addListener(int displayId, ActivityListener listener) {
+        mListeners.computeIfAbsent(displayId, k -> new HashSet<>()).add(listener);
+    }
+
+    /**
+     * Unregisters a listener previously registered with {@link #addListener(int, ActivityListener)}
+     */
+    public void removeListener(int displayId, ActivityListener listener) {
+        mListeners.computeIfAbsent(displayId, k -> new HashSet<>()).remove(listener);
+    }
+
+    /**
+     * Starts monitoring activity changes. {@link #stop()} should be invoked to release resources.
+     */
+    public void start() {
+        mActivityManager = ActivityManager.getService();
+        // Monitoring both listeners are necessary as there are cases where one listener cannot
+        // monitor activity change.
+        try {
+            mActivityManager.registerProcessObserver(mProcessObserver);
+            mActivityManager.registerTaskStackListener(mTaskStackListener);
+        } catch (RemoteException e) {
+            Log.e(TAG, "Cannot register activity monitoring", e);
+            throw new RuntimeException(e);
+        }
+        notifyTopActivities();
+    }
+
+    /**
+     * Stops monitoring activity changes. Should be invoked when this monitor is not longer used.
+     */
+    public void stop() {
+        if (mActivityManager == null) {
+            return;
+        }
+        try {
+            mActivityManager.unregisterProcessObserver(mProcessObserver);
+            mActivityManager.unregisterTaskStackListener(mTaskStackListener);
+        } catch (RemoteException e) {
+            Log.e(TAG, "Cannot unregister activity monitoring. Ignoring", e);
+        }
+        mActivityManager = null;
+    }
+
+    /**
+     * Notifies listeners on changes of top activities. {@link ActivityManager} might trigger
+     * updates on threads different than UI.
+     */
+    private void notifyTopActivities() {
+        mHandler.post(() -> {
+            try {
+                List<StackInfo> infos = mActivityManager.getAllStackInfos();
+                for (StackInfo info : infos) {
+                    Set<ActivityListener> listeners = mListeners.get(info.displayId);
+                    if (listeners != null && !listeners.isEmpty()) {
+                        for (ActivityListener listener : listeners) {
+                            listener.onTopActivityChanged(info.displayId, info.topActivity);
+                        }
+                    }
+                }
+            } catch (RemoteException e) {
+                Log.e(TAG, "Cannot getTasks", e);
+            }
+        });
+    }
+}
diff --git a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/ClusterRenderingServiceImpl.java b/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/ClusterRenderingServiceImpl.java
new file mode 100644
index 0000000..84d67b9
--- /dev/null
+++ b/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/ClusterRenderingServiceImpl.java
@@ -0,0 +1,321 @@
+/*
+ * Copyright (C) 2017 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 android.car.cluster.sample;
+
+import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
+
+import static java.lang.Integer.parseInt;
+
+import android.app.ActivityOptions;
+import android.car.cluster.ClusterActivityState;
+import android.car.cluster.renderer.InstrumentClusterRenderingService;
+import android.car.cluster.renderer.NavigationRenderer;
+import android.car.navigation.CarNavigationInstrumentCluster;
+import android.content.Intent;
+import android.graphics.Rect;
+import android.hardware.display.DisplayManager.DisplayListener;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.Message;
+import android.os.Messenger;
+import android.os.RemoteException;
+import android.os.SystemClock;
+import android.os.UserHandle;
+import android.provider.Settings;
+import android.provider.Settings.Global;
+import android.util.Log;
+import android.view.Display;
+import android.view.InputDevice;
+import android.view.KeyEvent;
+
+import androidx.car.cluster.navigation.NavigationState;
+import androidx.versionedparcelable.ParcelUtils;
+
+import java.io.FileDescriptor;
+import java.io.PrintWriter;
+import java.lang.ref.WeakReference;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Implementation of {@link InstrumentClusterRenderingService} which renders an activity on a
+ * virtual display that is transmitted to an external screen.
+ */
+public class ClusterRenderingServiceImpl extends InstrumentClusterRenderingService {
+    private static final String TAG = "Cluster.SampleService";
+
+    private static final int NO_DISPLAY = -1;
+
+    static final String LOCAL_BINDING_ACTION = "local";
+    static final String NAV_STATE_BUNDLE_KEY = "navstate";
+    static final int NAV_STATE_EVENT_ID = 1;
+    static final int MSG_SET_ACTIVITY_LAUNCH_OPTIONS = 1;
+    static final int MSG_ON_NAVIGATION_STATE_CHANGED = 2;
+    static final int MSG_ON_KEY_EVENT = 3;
+    static final int MSG_REGISTER_CLIENT = 4;
+    static final int MSG_UNREGISTER_CLIENT = 5;
+    static final String MSG_KEY_CATEGORY = "category";
+    static final String MSG_KEY_ACTIVITY_DISPLAY_ID = "activity_display_id";
+    static final String MSG_KEY_ACTIVITY_STATE = "activity_state";
+    static final String MSG_KEY_KEY_EVENT = "key_event";
+
+    private List<Messenger> mClients = new ArrayList<>();
+    private ClusterDisplayProvider mDisplayProvider;
+    private int mDisplayId = NO_DISPLAY;
+    private final IBinder mLocalBinder = new Messenger(new MessageHandler(this)).getBinder();
+
+    private final DisplayListener mDisplayListener = new DisplayListener() {
+        @Override
+        public void onDisplayAdded(int displayId) {
+            Log.i(TAG, "Cluster display found, displayId: " + displayId);
+            mDisplayId = displayId;
+            launchMainActivity();
+        }
+
+        @Override
+        public void onDisplayRemoved(int displayId) {
+            Log.w(TAG, "Cluster display has been removed");
+        }
+
+        @Override
+        public void onDisplayChanged(int displayId) {
+
+        }
+    };
+
+    private static class MessageHandler extends Handler {
+        private final WeakReference<ClusterRenderingServiceImpl> mService;
+
+        MessageHandler(ClusterRenderingServiceImpl service) {
+            mService = new WeakReference<>(service);
+        }
+
+        @Override
+        public void handleMessage(Message msg) {
+            Log.d(TAG, "handleMessage: " + msg.what);
+            switch (msg.what) {
+                case MSG_SET_ACTIVITY_LAUNCH_OPTIONS: {
+                    int displayId = msg.getData().getInt(MSG_KEY_ACTIVITY_DISPLAY_ID);
+                    Bundle state = msg.getData().getBundle(MSG_KEY_ACTIVITY_STATE);
+                    String category = msg.getData().getString(MSG_KEY_CATEGORY);
+                    ActivityOptions options = displayId != Display.INVALID_DISPLAY
+                            ? ActivityOptions.makeBasic().setLaunchDisplayId(displayId)
+                            : null;
+                    mService.get().setClusterActivityLaunchOptions(category, options);
+                    Log.d(TAG, String.format("activity options set: %s = %s (displayeId: %d)",
+                            category, options, options.getLaunchDisplayId()));
+                    mService.get().setClusterActivityState(category, state);
+                    Log.d(TAG, String.format("activity state set: %s = %s", category, state));
+                    break;
+                }
+                case MSG_REGISTER_CLIENT:
+                    mService.get().mClients.add(msg.replyTo);
+                    break;
+                case MSG_UNREGISTER_CLIENT:
+                    mService.get().mClients.remove(msg.replyTo);
+                    break;
+                default:
+                    super.handleMessage(msg);
+            }
+        }
+    }
+
+    @Override
+    public IBinder onBind(Intent intent) {
+        Log.d(TAG, "onBind, intent: " + intent);
+        return LOCAL_BINDING_ACTION.equals(intent.getAction())
+                ? mLocalBinder
+                : super.onBind(intent);
+    }
+
+    @Override
+    public void onCreate() {
+        super.onCreate();
+        Log.d(TAG, "onCreate");
+        mDisplayProvider = new ClusterDisplayProvider(this, mDisplayListener);
+    }
+
+    private void launchMainActivity() {
+        ActivityOptions options = ActivityOptions.makeBasic();
+        options.setLaunchDisplayId(mDisplayId);
+        Intent intent = new Intent(this, MainClusterActivity.class);
+        intent.setFlags(FLAG_ACTIVITY_NEW_TASK);
+        startActivityAsUser(intent, options.toBundle(), UserHandle.SYSTEM);
+        Log.i(TAG, String.format("launching main activity: %s (display: %d)", intent, mDisplayId));
+    }
+
+    @Override
+    public void onKeyEvent(KeyEvent keyEvent) {
+        Log.d(TAG, "onKeyEvent, keyEvent: " + keyEvent);
+        Bundle data = new Bundle();
+        data.putParcelable(MSG_KEY_KEY_EVENT, keyEvent);
+        broadcastClientMessage(MSG_ON_KEY_EVENT, data);
+    }
+
+    /**
+     * Broadcasts a message to all the registered service clients
+     *
+     * @param what event identifier
+     * @param data event data
+     */
+    private void broadcastClientMessage(int what, Bundle data) {
+        Log.d(TAG, "broadcast message " + what + " to " + mClients.size() + " clients");
+        for (int i = mClients.size() - 1; i >= 0; i--) {
+            Messenger client = mClients.get(i);
+            try {
+                Message msg = Message.obtain(null, what);
+                msg.setData(data);
+                client.send(msg);
+            } catch (RemoteException ex) {
+                Log.e(TAG, "Client " + i + " is dead", ex);
+                mClients.remove(i);
+            }
+        }
+    }
+
+    @Override
+    public NavigationRenderer getNavigationRenderer() {
+        NavigationRenderer navigationRenderer = new NavigationRenderer() {
+            @Override
+            public CarNavigationInstrumentCluster getNavigationProperties() {
+                CarNavigationInstrumentCluster config =
+                        CarNavigationInstrumentCluster.createCluster(1000);
+                Log.d(TAG, "getNavigationProperties, returns: " + config);
+                return config;
+            }
+
+            @Override
+            public void onEvent(int eventType, Bundle bundle) {
+                try {
+                    StringBuilder bundleSummary = new StringBuilder();
+                    if (eventType == NAV_STATE_EVENT_ID) {
+                        bundle.setClassLoader(ParcelUtils.class.getClassLoader());
+                        NavigationState navState = NavigationState
+                                .fromParcelable(bundle.getParcelable(NAV_STATE_BUNDLE_KEY));
+                        bundleSummary.append(navState.toString());
+
+                        // Update clients
+                        broadcastClientMessage(MSG_ON_NAVIGATION_STATE_CHANGED, bundle);
+                    } else {
+                        for (String key : bundle.keySet()) {
+                            bundleSummary.append(key);
+                            bundleSummary.append("=");
+                            bundleSummary.append(bundle.get(key));
+                            bundleSummary.append(" ");
+                        }
+                    }
+                    Log.d(TAG, "onEvent(" + eventType + ", " + bundleSummary + ")");
+                } catch (Exception e) {
+                    Log.e(TAG, "Error parsing event data (" + eventType + ", " + bundle + ")", e);
+                    bundle.putParcelable(NAV_STATE_BUNDLE_KEY, new NavigationState.Builder().build()
+                            .toParcelable());
+                    broadcastClientMessage(MSG_ON_NAVIGATION_STATE_CHANGED, bundle);
+                }
+            }
+        };
+
+        Log.i(TAG, "createNavigationRenderer, returns: " + navigationRenderer);
+        return navigationRenderer;
+    }
+
+    @Override
+    protected void dump(FileDescriptor fd, PrintWriter writer, String[] args) {
+        if (args != null && args.length > 0) {
+            execShellCommand(args);
+        } else {
+            super.dump(fd, writer, args);
+            writer.println("DisplayProvider: " + mDisplayProvider);
+        }
+    }
+
+    private void emulateKeyEvent(int keyCode) {
+        Log.i(TAG, "emulateKeyEvent, keyCode: " + keyCode);
+        long downTime = SystemClock.uptimeMillis();
+        long eventTime = SystemClock.uptimeMillis();
+        KeyEvent event = obtainKeyEvent(keyCode, downTime, eventTime, KeyEvent.ACTION_DOWN);
+        onKeyEvent(event);
+
+        eventTime = SystemClock.uptimeMillis();
+        event = obtainKeyEvent(keyCode, downTime, eventTime, KeyEvent.ACTION_UP);
+        onKeyEvent(event);
+    }
+
+    private KeyEvent obtainKeyEvent(int keyCode, long downTime, long eventTime, int action) {
+        int scanCode = 0;
+        if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {
+            scanCode = 108;
+        } else if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {
+            scanCode = 106;
+        }
+        return KeyEvent.obtain(
+                    downTime,
+                    eventTime,
+                    action,
+                    keyCode,
+                    0 /* repeat */,
+                    0 /* meta state */,
+                    0 /* deviceId*/,
+                    scanCode /* scancode */,
+                    KeyEvent.FLAG_FROM_SYSTEM /* flags */,
+                    InputDevice.SOURCE_KEYBOARD,
+                    null /* characters */);
+    }
+
+    private void execShellCommand(String[] args) {
+        Log.i(TAG, "execShellCommand, args: " + Arrays.toString(args));
+
+        String command = args[0];
+
+        switch (command) {
+            case "injectKey": {
+                if (args.length > 1) {
+                    emulateKeyEvent(parseInt(args[1]));
+                } else {
+                    Log.i(TAG, "Not enough arguments");
+                }
+                break;
+            }
+            case "destroyOverlayDisplay": {
+                Settings.Global.putString(getContentResolver(),
+                        Global.OVERLAY_DISPLAY_DEVICES, "");
+                break;
+            }
+
+            case "createOverlayDisplay": {
+                if (args.length > 1) {
+                    Settings.Global.putString(getContentResolver(),
+                            Global.OVERLAY_DISPLAY_DEVICES, args[1]);
+                } else {
+                    Log.i(TAG, "Not enough arguments, expected 2");
+                }
+                break;
+            }
+
+            case "setUnobscuredArea": {
+                if (args.length > 5) {
+                    Rect unobscuredArea = new Rect(parseInt(args[2]), parseInt(args[3]),
+                            parseInt(args[4]), parseInt(args[5]));
+                    setClusterActivityState(args[1],
+                            ClusterActivityState.create(true, unobscuredArea).toBundle());
+                } else {
+                    Log.i(TAG, "wrong format, expected: category left top right bottom");
+                }
+            }
+        }
+    }
+}
diff --git a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/ClusterViewModel.java b/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/ClusterViewModel.java
new file mode 100644
index 0000000..a53f4ba
--- /dev/null
+++ b/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/ClusterViewModel.java
@@ -0,0 +1,294 @@
+/*
+ * Copyright (C) 2018 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 android.car.cluster.sample;
+
+import android.annotation.Nullable;
+import android.app.Application;
+import android.car.Car;
+import android.car.CarAppFocusManager;
+import android.car.VehicleAreaType;
+import android.car.cluster.sample.sensors.Sensor;
+import android.car.cluster.sample.sensors.Sensors;
+import android.car.hardware.CarPropertyValue;
+import android.car.hardware.property.CarPropertyManager;
+import android.content.ComponentName;
+import android.content.ServiceConnection;
+import android.os.IBinder;
+import android.util.Log;
+
+import androidx.annotation.NonNull;
+import androidx.core.util.Preconditions;
+import androidx.lifecycle.AndroidViewModel;
+import androidx.lifecycle.LiveData;
+import androidx.lifecycle.MutableLiveData;
+import androidx.lifecycle.Transformations;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * {@link AndroidViewModel} for cluster information.
+ */
+public class ClusterViewModel extends AndroidViewModel {
+    private static final String TAG = "Cluster.ViewModel";
+
+    private static final int PROPERTIES_REFRESH_RATE_UI = 5;
+
+    public enum NavigationActivityState {
+        /** No activity has been selected to be displayed on the navigation fragment yet */
+        NOT_SELECTED,
+        /** An activity has been selected, but it is not yet visible to the user */
+        LOADING,
+        /** Navigation activity is visible to the user */
+        VISIBLE,
+    }
+
+    private ComponentName mFreeNavigationActivity;
+    private ComponentName mCurrentNavigationActivity;
+    private final MutableLiveData<NavigationActivityState> mNavigationActivityStateLiveData =
+            new MutableLiveData<>();
+    private final MutableLiveData<Boolean> mNavigationFocus = new MutableLiveData<>(false);
+    private Car mCar;
+    private CarAppFocusManager mCarAppFocusManager;
+    private CarPropertyManager mCarPropertyManager;
+    private Map<Sensor<?>, MutableLiveData<?>> mSensorLiveDatas = new HashMap<>();
+
+    private ServiceConnection mCarServiceConnection = new ServiceConnection() {
+        @Override
+        public void onServiceConnected(ComponentName name, IBinder service) {
+            Log.i(TAG, "onServiceConnected, name: " + name + ", service: " + service);
+
+            registerAppFocusListener();
+            registerCarPropertiesListener();
+        }
+
+        @Override
+        public void onServiceDisconnected(ComponentName name) {
+            Log.i(TAG, "onServiceDisconnected, name: " + name);
+            mCarAppFocusManager = null;
+            mCarPropertyManager = null;
+        }
+    };
+
+    private void registerAppFocusListener() {
+        mCarAppFocusManager = (CarAppFocusManager) mCar.getCarManager(
+                Car.APP_FOCUS_SERVICE);
+        if (mCarAppFocusManager != null) {
+            mCarAppFocusManager.addFocusListener(
+                    (appType, active) -> setNavigationFocus(active),
+                    CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION);
+        } else {
+            Log.e(TAG, "onServiceConnected: unable to obtain CarAppFocusManager");
+        }
+    }
+
+    private void registerCarPropertiesListener() {
+        Sensors sensors = Sensors.getInstance();
+        mCarPropertyManager = (CarPropertyManager) mCar.getCarManager(Car.PROPERTY_SERVICE);
+        for (Integer propertyId : sensors.getPropertyIds()) {
+            try {
+                mCarPropertyManager.registerListener(mCarPropertyEventListener,
+                        propertyId, PROPERTIES_REFRESH_RATE_UI);
+            } catch (SecurityException ex) {
+                Log.e(TAG, "onServiceConnected: Unable to listen to car property: " + propertyId
+                        + " sensors: " + sensors.getSensorsForPropertyId(propertyId), ex);
+            }
+        }
+    }
+
+
+    private CarPropertyManager.CarPropertyEventListener mCarPropertyEventListener =
+            new CarPropertyManager.CarPropertyEventListener() {
+        @Override
+        public void onChangeEvent(CarPropertyValue value) {
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "CarProperty change: property " + value.getPropertyId() + ", area"
+                        + value.getAreaId() + ", value: " + value.getValue());
+            }
+            for (Sensor<?> sensorId : Sensors.getInstance()
+                    .getSensorsForPropertyId(value.getPropertyId())) {
+                if (sensorId.mAreaId == Sensors.GLOBAL_AREA_ID
+                        || (sensorId.mAreaId & value.getAreaId()) != 0) {
+                    setSensorValue(sensorId, value);
+                }
+            }
+        }
+
+        @Override
+        public void onErrorEvent(int propId, int zone) {
+            for (Sensor<?> sensorId : Sensors.getInstance().getSensorsForPropertyId(propId)) {
+                if (sensorId.mAreaId == VehicleAreaType.VEHICLE_AREA_TYPE_GLOBAL
+                        || (sensorId.mAreaId & zone) != 0) {
+                    setSensorValue(sensorId, null);
+                }
+            }
+        }
+
+        private <T> void setSensorValue(Sensor<T> id, CarPropertyValue<?> value) {
+            T newValue = value != null ? id.mAdapter.apply(value) : null;
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "Sensor " + id.mName + " = " + newValue);
+            }
+            getSensorMutableLiveData(id).setValue(newValue);
+        }
+    };
+
+    /**
+     * New {@link ClusterViewModel} instance
+     */
+    public ClusterViewModel(@NonNull Application application) {
+        super(application);
+        mCar = Car.createCar(application, mCarServiceConnection);
+        mCar.connect();
+    }
+
+    @Override
+    protected void onCleared() {
+        super.onCleared();
+        mCar.disconnect();
+        mCar = null;
+        mCarAppFocusManager = null;
+        mCarPropertyManager = null;
+    }
+
+    /**
+     * Returns a {@link LiveData} providing the current state of the activity displayed on the
+     * navigation fragment.
+     */
+    public LiveData<NavigationActivityState> getNavigationActivityState() {
+        return mNavigationActivityStateLiveData;
+    }
+
+    /**
+     * Returns a {@link LiveData} indicating whether navigation focus is currently being granted
+     * or not. This indicates whether a navigation application is currently providing driving
+     * directions.
+     */
+    public LiveData<Boolean> getNavigationFocus() {
+        return mNavigationFocus;
+    }
+
+    /**
+     * Returns a {@link LiveData} that tracks the value of a given car sensor. Each sensor has its
+     * own data type. The list of all supported sensors can be found at {@link Sensors}
+     *
+     * @param sensor sensor to observe
+     * @param <T> data type of such sensor
+     */
+    @SuppressWarnings("unchecked")
+    @NonNull
+    public <T> LiveData<T> getSensor(@NonNull Sensor<T> sensor) {
+        return getSensorMutableLiveData(Preconditions.checkNotNull(sensor));
+    }
+
+    /**
+     * Returns the current value of the sensor, directly from the VHAL.
+     *
+     * @param sensor sensor to read
+     * @param <V> VHAL data type
+     * @param <T> data type of such sensor
+     */
+    @Nullable
+    public <T> T getSensorValue(@NonNull Sensor<T> sensor) {
+        CarPropertyValue<?> value = mCarPropertyManager
+                .getProperty(sensor.mPropertyId, sensor.mAreaId);
+        return sensor.mAdapter.apply(value);
+    }
+
+    /**
+     * Returns a {@link LiveData} that tracks the fuel level in a range from 0.0 to 1.0.
+     */
+    public LiveData<Float> getFuelLevel() {
+        return Transformations.map(getSensor(Sensors.SENSOR_FUEL), (fuelValue) -> {
+            Float fuelCapacityValue = getSensorValue(Sensors.SENSOR_FUEL_CAPACITY);
+            if (fuelValue == null || fuelCapacityValue == null || fuelCapacityValue == 0) {
+                return null;
+            }
+            if (fuelValue < 0.0f) {
+                return 0.0f;
+            }
+            if (fuelValue > fuelCapacityValue) {
+                return 1.0f;
+            }
+            return fuelValue / fuelCapacityValue;
+        });
+    }
+
+    /**
+     * Sets the activity selected to be displayed on the cluster when no driving directions are
+     * being provided.
+     */
+    public void setFreeNavigationActivity(ComponentName activity) {
+        if (!Objects.equals(activity, mFreeNavigationActivity)) {
+            mFreeNavigationActivity = activity;
+            updateNavigationActivityLiveData();
+        }
+    }
+
+    /**
+     * Sets the activity currently being displayed on the cluster.
+     */
+    public void setCurrentNavigationActivity(ComponentName activity) {
+        if (!Objects.equals(activity, mCurrentNavigationActivity)) {
+            mCurrentNavigationActivity = activity;
+            updateNavigationActivityLiveData();
+        }
+    }
+
+    /**
+     * Sets whether navigation focus is currently being granted or not.
+     */
+    public void setNavigationFocus(boolean navigationFocus) {
+        if (mNavigationFocus.getValue() == null || mNavigationFocus.getValue() != navigationFocus) {
+            mNavigationFocus.setValue(navigationFocus);
+            updateNavigationActivityLiveData();
+        }
+    }
+
+    private void updateNavigationActivityLiveData() {
+        NavigationActivityState newState = calculateNavigationActivityState();
+        if (newState != mNavigationActivityStateLiveData.getValue()) {
+            mNavigationActivityStateLiveData.setValue(newState);
+        }
+    }
+
+    private NavigationActivityState calculateNavigationActivityState() {
+        if (Log.isLoggable(TAG, Log.DEBUG)) {
+            Log.d(TAG, String.format("Current state: current activity = '%s', free nav activity = "
+                            + "'%s', focus = %s", mCurrentNavigationActivity,
+                    mFreeNavigationActivity,
+                    mNavigationFocus.getValue()));
+        }
+        if (mNavigationFocus.getValue() != null && mNavigationFocus.getValue()) {
+            // Car service controls which activity is displayed while driving, so we assume this
+            // has already been taken care of.
+            return NavigationActivityState.VISIBLE;
+        } else if (mFreeNavigationActivity == null) {
+            return NavigationActivityState.NOT_SELECTED;
+        } else if (Objects.equals(mFreeNavigationActivity, mCurrentNavigationActivity)) {
+            return NavigationActivityState.VISIBLE;
+        } else {
+            return NavigationActivityState.LOADING;
+        }
+    }
+
+    @SuppressWarnings("unchecked")
+    private <T> MutableLiveData<T> getSensorMutableLiveData(Sensor<T> sensor) {
+        return (MutableLiveData<T>) mSensorLiveDatas
+                .computeIfAbsent(sensor, x -> new MutableLiveData<>());
+    }
+}
diff --git a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/CueView.java b/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/CueView.java
new file mode 100644
index 0000000..4dc8116
--- /dev/null
+++ b/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/CueView.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2018 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 android.car.cluster.sample;
+
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.text.SpannableStringBuilder;
+import android.text.style.ImageSpan;
+import android.util.AttributeSet;
+import android.widget.TextView;
+
+import androidx.car.cluster.navigation.RichText;
+import androidx.car.cluster.navigation.RichTextElement;
+
+/**
+ * View component that displays the Cue information on the instrument cluster display
+ */
+public class CueView extends TextView {
+    public CueView(Context context) {
+        super(context);
+    }
+
+    public CueView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public CueView(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+    }
+
+    public void setRichText(RichText richText) {
+        if (richText == null) {
+            setText(null);
+            return;
+        }
+
+        SpannableStringBuilder builder = new SpannableStringBuilder();
+        for (RichTextElement textElement : richText.getElements()) {
+            if (!textElement.getText().equals("")) {
+                builder.append(textElement.getText());
+            } else if (textElement.getImage() != null) {
+                builder.append(" ");
+
+                Bitmap bitmap = ImageResolver.getInstance().getBitmap(mContext,
+                        textElement.getImage());
+
+                if (bitmap != null) {
+                    bitmap = Bitmap.createScaledBitmap(bitmap,
+                            (int) (((float) getLineHeight() / bitmap.getHeight())
+                                    * bitmap.getWidth()),
+                            getLineHeight(),
+                            true);
+
+                    int index = builder.length() - 1;
+                    builder.setSpan(new ImageSpan(mContext, bitmap), index, index + 1, 0);
+                }
+            }
+        }
+
+        setText(builder);
+    }
+}
diff --git a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/ImageResolver.java b/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/ImageResolver.java
new file mode 100644
index 0000000..b7fd0c1
--- /dev/null
+++ b/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/ImageResolver.java
@@ -0,0 +1,84 @@
+/*
+ * Copyright (C) 2018 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 android.car.cluster.sample;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.net.Uri;
+import android.os.ParcelFileDescriptor;
+import android.util.Log;
+
+import androidx.annotation.Nullable;
+import androidx.car.cluster.navigation.ImageReference;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
+
+
+/**
+ * Class for retrieving bitmap images from a ContentProvider
+ */
+public class ImageResolver {
+    private static final String TAG = "ImageResolver";
+
+    private static ImageResolver sImageResolver = new ImageResolver();
+
+    private ImageResolver() {}
+
+    public static ImageResolver getInstance() {
+        return sImageResolver;
+    }
+
+    /**
+     * Returns a bitmap from an URI string from a content provider
+     *
+     * @param context View context
+     */
+    @Nullable
+    protected static Bitmap getBitmap(Context context, String uriString) {
+        Uri uri = Uri.parse(uriString);
+        try {
+            ContentResolver contentResolver = context.getContentResolver();
+            ParcelFileDescriptor fileDesc = contentResolver.openFileDescriptor(uri, "r");
+            if (fileDesc != null) {
+                Bitmap bitmap = BitmapFactory.decodeFileDescriptor(fileDesc.getFileDescriptor());
+                fileDesc.close();
+                return bitmap;
+            } else {
+                Log.e(TAG, "Null pointer: Failed to create pipe for uri string: " + uriString);
+            }
+        } catch (FileNotFoundException e) {
+            Log.e(TAG, "File not found for uri string: " + uriString, e);
+        } catch (IOException e) {
+            Log.e(TAG, "File descriptor could not close: ", e);
+        }
+
+        return null;
+    }
+
+    /**
+     * Returns a bitmap from a Car Instrument Cluster {@link ImageReference}
+     *
+     * @param context View context
+     */
+    @Nullable
+    protected static Bitmap getBitmap(Context context, ImageReference img) {
+        String uriString = img.getRawContentUri();
+        return getBitmap(context, uriString);
+    }
+}
diff --git a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/LaneView.java b/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/LaneView.java
new file mode 100644
index 0000000..6e86b92
--- /dev/null
+++ b/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/LaneView.java
@@ -0,0 +1,132 @@
+/*
+ * Copyright (C) 2018 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 android.car.cluster.sample;
+
+import android.annotation.Nullable;
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.PorterDuff;
+import android.graphics.PorterDuffColorFilter;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.VectorDrawable;
+import android.util.AttributeSet;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+
+import androidx.car.cluster.navigation.Lane;
+import androidx.car.cluster.navigation.LaneDirection;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * View component that displays the Lane preview information on the instrument cluster display
+ */
+public class LaneView extends LinearLayout {
+    private ArrayList<Lane> mLanes;
+
+    private final int mWidth = (int) getResources().getDimension(R.dimen.lane_width);
+    private final int mHeight = (int) getResources().getDimension(R.dimen.lane_height);
+
+    public LaneView(Context context) {
+        super(context);
+    }
+
+    public LaneView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public LaneView(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+    }
+
+    public void setLanes(List<Lane> lanes) {
+        mLanes = new ArrayList<>(lanes);
+        removeAllViews();
+
+        for (Lane lane : mLanes) {
+            Bitmap bitmap = combineBitmapFromLane(lane);
+            ImageView imgView = new ImageView(getContext());
+            imgView.setImageBitmap(bitmap);
+            imgView.setAdjustViewBounds(true);
+            addView(imgView);
+        }
+    }
+
+    private Bitmap combineBitmapFromLane(Lane lane) {
+        if (lane.getDirections().isEmpty()) {
+            return null;
+        }
+
+        Bitmap bitmap = Bitmap.createBitmap(mWidth, mHeight, Bitmap.Config.ARGB_8888);
+        Canvas canvas = new Canvas(bitmap);
+
+        for (LaneDirection laneDir : lane.getDirections()) {
+            if (!laneDir.isHighlighted()) {
+                drawToCanvas(laneDir, canvas, false);
+            }
+        }
+
+        for (LaneDirection laneDir : lane.getDirections()) {
+            if (laneDir.isHighlighted()) {
+                drawToCanvas(laneDir, canvas, true);
+            }
+        }
+
+        return bitmap;
+    }
+
+
+    private void drawToCanvas(LaneDirection laneDir, Canvas canvas, boolean isHighlighted) {
+        VectorDrawable icon = (VectorDrawable) getLaneIcon(laneDir);
+        icon.setBounds(0, 0, mWidth, mHeight);
+        icon.setColorFilter(new PorterDuffColorFilter(isHighlighted
+                ? getContext().getColor(R.color.laneDirectionHighlighted)
+                : getContext().getColor(R.color.laneDirection),
+                PorterDuff.Mode.SRC_ATOP));
+        icon.draw(canvas);
+    }
+
+    private Drawable getLaneIcon(@Nullable LaneDirection laneDir) {
+        if (laneDir == null) {
+            return null;
+        }
+        switch (laneDir.getShape()) {
+            case UNKNOWN:
+                return null;
+            case STRAIGHT:
+                return mContext.getDrawable(R.drawable.direction_continue);
+            case SLIGHT_LEFT:
+                return mContext.getDrawable(R.drawable.direction_turn_slight_left);
+            case SLIGHT_RIGHT:
+                return mContext.getDrawable(R.drawable.direction_turn_slight_right);
+            case NORMAL_LEFT:
+                return mContext.getDrawable(R.drawable.direction_turn_left);
+            case NORMAL_RIGHT:
+                return mContext.getDrawable(R.drawable.direction_turn_right);
+            case SHARP_LEFT:
+                return mContext.getDrawable(R.drawable.direction_turn_sharp_left);
+            case SHARP_RIGHT:
+                return mContext.getDrawable(R.drawable.direction_turn_sharp_right);
+            case U_TURN_LEFT:
+                return mContext.getDrawable(R.drawable.direction_uturn);
+            case U_TURN_RIGHT:
+                return mContext.getDrawable(R.drawable.direction_uturn_right);
+        }
+        return null;
+    }
+}
diff --git a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/MainClusterActivity.java b/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/MainClusterActivity.java
index 2e38054..f8e8cbc 100644
--- a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/MainClusterActivity.java
+++ b/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/MainClusterActivity.java
@@ -15,22 +15,35 @@
  */
 package android.car.cluster.sample;
 
-import static android.car.cluster.CarInstrumentClusterManager.CATEGORY_NAVIGATION;
-import static android.car.cluster.sample.SampleClusterServiceImpl.LOCAL_BINDING_ACTION;
-import static android.car.cluster.sample.SampleClusterServiceImpl.MSG_KEY_ACTIVITY_DISPLAY_ID;
-import static android.car.cluster.sample.SampleClusterServiceImpl.MSG_KEY_ACTIVITY_STATE;
-import static android.car.cluster.sample.SampleClusterServiceImpl.MSG_KEY_CATEGORY;
-import static android.car.cluster.sample.SampleClusterServiceImpl.MSG_KEY_KEY_EVENT;
-import static android.car.cluster.sample.SampleClusterServiceImpl.MSG_ON_KEY_EVENT;
-import static android.car.cluster.sample.SampleClusterServiceImpl.MSG_ON_NAVIGATION_STATE_CHANGED;
-import static android.car.cluster.sample.SampleClusterServiceImpl.MSG_REGISTER_CLIENT;
-import static android.car.cluster.sample.SampleClusterServiceImpl.MSG_SET_ACTIVITY_LAUNCH_OPTIONS;
-import static android.car.cluster.sample.SampleClusterServiceImpl.MSG_UNREGISTER_CLIENT;
+import static android.car.cluster.sample.ClusterRenderingServiceImpl.LOCAL_BINDING_ACTION;
+import static android.car.cluster.sample.ClusterRenderingServiceImpl.MSG_KEY_ACTIVITY_DISPLAY_ID;
+import static android.car.cluster.sample.ClusterRenderingServiceImpl.MSG_KEY_ACTIVITY_STATE;
+import static android.car.cluster.sample.ClusterRenderingServiceImpl.MSG_KEY_CATEGORY;
+import static android.car.cluster.sample.ClusterRenderingServiceImpl.MSG_KEY_KEY_EVENT;
+import static android.car.cluster.sample.ClusterRenderingServiceImpl.MSG_ON_KEY_EVENT;
+import static android.car.cluster.sample.ClusterRenderingServiceImpl
+        .MSG_ON_NAVIGATION_STATE_CHANGED;
+import static android.car.cluster.sample.ClusterRenderingServiceImpl.MSG_REGISTER_CLIENT;
+import static android.car.cluster.sample.ClusterRenderingServiceImpl
+        .MSG_SET_ACTIVITY_LAUNCH_OPTIONS;
+import static android.car.cluster.sample.ClusterRenderingServiceImpl.MSG_UNREGISTER_CLIENT;
+import static android.content.Intent.ACTION_USER_SWITCHED;
+import static android.content.Intent.ACTION_USER_UNLOCKED;
 
+import android.app.ActivityManager;
+import android.app.ActivityOptions;
+import android.car.Car;
 import android.car.cluster.ClusterActivityState;
+import android.car.cluster.sample.sensors.Sensors;
+import android.content.ActivityNotFoundException;
+import android.content.BroadcastReceiver;
 import android.content.ComponentName;
+import android.content.Context;
 import android.content.Intent;
+import android.content.IntentFilter;
 import android.content.ServiceConnection;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
 import android.graphics.Rect;
 import android.os.Bundle;
 import android.os.Handler;
@@ -38,6 +51,7 @@
 import android.os.Message;
 import android.os.Messenger;
 import android.os.RemoteException;
+import android.os.UserHandle;
 import android.util.Log;
 import android.util.SparseArray;
 import android.view.Display;
@@ -46,57 +60,94 @@
 import android.view.View;
 import android.view.inputmethod.InputMethodManager;
 import android.widget.Button;
+import android.widget.TextView;
 
 import androidx.car.cluster.navigation.NavigationState;
 import androidx.fragment.app.Fragment;
 import androidx.fragment.app.FragmentActivity;
 import androidx.fragment.app.FragmentManager;
 import androidx.fragment.app.FragmentPagerAdapter;
+import androidx.lifecycle.LiveData;
+import androidx.lifecycle.ViewModelProviders;
 import androidx.versionedparcelable.ParcelUtils;
 import androidx.viewpager.widget.ViewPager;
 
 import java.lang.ref.WeakReference;
 import java.lang.reflect.InvocationTargetException;
 import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
+/**
+ * Main activity displayed on the instrument cluster. This activity contains fragments for each of
+ * the cluster "facets" (e.g.: navigation, communication, media and car state). Users can navigate
+ * to each facet by using the steering wheel buttons.
+ * <p>
+ * This activity runs on "system user" (see {@link UserHandle#USER_SYSTEM}) but it is visible on
+ * all users (the same activity remains active even during user switch).
+ * <p>
+ * This activity also launches a default navigation app inside a virtual display (which is located
+ * inside {@link NavigationFragment}). This navigation app is launched when:
+ * <ul>
+ * <li>Virtual display for navigation apps is ready.
+ * <li>After every user switch.
+ * </ul>
+ * This is necessary because the navigation app runs under a normal user, and different users will
+ * see different instances of the same application, with their own personalized data.
+ */
 public class MainClusterActivity extends FragmentActivity {
     private static final String TAG = "Cluster.MainActivity";
 
     private static final NavigationState NULL_NAV_STATE = new NavigationState.Builder().build();
+    private static final int NO_DISPLAY = -1;
 
     private ViewPager mPager;
     private NavStateController mNavStateController;
+    private ClusterViewModel mClusterViewModel;
 
-    private HashMap<Button, Facet<?>> mButtonToFacet = new HashMap<>();
+    private Map<View, Facet<?>> mButtonToFacet = new HashMap<>();
     private SparseArray<Facet<?>> mOrderToFacet = new SparseArray<>();
 
+    private Map<Sensors.Gear, View> mGearsToIcon = new HashMap<>();
     private InputMethodManager mInputMethodManager;
     private Messenger mService;
     private Messenger mServiceCallbacks = new Messenger(new MessageHandler(this));
     private VirtualDisplay mPendingVirtualDisplay = null;
+
+    private static final int NAVIGATION_ACTIVITY_RETRY_INTERVAL_MS = 1000;
+
+    private UserReceiver mUserReceiver;
+    private ActivityMonitor mActivityMonitor = new ActivityMonitor();
     private final Handler mHandler = new Handler();
+    private final Runnable mRetryLaunchNavigationActivity = this::tryLaunchNavigationActivity;
+    private int mNavigationDisplayId = NO_DISPLAY;
 
+    /**
+     * Description of a virtual display
+     */
     public static class VirtualDisplay {
+        /** Identifier of the display */
         public final int mDisplayId;
-        public final Rect mBounds;
+        /** Rectangular area inside this display that can be viewed without obstructions */
+        public final Rect mUnobscuredBounds;
 
-        public VirtualDisplay(int displayId, Rect bounds) {
+        public VirtualDisplay(int displayId, Rect unobscuredBounds) {
             mDisplayId = displayId;
-            mBounds = bounds;
+            mUnobscuredBounds = unobscuredBounds;
         }
     }
 
     private final View.OnFocusChangeListener mFacetButtonFocusListener =
             new View.OnFocusChangeListener() {
-        @Override
-        public void onFocusChange(View v, boolean hasFocus) {
-            if (hasFocus) {
-                mPager.setCurrentItem(mButtonToFacet.get(v).order);
-            }
-        }
-    };
+                @Override
+                public void onFocusChange(View v, boolean hasFocus) {
+                    if (hasFocus) {
+                        mPager.setCurrentItem(mButtonToFacet.get(v).order);
+                    }
+                }
+            };
 
-    private ServiceConnection mServiceConnection = new ServiceConnection() {
+    private ServiceConnection mClusterRenderingServiceConnection = new ServiceConnection() {
         @Override
         public void onServiceConnected(ComponentName name, IBinder service) {
             Log.i(TAG, "onServiceConnected, name: " + name + ", service: " + service);
@@ -129,7 +180,10 @@
             Bundle data = msg.getData();
             switch (msg.what) {
                 case MSG_ON_KEY_EVENT:
-                    mActivity.get().onKeyEvent(data.getParcelable(MSG_KEY_KEY_EVENT));
+                    KeyEvent event = data.getParcelable(MSG_KEY_KEY_EVENT);
+                    if (event != null) {
+                        mActivity.get().onKeyEvent(event);
+                    }
                     break;
                 case MSG_ON_NAVIGATION_STATE_CHANGED:
                     if (data == null) {
@@ -138,7 +192,7 @@
                         data.setClassLoader(ParcelUtils.class.getClassLoader());
                         NavigationState navState = NavigationState
                                 .fromParcelable(data.getParcelable(
-                                        SampleClusterServiceImpl.NAV_STATE_BUNDLE_KEY));
+                                        ClusterRenderingServiceImpl.NAV_STATE_BUNDLE_KEY));
                         mActivity.get().onNavigationStateChange(navState);
                     }
                     break;
@@ -148,6 +202,40 @@
         }
     }
 
+    private ActivityMonitor.ActivityListener mNavigationActivityMonitor = (displayId, activity) -> {
+        if (displayId != mNavigationDisplayId) {
+            return;
+        }
+        mClusterViewModel.setCurrentNavigationActivity(activity);
+    };
+
+    private static class UserReceiver extends BroadcastReceiver {
+        private WeakReference<MainClusterActivity> mActivity;
+
+        UserReceiver(MainClusterActivity activity) {
+            mActivity = new WeakReference<>(activity);
+        }
+
+        public void register(Context context) {
+            IntentFilter intentFilter =  new IntentFilter(ACTION_USER_UNLOCKED);
+            intentFilter.addAction(ACTION_USER_SWITCHED);
+            context.registerReceiver(this, intentFilter);
+        }
+
+        public void unregister(Context context) {
+            context.unregisterReceiver(this);
+        }
+
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            MainClusterActivity activity = mActivity.get();
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "Broadcast received: " + intent);
+            }
+            activity.tryLaunchNavigationActivity();
+        }
+    }
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -156,32 +244,66 @@
 
         mInputMethodManager = getSystemService(InputMethodManager.class);
 
-        Intent intent = new Intent(this, SampleClusterServiceImpl.class);
+        Intent intent = new Intent(this, ClusterRenderingServiceImpl.class);
         intent.setAction(LOCAL_BINDING_ACTION);
-        bindService(intent, mServiceConnection, 0);
+        bindServiceAsUser(intent, mClusterRenderingServiceConnection, 0, UserHandle.SYSTEM);
 
-        registerFacets(
-                new Facet<>(findViewById(R.id.btn_nav), 0, NavigationFragment.class),
-                new Facet<>(findViewById(R.id.btn_phone), 1, PhoneFragment.class),
-                new Facet<>(findViewById(R.id.btn_music), 2, MusicFragment.class),
-                new Facet<>(findViewById(R.id.btn_car_info), 3, CarInfoFragment.class));
+        registerFacet(new Facet<>(findViewById(R.id.btn_nav), 0, NavigationFragment.class));
+        registerFacet(new Facet<>(findViewById(R.id.btn_phone), 1, PhoneFragment.class));
+        registerFacet(new Facet<>(findViewById(R.id.btn_music), 2, MusicFragment.class));
+        registerFacet(new Facet<>(findViewById(R.id.btn_car_info), 3, CarInfoFragment.class));
+        registerGear(findViewById(R.id.gear_parked), Sensors.Gear.PARK);
+        registerGear(findViewById(R.id.gear_reverse), Sensors.Gear.REVERSE);
+        registerGear(findViewById(R.id.gear_neutral), Sensors.Gear.NEUTRAL);
+        registerGear(findViewById(R.id.gear_drive), Sensors.Gear.DRIVE);
 
         mPager = findViewById(R.id.pager);
         mPager.setAdapter(new ClusterPageAdapter(getSupportFragmentManager()));
         mOrderToFacet.get(0).button.requestFocus();
-        mNavStateController = new NavStateController(findViewById(R.id.maneuver),
-                findViewById(R.id.distance), findViewById(R.id.segment));
+        mNavStateController = new NavStateController(findViewById(R.id.navigation_state));
+
+        mClusterViewModel = ViewModelProviders.of(this).get(ClusterViewModel.class);
+        mClusterViewModel.getNavigationFocus().observe(this, focus -> {
+            mNavStateController.setActive(focus);
+            // If focus is lost, we launch the default navigation activity again.
+            if (!focus) {
+                tryLaunchNavigationActivity();
+            }
+        });
+
+        mClusterViewModel.getSensor(Sensors.SENSOR_GEAR).observe(this, this::updateSelectedGear);
+
+        registerSensor(findViewById(R.id.info_fuel), mClusterViewModel.getFuelLevel());
+        registerSensor(findViewById(R.id.info_speed),
+                mClusterViewModel.getSensor(Sensors.SENSOR_SPEED));
+        registerSensor(findViewById(R.id.info_range),
+                mClusterViewModel.getSensor(Sensors.SENSOR_FUEL_RANGE));
+        registerSensor(findViewById(R.id.info_rpm),
+                mClusterViewModel.getSensor(Sensors.SENSOR_RPM));
+
+        mActivityMonitor.start();
+
+        mUserReceiver = new UserReceiver(this);
+        mUserReceiver.register(this);
+    }
+
+    private <V> void registerSensor(TextView textView, LiveData<V> source) {
+        String emptyValue = getString(R.string.info_value_empty);
+        source.observe(this, value -> textView.setText(value != null
+                ? value.toString() : emptyValue));
     }
 
     @Override
     protected void onDestroy() {
         super.onDestroy();
         Log.d(TAG, "onDestroy");
+        mUserReceiver.unregister(this);
+        mActivityMonitor.stop();
         if (mService != null) {
             sendServiceMessage(MSG_UNREGISTER_CLIENT, null, mServiceCallbacks);
             mService = null;
         }
-        unbindService(mServiceConnection);
+        unbindService(mClusterRenderingServiceConnection);
     }
 
     private void onKeyEvent(KeyEvent event) {
@@ -202,6 +324,10 @@
     }
 
     public void updateNavDisplay(VirtualDisplay virtualDisplay) {
+        // Starting the default navigation activity. This activity will be shown when navigation
+        // focus is not taken.
+        startNavigationActivity(virtualDisplay.mDisplayId);
+        // Notify the service (so it updates display properties on car service)
         if (mService == null) {
             // Service is not bound yet. Hold the information and notify when the service is bound.
             mPendingVirtualDisplay = virtualDisplay;
@@ -213,18 +339,18 @@
 
     private void reportNavDisplay(VirtualDisplay virtualDisplay) {
         Bundle data = new Bundle();
-        data.putString(MSG_KEY_CATEGORY, CATEGORY_NAVIGATION);
+        data.putString(MSG_KEY_CATEGORY, Car.CAR_CATEGORY_NAVIGATION);
         data.putInt(MSG_KEY_ACTIVITY_DISPLAY_ID, virtualDisplay.mDisplayId);
         data.putBundle(MSG_KEY_ACTIVITY_STATE, ClusterActivityState
                 .create(virtualDisplay.mDisplayId != Display.INVALID_DISPLAY,
-                        virtualDisplay.mBounds)
+                        virtualDisplay.mUnobscuredBounds)
                 .toBundle());
         sendServiceMessage(MSG_SET_ACTIVITY_LAUNCH_OPTIONS, data, null);
     }
 
     /**
-     * Sends a message to the {@link SampleClusterServiceImpl}, which runs on a different process.
-
+     * Sends a message to the {@link ClusterRenderingServiceImpl}, which runs on a different
+     * process.
      * @param what action to perform
      * @param data action data
      * @param replyTo {@link Messenger} where to reply back
@@ -256,12 +382,6 @@
         }
     }
 
-    private void registerFacets(Facet<?>... facets) {
-        for (Facet<?> f : facets) {
-            registerFacet(f);
-        }
-    }
-
     private <T> void registerFacet(Facet<T> facet) {
         mOrderToFacet.append(facet.order, facet);
         mButtonToFacet.put(facet.button, facet);
@@ -293,4 +413,106 @@
             return mFragment;
         }
     }
+
+    private void startNavigationActivity(int displayId) {
+        mActivityMonitor.removeListener(mNavigationDisplayId, mNavigationActivityMonitor);
+        mActivityMonitor.addListener(displayId, mNavigationActivityMonitor);
+        mNavigationDisplayId = displayId;
+        tryLaunchNavigationActivity();
+    }
+
+    /**
+     * Tries to start a default navigation activity in the cluster. During system initialization
+     * launching user activities might fail due the system not being ready or {@link PackageManager}
+     * not being able to resolve the implicit intent. It is also possible that the system doesn't
+     * have a default navigation activity selected yet.
+     */
+    private void tryLaunchNavigationActivity() {
+        if (mNavigationDisplayId == NO_DISPLAY) {
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, String.format("Launch activity ignored (no display yet)"));
+            }
+            // Not ready to launch yet.
+            return;
+        }
+        mHandler.removeCallbacks(mRetryLaunchNavigationActivity);
+
+        ComponentName navigationActivity = getNavigationActivity();
+        mClusterViewModel.setFreeNavigationActivity(navigationActivity);
+
+        try {
+            if (navigationActivity == null) {
+                throw new ActivityNotFoundException();
+            }
+            Intent intent = new Intent(Intent.ACTION_MAIN).addCategory(Car.CAR_CATEGORY_NAVIGATION)
+                    .setPackage(navigationActivity.getPackageName())
+                    .setComponent(navigationActivity)
+                    .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+            Log.d(TAG, "Launching: " + intent + " on display: " + mNavigationDisplayId);
+            Bundle activityOptions = ActivityOptions.makeBasic()
+                    .setLaunchDisplayId(mNavigationDisplayId)
+                    .toBundle();
+
+            startActivityAsUser(intent, activityOptions, UserHandle.CURRENT);
+        } catch (ActivityNotFoundException ex) {
+            // Some activities might not be available right on startup. We will retry.
+            mHandler.postDelayed(mRetryLaunchNavigationActivity,
+                    NAVIGATION_ACTIVITY_RETRY_INTERVAL_MS);
+        } catch (Exception ex) {
+            Log.e(TAG, "Unable to start navigation activity: " + navigationActivity, ex);
+        }
+    }
+
+    /**
+     * Returns a default navigation activity to show in the cluster.
+     * In the current implementation we search for an activity with the
+     * {@link Car#CAR_CATEGORY_NAVIGATION} category from the same navigation app
+     * selected from CarLauncher (see CarLauncher#getMapsIntent()).
+     * Alternatively, other implementations could:
+     * <ul>
+     * <li>Read this package from a resource (having a OEM default activity to show)
+     * <li>Let the user select one from settings.
+     * </ul>
+     */
+    private ComponentName getNavigationActivity() {
+        PackageManager pm = getPackageManager();
+        int userId = ActivityManager.getCurrentUser();
+
+        // Get currently selected navigation app.
+        Intent intent = Intent.makeMainSelectorActivity(Intent.ACTION_MAIN,
+                Intent.CATEGORY_APP_MAPS);
+        ResolveInfo navigationApp = pm.resolveActivityAsUser(intent,
+                PackageManager.MATCH_DEFAULT_ONLY, userId);
+
+        // Get all possible cluster activities
+        intent = new Intent(Intent.ACTION_MAIN).addCategory(Car.CAR_CATEGORY_NAVIGATION);
+        List<ResolveInfo> candidates = pm.queryIntentActivitiesAsUser(intent, 0, userId);
+
+        // If there is a select navigation app, try finding a matching auxiliary navigation activity
+        if (navigationApp != null) {
+            for (ResolveInfo candidate : candidates) {
+                if (candidate.activityInfo.packageName.equals(navigationApp.activityInfo
+                        .packageName)) {
+                    Log.d(TAG, "Found activity: " + candidate);
+                    return new ComponentName(candidate.activityInfo.packageName,
+                            candidate.activityInfo.name);
+                }
+            }
+        }
+
+        // During initialization implicit intents might not provided a result. We will just
+        // retry until we find one, or we exhaust the retries.
+        Log.d(TAG, "No default activity found (it might not be available yet).");
+        return null;
+    }
+
+    private void registerGear(View view, Sensors.Gear gear) {
+        mGearsToIcon.put(gear, view);
+    }
+
+    private void updateSelectedGear(Sensors.Gear gear) {
+        for (Map.Entry<Sensors.Gear, View> entry : mGearsToIcon.entrySet()) {
+            entry.getValue().setSelected(entry.getKey() == gear);
+        }
+    }
 }
diff --git a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/NavStateController.java b/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/NavStateController.java
index b45a806..da31d3f 100644
--- a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/NavStateController.java
+++ b/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/NavStateController.java
@@ -19,14 +19,22 @@
 import android.content.Context;
 import android.graphics.drawable.Drawable;
 import android.util.Log;
+import android.view.View;
 import android.widget.ImageView;
 import android.widget.TextView;
 
+import androidx.car.cluster.navigation.Destination;
+import androidx.car.cluster.navigation.Destination.Traffic;
 import androidx.car.cluster.navigation.Distance;
 import androidx.car.cluster.navigation.Maneuver;
 import androidx.car.cluster.navigation.NavigationState;
+import androidx.car.cluster.navigation.Segment;
 import androidx.car.cluster.navigation.Step;
 
+import java.time.Duration;
+import java.time.ZonedDateTime;
+import java.util.List;
+
 /**
  * View controller for navigation state rendering.
  */
@@ -34,33 +42,119 @@
     private static final String TAG = "Cluster.NavController";
 
     private ImageView mManeuver;
+    private LaneView mLane;
     private TextView mDistance;
     private TextView mSegment;
+    private TextView mEta;
+    private CueView mCue;
     private Context mContext;
+    private View mNavigationState;
 
     /**
      * Creates a controller to coordinate updates to the views displaying navigation state
      * data.
      *
-     * @param maneuver {@link ImageView} used to display the immediate navigation maneuver
-     * @param distance {@link TextView} displaying distance to the maneuver
-     * @param segment {@link TextView} displaying the current street.
+     * @param container {@link View} containing the navigation state views
      */
-    public NavStateController(ImageView maneuver, TextView distance, TextView segment) {
-        mManeuver = maneuver;
-        mDistance = distance;
-        mSegment = segment;
-        mContext = maneuver.getContext();
+    public NavStateController(View container) {
+        mNavigationState = container;
+        mManeuver = container.findViewById(R.id.maneuver);
+        mLane = container.findViewById(R.id.lane);
+        mDistance = container.findViewById(R.id.distance);
+        mSegment = container.findViewById(R.id.segment);
+        mEta = container.findViewById(R.id.eta);
+        mCue = container.findViewById(R.id.cue);
+
+        mContext = container.getContext();
     }
 
     /**
      * Updates views to reflect the provided navigation state
      */
     public void update(@Nullable NavigationState state) {
-        Log.i(TAG, "Updating nav state: " + state);
+        if (Log.isLoggable(TAG, Log.DEBUG)) {
+            Log.d(TAG, "Updating nav state: " + state);
+        }
         Step step = getImmediateStep(state);
+
+        List<Destination> destinations = state.getDestinations();
+        ZonedDateTime eta = null;
+        Traffic traffic = null;
+        if (!destinations.isEmpty()) {
+            eta = state.getDestinations().get(0).getEta();
+            traffic = state.getDestinations().get(0).getTraffic();
+        }
+
+        mEta.setText(eta != null ? formatEta(eta) : null);
+        mEta.setTextColor(getTrafficColor(traffic));
         mManeuver.setImageDrawable(getManeuverIcon(step != null ? step.getManeuver() : null));
         mDistance.setText(formatDistance(step != null ? step.getDistance() : null));
+        mSegment.setText(getSegmentString(state.getCurrentSegment()));
+        mCue.setRichText(step != null ? step.getCue() : null);
+
+        if (step.getLanes().size() > 0) {
+            mLane.setLanes(step.getLanes());
+            mLane.setVisibility(View.VISIBLE);
+        } else {
+            mLane.setVisibility(View.GONE);
+        }
+    }
+
+
+    private int getTrafficColor(@Nullable Traffic traffic) {
+        if (traffic == Traffic.LOW) {
+            return mContext.getColor(R.color.low_traffic);
+        } else if (traffic == Traffic.MEDIUM) {
+            return mContext.getColor(R.color.medium_traffic);
+        } else if (traffic == Traffic.HIGH) {
+            return mContext.getColor(R.color.high_traffic);
+        }
+
+        return mContext.getColor(R.color.unknown_traffic);
+    }
+
+    private String formatEta(@Nullable ZonedDateTime eta) {
+        ZonedDateTime now = ZonedDateTime.now();
+        Duration duration = Duration.between(now, eta);
+        long seconds = duration.getSeconds();
+
+        // TODO: move formatting into common lib somewhere
+        long minutes = (seconds / 60) % 60;
+        long hours = (seconds / 3600) % 24;
+        long days = seconds / (3600 * 24);
+
+        if (days > 0) {
+            return String.format("%d d %d hr", days, hours);
+        } else if (hours > 0) {
+            return String.format("%d hr %d min", hours, minutes);
+        } else {
+            return String.format("%d min", minutes);
+        }
+    }
+
+    /**
+     * Updates whether turn-by-turn display is active or not. Turn-by-turn would be active whenever
+     * a navigation application has focus.
+     */
+    public void setActive(boolean active) {
+        if (Log.isLoggable(TAG, Log.DEBUG)) {
+            Log.d(TAG, "Navigation status active: " + active);
+        }
+        if (!active) {
+            mManeuver.setImageDrawable(null);
+            mDistance.setText(null);
+            mLane.setVisibility(View.GONE);
+            mCue.setText(null);
+            mSegment.setText(null);
+        }
+    }
+
+    private String getSegmentString(Segment segment) {
+        if (segment != null) {
+            return segment.getName();
+        }
+
+        return null;
     }
 
     private Drawable getManeuverIcon(@Nullable Maneuver maneuver) {
@@ -93,7 +187,7 @@
             case U_TURN_LEFT:
                 return mContext.getDrawable(R.drawable.direction_uturn);
             case U_TURN_RIGHT:
-                return mContext.getDrawable(R.drawable.direction_uturn);
+                return mContext.getDrawable(R.drawable.direction_uturn_right);
             case ON_RAMP_SLIGHT_LEFT:
                 return mContext.getDrawable(R.drawable.direction_on_ramp_slight_left);
             case ON_RAMP_SLIGHT_RIGHT:
@@ -109,7 +203,7 @@
             case ON_RAMP_U_TURN_LEFT:
                 return mContext.getDrawable(R.drawable.direction_uturn);
             case ON_RAMP_U_TURN_RIGHT:
-                return mContext.getDrawable(R.drawable.direction_uturn);
+                return mContext.getDrawable(R.drawable.direction_uturn_right);
             case OFF_RAMP_SLIGHT_LEFT:
                 return mContext.getDrawable(R.drawable.direction_off_ramp_slight_left);
             case OFF_RAMP_SLIGHT_RIGHT:
@@ -145,7 +239,7 @@
             case ROUNDABOUT_ENTER_AND_EXIT_CW_SLIGHT_LEFT:
                 return mContext.getDrawable(R.drawable.direction_roundabout_slight_left);
             case ROUNDABOUT_ENTER_AND_EXIT_CW_U_TURN:
-                return mContext.getDrawable(R.drawable.direction_uturn);
+                return mContext.getDrawable(R.drawable.direction_uturn_right);
             case ROUNDABOUT_ENTER_AND_EXIT_CCW_SHARP_RIGHT:
                 return mContext.getDrawable(R.drawable.direction_roundabout_sharp_right);
             case ROUNDABOUT_ENTER_AND_EXIT_CCW_NORMAL_RIGHT:
diff --git a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/NavigationFragment.java b/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/NavigationFragment.java
index 1b61658..d35ba02 100644
--- a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/NavigationFragment.java
+++ b/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/NavigationFragment.java
@@ -31,8 +31,12 @@
 import android.view.SurfaceView;
 import android.view.View;
 import android.view.ViewGroup;
+import android.widget.ProgressBar;
+import android.widget.TextView;
 
 import androidx.fragment.app.Fragment;
+import androidx.lifecycle.ViewModelProvider;
+import androidx.lifecycle.ViewModelProviders;
 
 public class NavigationFragment extends Fragment {
     private static final String TAG = "Cluster.NavFragment";
@@ -41,6 +45,10 @@
     private DisplayManager mDisplayManager;
     private Rect mUnobscuredBounds;
     private MainClusterActivity mMainClusterActivity;
+    private ClusterViewModel mViewModel;
+    private ProgressBar mProgressBar;
+    private TextView mMessage;
+
 
     // Static because we want to keep alive this virtual display when navigating through
     // ViewPager (this fragment gets dynamically destroyed and created)
@@ -109,6 +117,9 @@
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
                              Bundle savedInstanceState) {
         Log.i(TAG, "onCreateView");
+        ViewModelProvider provider = ViewModelProviders.of(requireActivity());
+        mViewModel = provider.get(ClusterViewModel.class);
+
         mDisplayManager = getActivity().getSystemService(DisplayManager.class);
         mDisplayManager.registerDisplayListener(mDisplayListener, new Handler());
 
@@ -127,8 +138,17 @@
                 Log.i(TAG, "surfaceChanged, holder: " + holder + ", size:" + width + "x" + height
                         + ", format:" + format);
 
-                //Create dummy unobscured area to report to navigation activity.
-                mUnobscuredBounds = new Rect(40, 0, width - 80, height - 40);
+                // Create dummy unobscured area to report to navigation activity.
+                int obscuredWidth = (int) getResources()
+                        .getDimension(R.dimen.speedometer_overlap_width);
+                int obscuredHeight = (int) getResources()
+                        .getDimension(R.dimen.navigation_gradient_height);
+                mUnobscuredBounds = new Rect(
+                        obscuredWidth,          /* left: size of gauge */
+                        obscuredHeight,         /* top: gradient */
+                        width - obscuredWidth,  /* right: size of the display - size of gauge */
+                        height - obscuredHeight /* bottom: size of display - gradient */
+                );
 
                 if (mVirtualDisplay == null) {
                     mVirtualDisplay = createVirtualDisplay(holder.getSurface(), width, height);
@@ -145,6 +165,18 @@
                 mVirtualDisplay.setSurface(null);
             }
         });
+        mProgressBar = root.findViewById(R.id.progress_bar);
+        mMessage = root.findViewById(R.id.message);
+
+        mViewModel.getNavigationActivityState().observe(this, state -> {
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "State: " + state);
+            }
+            mProgressBar.setVisibility(state == ClusterViewModel.NavigationActivityState.LOADING
+                    ? View.VISIBLE : View.INVISIBLE);
+            mMessage.setVisibility(state == ClusterViewModel.NavigationActivityState.NOT_SELECTED
+                    ? View.VISIBLE : View.INVISIBLE);
+        });
 
         return root;
     }
diff --git a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/NetworkedVirtualDisplay.java b/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/NetworkedVirtualDisplay.java
index a9c76a3..871d93f 100644
--- a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/NetworkedVirtualDisplay.java
+++ b/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/NetworkedVirtualDisplay.java
@@ -38,6 +38,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.io.RandomAccessFile;
 import java.net.ServerSocket;
 import java.net.Socket;
 import java.nio.ByteBuffer;
@@ -46,10 +47,10 @@
 /**
  * This class encapsulates all work related to managing networked virtual display.
  * <p>
- * It opens server socket and listens on port {@code PORT} for incoming connections. Once connection
- * is established it creates virtual display and media encoder and starts streaming video to that
- * socket.  If the receiving part is disconnected, it will keep port open and virtual display won't
- * be destroyed.
+ * It opens a socket and listens on port {@code PORT} for connections, or the emulator pipe. Once
+ * connection is established it creates virtual display and media encoder and starts streaming video
+ * to that socket.  If the receiving part is disconnected, it will keep port open and virtual
+ * display won't be destroyed.
  */
 public class NetworkedVirtualDisplay {
     private static final String TAG = "Cluster." + NetworkedVirtualDisplay.class.getSimpleName();
@@ -61,21 +62,29 @@
     private final int mHeight;
     private final int mDpi;
 
-    private static final int PORT = 5151;
     private static final int FPS = 25;
     private static final int BITRATE = 6144000;
     private static final String MEDIA_FORMAT_MIMETYPE = MediaFormat.MIMETYPE_VIDEO_AVC;
 
-    private static final int MSG_START = 0;
-    private static final int MSG_STOP = 1;
-    private static final int MSG_RESUBMIT_FRAME = 2;
+    public static final int MSG_START = 0;
+    public static final int MSG_STOP = 1;
+    public static final int MSG_SEND_FRAME = 2;
+
+    private static final String PIPE_NAME = "pipe:qemud:carCluster";
+    private static final String PIPE_DEVICE = "/dev/qemu_pipe";
+
+    // Constants shared with emulator in car-cluster-widget.cpp
+    public static final int PIPE_START = 1;
+    public static final int PIPE_STOP = 2;
+
+    private static final int PORT = 5151;
+
+    private SenderThread mActiveThread;
+    private HandlerThread mBroadcastThread = new HandlerThread("BroadcastThread");
 
     private VirtualDisplay mVirtualDisplay;
     private MediaCodec mVideoEncoder;
-    private HandlerThread mThread = new HandlerThread("NetworkThread");
     private Handler mHandler;
-    private ServerSocket mServerSocket;
-    private OutputStream mOutputStream;
     private byte[] mBuffer = null;
     private int mLastFrameLength = 0;
 
@@ -120,31 +129,31 @@
      * @throws IllegalStateException thrown if networked display already started
      */
     public String start() {
-        if (mThread.isAlive()) {
+        if (mBroadcastThread.isAlive()) {
             throw new IllegalStateException("Already started");
         }
-        mThread.start();
-        mHandler = new NetworkThreadHandler(mThread.getLooper());
-        mHandler.sendMessage(Message.obtain(mHandler, MSG_START));
 
+        mBroadcastThread.start();
+        mHandler = new BroadcastThreadHandler(mBroadcastThread.getLooper());
+        mHandler.sendMessage(Message.obtain(mHandler, MSG_START));
         return getDisplayName();
     }
 
     public void release() {
-        stopCasting();
+        mHandler.sendMessage(Message.obtain(mHandler, MSG_STOP));
+        mBroadcastThread.quitSafely();
 
         if (mVirtualDisplay != null) {
+            mVirtualDisplay.setSurface(null);
             mVirtualDisplay.release();
             mVirtualDisplay = null;
         }
-        mThread.quit();
     }
 
     private String getDisplayName() {
         return "Cluster-" + mUniqueId;
     }
 
-
     private VirtualDisplay createVirtualDisplay() {
         Log.i(TAG, "createVirtualDisplay " + mWidth + "x" + mHeight +"@" + mDpi);
         return mDisplayManager.createVirtualDisplay(getDisplayName(), mWidth, mHeight, mDpi,
@@ -157,14 +166,18 @@
 
     private void startCasting(Handler handler) {
         Log.i(TAG, "Start casting...");
+        if (mVideoEncoder != null) {
+            Log.i(TAG, "Already started casting");
+            return;
+        }
         mVideoEncoder = createVideoStream(handler);
 
         if (mVirtualDisplay == null) {
             mVirtualDisplay = createVirtualDisplay();
         }
+
         mVirtualDisplay.setSurface(mVideoEncoder.createInputSurface());
         mVideoEncoder.start();
-
         Log.i(TAG, "Video encoder started");
     }
 
@@ -194,6 +207,8 @@
             public void onError(@NonNull MediaCodec codec, @NonNull CodecException e) {
                 Log.e(TAG, "onError, codec: " + codec, e);
                 mCounter.bufferErrors++;
+                stopCasting();
+                startCasting(handler);
             }
 
             @Override
@@ -209,7 +224,7 @@
     }
 
     private void doOutputBufferAvailable(int index, @NonNull BufferInfo info) {
-        mHandler.removeMessages(MSG_RESUBMIT_FRAME);
+        mHandler.removeMessages(MSG_SEND_FRAME);
 
         ByteBuffer encodedData = mVideoEncoder.getOutputBuffer(index);
         if (encodedData == null) {
@@ -227,61 +242,43 @@
             encodedData.get(mBuffer, 0, mLastFrameLength);
             mVideoEncoder.releaseOutputBuffer(index, false);
 
-            sendFrame(mBuffer, mLastFrameLength);
-
-            // If nothing happens in Virtual Display we won't receive new frames. If we won't keep
-            // sending frames it could be a problem for the receiver because it needs certain
-            // number of frames in order to start decoding.
-            scheduleResendingLastFrame(1000 / FPS);
+            // Send this frame asynchronously (avoiding blocking on the socket). We might miss
+            // frames if the consumer is not fast enough, but this is acceptable.
+            sendFrameAsync(0);
         } else {
             Log.e(TAG, "Skipping empty buffer");
             mVideoEncoder.releaseOutputBuffer(index, false);
         }
     }
 
-    private void scheduleResendingLastFrame(long delayMs) {
-        Message msg = mHandler.obtainMessage(MSG_RESUBMIT_FRAME);
+    private void sendFrameAsync(long delayMs) {
+        Message msg = mHandler.obtainMessage(MSG_SEND_FRAME);
         mHandler.sendMessageDelayed(msg, delayMs);
     }
 
     private void sendFrame(byte[] buf, int len) {
-        try {
-            if (mOutputStream != null) {
-                mOutputStream.write(buf, 0, len);
-            }
-        } catch (IOException e) {
-            mCounter.clientsDisconnected++;
-            mOutputStream = null;
-            Log.e(TAG, "Failed to write data to socket, restart casting", e);
-            restart();
+        if (mActiveThread != null) {
+            mActiveThread.send(buf, len);
         }
     }
 
     private void stopCasting() {
         Log.i(TAG, "Stopping casting...");
-        if (mServerSocket != null) {
-            try {
-                mServerSocket.close();
-            } catch (IOException e) {
-                Log.w(TAG, "Failed to close server socket, ignoring", e);
-            }
-            mServerSocket = null;
-        }
 
         if (mVirtualDisplay != null) {
-            // We do not want to destroy virtual display (as it will also destroy all the
-            // activities on that display, instead we will turn off the display by setting
-            // a null surface.
             Surface surface = mVirtualDisplay.getSurface();
             if (surface != null) surface.release();
-            mVirtualDisplay.setSurface(null);
         }
 
         if (mVideoEncoder != null) {
             // Releasing encoder as stop/start didn't work well (couldn't create or reuse input
             // surface).
-            mVideoEncoder.stop();
-            mVideoEncoder.release();
+            try {
+                mVideoEncoder.stop();
+                mVideoEncoder.release();
+            } catch (IllegalStateException e) {
+                // do nothing, already released
+            }
             mVideoEncoder = null;
         }
         Log.i(TAG, "Casting stopped");
@@ -290,14 +287,17 @@
     private synchronized void restart() {
         // This method could be called from different threads when receiver has disconnected.
         if (mHandler.hasMessages(MSG_START)) return;
-
         mHandler.sendMessage(Message.obtain(mHandler, MSG_STOP));
         mHandler.sendMessage(Message.obtain(mHandler, MSG_START));
     }
 
-    private class NetworkThreadHandler extends Handler {
+    private class BroadcastThreadHandler extends Handler {
+        private static final int MAX_FAIL_COUNT = 10;
+        private int mFailConnectCounter;
+        private SocketThread mSocketThread;
+        private PipeThread mPipeThread;
 
-        NetworkThreadHandler(Looper looper) {
+        BroadcastThreadHandler(Looper looper) {
             super(looper);
         }
 
@@ -305,34 +305,102 @@
         public void handleMessage(Message msg) {
             switch (msg.what) {
                 case MSG_START:
-                    if (mServerSocket == null) {
-                        mServerSocket = openServerSocket();
+                    Log.i(TAG, "Received start message");
+                    // Failure to connect to either pipe or network returns null
+                    if (mActiveThread == null) {
+                        mActiveThread = tryPipeConnect();
                     }
-                    Log.i(TAG, "Server socket opened");
-
-                    mOutputStream = waitForReceiver(mServerSocket);
-                    if (mOutputStream == null) {
-                        sendMessage(Message.obtain(this, MSG_START));
+                    if (mActiveThread == null) {
+                        mActiveThread = tryNetworkConnect();
+                    }
+                    if (mActiveThread == null) {
+                        // When failed attempt limit is reached, clean up and quit this thread.
+                        mFailConnectCounter++;
+                        if (mFailConnectCounter >= MAX_FAIL_COUNT) {
+                            Log.e(TAG, "Too many failed connection attempts; aborting");
+                            release();
+                            throw new RuntimeException("Abort after failed connection attempts");
+                        }
+                        mHandler.sendMessage(Message.obtain(mHandler, MSG_START));
                         break;
                     }
+                    mFailConnectCounter = 0;
                     mCounter.clientsConnected++;
-
+                    mActiveThread.start();
                     startCasting(this);
                     break;
 
                 case MSG_STOP:
+                    Log.i(TAG, "Received stop message");
                     stopCasting();
+                    mCounter.clientsDisconnected++;
+                    if (mActiveThread != null) {
+                        mActiveThread.close();
+                        try {
+                            mActiveThread.join();
+                        } catch (InterruptedException e) {
+                            Log.e(TAG, "Waiting for active thread to close failed", e);
+                        }
+                        mActiveThread = null;
+                    }
                     break;
 
-                case MSG_RESUBMIT_FRAME:
-                    if (mServerSocket != null && mOutputStream != null) {
-                        sendFrame(mBuffer, mLastFrameLength);
+                case MSG_SEND_FRAME:
+                    if (mActiveThread == null) {
+                        // Stop the chaining signal if there's no client to send to
+                        break;
                     }
+                    sendFrame(mBuffer, mLastFrameLength);
                     // We will keep sending last frame every second as a heartbeat.
-                    scheduleResendingLastFrame(1000L);
+                    sendFrameAsync(1000L);
                     break;
             }
         }
+
+        // Returns null if can't establish pipe connection
+        // Otherwise returns the corresponding client thread
+        private PipeThread tryPipeConnect() {
+            try {
+                RandomAccessFile pipe = new RandomAccessFile(PIPE_DEVICE, "rw");
+                byte[] temp = new byte[PIPE_NAME.length() + 1];
+                temp[PIPE_NAME.length()] = 0;
+                System.arraycopy(PIPE_NAME.getBytes(), 0, temp, 0, PIPE_NAME.length());
+                pipe.write(temp);
+
+                // At this point, the pipe exists, so we will just wait for a start signal
+                // This is in case pipe still sends leftover stops from last instantiation
+                int signal = pipe.read();
+                while (signal != PIPE_START) {
+                    Log.i(TAG, "Received non-start signal: " + signal);
+                    signal = pipe.read();
+                }
+                return new PipeThread(mHandler, pipe);
+            } catch (IOException e) {
+                Log.e(TAG, "Failed to establish pipe connection", e);
+                return null;
+            }
+        }
+
+        // Returns null if can't establish network connection
+        // Otherwise returns the corresponding client thread
+        private SocketThread tryNetworkConnect() {
+            try {
+                ServerSocket serverSocket = new ServerSocket(PORT);
+                Log.i(TAG, "Server socket opened");
+                Socket socket = serverSocket.accept();
+                socket.setTcpNoDelay(true);
+                socket.setKeepAlive(true);
+                socket.setSoLinger(true, 0);
+
+                InputStream inputStream = socket.getInputStream();
+                OutputStream outputStream = socket.getOutputStream();
+
+                return new SocketThread(mHandler, serverSocket, inputStream, outputStream);
+            } catch (IOException e) {
+                Log.e(TAG, "Failed to establish network connection", e);
+                return null;
+            }
+        }
     }
 
     private static void configureVideoEncoder(MediaCodec codec, int width, int height) {
@@ -352,48 +420,12 @@
         codec.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
     }
 
-    private OutputStream waitForReceiver(ServerSocket serverSocket) {
-        try {
-            Log.i(TAG, "Listening for incoming connections on port: " + PORT);
-            Socket socket = serverSocket.accept();
-
-            Log.i(TAG, "Receiver connected: " + socket);
-            listenReceiverDisconnected(socket.getInputStream());
-
-            return socket.getOutputStream();
-        } catch (IOException e) {
-            Log.e(TAG, "Failed to accept connection");
-            return null;
-        }
-    }
-
-    private void listenReceiverDisconnected(InputStream inputStream) {
-        new Thread(() -> {
-            try {
-                if (inputStream.read() == -1) throw new IOException();
-            } catch (IOException e) {
-                Log.w(TAG, "Receiver has disconnected", e);
-            }
-            restart();
-        }).start();
-    }
-
-    private static ServerSocket openServerSocket() {
-        try {
-            return new ServerSocket(PORT);
-        } catch (IOException e) {
-            Log.e(TAG, "Failed to create server socket", e);
-            throw new RuntimeException(e);
-        }
-    }
-
     @Override
     public String toString() {
         return getClass() + "{"
-                + mServerSocket
-                +", receiver connected: " + (mOutputStream != null)
-                +", encoder: " + mVideoEncoder
-                +", virtualDisplay" + mVirtualDisplay
+                + ", receiver connected: " + (mActiveThread != null)
+                + ", encoder: " + mVideoEncoder
+                + ", virtualDisplay" + mVirtualDisplay
                 + "}";
     }
 
diff --git a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/PipeThread.java b/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/PipeThread.java
new file mode 100644
index 0000000..c96f482
--- /dev/null
+++ b/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/PipeThread.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2018 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 android.car.cluster.sample;
+import android.os.Handler;
+import android.util.Log;
+
+import java.io.IOException;
+import java.io.RandomAccessFile;
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+
+/**
+ * Thread that can send data to the emulator using a qemud service.
+ */
+public class PipeThread extends SenderThread {
+    private static final String TAG = "Cluster." + PipeThread.class.getSimpleName();
+
+    private RandomAccessFile mPipe;
+
+    /**
+     * Creates instance of pipe thread that can write to given pipe file.
+     *
+     * @param handler {@link Handler} used to message broadcaster.
+     * @param pipe {@link RandomAccessFile} file already connected to pipe.
+     */
+    PipeThread(Handler handler, RandomAccessFile pipe) {
+        super(handler);
+        mPipe = pipe;
+    }
+
+    public void run() {
+        try {
+            int signal = mPipe.read();
+            while (signal != NetworkedVirtualDisplay.PIPE_STOP) {
+                Log.i(TAG, "Received non-stop signal: " + signal);
+                signal = mPipe.read();
+            }
+            restart();
+        } catch (IOException e) {
+            Log.e(TAG, "Failed to read from pipe");
+            restart();
+        }
+    }
+
+    @Override
+    public void send(byte[] buf, int len) {
+        try {
+            // First sends the size prior to sending the data, since receiving side only sees
+            // the size of the buffer, which could be significant larger than the actual data.
+            mPipe.write(ByteBuffer.allocate(4)
+                          .order(ByteOrder.LITTLE_ENDIAN).putInt(len).array());
+            mPipe.write(buf);
+        } catch (IOException e) {
+            Log.e(TAG, "Write to pipe failed");
+            restart();
+        }
+    }
+
+    @Override
+    public void close() {
+        try {
+            mPipe.close();
+        } catch (IOException e) {
+            Log.e(TAG, "Failed to close pipe", e);
+        }
+    }
+}
+
diff --git a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/SampleClusterServiceImpl.java b/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/SampleClusterServiceImpl.java
deleted file mode 100644
index f8a5b06..0000000
--- a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/SampleClusterServiceImpl.java
+++ /dev/null
@@ -1,487 +0,0 @@
-/*
- * Copyright (C) 2017 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 android.car.cluster.sample;
-
-import static android.car.cluster.CarInstrumentClusterManager.CATEGORY_NAVIGATION;
-import static android.content.Intent.ACTION_USER_SWITCHED;
-import static android.content.Intent.ACTION_USER_UNLOCKED;
-import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
-
-import static java.lang.Integer.parseInt;
-
-import android.app.ActivityManager;
-import android.app.ActivityOptions;
-import android.car.CarNotConnectedException;
-import android.car.cluster.CarInstrumentClusterManager;
-import android.car.cluster.ClusterActivityState;
-import android.car.cluster.renderer.InstrumentClusterRenderingService;
-import android.car.cluster.renderer.NavigationRenderer;
-import android.car.navigation.CarNavigationInstrumentCluster;
-import android.content.ActivityNotFoundException;
-import android.content.BroadcastReceiver;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
-import android.graphics.Rect;
-import android.hardware.display.DisplayManager.DisplayListener;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.IBinder;
-import android.os.Message;
-import android.os.Messenger;
-import android.os.RemoteException;
-import android.os.SystemClock;
-import android.os.UserHandle;
-import android.provider.Settings;
-import android.provider.Settings.Global;
-import android.util.Log;
-import android.view.Display;
-import android.view.InputDevice;
-import android.view.KeyEvent;
-
-import androidx.car.cluster.navigation.NavigationState;
-import androidx.versionedparcelable.ParcelUtils;
-
-import java.io.FileDescriptor;
-import java.io.PrintWriter;
-import java.lang.ref.WeakReference;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * Implementation of {@link InstrumentClusterRenderingService} which renders an activity on a
- * virtual display that is transmitted to an external screen.
- */
-public class SampleClusterServiceImpl extends InstrumentClusterRenderingService {
-    private static final String TAG = "Cluster.SampleService";
-
-    private static final int NO_DISPLAY = -1;
-
-    static final String LOCAL_BINDING_ACTION = "local";
-    static final String NAV_STATE_BUNDLE_KEY = "navstate";
-    static final int NAV_STATE_EVENT_ID = 1;
-    static final int MSG_SET_ACTIVITY_LAUNCH_OPTIONS = 1;
-    static final int MSG_ON_NAVIGATION_STATE_CHANGED = 2;
-    static final int MSG_ON_KEY_EVENT = 3;
-    static final int MSG_REGISTER_CLIENT = 4;
-    static final int MSG_UNREGISTER_CLIENT = 5;
-    static final String MSG_KEY_CATEGORY = "category";
-    static final String MSG_KEY_ACTIVITY_DISPLAY_ID = "activity_display_id";
-    static final String MSG_KEY_ACTIVITY_STATE = "activity_state";
-    static final String MSG_KEY_KEY_EVENT = "key_event";
-
-    private static final int NAVIGATION_ACTIVITY_MAX_RETRIES = 10;
-    private static final int NAVIGATION_ACTIVITY_RETRY_INTERVAL_MS = 1000;
-
-    private List<Messenger> mClients = new ArrayList<>();
-    private ClusterDisplayProvider mDisplayProvider;
-    private int mDisplayId = NO_DISPLAY;
-    private UserReceiver mUserReceiver;
-    private final Handler mHandler = new Handler();
-    private final Runnable mRetryLaunchNavigationActivity = this::tryLaunchNavigationActivity;
-    private int mNavigationDisplayId = NO_DISPLAY;
-
-    private final DisplayListener mDisplayListener = new DisplayListener() {
-        @Override
-        public void onDisplayAdded(int displayId) {
-            Log.i(TAG, "Cluster display found, displayId: " + displayId);
-            mDisplayId = displayId;
-            tryLaunchActivity();
-        }
-
-        @Override
-        public void onDisplayRemoved(int displayId) {
-            Log.w(TAG, "Cluster display has been removed");
-        }
-
-        @Override
-        public void onDisplayChanged(int displayId) {
-
-        }
-    };
-
-    private static class UserReceiver extends BroadcastReceiver {
-        private WeakReference<SampleClusterServiceImpl> mService;
-
-        UserReceiver(SampleClusterServiceImpl service) {
-            mService = new WeakReference<>(service);
-        }
-
-        public void register(Context context) {
-            IntentFilter intentFilter =  new IntentFilter(ACTION_USER_UNLOCKED);
-            intentFilter.addAction(ACTION_USER_SWITCHED);
-            context.registerReceiver(this, intentFilter);
-        }
-
-        public void unregister(Context context) {
-            context.unregisterReceiver(this);
-        }
-
-        @Override
-        public void onReceive(Context context, Intent intent) {
-            SampleClusterServiceImpl service = mService.get();
-            Log.d(TAG, "Broadcast received: " + intent);
-            service.tryLaunchActivity();
-        }
-    }
-
-    private static class MessageHandler extends Handler {
-        private final WeakReference<SampleClusterServiceImpl> mService;
-
-        MessageHandler(SampleClusterServiceImpl service) {
-            mService = new WeakReference<>(service);
-        }
-
-        @Override
-        public void handleMessage(Message msg) {
-            Log.d(TAG, "handleMessage: " + msg.what);
-            try {
-                switch (msg.what) {
-                    case MSG_SET_ACTIVITY_LAUNCH_OPTIONS: {
-                        int displayId = msg.getData().getInt(MSG_KEY_ACTIVITY_DISPLAY_ID);
-                        Bundle state = msg.getData().getBundle(MSG_KEY_ACTIVITY_STATE);
-                        String category = msg.getData().getString(MSG_KEY_CATEGORY);
-                        ActivityOptions options = displayId != Display.INVALID_DISPLAY
-                                ? ActivityOptions.makeBasic().setLaunchDisplayId(displayId)
-                                : null;
-                        mService.get().setClusterActivityLaunchOptions(category, options);
-                        Log.d(TAG, String.format("activity options set: %s = %s (displayeId: %d)",
-                                category, options, options.getLaunchDisplayId()));
-                        mService.get().setClusterActivityState(category, state);
-                        Log.d(TAG, String.format("activity state set: %s = %s", category, state));
-
-                        // Starting a default navigation activity. This would take place until any
-                        // navigation app takes focus.
-                        mService.get().startNavigationActivity(displayId);
-                        break;
-                    }
-                    case MSG_REGISTER_CLIENT:
-                        mService.get().mClients.add(msg.replyTo);
-                        break;
-                    case MSG_UNREGISTER_CLIENT:
-                        mService.get().mClients.remove(msg.replyTo);
-                        break;
-                    default:
-                        super.handleMessage(msg);
-                }
-            } catch (CarNotConnectedException ex) {
-                Log.e(TAG, "Unable to execute message " + msg.what, ex);
-            }
-        }
-    }
-
-    @Override
-    public IBinder onBind(Intent intent) {
-        Log.d(TAG, "onBind, intent: " + intent);
-        return (LOCAL_BINDING_ACTION.equals(intent.getAction()))
-                ? new Messenger(new MessageHandler(this)).getBinder()
-                : super.onBind(intent);
-    }
-
-    @Override
-    public void onCreate() {
-        super.onCreate();
-        Log.d(TAG, "onCreate");
-        mDisplayProvider = new ClusterDisplayProvider(this, mDisplayListener);
-        mUserReceiver = new UserReceiver(this);
-        mUserReceiver.register(this);
-    }
-
-    private void tryLaunchActivity() {
-        int userHandle = ActivityManager.getCurrentUser();
-        if (userHandle == UserHandle.USER_SYSTEM || mDisplayId == NO_DISPLAY) {
-            Log.d(TAG, String.format("Launch activity ignored (user: %d, display: %d)", userHandle,
-                    mDisplayId));
-            // Not ready to launch yet.
-            return;
-        }
-        ActivityOptions options = ActivityOptions.makeBasic();
-        options.setLaunchDisplayId(mDisplayId);
-        Intent intent = new Intent(this, MainClusterActivity.class);
-        intent.setFlags(FLAG_ACTIVITY_NEW_TASK);
-        startActivityAsUser(intent, options.toBundle(), UserHandle.of(userHandle));
-        Log.i(TAG, String.format("launching main activity: %s (user: %d, display: %d)", intent,
-                userHandle, mDisplayId));
-    }
-
-    @Override
-    protected void onKeyEvent(KeyEvent keyEvent) {
-        Log.d(TAG, "onKeyEvent, keyEvent: " + keyEvent);
-        Bundle data = new Bundle();
-        data.putParcelable(MSG_KEY_KEY_EVENT, keyEvent);
-        broadcastClientMessage(MSG_ON_KEY_EVENT, data);
-    }
-
-    /**
-     * Broadcasts a message to all the registered service clients
-     *
-     * @param what event identifier
-     * @param data event data
-     */
-    private void broadcastClientMessage(int what, Bundle data) {
-        Log.d(TAG, "broadcast message " + what + " to " + mClients.size() + " clients");
-        for (int i = mClients.size() - 1; i >= 0; i--) {
-            Messenger client = mClients.get(i);
-            try {
-                Message msg = Message.obtain(null, what);
-                msg.setData(data);
-                client.send(msg);
-            } catch (RemoteException ex) {
-                Log.e(TAG, "Client " + i + " is dead", ex);
-                mClients.remove(i);
-            }
-        }
-    }
-
-    @Override
-    public void onDestroy() {
-        super.onDestroy();
-        Log.w(TAG, "onDestroy");
-        mUserReceiver.unregister(this);
-    }
-
-    @Override
-    protected NavigationRenderer getNavigationRenderer() {
-        NavigationRenderer navigationRenderer = new NavigationRenderer() {
-            @Override
-            public CarNavigationInstrumentCluster getNavigationProperties() {
-                CarNavigationInstrumentCluster config =
-                        CarNavigationInstrumentCluster.createCluster(1000);
-                Log.d(TAG, "getNavigationProperties, returns: " + config);
-                return config;
-            }
-
-            @Override
-            public void onEvent(int eventType, Bundle bundle) {
-                try {
-                    StringBuilder bundleSummary = new StringBuilder();
-                    if (eventType == NAV_STATE_EVENT_ID) {
-                        bundle.setClassLoader(ParcelUtils.class.getClassLoader());
-                        NavigationState navState = NavigationState
-                                .fromParcelable(bundle.getParcelable(NAV_STATE_BUNDLE_KEY));
-                        bundleSummary.append(navState.toString());
-
-                        // Update clients
-                        broadcastClientMessage(MSG_ON_NAVIGATION_STATE_CHANGED, bundle);
-                    } else {
-                        for (String key : bundle.keySet()) {
-                            bundleSummary.append(key);
-                            bundleSummary.append("=");
-                            bundleSummary.append(bundle.get(key));
-                            bundleSummary.append(" ");
-                        }
-                    }
-                    Log.d(TAG, "onEvent(" + eventType + ", " + bundleSummary + ")");
-                } catch (Exception e) {
-                    Log.e(TAG, "Error parsing event data (" + eventType + ", " + bundle + ")", e);
-                    bundle.putParcelable(NAV_STATE_BUNDLE_KEY, new NavigationState.Builder().build()
-                            .toParcelable());
-                    broadcastClientMessage(MSG_ON_NAVIGATION_STATE_CHANGED, bundle);
-                }
-            }
-        };
-
-        Log.i(TAG, "createNavigationRenderer, returns: " + navigationRenderer);
-        return navigationRenderer;
-    }
-
-    @Override
-    protected void dump(FileDescriptor fd, PrintWriter writer, String[] args) {
-        if (args != null && args.length > 0) {
-            execShellCommand(args);
-        } else {
-
-            if (args == null || args.length == 0) {
-                writer.println("* dump " + getClass().getCanonicalName() + " *");
-                writer.println("DisplayProvider: " + mDisplayProvider);
-            }
-        }
-    }
-
-    private void emulateKeyEvent(int keyCode) {
-        Log.i(TAG, "emulateKeyEvent, keyCode: " + keyCode);
-        long downTime = SystemClock.uptimeMillis();
-        long eventTime = SystemClock.uptimeMillis();
-        KeyEvent event = obtainKeyEvent(keyCode, downTime, eventTime, KeyEvent.ACTION_DOWN);
-        onKeyEvent(event);
-
-        eventTime = SystemClock.uptimeMillis();
-        event = obtainKeyEvent(keyCode, downTime, eventTime, KeyEvent.ACTION_UP);
-        onKeyEvent(event);
-    }
-
-    private KeyEvent obtainKeyEvent(int keyCode, long downTime, long eventTime, int action) {
-        int scanCode = 0;
-        if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {
-            scanCode = 108;
-        } else if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {
-            scanCode = 106;
-        }
-        return KeyEvent.obtain(
-                    downTime,
-                    eventTime,
-                    action,
-                    keyCode,
-                    0 /* repeat */,
-                    0 /* meta state */,
-                    0 /* deviceId*/,
-                    scanCode /* scancode */,
-                    KeyEvent.FLAG_FROM_SYSTEM /* flags */,
-                    InputDevice.SOURCE_KEYBOARD,
-                    null /* characters */);
-    }
-
-    private void execShellCommand(String[] args) {
-        Log.i(TAG, "execShellCommand, args: " + Arrays.toString(args));
-
-        String command = args[0];
-
-        switch (command) {
-            case "injectKey": {
-                if (args.length > 1) {
-                    emulateKeyEvent(parseInt(args[1]));
-                } else {
-                    Log.i(TAG, "Not enough arguments");
-                }
-                break;
-            }
-            case "destroyOverlayDisplay": {
-                Settings.Global.putString(getContentResolver(),
-                    Global.OVERLAY_DISPLAY_DEVICES, "");
-                break;
-            }
-
-            case "createOverlayDisplay": {
-                if (args.length > 1) {
-                    Settings.Global.putString(getContentResolver(),
-                            Global.OVERLAY_DISPLAY_DEVICES, args[1]);
-                } else {
-                    Log.i(TAG, "Not enough arguments, expected 2");
-                }
-                break;
-            }
-
-            case "setUnobscuredArea": {
-                if (args.length > 5) {
-                    Rect unobscuredArea = new Rect(parseInt(args[2]), parseInt(args[3]),
-                            parseInt(args[4]), parseInt(args[5]));
-                    try {
-                        setClusterActivityState(args[1],
-                                ClusterActivityState.create(true, unobscuredArea).toBundle());
-                    } catch (CarNotConnectedException e) {
-                        Log.i(TAG, "Failed to set activity state.", e);
-                    }
-                } else {
-                    Log.i(TAG, "wrong format, expected: category left top right bottom");
-                }
-            }
-        }
-    }
-
-    private void startNavigationActivity(int displayId) {
-        mNavigationDisplayId = displayId;
-        tryLaunchNavigationActivity();
-    }
-
-    /**
-     * Tries to start a default navigation activity in the cluster. During system initialization
-     * launching user activities might fail due the system not being ready or {@link PackageManager}
-     * not being able to resolve the implicit intent. It is also possible that the system doesn't
-     * have a default navigation activity selected yet.
-     */
-    private void tryLaunchNavigationActivity() {
-        mHandler.removeCallbacks(mRetryLaunchNavigationActivity);
-
-        Intent intent = getNavigationActivityIntent();
-
-        try {
-            if (intent == null) {
-                throw new ActivityNotFoundException();
-            }
-            Log.d(TAG, "Launching: " + intent + " on display: " + mNavigationDisplayId);
-            Bundle activityOptions = ActivityOptions.makeBasic()
-                    .setLaunchDisplayId(mNavigationDisplayId)
-                    .toBundle();
-
-            startActivityAsUser(intent, activityOptions, UserHandle.CURRENT);
-        } catch (ActivityNotFoundException ex) {
-            // Some activities might not be available right on startup. We will retry.
-            mHandler.postDelayed(mRetryLaunchNavigationActivity,
-                    NAVIGATION_ACTIVITY_RETRY_INTERVAL_MS);
-        } catch (Exception ex) {
-            Log.e(TAG, "Unable to start navigation activity: " + intent, ex);
-        }
-    }
-
-    /**
-     * Returns a default navigation activity to show in the cluster.
-     * In the current implementation we search for an activity with the
-     * {@link CarInstrumentClusterManager#CATEGORY_NAVIGATION} category from the same navigation app
-     * selected from CarLauncher (see CarLauncher#getMapsIntent()).
-     * Alternatively, other implementations could
-     * <ul>
-     * <li>Read this package from a resource (having a OEM default activity to show)
-     * <li>Let the user select one from settings.
-     * </ul>
-     */
-    private Intent getNavigationActivityIntent() {
-        PackageManager pm = getPackageManager();
-        int userId = ActivityManager.getCurrentUser();
-
-        // Get currently selected navigation app.
-        Intent intent = Intent.makeMainSelectorActivity(Intent.ACTION_MAIN,
-                Intent.CATEGORY_APP_MAPS);
-        ResolveInfo navigationApp = pm.resolveActivityAsUser(intent,
-                PackageManager.MATCH_DEFAULT_ONLY, userId);
-
-        // Get all possible cluster activities
-        intent = new Intent(Intent.ACTION_MAIN).addCategory(CATEGORY_NAVIGATION);
-        List<ResolveInfo> candidates = pm.queryIntentActivitiesAsUser(intent, 0, userId);
-
-        // If there is a select navigation app, try finding a matching auxiliary navigation activity
-        if (navigationApp != null) {
-            Log.d(TAG, "Current navigation app: " + navigationApp);
-            for (ResolveInfo candidate : candidates) {
-                Log.d(TAG, "Candidate: " + candidate);
-                if (candidate.activityInfo.packageName.equals(navigationApp.activityInfo
-                        .packageName)) {
-                    Log.d(TAG, "Found activity: " + candidate);
-                    intent.setPackage(navigationApp.activityInfo.packageName);
-                    intent.setComponent(new ComponentName(candidate.activityInfo.packageName,
-                            candidate.activityInfo.name));
-                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
-                            | Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
-                    return intent;
-                }
-            }
-        } else {
-            Log.d(TAG, "NO CURRENT ACTIVITY");
-            for (ResolveInfo candidate : candidates) {
-                Log.d(TAG, "Candidate: " + candidate);
-            }
-        }
-
-        // During initialization implicit intents might not provided a result. We will just
-        // retry until we find one, or we exhaust the retries.
-        Log.d(TAG, "No default activity found (it might not be available yet).");
-        return null;
-    }
-
-}
diff --git a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/SenderThread.java b/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/SenderThread.java
new file mode 100644
index 0000000..2c7f0d6
--- /dev/null
+++ b/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/SenderThread.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2018 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 android.car.cluster.sample;
+import android.os.Handler;
+import android.os.Message;
+
+/**
+ * This class serves as a template for sending to specific clients of the broadcaster.
+ */
+public abstract class SenderThread extends Thread {
+    private Handler mHandler;
+
+    SenderThread(Handler handler) {
+        mHandler = handler;
+    }
+
+    abstract void send(byte[] buf, int len);
+    abstract void close();
+
+    /**
+     * Tells the broadcasting thread to stop and close everything in progress, and start over again.
+     * It will kill the current instance of this thread, and produce a new one.
+     */
+    void restart() {
+        if (mHandler.hasMessages(NetworkedVirtualDisplay.MSG_START)) return;
+        mHandler.sendMessage(Message.obtain(mHandler, NetworkedVirtualDisplay.MSG_STOP));
+        mHandler.sendMessage(Message.obtain(mHandler, NetworkedVirtualDisplay.MSG_START));
+    }
+}
diff --git a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/SocketThread.java b/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/SocketThread.java
new file mode 100644
index 0000000..a5215b0
--- /dev/null
+++ b/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/SocketThread.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2018 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 android.car.cluster.sample;
+import android.os.Handler;
+import android.util.Log;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.ServerSocket;
+
+/**
+ * The thread that will send data on an opened socket.
+ */
+public class SocketThread extends SenderThread {
+    private static final String TAG = "Cluster." + SocketThread.class.getSimpleName();
+    private ServerSocket mServerSocket;
+    private OutputStream mOutputStream;
+    private InputStream mInputStream;
+
+    /**
+     * Create instance of thread that can write to given open socket.
+     *
+     * @param handler {@link Handler} used to message the broadcaster.
+     * @param serverSocket {@link ServerSocket} should be already opened.
+     * @param inputStream {@link InputStream} corresponding to opened socket.
+     * @param outputStream {@link OutputStream} corresponding to opened socket.
+     */
+    SocketThread(Handler handler, ServerSocket serverSocket, InputStream inputStream,
+                    OutputStream outputStream) {
+        super(handler);
+        mServerSocket = serverSocket;
+        mInputStream = inputStream;
+        mOutputStream = outputStream;
+    }
+
+    public void run() {
+        try {
+            // This read should block until something disconnects (or something
+            // similar) which should cause an exception, in which case we should
+            // try to setup again and reconnect
+            mInputStream.read();
+        } catch (IOException e) {
+            Log.e(TAG, "Socket thread disconnected.");
+        }
+        restart();
+    }
+
+    @Override
+    public void send(byte[] buf, int len) {
+        try {
+            mOutputStream.write(buf, 0, len);
+        } catch (IOException e) {
+            Log.e(TAG, "Failed to write data to socket, retrying connection");
+            restart();
+        }
+    }
+
+    @Override
+    public void close() {
+        if (mServerSocket != null) {
+            try {
+                mServerSocket.close();
+            } catch (IOException e) {
+                Log.w(TAG, "Failed to close server socket, ignoring");
+            }
+            mServerSocket = null;
+        }
+        mInputStream = null;
+        mOutputStream = null;
+    }
+}
+
diff --git a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/sensors/Sensor.java b/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/sensors/Sensor.java
new file mode 100644
index 0000000..8f01cd7
--- /dev/null
+++ b/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/sensors/Sensor.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2018 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 android.car.cluster.sample.sensors;
+
+import android.car.VehiclePropertyType;
+import android.car.hardware.CarPropertyValue;
+
+import java.util.function.Function;
+
+/**
+ * Description of a car sensor. It can be used as identifier at
+ * {@link android.car.cluster.sample.ClusterViewModel#getSensor(Sensor)} to obtain a
+ * {@link androidx.lifecycle.LiveData} to track values of this sensor. The sensor description is
+ * used to process and decode the information reported by the car.
+ * <p>
+ * All instances of this class must be obtained from {@link Sensors}.
+ *
+ * @param <T> data type used by this sensor.
+ */
+public class Sensor<T> {
+    /** Name of the sensor (for debugging) */
+    public final String mName;
+    /** VHAL identifier of this sensor */
+    public final int mPropertyId;
+    /** VHAL area associated with this sensor (each area is reported as an independent sensor) */
+    public final int mAreaId;
+    /**
+     * Data type expected to be reported by the VHAL. If the values received don't match with the
+     * expected ones, we warn about it and ignore the value.
+     */
+    @VehiclePropertyType.Enum
+    public final int mExpectedPropertyType;
+    /** VHAL Area associated with this sensor. */
+    public final Function<CarPropertyValue<?>, T> mAdapter;
+
+    /**
+     * Creates a new sensor. Only {@link Sensors} should use this constructor.
+     */
+    Sensor(String name, int propertyId, int areaId, int expectedPropertyType,
+            Function<CarPropertyValue<?>, T> adapter) {
+        mName = name;
+        mPropertyId = propertyId;
+        mAreaId = areaId;
+        mExpectedPropertyType = expectedPropertyType;
+        mAdapter = adapter;
+    }
+
+    @Override
+    public String toString() {
+        return mName;
+    }
+}
diff --git a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/sensors/Sensors.java b/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/sensors/Sensors.java
new file mode 100644
index 0000000..6e49931
--- /dev/null
+++ b/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/sensors/Sensors.java
@@ -0,0 +1,144 @@
+/*
+ * Copyright (C) 2018 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 android.car.cluster.sample.sensors;
+
+import android.car.VehiclePropertyIds;
+import android.car.VehiclePropertyType;
+import android.car.hardware.CarPropertyValue;
+import android.car.hardware.CarSensorEvent;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.function.Function;
+
+/**
+ * The collection of all sensors supported by this application.
+ */
+public class Sensors {
+    /** Area identifier used for sensors corresponding to global VHAL properties */
+    public static final int GLOBAL_AREA_ID = -1;
+
+    private static Sensors sInstance;
+    private static List<Sensor<?>> sSensors = new ArrayList<>();
+    private Map<Integer, List<Sensor<?>>> mSensorsByPropertyId = new HashMap<>();
+
+    /** Possible values of the {@link #SENSOR_GEAR} sensor */
+    public enum Gear {
+        NEUTRAL,
+        REVERSE,
+        DRIVE,
+        PARK,
+    }
+
+    /** Fuel of the car, measured in millimeters */
+    public static final Sensor<Float> SENSOR_FUEL = registerSensor(
+            "Fuel", VehiclePropertyIds.FUEL_LEVEL, GLOBAL_AREA_ID, VehiclePropertyType.FLOAT,
+            value -> (Float) value.getValue());
+    /** Fuel capacity of the car, measured in millimeters */
+    public static final Sensor<Float> SENSOR_FUEL_CAPACITY = registerSensor(
+            "Fuel Capacity", VehiclePropertyIds.INFO_FUEL_CAPACITY, GLOBAL_AREA_ID,
+            VehiclePropertyType.FLOAT,
+            value -> (Float) value.getValue());
+    /** RPMs */
+    public static final Sensor<Float> SENSOR_RPM = registerSensor(
+            "RPM", VehiclePropertyIds.ENGINE_RPM, GLOBAL_AREA_ID,
+            VehiclePropertyType.FLOAT,
+            value -> (Float) value.getValue());
+    /** Fuel range in kilometers */
+    public static final Sensor<Float> SENSOR_FUEL_RANGE = registerSensor(
+            "Fuel Range", VehiclePropertyIds.RANGE_REMAINING, GLOBAL_AREA_ID,
+            VehiclePropertyType.FLOAT,
+            value -> (Float) value.getValue());
+    /** Speed in kph */
+    public static final Sensor<Float> SENSOR_SPEED = registerSensor(
+            "Speed", VehiclePropertyIds.PERF_VEHICLE_SPEED, GLOBAL_AREA_ID,
+            VehiclePropertyType.FLOAT,
+            value -> (Float) value.getValue());
+    /** Current gear of the car */
+    public static final Sensor<Gear> SENSOR_GEAR = registerSensor(
+            "Gear", VehiclePropertyIds.GEAR_SELECTION, GLOBAL_AREA_ID, VehiclePropertyType.INT32,
+            value -> {
+                if (value == null) {
+                    return null;
+                }
+                Integer gear = (Integer) value.getValue();
+                if ((gear & CarSensorEvent.GEAR_REVERSE) != 0) {
+                    return Gear.REVERSE;
+                } else if ((gear & CarSensorEvent.GEAR_NEUTRAL) != 0) {
+                    return Gear.NEUTRAL;
+                } else if ((gear & CarSensorEvent.GEAR_DRIVE) != 0) {
+                    return Gear.DRIVE;
+                } else if ((gear & CarSensorEvent.GEAR_PARK) != 0) {
+                    return Gear.PARK;
+                } else {
+                    return null;
+                }
+            });
+
+    private static <T> Sensor<T> registerSensor(String propertyName, int propertyId, int areaId,
+            int expectedPropertyType, Function<CarPropertyValue<?>, T> adapter) {
+        Sensor<T> sensor = new Sensor<>(propertyName, propertyId, areaId, expectedPropertyType,
+                adapter);
+        sSensors.add(sensor);
+        return sensor;
+    }
+
+    /**
+     * Obtains the singleton instance of this class
+     */
+    public static Sensors getInstance() {
+        if (sInstance == null) {
+            sInstance = new Sensors();
+        }
+        return sInstance;
+    }
+
+    private Sensors() {
+        initializeSensorsMap();
+    }
+
+    private void initializeSensorsMap() {
+        for (Sensor<?> sensorId : getSensors()) {
+            mSensorsByPropertyId
+                    .computeIfAbsent(sensorId.mPropertyId, (id) -> new ArrayList<>())
+                    .add(sensorId);
+        }
+    }
+
+    /**
+     * Returns all sensors.
+     */
+    public List<Sensor<?>> getSensors() {
+        return sSensors;
+    }
+
+    /**
+     * Returns all sensors associated to the given VHAL property id.
+     */
+    public List<Sensor<?>> getSensorsForPropertyId(int propertyId) {
+        return mSensorsByPropertyId.get(propertyId);
+    }
+
+    /**
+     * Returns all property ids we care about.
+     */
+    public Set<Integer> getPropertyIds() {
+        return mSensorsByPropertyId.keySet();
+    }
+}
diff --git a/tests/EmbeddedKitchenSinkApp/Android.mk b/tests/EmbeddedKitchenSinkApp/Android.mk
index e6f457e..db59ddf 100644
--- a/tests/EmbeddedKitchenSinkApp/Android.mk
+++ b/tests/EmbeddedKitchenSinkApp/Android.mk
@@ -43,7 +43,6 @@
 LOCAL_STATIC_ANDROID_LIBRARIES += \
     car-service-lib-for-test \
     car-apps-common \
-    androidx.car_car \
     androidx.car_car-cluster
 
 LOCAL_STATIC_JAVA_LIBRARIES += \
diff --git a/tests/EmbeddedKitchenSinkApp/AndroidManifest.xml b/tests/EmbeddedKitchenSinkApp/AndroidManifest.xml
index c400bd8..398ae94 100644
--- a/tests/EmbeddedKitchenSinkApp/AndroidManifest.xml
+++ b/tests/EmbeddedKitchenSinkApp/AndroidManifest.xml
@@ -33,6 +33,7 @@
     <uses-permission android:name="android.car.permission.CAR_CONTROL_AUDIO_VOLUME"/>
     <uses-permission android:name="android.car.permission.VEHICLE_DYNAMICS_STATE"/>
     <uses-permission android:name="android.car.permission.CAR_DISPLAY_IN_CLUSTER"/>
+    <uses-permission android:name="android.car.permission.CAR_INSTRUMENT_CLUSTER_CONTROL"/>
     <uses-permission android:name="android.car.permission.STORAGE_MONITORING" />
     <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
     <uses-permission android:name="android.permission.MANAGE_USB" />
@@ -45,6 +46,7 @@
     <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
     <uses-permission android:name="android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS" />
     <uses-permission android:name="android.permission.INJECT_EVENTS" />
+    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
 
     <application android:label="@string/app_title"
         android:icon="@drawable/ic_launcher">
@@ -54,7 +56,8 @@
         <!-- This is for embedded mode. -->
         <activity android:name=".KitchenSinkActivity"
             android:theme="@style/KitchenSinkActivityTheme"
-            android:label="@string/app_title">
+            android:label="@string/app_title"
+            android:launchMode="singleTask">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
                 <category android:name="android.intent.category.LAUNCHER" />
@@ -92,15 +95,14 @@
                   android:theme="@android:style/Theme.Material.Light.Dialog"
                   android:launchMode="singleTop">
         </activity>
+
         <activity android:name=".cluster.FakeClusterNavigationActivity"
                   android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
                   android:launchMode="singleInstance"
                   android:resizeableActivity="true"
-                  android:allowEmbedded="true"
-                  android:permission="android.car.permission.CAR_INSTRUMENT_CLUSTER_CONTROL">
-            <intent-filter android:priority="-1">
+                  android:allowEmbedded="true">
+            <intent-filter>
                 <action android:name="android.intent.action.MAIN"/>
-                <category android:name="android.intent.category.DEFAULT"/>
                 <category android:name="android.car.cluster.NAVIGATION"/>
             </intent-filter>
         </activity>
@@ -108,10 +110,17 @@
         <activity android:name=".activityview.ActivityViewTestFragment"/>
 
         <!-- temporary solution until b/68882625 is fixed. -->
-        <receiver android:name=".touchsound.DisableTouchSoundOnBoot"  android:exported="true">
+        <receiver android:name=".touchsound.DisableTouchSoundOnBoot" android:exported="true">
             <intent-filter>
                 <action android:name="android.intent.action.BOOT_COMPLETED"/>
             </intent-filter>
         </receiver>
+
+        <!-- Content provider for images -->
+        <provider android:name=".cluster.ClusterContentProvider"
+                  android:authorities="com.google.android.car.kitchensink.cluster.clustercontentprovider"
+                  android:grantUriPermissions="true"
+                  android:exported="true" />
+
     </application>
 </manifest>
diff --git a/tests/EmbeddedKitchenSinkApp/res/drawable/avatar1.png b/tests/EmbeddedKitchenSinkApp/res/drawable/avatar1.png
new file mode 100644
index 0000000..94e4cf1
--- /dev/null
+++ b/tests/EmbeddedKitchenSinkApp/res/drawable/avatar1.png
Binary files differ
diff --git a/tests/EmbeddedKitchenSinkApp/res/drawable/avatar2.png b/tests/EmbeddedKitchenSinkApp/res/drawable/avatar2.png
new file mode 100644
index 0000000..10021f2
--- /dev/null
+++ b/tests/EmbeddedKitchenSinkApp/res/drawable/avatar2.png
Binary files differ
diff --git a/tests/EmbeddedKitchenSinkApp/res/drawable/ic_check_box_checked.xml b/tests/EmbeddedKitchenSinkApp/res/drawable/ic_check_box_checked.xml
index d64d4fc..0ef8e43 100644
--- a/tests/EmbeddedKitchenSinkApp/res/drawable/ic_check_box_checked.xml
+++ b/tests/EmbeddedKitchenSinkApp/res/drawable/ic_check_box_checked.xml
@@ -22,5 +22,5 @@
         android:viewportHeight="24.0">
     <path
         android:pathData="M19,3L5,3c-1.11,0 -2,0.9 -2,2v14c0,1.1 0.89,2 2,2h14c1.11,0 2,-0.9 2,-2L21,5c0,-1.1 -0.89,-2 -2,-2zM10,17l-5,-5 1.41,-1.41L10,14.17l7.59,-7.59L19,8l-9,9z"
-        android:fillColor="#000000"/>
+        android:fillColor="#FFFFFF"/>
 </vector>
diff --git a/tests/EmbeddedKitchenSinkApp/res/drawable/ic_check_box_unchecked.xml b/tests/EmbeddedKitchenSinkApp/res/drawable/ic_check_box_unchecked.xml
index 96246a3..b05cb48 100644
--- a/tests/EmbeddedKitchenSinkApp/res/drawable/ic_check_box_unchecked.xml
+++ b/tests/EmbeddedKitchenSinkApp/res/drawable/ic_check_box_unchecked.xml
@@ -22,5 +22,5 @@
         android:viewportHeight="24.0">
     <path
         android:pathData="M19,5v14H5V5h14m0,-2H5c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2V5c0,-1.1 -0.9,-2 -2,-2z"
-        android:fillColor="#000000"/>
+        android:fillColor="#FFFFFF"/>
 </vector>
diff --git a/tests/EmbeddedKitchenSinkApp/res/drawable/ic_voice_assistant_mic.xml b/tests/EmbeddedKitchenSinkApp/res/drawable/ic_voice_assistant_mic.xml
index 0468870..2171286 100644
--- a/tests/EmbeddedKitchenSinkApp/res/drawable/ic_voice_assistant_mic.xml
+++ b/tests/EmbeddedKitchenSinkApp/res/drawable/ic_voice_assistant_mic.xml
@@ -21,7 +21,7 @@
  android:viewportWidth="24"
  android:viewportHeight="24">
  <path
-  android:fillColor="#000000"
+  android:fillColor="#FFFFFF"
   android:pathData="M12 14c1.66 0 2.99-1.34 2.99-3L15 5c0-1.66-1.34-3-3-3S9 3.34 9 5v6c0 1.66 1.34 3
 3 3zm5.3-3c0 3-2.54 5.1-5.3 5.1S6.7 14 6.7 11H5c0 3.41 2.72 6.23 6
 6.72V21h2v-3.28c3.28-.48 6-3.3 6-6.72h-1.7z" />
diff --git a/tests/EmbeddedKitchenSinkApp/res/layout/connectivity_fragment.xml b/tests/EmbeddedKitchenSinkApp/res/layout/connectivity_fragment.xml
index 15422b1..dc2d01a 100644
--- a/tests/EmbeddedKitchenSinkApp/res/layout/connectivity_fragment.xml
+++ b/tests/EmbeddedKitchenSinkApp/res/layout/connectivity_fragment.xml
@@ -22,34 +22,161 @@
     <LinearLayout
             android:orientation="horizontal"
             android:layout_width="match_parent"
-            android:layout_height="wrap_content">
-        <ListView
-                android:id="@+id/networks"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content">
-        </ListView>
-    </LinearLayout>
-    <LinearLayout
-            android:orientation="horizontal"
-            android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_margin="4dp">
-        <Button android:id="@+id/networksRefresh"
+
+        <TextView
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:text="Refresh"/>
-        <Button android:id="@+id/networkRequestOemPaid"
+                android:layout_marginRight="20dp"
+                android:text="Wifi:" />
+
+        <Button android:id="@+id/startWifi"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:text="Request OEM-paid"/>
-        <Button android:id="@+id/networkRequestEth1"
+                android:layout_marginRight="5dp"
+                android:text="Start" />
+
+        <Button android:id="@+id/stopWifi"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:text="Request eth1"/>
-        <Button android:id="@+id/networkReleaseNetwork"
+                android:layout_marginRight="20dp"
+                android:text="Stop" />
+
+        <TextView
+                android:id="@+id/wifiStatusPolled"
                 android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:text="Release Request"/>
+                android:layout_height="wrap_content" />
     </LinearLayout>
 
-</LinearLayout>
\ No newline at end of file
+    <LinearLayout
+            android:orientation="horizontal"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_margin="4dp">
+
+        <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginRight="20dp"
+                android:text="Tethering:" />
+
+        <Button android:id="@+id/startTethering"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginRight="5dp"
+                android:text="Start" />
+
+        <Button android:id="@+id/stopTethering"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginRight="20dp"
+                android:text="Stop" />
+
+        <TextView
+                android:id="@+id/tetheringStatus"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginRight="5dp" />
+
+        <TextView
+                android:id="@+id/tetheringStatusPolled"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content" />
+    </LinearLayout>
+
+    <LinearLayout
+            android:orientation="horizontal"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_margin="4dp">
+
+        <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginRight="20dp"
+                android:text="LocalOnly:" />
+
+        <Button android:id="@+id/startLocalOnly"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginRight="5dp"
+                android:text="Start" />
+
+        <Button android:id="@+id/stopLocalOnly"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginRight="20dp"
+                android:text="Stop" />
+
+        <TextView
+                android:id="@+id/localOnlyStatus"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content" />
+    </LinearLayout>
+
+    <!-- List(s) of networks (right now only have view all, may do a search UI)
+    -->
+    <LinearLayout
+            android:orientation="vertical"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent">
+
+        <!-- Header for table -->
+        <LinearLayout
+                android:orientation="horizontal"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:paddingLeft="4dp"
+                android:background="#3C3F41"
+                android:weightSum="12">
+
+            <TextView
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:textSize="32sp"
+                android:textColor="#d4d4d4"
+                android:textStyle="bold"
+                android:text="Net ID">
+            </TextView>
+
+            <TextView
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="9"
+                android:textSize="32sp"
+                android:textColor="#d4d4d4"
+                android:textStyle="bold"
+                android:text="Details">
+            </TextView>
+
+            <TextView
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="2"
+                android:textSize="32sp"
+                android:textColor="#d4d4d4"
+                android:textStyle="bold"
+                android:text="Functions">
+            </TextView>
+
+        </LinearLayout>
+
+        <!-- Wrapped list view to implement swipe to refresh -->
+        <androidx.swiperefreshlayout.widget.SwipeRefreshLayout
+            android:id="@+id/refreshNetworksList"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content">
+
+            <!-- Filled in code with network_item.xml -->
+            <ListView
+                    android:id="@+id/networks"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content">
+            </ListView>
+
+        </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
+
+    </LinearLayout>
+</LinearLayout>
diff --git a/tests/EmbeddedKitchenSinkApp/res/layout/hvac_test.xml b/tests/EmbeddedKitchenSinkApp/res/layout/hvac_test.xml
index d525be8..e28f273 100644
--- a/tests/EmbeddedKitchenSinkApp/res/layout/hvac_test.xml
+++ b/tests/EmbeddedKitchenSinkApp/res/layout/hvac_test.xml
@@ -47,7 +47,8 @@
                 android:layout_weight="1"
                 android:textSize="@dimen/hvacTextSize"/>
         </LinearLayout>
-            <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+
+        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
             android:orientation="vertical"
             android:gravity="center"
             android:layout_height="match_parent"
@@ -59,7 +60,7 @@
                 android:id="@+id/btnDTempUp"
                 android:layout_height="@dimen/hvacBtnHeight"
                 android:layout_width ="250dp"
-                android:text="@string/hvac_tempUp"
+                android:text="@string/hvac_dTempUp"
                 android:textSize="@dimen/hvacTextSize"/>
 
             <TextView
@@ -74,7 +75,38 @@
                 android:id="@+id/btnDTempDn"
                 android:layout_height="@dimen/hvacBtnHeight"
                 android:layout_width ="250dp"
-                android:text="@string/hvac_tempDn"
+                android:text="@string/hvac_dTempDn"
+                android:textSize="@dimen/hvacTextSize"/>
+        </LinearLayout>
+
+        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+                      android:gravity="center"
+                      android:layout_height="match_parent"
+                      android:layout_weight="1"
+                      android:layout_width = "wrap_content"
+                      android:orientation="vertical">
+
+            <Button
+                android:clickable="false"
+                android:id="@+id/btnATempUp"
+                android:layout_height="@dimen/hvacBtnHeight"
+                android:layout_width ="250dp"
+                android:text="@string/hvac_aTempUp"
+                android:textSize="@dimen/hvacTextSize"/>
+
+            <TextView
+                android:gravity="center"
+                android:id="@+id/tvATemp"
+                android:layout_height="50dp"
+                android:layout_width ="250dp"
+                android:textSize="@dimen/hvacTextSize"/>
+
+            <Button
+                android:clickable="false"
+                android:id="@+id/btnATempDn"
+                android:layout_height="@dimen/hvacBtnHeight"
+                android:layout_width ="250dp"
+                android:text="@string/hvac_aTempDn"
                 android:textSize="@dimen/hvacTextSize"/>
         </LinearLayout>
 
@@ -87,6 +119,37 @@
 
             <Button
                 android:clickable="false"
+                android:id="@+id/btnPTempUp"
+                android:layout_height="@dimen/hvacBtnHeight"
+                android:layout_width ="250dp"
+                android:text="@string/hvac_pTempUp"
+                android:textSize="@dimen/hvacTextSize"/>
+
+            <TextView
+                android:gravity="center"
+                android:id="@+id/tvPTemp"
+                android:layout_height="50dp"
+                android:layout_width ="250dp"
+                android:textSize="@dimen/hvacTextSize"/>
+
+            <Button
+                android:clickable="false"
+                android:id="@+id/btnPTempDn"
+                android:layout_height="@dimen/hvacBtnHeight"
+                android:layout_width ="250dp"
+                android:text="@string/hvac_pTempDn"
+                android:textSize="@dimen/hvacTextSize"/>
+        </LinearLayout>
+
+        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+                      android:gravity="center"
+                      android:layout_height="match_parent"
+                      android:layout_weight="1"
+                      android:layout_width = "wrap_content"
+                      android:orientation="vertical">
+
+            <Button
+                android:clickable="false"
                 android:id="@+id/btnFanSpeedUp"
                 android:layout_height="@dimen/hvacBtnHeight"
                 android:layout_width ="250dp"
@@ -108,37 +171,6 @@
                 android:text="@string/hvac_fanSpeedDn"
                 android:textSize="@dimen/hvacTextSize"/>
         </LinearLayout>
-
-        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-            android:gravity="center"
-            android:layout_height="match_parent"
-            android:layout_weight="1"
-            android:layout_width = "wrap_content"
-            android:orientation="vertical">
-
-            <Button
-                android:clickable="false"
-                android:id="@+id/btnPTempUp"
-                android:layout_height="@dimen/hvacBtnHeight"
-                android:layout_width ="250dp"
-                android:text="@string/hvac_tempUp"
-                android:textSize="@dimen/hvacTextSize"/>
-
-            <TextView
-                android:gravity="center"
-                android:id="@+id/tvPTemp"
-                android:layout_height="50dp"
-                android:layout_width ="250dp"
-                android:textSize="@dimen/hvacTextSize"/>
-
-            <Button
-                android:clickable="false"
-                android:id="@+id/btnPTempDn"
-                android:layout_height="@dimen/hvacBtnHeight"
-                android:layout_width ="250dp"
-                android:text="@string/hvac_tempDn"
-                android:textSize="@dimen/hvacTextSize"/>
-        </LinearLayout>
     </LinearLayout>
     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
         android:layout_height="match_parent"
@@ -192,6 +224,16 @@
 
                 <ToggleButton
                     android:clickable="false"
+                    android:id="@+id/tbPower"
+                    android:layout_height="@dimen/hvacBtnHeight"
+                    android:layout_weight="1"
+                    android:layout_width ="0dp"
+                    android:textOff="@string/hvac_powerOff"
+                    android:textOn="@string/hvac_powerOn"
+                    android:textSize="@dimen/hvacTextSize"/>
+
+                <ToggleButton
+                    android:clickable="false"
                     android:id="@+id/tbDefrostFront"
                     android:layout_height="@dimen/hvacBtnHeight"
                     android:layout_weight="1"
@@ -202,26 +244,6 @@
 
                 <ToggleButton
                     android:clickable="false"
-                    android:id="@+id/tbMaxAc"
-                    android:layout_height="@dimen/hvacBtnHeight"
-                    android:layout_weight="1"
-                    android:layout_width ="0dp"
-                    android:textOff="@string/hvac_maxAcOff"
-                    android:textOn="@string/hvac_maxAcOn"
-                    android:textSize="@dimen/hvacTextSize"/>
-
-                <ToggleButton
-                    android:clickable="false"
-                    android:id="@+id/tbMaxDefrost"
-                    android:layout_height="@dimen/hvacBtnHeight"
-                    android:layout_weight="1"
-                    android:layout_width ="0dp"
-                    android:textOff="@string/hvac_maxDefrostOff"
-                    android:textOn="@string/hvac_maxDefrostOn"
-                    android:textSize="@dimen/hvacTextSize"/>
-
-                <ToggleButton
-                    android:clickable="false"
                     android:id="@+id/tbDefrostRear"
                     android:layout_height="@dimen/hvacBtnHeight"
                     android:layout_weight="1"
@@ -229,6 +251,16 @@
                     android:textOff="@string/hvac_defrostRearOff"
                     android:textOn="@string/hvac_defrostRearOn"
                     android:textSize="@dimen/hvacTextSize"/>
+
+                <ToggleButton
+                    android:clickable="false"
+                    android:id="@+id/tbMaxDefrost"
+                    android:layout_height="@dimen/hvacBtnHeight"
+                    android:layout_weight="1"
+                    android:layout_width ="0dp"
+                    android:textOff="@string/hvac_maxDefrostOff"
+                    android:textOn="@string/hvac_maxDefrostOn"
+                    android:textSize="@dimen/hvacTextSize"/>
             </LinearLayout>
             <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                 android:layout_height="wrap_content"
@@ -238,16 +270,6 @@
 
                 <ToggleButton
                     android:clickable="false"
-                    android:id="@+id/tbAuto"
-                    android:layout_height="@dimen/hvacBtnHeight"
-                    android:layout_weight="1"
-                    android:layout_width ="0dp"
-                    android:textOff="@string/hvac_autoOff"
-                    android:textOn="@string/hvac_autoOn"
-                    android:textSize="@dimen/hvacTextSize"/>
-
-                <ToggleButton
-                    android:clickable="false"
                     android:id="@+id/tbAc"
                     android:layout_height="@dimen/hvacBtnHeight"
                     android:layout_weight="1"
@@ -258,6 +280,16 @@
 
                 <ToggleButton
                     android:clickable="false"
+                    android:id="@+id/tbMaxAc"
+                    android:layout_height="@dimen/hvacBtnHeight"
+                    android:layout_weight="1"
+                    android:layout_width ="0dp"
+                    android:textOff="@string/hvac_maxAcOff"
+                    android:textOn="@string/hvac_maxAcOn"
+                    android:textSize="@dimen/hvacTextSize"/>
+
+                <ToggleButton
+                    android:clickable="false"
                     android:id="@+id/tbDual"
                     android:layout_height="@dimen/hvacBtnHeight"
                     android:layout_weight="1"
@@ -276,6 +308,51 @@
                     android:textOn="@string/hvac_recircOn"
                     android:textSize="@dimen/hvacTextSize"/>
             </LinearLayout>
+            <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+                          android:layout_height="wrap_content"
+                          android:layout_width="match_parent"
+                          android:layout_marginTop="@dimen/hvacBtnMargin"
+                          android:orientation="horizontal">
+
+                <Button
+                    android:clickable="false"
+                    android:id="@+id/tbPowerAndAc"
+                    android:layout_height="@dimen/hvacBtnHeight"
+                    android:layout_weight="1"
+                    android:layout_width ="0dp"
+                    android:text="@string/hvac_powerAndAcOn"
+                    android:textSize="@dimen/hvacTextSize"/>
+
+                <ToggleButton
+                    android:clickable="false"
+                    android:id="@+id/tbAuto"
+                    android:layout_height="@dimen/hvacBtnHeight"
+                    android:layout_weight="1"
+                    android:layout_width ="0dp"
+                    android:textOff="@string/hvac_autoOff"
+                    android:textOn="@string/hvac_autoOn"
+                    android:textSize="@dimen/hvacTextSize"/>
+
+                <ToggleButton
+                    android:clickable="false"
+                    android:id="@+id/tbAutoRecirc"
+                    android:layout_height="@dimen/hvacBtnHeight"
+                    android:layout_weight="1"
+                    android:layout_width ="0dp"
+                    android:textOff="@string/hvac_autoRecircOff"
+                    android:textOn="@string/hvac_autoRecircOn"
+                    android:textSize="@dimen/hvacTextSize"/>
+
+                <ToggleButton
+                    android:clickable="false"
+                    android:id="@+id/tbTempDisplayUnit"
+                    android:layout_height="@dimen/hvacBtnHeight"
+                    android:layout_weight="1"
+                    android:layout_width ="0dp"
+                    android:textOff="@string/hvac_tempDisplayCelsius"
+                    android:textOn="@string/hvac_tempDisplayFahrenheit"
+                    android:textSize="@dimen/hvacTextSize"/>
+            </LinearLayout>
         </LinearLayout>
     </LinearLayout>
 </LinearLayout>
diff --git a/tests/EmbeddedKitchenSinkApp/res/layout/input_test.xml b/tests/EmbeddedKitchenSinkApp/res/layout/input_test.xml
index 03a90e0..5818216 100644
--- a/tests/EmbeddedKitchenSinkApp/res/layout/input_test.xml
+++ b/tests/EmbeddedKitchenSinkApp/res/layout/input_test.xml
@@ -17,28 +17,30 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:orientation="vertical">
-    <LinearLayout
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:orientation="vertical"
-            android:id="@+id/input_buttons">
-        <!-- Filled at runtime. -->
-    </LinearLayout>
     <ScrollView
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_weight="1"
-        android:layout_marginLeft="15dp"
-        android:layout_marginRight="15dp"
-        android:layout_marginTop="20dp"
         android:fillViewport="true">
-        <TextView
-                android:layout_width="match_parent"
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="vertical">
+            <LinearLayout
+                android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:gravity="bottom"
-                android:scrollbars="vertical"
-                android:textSize="24px"
-                android:typeface="monospace"
-                android:id="@+id/events_list"/>
+                android:orientation="vertical"
+                android:id="@+id/input_buttons">
+                <!-- Filled at runtime. -->
+            </LinearLayout>
+            <TextView
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:gravity="bottom"
+                    android:scrollbars="vertical"
+                    android:textSize="24px"
+                    android:typeface="monospace"
+                    android:id="@+id/events_list"/>
+        </LinearLayout>
     </ScrollView>
 </LinearLayout>
diff --git a/tests/EmbeddedKitchenSinkApp/res/layout/input_type_test.xml b/tests/EmbeddedKitchenSinkApp/res/layout/input_type_test.xml
new file mode 100644
index 0000000..58dae07
--- /dev/null
+++ b/tests/EmbeddedKitchenSinkApp/res/layout/input_type_test.xml
@@ -0,0 +1,550 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Values of android:inputType:
+  https://developer.android.com/reference/android/widget/TextView#attr_android:inputType
+  We are missing the cases of input type combination. Adding those upon request.
+-->
+<ScrollView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_height="match_parent"
+    android:layout_width="match_parent">
+    <LinearLayout
+        android:orientation="vertical"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal">
+            <TextView
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:textSize="@dimen/inputTypeTextSize"
+                android:text="Date:"/>
+
+            <EditText
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:inputType="date"
+                android:singleLine="true"/>
+
+            <TextView
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:layout_marginLeft="@dimen/inputTypeMarginLeft"
+                android:textSize="@dimen/inputTypeTextSize"
+                android:text="Date Time:"/>
+
+            <EditText
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:inputType="datetime"
+                android:singleLine="true"/>
+        </LinearLayout>
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal">
+            <TextView
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:textSize="@dimen/inputTypeTextSize"
+                android:text="Number:"/>
+
+            <EditText
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:inputType="number"
+                android:singleLine="true"/>
+
+            <TextView
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:layout_marginLeft="@dimen/inputTypeMarginLeft"
+                android:textSize="@dimen/inputTypeTextSize"
+                android:text="Number Decimal:"/>
+
+            <EditText
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:inputType="numberDecimal"
+                android:singleLine="true"/>
+        </LinearLayout>
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal">
+            <TextView
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:textSize="@dimen/inputTypeTextSize"
+                android:text="Number Password:"/>
+
+            <EditText
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:inputType="numberPassword"
+                android:singleLine="true"/>
+
+            <TextView
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:layout_marginLeft="@dimen/inputTypeMarginLeft"
+                android:textSize="@dimen/inputTypeTextSize"
+                android:text="Number Signed:"/>
+
+            <EditText
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:inputType="numberSigned"
+                android:singleLine="true"/>
+        </LinearLayout>
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal">
+            <TextView
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:textSize="@dimen/inputTypeTextSize"
+                android:text="Phone:"/>
+
+            <EditText
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:inputType="phone"
+                android:singleLine="true"/>
+
+            <TextView
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:layout_marginLeft="@dimen/inputTypeMarginLeft"
+                android:textSize="@dimen/inputTypeTextSize"
+                android:text="Plain Text:"/>
+
+            <EditText
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:inputType="text"
+                android:singleLine="true"/>
+        </LinearLayout>
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal">
+            <TextView
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:textSize="@dimen/inputTypeTextSize"
+                android:text="Auto Complete:"/>
+
+            <EditText
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:inputType="textAutoComplete"
+                android:singleLine="true"/>
+
+            <TextView
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:layout_marginLeft="@dimen/inputTypeMarginLeft"
+                android:textSize="@dimen/inputTypeTextSize"
+                android:text="Auto Correct:"/>
+
+            <EditText
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:inputType="textAutoCorrect"
+                android:singleLine="true"/>
+        </LinearLayout>
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal">
+            <TextView
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:textSize="@dimen/inputTypeTextSize"
+                android:text="Cap Characters:"/>
+
+            <EditText
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:inputType="textCapCharacters"
+                android:singleLine="true"/>
+
+            <TextView
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:layout_marginLeft="@dimen/inputTypeMarginLeft"
+                android:textSize="@dimen/inputTypeTextSize"
+                android:text="Cap Sentences:"/>
+
+            <EditText
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:inputType="textCapSentences"
+                android:singleLine="true"/>
+        </LinearLayout>
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal">
+            <TextView
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:textSize="@dimen/inputTypeTextSize"
+                android:text="Cap Words:"/>
+
+            <EditText
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:inputType="textCapWords"
+                android:singleLine="true"/>
+
+            <TextView
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:layout_marginLeft="@dimen/inputTypeMarginLeft"
+                android:textSize="@dimen/inputTypeTextSize"
+                android:text="Email Address:"/>
+
+            <EditText
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:inputType="textEmailAddress"
+                android:singleLine="true"/>
+        </LinearLayout>
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal">
+            <TextView
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:textSize="@dimen/inputTypeTextSize"
+                android:text="Email Subject:"/>
+
+            <EditText
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:inputType="textEmailSubject"
+                android:singleLine="true"/>
+
+            <TextView
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:layout_marginLeft="@dimen/inputTypeMarginLeft"
+                android:textSize="@dimen/inputTypeTextSize"
+                android:text="Filter:"/>
+
+            <EditText
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:inputType="textFilter"
+                android:singleLine="true"/>
+        </LinearLayout>
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal">
+            <TextView
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:textSize="@dimen/inputTypeTextSize"
+                android:text="IME Multiline:"/>
+
+            <EditText
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:inputType="textImeMultiLine"
+                android:singleLine="false"/>
+
+            <TextView
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:layout_marginLeft="@dimen/inputTypeMarginLeft"
+                android:textSize="@dimen/inputTypeTextSize"
+                android:text="Long Message:"/>
+
+            <EditText
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:inputType="textLongMessage"
+                android:singleLine="true"/>
+        </LinearLayout>
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal">
+            <TextView
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:textSize="@dimen/inputTypeTextSize"
+                android:text="MultiLine:"/>
+
+            <EditText
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:inputType="textMultiLine"
+                android:singleLine="false"/>
+
+            <TextView
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:layout_marginLeft="@dimen/inputTypeMarginLeft"
+                android:textSize="@dimen/inputTypeTextSize"
+                android:text="No Suggestions:"/>
+
+            <EditText
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:inputType="textNoSuggestions"
+                android:singleLine="true"/>
+        </LinearLayout>
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal">
+            <TextView
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:textSize="@dimen/inputTypeTextSize"
+                android:text="Password:"/>
+
+            <EditText
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:inputType="textPassword"
+                android:singleLine="true"/>
+
+            <TextView
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:layout_marginLeft="@dimen/inputTypeMarginLeft"
+                android:textSize="@dimen/inputTypeTextSize"
+                android:text="Person Name:"/>
+
+            <EditText
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:inputType="textPersonName"
+                android:singleLine="true"/>
+        </LinearLayout>
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal">
+            <TextView
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:textSize="@dimen/inputTypeTextSize"
+                android:text="Phonetic:"/>
+
+            <EditText
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:inputType="textPhonetic"
+                android:singleLine="true"/>
+
+            <TextView
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:layout_marginLeft="@dimen/inputTypeMarginLeft"
+                android:textSize="@dimen/inputTypeTextSize"
+                android:text="Postal Address:"/>
+
+            <EditText
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:inputType="textPostalAddress"
+                android:singleLine="true"/>
+        </LinearLayout>
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal">
+            <TextView
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:textSize="@dimen/inputTypeTextSize"
+                android:text="Short Message:"/>
+
+            <EditText
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:inputType="textShortMessage"
+                android:singleLine="true"/>
+
+            <TextView
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:layout_marginLeft="@dimen/inputTypeMarginLeft"
+                android:textSize="@dimen/inputTypeTextSize"
+                android:text="URI:"/>
+
+            <EditText
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:inputType="textUri"
+                android:singleLine="true"/>
+        </LinearLayout>
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal">
+            <TextView
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:textSize="@dimen/inputTypeTextSize"
+                android:text="Visible Password:"/>
+
+            <EditText
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:inputType="textVisiblePassword"
+                android:singleLine="true"/>
+
+            <TextView
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:layout_marginLeft="@dimen/inputTypeMarginLeft"
+                android:textSize="@dimen/inputTypeTextSize"
+                android:text="Web Edit Text:"/>
+
+            <EditText
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:inputType="textWebEditText"
+                android:singleLine="true"/>
+        </LinearLayout>
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal">
+            <TextView
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:textSize="@dimen/inputTypeTextSize"
+                android:text="Web Email Address:"/>
+
+            <EditText
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:inputType="textWebEmailAddress"
+                android:singleLine="true"/>
+
+            <TextView
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:layout_marginLeft="@dimen/inputTypeMarginLeft"
+                android:textSize="@dimen/inputTypeTextSize"
+                android:text="Web Password:"/>
+
+            <EditText
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:inputType="textWebPassword"
+                android:singleLine="true"/>
+        </LinearLayout>
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal">
+            <TextView
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:textSize="@dimen/inputTypeTextSize"
+                android:text="Time:"/>
+
+            <EditText
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="6"
+                android:inputType="time"
+                android:singleLine="true"/>
+        </LinearLayout>
+    </LinearLayout>
+
+</ScrollView>
+
+
+
+
+
diff --git a/tests/EmbeddedKitchenSinkApp/res/layout/instrument_cluster.xml b/tests/EmbeddedKitchenSinkApp/res/layout/instrument_cluster.xml
index f58af8f..a29296c 100644
--- a/tests/EmbeddedKitchenSinkApp/res/layout/instrument_cluster.xml
+++ b/tests/EmbeddedKitchenSinkApp/res/layout/instrument_cluster.xml
@@ -13,40 +13,40 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-              android:orientation="vertical"
-              android:layout_width="match_parent"
-              android:layout_height="match_parent"
-              android:layout_marginTop="40dp"
-              android:layout_marginStart="40dp">
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="vertical"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:gravity="center"
+    android:layout_marginTop="40dp"
+    android:layout_marginStart="40dp"
+    android:layout_marginEnd="40dp">
 
     <LinearLayout
-            android:orientation="vertical"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent">
+        android:orientation="vertical"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content">
             <Button
-                    android:layout_width="match_parent"
-                    android:layout_height="0dp"
-                    android:layout_weight="1"
-                    android:text="@string/cluster_start"
-                    android:id="@+id/cluster_start_button"/>
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_margin="10dp"
+                android:padding="20dp"
+                android:text="@string/cluster_start"
+                android:id="@+id/cluster_start_button"/>
             <Button
-                    android:layout_width="match_parent"
-                    android:layout_height="0dp"
-                    android:layout_weight="1"
-                    android:text="@string/cluster_turn_left"
-                    android:id="@+id/cluster_turn_left_button"/>
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_margin="10dp"
+                android:padding="20dp"
+                android:text="@string/cluster_start_guidance"
+                android:id="@+id/cluster_turn_left_button"/>
             <Button
-                    android:layout_width="match_parent"
-                    android:layout_height="0dp"
-                    android:layout_weight="1"
-                    android:text="@string/cluster_stop"
-                    android:id="@+id/cluster_stop_button"/>
-            <Button
-                    android:layout_width="match_parent"
-                    android:layout_height="0dp"
-                    android:layout_weight="1"
-                    android:text="@string/cluster_start_activity"
-                    android:id="@+id/cluster_start_activity"/>
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_margin="10dp"
+                android:padding="20dp"
+                android:text="@string/cluster_stop"
+                android:id="@+id/cluster_stop_button"/>
     </LinearLayout>
 </LinearLayout>
diff --git a/tests/EmbeddedKitchenSinkApp/res/layout/kitchen_content.xml b/tests/EmbeddedKitchenSinkApp/res/layout/kitchen_content.xml
index 45b38dc..2ebc1c6 100644
--- a/tests/EmbeddedKitchenSinkApp/res/layout/kitchen_content.xml
+++ b/tests/EmbeddedKitchenSinkApp/res/layout/kitchen_content.xml
@@ -17,7 +17,6 @@
 <!-- We use this container to place kitchen app fragments. It insets the fragment contents -->
 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/kitchen_content"
-    android:background="#A8A9AA"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:paddingStart="56dp"
diff --git a/tests/EmbeddedKitchenSinkApp/res/layout/network_item.xml b/tests/EmbeddedKitchenSinkApp/res/layout/network_item.xml
new file mode 100644
index 0000000..84d9d34
--- /dev/null
+++ b/tests/EmbeddedKitchenSinkApp/res/layout/network_item.xml
@@ -0,0 +1,203 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!-- Copyright (C) 2018 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.
+-->
+
+<!-- Used for the list of networks in the KS Connectivity Tab -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:layout_gravity="fill_vertical"
+    android:orientation="horizontal"
+    android:weightSum="12">
+
+    <!-- Requested Active indicator -->
+    <View
+        android:id="@+id/network_active"
+        android:layout_width="0dp"
+        android:layout_height="match_parent"
+        android:layout_weight=".1"
+        android:background="#ff3d3d">
+    </View>
+
+    <!-- Item NetId indicator -->
+    <TextView
+        android:id="@+id/network_id"
+        android:layout_width="0dp"
+        android:layout_height="match_parent"
+        android:layout_weight=".9"
+        android:textSize="20sp"
+        android:textColor="#d4d4d4">
+    </TextView>
+
+    <!-- Set of network values we want to view -->
+    <LinearLayout
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:orientation="vertical"
+        android:layout_weight="9">
+
+        <TextView
+            android:id="@+id/network_type"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:textSize="20sp"
+            android:textColor="#d4d4d4">
+        </TextView>
+
+        <TextView
+            android:id="@+id/network_state"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:textSize="20sp"
+            android:textColor="#d4d4d4">
+        </TextView>
+
+        <TextView
+            android:id="@+id/network_connected"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:textSize="20sp"
+            android:textColor="#d4d4d4">
+        </TextView>
+
+        <TextView
+            android:id="@+id/network_available"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:textSize="20sp"
+            android:textColor="#d4d4d4">
+        </TextView>
+
+        <TextView
+            android:id="@+id/network_roaming"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:textSize="20sp"
+            android:textColor="#d4d4d4">
+        </TextView>
+
+        <TextView
+            android:id="@+id/network_iface"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:textSize="20sp"
+            android:textColor="#d4d4d4">
+        </TextView>
+
+        <TextView
+            android:id="@+id/hw_address"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:textSize="20sp"
+            android:textColor="#d4d4d4">
+        </TextView>
+
+        <TextView
+            android:id="@+id/network_ip_addresses"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:textSize="20sp"
+            android:textColor="#d4d4d4">
+        </TextView>
+
+        <TextView
+            android:id="@+id/network_dns"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:textSize="20sp"
+            android:textColor="#d4d4d4">
+        </TextView>
+
+        <TextView
+            android:id="@+id/network_domains"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:textSize="20sp"
+            android:textColor="#d4d4d4">
+        </TextView>
+
+        <TextView
+            android:id="@+id/network_routes"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:textSize="20sp"
+            android:textColor="#d4d4d4">
+        </TextView>
+
+        <TextView
+            android:id="@+id/network_transports"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:textSize="20sp"
+            android:textColor="#d4d4d4">
+        </TextView>
+
+        <TextView
+            android:id="@+id/network_capabilities"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:textSize="20sp"
+            android:textColor="#d4d4d4">
+        </TextView>
+
+        <TextView
+            android:id="@+id/network_bandwidth"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:textSize="20sp"
+            android:textColor="#d4d4d4">
+        </TextView>
+
+    </LinearLayout>
+
+    <!-- Buttons to trigger a request or something else -->
+    <LinearLayout
+            android:orientation="vertical"
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="2"
+            android:weightSum="3">
+
+        <Button android:id="@+id/network_request"
+                android:layout_width="match_parent"
+                android:layout_height="0dp"
+                android:layout_weight="1"
+                android:layout_marginBottom="2dp"
+                android:background="#505050"
+                android:text="Request"
+                android:textColor="#d4d4d4"/>
+
+        <Button android:id="@+id/network_default"
+                android:layout_width="match_parent"
+                android:layout_height="0dp"
+                android:layout_weight="1"
+                android:layout_marginBottom="2dp"
+                android:background="#505050"
+                android:text="Set Default"
+                android:textColor="#d4d4d4"/>
+
+        <Button android:id="@+id/network_report"
+                android:layout_width="match_parent"
+                android:layout_height="0dp"
+                android:layout_weight="1"
+                android:layout_marginBottom="2dp"
+                android:background="#505050"
+                android:text="Report"
+                android:textColor="#d4d4d4"/>
+
+    </LinearLayout>
+</LinearLayout>
diff --git a/tests/EmbeddedKitchenSinkApp/res/layout/notification_fragment.xml b/tests/EmbeddedKitchenSinkApp/res/layout/notification_fragment.xml
index b9b8e8b..68652f2 100644
--- a/tests/EmbeddedKitchenSinkApp/res/layout/notification_fragment.xml
+++ b/tests/EmbeddedKitchenSinkApp/res/layout/notification_fragment.xml
@@ -13,56 +13,154 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<ScrollView
+    xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:orientation="vertical" >
-    <Button
-        android:id="@+id/cancel_all_button"
-        android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:fadeScrollbars="false">
+
+    <LinearLayout
+        android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:text="Cancel All"
-        android:textSize="35sp"/>
-    <Button
-        android:id="@+id/importance_high_button"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="Importance: HIGH (Shows heads-up)"
-        android:textSize="35sp"/>
-    <Button
-        android:id="@+id/importance_high_button_2"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="Importance: HIGH (Shows heads-up) 2"
-        android:textSize="35sp"/>
-    <Button
-        android:id="@+id/importance_default_button"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="Importance: DEFAULT"
-        android:textSize="35sp"/>
-    <Button
-        android:id="@+id/importance_low_button"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="Importance: LOW"
-        android:textSize="35sp"/>
-    <Button
-        android:id="@+id/importance_min_button"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="Importance: MIN"
-        android:textSize="35sp"/>
-    <Button
-        android:id="@+id/ongoing_button"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="Ongoing"
-        android:textSize="35sp"/>
-    <Button
-        android:id="@+id/category_message_button"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="Category: CATEGORY_MESSAGE"
-        android:textSize="35sp"/>
-</LinearLayout>
+        android:orientation="vertical">
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="Ongoing notifications can only be dismissed by the CANCEL ALL button. Red: heads-up; Blue: no heads-up."/>
+
+        <Button
+            android:id="@+id/cancel_all_button"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_margin="10dp"
+            android:text="Cancel All Kitchensink Notifications"
+            android:textSize="30sp"/>
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:background="#334666"
+            android:orientation="vertical">
+
+            <Button
+                android:id="@+id/category_message_button"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_margin="10dp"
+                android:background="#ffa9a8"
+                android:foreground="?android:attr/selectableItemBackground"
+                android:text="Message"
+                android:textSize="30sp"/>
+
+            <Button
+                android:id="@+id/navigation_button"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_margin="10dp"
+                android:background="#ffa9a8"
+                android:foreground="?android:attr/selectableItemBackground"
+                android:text="Navigation (Only show heads-up, not shown in notification center)"
+                android:textSize="30sp"/>
+
+            <Button
+                android:id="@+id/ongoing_button"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_margin="10dp"
+                android:text="Persistent (Can't dismiss)"
+                android:textSize="30sp"/>
+
+            <Button
+                android:id="@+id/progress_button"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_margin="10dp"
+                android:text="Progress (Can't dismiss)"
+                android:textSize="30sp"/>
+        </LinearLayout>
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:background="#5a6633"
+            android:orientation="vertical">
+
+            <Button
+                android:id="@+id/importance_high_button"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_margin="10dp"
+                android:background="#ffa9a8"
+                android:foreground="?android:attr/selectableItemBackground"
+                android:text="Importance: HIGH"
+                android:textSize="30sp"/>
+
+            <Button
+                android:id="@+id/importance_default_button"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_margin="10dp"
+                android:text="Importance: DEFAULT"
+                android:textSize="30sp"/>
+        </LinearLayout>
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:background="#5a6633"
+            android:orientation="vertical">
+
+            <Button
+                android:id="@+id/importance_low_button"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_margin="10dp"
+                android:text="Importance: LOW"
+                android:textSize="30sp"/>
+
+            <Button
+                android:id="@+id/importance_min_button"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_margin="10dp"
+                android:text="Importance: MIN"
+                android:textSize="30sp"/>
+        </LinearLayout>
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:background="#33664d"
+            android:orientation="vertical">
+
+            <Button
+                android:id="@+id/category_car_emergency_button"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_margin="10dp"
+                android:background="#ffa9a8"
+                android:foreground="?android:attr/selectableItemBackground"
+                android:text="Car Emergency"
+                android:textSize="30sp"/>
+
+            <Button
+                android:id="@+id/category_car_warning_button"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_margin="10dp"
+                android:background="#ffa9a8"
+                android:foreground="?android:attr/selectableItemBackground"
+                android:text="Car Warning"
+                android:textSize="30sp"/>
+
+            <Button
+                android:id="@+id/category_car_info_button"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_margin="10dp"
+                android:text="Car Information"
+                android:textSize="30sp"/>
+        </LinearLayout>
+    </LinearLayout>
+</ScrollView>
\ No newline at end of file
diff --git a/tests/EmbeddedKitchenSinkApp/res/layout/property.xml b/tests/EmbeddedKitchenSinkApp/res/layout/property.xml
index 3841e07..f5cc074 100644
--- a/tests/EmbeddedKitchenSinkApp/res/layout/property.xml
+++ b/tests/EmbeddedKitchenSinkApp/res/layout/property.xml
@@ -71,7 +71,7 @@
                 android:layout_height="wrap_content"
                 android:layout_weight="2"
                 android:layout_width="0dp"
-                android:inputType="phone" />
+                android:inputType="text" />
             <Button
                 android:id="@+id/bSetProperty"
                 android:layout_height="wrap_content"
diff --git a/tests/EmbeddedKitchenSinkApp/res/layout/sensors.xml b/tests/EmbeddedKitchenSinkApp/res/layout/sensors.xml
index 4d8c246..aa4a2eb 100644
--- a/tests/EmbeddedKitchenSinkApp/res/layout/sensors.xml
+++ b/tests/EmbeddedKitchenSinkApp/res/layout/sensors.xml
@@ -20,10 +20,10 @@
     <!--  Top area -->
     <LinearLayout
             android:layout_width="match_parent"
-            android:layout_height="110dp"
+            android:layout_height="wrap_content"
             android:orientation="vertical">
         <TextView
-            android:id="@string/location_title"
+            android:id="@+id/location_title"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:text="@string/location_title" />
diff --git a/tests/EmbeddedKitchenSinkApp/res/layout/storagewear.xml b/tests/EmbeddedKitchenSinkApp/res/layout/storagewear.xml
index cf98695..52a7763 100644
--- a/tests/EmbeddedKitchenSinkApp/res/layout/storagewear.xml
+++ b/tests/EmbeddedKitchenSinkApp/res/layout/storagewear.xml
@@ -23,7 +23,6 @@
         android:layout_height="wrap_content"
         android:text="Storage Wear Information"
         android:textSize="24dp"
-        android:textColor="#ff0000"
         android:minLines="5"/>
     <ListView
         android:id="@+id/storage_events_list"
@@ -58,7 +57,6 @@
         android:layout_height="wrap_content"
         android:text="Free Disk Space: 1 byte"
         android:textSize="24dp"
-        android:textColor="#ff0000"
         android:minLines="4"/>
     <ScrollView
         android:id="@+id/scroll_view"
@@ -72,7 +70,6 @@
             android:layout_height="fill_parent"
             android:text="No I/O activity on record"
             android:textSize="20dp"
-            android:textColor="#ff0000"
             android:minLines="10"/>
     </ScrollView>
 </LinearLayout>
diff --git a/tests/EmbeddedKitchenSinkApp/res/layout/users.xml b/tests/EmbeddedKitchenSinkApp/res/layout/users.xml
new file mode 100644
index 0000000..e144acd
--- /dev/null
+++ b/tests/EmbeddedKitchenSinkApp/res/layout/users.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2019 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.
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+              android:layout_width="match_parent"
+              android:layout_height="match_parent"
+              android:orientation="vertical" >
+    <ListView
+        android:id="@+id/user_restrictions_list"
+        android:layout_height="0dp"
+        android:layout_width="match_parent"
+        android:layout_weight="1"
+        android:scrollbars="vertical"/>
+
+    <Button
+        android:id="@+id/apply_button"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:padding="@dimen/users_button_padding"
+        android:textSize="@dimen/users_button_text_size"
+        android:layout_weight="0"
+        android:text="@string/users_apply_button" />
+</LinearLayout>
diff --git a/tests/EmbeddedKitchenSinkApp/res/layout/weblinks_fragment.xml b/tests/EmbeddedKitchenSinkApp/res/layout/weblinks_fragment.xml
new file mode 100644
index 0000000..6200ddc
--- /dev/null
+++ b/tests/EmbeddedKitchenSinkApp/res/layout/weblinks_fragment.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2018 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.
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="vertical"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:layout_marginStart="40dp"
+    android:layout_marginEnd="40dp"
+    android:id="@+id/buttons">
+    <Button
+        android:layout_width="match_parent"
+        android:layout_height="50dp"
+        android:layout_marginTop="40dp"
+        android:text="@string/weblink_google"
+        android:tag="@string/weblink_google" />
+    <Button
+        android:layout_width="match_parent"
+        android:layout_height="50dp"
+        android:layout_marginTop="40dp"
+        android:text="@string/weblink_nytimes"
+        android:tag="@string/weblink_nytimes" />
+    <Button
+        android:layout_width="match_parent"
+        android:layout_height="50dp"
+        android:layout_marginTop="40dp"
+        android:text="@string/weblink_support_name"
+        android:tag="@string/weblink_support" />
+</LinearLayout>
diff --git a/tests/EmbeddedKitchenSinkApp/res/raw/US_101.png b/tests/EmbeddedKitchenSinkApp/res/raw/US_101.png
new file mode 100644
index 0000000..3626ce0
--- /dev/null
+++ b/tests/EmbeddedKitchenSinkApp/res/raw/US_101.png
Binary files differ
diff --git a/tests/EmbeddedKitchenSinkApp/res/raw/nav_state_data.json b/tests/EmbeddedKitchenSinkApp/res/raw/nav_state_data.json
index 2aa5cd0..99b28e6 100644
--- a/tests/EmbeddedKitchenSinkApp/res/raw/nav_state_data.json
+++ b/tests/EmbeddedKitchenSinkApp/res/raw/nav_state_data.json
@@ -9,9 +9,49 @@
         },
         "mManeuver": {
           "mType": { "mValues": [ "DEPART" ] }
-        }
+        },
+        "mCue":{
+          "mElements": [
+            {
+              "mText": "Stay on"
+            },
+            {
+              "mImage": {
+                "mContentUri": "content://com.google.android.car.kitchensink.cluster.clustercontentprovider/img/US_101.png"
+              }
+            },
+            {
+              "mText": "East"
+            }
+          ]
+        },
+        "mLanes": [
+          {
+            "mDirections": [
+              {
+                "mShape": { "mValues": [ "SLIGHT_LEFT" ] },
+                "mHighlighted": false
+              }
+            ]
+          },
+          {
+            "mDirections": [
+              {
+                "mShape": { "mValues": [ "STRAIGHT" ] },
+                "mHighlighted": false
+              },
+              {
+                "mShape": { "mValues": [ "SLIGHT_RIGHT" ] },
+                "mHighlighted": true
+              }
+            ]
+          }
+        ]
       }
     ],
+    "mCurrentSegment": {
+      "mName": "On McCowan St"
+    },
     "mDestinations": [
       {
         "mTitle": "Home",
@@ -20,7 +60,12 @@
           "mMeters": 2000,
           "mDisplayValue": "2",
           "mDisplayUnit": { "mValues": [ "KILOMETERS" ] }
-        }
+        },
+        "mEta": {
+          "mSecondsSinceEpoch": 1551318762,
+          "mZoneId": "America/Los_Angeles"
+        },
+        "mTraffic": { "mValues": [ "MEDIUM" ] }
       }
     ]
   },
diff --git a/tests/EmbeddedKitchenSinkApp/res/values/colors.xml b/tests/EmbeddedKitchenSinkApp/res/values/colors.xml
index 9a1ed89..aac5fd7 100644
--- a/tests/EmbeddedKitchenSinkApp/res/values/colors.xml
+++ b/tests/EmbeddedKitchenSinkApp/res/values/colors.xml
@@ -1,20 +1,19 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!--
- * Copyright (c) 2017, 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.
-*/
+<!-- Copyright (C) 2015 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>
-    <color name="car_button_tint">#fffafafa</color>
+    <color name="car_teal_200">#ff80cbc4</color>
+    <color name="car_teal_700">#ff00796b</color>
 </resources>
\ No newline at end of file
diff --git a/tests/EmbeddedKitchenSinkApp/res/values/dimens.xml b/tests/EmbeddedKitchenSinkApp/res/values/dimens.xml
index c8806bc..437d69d 100644
--- a/tests/EmbeddedKitchenSinkApp/res/values/dimens.xml
+++ b/tests/EmbeddedKitchenSinkApp/res/values/dimens.xml
@@ -17,6 +17,8 @@
     <dimen name="hvacBtnHeight">60dp</dimen>
     <dimen name="hvacBtnMargin">10dp</dimen>
     <dimen name="hvacTextSize">24sp</dimen>
+    <dimen name="inputTypeMarginLeft">50dp</dimen>
+    <dimen name="inputTypeTextSize">24sp</dimen>
     <dimen name="powerBtnHeight">80dp</dimen>
     <dimen name="powerBtnWidth">300dp</dimen>
     <dimen name="powerTextSize">24sp</dimen>
@@ -61,4 +63,10 @@
     <dimen name="car_keyline_2">108dp</dimen>
     <dimen name="car_keyline_3">152dp</dimen>
     <dimen name="car_keyline_4">182dp</dimen>
+
+    <!-- Users -->
+    <dimen name="users_button_padding">10dp</dimen>
+    <dimen name="users_button_text_size">24sp</dimen>
+    <dimen name="users_checkbox_padding">5dp</dimen>
+    <dimen name="users_checkbox_text_size">32sp</dimen>
 </resources>
diff --git a/tests/EmbeddedKitchenSinkApp/res/values/strings.xml b/tests/EmbeddedKitchenSinkApp/res/values/strings.xml
index e8ac7d3..b0efa9d 100644
--- a/tests/EmbeddedKitchenSinkApp/res/values/strings.xml
+++ b/tests/EmbeddedKitchenSinkApp/res/values/strings.xml
@@ -14,214 +14,228 @@
      limitations under the License.
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_title">Kitchen Sink</string>
+    <string name="app_title" translatable="false">Kitchen Sink</string>
 
     <!-- alert dialog -->
     <!-- Notification ticker text (shown in the status bar) when a Bluetooth device wants to pair with us -->
-    <string name="bluetooth_notif_ticker">Bluetooth pairing request</string>
+    <string name="bluetooth_notif_ticker" translatable="false">Bluetooth pairing request</string>
     <!-- Bluetooth settings.  Context menu item for a device.  Action will first pair, and then connect to all profiles on the device. -->
-    <string name="bluetooth_device_context_pair_connect">Pair &amp; connect</string>
+    <string name="bluetooth_device_context_pair_connect" translatable="false">Pair &amp; connect</string>
     <!-- Used as setting title (for checkbox) on second screen after selecting Bluetooth settings -->
-    <string name="bluetooth">Bluetooth</string>
+    <string name="bluetooth" translatable="false">Bluetooth</string>
     <!-- Message when bluetooth is informing the user of the pairing key. [CHAR LIMIT=NONE] -->
-    <string name="bluetooth_pairing_key_msg">Bluetooth pairing code</string>
+    <string name="bluetooth_pairing_key_msg" translatable="false">Bluetooth pairing code</string>
     <!-- Checkbox label for alphanumeric PIN entry (default is numeric PIN). [CHAR LIMIT=50] -->
-    <string name="bluetooth_enable_alphanumeric_pin">PIN contains letters or symbols</string>
+    <string name="bluetooth_enable_alphanumeric_pin" translatable="false">PIN contains letters or symbols</string>
     <!-- Message when bluetooth dialog for passkey entry is showing. [CHAR LIMIT=NONE] -->
-    <string name="bluetooth_enter_passkey_msg">Type the pairing code then press Return or Enter</string>
+    <string name="bluetooth_enter_passkey_msg" translatable="false">Type the pairing code then press Return or Enter</string>
     <!-- Title for the dialog to enter PIN. [CHAR LIMIT=40] -->
-    <string name="bluetooth_pairing_request">Pair with <xliff:g id="device_name">%1$s</xliff:g>?</string>
+    <string name="bluetooth_pairing_request" translatable="false">Pair with <xliff:g id="device_name">%1$s</xliff:g>?</string>
     <!-- Checkbox message in pairing dialogs.  [CHAR LIMIT=NONE] -->
-    <string name="bluetooth_pairing_shares_phonebook">Allow <xliff:g id="device_name">%1$s</xliff:g> to access your contacts and call history</string>
+    <string name="bluetooth_pairing_shares_phonebook" translatable="false">Allow <xliff:g id="device_name">%1$s</xliff:g> to access your contacts and call history</string>
     <!-- Pairing dialog text to remind user to enter the PIN on the other device. [CHAR LIMIT=NONE] -->
-    <string name="bluetooth_enter_pin_other_device">You may also need to type this PIN on the other device.</string>
+    <string name="bluetooth_enter_pin_other_device" translatable="false">You may also need to type this PIN on the other device.</string>
     <!-- Pairing dialog text to remind user to enter the passkey on the other device. [CHAR LIMIT=NONE] -->
-    <string name="bluetooth_enter_passkey_other_device">You may also need to type this passkey on the other device.</string>
+    <string name="bluetooth_enter_passkey_other_device" translatable="false">You may also need to type this passkey on the other device.</string>
     <!-- Bluetooth PIN hint text (below the text entry box). [CHAR LIMIT=30] -->
-    <string name="bluetooth_pin_values_hint_16_digits">Must be 16 digits</string>
+    <string name="bluetooth_pin_values_hint_16_digits" translatable="false">Must be 16 digits</string>
     <!-- Bluetooth PIN hint text (below the text entry box). [CHAR LIMIT=30] -->
-    <string name="bluetooth_pin_values_hint">Usually 0000 or 1234</string>
+    <string name="bluetooth_pin_values_hint" translatable="false">Usually 0000 or 1234</string>
     <!-- Notification title when a Bluetooth device wants to pair with us -->
-    <string name="bluetooth_notif_title">Pairing request</string>
+    <string name="bluetooth_notif_title" translatable="false">Pairing request</string>
     <!-- Notification message when a Bluetooth device wants to pair with us -->
-    <string name="bluetooth_notif_message">Tap to pair with <xliff:g id="device_name">%1$s</xliff:g>.</string>
+    <string name="bluetooth_notif_message" translatable="false">Tap to pair with <xliff:g id="device_name">%1$s</xliff:g>.</string>
     <!-- Title for BT error dialogs. -->
-    <string name="bluetooth_error_title"></string>
+    <string name="bluetooth_error_title" translatable="false"></string>
 
     <!-- hvac -->
-    <string name="hvac_acOff">AC OFF</string>
-    <string name="hvac_acOn">AC ON</string>
-    <string name="hvac_autoOff">Auto OFF</string>
-    <string name="hvac_autoOn">Auto ON</string>
-    <string name="hvac_defrostFrontOff">Front Defrost OFF</string>
-    <string name="hvac_defrostFrontOn">Front Defrost ON</string>
-    <string name="hvac_defrostRearOff">Rear Defrost OFF</string>
-    <string name="hvac_defrostRearOn">Rear Defrost ON</string>
-    <string name="hvac_dualOff">Dual OFF</string>
-    <string name="hvac_dualOn">Dual ON</string>
-    <string name="hvac_maxAcOff">Max AC OFF</string>
-    <string name="hvac_maxAcOn">Max AC ON</string>
-    <string name="hvac_maxDefrostOff">Max DEF OFF</string>
-    <string name="hvac_maxDefrostOn">Max DEF ON</string>
-    <string name="hvac_outsideTempLabel">Outside Temp:</string>
-    <string name="hvac_positionFace">Face</string>
-    <string name="hvac_positionFloor">Floor</string>
-    <string name="hvac_positionFaceAndFloor">Face+Floor</string>
-    <string name="hvac_positionDefrost">Defrost</string>
-    <string name="hvac_positionDefrostAndFloor">Def+Floor</string>
-    <string name="hvac_fanSpeedDn">Fan Speed Down</string>
-    <string name="hvac_fanSpeedUp">Fan Speed Up</string>
-    <string name="hvac_recircOff">Recirc OFF</string>
-    <string name="hvac_recircOn">Recirc ON</string>
-    <string name="hvac_tempDn">Temp Down</string>
-    <string name="hvac_tempUp">Temp Up</string>
+    <string name="hvac_acOff" translatable="false">AC OFF</string>
+    <string name="hvac_acOn" translatable="false">AC ON</string>
+    <string name="hvac_autoOff" translatable="false">Auto OFF</string>
+    <string name="hvac_autoOn" translatable="false">Auto ON</string>
+    <string name="hvac_autoRecircOff" translatable="false">Auto Recirc OFF</string>
+    <string name="hvac_autoRecircOn" translatable="false">Auto Recirc ON</string>
+    <string name="hvac_defrostFrontOff" translatable="false">Front Defrost OFF</string>
+    <string name="hvac_defrostFrontOn" translatable="false">Front Defrost ON</string>
+    <string name="hvac_defrostRearOff" translatable="false">Rear Defrost OFF</string>
+    <string name="hvac_defrostRearOn" translatable="false">Rear Defrost ON</string>
+    <string name="hvac_dualOff" translatable="false">Dual OFF</string>
+    <string name="hvac_dualOn" translatable="false">Dual ON</string>
+    <string name="hvac_maxAcOff" translatable="false">Max AC OFF</string>
+    <string name="hvac_maxAcOn" translatable="false">Max AC ON</string>
+    <string name="hvac_maxDefrostOff" translatable="false">Max DEF OFF</string>
+    <string name="hvac_maxDefrostOn" translatable="false">Max DEF ON</string>
+    <string name="hvac_outsideTempLabel" translatable="false">Outside Temp:</string>
+    <string name="hvac_positionFace" translatable="false">Face</string>
+    <string name="hvac_positionFloor" translatable="false">Floor</string>
+    <string name="hvac_positionFaceAndFloor" translatable="false">Face+Floor</string>
+    <string name="hvac_positionDefrost" translatable="false">Defrost</string>
+    <string name="hvac_positionDefrostAndFloor" translatable="false">Def+Floor</string>
+    <string name="hvac_powerOff" translatable="false">Power OFF</string>
+    <string name="hvac_powerOn" translatable="false">Power ON</string>
+    <string name="hvac_powerAndAcOn" translatable="false">Turn Power And AC ON</string>
+    <string name="hvac_fanSpeedDn" translatable="false">Fan Speed Down</string>
+    <string name="hvac_fanSpeedUp" translatable="false">Fan Speed Up</string>
+    <string name="hvac_recircOff" translatable="false">Recirc OFF</string>
+    <string name="hvac_recircOn" translatable="false">Recirc ON</string>
+    <string name="hvac_tempDisplayCelsius" translatable="false">Temp CELSIUS</string>
+    <string name="hvac_tempDisplayFahrenheit" translatable="false">Temp FAHRENHEIT</string>
+    <string name="hvac_aTempDn" translatable="false">All Temp Down</string>
+    <string name="hvac_aTempUp" translatable="false">All Temp Up</string>
+    <string name="hvac_dTempDn" translatable="false">Driver Temp Down</string>
+    <string name="hvac_dTempUp" translatable="false">Driver Temp Up</string>
+    <string name="hvac_pTempDn" translatable="false">Passenger Temp Down</string>
+    <string name="hvac_pTempUp" translatable="false">Passenger Temp Up</string>
     <!-- camera -->
-    <string name="rvc_getCapabilities">Get Capabilities</string>
-    <string name="rvc_getRvcCrop">Get RVC Crop</string>
-    <string name="rvc_setRvcCrop">Set RVC Crop</string>
-    <string name="rvc_getRvcPos">Get RVC Pos</string>
-    <string name="rvc_setRvcPos">Set RVC Pos</string>
-    <string name="rvc_getCameraState">Get State</string>
-    <string name="rvc_setCameraState">Set State</string>
-    <string name="rvc_state">RVC State</string>
+    <string name="rvc_getCapabilities" translatable="false">Get Capabilities</string>
+    <string name="rvc_getRvcCrop" translatable="false">Get RVC Crop</string>
+    <string name="rvc_setRvcCrop" translatable="false">Set RVC Crop</string>
+    <string name="rvc_getRvcPos" translatable="false">Get RVC Pos</string>
+    <string name="rvc_setRvcPos" translatable="false">Set RVC Pos</string>
+    <string name="rvc_getCameraState" translatable="false">Get State</string>
+    <string name="rvc_setCameraState" translatable="false">Set State</string>
+    <string name="rvc_state" translatable="false">RVC State</string>
     <!--  audio -->
-    <string name="empty"></string>
-    <string name="play">Play</string>
-    <string name="play_pcm_once">Play Once</string>
-    <string name="stop">Stop</string>
-    <string name="play_wav">Play WAV</string>
-    <string name="stop_wav">Stop WAV</string>
-    <string name="audio_focus">Audio Focus</string>
-    <string name="focus_gain">Gain</string>
-    <string name="focus_gain_transient_duck">Gain,Transient,Duck</string>
-    <string name="focus_release">Release</string>
-    <string name="request">request</string>
-    <string name="release">release</string>
-    <string name="media_play">Media Play</string>
-    <string name="nav_play">Nav Play</string>
-    <string name="vr_play">VR Play</string>
-    <string name="system_play">System Play</string>
-    <string name="config_index">Config Index</string>
-    <string name="choose_config">Choose config</string>
-    <string name="audio_stress_title">Audio Stress Test</string>
-    <string name="nav_start">Nav Start</string>
-    <string name="nav_end">Nav End</string>
-    <string name="vr_start">VR Start</string>
-    <string name="vr_end">VR End</string>
-    <string name="radio_start">Radio Start</string>
-    <string name="radio_end">Radio End</string>
-    <string name="speaker_phone_on">Speaker Phone On</string>
-    <string name="speaker_phone_off">Speaker Phone Off</string>
-    <string name="microphone_on">Mic On</string>
-    <string name="microphone_off">Mic Off</string>
-    <string name="mock_audio_on">Audio Mocking On</string>
-    <string name="mock_audio_off">Audio Mocking Off</string>
+    <string name="empty" translatable="false"></string>
+    <string name="play" translatable="false">Play</string>
+    <string name="play_pcm_once" translatable="false">Play Once</string>
+    <string name="stop" translatable="false">Stop</string>
+    <string name="play_wav" translatable="false">Play WAV</string>
+    <string name="stop_wav" translatable="false">Stop WAV</string>
+    <string name="audio_focus" translatable="false">Audio Focus</string>
+    <string name="focus_gain" translatable="false">Gain</string>
+    <string name="focus_gain_transient_duck" translatable="false">Gain,Transient,Duck</string>
+    <string name="focus_release" translatable="false">Release</string>
+    <string name="request" translatable="false">request</string>
+    <string name="release" translatable="false">release</string>
+    <string name="media_play" translatable="false">Media Play</string>
+    <string name="nav_play" translatable="false">Nav Play</string>
+    <string name="vr_play" translatable="false">VR Play</string>
+    <string name="system_play" translatable="false">System Play</string>
+    <string name="config_index" translatable="false">Config Index</string>
+    <string name="choose_config" translatable="false">Choose config</string>
+    <string name="audio_stress_title" translatable="false">Audio Stress Test</string>
+    <string name="nav_start" translatable="false">Nav Start</string>
+    <string name="nav_end" translatable="false">Nav End</string>
+    <string name="vr_start" translatable="false">VR Start</string>
+    <string name="vr_end" translatable="false">VR End</string>
+    <string name="radio_start" translatable="false">Radio Start</string>
+    <string name="radio_end" translatable="false">Radio End</string>
+    <string name="speaker_phone_on" translatable="false">Speaker Phone On</string>
+    <string name="speaker_phone_off" translatable="false">Speaker Phone Off</string>
+    <string name="microphone_on" translatable="false">Mic On</string>
+    <string name="microphone_off" translatable="false">Mic Off</string>
+    <string name="mock_audio_on" translatable="false">Audio Mocking On</string>
+    <string name="mock_audio_off" translatable="false">Audio Mocking Off</string>
 
     <!-- keyboard test fragment -->
-    <string name="keyboard_test_title">Keyboard Test</string>
-    <string name="on_search">OnSearch:</string>
-    <string name="on_edit">onEdit:</string>
-    <string name="open_ime_button">Open IME</string>
-    <string name="close_ime_button">Close IME</string>
-    <string name="open_kb_button">Hide/Show Input</string>
+    <string name="keyboard_test_title" translatable="false">Keyboard Test</string>
+    <string name="on_search" translatable="false">OnSearch:</string>
+    <string name="on_edit" translatable="false">onEdit:</string>
+    <string name="open_ime_button" translatable="false">Open IME</string>
+    <string name="close_ime_button" translatable="false">Close IME</string>
+    <string name="open_kb_button" translatable="false">Hide/Show Input</string>
 
     <!-- instrument cluster -->
-    <string name="cluster_start">Start metadata</string>
-    <string name="cluster_turn_left">Send turn-by-turn</string>
-    <string name="cluster_stop">Stop metadata</string>
-    <string name="cluster_nav_app_context_loss">Navigation app context lost!</string>
-    <string name="cluster_start_activity">Start Nav Activity</string>
+    <string name="cluster_start" translatable="false">Request focus</string>
+    <string name="cluster_start_guidance" translatable="false">Start turn-by-turn</string>
+    <string name="cluster_stop" translatable="false">Abandon focus</string>
+    <string name="cluster_stop_guidance" translatable="false">Stop turn-by-turn</string>
+    <string name="cluster_nav_app_context_loss" translatable="false">Navigation app context lost!</string>
+    <string name="cluster_start_activity" translatable="false">Start Nav Activity</string>
+    <string name="cluster_start_activity_failed" translatable="false">Failed to start activity in cluster</string>
+    <string name="cluster_not_started" translatable="false">Missing navigation focus</string>
 
     <!--  input test -->
-    <string name="volume_up">Volume +</string>
-    <string name="volume_down">Volume -</string>
-    <string name="volume_mute">Mute</string>
-    <string name="voice">Voice</string>
-    <string name="mock_vehicle_hal">Mock HAL</string>
-    <string name="mock_vehicle_hal_off">Mock HAL OFF</string>
-    <string name="mock_vehicle_hal_on">Mock HAL ON</string>
-    <string name="music">Music</string>
-    <string name="call_send">Call</string>
-    <string name="call_end">Call end</string>
-    <string name="home">Home</string>
-    <string name="next_song">Next song</string>
-    <string name="prev_song">Prev song</string>
-    <string name="tune_right">Tune +</string>
-    <string name="tune_left">Tune -</string>
-    <string name="music_play">Play</string>
-    <string name="music_stop">Stop</string>
-    <string name="steering_wheel">Steering Wheel Buttons:</string>
-    <string name="sw_left">Left</string>
-    <string name="sw_right">Right</string>
-    <string name="sw_up">Up</string>
-    <string name="sw_down">Down</string>
-    <string name="sw_center">Center</string>
-    <string name="sw_back">Back</string>
+    <string name="volume_up" translatable="false">Volume +</string>
+    <string name="volume_down" translatable="false">Volume -</string>
+    <string name="volume_mute" translatable="false">Mute</string>
+    <string name="voice" translatable="false">Voice</string>
+    <string name="mock_vehicle_hal" translatable="false">Mock HAL</string>
+    <string name="mock_vehicle_hal_off" translatable="false">Mock HAL OFF</string>
+    <string name="mock_vehicle_hal_on" translatable="false">Mock HAL ON</string>
+    <string name="music" translatable="false">Music</string>
+    <string name="call_send" translatable="false">Call</string>
+    <string name="call_end" translatable="false">Call end</string>
+    <string name="home" translatable="false">Home</string>
+    <string name="next_song" translatable="false">Next song</string>
+    <string name="prev_song" translatable="false">Prev song</string>
+    <string name="tune_right" translatable="false">Tune +</string>
+    <string name="tune_left" translatable="false">Tune -</string>
+    <string name="music_play" translatable="false">Play</string>
+    <string name="music_stop" translatable="false">Stop</string>
+    <string name="steering_wheel" translatable="false">Steering Wheel Buttons:</string>
+    <string name="sw_left" translatable="false">Left</string>
+    <string name="sw_right" translatable="false">Right</string>
+    <string name="sw_up" translatable="false">Up</string>
+    <string name="sw_down" translatable="false">Down</string>
+    <string name="sw_center" translatable="false">Center</string>
+    <string name="sw_back" translatable="false">Back</string>
 
     <!-- power test -->
-    <string name="power_request_shutdown">Request Shutdown</string>
-    <string name="power_shutdown">Shutdown</string>
-    <string name="power_sleep">Sleep</string>
+    <string name="power_request_shutdown" translatable="false">Request Shutdown</string>
+    <string name="power_shutdown" translatable="false">Shutdown</string>
+    <string name="power_sleep" translatable="false">Sleep</string>
 
     <!-- property test -->
-    <string name="property_clear">Clear Log</string>
-    <string name="property_get">Get</string>
-    <string name="property_register">Register</string>
-    <string name="property_set">Set</string>
-    <string name="property_unregister">Unregister</string>
+    <string name="property_clear" translatable="false">Clear Log</string>
+    <string name="property_get" translatable="false">Get</string>
+    <string name="property_register" translatable="false">Register</string>
+    <string name="property_set" translatable="false">Set</string>
+    <string name="property_unregister" translatable="false">Unregister</string>
 
     <!-- radio test -->
-    <string name="radio_open">Open</string>
-    <string name="radio_close">Close</string>
-    <string name="radio_muted">Muted</string>
-    <string name="radio_unmuted">Unmuted</string>
-    <string name="radio_next">Next</string>
-    <string name="radio_prev">Previous</string>
-    <string name="radio_scan_cancel">Cancel scan</string>
-    <string name="radio_tune_to_station">Tune to Station</string>
-    <string name="radio_step_up">Step Up</string>
-    <string name="radio_step_down">Step Down</string>
-    <string name="radio_enter_station_hint">Enter Station Frequency (kHz)</string>
-    <string name="radio_get_program_info">getProgramInformation</string>
-    <string name="radio_am">AM</string>
-    <string name="radio_fm">FM</string>
-    <string name="radio_station_info">Station info: %1$s</string>
-    <string name="radio_channel_info">Channel info: %1$s kHz</string>
-    <string name="radio_song_info">Song info: %1$s</string>
-    <string name="radio_artist_info">Artist info: %1$s</string>
-    <string name="radio_na">N/A</string>
+    <string name="radio_open" translatable="false">Open</string>
+    <string name="radio_close" translatable="false">Close</string>
+    <string name="radio_muted" translatable="false">Muted</string>
+    <string name="radio_unmuted" translatable="false">Unmuted</string>
+    <string name="radio_next" translatable="false">Next</string>
+    <string name="radio_prev" translatable="false">Previous</string>
+    <string name="radio_scan_cancel" translatable="false">Cancel scan</string>
+    <string name="radio_tune_to_station" translatable="false">Tune to Station</string>
+    <string name="radio_step_up" translatable="false">Step Up</string>
+    <string name="radio_step_down" translatable="false">Step Down</string>
+    <string name="radio_enter_station_hint" translatable="false">Enter Station Frequency (kHz)</string>
+    <string name="radio_get_program_info" translatable="false">getProgramInformation</string>
+    <string name="radio_am" translatable="false">AM</string>
+    <string name="radio_fm" translatable="false">FM</string>
+    <string name="radio_station_info" translatable="false">Station info: %1$s</string>
+    <string name="radio_channel_info" translatable="false">Channel info: %1$s kHz</string>
+    <string name="radio_song_info" translatable="false">Song info: %1$s</string>
+    <string name="radio_artist_info" translatable="false">Artist info: %1$s</string>
+    <string name="radio_na" translatable="false">N/A</string>
 
     <!-- sensors test -->
-    <string name="location_title">Location/Orientation:</string>
-    <string name="sensor_title">Car Sensor Data:</string>
-    <string name="sensor_na">N/A</string>
+    <string name="location_title" translatable="false">Location/Orientation:</string>
+    <string name="sensor_title" translatable="false">Car Sensor Data:</string>
+    <string name="sensor_na" translatable="false">N/A</string>
 
-    <string name="sensor_environment">Environment[%1$s]: temperature=%2$s</string>
-    <string name="sensor_night">Night[%1$s]: isNight=%2$s</string>
-    <string name="sensor_gear">Gear[%1$s]: gear=%2$s</string>
-    <string name="sensor_parking_brake">Parking brake[%1$s]: isEngaged=%2$s</string>
-    <string name="sensor_odometer">Odometer[%1$s]: kms=%2$s</string>
-    <string name="sensor_rpm">RPM[%1$s]: rpm=%2$s</string>
-    <string name="sensor_speed">Speed[%1$s]: speed=%2$s</string>
-    <string name="sensor_ignition_status">Ignition status[%1$s]: status=%2$s</string>
-    <string name="sensor_wheel_ticks">Wheel Distance[%1$s]: reset=%2$s, FL=%3$s, FR=%4$s, RL=%5$s, RR=%6$s</string>
-    <string name="sensor_wheel_ticks_cfg">Wheel Distance Config: Wheels=%1$s, FL=%2$s, FR=%3$s, RL=%4$s, RR=%5$s</string>
-    <string name="sensor_abs_is_active">ABS[%1$s]: isActive=%2$s</string>
-    <string name="sensor_traction_control_is_active">Traction Control[%1$s]: isActive=%2$s</string>
-    <string name="sensor_fuel_level">Fuel Level[%1$s]: %2$s</string>
-    <string name="sensor_fuel_door_open">Fuel Door Open[%1$s]: %2$s</string>
-    <string name="sensor_engine_oil_level">Engine Oil Level[%1$s]: %2$s</string>
-    <string name="sensor_engine_is_on">Engine Is On[%1$s]: %2$s</string>
-    <string name="sensor_ev_battery_level">EV Battery Level[%1$s]: %2$s</string>
-    <string name="sensor_ev_charge_port_is_open">EV Charge Port Is Open[%1$s]: %2$s</string>
-    <string name="sensor_ev_charge_port_is_connected">EV Charge Port Is Connected[%1$s]: %2$s</string>
-    <string name="sensor_ev_charge_rate">EV Charge Rate[%1$s]: %2$s</string>
-    <string name="sensor_oil_level">Oil Level[%1$s]: %2$s</string>
+    <string name="sensor_environment" translatable="false">Environment[%1$s]: temperature=%2$s</string>
+    <string name="sensor_night" translatable="false">Night[%1$s]: isNight=%2$s</string>
+    <string name="sensor_gear" translatable="false">Gear[%1$s]: gear=%2$s</string>
+    <string name="sensor_parking_brake" translatable="false">Parking brake[%1$s]: isEngaged=%2$s</string>
+    <string name="sensor_odometer" translatable="false">Odometer[%1$s]: kms=%2$s</string>
+    <string name="sensor_rpm" translatable="false">RPM[%1$s]: rpm=%2$s</string>
+    <string name="sensor_speed" translatable="false">Speed[%1$s]: speed=%2$s</string>
+    <string name="sensor_ignition_status" translatable="false">Ignition status[%1$s]: status=%2$s</string>
+    <string name="sensor_wheel_ticks" translatable="false">Wheel Distance[%1$s]: reset=%2$s, FL=%3$s, FR=%4$s, RL=%5$s, RR=%6$s</string>
+    <string name="sensor_wheel_ticks_cfg" translatable="false">Wheel Distance Config: Wheels=%1$s, FL=%2$s, FR=%3$s, RL=%4$s, RR=%5$s</string>
+    <string name="sensor_abs_is_active" translatable="false">ABS[%1$s]: isActive=%2$s</string>
+    <string name="sensor_traction_control_is_active" translatable="false">Traction Control[%1$s]: isActive=%2$s</string>
+    <string name="sensor_fuel_level" translatable="false">Fuel Level[%1$s]: %2$s</string>
+    <string name="sensor_fuel_door_open" translatable="false">Fuel Door Open[%1$s]: %2$s</string>
+    <string name="sensor_engine_oil_level" translatable="false">Engine Oil Level[%1$s]: %2$s</string>
+    <string name="sensor_engine_is_on" translatable="false">Engine Is On[%1$s]: %2$s</string>
+    <string name="sensor_ev_battery_level" translatable="false">EV Battery Level[%1$s]: %2$s</string>
+    <string name="sensor_ev_charge_port_is_open" translatable="false">EV Charge Port Is Open[%1$s]: %2$s</string>
+    <string name="sensor_ev_charge_port_is_connected" translatable="false">EV Charge Port Is Connected[%1$s]: %2$s</string>
+    <string name="sensor_ev_charge_rate" translatable="false">EV Charge Rate[%1$s]: %2$s</string>
+    <string name="sensor_oil_level" translatable="false">Oil Level[%1$s]: %2$s</string>
 
-    <string name="volume_test">Volume Test</string>
-    <string name="volume_up_logical">Vol +</string>
-    <string name="volume_down_logical">Vol -</string>
-    <string name="refresh_volume">Refresh volumes</string>
+    <string name="volume_test" translatable="false">Volume Test</string>
+    <string name="volume_up_logical" translatable="false">Vol +</string>
+    <string name="volume_down_logical" translatable="false">Vol -</string>
+    <string name="refresh_volume" translatable="false">Refresh volumes</string>
 
     <!-- Bluetooth Tests -->
     <string name="sms_recipient_label" translatable="false">Recipient #</string>
@@ -236,31 +250,31 @@
     <string name="sms_listing_label_count" translatable="false">Count</string>
     <string name="sms_listing_label_offset" translatable="false">Offset</string>
     <string name="sms_activity_label" translatable="false">Bt Sms Tester</string>
-    <string name="sms_enter_tel_num">Enter Tel Num to send msg to</string>
+    <string name="sms_enter_tel_num" translatable="false">Enter Tel Num to send msg to</string>
     <string name="sms_reply_busy" translatable="false">Reply "I'm Busy"</string>
     <string name="sms_reply_sent" translatable="false">Reply Sent</string>
     <string name="sms_reply_delivered" translatable="false">Reply Delivered</string>
-    <string name="bluetooth_profile_connect">Profile connect</string>
-    <string name="bluetooth_profile_disconnect">Profile disconnect</string>
-    <string name="bluetooth_sco_connect">SCO connect</string>
-    <string name="bluetooth_sco_disconnect">SCO disconnect</string>
-    <string name="bluetooth_pick_device">Pick Device</string>
-    <string name="bluetooth_quiet_mode_enable">Quiet Mode</string>
-    <string name="bluetooth_hold_call">Hold call</string>
-    <string name="bluetooth_voice_recognition_enable">Start Voice Recognition</string>
-    <string name="bluetooth_voice_recognition_disable">Stop Voice Recognition</string>
-    <string name="uploading_supported_feature">Uploading_Supported bit value</string>
+    <string name="bluetooth_profile_connect" translatable="false">Profile connect</string>
+    <string name="bluetooth_profile_disconnect" translatable="false">Profile disconnect</string>
+    <string name="bluetooth_sco_connect" translatable="false">SCO connect</string>
+    <string name="bluetooth_sco_disconnect" translatable="false">SCO disconnect</string>
+    <string name="bluetooth_pick_device" translatable="false">Pick Device</string>
+    <string name="bluetooth_quiet_mode_enable" translatable="false">Quiet Mode</string>
+    <string name="bluetooth_hold_call" translatable="false">Hold call</string>
+    <string name="bluetooth_voice_recognition_enable" translatable="false">Start Voice Recognition</string>
+    <string name="bluetooth_voice_recognition_disable" translatable="false">Stop Voice Recognition</string>
+    <string name="uploading_supported_feature" translatable="false">Uploading_Supported bit value</string>
 
     <!--Car Service Settings-->
-    <string name="garage_title">Garage Mode</string>
-    <string name="garage_description">Customize your system maintenance</string>
-    <string name="regular_wake_up">Maintenance time</string>
-    <string name="garage_switch">Enable garage maintenance</string>
-    <string name="garage_enabled">Garage maintenance on</string>
-    <string name="garage_disabled">Garage maintenance off</string>
-    <string name="garage_limit">Maximum garage maintenance window</string>
-    <string name="car_settings">Car Settings</string>
-    <string-array name="garage_limit_keys">
+    <string name="garage_title" translatable="false">Garage Mode</string>
+    <string name="garage_description" translatable="false">Customize your system maintenance</string>
+    <string name="regular_wake_up" translatable="false">Maintenance time</string>
+    <string name="garage_switch" translatable="false">Enable garage maintenance</string>
+    <string name="garage_enabled" translatable="false">Garage maintenance on</string>
+    <string name="garage_disabled" translatable="false">Garage maintenance off</string>
+    <string name="garage_limit" translatable="false">Maximum garage maintenance window</string>
+    <string name="car_settings" translatable="false">Car Settings</string>
+    <string-array name="garage_limit_keys" translatable="false">
         <item>5 Minutes</item>
         <item>10 Minutes</item>
         <item>15 Minutes</item>
@@ -270,27 +284,35 @@
         <item>"10"</item>
         <item>"15"</item>
     </string-array>
-    <string name="garage_time_limit_summary">%d minutes</string>
+    <string name="garage_time_limit_summary" translatable="false">%d minutes</string>
 
-    <string name="portrait_activity">Portrait Activity</string>
-    <string name="landscpae_activity">Landscape Activity</string>
-    <string name="finish">Finish</string>
+    <string name="portrait_activity" translatable="false">Portrait Activity</string>
+    <string name="landscpae_activity" translatable="false">Landscape Activity</string>
+    <string name="finish" translatable="false">Finish</string>
 
     <!-- USB Manager Settings -->
-    <string name="usb_title">USB Devices settings</string>
-    <string name="usb_description">Customize your USB Devices settings</string>
-    <string name="usb_available_devices">Connected devices</string>
-    <string name="usb_saved_devices">Saved devices</string>
-    <string name="usb_pref_delete_title">Remove handling app for USB device</string>
-    <string name="usb_pref_delete_message">Are you sure you wan to delete dafault handling app for %1$s?</string>
-    <string name="usb_pref_delete_yes">Yes</string>
-    <string name="usb_pref_delete_cancel">Cancel</string>
-    <string name="usb_resolving_handlers">Getting supported handlers</string>
+    <string name="usb_title" translatable="false">USB Devices settings</string>
+    <string name="usb_description" translatable="false">Customize your USB Devices settings</string>
+    <string name="usb_available_devices" translatable="false">Connected devices</string>
+    <string name="usb_saved_devices" translatable="false">Saved devices</string>
+    <string name="usb_pref_delete_title" translatable="false">Remove handling app for USB device</string>
+    <string name="usb_pref_delete_message" translatable="false">Are you sure you wan to delete dafault handling app for %1$s?</string>
+    <string name="usb_pref_delete_yes" translatable="false">Yes</string>
+    <string name="usb_pref_delete_cancel" translatable="false">Cancel</string>
+    <string name="usb_resolving_handlers" translatable="false">Getting supported handlers</string>
 
     <!-- Action to start assistant activity -->
     <string name="assistant_activity_action" translatable="false">"com.google.android.demandspace.START"</string>
 
     <!-- Virtual Display -->
-    <string name="av_start_activity">Start Activity</string>
-    <string name="av_resize">Resize</string>
+    <string name="av_start_activity" translatable="false">Start Activity</string>
+    <string name="av_resize" translatable="false">Resize</string>
+
+    <string name="weblink_google" translatable="false">www.google.com</string>
+    <string name="weblink_nytimes" translatable="false">www.nytimes.com</string>
+    <string name="weblink_support_name" translatable="false">support.google.com</string>
+    <string name="weblink_support" translatable="false">https://support.google.com/chrome/answer/95414?hl=en&amp;ref_topic=7438008</string>
+
+    <!-- Users -->
+    <string name="users_apply_button" translatable="false">Apply</string>
 </resources>
diff --git a/tests/EmbeddedKitchenSinkApp/res/values/styles.xml b/tests/EmbeddedKitchenSinkApp/res/values/styles.xml
index f16d19d..1dcaa55 100644
--- a/tests/EmbeddedKitchenSinkApp/res/values/styles.xml
+++ b/tests/EmbeddedKitchenSinkApp/res/values/styles.xml
@@ -30,13 +30,10 @@
         <item name="android:layout_width">@dimen/overview_icon_size</item>
         <item name="android:layout_height">@dimen/overview_icon_size</item>
         <item name="android:padding">6dp</item>
-        <item name="android:background">?android:attr/selectableItemBackgroundBorderless</item>
-        <item name="android:tint">@color/car_button_tint</item>
         <item name="android:scaleType">fitCenter</item>
         <item name="android:clickable">true</item>
     </style>
 
-    <style name="KitchenSinkActivityTheme" parent="Theme.Car.Light.NoActionBar.Drawer">
-        <item name="android:colorPrimary">@android:color/transparent</item>
+    <style name="KitchenSinkActivityTheme" parent="Theme.NoActionBar.Drawer">
     </style>
 </resources>
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/KitchenSinkActivity.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/KitchenSinkActivity.java
index 3b8b435..38c5bc2 100644
--- a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/KitchenSinkActivity.java
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/KitchenSinkActivity.java
@@ -18,7 +18,6 @@
 
 import android.car.Car;
 import android.car.CarAppFocusManager;
-import android.car.CarNotConnectedException;
 import android.car.hardware.CarSensorManager;
 import android.car.hardware.hvac.CarHvacManager;
 import android.car.hardware.power.CarPowerManager;
@@ -33,17 +32,19 @@
 import android.os.IBinder;
 import android.util.Log;
 
-import androidx.car.drawer.CarDrawerActivity;
 import androidx.car.drawer.CarDrawerAdapter;
 import androidx.car.drawer.DrawerItemViewHolder;
 import androidx.fragment.app.Fragment;
 
+import com.android.car.apps.common.DrawerActivity;
+
 import com.google.android.car.kitchensink.activityview.ActivityViewTestFragment;
 import com.google.android.car.kitchensink.alertdialog.AlertDialogTestFragment;
 import com.google.android.car.kitchensink.assistant.CarAssistantFragment;
 import com.google.android.car.kitchensink.audio.AudioTestFragment;
 import com.google.android.car.kitchensink.bluetooth.BluetoothHeadsetFragment;
 import com.google.android.car.kitchensink.bluetooth.MapMceTestFragment;
+import com.google.android.car.kitchensink.carboard.KeyboardTestFragment;
 import com.google.android.car.kitchensink.cluster.InstrumentClusterFragment;
 import com.google.android.car.kitchensink.connectivity.ConnectivityFragment;
 import com.google.android.car.kitchensink.cube.CubesTestFragment;
@@ -59,13 +60,16 @@
 import com.google.android.car.kitchensink.setting.CarServiceSettingsActivity;
 import com.google.android.car.kitchensink.storagelifetime.StorageLifetimeFragment;
 import com.google.android.car.kitchensink.touch.TouchTestFragment;
+import com.google.android.car.kitchensink.users.UsersFragment;
 import com.google.android.car.kitchensink.vhal.VehicleHalFragment;
 import com.google.android.car.kitchensink.volume.VolumeTestFragment;
+import com.google.android.car.kitchensink.weblinks.WebLinksTestFragment;
 
-import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
-public class KitchenSinkActivity extends CarDrawerActivity {
+
+public class KitchenSinkActivity extends DrawerActivity {
     private static final String TAG = "KitchenSinkActivity";
 
     private interface ClickHandler {
@@ -141,45 +145,40 @@
         }
     }
 
-    private final List<MenuEntry> mMenuEntries = new ArrayList<MenuEntry>() {
-        {
-            add("alert window", AlertDialogTestFragment.class);
-            add("assistant", CarAssistantFragment.class);
-            add("audio", AudioTestFragment.class);
-            add("bluetooth headset",BluetoothHeadsetFragment.class);
-            add("bluetooth messaging test", MapMceTestFragment.class);
-            add("cubes test", CubesTestFragment.class);
-            add("diagnostic", DiagnosticTestFragment.class);
-            add("display info", DisplayInfoFragment.class);
-            add("hvac", HvacTestFragment.class);
-            add("inst cluster", InstrumentClusterFragment.class);
-            add("input test", InputTestFragment.class);
-            add("notification", NotificationFragment.class);
-            add("orientation test", OrientationTestFragment.class);
-            add("power test", PowerTestFragment.class);
-            add("property test", PropertyTestFragment.class);
-            add("sensors", SensorsTestFragment.class);
-            add("storage lifetime", StorageLifetimeFragment.class);
-            add("touch test", TouchTestFragment.class);
-            add("volume test", VolumeTestFragment.class);
-            add("vehicle hal", VehicleHalFragment.class);
-            add("car service settings", () -> {
+    private final List<MenuEntry> mMenuEntries = Arrays.asList(
+            new FragmentMenuEntry("activity view", ActivityViewTestFragment.class),
+            new FragmentMenuEntry("alert window", AlertDialogTestFragment.class),
+            new FragmentMenuEntry("assistant", CarAssistantFragment.class),
+            new FragmentMenuEntry("audio", AudioTestFragment.class),
+            new FragmentMenuEntry("bluetooth headset", BluetoothHeadsetFragment.class),
+            new FragmentMenuEntry("bluetooth messaging test", MapMceTestFragment.class),
+            new OnClickMenuEntry("car service settings", () -> {
                 Intent intent = new Intent(KitchenSinkActivity.this,
-                    CarServiceSettingsActivity.class);
+                        CarServiceSettingsActivity.class);
                 startActivity(intent);
-            });
-            add("activity view", ActivityViewTestFragment.class);
-            add("connectivity", ConnectivityFragment.class);
-            add("quit", KitchenSinkActivity.this::finish);
-        }
+            }),
+            new FragmentMenuEntry("carboard", KeyboardTestFragment.class),
+            new FragmentMenuEntry("connectivity", ConnectivityFragment.class),
+            new FragmentMenuEntry("cubes test", CubesTestFragment.class),
+            new FragmentMenuEntry("diagnostic", DiagnosticTestFragment.class),
+            new FragmentMenuEntry("display info", DisplayInfoFragment.class),
+            new FragmentMenuEntry("hvac", HvacTestFragment.class),
+            new FragmentMenuEntry("inst cluster", InstrumentClusterFragment.class),
+            new FragmentMenuEntry("input test", InputTestFragment.class),
+            new FragmentMenuEntry("notification", NotificationFragment.class),
+            new FragmentMenuEntry("orientation test", OrientationTestFragment.class),
+            new FragmentMenuEntry("power test", PowerTestFragment.class),
+            new FragmentMenuEntry("property test", PropertyTestFragment.class),
+            new FragmentMenuEntry("sensors", SensorsTestFragment.class),
+            new FragmentMenuEntry("storage lifetime", StorageLifetimeFragment.class),
+            new FragmentMenuEntry("touch test", TouchTestFragment.class),
+            new FragmentMenuEntry("users", UsersFragment.class),
+            new FragmentMenuEntry("volume test", VolumeTestFragment.class),
+            new FragmentMenuEntry("vehicle hal", VehicleHalFragment.class),
+            new FragmentMenuEntry("web links", WebLinksTestFragment.class),
+            new OnClickMenuEntry("quit", KitchenSinkActivity.this::finish)
+    );
 
-        <T extends Fragment> void add(String text, Class<T> clazz) {
-            add(new FragmentMenuEntry(text, clazz));
-        }
-        void add(String text, ClickHandler onClick) {
-            add(new OnClickMenuEntry(text, onClick));
-        }
-    };
     private Car mCarApi;
     private CarHvacManager mHvacManager;
     private CarPowerManager mPowerManager;
@@ -204,17 +203,36 @@
         return mSensorManager;
     }
 
+    /* Open any tab directly:
+     * adb shell am force-stop com.google.android.car.kitchensink
+     * adb shell am start -n com.google.android.car.kitchensink/.KitchenSinkActivity \
+     *     --es "select" "connectivity"
+     */
+    @Override
+    protected void onNewIntent(Intent intent) {
+        super.onNewIntent(intent);
+        Log.i(TAG, "onNewIntent");
+        Bundle extras = intent.getExtras();
+        String select = (extras == null) ? null : extras.getString("select");
+        if (select != null) {
+            mMenuEntries.stream().filter(me -> select.equals(me.getText()))
+                    .findAny().ifPresent(me -> me.onClick());
+        }
+    }
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        setToolbarElevation(0f);
-        setMainContent(R.layout.kitchen_content);
-        getDrawerController().setRootAdapter(new DrawerAdapter());
+        setContentView(R.layout.kitchen_content);
+
         // Connection to Car Service does not work for non-automotive yet.
         if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)) {
             initCarApi();
         }
         Log.i(TAG, "onCreate");
+        getDrawerController().setRootAdapter(new DrawerAdapter());
+
+        onNewIntent(getIntent());
     }
 
     private void initCarApi() {
@@ -276,21 +294,17 @@
         public void onServiceConnected(ComponentName name, IBinder service) {
             Log.d(TAG, "Connected to Car Service");
             synchronized (mPropertyManagerReady) {
-                try {
-                    mHvacManager = (CarHvacManager) mCarApi.getCarManager(
-                            android.car.Car.HVAC_SERVICE);
-                    mPowerManager = (CarPowerManager) mCarApi.getCarManager(
-                            android.car.Car.POWER_SERVICE);
-                    mPropertyManager = (CarPropertyManager) mCarApi.getCarManager(
-                            android.car.Car.PROPERTY_SERVICE);
-                    mSensorManager = (CarSensorManager) mCarApi.getCarManager(
-                            android.car.Car.SENSOR_SERVICE);
-                    mCarAppFocusManager =
-                            (CarAppFocusManager) mCarApi.getCarManager(Car.APP_FOCUS_SERVICE);
-                    mPropertyManagerReady.notifyAll();
-                } catch (CarNotConnectedException e) {
-                    Log.e(TAG, "Car is not connected!", e);
-                }
+                mHvacManager = (CarHvacManager) mCarApi.getCarManager(
+                        android.car.Car.HVAC_SERVICE);
+                mPowerManager = (CarPowerManager) mCarApi.getCarManager(
+                        android.car.Car.POWER_SERVICE);
+                mPropertyManager = (CarPropertyManager) mCarApi.getCarManager(
+                        android.car.Car.PROPERTY_SERVICE);
+                mSensorManager = (CarSensorManager) mCarApi.getCarManager(
+                        android.car.Car.SENSOR_SERVICE);
+                mCarAppFocusManager =
+                        (CarAppFocusManager) mCarApi.getCarManager(Car.APP_FOCUS_SERVICE);
+                mPropertyManagerReady.notifyAll();
             }
         }
 
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/audio/AudioPlayer.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/audio/AudioPlayer.java
index 74345aa..c13b0be 100644
--- a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/audio/AudioPlayer.java
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/audio/AudioPlayer.java
@@ -50,27 +50,37 @@
 
         @Override
         public void onAudioFocusChange(int focusChange) {
-            Log.i(TAG, "audio focus change " + focusChange);
             if (mPlayer == null) {
+                Log.e(TAG, "mPlayer is null");
                 return;
             }
             if (focusChange == AudioManager.AUDIOFOCUS_GAIN) {
+                Log.i(TAG, "Audio focus change AUDIOFOCUS_GAIN for usage " + mAttrib.getUsage());
                 mPlayer.setVolume(1.0f, 1.0f);
                 if (mRepeat && isPlaying()) {
-                    doResume();
+                    // Resume
+                    Log.i(TAG, "resuming player");
+                    mPlayer.start();
                 }
             } else if (focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK) {
-                if (isPlaying()) {
-                    // Duck to 20% volume (which matches system ducking as of this date)
-                    mPlayer.setVolume(0.2f, 0.2f);
-                }
-            } else if (focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT && mRepeat) {
-                if (isPlaying()) {
-                    doPause();
+                // While we used to setVolume on the player to 20%, we don't do this anymore
+                // because we expect the car's audio hal do handle ducking as it sees fit.
+                Log.i(TAG, "Audio focus change AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK -> do nothing");
+            } else if (focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT) {
+                Log.i(TAG, "Audio focus change AUDIOFOCUS_LOSS_TRANSIENT for usage "
+                        + mAttrib.getUsage());
+                if (mRepeat && isPlaying()) {
+                    Log.i(TAG, "pausing repeating player");
+                    mPlayer.pause();
+                } else {
+                    Log.i(TAG, "stopping one shot player");
+                    stop();
                 }
             } else {
+                Log.e(TAG, "Unrecognized audio focus change " + focusChange);
                 if (isPlaying()) {
-                    doStop();
+                    Log.i(TAG, "stopping player");
+                    stop();
                 }
             }
         }
@@ -102,13 +112,18 @@
         mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
         int ret = AudioManager.AUDIOFOCUS_REQUEST_GRANTED;
         if (mHandleFocus) {
+            // NOTE:  We are CONSCIOUSLY asking for focus again even if already playing in order
+            // exercise the framework's focus logic when faced with a (sloppy) application which
+            // might do this.
+            Log.i(TAG, "Asking for focus for usage " + mAttrib.getUsage());
             ret = mAudioManager.requestAudioFocus(mFocusListener, mAttrib,
                     focusRequest, 0);
         }
         if (ret == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
+            Log.i(TAG, "MediaPlayer got focus for usage " + mAttrib.getUsage());
             doStart();
         } else {
-            Log.i(TAG, "no focus");
+            Log.i(TAG, "MediaPlayer denied focus for usage " + mAttrib.getUsage());
         }
     }
 
@@ -144,10 +159,10 @@
         mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
             @Override
             public void onCompletion(MediaPlayer mp) {
+                Log.i(TAG, "AudioPlayer onCompletion");
                 mPlaying.set(false);
                 if (!mRepeat && mHandleFocus) {
                     mPlayer.stop();
-                    mPlayer.release();
                     mPlayer = null;
                     mAudioManager.abandonAudioFocus(mFocusListener);
                     if (mListener != null) {
@@ -163,7 +178,7 @@
             AssetFileDescriptor afd =
                     mContext.getResources().openRawResourceFd(mResourceId);
             if (afd == null) {
-                throw new RuntimeException("no res");
+                throw new RuntimeException("resource not found");
             }
             mPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(),
                     afd.getLength());
@@ -176,35 +191,18 @@
     }
 
     public void stop() {
-        doStop();
-        if (mHandleFocus) {
-            mAudioManager.abandonAudioFocus(mFocusListener);
-        }
-    }
-
-    public void release() {
-        if (isPlaying()) {
-            stop();
-        }
-    }
-
-    private void doStop() {
         if (!mPlaying.getAndSet(false)) {
             Log.i(TAG, "already stopped");
             return;
         }
-        Log.i(TAG, "doStop audio");
+        Log.i(TAG, "stop");
+
         mPlayer.stop();
-        mPlayer.release();
         mPlayer = null;
-    }
 
-    private void doPause() {
-        mPlayer.pause();
-    }
-
-    private void doResume() {
-        mPlayer.start();
+        if (mHandleFocus) {
+            mAudioManager.abandonAudioFocus(mFocusListener);
+        }
     }
 
     public boolean isPlaying() {
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/audio/AudioTestFragment.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/audio/AudioTestFragment.java
index 6325512..eae8485 100644
--- a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/audio/AudioTestFragment.java
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/audio/AudioTestFragment.java
@@ -20,7 +20,6 @@
 import android.car.CarAppFocusManager;
 import android.car.CarAppFocusManager.OnAppFocusChangedListener;
 import android.car.CarAppFocusManager.OnAppFocusOwnershipCallback;
-import android.car.CarNotConnectedException;
 import android.car.media.CarAudioManager;
 import android.content.ComponentName;
 import android.content.Context;
@@ -101,30 +100,18 @@
         mCar = Car.createCar(mContext, new ServiceConnection() {
             @Override
             public void onServiceConnected(ComponentName name, IBinder service) {
-                try {
-                    mAppFocusManager =
-                            (CarAppFocusManager) mCar.getCarManager(Car.APP_FOCUS_SERVICE);
-                } catch (CarNotConnectedException e) {
-                    throw new RuntimeException("Failed to create app focus manager", e);
-                }
-                try {
-                    OnAppFocusChangedListener listener = new OnAppFocusChangedListener() {
-                        @Override
-                        public void onAppFocusChanged(int appType, boolean active) {
-                        }
-                    };
-                    mAppFocusManager.addFocusListener(listener,
-                            CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION);
-                    mAppFocusManager.addFocusListener(listener,
-                            CarAppFocusManager.APP_FOCUS_TYPE_VOICE_COMMAND);
-                } catch (CarNotConnectedException e) {
-                    Log.e(TAG, "Failed to register focus listener", e);
-                }
-                try {
-                    mCarAudioManager = (CarAudioManager) mCar.getCarManager(Car.AUDIO_SERVICE);
-                } catch (CarNotConnectedException e) {
-                    throw new RuntimeException("Failed to create audio manager", e);
-                }
+                mAppFocusManager =
+                        (CarAppFocusManager) mCar.getCarManager(Car.APP_FOCUS_SERVICE);
+                OnAppFocusChangedListener listener = new OnAppFocusChangedListener() {
+                    @Override
+                    public void onAppFocusChanged(int appType, boolean active) {
+                    }
+                };
+                mAppFocusManager.addFocusListener(listener,
+                        CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION);
+                mAppFocusManager.addFocusListener(listener,
+                        CarAppFocusManager.APP_FOCUS_TYPE_VOICE_COMMAND);
+                mCarAudioManager = (CarAudioManager) mCar.getCarManager(Car.AUDIO_SERVICE);
                 mMusicAudioAttrib = new AudioAttributes.Builder()
                         .setUsage(AudioAttributes.USAGE_MEDIA)
                         .build();
@@ -132,7 +119,7 @@
                         .setUsage(AudioAttributes.USAGE_ASSISTANCE_NAVIGATION_GUIDANCE)
                         .build();
                 mVrAudioAttrib = new AudioAttributes.Builder()
-                        .setUsage(AudioAttributes.USAGE_ASSISTANCE_NAVIGATION_GUIDANCE)
+                        .setUsage(AudioAttributes.USAGE_ASSISTANT)
                         .build();
                 mRadioAudioAttrib = new AudioAttributes.Builder()
                         .setUsage(AudioAttributes.USAGE_MEDIA)
@@ -147,7 +134,6 @@
                         mMusicAudioAttrib);
                 mNavGuidancePlayer = new AudioPlayer(mContext, R.raw.turnright,
                         mNavAudioAttrib);
-                // no Usage for voice command yet.
                 mVrPlayer = new AudioPlayer(mContext, R.raw.one2six,
                         mVrAudioAttrib);
                 mSystemPlayer = new AudioPlayer(mContext, R.raw.ring_classic_01,
@@ -197,17 +183,14 @@
         view.findViewById(R.id.button_wav_play_stop).setOnClickListener(v -> mWavPlayer.stop());
         view.findViewById(R.id.button_nav_play_once).setOnClickListener(v -> {
             if (mAppFocusManager == null) {
+                Log.e(TAG, "mAppFocusManager is null");
                 return;
             }
             if (DBG) {
                 Log.i(TAG, "Nav start");
             }
-            try {
-                mAppFocusManager.requestAppFocus(
-                        CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION, mOwnershipCallbacks);
-            } catch (CarNotConnectedException e) {
-                Log.e(TAG, "Failed to set active focus", e);
-            }
+            mAppFocusManager.requestAppFocus(
+                    CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION, mOwnershipCallbacks);
             if (!mNavGuidancePlayer.isPlaying()) {
                 mNavGuidancePlayer.start(true, false,
                         AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK,
@@ -217,17 +200,14 @@
         });
         view.findViewById(R.id.button_vr_play_once).setOnClickListener(v -> {
             if (mAppFocusManager == null) {
+                Log.e(TAG, "mAppFocusManager is null");
                 return;
             }
             if (DBG) {
                 Log.i(TAG, "VR start");
             }
-            try {
-                mAppFocusManager.requestAppFocus(
-                        CarAppFocusManager.APP_FOCUS_TYPE_VOICE_COMMAND, mOwnershipCallbacks);
-            } catch (CarNotConnectedException e) {
-                Log.e(TAG, "Failed to set active focus", e);
-            }
+            mAppFocusManager.requestAppFocus(
+                    CarAppFocusManager.APP_FOCUS_TYPE_VOICE_COMMAND, mOwnershipCallbacks);
             if (!mVrPlayer.isPlaying()) {
                 mVrPlayer.start(true, false,
                         AudioManager.AUDIOFOCUS_GAIN_TRANSIENT,
@@ -300,23 +280,21 @@
 
     private void handleNavStart() {
         if (mAppFocusManager == null) {
+            Log.e(TAG, "mAppFocusManager is null");
             return;
         }
         if (DBG) {
             Log.i(TAG, "Nav start");
         }
-        try {
-            mAppFocusManager.requestAppFocus(CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION,
-                    mOwnershipCallbacks);
-            mAudioManager.requestAudioFocus(mNavFocusListener, mNavAudioAttrib,
-                    AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK, 0);
-        } catch (CarNotConnectedException e) {
-            Log.e(TAG, "Failed to set active focus", e);
-        }
+        mAppFocusManager.requestAppFocus(CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION,
+                mOwnershipCallbacks);
+        mAudioManager.requestAudioFocus(mNavFocusListener, mNavAudioAttrib,
+                AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK, 0);
     }
 
     private void handleNavEnd() {
         if (mAppFocusManager == null) {
+            Log.e(TAG, "mAppFocusManager is null");
             return;
         }
         if (DBG) {
@@ -329,23 +307,21 @@
 
     private void handleVrStart() {
         if (mAppFocusManager == null) {
+            Log.e(TAG, "mAppFocusManager is null");
             return;
         }
         if (DBG) {
             Log.i(TAG, "VR start");
         }
-        try {
-            mAppFocusManager.requestAppFocus(CarAppFocusManager.APP_FOCUS_TYPE_VOICE_COMMAND,
-                    mOwnershipCallbacks);
-            mAudioManager.requestAudioFocus(mVrFocusListener, mVrAudioAttrib,
-                    AudioManager.AUDIOFOCUS_GAIN_TRANSIENT, 0);
-        } catch (CarNotConnectedException e) {
-            Log.e(TAG, "Failed to set active focus", e);
-        }
+        mAppFocusManager.requestAppFocus(CarAppFocusManager.APP_FOCUS_TYPE_VOICE_COMMAND,
+                mOwnershipCallbacks);
+        mAudioManager.requestAudioFocus(mVrFocusListener, mVrAudioAttrib,
+                AudioManager.AUDIOFOCUS_GAIN_TRANSIENT, 0);
     }
 
     private void handleVrEnd() {
         if (mAppFocusManager == null) {
+            Log.e(TAG, "mAppFocusManager is null");
             return;
         }
         if (DBG) {
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/carboard/KeyboardTestFragment.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/carboard/KeyboardTestFragment.java
new file mode 100644
index 0000000..9b1508e
--- /dev/null
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/carboard/KeyboardTestFragment.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2018 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.google.android.car.kitchensink.carboard;
+
+import android.annotation.Nullable;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.fragment.app.Fragment;
+
+import com.google.android.car.kitchensink.R;
+
+public class KeyboardTestFragment extends Fragment {
+    @Override
+    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
+                             @Nullable Bundle savedInstanceState) {
+        return inflater.inflate(R.layout.input_type_test, container, false);
+    }
+}
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/cluster/ClusterContentProvider.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/cluster/ClusterContentProvider.java
new file mode 100644
index 0000000..4ad9b02
--- /dev/null
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/cluster/ClusterContentProvider.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright (C) 2018 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.google.android.car.kitchensink.cluster;
+
+import android.content.ContentProvider;
+import android.content.ContentValues;
+import android.content.UriMatcher;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.ParcelFileDescriptor;
+import android.util.Log;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.Files;
+import java.nio.file.StandardCopyOption;
+
+/**
+ * Image Content Provider for the car instument cluster
+ */
+public class ClusterContentProvider extends ContentProvider {
+    private static final String TAG = "ClusterContentProvider";
+    private static final String AUTHORITY =
+            "com.google.android.car.kitchensink.cluster.clustercontentprovider";
+
+    private UriMatcher mUriMatcher;
+    private static final int URI_IMAGE_CODE = 1;
+
+    @Override
+    public boolean onCreate() {
+        mUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
+        mUriMatcher.addURI(AUTHORITY, "img/*", URI_IMAGE_CODE);
+
+        return true;
+    }
+
+    @Override
+    public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {
+        switch (mUriMatcher.match(uri)) {
+            case URI_IMAGE_CODE:
+                // Tries to get the img file from internal cache
+                String filename = new File(uri.getPath()).getName();
+                File imageFile = new File(
+                        getContext().getCacheDir() + File.separator + uri.getLastPathSegment());
+
+                // If the file doesn't exist in internal cache,
+                // copy the file from res.raw into internal cache
+                if (!imageFile.exists()) {
+                    InputStream inputStream = getContext().getResources().openRawResource(
+                            getContext().getResources().getIdentifier(
+                                    filename.substring(0, filename.lastIndexOf(".")),
+                                    "raw",
+                                    getContext().getPackageName()));
+
+                    try {
+                        Files.copy(inputStream, imageFile.toPath(),
+                                StandardCopyOption.REPLACE_EXISTING);
+                    } catch (IOException e) {
+                        Log.e(TAG, "could not copy file to internal cache: " + uri.getPath(), e);
+                    }
+
+                    imageFile = new File(
+                            getContext().getCacheDir() + File.separator + uri.getLastPathSegment());
+                }
+
+                ParcelFileDescriptor image = ParcelFileDescriptor.open(imageFile,
+                        ParcelFileDescriptor.MODE_READ_ONLY);
+
+                return image;
+
+            default:
+                return null;
+        }
+    }
+
+
+    @Override
+    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
+            String sortOrder) {
+        return null;
+    }
+
+    @Override
+    public String getType(Uri uri) {
+        return null;
+    }
+
+    @Override
+    public Uri insert(Uri uri, ContentValues values) {
+        return null;
+    }
+
+    @Override
+    public int delete(Uri uri, String selection, String[] selectionArgs) {
+        return 0;
+    }
+
+    @Override
+    public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
+        return 0;
+    }
+}
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/cluster/FakeClusterNavigationActivity.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/cluster/FakeClusterNavigationActivity.java
index d50f053..1ef5449 100644
--- a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/cluster/FakeClusterNavigationActivity.java
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/cluster/FakeClusterNavigationActivity.java
@@ -18,14 +18,10 @@
 
 import android.app.Activity;
 import android.car.Car;
-import android.car.CarNotConnectedException;
-import android.car.cluster.CarInstrumentClusterManager;
 import android.car.cluster.ClusterActivityState;
-import android.content.ComponentName;
-import android.content.ServiceConnection;
+import android.content.Intent;
 import android.graphics.Rect;
 import android.os.Bundle;
-import android.os.IBinder;
 import android.util.Log;
 import android.widget.ImageView;
 import android.widget.RelativeLayout;
@@ -35,14 +31,9 @@
 /**
  * Fake navigation activity for instrument cluster.
  */
-public class FakeClusterNavigationActivity
-        extends Activity
-        implements CarInstrumentClusterManager.Callback {
-
+public class FakeClusterNavigationActivity extends Activity {
     private final static String TAG = FakeClusterNavigationActivity.class.getSimpleName();
 
-    private Car mCarApi;
-    private CarInstrumentClusterManager mClusterManager;
     private ImageView mUnobscuredArea;
 
     @Override
@@ -52,26 +43,27 @@
         setContentView(R.layout.fake_cluster_navigation_activity);
         mUnobscuredArea = findViewById(R.id.unobscuredArea);
 
-        mCarApi = Car.createCar(this /* context */, new ServiceConnection() {
-            @Override
-            public void onServiceConnected(ComponentName name, IBinder service) {
-                onCarConnected(mCarApi);
-            }
-
-            @Override
-            public void onServiceDisconnected(ComponentName name) {
-                onCarDisconnected(mCarApi);
-            }
-        });
-        Log.i(TAG, "Connecting to car api...");
-        mCarApi.connect();
+        handleIntent(getIntent());
     }
 
-
     @Override
-    public void onClusterActivityStateChanged(String category, Bundle clusterActivityState) {
-        ClusterActivityState state = ClusterActivityState.fromBundle(clusterActivityState);
-        Log.i(TAG, "onClusterActivityStateChanged, category: " + category + ", state: " + state);
+    protected void onNewIntent(Intent intent) {
+        super.onNewIntent(intent);
+        handleIntent(intent);
+    }
+
+    private void handleIntent(Intent intent) {
+        if (intent == null) {
+            Log.w(TAG, "Received a null intent");
+            return;
+        }
+        Bundle bundle = intent.getBundleExtra(Car.CAR_EXTRA_CLUSTER_ACTIVITY_STATE);
+        if (bundle == null) {
+            Log.w(TAG, "Received an intent without " + Car.CAR_EXTRA_CLUSTER_ACTIVITY_STATE);
+            return;
+        }
+        ClusterActivityState state = ClusterActivityState.fromBundle(bundle);
+        Log.i(TAG, "handling intent with state: " + state);
 
         Rect unobscured = state.getUnobscuredBounds();
         RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
@@ -79,26 +71,4 @@
         lp.setMargins(unobscured.left, unobscured.top, 0, 0);
         mUnobscuredArea.setLayoutParams(lp);
     }
-
-    private void onCarConnected(Car car) {
-        Log.i(TAG, "onCarConnected, car: " + car);
-        try {
-            mClusterManager = (CarInstrumentClusterManager) car.getCarManager(
-                    android.car.Car.CAR_INSTRUMENT_CLUSTER_SERVICE);
-        } catch (CarNotConnectedException e) {
-            throw new IllegalStateException(e);
-        }
-
-        try {
-            Log.i(TAG, "registering callback...");
-            mClusterManager.registerCallback(CarInstrumentClusterManager.CATEGORY_NAVIGATION, this);
-            Log.i(TAG, "callback registered");
-        } catch (android.car.CarNotConnectedException e) {
-            throw new IllegalStateException(e);
-        }
-    }
-
-    private void onCarDisconnected(Car car) {
-
-    }
 }
\ No newline at end of file
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/cluster/InstrumentClusterFragment.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/cluster/InstrumentClusterFragment.java
index ad4b93a..2c0e715 100644
--- a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/cluster/InstrumentClusterFragment.java
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/cluster/InstrumentClusterFragment.java
@@ -15,14 +15,11 @@
  */
 package com.google.android.car.kitchensink.cluster;
 
-import android.app.AlertDialog;
+import android.annotation.Nullable;
 import android.car.Car;
 import android.car.CarAppFocusManager;
-import android.car.CarNotConnectedException;
-import android.car.cluster.CarInstrumentClusterManager;
 import android.car.navigation.CarNavigationStatusManager;
 import android.content.ComponentName;
-import android.content.Intent;
 import android.content.ServiceConnection;
 import android.content.pm.PackageManager;
 import android.os.Bundle;
@@ -31,11 +28,11 @@
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.widget.Button;
 import android.widget.Toast;
 
 import androidx.annotation.IdRes;
 import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.car.cluster.navigation.NavigationState;
 import androidx.fragment.app.Fragment;
 
@@ -47,10 +44,8 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
-import java.util.Arrays;
 import java.util.Timer;
 import java.util.TimerTask;
-import java.util.stream.Collectors;
 
 /**
  * Contains functions to test instrument cluster API.
@@ -65,35 +60,57 @@
     private Car mCarApi;
     private Timer mTimer;
     private NavigationState[] mNavStateData;
+    private Button mTurnByTurnButton;
 
-    private final ServiceConnection mServiceConnection = new ServiceConnection() {
-            @Override
-            public void onServiceConnected(ComponentName name, IBinder service) {
-                Log.d(TAG, "Connected to Car Service");
-                try {
-                    mCarNavigationStatusManager =
-                            (CarNavigationStatusManager) mCarApi.getCarManager(
-                                    Car.CAR_NAVIGATION_SERVICE);
-                    mCarAppFocusManager =
-                        (CarAppFocusManager) mCarApi.getCarManager(Car.APP_FOCUS_SERVICE);
-                } catch (CarNotConnectedException e) {
-                    Log.e(TAG, "Car is not connected!", e);
-                }
-            }
+    private ServiceConnection mCarServiceConnection = new ServiceConnection() {
+        @Override
+        public void onServiceConnected(ComponentName name, IBinder service) {
+            Log.d(TAG, "Connected to Car Service");
+            mCarNavigationStatusManager = (CarNavigationStatusManager) mCarApi
+                    .getCarManager(Car.CAR_NAVIGATION_SERVICE);
+            mCarAppFocusManager = (CarAppFocusManager) mCarApi
+                    .getCarManager(Car.APP_FOCUS_SERVICE);
+        }
 
-            @Override
-            public void onServiceDisconnected(ComponentName name) {
-                Log.d(TAG, "Disconnect from Car Service");
-            }
+        @Override
+        public void onServiceDisconnected(ComponentName name) {
+            Log.d(TAG, "Disconnect from Car Service");
+        }
     };
 
+    private final CarAppFocusManager.OnAppFocusOwnershipCallback mFocusCallback =
+            new CarAppFocusManager.OnAppFocusOwnershipCallback() {
+        @Override
+        public void onAppFocusOwnershipLost(@CarAppFocusManager.AppFocusType int appType) {
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "onAppFocusOwnershipLost, appType: " + appType);
+            }
+            Toast.makeText(getContext(), getText(R.string.cluster_nav_app_context_loss),
+                    Toast.LENGTH_LONG).show();
+        }
+
+        @Override
+        public void onAppFocusOwnershipGranted(@CarAppFocusManager.AppFocusType int appType) {
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "onAppFocusOwnershipGranted, appType: " + appType);
+            }
+        }
+    };
+    private CarAppFocusManager.OnAppFocusChangedListener mOnAppFocusChangedListener =
+            (appType, active) -> {
+                if (Log.isLoggable(TAG, Log.DEBUG)) {
+                    Log.d(TAG, "onAppFocusChanged, appType: " + appType + " active: " + active);
+                }
+            };
+
+
     private void initCarApi() {
         if (mCarApi != null && mCarApi.isConnected()) {
             mCarApi.disconnect();
             mCarApi = null;
         }
 
-        mCarApi = Car.createCar(getContext(), mServiceConnection);
+        mCarApi = Car.createCar(getContext(), mCarServiceConnection);
         mCarApi.connect();
     }
 
@@ -122,7 +139,7 @@
         InputStream inputStream = getResources().openRawResource(resId);
         BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
         StringBuilder builder = new StringBuilder();
-        for (String line = null; (line = reader.readLine()) != null; ) {
+        for (String line; (line = reader.readLine()) != null; ) {
             builder.append(line).append("\n");
         }
         return builder.toString();
@@ -135,8 +152,10 @@
         View view = inflater.inflate(R.layout.instrument_cluster, container, false);
 
         view.findViewById(R.id.cluster_start_button).setOnClickListener(v -> initCluster());
-        view.findViewById(R.id.cluster_turn_left_button).setOnClickListener(v -> toogleSendTurn());
-        view.findViewById(R.id.cluster_start_activity).setOnClickListener(v -> startNavActivity());
+        view.findViewById(R.id.cluster_stop_button).setOnClickListener(v -> stopCluster());
+
+        mTurnByTurnButton = view.findViewById(R.id.cluster_turn_left_button);
+        mTurnByTurnButton.setOnClickListener(v -> toggleSendTurn());
 
         return view;
     }
@@ -147,124 +166,90 @@
         super.onCreate(savedInstanceState);
     }
 
-    private void startNavActivity() {
-        CarInstrumentClusterManager clusterManager;
-        try {
-            clusterManager = (CarInstrumentClusterManager) mCarApi.getCarManager(
-                    android.car.Car.CAR_INSTRUMENT_CLUSTER_SERVICE);
-        } catch (CarNotConnectedException e) {
-            Log.e(TAG, "Failed to get CarInstrumentClusterManager", e);
-            Toast.makeText(getContext(), "Failed to get CarInstrumentClusterManager",
-                    Toast.LENGTH_LONG).show();
-            return;
-        }
-
-        // Implicit intent
-        Intent intent = new Intent(Intent.ACTION_MAIN);
-        intent.addCategory(CarInstrumentClusterManager.CATEGORY_NAVIGATION);
-        try {
-            clusterManager.startActivity(intent);
-        } catch (android.car.CarNotConnectedException e) {
-            Log.e(TAG, "Failed to startActivity in cluster", e);
-            Toast.makeText(getContext(), "Failed to start activity in cluster",
-                    Toast.LENGTH_LONG).show();
-            return;
-        }
-    }
-
     /**
      * Enables/disables sending turn-by-turn data through the {@link CarNavigationStatusManager}
      */
-    private void toogleSendTurn() {
+    private void toggleSendTurn() {
         // If we haven't yet load the sample navigation state data, do so.
         if (mNavStateData == null) {
             mNavStateData = getNavStateData();
-            Log.i(TAG, "Loaded: " + Arrays.asList(mNavStateData)
-                    .stream()
-                    .map(n -> n.toString())
-                    .collect(Collectors.joining(", ")));
         }
 
         // Toggle a timer to send update periodically.
         if (mTimer == null) {
-            mTimer = new Timer();
-            mTimer.schedule(new TimerTask() {
-                private int mPos;
-
-                @Override
-                public void run() {
-                    sendTurn(mNavStateData[mPos]);
-                    mPos = (mPos + 1) % mNavStateData.length;
-                }
-            }, 0, 1000);
+            startSendTurn();
         } else {
+            stopSendTurn();
+        }
+    }
+
+    private void startSendTurn() {
+        if (mTimer != null) {
+            stopSendTurn();
+        }
+        if (!hasFocus()) {
+            Toast.makeText(getContext(), getText(R.string.cluster_not_started), Toast.LENGTH_LONG)
+                    .show();
+            return;
+        }
+        mTimer = new Timer();
+        mTimer.schedule(new TimerTask() {
+            private int mPos;
+
+            @Override
+            public void run() {
+                sendTurn(mNavStateData[mPos]);
+                mPos = (mPos + 1) % mNavStateData.length;
+            }
+        }, 0, 1000);
+        mTurnByTurnButton.setText(R.string.cluster_stop_guidance);
+    }
+
+    private void stopSendTurn() {
+        if (mTimer != null) {
             mTimer.cancel();
             mTimer = null;
         }
+        mTurnByTurnButton.setText(R.string.cluster_start_guidance);
     }
 
     /**
      * Sends one update of the navigation state through the {@link CarNavigationStatusManager}
      */
     private void sendTurn(@NonNull NavigationState state) {
-        try {
-            Bundle bundle = new Bundle();
-            bundle.putParcelable("navstate", state.toParcelable());
-            mCarNavigationStatusManager.sendEvent(1, bundle);
-            Log.i(TAG, "Sending nav state: " + state);
-        } catch(CarNotConnectedException e) {
-            Log.e(TAG, "Failed to send turn information.", e);
-        }
+        Bundle bundle = new Bundle();
+        bundle.putParcelable("navstate", state.toParcelable());
+        mCarNavigationStatusManager.sendEvent(1, bundle);
+        Log.i(TAG, "Sending nav state: " + state);
     }
 
     private void initCluster() {
-        try {
-            mCarAppFocusManager
-                    .addFocusListener(new CarAppFocusManager.OnAppFocusChangedListener() {
-                        @Override
-                        public void onAppFocusChanged(int appType, boolean active) {
-                            Log.d(TAG, "onAppFocusChanged, appType: " + appType + " active: "
-                                    + active);
-                        }
-                    }, CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION);
-        } catch (CarNotConnectedException e) {
-            Log.e(TAG, "Failed to register focus listener", e);
+        if (hasFocus()) {
+            Log.i(TAG, "Already has focus");
+            return;
         }
+        mCarAppFocusManager.addFocusListener(mOnAppFocusChangedListener,
+                CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION);
+        mCarAppFocusManager.requestAppFocus(CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION,
+                mFocusCallback);
+        Log.i(TAG, "Focus requested");
+    }
 
-        CarAppFocusManager.OnAppFocusOwnershipCallback
-                focusCallback = new CarAppFocusManager.OnAppFocusOwnershipCallback() {
-            @Override
-            public void onAppFocusOwnershipLost(int focus) {
-                Log.w(TAG, "onAppFocusOwnershipLost, focus: " + focus);
-                new AlertDialog.Builder(getContext())
-                        .setTitle(getContext().getApplicationInfo().name)
-                        .setMessage(R.string.cluster_nav_app_context_loss)
-                        .show();
-            }
-
-            @Override
-            public void onAppFocusOwnershipGranted(int focus) {
-                Log.w(TAG, "onAppFocusOwnershipGranted, focus: " + focus);
-            }
-
-        };
-        try {
-            mCarAppFocusManager.requestAppFocus(CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION,
-                    focusCallback);
-        } catch (CarNotConnectedException e) {
-            Log.e(TAG, "Failed to set active focus", e);
-        }
-
-        try {
-            boolean ownsFocus = mCarAppFocusManager.isOwningFocus(
-                    focusCallback, CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION);
+    private boolean hasFocus() {
+        boolean ownsFocus = mCarAppFocusManager.isOwningFocus(mFocusCallback,
+                CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION);
+        if (Log.isLoggable(TAG, Log.DEBUG)) {
             Log.d(TAG, "Owns APP_FOCUS_TYPE_NAVIGATION: " + ownsFocus);
-            if (!ownsFocus) {
-                throw new RuntimeException("Focus was not acquired.");
-            }
-        } catch (CarNotConnectedException e) {
-            Log.e(TAG, "Failed to get owned focus", e);
         }
+        return ownsFocus;
+    }
+
+    private void stopCluster() {
+        stopSendTurn();
+        mCarAppFocusManager.removeFocusListener(mOnAppFocusChangedListener,
+                CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION);
+        mCarAppFocusManager.abandonAppFocus(mFocusCallback,
+                CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION);
     }
 
     @Override
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/connectivity/ConnectivityFragment.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/connectivity/ConnectivityFragment.java
index 3c04bcb..31b83cc 100644
--- a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/connectivity/ConnectivityFragment.java
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/connectivity/ConnectivityFragment.java
@@ -18,57 +18,446 @@
 
 import android.annotation.Nullable;
 import android.annotation.SuppressLint;
+import android.content.Context;
+import android.graphics.Color;
+import android.location.LocationManager;
 import android.net.ConnectivityManager;
 import android.net.ConnectivityManager.NetworkCallback;
+import android.net.LinkProperties;
 import android.net.Network;
 import android.net.NetworkCapabilities;
 import android.net.NetworkInfo;
 import android.net.NetworkRequest;
+import android.net.wifi.WifiConfiguration;
+import android.net.wifi.WifiManager;
 import android.os.Bundle;
 import android.os.Handler;
+import android.os.Process;
+import android.os.UserHandle;
 import android.util.Log;
+import android.util.SparseArray;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
-import android.widget.ArrayAdapter;
 import android.widget.ListView;
+import android.widget.TextView;
 import android.widget.Toast;
 
 import androidx.fragment.app.Fragment;
+import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
 
 import com.google.android.car.kitchensink.R;
 
-import java.util.ArrayList;
+import java.net.NetworkInterface;
+import java.net.SocketException;
+import java.util.Timer;
+import java.util.TimerTask;
 
 @SuppressLint("SetTextI18n")
 public class ConnectivityFragment extends Fragment {
     private static final String TAG = ConnectivityFragment.class.getSimpleName();
-
     private final Handler mHandler = new Handler();
-    private final ArrayList<String> mNetworks = new ArrayList<>();
 
     private ConnectivityManager mConnectivityManager;
-    private ArrayAdapter<String> mNetworksAdapter;
+    private WifiManager mWifiManager;
+    private LocationManager mLocationManager;
 
-    private final NetworkCallback mNetworkCallback = new NetworkCallback() {
-        @Override
-        public void onAvailable(Network network) {
-            showToast("onAvailable, netId: " + network);
-            refreshNetworks();
+    // Sort out current Network objects (NetId -> Network)
+    private SparseArray<Network> mNetworks = new SparseArray<Network>();
+
+    private TextView mWifiStatusPolled;
+    private TextView mTetheringStatus;
+    private TextView mTetheringStatusPolled;
+    private TextView mLocalOnlyStatus;
+
+    private Timer mWifiUpdater;
+
+    /**
+     * Create our own network callback object to use with NetworkRequests. Contains a reference to
+     * a Network so we can be sure to only surface updates on the network we want to see them on.
+     * We have to do this because there isn't a way to say "give me this SPECIFIC network." There's
+     * only "give me A network with these capabilities/transports."
+     */
+    public class NetworkByIdCallback extends NetworkCallback {
+        private final Network mNetwork;
+
+        NetworkByIdCallback(Network n) {
+            mNetwork = n;
         }
 
         @Override
-        public void onLost(Network network) {
-            showToast("onLost, netId: " + network);
-            refreshNetworks();
+        public void onAvailable(Network n) {
+            if (mNetwork.equals(n)) {
+                showToast("onAvailable(), netId: " + n);
+            }
         }
-    };
+
+        @Override
+        public void onLosing(Network n, int maxMsToLive) {
+            if (mNetwork.equals(n)) {
+                showToast("onLosing(), netId: " + n);
+            }
+        }
+
+        @Override
+        public void onLost(Network n) {
+            if (mNetwork.equals(n)) {
+                showToast("onLost(), netId: " + n);
+            }
+        }
+    }
+
+    // Map of NetId -> NetworkByIdCallback Objects -- Used to release requested networks
+    SparseArray<NetworkByIdCallback> mNetworkCallbacks = new SparseArray<NetworkByIdCallback>();
+
+    /**
+     * Implement a swipe-to-refresh list of available networks. NetworkListAdapter takes an array
+     * of NetworkItems that it cascades to the view. SwipeRefreshLayout wraps the adapter.
+     */
+    public static class NetworkItem {
+        public int mNetId;
+        public String mType;
+        public String mState;
+        public String mConnected;
+        public String mAvailable;
+        public String mRoaming;
+        public String mInterfaceName;
+        public String mHwAddress;
+        public String mIpAddresses;
+        public String mDnsAddresses;
+        public String mDomains;
+        public String mRoutes;
+        public String mTransports;
+        public String mCapabilities;
+        public String mBandwidth;
+        public boolean mDefault;
+        public boolean mRequested;
+    }
+
+    private NetworkItem[] mNetworkItems = new NetworkItem[0];
+    private NetworkListAdapter mNetworksAdapter;
+    private SwipeRefreshLayout mNetworkListRefresher;
+
+    /**
+     * Builds a NetworkRequest fit to a given network in the hope that we just get updates on that
+     * one network. This is the best way to get single network updates right now, as the request
+     * system works only on transport and capability requirements. There aaaare "network
+     * specifiers" but those only work based on the transport (i.e "eth0" would ask type ETHERNET
+     * for the correct interface where as "GoogleGuest" might ask type WIFI for the Network on SSID
+     * "GoogleGuest"). Ends up being paired with the custom callback above to only surface events
+     * for the specific network in question as well.
+     */
+    private NetworkRequest getRequestForNetwork(Network n) {
+        NetworkCapabilities nc = mConnectivityManager.getNetworkCapabilities(n);
+
+        NetworkRequest.Builder b = new NetworkRequest.Builder();
+        b.clearCapabilities();
+
+        for (int transportType : nc.getTransportTypes()) {
+            b.addTransportType(transportType);
+        }
+
+        for (int capability : nc.getCapabilities()) {
+            // Not all capabilities are requestable. According to source, all mutable capabilities
+            // except trusted are not requestable. Trying to request them results in an error being
+            // thrown
+            if (isRequestableCapability(capability)) {
+                b.addCapability(capability);
+            }
+        }
+
+        return b.build();
+    }
+
+    private boolean isRequestableCapability(int c) {
+        if (c == NetworkCapabilities.NET_CAPABILITY_VALIDATED
+                || c == NetworkCapabilities.NET_CAPABILITY_CAPTIVE_PORTAL
+                || c == NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING
+                || c == NetworkCapabilities.NET_CAPABILITY_FOREGROUND
+                || c == NetworkCapabilities.NET_CAPABILITY_NOT_CONGESTED
+                || c == NetworkCapabilities.NET_CAPABILITY_NOT_SUSPENDED) {
+            return false;
+        }
+        return true;
+    }
+
+    public void requestNetworkById(int netId) {
+        if (mNetworkCallbacks.get(netId) != null) {
+            return;
+        }
+
+        Network network = mNetworks.get(netId);
+        if (network == null) {
+            return;
+        }
+
+        NetworkRequest request = getRequestForNetwork(network);
+        NetworkByIdCallback cb = new NetworkByIdCallback(network);
+        mNetworkCallbacks.put(netId, cb);
+        mConnectivityManager.requestNetwork(request, cb);
+        showToast("Requesting Network " + netId);
+    }
+
+    public void releaseNetworkById(int netId) {
+        NetworkByIdCallback cb = mNetworkCallbacks.get(netId);
+        if (cb != null) {
+            mConnectivityManager.unregisterNetworkCallback(cb);
+            mNetworkCallbacks.remove(netId);
+            showToast("Released Network " + netId);
+        }
+    }
+
+    public void releaseAllNetworks() {
+        for (NetworkItem n : mNetworkItems) {
+            releaseNetworkById(n.mNetId);
+        }
+    }
+
+    public void bindToNetwork(int netId) {
+        Network network = mNetworks.get(netId);
+        if (network == null) {
+            return;
+        }
+
+        Network def = mConnectivityManager.getBoundNetworkForProcess();
+        if (def != null && def.netId != netId) {
+            clearBoundNetwork();
+        }
+        mConnectivityManager.bindProcessToNetwork(network);
+        showToast("Set process default network " + netId);
+    }
+
+    public void clearBoundNetwork() {
+        mConnectivityManager.bindProcessToNetwork(null);
+        showToast("Clear process default network");
+    }
+
+    public void reportNetworkbyId(int netId) {
+        Network network = mNetworks.get(netId);
+        if (network == null) {
+            return;
+        }
+        mConnectivityManager.reportNetworkConnectivity(network, false);
+        showToast("Reporting Network " + netId);
+    }
+
+    /**
+    * Maps of NET_CAPABILITY_* and TRANSPORT_* to string representations. A network having these
+    * capabilities will have the following strings print on their list entry.
+    */
+    private static final SparseArray<String> sTransportNames = new SparseArray<String>();
+    private static final SparseArray<String> sCapabilityNames = new SparseArray<String>();
+    static {
+        sTransportNames.put(NetworkCapabilities.TRANSPORT_LOWPAN, "[LOWPAN]");
+        sTransportNames.put(NetworkCapabilities.TRANSPORT_WIFI_AWARE, "[WIFI-AWARE]");
+        sTransportNames.put(NetworkCapabilities.TRANSPORT_VPN, "[VPN]");
+        sTransportNames.put(NetworkCapabilities.TRANSPORT_ETHERNET, "[ETHERNET]");
+        sTransportNames.put(NetworkCapabilities.TRANSPORT_BLUETOOTH, "[BLUETOOTH]");
+        sTransportNames.put(NetworkCapabilities.TRANSPORT_WIFI, "[WIFI]");
+        sTransportNames.put(NetworkCapabilities.TRANSPORT_CELLULAR, "[CELLULAR]");
+
+        sCapabilityNames.put(NetworkCapabilities.NET_CAPABILITY_CAPTIVE_PORTAL, "[CAPTIVE PORTAL]");
+        sCapabilityNames.put(NetworkCapabilities.NET_CAPABILITY_CBS, "[CBS]");
+        sCapabilityNames.put(NetworkCapabilities.NET_CAPABILITY_DUN, "[DUN]");
+        sCapabilityNames.put(NetworkCapabilities.NET_CAPABILITY_EIMS, "[EIMS]");
+        sCapabilityNames.put(NetworkCapabilities.NET_CAPABILITY_FOREGROUND, "[FOREGROUND]");
+        sCapabilityNames.put(NetworkCapabilities.NET_CAPABILITY_FOTA, "[FOTA]");
+        sCapabilityNames.put(NetworkCapabilities.NET_CAPABILITY_IA, "[IA]");
+        sCapabilityNames.put(NetworkCapabilities.NET_CAPABILITY_IMS, "[IMS]");
+        sCapabilityNames.put(NetworkCapabilities.NET_CAPABILITY_INTERNET, "[INTERNET]");
+        sCapabilityNames.put(NetworkCapabilities.NET_CAPABILITY_MMS, "[MMS]");
+        sCapabilityNames.put(NetworkCapabilities.NET_CAPABILITY_NOT_CONGESTED, "[NOT CONGESTED]");
+        sCapabilityNames.put(NetworkCapabilities.NET_CAPABILITY_NOT_METERED, "[NOT METERED]");
+        sCapabilityNames.put(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED, "[NOT RESTRICTED]");
+        sCapabilityNames.put(NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING, "[NOT ROAMING]");
+        sCapabilityNames.put(NetworkCapabilities.NET_CAPABILITY_NOT_SUSPENDED, "[NOT SUSPENDED]");
+        sCapabilityNames.put(NetworkCapabilities.NET_CAPABILITY_NOT_VPN, "[NOT VPN]");
+        sCapabilityNames.put(NetworkCapabilities.NET_CAPABILITY_RCS, "[RCS]");
+        sCapabilityNames.put(NetworkCapabilities.NET_CAPABILITY_SUPL, "[SUPL]");
+        sCapabilityNames.put(NetworkCapabilities.NET_CAPABILITY_TRUSTED, "[TRUSTED]");
+        sCapabilityNames.put(NetworkCapabilities.NET_CAPABILITY_VALIDATED, "[VALIDATED]");
+        sCapabilityNames.put(NetworkCapabilities.NET_CAPABILITY_WIFI_P2P, "[WIFI P2P]");
+        sCapabilityNames.put(NetworkCapabilities.NET_CAPABILITY_XCAP, "[XCAP]");
+    }
+
+    private static final SparseArray<String> sWifiStaStates = new SparseArray<>();
+    static {
+        sWifiStaStates.put(WifiManager.WIFI_STATE_DISABLING, "STA_DISABLING");
+        sWifiStaStates.put(WifiManager.WIFI_STATE_DISABLED, "STA_DISABLED");
+        sWifiStaStates.put(WifiManager.WIFI_STATE_ENABLING, "STA_ENABLING");
+        sWifiStaStates.put(WifiManager.WIFI_STATE_ENABLED, "STA_ENABLED");
+        sWifiStaStates.put(WifiManager.WIFI_STATE_UNKNOWN, "STA_UNKNOWN");
+    }
+
+    private static final SparseArray<String> sWifiApStates = new SparseArray<>();
+    static {
+        sWifiApStates.put(WifiManager.WIFI_AP_STATE_DISABLING, "AP_DISABLING");
+        sWifiApStates.put(WifiManager.WIFI_AP_STATE_DISABLED, "AP_DISABLED");
+        sWifiApStates.put(WifiManager.WIFI_AP_STATE_ENABLING, "AP_ENABLING");
+        sWifiApStates.put(WifiManager.WIFI_AP_STATE_ENABLED, "AP_ENABLED");
+        sWifiApStates.put(WifiManager.WIFI_AP_STATE_FAILED, "AP_FAILED");
+    }
+
+    /**
+     * Builds a string out of the possible transports that can be applied to a
+     * NetworkCapabilities object.
+     */
+    private String getTransportString(NetworkCapabilities nCaps) {
+        String transports = "";
+        for (int transport : nCaps.getTransportTypes()) {
+            transports += sTransportNames.get(transport, "");
+        }
+        return transports;
+    }
+
+    /**
+     * Builds a string out of the possible capabilities that can be applied to
+     * a NetworkCapabilities object.
+    */
+    private String getCapabilitiesString(NetworkCapabilities nCaps) {
+        String caps = "";
+        for (int capability : nCaps.getCapabilities()) {
+            caps += sCapabilityNames.get(capability, "");
+        }
+        return caps;
+    }
+
+    // Gets the string representation of a MAC address from a given NetworkInterface object
+    private String getMacAddress(NetworkInterface ni) {
+        if (ni == null) {
+            return "??:??:??:??:??:??";
+        }
+
+        byte[] mac = null;
+        try {
+            mac = ni.getHardwareAddress();
+        } catch (SocketException exception) {
+            Log.e(TAG, "SocketException -- Failed to get interface MAC address");
+            return "??:??:??:??:??:??";
+        }
+
+        if (mac == null) {
+            return "??:??:??:??:??:??";
+        }
+
+        StringBuilder sb = new StringBuilder(18);
+        for (byte b : mac) {
+            if (sb.length() > 0) {
+                sb.append(':');
+            }
+            sb.append(String.format("%02x", b));
+        }
+        return sb.toString();
+    }
+
+    /**
+     * Builds a NetworkItem object from a given Network object, aggregating info across Network,
+     * NetworkCapabilities, NetworkInfo, NetworkInterface, and LinkProperties objects and pass it
+     * all as a string for the UI to use
+     */
+    private NetworkItem getNetworkItem(Network n) {
+
+        // Get default network to assign the button text correctly
+        // NOTE: activeNetwork != ProcessDefault when you set one, active is tracking the default
+        //       request regardless of your process's default
+        // Network defNetwork = mConnectivityManager.getActiveNetwork();
+        Network defNetwork = mConnectivityManager.getBoundNetworkForProcess();
+
+        // Used to get network state
+        NetworkInfo nInfo = mConnectivityManager.getNetworkInfo(n);
+
+        // Used to get transport type(s), capabilities
+        NetworkCapabilities nCaps = mConnectivityManager.getNetworkCapabilities(n);
+
+        // Properties of the actual physical link
+        LinkProperties nLink = mConnectivityManager.getLinkProperties(n);
+
+        // Object representing the actual interface
+        NetworkInterface nIface = null;
+        try {
+            nIface = NetworkInterface.getByName(nLink.getInterfaceName());
+        } catch (SocketException exception) {
+            Log.e(TAG, "SocketException -- Failed to get interface info");
+        }
+
+        // Pack NetworkItem with all values
+        NetworkItem ni = new NetworkItem();
+
+        // Row key
+        ni.mNetId = n.netId;
+
+        // LinkProperties/NetworkInterface
+        ni.mInterfaceName = "Interface: " + nLink.getInterfaceName()
+                            + (nIface != null ? " (" + nIface.getName() + ")" : " ()");
+        ni.mHwAddress = "HwAddress: " + getMacAddress(nIface);
+        ni.mIpAddresses = "IP Addresses: " + nLink.getLinkAddresses().toString();
+        ni.mDnsAddresses = "DNS: " + nLink.getDnsServers().toString();
+        ni.mDomains = "Domains: " + nLink.getDomains();
+        ni.mRoutes = "Routes: " + nLink.getRoutes().toString();
+
+        // NetworkInfo
+        ni.mType = "Type: " + nInfo.getTypeName() + " (" + nInfo.getSubtypeName() + ")";
+        ni.mState = "State: " + nInfo.getState().name() + "/" + nInfo.getDetailedState().name();
+        ni.mConnected = "Connected: " + (nInfo.isConnected() ? "Connected" : "Disconnected");
+        ni.mAvailable = "Available: " + (nInfo.isAvailable() ? "Yes" : "No");
+        ni.mRoaming = "Roaming: " + (nInfo.isRoaming() ? "Yes" : "No");
+
+        // NetworkCapabilities
+        ni.mTransports = "Transports: " + getTransportString(nCaps);
+        ni.mCapabilities = "Capabilities: " + getCapabilitiesString(nCaps);
+        ni.mBandwidth = "Bandwidth (Down/Up): " + nCaps.getLinkDownstreamBandwidthKbps()
+                        + " Kbps/" + nCaps.getLinkUpstreamBandwidthKbps() + " Kbps";
+
+        // Other inferred values
+        ni.mDefault = sameNetworkId(n, defNetwork);
+        ni.mRequested = (mNetworkCallbacks.get(n.netId) != null);
+
+        return ni;
+    }
+
+    // Refresh the networks content and prompt the user that we did it
+    private void refreshNetworksAndPrompt() {
+        refreshNetworks();
+        showToast("Refreshed Networks (" + mNetworkItems.length + ")");
+    }
+
+    /**
+     * Gets the current set of networks from the connectivity manager and 1) stores the network
+     * objects 2) builds NetworkItem objects for the view to render and 3) If a network we were
+     * tracking disappears then it kills its callback.
+     */
+    private void refreshNetworks() {
+        Log.i(TAG, "refreshNetworks()");
+        Network[] networks = mConnectivityManager.getAllNetworks();
+        mNetworkItems = new NetworkItem[networks.length];
+        mNetworks.clear();
+
+        // Add each network to the network info set, turning each field to a string
+        for (int i = 0; i < networks.length; i++) {
+            mNetworkItems[i] = getNetworkItem(networks[i]);
+            mNetworks.put(networks[i].netId, networks[i]);
+        }
+
+        // Check for callbacks that belong to networks that don't exist anymore
+        for (int i = 0; i < mNetworkCallbacks.size(); i++) {
+            int key = mNetworkCallbacks.keyAt(i);
+            if (mNetworks.get(key) == null) {
+                mNetworkCallbacks.remove(key);
+            }
+        }
+
+        // Update the view
+        mNetworksAdapter.refreshNetworks(mNetworkItems);
+    }
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
-        mConnectivityManager = getActivity().getSystemService(ConnectivityManager.class);
+        Context ctx = getContext();
+        mConnectivityManager = ctx.getSystemService(ConnectivityManager.class);
+        mWifiManager = ctx.getSystemService(WifiManager.class);
+        mLocationManager = ctx.getSystemService(LocationManager.class);
 
         mConnectivityManager.addDefaultNetworkActiveListener(() -> refreshNetworks());
     }
@@ -79,77 +468,163 @@
             @Nullable Bundle savedInstanceState) {
         View view = inflater.inflate(R.layout.connectivity_fragment, container, false);
 
+        // Create the ListView of all networks
         ListView networksView = view.findViewById(R.id.networks);
-        mNetworksAdapter = new ArrayAdapter<>(getActivity(), R.layout.list_item, mNetworks);
+        mNetworksAdapter = new NetworkListAdapter(getContext(), mNetworkItems, this);
         networksView.setAdapter(mNetworksAdapter);
 
-        setClickAction(view, R.id.networksRefresh, this::refreshNetworks);
-        setClickAction(view, R.id.networkRequestOemPaid, this::requestOemPaid);
-        setClickAction(view, R.id.networkRequestEth1, this::requestEth1);
-        setClickAction(view, R.id.networkReleaseNetwork, this::releaseNetworkRequest);
+        // Find all networks ListView refresher and set the refresh callback
+        mNetworkListRefresher = (SwipeRefreshLayout) view.findViewById(R.id.refreshNetworksList);
+        mNetworkListRefresher.setOnRefreshListener(() -> {
+            refreshNetworksAndPrompt();
+            mNetworkListRefresher.setRefreshing(false);
+        });
+
+        view.findViewById(R.id.startWifi).setOnClickListener(v -> setWifiEnabled(true));
+        view.findViewById(R.id.stopWifi).setOnClickListener(v -> setWifiEnabled(false));
+        view.findViewById(R.id.startTethering).setOnClickListener(v -> startTethering());
+        view.findViewById(R.id.stopTethering).setOnClickListener(v -> stopTethering());
+        view.findViewById(R.id.startLocalOnly).setOnClickListener(v -> startLocalOnly());
+        view.findViewById(R.id.stopLocalOnly).setOnClickListener(v -> stopLocalOnly());
+        mWifiStatusPolled = (TextView) view.findViewById(R.id.wifiStatusPolled);
+        mTetheringStatus = (TextView) view.findViewById(R.id.tetheringStatus);
+        mTetheringStatusPolled = (TextView) view.findViewById(R.id.tetheringStatusPolled);
+        mLocalOnlyStatus = (TextView) view.findViewById(R.id.localOnlyStatus);
 
         return view;
     }
 
-    private void releaseNetworkRequest() {
-        mConnectivityManager.unregisterNetworkCallback(mNetworkCallback);
-        showToast("Release request sent");
-    }
-
-    private void requestEth1() {
-        NetworkRequest request = new NetworkRequest.Builder()
-                .clearCapabilities()
-                .addTransportType(NetworkCapabilities.TRANSPORT_ETHERNET)
-                .setNetworkSpecifier("eth1")
-                .build();
-        mConnectivityManager.requestNetwork(request, mNetworkCallback, mHandler);
-    }
-
-    private void requestOemPaid() {
-        NetworkRequest request = new NetworkRequest.Builder()
-                .addCapability(NetworkCapabilities.NET_CAPABILITY_OEM_PAID)
-                .build();
-
-        mConnectivityManager.requestNetwork(request, mNetworkCallback, mHandler);
-    }
-
     @Override
     public void onResume() {
         super.onResume();
         refreshNetworks();
+        mWifiUpdater = new Timer();
+        mWifiUpdater.scheduleAtFixedRate(new TimerTask() {
+            public void run() {
+                updateApState();
+            }
+        }, 0, 500);
     }
 
-    private void setClickAction(View view, int id, Runnable action) {
-        view.findViewById(id).setOnClickListener(v -> action.run());
+    @Override
+    public void onPause() {
+        super.onPause();
+        releaseAllNetworks();
+        mWifiUpdater.cancel();
+        mWifiUpdater = null;
     }
 
-    private void refreshNetworks() {
-        mNetworks.clear();
+    private void updateApState() {
+        int apState = mWifiManager.getWifiApState();
+        String apStateTmp = sWifiApStates.get(apState, "?");
+        final String staStateStr = sWifiStaStates.get(mWifiManager.getWifiState(), "?");
 
-        for (Network network : mConnectivityManager.getAllNetworks()) {
-            boolean isDefault = sameNetworkId(network, mConnectivityManager.getActiveNetwork());
-            NetworkCapabilities nc = mConnectivityManager.getNetworkCapabilities(network);
-            boolean isOemPaid = nc.hasCapability(NetworkCapabilities.NET_CAPABILITY_OEM_PAID);
-            boolean isInternet = nc.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
-
-            NetworkInfo networkInfo = mConnectivityManager.getNetworkInfo(network);
-
-            mNetworks.add("netId: " + network.netId
-                    + (isInternet ? " [INTERNET]" : "")
-                    + (isDefault ? " [DEFAULT]" : "")
-                    + (isOemPaid ? " [OEM-paid]" : "") + nc + " " + networkInfo);
+        WifiConfiguration config = mWifiManager.getWifiApConfiguration();
+        if (config != null && config.SSID != null && apState == WifiManager.WIFI_AP_STATE_ENABLED) {
+            apStateTmp += " (" + config.SSID + "/" + config.preSharedKey + ")";
         }
 
-        mNetworksAdapter.notifyDataSetChanged();
+        final String apStateStr = apStateTmp;
+        mTetheringStatusPolled.post(() -> {
+            mTetheringStatusPolled.setText(apStateStr);
+            mWifiStatusPolled.setText(staStateStr);
+        });
     }
 
-    private void showToast(String text) {
-        Log.d(TAG, "showToast: " + text);
-        Toast.makeText(getContext(), text, Toast.LENGTH_LONG).show();
+    private void setTetheringStatus(String status) {
+        mTetheringStatus.post(() -> mTetheringStatus.setText(status));
+    }
+
+    private void setLocalOnlyStatus(String status) {
+        mLocalOnlyStatus.post(() -> mLocalOnlyStatus.setText(status));
+    }
+
+    public void showToast(String text) {
+        Toast toast = Toast.makeText(getContext(), text, Toast.LENGTH_SHORT);
+        TextView v = (TextView) toast.getView().findViewById(android.R.id.message);
+        v.setTextColor(Color.WHITE);
+        toast.show();
     }
 
     private static boolean sameNetworkId(Network net1, Network net2) {
         return net1 != null && net2 != null && net1.netId == net2.netId;
+    }
 
+    private void setWifiEnabled(boolean enabled) {
+        mWifiManager.setWifiEnabled(enabled);
+    }
+
+    private void startTethering() {
+        setTetheringStatus("starting...");
+
+        ConnectivityManager.OnStartTetheringCallback cb =
+                new ConnectivityManager.OnStartTetheringCallback() {
+            public void onTetheringStarted() {
+                setTetheringStatus("started");
+            }
+
+            public void onTetheringFailed() {
+                setTetheringStatus("failed");
+            }
+        };
+
+        mConnectivityManager.startTethering(ConnectivityManager.TETHERING_WIFI, false, cb);
+    }
+
+    private void stopTethering() {
+        setTetheringStatus("stopping...");
+        mConnectivityManager.stopTethering(ConnectivityManager.TETHERING_WIFI);
+        setTetheringStatus("stopped");
+    }
+
+    private WifiManager.LocalOnlyHotspotReservation mLocalOnlyReservation;
+
+    private void startLocalOnly() {
+        setLocalOnlyStatus("starting...");
+
+        UserHandle user = Process.myUserHandle();
+        if (!mLocationManager.isLocationEnabledForUser(user)) {
+            setLocalOnlyStatus("enabling location...");
+            mLocationManager.setLocationEnabledForUser(true, user);
+            setLocalOnlyStatus("location enabled; starting...");
+        }
+
+        WifiManager.LocalOnlyHotspotCallback cb = new WifiManager.LocalOnlyHotspotCallback() {
+            public void onStarted(WifiManager.LocalOnlyHotspotReservation reservation) {
+                mLocalOnlyReservation = reservation;
+                WifiConfiguration config = reservation.getWifiConfiguration();
+                setLocalOnlyStatus("started ("
+                        + config.SSID + "/" + config.preSharedKey + ")");
+            };
+
+            public void onStopped() {
+                setLocalOnlyStatus("stopped");
+            };
+
+            public void onFailed(int reason) {
+                setLocalOnlyStatus("failed " + reason);
+            };
+        };
+
+        try {
+            mWifiManager.startLocalOnlyHotspot(cb, null);
+        } catch (IllegalStateException ex) {
+            setLocalOnlyStatus(ex.getMessage());
+        }
+    }
+
+    private void stopLocalOnly() {
+        setLocalOnlyStatus("stopping...");
+
+        WifiManager.LocalOnlyHotspotReservation reservation = mLocalOnlyReservation;
+        mLocalOnlyReservation = null;
+
+        if (reservation == null) {
+            setLocalOnlyStatus("no reservation");
+            return;
+        }
+
+        reservation.close();
+        setLocalOnlyStatus("stopped");
     }
 }
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/connectivity/NetworkListAdapter.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/connectivity/NetworkListAdapter.java
new file mode 100644
index 0000000..b726654
--- /dev/null
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/connectivity/NetworkListAdapter.java
@@ -0,0 +1,208 @@
+/*
+ * Copyright (C) 2016 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.google.android.car.kitchensink.connectivity;
+
+import android.content.Context;
+import android.graphics.Color;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.Button;
+import android.widget.TextView;
+
+import com.google.android.car.kitchensink.R;
+import com.google.android.car.kitchensink.connectivity.ConnectivityFragment.NetworkItem;
+
+public class NetworkListAdapter extends ArrayAdapter<NetworkItem> {
+    private static final String TAG = NetworkListAdapter.class.getSimpleName();
+
+    private Context mContext;
+    private NetworkItem[] mNetworkList; // keep list of objects
+    private ConnectivityFragment mFragment; // for calling things on button press
+
+    public NetworkListAdapter(Context context,  NetworkItem[] items,
+                              ConnectivityFragment fragment) {
+        super(context, R.layout.network_item, items);
+        mContext = context;
+        mFragment = fragment;
+        mNetworkList = items;
+
+        Log.i(TAG, "Created NetworkListAdaptor");
+    }
+
+    // Returns a list item view for each position
+    @Override
+    public View getView(int position, View convertView, ViewGroup parent) {
+        ViewHolder vh;
+        if (convertView == null) {
+            vh = new ViewHolder();
+            LayoutInflater inflater = LayoutInflater.from(mContext);
+            convertView = inflater.inflate(R.layout.network_item, parent, false);
+            vh.netActive = convertView.findViewById(R.id.network_active);
+            vh.netId = convertView.findViewById(R.id.network_id);
+            vh.netType = convertView.findViewById(R.id.network_type);
+            vh.netState = convertView.findViewById(R.id.network_state);
+            vh.connected = convertView.findViewById(R.id.network_connected);
+            vh.available = convertView.findViewById(R.id.network_available);
+            vh.roaming = convertView.findViewById(R.id.network_roaming);
+            vh.netIface = convertView.findViewById(R.id.network_iface);
+            vh.hwAddress = convertView.findViewById(R.id.hw_address);
+            vh.ipAddresses = convertView.findViewById(R.id.network_ip_addresses);
+            vh.dns = convertView.findViewById(R.id.network_dns);
+            vh.domains = convertView.findViewById(R.id.network_domains);
+            vh.routes = convertView.findViewById(R.id.network_routes);
+            vh.transports = convertView.findViewById(R.id.network_transports);
+            vh.capabilities = convertView.findViewById(R.id.network_capabilities);
+            vh.bandwidth = convertView.findViewById(R.id.network_bandwidth);
+            vh.requestButton = convertView.findViewById(R.id.network_request);
+            vh.defaultButton = convertView.findViewById(R.id.network_default);
+            vh.reportButton = convertView.findViewById(R.id.network_report);
+
+            convertView.setTag(vh);
+        } else {
+            vh = (ViewHolder) convertView.getTag();
+        }
+
+        // If there's data to fill for the given position in the list
+        if (position < getCount()) {
+            vh.netId.setText("" + mNetworkList[position].mNetId);
+            vh.netType.setText(mNetworkList[position].mType);
+            vh.netState.setText(mNetworkList[position].mState);
+            vh.connected.setText(mNetworkList[position].mConnected);
+            vh.available.setText(mNetworkList[position].mAvailable);
+            vh.roaming.setText(mNetworkList[position].mRoaming);
+            vh.netIface.setText(mNetworkList[position].mInterfaceName);
+            vh.hwAddress.setText(mNetworkList[position].mHwAddress);
+            vh.ipAddresses.setText(mNetworkList[position].mIpAddresses);
+            vh.dns.setText(mNetworkList[position].mDnsAddresses);
+            vh.domains.setText(mNetworkList[position].mDomains);
+            vh.routes.setText(mNetworkList[position].mRoutes);
+            vh.transports.setText(mNetworkList[position].mTransports);
+            vh.capabilities.setText(mNetworkList[position].mCapabilities);
+            vh.bandwidth.setText(mNetworkList[position].mBandwidth);
+
+            // Active request indicator
+            vh.netActive.setBackgroundColor(mNetworkList[position].mRequested
+                    ? Color.parseColor("#5fdd6e")
+                    : Color.parseColor("#ff3d3d"));
+
+            // Request to track button
+            setToggleButton(position, vh.requestButton, mNetworkList[position].mRequested,
+                    "Release", "Request", this::onRequestClicked);
+
+            // Process default button
+            setToggleButton(position, vh.defaultButton, mNetworkList[position].mDefault,
+                    "Remove Default", "Set Default", this::onDefaultClicked);
+
+            // Report network button
+            setPositionTaggedCallback(position, vh.reportButton, this::onReportClicked);
+        }
+
+        // Alternate table row background color to make it easier to view
+        convertView.setBackgroundColor(((position % 2) != 0)
+                ? Color.parseColor("#2A2E2D")
+                : Color.parseColor("#1E1E1E"));
+
+        return convertView;
+    }
+
+    // Tags a button with its element position and assigned it's callback. The callback can then
+    // get the tag and use it as a position to know which data is associated with it
+    private void setPositionTaggedCallback(int position, Button button, View.OnClickListener l) {
+        button.setTag(position);
+        button.setOnClickListener(l);
+    }
+
+    private void setToggleButton(int position, Button button, boolean on, String ifOn, String ifOff,
+            View.OnClickListener l) {
+        // Manage button text based on status
+        if (on) {
+            button.setText(ifOn);
+        } else {
+            button.setText(ifOff);
+        }
+        setPositionTaggedCallback(position, button, l);
+    }
+
+    private void onRequestClicked(View view) {
+        int position = (int) view.getTag();
+        if (mNetworkList[position].mRequested) {
+            mFragment.releaseNetworkById(mNetworkList[position].mNetId);
+            mNetworkList[position].mRequested = false;
+        } else {
+            mFragment.requestNetworkById(mNetworkList[position].mNetId);
+            mNetworkList[position].mRequested = true;
+        }
+        notifyDataSetChanged();
+    }
+
+    private void onDefaultClicked(View view) {
+        int position = (int) view.getTag();
+        if (mNetworkList[position].mDefault) {
+            mFragment.clearBoundNetwork();
+            mNetworkList[position].mDefault = false;
+        } else {
+            for (int i = 0; i < mNetworkList.length; i++) {
+                if (i != position) {
+                    mNetworkList[i].mDefault = false;
+                }
+            }
+            mFragment.bindToNetwork(mNetworkList[position].mNetId);
+            mNetworkList[position].mDefault = true;
+        }
+        notifyDataSetChanged();
+    }
+
+    private void onReportClicked(View view) {
+        int position = (int) view.getTag();
+        mFragment.reportNetworkbyId(mNetworkList[position].mNetId);
+    }
+
+    public void refreshNetworks(NetworkItem[] networksIn) {
+        mNetworkList = networksIn;
+        notifyDataSetChanged();
+    }
+
+    @Override
+    public int getCount() {
+        return mNetworkList.length;
+    }
+
+    static class ViewHolder {
+        public View netActive;
+        public TextView netId;
+        public TextView netType;
+        public TextView netState;
+        public TextView connected;
+        public TextView available;
+        public TextView roaming;
+        public TextView netIface;
+        public TextView hwAddress;
+        public TextView ipAddresses;
+        public TextView dns;
+        public TextView domains;
+        public TextView routes;
+        public TextView transports;
+        public TextView capabilities;
+        public TextView bandwidth;
+        public Button requestButton;
+        public Button defaultButton;
+        public Button reportButton;
+    }
+}
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/diagnostic/DiagnosticTestFragment.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/diagnostic/DiagnosticTestFragment.java
index 7f9b4e1..177d36c 100644
--- a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/diagnostic/DiagnosticTestFragment.java
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/diagnostic/DiagnosticTestFragment.java
@@ -18,14 +18,12 @@
 
 import android.annotation.Nullable;
 import android.car.Car;
-import android.car.CarNotConnectedException;
 import android.car.diagnostic.CarDiagnosticEvent;
 import android.car.diagnostic.CarDiagnosticManager;
 import android.car.diagnostic.CarDiagnosticManager.OnDiagnosticEventListener;
 import android.car.hardware.CarSensorManager;
 import android.graphics.Color;
 import android.os.Bundle;
-import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -40,8 +38,6 @@
 
 
 public class DiagnosticTestFragment extends Fragment {
-    private static final String TAG = "CAR.DIAGNOSTIC.KS";
-
     private KitchenSinkActivity mActivity;
     private TextView mLiveDiagnosticInfo;
     private TextView mFreezeDiagnosticInfo;
@@ -96,21 +92,17 @@
     }
 
     private void resumeDiagnosticManager() {
-        try {
-            mDiagnosticManager =
-                    (CarDiagnosticManager)mActivity.getCar().getCarManager(Car.DIAGNOSTIC_SERVICE);
-            if (mLiveListener != null) {
-                mDiagnosticManager.registerListener(mLiveListener,
+        mDiagnosticManager =
+                (CarDiagnosticManager) mActivity.getCar().getCarManager(Car.DIAGNOSTIC_SERVICE);
+        if (mLiveListener != null) {
+            mDiagnosticManager.registerListener(mLiveListener,
                     CarDiagnosticManager.FRAME_TYPE_LIVE,
                     CarSensorManager.SENSOR_RATE_NORMAL);
-            }
-            if (mFreezeListener != null) {
-                mDiagnosticManager.registerListener(mFreezeListener,
+        }
+        if (mFreezeListener != null) {
+            mDiagnosticManager.registerListener(mFreezeListener,
                     CarDiagnosticManager.FRAME_TYPE_FREEZE,
                     CarSensorManager.SENSOR_RATE_NORMAL);
-            }
-        } catch (CarNotConnectedException e) {
-            Log.e(TAG, "Car not connected or not supported", e);
         }
     }
 
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/displayinfo/DisplayInfoFragment.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/displayinfo/DisplayInfoFragment.java
index ac0bdae..e199821 100644
--- a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/displayinfo/DisplayInfoFragment.java
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/displayinfo/DisplayInfoFragment.java
@@ -32,7 +32,7 @@
 import com.google.android.car.kitchensink.R;
 
 /**
- * Shows alert dialogs
+ * Displays info about the display this is run on.
  */
 public class DisplayInfoFragment extends Fragment {
 
@@ -95,11 +95,18 @@
     }
 
     private void addDimenText(String dimenName) {
-        addTextView(dimenName + " : " + convertPixelsToDp(
-                getResources().getDimensionPixelSize(
-                        getResources().getIdentifier(
-                                dimenName, "dimen", getContext().getPackageName())),
-                getContext()));
+        String value;
+        try {
+            float dimen = convertPixelsToDp(
+                    getResources().getDimensionPixelSize(
+                            getResources().getIdentifier(
+                                    dimenName, "dimen", getContext().getPackageName())),
+                    getContext());
+            value = Float.toString(dimen);
+        } catch (Resources.NotFoundException e) {
+            value = "Resource Not Found";
+        }
+        addTextView(dimenName + " : " + value);
     }
 
     private void addTextView(String text) {
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/hvac/HvacTestFragment.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/hvac/HvacTestFragment.java
index f56b487..a61edcf 100644
--- a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/hvac/HvacTestFragment.java
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/hvac/HvacTestFragment.java
@@ -18,12 +18,12 @@
 
 import static java.lang.Integer.toHexString;
 
-import android.car.CarNotConnectedException;
 import android.car.hardware.CarPropertyConfig;
 import android.car.hardware.CarPropertyValue;
 import android.car.hardware.hvac.CarHvacManager;
 import android.hardware.automotive.vehicle.V2_0.VehicleAreaSeat;
 import android.hardware.automotive.vehicle.V2_0.VehicleAreaWindow;
+import android.hardware.automotive.vehicle.V2_0.VehicleUnit;
 import android.os.Bundle;
 import android.os.Handler;
 import android.util.Log;
@@ -34,6 +34,7 @@
 import android.widget.RadioButton;
 import android.widget.RadioGroup;
 import android.widget.TextView;
+import android.widget.Toast;
 import android.widget.ToggleButton;
 
 import androidx.fragment.app.Fragment;
@@ -41,7 +42,6 @@
 import com.google.android.car.kitchensink.KitchenSinkActivity;
 import com.google.android.car.kitchensink.R;
 
-import java.util.ArrayList;
 import java.util.List;
 
 public class HvacTestFragment extends Fragment {
@@ -60,6 +60,10 @@
     private ToggleButton mTbMaxAc;
     private ToggleButton mTbMaxDefrost;
     private ToggleButton mTbRecirc;
+    private ToggleButton mTbAutoRecirc;
+    private ToggleButton mTbTempDisplayUnit;
+    private ToggleButton mTbPower;
+    private Button mTbPowerAndAc;
     private TextView mTvFanSpeed;
     private TextView mTvDTemp;
     private TextView mTvPTemp;
@@ -82,25 +86,25 @@
     private View mHvacView;
 
     private final CarHvacManager.CarHvacEventCallback mHvacCallback =
-            new CarHvacManager.CarHvacEventCallback () {
+            new CarHvacManager.CarHvacEventCallback() {
                 @Override
                 public void onChangeEvent(final CarPropertyValue value) {
                     int zones = value.getAreaId();
-                    switch(value.getPropertyId()) {
+                    switch (value.getPropertyId()) {
                         case CarHvacManager.ID_OUTSIDE_AIR_TEMP:
                             mTvOutsideTemp.setText(String.valueOf(value.getValue()));
                             break;
                         case CarHvacManager.ID_ZONED_DUAL_ZONE_ON:
-                            mTbDual.setChecked((boolean)value.getValue());
+                            mTbDual.setChecked((boolean) value.getValue());
                             break;
                         case CarHvacManager.ID_ZONED_AC_ON:
-                            mTbAc.setChecked((boolean)value.getValue());
+                            mTbAc.setChecked((boolean) value.getValue());
                             break;
                         case CarHvacManager.ID_ZONED_AUTOMATIC_MODE_ON:
-                            mTbAuto.setChecked((boolean)value.getValue());
+                            mTbAuto.setChecked((boolean) value.getValue());
                             break;
                         case CarHvacManager.ID_ZONED_FAN_DIRECTION:
-                            switch((int)value.getValue()) {
+                            switch ((int) value.getValue()) {
                                 case CarHvacManager.FAN_DIRECTION_FACE:
                                     mRbFanPositionFace.setChecked(true);
                                     break;
@@ -108,14 +112,14 @@
                                     mRbFanPositionFloor.setChecked(true);
                                     break;
                                 case (CarHvacManager.FAN_DIRECTION_FACE |
-                                      CarHvacManager.FAN_DIRECTION_FLOOR):
+                                        CarHvacManager.FAN_DIRECTION_FLOOR):
                                     mRbFanPositionFaceAndFloor.setChecked(true);
                                     break;
                                 case CarHvacManager.FAN_DIRECTION_DEFROST:
                                     mRbFanPositionDefrost.setChecked(true);
                                     break;
                                 case (CarHvacManager.FAN_DIRECTION_DEFROST |
-                                      CarHvacManager.FAN_DIRECTION_FLOOR):
+                                        CarHvacManager.FAN_DIRECTION_FLOOR):
                                     mRbFanPositionDefrostAndFloor.setChecked(true);
                                     break;
                                 default:
@@ -126,40 +130,50 @@
                             }
                             break;
                         case CarHvacManager.ID_ZONED_MAX_AC_ON:
-                            mTbMaxAc.setChecked((boolean)value.getValue());
+                            mTbMaxAc.setChecked((boolean) value.getValue());
                             break;
                         case CarHvacManager.ID_ZONED_AIR_RECIRCULATION_ON:
-                            mTbRecirc.setChecked((boolean)value.getValue());
+                            mTbRecirc.setChecked((boolean) value.getValue());
                             break;
                         case CarHvacManager.ID_ZONED_FAN_SPEED_SETPOINT:
                             if ((zones & mZoneForFanSpeed) == mZoneForFanSpeed) {
-                                mCurFanSpeed = (int)value.getValue();
+                                mCurFanSpeed = (int) value.getValue();
                                 mTvFanSpeed.setText(String.valueOf(mCurFanSpeed));
                             }
                             break;
                         case CarHvacManager.ID_ZONED_TEMP_SETPOINT:
                             if ((zones & mZoneForSetTempD) == mZoneForSetTempD) {
-                                mCurDTemp = (float)value.getValue();
+                                mCurDTemp = (float) value.getValue();
                                 mTvDTemp.setText(String.valueOf(mCurDTemp));
                             }
                             if ((zones & mZoneForSetTempP) == mZoneForSetTempP) {
-                                mCurPTemp = (float)value.getValue();
+                                mCurPTemp = (float) value.getValue();
                                 mTvPTemp.setText(String.valueOf(mCurPTemp));
                             }
                             break;
                         case CarHvacManager.ID_ZONED_MAX_DEFROST_ON:
-                            mTbMaxDefrost.setChecked((boolean)value.getValue());
+                            mTbMaxDefrost.setChecked((boolean) value.getValue());
                             break;
                         case CarHvacManager.ID_WINDOW_DEFROSTER_ON:
-                            if((zones & VehicleAreaWindow.FRONT_WINDSHIELD) ==
-                                    VehicleAreaWindow.FRONT_WINDSHIELD) {
-                                mTbDefrostFront.setChecked((boolean)value.getValue());
+                            if ((zones & VehicleAreaWindow.FRONT_WINDSHIELD)
+                                    == VehicleAreaWindow.FRONT_WINDSHIELD) {
+                                mTbDefrostFront.setChecked((boolean) value.getValue());
                             }
-                            if((zones & VehicleAreaWindow.REAR_WINDSHIELD) ==
-                                    VehicleAreaWindow.REAR_WINDSHIELD) {
-                                mTbDefrostRear.setChecked((boolean)value.getValue());
+                            if ((zones & VehicleAreaWindow.REAR_WINDSHIELD)
+                                    == VehicleAreaWindow.REAR_WINDSHIELD) {
+                                mTbDefrostRear.setChecked((boolean) value.getValue());
                             }
                             break;
+                        case CarHvacManager.ID_ZONED_HVAC_AUTO_RECIRC_ON:
+                            mTbAutoRecirc.setChecked((boolean) value.getValue());
+                            break;
+                        case CarHvacManager.ID_TEMPERATURE_DISPLAY_UNITS:
+                            mTbTempDisplayUnit.setChecked(
+                                    ((Integer) value.getValue()).equals(VehicleUnit.FAHRENHEIT));
+                            break;
+                        case CarHvacManager.ID_ZONED_HVAC_POWER_ON:
+                            mTbPower.setChecked((boolean) value.getValue());
+                            break;
                         default:
                             Log.d(TAG, "onChangeEvent(): unknown property id = " + value
                                     .getPropertyId());
@@ -191,17 +205,8 @@
         mHvacView = inflater.inflate(R.layout.hvac_test, container, false);
         final Runnable r = () -> {
             mCarHvacManager = ((KitchenSinkActivity) getActivity()).getHvacManager();
-            try {
-                mCarHvacManager.registerCallback(mHvacCallback);
-            } catch (CarNotConnectedException e) {
-                Log.e(TAG, "Car is not connected!");
-            }
-            try {
-                mCarPropertyConfigs = mCarHvacManager.getPropertyList();
-            } catch (CarNotConnectedException e) {
-                Log.e(TAG, "Failed to get list of properties", e);
-                mCarPropertyConfigs = new ArrayList<>();
-            }
+            mCarHvacManager.registerCallback(mHvacCallback);
+            mCarPropertyConfigs = mCarHvacManager.getPropertyList();
             for (CarPropertyConfig prop : mCarPropertyConfigs) {
                 int propId = prop.getPropertyId();
 
@@ -209,7 +214,7 @@
                     Log.d(TAG, prop.toString());
                 }
 
-                switch(propId) {
+                switch (propId) {
                     case CarHvacManager.ID_OUTSIDE_AIR_TEMP:
                         configureOutsideTemp(mHvacView, prop);
                         break;
@@ -243,6 +248,16 @@
                     case CarHvacManager.ID_WINDOW_DEFROSTER_ON:
                         configureDefrosterOn(mHvacView, prop);
                         break;
+                    case CarHvacManager.ID_ZONED_HVAC_AUTO_RECIRC_ON:
+                        configureAutoRecircOn(mHvacView, prop);
+                        break;
+                    case CarHvacManager.ID_TEMPERATURE_DISPLAY_UNITS:
+                        configureTempDisplayUnit(mHvacView, prop);
+                        break;
+                    case CarHvacManager.ID_ZONED_HVAC_POWER_ON:
+                        configurePowerOn(mHvacView, prop);
+                        configurePowerAndAcOn(mHvacView, prop);
+                        break;
                     default:
                         Log.w(TAG, "propertyId " + propId + " is not handled");
                         break;
@@ -262,7 +277,7 @@
         ((KitchenSinkActivity) getActivity()).requestRefreshManager(r,
                 new Handler(getContext().getMainLooper()));
 
-        if(DBG) {
+        if (DBG) {
             Log.d(TAG, "Starting HvacTestFragment");
         }
 
@@ -275,58 +290,46 @@
 
     private void configureDualOn(View v, CarPropertyConfig prop) {
         int temp = prop.getFirstAndOnlyAreaId();
-        mTbDual = (ToggleButton)v.findViewById(R.id.tbDual);
+        mTbDual = (ToggleButton) v.findViewById(R.id.tbDual);
         mTbDual.setEnabled(true);
 
         mTbDual.setOnClickListener(view -> {
             // TODO handle zone properly
-            try {
-                mCarHvacManager.setBooleanProperty(CarHvacManager.ID_ZONED_DUAL_ZONE_ON,temp,
-                        mTbDual.isChecked());
-            } catch (CarNotConnectedException e) {
-                Log.e(TAG, "Failed to set HVAC boolean property", e);
-            }
+            mCarHvacManager.setBooleanProperty(CarHvacManager.ID_ZONED_DUAL_ZONE_ON, temp,
+                    mTbDual.isChecked());
         });
     }
 
     private void configureAcOn(View v, CarPropertyConfig prop) {
         mZoneForAcOn = prop.getFirstAndOnlyAreaId();
-        mTbAc = (ToggleButton)v.findViewById(R.id.tbAc);
+        mTbAc = (ToggleButton) v.findViewById(R.id.tbAc);
         mTbAc.setEnabled(true);
 
         mTbAc.setOnClickListener(view -> {
             // TODO handle zone properly
-            try {
-                mCarHvacManager.setBooleanProperty(CarHvacManager.ID_ZONED_AC_ON, mZoneForAcOn,
-                        mTbAc.isChecked());
-            } catch (CarNotConnectedException e) {
-                Log.e(TAG, "Failed to set HVAC boolean property", e);
-            }
+            mCarHvacManager.setBooleanProperty(CarHvacManager.ID_ZONED_AC_ON, mZoneForAcOn,
+                    mTbAc.isChecked());
         });
     }
 
     private void configureAutoModeOn(View v, CarPropertyConfig prop) {
         int temp = prop.getFirstAndOnlyAreaId();
-        mTbAuto = (ToggleButton)v.findViewById(R.id.tbAuto);
+        mTbAuto = (ToggleButton) v.findViewById(R.id.tbAuto);
         mTbAuto.setEnabled(true);
 
         mTbAuto.setOnClickListener(view -> {
             // TODO handle zone properly
-            try {
-                mCarHvacManager.setBooleanProperty(CarHvacManager.ID_ZONED_AUTOMATIC_MODE_ON,temp,
-                        mTbAuto.isChecked());
-            } catch (CarNotConnectedException e) {
-                Log.e(TAG, "Failed to set HVAC boolean property", e);
-            }
+            mCarHvacManager.setBooleanProperty(CarHvacManager.ID_ZONED_AUTOMATIC_MODE_ON, temp,
+                    mTbAuto.isChecked());
         });
     }
 
     private void configureFanPosition(View v, CarPropertyConfig prop) {
         mZoneForFanPosition = prop.getFirstAndOnlyAreaId();
-        RadioGroup rg = (RadioGroup)v.findViewById(R.id.rgFanPosition);
+        RadioGroup rg = (RadioGroup) v.findViewById(R.id.rgFanPosition);
         rg.setOnCheckedChangeListener((group, checkedId) -> {
             int position;
-            switch(checkedId) {
+            switch (checkedId) {
                 case R.id.rbPositionFace:
                     position = CarHvacManager.FAN_DIRECTION_FACE;
                     break;
@@ -335,85 +338,82 @@
                     break;
                 case R.id.rbPositionFaceAndFloor:
                     position = (CarHvacManager.FAN_DIRECTION_FACE |
-                                CarHvacManager.FAN_DIRECTION_FLOOR);
+                            CarHvacManager.FAN_DIRECTION_FLOOR);
                     break;
                 case R.id.rbPositionDefrost:
                     position = CarHvacManager.FAN_DIRECTION_DEFROST;
                     break;
                 case R.id.rbPositionDefrostAndFloor:
                     position = (CarHvacManager.FAN_DIRECTION_DEFROST |
-                                CarHvacManager.FAN_DIRECTION_FLOOR);
+                            CarHvacManager.FAN_DIRECTION_FLOOR);
                     break;
                 default:
                     throw new IllegalStateException("Unexpected fan position: " + checkedId);
             }
             try {
-                mCarHvacManager.setIntProperty(CarHvacManager.ID_ZONED_FAN_DIRECTION,
-                        mZoneForFanPosition,
-                        position);
-            } catch (CarNotConnectedException e) {
+                if (mCarHvacManager.isPropertyAvailable(CarHvacManager.ID_ZONED_FAN_DIRECTION,
+                        mZoneForFanSpeed)) {
+                    mCarHvacManager.setIntProperty(CarHvacManager.ID_ZONED_FAN_DIRECTION,
+                            mZoneForFanPosition,
+                            position);
+                }
+            } catch (IllegalStateException e) {
                 Log.e(TAG, "Failed to set HVAC integer property", e);
+                Toast.makeText(getContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
             }
         });
 
-        mRbFanPositionFace = (RadioButton)v.findViewById(R.id.rbPositionFace);
+        mRbFanPositionFace = (RadioButton) v.findViewById(R.id.rbPositionFace);
         mRbFanPositionFace.setClickable(true);
-        mRbFanPositionFloor = (RadioButton)v.findViewById(R.id.rbPositionFloor);
+        mRbFanPositionFloor = (RadioButton) v.findViewById(R.id.rbPositionFloor);
         mRbFanPositionFloor.setClickable(true);
-        mRbFanPositionFaceAndFloor = (RadioButton)v.findViewById(R.id.rbPositionFaceAndFloor);
+        mRbFanPositionFaceAndFloor = (RadioButton) v.findViewById(R.id.rbPositionFaceAndFloor);
         mRbFanPositionFaceAndFloor.setClickable(true);
-        mRbFanPositionDefrost = (RadioButton)v.findViewById(R.id.rbPositionDefrost);
+        mRbFanPositionDefrost = (RadioButton) v.findViewById(R.id.rbPositionDefrost);
         mRbFanPositionDefrost.setClickable(true);
-        mRbFanPositionDefrostAndFloor = (RadioButton)v.findViewById(R.id.rbPositionDefrostAndFloor);
+        mRbFanPositionDefrostAndFloor = (RadioButton) v.findViewById(
+                R.id.rbPositionDefrostAndFloor);
         mRbFanPositionDefrostAndFloor.setClickable(true);
     }
 
     private void configureFanSpeed(View v, CarPropertyConfig prop) {
-        mMinFanSpeed = ((Integer)prop.getMinValue()).intValue();
-        mMaxFanSpeed = ((Integer)prop.getMaxValue()).intValue();
+        mMinFanSpeed = ((Integer) prop.getMinValue()).intValue();
+        mMaxFanSpeed = ((Integer) prop.getMaxValue()).intValue();
         mZoneForFanSpeed = prop.getFirstAndOnlyAreaId();
-        try {
-            mCurFanSpeed = mCarHvacManager.getIntProperty(
-                    CarHvacManager.ID_ZONED_FAN_SPEED_SETPOINT,
-                    mZoneForFanSpeed);
-        } catch (CarNotConnectedException e) {
-            Log.e(TAG, "Failed to get HVAC int property", e);
-        }
+        mCurFanSpeed = mCarHvacManager.getIntProperty(
+                CarHvacManager.ID_ZONED_FAN_SPEED_SETPOINT,
+                mZoneForFanSpeed);
 
         Button btnFanSpeedUp = (Button) v.findViewById(R.id.btnFanSpeedUp);
         btnFanSpeedUp.setEnabled(true);
-        btnFanSpeedUp.setOnClickListener(view -> {
-            if (mCurFanSpeed < mMaxFanSpeed) {
-                mCurFanSpeed++;
-                mTvFanSpeed.setText(String.valueOf(mCurFanSpeed));
-                try {
-                    mCarHvacManager.setIntProperty(CarHvacManager.ID_ZONED_FAN_SPEED_SETPOINT,
-                            mZoneForFanSpeed, mCurFanSpeed);
-                } catch (CarNotConnectedException e) {
-                    Log.e(TAG, "Failed to set HVAC int property", e);
-                }
-            }
-        });
+        btnFanSpeedUp.setOnClickListener(view -> changeFanSpeed(1));
 
         Button btnFanSpeedDn = (Button) v.findViewById(R.id.btnFanSpeedDn);
         btnFanSpeedDn.setEnabled(true);
-        btnFanSpeedDn.setOnClickListener(view -> {
-            if (mCurFanSpeed > mMinFanSpeed) {
-                mCurFanSpeed--;
-                mTvFanSpeed.setText(String.valueOf(mCurFanSpeed));
-                try {
+        btnFanSpeedDn.setOnClickListener(view -> changeFanSpeed(-1));
+    }
+
+    private void changeFanSpeed(int change) {
+        int targetSpeed = mCurFanSpeed + change;
+        if (mMinFanSpeed < targetSpeed && targetSpeed < mMaxFanSpeed) {
+            mCurFanSpeed = targetSpeed;
+            mTvFanSpeed.setText(String.valueOf(mCurFanSpeed));
+            try {
+                if (mCarHvacManager.isPropertyAvailable(
+                        CarHvacManager.ID_ZONED_FAN_SPEED_SETPOINT, mZoneForFanSpeed)) {
                     mCarHvacManager.setIntProperty(CarHvacManager.ID_ZONED_FAN_SPEED_SETPOINT,
                             mZoneForFanSpeed, mCurFanSpeed);
-                } catch (CarNotConnectedException e) {
-                    Log.e(TAG, "Failed to set HVAC fan speed property", e);
                 }
+            } catch (IllegalStateException e) {
+                Log.e(TAG, "Failed to set HVAC int property", e);
+                Toast.makeText(getContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
             }
-        });
+        }
     }
 
     private void configureTempSetpoint(View v, CarPropertyConfig prop) {
-        mMinTemp = ((Float)prop.getMinValue()).floatValue();
-        mMaxTemp = ((Float)prop.getMaxValue()).floatValue();
+        mMinTemp = ((Float) prop.getMinValue()).floatValue();
+        mMaxTemp = ((Float) prop.getMaxValue()).floatValue();
 
         if (mMaxTemp > 50) {
             // Assume it's Fahrenheit
@@ -424,7 +424,7 @@
         }
         mZoneForSetTempD = 0;
         if (prop.hasArea(VehicleAreaSeat.ROW_1_LEFT | VehicleAreaSeat.ROW_2_LEFT
-                         | VehicleAreaSeat.ROW_2_CENTER)) {
+                | VehicleAreaSeat.ROW_2_CENTER)) {
             mZoneForSetTempD = VehicleAreaSeat.ROW_1_LEFT | VehicleAreaSeat.ROW_2_LEFT
                     | VehicleAreaSeat.ROW_2_CENTER;
         }
@@ -441,99 +441,81 @@
         }
         Button btnDTempUp = (Button) v.findViewById(R.id.btnDTempUp);
         if (mZoneForSetTempD != 0) {
-            try {
-                mCurDTemp = mCarHvacManager.getFloatProperty(
-                        CarHvacManager.ID_ZONED_TEMP_SETPOINT,
-                        mZoneForSetTempD);
-                if (mCurDTemp < mMinTemp) {
-                    mCurDTemp = mMinTemp;
-                } else if (mCurDTemp > mMaxTemp) {
-                    mCurDTemp = mMaxTemp;
-                }
-            } catch (CarNotConnectedException e) {
-                Log.e(TAG, "Failed to get HVAC zoned temp property", e);
+            mCurDTemp = mCarHvacManager.getFloatProperty(
+                    CarHvacManager.ID_ZONED_TEMP_SETPOINT,
+                    mZoneForSetTempD);
+            if (mCurDTemp < mMinTemp) {
+                mCurDTemp = mMinTemp;
+            } else if (mCurDTemp > mMaxTemp) {
+                mCurDTemp = mMaxTemp;
             }
             btnDTempUp.setEnabled(true);
-            btnDTempUp.setOnClickListener(view -> {
-                if(mCurDTemp < mMaxTemp) {
-                    mCurDTemp += mTempStep;
-                    mTvDTemp.setText(String.valueOf(mCurDTemp));
-                    try {
-                        mCarHvacManager.setFloatProperty(
-                                CarHvacManager.ID_ZONED_TEMP_SETPOINT,
-                                mZoneForSetTempD, mCurDTemp);
-                    } catch (CarNotConnectedException e) {
-                        Log.e(TAG, "Failed to set HVAC zoned temp property", e);
-                    }
-                }
-            });
+            btnDTempUp.setOnClickListener(view -> changeDriverTemperature(mTempStep));
 
             Button btnDTempDn = (Button) v.findViewById(R.id.btnDTempDn);
             btnDTempDn.setEnabled(true);
-            btnDTempDn.setOnClickListener(view -> {
-                if(mCurDTemp > mMinTemp) {
-                    mCurDTemp -= mTempStep;
-                    mTvDTemp.setText(String.valueOf(mCurDTemp));
-                    try {
-                        mCarHvacManager.setFloatProperty(
-                                CarHvacManager.ID_ZONED_TEMP_SETPOINT,
-                                mZoneForSetTempD, mCurDTemp);
-                    } catch (CarNotConnectedException e) {
-                        Log.e(TAG, "Failed to set HVAC zoned temp property", e);
-                    }
-                }
-            });
+            btnDTempDn.setOnClickListener(view -> changeDriverTemperature(-mTempStep));
         } else {
             btnDTempUp.setEnabled(false);
         }
 
         Button btnPTempUp = (Button) v.findViewById(R.id.btnPTempUp);
-        if (mZoneForSetTempP !=0 ) {
-            try {
-                mCurPTemp = mCarHvacManager.getFloatProperty(
-                        CarHvacManager.ID_ZONED_TEMP_SETPOINT,
-                        mZoneForSetTempP);
-                if (mCurPTemp < mMinTemp) {
-                    mCurPTemp = mMinTemp;
-                } else if (mCurPTemp > mMaxTemp) {
-                    mCurPTemp = mMaxTemp;
-                }
-            } catch (CarNotConnectedException e) {
-                Log.e(TAG, "Failed to get HVAC zoned temp property", e);
+        if (mZoneForSetTempP != 0) {
+            mCurPTemp = mCarHvacManager.getFloatProperty(
+                    CarHvacManager.ID_ZONED_TEMP_SETPOINT,
+                    mZoneForSetTempP);
+            if (mCurPTemp < mMinTemp) {
+                mCurPTemp = mMinTemp;
+            } else if (mCurPTemp > mMaxTemp) {
+                mCurPTemp = mMaxTemp;
             }
             btnPTempUp.setEnabled(true);
-            btnPTempUp.setOnClickListener(view -> {
-                if (mCurPTemp < mMaxTemp) {
-                    mCurPTemp += mTempStep;
-                    mTvPTemp.setText(String.valueOf(mCurPTemp));
-                    try {
-                        mCarHvacManager.setFloatProperty(
-                                CarHvacManager.ID_ZONED_TEMP_SETPOINT,
-                                mZoneForSetTempP, mCurPTemp);
-                    } catch (CarNotConnectedException e) {
-                        Log.e(TAG, "Failed to set HVAC zoned temp property", e);
-                    }
-                }
-            });
+            btnPTempUp.setOnClickListener(view -> changePassengerTemperature(mTempStep));
 
             Button btnPTempDn = (Button) v.findViewById(R.id.btnPTempDn);
             btnPTempDn.setEnabled(true);
-            btnPTempDn.setOnClickListener(view -> {
-                if (mCurPTemp > mMinTemp) {
-                    mCurPTemp -= mTempStep;
-                    mTvPTemp.setText(String.valueOf(mCurPTemp));
-                    try {
-                        mCarHvacManager.setFloatProperty(
-                                CarHvacManager.ID_ZONED_TEMP_SETPOINT,
-                                mZoneForSetTempP, mCurPTemp);
-                    } catch (CarNotConnectedException e) {
-                        Log.e(TAG, "Failed to set HVAC zoned temp property", e);
-                    }
-                }
-            });
+            btnPTempDn.setOnClickListener(view -> changePassengerTemperature(-mTempStep));
         } else {
             btnPTempUp.setEnabled(false);
         }
+
+        Button btnATempUp = (Button) v.findViewById(R.id.btnATempUp);
+        if (mZoneForSetTempD != 0 && mZoneForSetTempP != 0) {
+            btnATempUp.setEnabled(true);
+            btnATempUp.setOnClickListener(view -> {
+                changeDriverTemperature(mTempStep);
+                changePassengerTemperature(mTempStep);
+            });
+
+            Button btnATempDn = (Button) v.findViewById(R.id.btnATempDn);
+            btnATempDn.setEnabled(true);
+            btnATempDn.setOnClickListener(view -> {
+                changeDriverTemperature(-mTempStep);
+                changePassengerTemperature(-mTempStep);
+            });
+        } else {
+            btnATempUp.setEnabled(false);
+        }
+    }
+
+    private void changeDriverTemperature(float tempStep) {
+        float targetTemp = mCurDTemp + tempStep;
+        if (mMinTemp < targetTemp && targetTemp < mMaxTemp) {
+            mCurDTemp = targetTemp;
+            mTvDTemp.setText(String.valueOf(mCurDTemp));
+            mCarHvacManager.setFloatProperty(CarHvacManager.ID_ZONED_TEMP_SETPOINT,
+                    mZoneForSetTempD, mCurDTemp);
+        }
+    }
+
+    private void changePassengerTemperature(float tempStep) {
+        float targetTemp = mCurPTemp + tempStep;
+        if (mMinTemp < targetTemp && targetTemp < mMaxTemp) {
+            mCurPTemp = targetTemp;
+            mTvPTemp.setText(String.valueOf(mCurPTemp));
+            mCarHvacManager.setFloatProperty(CarHvacManager.ID_ZONED_TEMP_SETPOINT,
+                    mZoneForSetTempP, mCurPTemp);
+        }
     }
 
     private void configureDefrosterOn(View v, CarPropertyConfig prop1) {
@@ -541,75 +523,105 @@
             mTbDefrostFront = (ToggleButton) v.findViewById(R.id.tbDefrostFront);
             mTbDefrostFront.setEnabled(true);
             mTbDefrostFront.setOnClickListener(view -> {
-                try {
-                    mCarHvacManager.setBooleanProperty(CarHvacManager.ID_WINDOW_DEFROSTER_ON,
-                            VehicleAreaWindow.FRONT_WINDSHIELD,
-                            mTbDefrostFront.isChecked());
-                } catch (CarNotConnectedException e) {
-                    Log.e(TAG, "Failed to set HVAC window defroster property", e);
-                }
+                mCarHvacManager.setBooleanProperty(CarHvacManager.ID_WINDOW_DEFROSTER_ON,
+                        VehicleAreaWindow.FRONT_WINDSHIELD,
+                        mTbDefrostFront.isChecked());
             });
         }
         if (prop1.hasArea(VehicleAreaWindow.REAR_WINDSHIELD)) {
             mTbDefrostRear = (ToggleButton) v.findViewById(R.id.tbDefrostRear);
             mTbDefrostRear.setEnabled(true);
             mTbDefrostRear.setOnClickListener(view -> {
-                try {
-                    mCarHvacManager.setBooleanProperty(CarHvacManager.ID_WINDOW_DEFROSTER_ON,
-                            VehicleAreaWindow.REAR_WINDSHIELD,
-                            mTbDefrostRear.isChecked());
-                } catch (CarNotConnectedException e) {
-                    Log.e(TAG, "Failed to set HVAC window defroster property", e);
-                }
+                mCarHvacManager.setBooleanProperty(CarHvacManager.ID_WINDOW_DEFROSTER_ON,
+                        VehicleAreaWindow.REAR_WINDSHIELD,
+                        mTbDefrostRear.isChecked());
             });
         }
     }
 
     private void configureRecircOn(View v, CarPropertyConfig prop) {
         int temp = prop.getFirstAndOnlyAreaId();
-        mTbRecirc = (ToggleButton)v.findViewById(R.id.tbRecirc);
+        mTbRecirc = (ToggleButton) v.findViewById(R.id.tbRecirc);
         mTbRecirc.setEnabled(true);
 
         mTbRecirc.setOnClickListener(view -> {
             // TODO handle zone properly
-            try {
-                mCarHvacManager.setBooleanProperty(CarHvacManager.ID_ZONED_AIR_RECIRCULATION_ON,
-                        temp, mTbRecirc.isChecked());
-            } catch (CarNotConnectedException e) {
-                Log.e(TAG, "Failed to set HVAC boolean property", e);
-            }
+            mCarHvacManager.setBooleanProperty(CarHvacManager.ID_ZONED_AIR_RECIRCULATION_ON,
+                    temp, mTbRecirc.isChecked());
         });
     }
 
     private void configureMaxAcOn(View v, CarPropertyConfig prop) {
         int temp = prop.getFirstAndOnlyAreaId();
-        mTbMaxAc = (ToggleButton)v.findViewById(R.id.tbMaxAc);
+        mTbMaxAc = (ToggleButton) v.findViewById(R.id.tbMaxAc);
         mTbMaxAc.setEnabled(true);
 
         mTbMaxAc.setOnClickListener(view -> {
             // TODO handle zone properly
-            try {
-                mCarHvacManager.setBooleanProperty(CarHvacManager.ID_ZONED_MAX_AC_ON,temp,
-                        mTbMaxAc.isChecked());
-            } catch (CarNotConnectedException e) {
-                Log.e(TAG, "Failed to set HVAC boolean property", e);
-            }
+            mCarHvacManager.setBooleanProperty(CarHvacManager.ID_ZONED_MAX_AC_ON, temp,
+                    mTbMaxAc.isChecked());
         });
     }
 
     private void configureMaxDefrostOn(View v, CarPropertyConfig prop) {
         int temp = prop.getFirstAndOnlyAreaId();
-        mTbMaxDefrost = (ToggleButton)v.findViewById(R.id.tbMaxDefrost);
+        mTbMaxDefrost = (ToggleButton) v.findViewById(R.id.tbMaxDefrost);
         mTbMaxDefrost.setEnabled(true);
 
         mTbMaxDefrost.setOnClickListener(view -> {
             // TODO handle zone properly
-            try {
-                mCarHvacManager.setBooleanProperty(CarHvacManager.ID_ZONED_MAX_DEFROST_ON,temp,
-                        mTbMaxDefrost.isChecked());
-            } catch (CarNotConnectedException e) {
-                Log.e(TAG, "Failed to set HVAC boolean property", e);
-            }
+            mCarHvacManager.setBooleanProperty(CarHvacManager.ID_ZONED_MAX_DEFROST_ON, temp,
+                    mTbMaxDefrost.isChecked());
+        });
+    }
+
+    private void configureAutoRecircOn(View v, CarPropertyConfig prop) {
+        // TODO handle areaId properly
+        int areaId = prop.getFirstAndOnlyAreaId();
+        mTbAutoRecirc = (ToggleButton) v.findViewById(R.id.tbAutoRecirc);
+        mTbAutoRecirc.setEnabled(true);
+
+        mTbAutoRecirc.setOnClickListener(view -> {
+            mCarHvacManager.setBooleanProperty(CarHvacManager.ID_ZONED_HVAC_AUTO_RECIRC_ON,
+                    areaId, mTbAutoRecirc.isChecked());
+        });
+    }
+
+    private void configureTempDisplayUnit(View v, CarPropertyConfig prop) {
+        int areaId = prop.getFirstAndOnlyAreaId();
+        mTbTempDisplayUnit = (ToggleButton) v.findViewById(R.id.tbTempDisplayUnit);
+        mTbTempDisplayUnit.setEnabled(true);
+
+        mTbTempDisplayUnit.setOnClickListener(view -> {
+            int unit = (mTbTempDisplayUnit.isChecked() ? VehicleUnit.FAHRENHEIT
+                    : VehicleUnit.CELSIUS);
+            mCarHvacManager.setIntProperty(CarHvacManager.ID_TEMPERATURE_DISPLAY_UNITS, areaId,
+                    unit);
+        });
+    }
+
+    private void configurePowerOn(View v, CarPropertyConfig prop) {
+        // TODO handle areaId properly
+        int areaId = prop.getFirstAndOnlyAreaId();
+        mTbPower = (ToggleButton) v.findViewById(R.id.tbPower);
+        mTbPower.setEnabled(true);
+
+        mTbPower.setOnClickListener(view -> {
+            mCarHvacManager.setBooleanProperty(CarHvacManager.ID_ZONED_HVAC_POWER_ON, areaId,
+                    mTbPower.isChecked());
+        });
+    }
+
+    private void configurePowerAndAcOn(View v, CarPropertyConfig prop) {
+        // TODO handle areaId properly
+        int areaId = prop.getFirstAndOnlyAreaId();
+        mTbPowerAndAc = (Button) v.findViewById(R.id.tbPowerAndAc);
+        mTbPowerAndAc.setEnabled(true);
+
+        mTbPowerAndAc.setOnClickListener(view -> {
+            mCarHvacManager.setBooleanProperty(CarHvacManager.ID_ZONED_HVAC_POWER_ON, areaId,
+                    true);
+            mCarHvacManager.setBooleanProperty(CarHvacManager.ID_ZONED_AC_ON, areaId, true);
         });
     }
 }
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/input/InputTestFragment.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/input/InputTestFragment.java
index 5128816..1ae330f 100644
--- a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/input/InputTestFragment.java
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/input/InputTestFragment.java
@@ -19,6 +19,7 @@
 import static android.hardware.automotive.vehicle.V2_0.SubscribeFlags.EVENTS_FROM_CAR;
 import static android.hardware.automotive.vehicle.V2_0.VehicleDisplay.INSTRUMENT_CLUSTER;
 import static android.hardware.automotive.vehicle.V2_0.VehicleHwKeyInputAction.ACTION_DOWN;
+import static android.hardware.automotive.vehicle.V2_0.VehicleHwKeyInputAction.ACTION_UP;
 import static android.hardware.automotive.vehicle.V2_0.VehicleProperty.HW_KEY_INPUT;
 
 import android.annotation.Nullable;
@@ -30,11 +31,12 @@
 import android.hardware.automotive.vehicle.V2_0.VehicleArea;
 import android.hardware.automotive.vehicle.V2_0.VehicleDisplay;
 import android.hardware.automotive.vehicle.V2_0.VehiclePropValue;
-import android.hardware.automotive.vehicle.V2_0.VehicleProperty;
 import android.hardware.automotive.vehicle.V2_0.VehiclePropertyGroup;
 import android.hardware.automotive.vehicle.V2_0.VehiclePropertyStatus;
 import android.hardware.automotive.vehicle.V2_0.VehiclePropertyType;
 import android.os.Bundle;
+import android.os.Handler;
+import android.os.Looper;
 import android.os.RemoteException;
 import android.text.method.ScrollingMovementMethod;
 import android.util.Log;
@@ -58,8 +60,11 @@
 
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.NoSuchElementException;
+import java.util.function.Function;
 
 /**
  * Test input event handling to system.
@@ -82,6 +87,74 @@
 
     private IVehicle mVehicle;
 
+    // Helper class for counting the number of key down vs. key up events received from a single
+    // source.
+    private class KeyDownCounter {
+        KeyDownCounter(Function<Integer, String> keyCodeToStringFunc) {
+            mKeyCodeToStringFunc = keyCodeToStringFunc;
+        }
+
+        public synchronized void count(int keyCode, boolean keyDown) {
+            Integer count = mKeyCodeToCountMap.get(keyCode);
+            if (count == null) {
+                count = 0;
+            }
+            count += keyDown ? 1 : -1;
+            if (count == 0) {
+                mKeyCodeToCountMap.remove(keyCode);
+            } else {
+                mKeyCodeToCountMap.put(keyCode, count);
+            }
+            mMainHandler.post(mRefreshKeysDownTextViewRunnable);
+        }
+
+        public synchronized String toString() {
+            StringBuilder sb = new StringBuilder();
+            for (Map.Entry<Integer, Integer> entry : mKeyCodeToCountMap.entrySet()) {
+                sb.append(" ").append(mKeyCodeToStringFunc.apply(entry.getKey()));
+                if (entry.getValue() != 1) {
+                    sb.append("x").append(entry.getValue());
+                }
+            }
+            return sb.toString();
+        }
+
+        // Function to translate keycodes into strings for this source.
+        private final Function<Integer, String> mKeyCodeToStringFunc;
+
+        // LinkedHashMap used for deterministic iteration order.
+        private final Map<Integer, Integer> mKeyCodeToCountMap = new LinkedHashMap<>();
+    }
+
+    // KeyDownCounters for events from EventReaderService and VHAL. Note that they use different
+    // key code mappings.
+    private final KeyDownCounter mEventReaderServiceKeyDownCounter =
+            new KeyDownCounter(k -> KeypressEvent.keycodeToString(k));
+    private final KeyDownCounter mVhalKeyDownCounter =
+            new KeyDownCounter(k -> KeyEvent.keyCodeToString(k));
+
+    private final Handler mMainHandler = new Handler(Looper.getMainLooper());
+
+    private TextView mKeysDownTextView;
+
+    // Runnable posted to mMainHandler by KeyDownCounter to refresh mKeysDownTextView's text.
+    private final Runnable mRefreshKeysDownTextViewRunnable = new Runnable() {
+        @Override
+        public void run() {
+            StringBuilder sb = new StringBuilder("VHAL keys down:");
+            sb.append(mVhalKeyDownCounter.toString());
+
+            if (mEventReaderService == null) {
+                sb.append("\nCould not connect to EventReaderService. Is keventreader running?");
+            } else {
+                sb.append("\nEventReaderService keys down:");
+                sb.append(mEventReaderServiceKeyDownCounter.toString());
+            }
+
+            mKeysDownTextView.setText(sb.toString());
+        }
+    };
+
     private EventReaderService mEventReaderService;
 
     private final IEventCallback.Stub mKeypressEventHandler = new IEventCallback.Stub() {
@@ -95,9 +168,7 @@
         @Override
         public void onEvent(KeypressEvent keypressEvent) throws RemoteException {
             Log.d(TAG, "received event " + keypressEvent);
-            synchronized (mInputEventsList) {
-                mInputEventsList.append(prettyPrint(keypressEvent));
-            }
+            mEventReaderServiceKeyDownCounter.count(keypressEvent.keycode, keypressEvent.isKeydown);
         }
     };
 
@@ -114,8 +185,25 @@
 
         @Override
         public void onPropertyEvent(ArrayList<VehiclePropValue> propValues) throws RemoteException {
-            synchronized (mInputEventsList) {
-                propValues.forEach(vpv -> mInputEventsList.append(prettyPrint(vpv)));
+            for (VehiclePropValue vpv : propValues) {
+                Log.d(TAG, "received event " + prettyPrint(vpv));
+                if (vpv.prop != HW_KEY_INPUT || vpv.value == null || vpv.value.int32Values == null
+                        || vpv.value.int32Values.size() < 2) {
+                    continue;
+                }
+                int keycode = vpv.value.int32Values.get(1);
+                switch (vpv.value.int32Values.get(0)) {
+                    case ACTION_DOWN:
+                        mVhalKeyDownCounter.count(keycode, true);
+                        break;
+                    case ACTION_UP:
+                        mVhalKeyDownCounter.count(keycode, false);
+                        break;
+                    default:
+                        Log.e(TAG, "Unrecognized VehicleHwKeyInputAction: "
+                                + vpv.value.int32Values.get(0));
+                        break;
+                }
             }
         }
 
@@ -126,8 +214,6 @@
         public void onPropertySetError(int errorCode, int propId, int areaId) {}
     };
 
-    private TextView mInputEventsList;
-
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -165,8 +251,9 @@
             @Nullable Bundle savedInstanceState) {
         View view = inflater.inflate(R.layout.input_test, container, false);
 
-        mInputEventsList = view.findViewById(R.id.events_list);
-        mInputEventsList.setMovementMethod(new ScrollingMovementMethod());
+        mKeysDownTextView = view.findViewById(R.id.events_list);
+        mKeysDownTextView.setMovementMethod(new ScrollingMovementMethod());
+        mRefreshKeysDownTextViewRunnable.run();
 
         TextView steeringWheelLabel = new TextView(getActivity() /*context*/);
         steeringWheelLabel.setText(R.string.steering_wheel);
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/notification/NotificationFragment.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/notification/NotificationFragment.java
index 7a26f93..f5448d3 100644
--- a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/notification/NotificationFragment.java
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/notification/NotificationFragment.java
@@ -1,189 +1,407 @@
 package com.google.android.car.kitchensink.notification;
 
-import static android.security.KeyStore.getApplicationContext;
-
 import android.annotation.Nullable;
 import android.app.Notification;
 import android.app.NotificationChannel;
 import android.app.NotificationManager;
 import android.app.PendingIntent;
-import android.app.Person;
-import android.app.RemoteInput;
 import android.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
+import android.os.Handler;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
-import android.widget.Button;
 
+import androidx.core.app.NotificationCompat;
+import androidx.core.app.NotificationCompat.Action;
+import androidx.core.app.NotificationCompat.MessagingStyle;
+import androidx.core.app.Person;
+import androidx.core.app.RemoteInput;
 import androidx.fragment.app.Fragment;
 
 import com.google.android.car.kitchensink.KitchenSinkActivity;
 import com.google.android.car.kitchensink.R;
 
+import java.util.HashMap;
+
 /**
  * Test fragment that can send all sorts of notifications.
  */
 public class NotificationFragment extends Fragment {
-    private static final String CHANNEL_ID_1 = "kitchensink.channel1";
-    private static final String CHANNEL_ID_2 = "kitchensink.channel2";
-    private static final String CHANNEL_ID_3 = "kitchensink.channel3";
-    private static final String CHANNEL_ID_4 = "kitchensink.channel4";
-    private static final String CHANNEL_ID_5 = "kitchensink.channel5";
-    private static final String CHANNEL_ID_6 = "kitchensink.channel6";
+    private static final String IMPORTANCE_HIGH_ID = "importance_high";
+    private static final String IMPORTANCE_HIGH_NO_SOUND_ID = "importance_high_no_sound";
+    private static final String IMPORTANCE_DEFAULT_ID = "importance_default";
+    private static final String IMPORTANCE_LOW_ID = "importance_low";
+    private static final String IMPORTANCE_MIN_ID = "importance_min";
+    private static final String IMPORTANCE_NONE_ID = "importance_none";
+    private int mCurrentNotificationId = 0;
+    private NotificationManager mManager;
+    private Context mContext;
+    private Handler mHandler = new Handler();
+    private HashMap<Integer, Runnable> mUpdateRunnables = new HashMap<>();
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        mContext = getActivity();
+        mManager =
+                (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
+
+        mManager.createNotificationChannel(new NotificationChannel(
+                IMPORTANCE_HIGH_ID, "Importance High", NotificationManager.IMPORTANCE_HIGH));
+
+        NotificationChannel noSoundChannel = new NotificationChannel(
+                IMPORTANCE_HIGH_NO_SOUND_ID, "No sound", NotificationManager.IMPORTANCE_HIGH);
+        noSoundChannel.setSound(null, null);
+        mManager.createNotificationChannel(noSoundChannel);
+
+        mManager.createNotificationChannel(new NotificationChannel(
+                IMPORTANCE_DEFAULT_ID,
+                "Importance Default",
+                NotificationManager.IMPORTANCE_DEFAULT));
+
+        mManager.createNotificationChannel(new NotificationChannel(
+                IMPORTANCE_LOW_ID, "Importance Low", NotificationManager.IMPORTANCE_LOW));
+
+        mManager.createNotificationChannel(new NotificationChannel(
+                IMPORTANCE_MIN_ID, "Importance Min", NotificationManager.IMPORTANCE_MIN));
+
+        mManager.createNotificationChannel(new NotificationChannel(
+                IMPORTANCE_NONE_ID, "Importance None", NotificationManager.IMPORTANCE_NONE));
+    }
 
     @Override
     public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
             @Nullable Bundle savedInstanceState) {
         View view = inflater.inflate(R.layout.notification_fragment, container, false);
-        Button cancelAllButton = view.findViewById(R.id.cancel_all_button);
-        Button importanceHighButton = view.findViewById(R.id.importance_high_button);
-        Button importanceHighButton2 = view.findViewById(R.id.importance_high_button_2);
-        Button importanceLowButton = view.findViewById(R.id.importance_low_button);
-        Button importanceMinButton = view.findViewById(R.id.importance_min_button);
-        Button importanceDefaultButton = view.findViewById(R.id.importance_default_button);
-        Button ongoingButton = view.findViewById(R.id.ongoing_button);
-        Button messageButton = view.findViewById(R.id.category_message_button);
 
-        NotificationManager manager =
-                (NotificationManager) getActivity().getSystemService(Context.NOTIFICATION_SERVICE);
+        initCancelAllButton(view);
 
-        // cancel all button
-        cancelAllButton.setOnClickListener(v -> manager.cancelAll());
+        initCarCategoriesButton(view);
 
-        // importance high notifications
-        NotificationChannel highImportanceChannel =
-                new NotificationChannel(
-                        CHANNEL_ID_1, "Importance High", NotificationManager.IMPORTANCE_HIGH);
-        manager.createNotificationChannel(highImportanceChannel);
+        initImportanceHighBotton(view);
+        initImportanceDefaultButton(view);
+        initImportanceLowButton(view);
+        initImportanceMinButton(view);
 
-        importanceHighButton.setOnClickListener(v -> {
+        initOngoingButton(view);
+        initMessagingStyleButton(view);
+        initProgressButton(view);
+        initNavigationButton(view);
 
-            Notification notification = new Notification.Builder(getActivity(), CHANNEL_ID_1)
-                    .setContentTitle("Importance High")
-                    .setContentText("blah")
+        return view;
+    }
+
+    private void initCancelAllButton(View view) {
+        view.findViewById(R.id.cancel_all_button).setOnClickListener(v -> {
+            for (Runnable runnable : mUpdateRunnables.values()) {
+                mHandler.removeCallbacks(runnable);
+            }
+            mUpdateRunnables.clear();
+            mManager.cancelAll();
+        });
+    }
+
+    private void initCarCategoriesButton(View view) {
+        view.findViewById(R.id.category_car_emergency_button).setOnClickListener(v -> {
+            Notification notification = new Notification
+                    .Builder(mContext, IMPORTANCE_DEFAULT_ID)
+                    .setContentTitle("Car Emergency")
+                    .setContentText("Shows heads-up; Shows on top of the list; Does not group")
+                    .setCategory(Notification.CATEGORY_CAR_EMERGENCY)
                     .setSmallIcon(R.drawable.car_ic_mode)
                     .build();
-            manager.notify(1, notification);
+            mManager.notify(mCurrentNotificationId++, notification);
         });
 
-        importanceHighButton2.setOnClickListener(v -> {
-            Notification notification = new Notification.Builder(getActivity(), CHANNEL_ID_1)
-                    .setContentTitle("Importance High 2")
-                    .setContentText("blah blah blah")
+        view.findViewById(R.id.category_car_warning_button).setOnClickListener(v -> {
+
+            Notification notification = new Notification
+                    .Builder(mContext, IMPORTANCE_MIN_ID)
+                    .setContentTitle("Car Warning")
+                    .setContentText(
+                            "Shows heads-up; Shows on top of the list but below Car Emergency; "
+                                    + "Does not group")
+                    .setCategory(Notification.CATEGORY_CAR_WARNING)
+                    .setColor(mContext.getColor(android.R.color.holo_orange_dark))
+                    .setColorized(true)
                     .setSmallIcon(R.drawable.car_ic_mode)
                     .build();
-            manager.notify(2, notification);
+            mManager.notify(mCurrentNotificationId++, notification);
         });
 
-        // importance default
-        importanceDefaultButton.setOnClickListener(v -> {
-            NotificationChannel channel =
-                    new NotificationChannel(
-                            CHANNEL_ID_3,
-                            "Importance Default",
-                            NotificationManager.IMPORTANCE_DEFAULT);
-            manager.createNotificationChannel(channel);
-
-            Notification notification = new Notification.Builder(getActivity(), CHANNEL_ID_3)
-                    .setContentTitle("Importance Default")
+        view.findViewById(R.id.category_car_info_button).setOnClickListener(v -> {
+            Notification notification = new Notification
+                    .Builder(mContext, IMPORTANCE_DEFAULT_ID)
+                    .setContentTitle("Car information")
+                    .setContentText("Doesn't show heads-up; Importance Default; Groups")
+                    .setCategory(Notification.CATEGORY_CAR_INFORMATION)
+                    .setColor(mContext.getColor(android.R.color.holo_orange_light))
+                    .setColorized(true)
                     .setSmallIcon(R.drawable.car_ic_mode)
                     .build();
-            manager.notify(4, notification);
+            mManager.notify(mCurrentNotificationId++, notification);
         });
 
-        // importance low
-        importanceLowButton.setOnClickListener(v -> {
-            NotificationChannel channel =
-                    new NotificationChannel(
-                            CHANNEL_ID_4, "Importance Low", NotificationManager.IMPORTANCE_LOW);
-            manager.createNotificationChannel(channel);
+    }
 
-            Notification notification = new Notification.Builder(getActivity(), CHANNEL_ID_4)
+    private void initImportanceHighBotton(View view) {
+        Intent mIntent = new Intent(mContext, KitchenSinkActivity.class);
+        PendingIntent mPendingIntent = PendingIntent.getActivity(mContext, 0, mIntent, 0);
+
+        Notification notification1 = new Notification
+                .Builder(mContext, IMPORTANCE_HIGH_ID)
+                .setContentTitle("Importance High: Shows as a heads-up")
+                .setContentText(
+                        "Each click generates a new notification. And some "
+                                + "looooooong text. "
+                                + "Loooooooooooooooooooooong. "
+                                + "Loooooooooooooooooooooooooooooooooooooooooooooooooong.")
+                .setSmallIcon(R.drawable.car_ic_mode)
+                .addAction(
+                        new Notification.Action.Builder(
+                                null, "Long Action (no-op)", mPendingIntent).build())
+                .addAction(
+                        new Notification.Action.Builder(
+                                null, "Action (no-op)", mPendingIntent).build())
+                .addAction(
+                        new Notification.Action.Builder(
+                                null, "Long Action (no-op)", mPendingIntent).build())
+                .setColor(mContext.getColor(android.R.color.holo_red_light))
+                .build();
+
+        view.findViewById(R.id.importance_high_button).setOnClickListener(
+                v -> mManager.notify(mCurrentNotificationId++, notification1)
+        );
+    }
+
+    private void initImportanceDefaultButton(View view) {
+        view.findViewById(R.id.importance_default_button).setOnClickListener(v -> {
+            Notification notification = new Notification
+                    .Builder(mContext, IMPORTANCE_DEFAULT_ID)
+                    .setContentTitle("No heads-up; Importance Default; Groups")
+                    .setSmallIcon(R.drawable.car_ic_mode)
+                    .build();
+            mManager.notify(mCurrentNotificationId++, notification);
+        });
+    }
+
+    private void initImportanceLowButton(View view) {
+        view.findViewById(R.id.importance_low_button).setOnClickListener(v -> {
+
+            Notification notification = new Notification.Builder(mContext, IMPORTANCE_LOW_ID)
                     .setContentTitle("Importance Low")
-                    .setContentText("low low low")
+                    .setContentText("No heads-up; Below Importance Default; Groups")
                     .setSmallIcon(R.drawable.car_ic_mode)
                     .build();
-            manager.notify(5, notification);
+            mManager.notify(mCurrentNotificationId++, notification);
         });
+    }
 
-        // importance min
-        importanceMinButton.setOnClickListener(v -> {
-            NotificationChannel channel =
-                    new NotificationChannel(
-                            CHANNEL_ID_5, "Importance Min", NotificationManager.IMPORTANCE_MIN);
-            manager.createNotificationChannel(channel);
+    private void initImportanceMinButton(View view) {
+        view.findViewById(R.id.importance_min_button).setOnClickListener(v -> {
 
-            Notification notification = new Notification.Builder(getActivity(), CHANNEL_ID_5)
+            Notification notification = new Notification.Builder(mContext, IMPORTANCE_MIN_ID)
                     .setContentTitle("Importance Min")
-                    .setContentText("min min min")
+                    .setContentText("No heads-up; Below Importance Low; Groups")
                     .setSmallIcon(R.drawable.car_ic_mode)
                     .build();
-            manager.notify(6, notification);
+            mManager.notify(mCurrentNotificationId++, notification);
         });
+    }
 
-        // ongoing
-        ongoingButton.setOnClickListener(v -> {
-            NotificationChannel channel =
-                    new NotificationChannel(
-                            CHANNEL_ID_6, "Ongoing", NotificationManager.IMPORTANCE_DEFAULT);
-            manager.createNotificationChannel(channel);
+    private void initOngoingButton(View view) {
+        view.findViewById(R.id.ongoing_button).setOnClickListener(v -> {
 
-            Notification notification = new Notification.Builder(getActivity(), CHANNEL_ID_6)
-                    .setContentTitle("Playing music or something")
+            Notification notification = new Notification
+                    .Builder(mContext, IMPORTANCE_DEFAULT_ID)
+                    .setContentTitle("Persistent/Ongoing Notification")
+                    .setContentText("Cannot be dismissed; No heads-up; Importance default; Groups")
                     .setSmallIcon(R.drawable.car_ic_mode)
                     .setOngoing(true)
                     .build();
-            manager.notify(7, notification);
+            mManager.notify(mCurrentNotificationId++, notification);
         });
+    }
 
-        // category message
-        messageButton.setOnClickListener(v -> {
-            NotificationChannel channel =
-                    new NotificationChannel(
-                            CHANNEL_ID_2, "Message", NotificationManager.IMPORTANCE_HIGH);
-            manager.createNotificationChannel(channel);
+    private void initMessagingStyleButton(View view) {
+        view.findViewById(R.id.category_message_button).setOnClickListener(v -> {
+            int id = mCurrentNotificationId++;
 
-            Intent intent = new Intent(getActivity(), KitchenSinkActivity.class);
-            PendingIntent readIntent = PendingIntent.getActivity(getActivity(), 0, intent, 0);
-
-            RemoteInput remoteInput = new RemoteInput.Builder("voice reply").build();
-            PendingIntent replyIntent = PendingIntent.getBroadcast(getApplicationContext(),
-                    12345,
-                    intent,
-                    PendingIntent.FLAG_UPDATE_CURRENT);
+            PendingIntent replyIntent = createServiceIntent(id, "reply");
+            PendingIntent markAsReadIntent = createServiceIntent(id, "read");
 
             Person personJohn = new Person.Builder().setName("John Doe").build();
             Person personJane = new Person.Builder().setName("Jane Roe").build();
-            Notification.MessagingStyle messagingStyle =
-                    new Notification.MessagingStyle(personJohn)
-                            .setConversationTitle("Whassup")
-                            .addHistoricMessage(
-                                    new Notification.MessagingStyle.Message(
-                                            "historic message",
+            MessagingStyle messagingStyle =
+                    new MessagingStyle(personJohn)
+                            .setConversationTitle("Heads-up: New Message")
+                            .addMessage(
+                                    new MessagingStyle.Message(
+                                            "The meaning of life, or the answer to the question"
+                                                    + "What is the meaning of life?, pertains to "
+                                                    + "the significance of living or existence in"
+                                                    + " general. Many other related questions "
+                                                    + "include: Why are we here?, What is "
+                                                    + "life all about?, or What is the "
+                                                    + "purpose of existence?",
                                             System.currentTimeMillis() - 3600,
                                             personJohn))
-                            .addMessage(new Notification.MessagingStyle.Message(
-                                    "message", System.currentTimeMillis(), personJane));
+                            .addMessage(
+                                    new MessagingStyle.Message(
+                                            "Importance High; Groups; Each click generates a new"
+                                                    + "notification. And some looooooong text. "
+                                                    + "Loooooooooooooooooooooong. "
+                                                    + "Loooooooooooooooooooooooooong."
+                                                    + "Long long long long text.",
+                                            System.currentTimeMillis(),
+                                            personJane));
 
-            Notification notification = new Notification.Builder(getActivity(), CHANNEL_ID_2)
+            NotificationCompat.Builder notification = new NotificationCompat
+                    .Builder(mContext, IMPORTANCE_HIGH_ID)
                     .setContentTitle("Message from someone")
                     .setContentText("hi")
+                    .setShowWhen(true)
                     .setCategory(Notification.CATEGORY_MESSAGE)
                     .setSmallIcon(R.drawable.car_ic_mode)
                     .setStyle(messagingStyle)
                     .setAutoCancel(true)
+                    .setColor(mContext.getColor(android.R.color.holo_green_light))
                     .addAction(
-                            new Notification.Action.Builder(null, "read", readIntent).build())
+                            new Action.Builder(R.drawable.ic_check_box, "read", markAsReadIntent)
+                                    .setSemanticAction(Action.SEMANTIC_ACTION_MARK_AS_READ)
+                                    .setShowsUserInterface(false)
+                                    .build())
                     .addAction(
-                            new Notification.Action.Builder(null, "reply", replyIntent)
-                                    .addRemoteInput(remoteInput).build())
-                    .extend(new Notification.CarExtender().setColor(R.color.car_red_500))
-                    .build();
-            manager.notify(3, notification);
-        });
+                            new Action.Builder(R.drawable.ic_check_box, "reply", replyIntent)
+                                    .setSemanticAction(Action.SEMANTIC_ACTION_REPLY)
+                                    .setShowsUserInterface(false)
+                                    .addRemoteInput(new RemoteInput.Builder("input").build())
+                                    .build());
 
-        return view;
+            mManager.notify(id, notification.build());
+        });
+    }
+
+    private PendingIntent createServiceIntent(int notificationId, String action) {
+        Intent intent = new Intent(mContext, KitchenSinkActivity.class).setAction(action);
+
+        return PendingIntent.getForegroundService(mContext, notificationId, intent,
+                PendingIntent.FLAG_UPDATE_CURRENT);
+    }
+
+    private void initProgressButton(View view) {
+        view.findViewById(R.id.progress_button).setOnClickListener(v -> {
+            int id = mCurrentNotificationId++;
+
+            Notification notification = new Notification
+                    .Builder(mContext, IMPORTANCE_DEFAULT_ID)
+                    .setContentTitle("Progress")
+                    .setOngoing(true)
+                    .setContentText(
+                            "Doesn't show heads-up; Importance Default; Groups; Ongoing (cannot "
+                                    + "be dismissed)")
+                    .setProgress(100, 0, false)
+                    .setColor(mContext.getColor(android.R.color.holo_purple))
+                    .setContentInfo("0%")
+                    .setSmallIcon(R.drawable.car_ic_mode)
+                    .build();
+            mManager.notify(id, notification);
+
+            Runnable runnable = new Runnable() {
+                int mProgress = 0;
+
+                @Override
+                public void run() {
+                    Notification updateNotification = new Notification
+                            .Builder(mContext, IMPORTANCE_DEFAULT_ID)
+                            .setContentTitle("Progress")
+                            .setContentText("Doesn't show heads-up; Importance Default; Groups")
+                            .setProgress(100, mProgress, false)
+                            .setOngoing(true)
+                            .setColor(mContext.getColor(android.R.color.holo_purple))
+                            .setContentInfo(mProgress + "%")
+                            .setSmallIcon(R.drawable.car_ic_mode)
+                            .build();
+                    mManager.notify(id, updateNotification);
+                    mProgress += 5;
+                    if (mProgress <= 100) {
+                        mHandler.postDelayed(this, 1000);
+                    }
+                }
+            };
+            mUpdateRunnables.put(id, runnable);
+            mHandler.post(runnable);
+        });
+    }
+
+    private void initNavigationButton(View view) {
+        view.findViewById(R.id.navigation_button).setOnClickListener(v -> {
+            int id = mCurrentNotificationId++;
+
+            Notification notification = new Notification
+                    .Builder(mContext, IMPORTANCE_HIGH_ID)
+                    .setCategory(Notification.CATEGORY_NAVIGATION)
+                    .setContentTitle("Navigation")
+                    .setContentText("Turn right in 900 ft")
+                    .setColor(mContext.getColor(android.R.color.holo_green_dark))
+                    .setColorized(true)
+                    .setSubText("900 ft")
+                    .setSmallIcon(R.drawable.car_ic_mode)
+                    .build();
+            mManager.notify(id, notification);
+
+            Runnable rightTurnRunnable = new Runnable() {
+                int mDistance = 800;
+
+                @Override
+                public void run() {
+                    Notification updateNotification = new Notification
+                            .Builder(mContext, IMPORTANCE_HIGH_NO_SOUND_ID)
+                            .setCategory(Notification.CATEGORY_NAVIGATION)
+                            .setContentTitle("Navigation")
+                            .setContentText("Turn right in " + mDistance + " ft")
+                            .setColor(mContext.getColor(android.R.color.holo_green_dark))
+                            .setColorized(true)
+                            .setSubText(mDistance + " ft")
+                            .setSmallIcon(R.drawable.car_ic_mode)
+                            .build();
+                    mManager.notify(id, updateNotification);
+                    mDistance -= 100;
+                    if (mDistance >= 0) {
+                        mHandler.postDelayed(this, 1000);
+                    }
+                }
+            };
+
+            Runnable exitRunnable = new Runnable() {
+                int mDistance = 9;
+
+                @Override
+                public void run() {
+                    Notification updateNotification = new Notification
+                            .Builder(mContext, IMPORTANCE_HIGH_NO_SOUND_ID)
+                            .setCategory(Notification.CATEGORY_NAVIGATION)
+                            .setContentTitle("Navigation")
+                            .setContentText("Exit in " + mDistance + " miles")
+                            .setColor(mContext.getColor(android.R.color.holo_green_dark))
+                            .setColorized(true)
+                            .setSubText(mDistance + " miles")
+                            .setSmallIcon(R.drawable.car_ic_mode)
+                            .build();
+                    mManager.notify(id, updateNotification);
+                    mDistance -= 1;
+                    if (mDistance >= 0) {
+                        mHandler.postDelayed(this, 1000);
+                    }
+                }
+            };
+
+            mUpdateRunnables.put(id, rightTurnRunnable);
+            mUpdateRunnables.put(id, exitRunnable);
+            mHandler.postDelayed(rightTurnRunnable, 1000);
+            mHandler.postDelayed(exitRunnable, 10000);
+        });
     }
 }
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/power/PowerTestFragment.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/power/PowerTestFragment.java
index 2dea5d8..7474237 100644
--- a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/power/PowerTestFragment.java
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/power/PowerTestFragment.java
@@ -16,7 +16,6 @@
 
 package com.google.android.car.kitchensink.power;
 
-import android.car.CarNotConnectedException;
 import android.car.hardware.power.CarPowerManager;
 import android.content.Context;
 import android.os.Bundle;
@@ -34,28 +33,17 @@
 import com.google.android.car.kitchensink.KitchenSinkActivity;
 import com.google.android.car.kitchensink.R;
 
-import java.util.concurrent.CompletableFuture;
-
 public class PowerTestFragment extends Fragment {
     private final boolean DBG = false;
     private final String TAG = "PowerTestFragment";
     private CarPowerManager mCarPowerManager;
 
     private final CarPowerManager.CarPowerStateListener mPowerListener =
-            new CarPowerManager.CarPowerStateListener() {
-                @Override
-                public void onStateChanged(int state) {
-                    throw new UnsupportedOperationException(
-                            "Should not be here. This API obsolete and is not used.");
+            (state, future) -> {
+                if (future != null) {
+                    future.complete(null);
                 }
-
-                @Override
-                public void onStateChanged(int state, CompletableFuture<Void> future) {
-                    if (future != null) {
-                        future.complete(null);
-                    }
-                    Log.i(TAG, "onStateChanged() state = " + state);
-                }
+                Log.i(TAG, "onStateChanged() state = " + state);
             };
 
     @Override
@@ -64,8 +52,6 @@
             mCarPowerManager = ((KitchenSinkActivity) getActivity()).getPowerManager();
             try {
                 mCarPowerManager.setListener(mPowerListener);
-            } catch (CarNotConnectedException e) {
-                Log.e(TAG, "Car is not connected!");
             } catch (IllegalStateException e) {
                 Log.e(TAG, "CarPowerManager listener was not cleared");
             }
@@ -102,11 +88,7 @@
     }
 
     private void requestShutdownBtn(View v) {
-        try {
-            mCarPowerManager.requestShutdownOnNextSuspend();
-        } catch (CarNotConnectedException e) {
-            Log.e(TAG, "Failed to set requestShutdownOnNextSuspend()", e);
-        }
+        mCarPowerManager.requestShutdownOnNextSuspend();
     }
 
     private void shutdownBtn(View v) {
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/sensor/LocationListeners.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/sensor/LocationListeners.java
index b99f5da..0129085 100644
--- a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/sensor/LocationListeners.java
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/sensor/LocationListeners.java
@@ -37,6 +37,7 @@
     LocationManager mLocationMgr;
     SensorManager   mSensorMgr;
 
+    Sensor mAccelerometerSensor, mMagneticFieldSensor, mGyroscopeSensor;
 
     public LocationListeners(Context context,
                              SensorsTestFragment.LocationInfoTextUpdateListener listener) {
@@ -44,6 +45,10 @@
 
         mLocationMgr = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
         mSensorMgr = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
+
+        mAccelerometerSensor = mSensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
+        mMagneticFieldSensor = mSensorMgr.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
+        mGyroscopeSensor = mSensorMgr.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
     }
 
     public void startListening() {
@@ -51,7 +56,7 @@
             if (mLocationMgr.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
                 mLocationMgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,
                         mLocationListener);
-                mTextUpdateHandler.setMagField("waiting to hear from GPS");
+                mTextUpdateHandler.setLocationField("waiting to hear from GPS");
             } else {
                 mTextUpdateHandler.setLocationField("GPS_PROVIDER not available");
             }
@@ -60,20 +65,47 @@
         }
 
         if (mSensorMgr != null) {
-            Sensor accelerometerSensor = mSensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
-            Sensor magneticFieldSensor = mSensorMgr.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
-            Sensor gyroscopeSensor = mSensorMgr.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
+            // Accelerometer.
+            if (mAccelerometerSensor != null) {
+                if (!mSensorMgr.registerListener(mSensorListener, mAccelerometerSensor,
+                        SensorManager.SENSOR_DELAY_FASTEST)) {
+                    mTextUpdateHandler.setAccelField(
+                            "Accelerometer: failed to register listener.");
+                } else {
+                    mTextUpdateHandler.setAccelField(
+                            "Accelerometer: waiting to hear from SensorManager");
+                }
+            } else {
+                mTextUpdateHandler.setAccelField("Accelerometer: sensor not available.");
+            }
 
-            mSensorMgr.registerListener(mSensorListener, accelerometerSensor,
-                    SensorManager.SENSOR_DELAY_FASTEST);
-            mSensorMgr.registerListener(mSensorListener, gyroscopeSensor,
-                    SensorManager.SENSOR_DELAY_FASTEST);
-            mSensorMgr.registerListener(mSensorListener, magneticFieldSensor,
-                    SensorManager.SENSOR_DELAY_FASTEST);
+            // Gyroscope.
+            if (mGyroscopeSensor != null) {
+                if (!mSensorMgr.registerListener(mSensorListener, mGyroscopeSensor,
+                        SensorManager.SENSOR_DELAY_FASTEST)) {
+                    mTextUpdateHandler.setGyroField(
+                            "Gyroscope: failed to register listener.");
+                } else {
+                    mTextUpdateHandler.setGyroField(
+                            "Gyroscope: waiting to hear from SensorManager");
+                }
+            } else {
+                mTextUpdateHandler.setGyroField("Gyroscope: sensor not available.");
+            }
 
-            mTextUpdateHandler.setAccelField("waiting to hear from SensorManager");
-            mTextUpdateHandler.setGyroField("waiting to hear from SensorManager");
-            mTextUpdateHandler.setMagField("waiting to hear from SensorManager");
+            // Magnetometer.
+            if (mMagneticFieldSensor != null) {
+                if (!mSensorMgr.registerListener(mSensorListener, mMagneticFieldSensor,
+                        SensorManager.SENSOR_DELAY_FASTEST)) {
+                    mTextUpdateHandler.setMagField(
+                            "Magnetometer: failed to register listener.");
+                } else {
+                    mTextUpdateHandler.setMagField(
+                            "Magnetometer: waiting to hear from SensorManager");
+                }
+            } else {
+                mTextUpdateHandler.setMagField("Magnetometer: sensor not available.");
+            }
         } else {
             mTextUpdateHandler.setAccelField("SensorManager not available");
             mTextUpdateHandler.setGyroField("SensorManager not available");
@@ -134,7 +166,7 @@
                 case Sensor.TYPE_GYROSCOPE:
                     String gs = String.format("Gyroscope Rad/s: (%6.2f, %6.2f, %6.2f)",
                             event.values[0], event.values[1], event.values[2]);
-                    mTextUpdateHandler.setLocationField(gs);
+                    mTextUpdateHandler.setGyroField(gs);
                     break;
                 case Sensor.TYPE_MAGNETIC_FIELD:
                     // NOTE:  If we wanted to report yaw/pitch/roll, we would use both
@@ -145,12 +177,12 @@
                     // SensorManager.getOrientation(mR, orientation);
                     String ms = String.format("Magnetic uT: (%6.2f, %6.2f, %6.2f)",
                             event.values[0], event.values[1], event.values[2]);
-                    mTextUpdateHandler.setLocationField(ms);
+                    mTextUpdateHandler.setMagField(ms);
                     break;
                 case Sensor.TYPE_ACCELEROMETER:
                     String as = String.format("Accelerometer m/s2: (%6.2f, %6.2f, %6.2f)",
                             event.values[0], event.values[1], event.values[2]);
-                    mTextUpdateHandler.setLocationField(as);
+                    mTextUpdateHandler.setAccelField(as);
                     break;
                 default:
                     Log.w(TAG, "Unexpected sensor event type: " + type);
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/sensor/SensorsTestFragment.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/sensor/SensorsTestFragment.java
index 77a6e1c..e1edea5 100644
--- a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/sensor/SensorsTestFragment.java
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/sensor/SensorsTestFragment.java
@@ -21,7 +21,6 @@
 import android.Manifest;
 import android.annotation.Nullable;
 import android.car.Car;
-import android.car.CarNotConnectedException;
 import android.car.hardware.CarSensorConfig;
 import android.car.hardware.CarSensorEvent;
 import android.car.hardware.CarSensorManager;
@@ -43,7 +42,6 @@
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
-import java.util.Date;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
@@ -149,8 +147,6 @@
                 mCarSensorManager.registerListener(mOnSensorChangedListener, sensor,
                         CarSensorManager.SENSOR_RATE_NORMAL);
             }
-        } catch (CarNotConnectedException e) {
-            Log.e(TAG, "Car not connected or not supported", e);
         } catch (Exception e) {
             Log.e(TAG, "initSensors() exception caught SensorManager: ", e);
         }
@@ -283,18 +279,14 @@
                                 mNaString));
                         }
                         // Get the config data
-                        try {
-                            CarSensorConfig c = mCarSensorManager.getSensorConfig(
+                        CarSensorConfig c = mCarSensorManager.getSensorConfig(
                                 CarSensorManager.SENSOR_TYPE_WHEEL_TICK_DISTANCE);
-                            summary.add(getContext().getString(R.string.sensor_wheel_ticks_cfg,
+                        summary.add(getContext().getString(R.string.sensor_wheel_ticks_cfg,
                                 c.getInt(CarSensorConfig.WHEEL_TICK_DISTANCE_SUPPORTED_WHEELS),
                                 c.getInt(CarSensorConfig.WHEEL_TICK_DISTANCE_FRONT_LEFT_UM_PER_TICK),
                                 c.getInt(CarSensorConfig.WHEEL_TICK_DISTANCE_FRONT_RIGHT_UM_PER_TICK),
                                 c.getInt(CarSensorConfig.WHEEL_TICK_DISTANCE_REAR_LEFT_UM_PER_TICK),
                                 c.getInt(CarSensorConfig.WHEEL_TICK_DISTANCE_REAR_RIGHT_UM_PER_TICK)));
-                        } catch (CarNotConnectedException e) {
-                            Log.e(TAG, "Car not connected or not supported", e);
-                        }
                         break;
                     case CarSensorManager.SENSOR_TYPE_ABS_ACTIVE:
                         summary.add(getContext().getString(R.string.sensor_abs_is_active,
@@ -343,11 +335,11 @@
         if (event == null) {
             return mNaString;
         }
-        return mDateFormat.format(new Date(event.timestamp / (1000L * 1000L)));
+        return Double.toString(event.timestamp / (1000L * 1000L * 1000L)) + " seconds";
     }
 
     private String getTimestampNow() {
-        return mDateFormat.format(new Date(System.nanoTime() / (1000L * 1000L)));
+        return Double.toString(System.nanoTime() / (1000L * 1000L * 1000L)) + " seconds";
     }
 
     private String getFuelLevel(CarSensorEvent event) {
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/storagelifetime/StorageLifetimeFragment.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/storagelifetime/StorageLifetimeFragment.java
index b180e1a..481820b 100644
--- a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/storagelifetime/StorageLifetimeFragment.java
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/storagelifetime/StorageLifetimeFragment.java
@@ -20,7 +20,6 @@
 
 import android.annotation.Nullable;
 import android.car.Car;
-import android.car.CarNotConnectedException;
 import android.car.storagemonitoring.CarStorageMonitoringManager;
 import android.car.storagemonitoring.CarStorageMonitoringManager.IoStatsListener;
 import android.car.storagemonitoring.IoStats;
@@ -87,13 +86,7 @@
                             fsyncCalls));
                     }
                 });
-                final List<IoStatsEntry> totals;
-                try {
-                    totals = mStorageManager.getAggregateIoStats();
-                } catch (CarNotConnectedException e) {
-                    Log.e(TAG, "Car not connected or not supported", e);
-                    return;
-                }
+                final List<IoStatsEntry> totals = mStorageManager.getAggregateIoStats();
 
                 final long totalBytesWrittenToStorage = totals.stream()
                         .mapToLong(stats -> stats.foreground.bytesWrittenToStorage +
@@ -188,44 +181,33 @@
     }
 
     private void reloadInfo() {
-        try {
-            mStatFs = new StatFs(mActivity.getFilesDir().getAbsolutePath());
+        mStatFs = new StatFs(mActivity.getFilesDir().getAbsolutePath());
 
-            mStorageManager =
-                (CarStorageMonitoringManager) mActivity.getCar().getCarManager(
-                        Car.STORAGE_MONITORING_SERVICE);
+        mStorageManager =
+            (CarStorageMonitoringManager) mActivity.getCar().getCarManager(
+                    Car.STORAGE_MONITORING_SERVICE);
 
-            mStorageWearInfo.setText("Wear estimate: " +
-                mStorageManager.getWearEstimate() + "\nPre EOL indicator: " +
-                preEolToString(mStorageManager.getPreEolIndicatorStatus()));
+        mStorageWearInfo.setText("Wear estimate: " + mStorageManager.getWearEstimate()
+                + "\nPre EOL indicator: "
+                + preEolToString(mStorageManager.getPreEolIndicatorStatus()));
 
-            mStorageChangesHistory.setAdapter(new ArrayAdapter(mActivity,
-                    R.layout.wear_estimate_change_textview,
-                    mStorageManager.getWearEstimateHistory().toArray()));
+        mStorageChangesHistory.setAdapter(new ArrayAdapter(mActivity,
+                R.layout.wear_estimate_change_textview,
+                mStorageManager.getWearEstimateHistory().toArray()));
 
-            mFreeSpaceInfo.setText("Available blocks: " + mStatFs.getAvailableBlocksLong() +
-                "\nBlock size: " + mStatFs.getBlockSizeLong() + " bytes" +
-                "\nfor a total free space of: " +
-                (mStatFs.getBlockSizeLong() * mStatFs.getAvailableBlocksLong() / MEGABYTE) + "MB");
-        } catch (CarNotConnectedException e) {
-            Log.e(TAG, "Car not connected or not supported", e);
-        }
+        mFreeSpaceInfo.setText("Available blocks: " + mStatFs.getAvailableBlocksLong()
+                + "\nBlock size: " + mStatFs.getBlockSizeLong() + " bytes"
+                + "\nfor a total free space of: "
+                + (mStatFs.getBlockSizeLong() * mStatFs.getAvailableBlocksLong() / MEGABYTE)
+                + "MB");
     }
 
     private void registerListener() {
-        try {
-            mStorageManager.registerListener(mIoListener);
-        } catch (CarNotConnectedException e) {
-            Log.e(TAG, "Car not connected or not supported", e);
-        }
+        mStorageManager.registerListener(mIoListener);
     }
 
     private void unregisterListener() {
-        try {
-            mStorageManager.unregisterListener(mIoListener);
-        } catch (CarNotConnectedException e) {
-            Log.e(TAG, "Car not connected or not supported", e);
-        }
+        mStorageManager.unregisterListener(mIoListener);
     }
 
     @Override
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/users/UserRestrictionAdapter.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/users/UserRestrictionAdapter.java
new file mode 100644
index 0000000..00c7192
--- /dev/null
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/users/UserRestrictionAdapter.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2019 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.google.android.car.kitchensink.users;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.CheckBox;
+
+import com.google.android.car.kitchensink.R;
+
+import java.util.List;
+
+/**
+ * Adapter to display a set of user restrictions
+ */
+public class UserRestrictionAdapter extends BaseAdapter {
+
+    private final Context mContext;
+    private final List<UserRestrictionListItem> mItems;
+
+    public UserRestrictionAdapter(Context context, List<UserRestrictionListItem> items) {
+        mContext = context;
+        mItems = items;
+    }
+
+    @Override
+    public int getCount() {
+        return mItems.size();
+    }
+
+    @Override
+    public Object getItem(int index) {
+        return mItems.get(index);
+    }
+
+    @Override
+    public long getItemId(int index) {
+        return index;
+    }
+
+    @Override
+    public View getView(int index, View convertView, ViewGroup parent) {
+        return convertView == null
+                ? createCheckBox((UserRestrictionListItem) getItem(index))
+                : convertView;
+    }
+
+    private CheckBox createCheckBox(UserRestrictionListItem item) {
+        Resources resources = mContext.getResources();
+        CheckBox checkBox = new CheckBox(mContext);
+        checkBox.setTextSize(resources.getDimensionPixelSize(R.dimen.users_checkbox_text_size));
+        int padding = resources.getDimensionPixelSize(R.dimen.users_checkbox_padding);
+        checkBox.setPadding(padding, padding, padding, padding);
+        checkBox.setText(item.getKey());
+        checkBox.setOnCheckedChangeListener((v, isChecked) -> item.setIsChecked(isChecked));
+        checkBox.setChecked(item.getIsChecked());
+        return checkBox;
+    }
+}
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/users/UserRestrictionListItem.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/users/UserRestrictionListItem.java
new file mode 100644
index 0000000..0454f75
--- /dev/null
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/users/UserRestrictionListItem.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2019 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.google.android.car.kitchensink.users;
+
+/**
+ * Represents a user restriction in a list.  Contains the key for the user restriction and the
+ * "checked" status of the checkbox in the list.
+ */
+public class UserRestrictionListItem {
+    private final String mKey;
+    private boolean mIsChecked;
+
+    public UserRestrictionListItem(String key, boolean isChecked) {
+        mKey = key;
+        mIsChecked = isChecked;
+    }
+
+    public String getKey() {
+        return mKey;
+    }
+
+    public void setIsChecked(boolean value) {
+        mIsChecked = value;
+    }
+
+    public boolean getIsChecked() {
+        return mIsChecked;
+    }
+}
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/users/UsersFragment.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/users/UsersFragment.java
new file mode 100644
index 0000000..3272c30
--- /dev/null
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/users/UsersFragment.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2019 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.google.android.car.kitchensink.users;
+
+import android.annotation.Nullable;
+import android.content.Context;
+import android.os.Bundle;
+import android.os.UserManager;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.ListView;
+import android.widget.Toast;
+
+import androidx.fragment.app.Fragment;
+
+import com.google.android.car.kitchensink.R;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Manipulate users in various ways
+ */
+public class UsersFragment extends Fragment {
+
+    private static final List<String> CONFIGURABLE_USER_RESTRICTIONS =
+            Arrays.asList(
+                    UserManager.DISALLOW_ADD_USER,
+                    UserManager.DISALLOW_BLUETOOTH,
+                    UserManager.DISALLOW_FACTORY_RESET,
+                    UserManager.DISALLOW_INSTALL_APPS,
+                    UserManager.DISALLOW_MODIFY_ACCOUNTS,
+                    UserManager.DISALLOW_OUTGOING_CALLS,
+                    UserManager.DISALLOW_REMOVE_USER,
+                    UserManager.DISALLOW_SMS,
+                    UserManager.DISALLOW_UNINSTALL_APPS,
+                    UserManager.DISALLOW_USER_SWITCH
+            );
+
+    @Nullable
+    @Override
+    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
+            @Nullable Bundle savedInstanceState) {
+        return inflater.inflate(R.layout.users, container, false);
+    }
+
+    public void onViewCreated(View view, Bundle savedInstanceState) {
+        ListView userRestrictionsList = view.findViewById(R.id.user_restrictions_list);
+        userRestrictionsList.setAdapter(
+                new UserRestrictionAdapter(getContext(), createUserRestrictionItems()));
+
+        Button applyButton = view.findViewById(R.id.apply_button);
+        applyButton.setOnClickListener(v -> {
+            UserRestrictionAdapter adapter =
+                    (UserRestrictionAdapter) userRestrictionsList.getAdapter();
+            int count = adapter.getCount();
+            UserManager userManager =
+                    (UserManager) getContext().getSystemService(Context.USER_SERVICE);
+
+            // Iterate through all of the user restrictions and set their values
+            for (int i = 0; i < count; i++) {
+                UserRestrictionListItem item = (UserRestrictionListItem) adapter.getItem(i);
+                userManager.setUserRestriction(item.getKey(), item.getIsChecked());
+            }
+
+            Toast.makeText(
+                    getContext(), "User restrictions have been set!", Toast.LENGTH_SHORT)
+                    .show();
+        });
+    }
+
+    private List<UserRestrictionListItem> createUserRestrictionItems() {
+        UserManager userManager = (UserManager) getContext().getSystemService(Context.USER_SERVICE);
+        ArrayList<UserRestrictionListItem> list = new ArrayList<>();
+        for (String key : CONFIGURABLE_USER_RESTRICTIONS) {
+            list.add(new UserRestrictionListItem(key, userManager.hasUserRestriction(key)));
+        }
+        return list;
+    }
+}
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/volume/VolumeTestFragment.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/volume/VolumeTestFragment.java
index 066f46a..73e3798 100644
--- a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/volume/VolumeTestFragment.java
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/volume/VolumeTestFragment.java
@@ -16,7 +16,6 @@
 package com.google.android.car.kitchensink.volume;
 
 import android.car.Car;
-import android.car.CarNotConnectedException;
 import android.car.media.CarAudioManager;
 import android.content.ComponentName;
 import android.content.Context;
@@ -118,12 +117,8 @@
                 @Override
                 public void onServiceConnected(ComponentName name, IBinder binder) {
                     Log.d(TAG, "Connected to Car Service");
-                    try {
-                        mCarAudioManager = (CarAudioManager) mCar.getCarManager(Car.AUDIO_SERVICE);
-                        initVolumeInfo();
-                    } catch (CarNotConnectedException e) {
-                        Log.e(TAG, "Car is not connected!", e);
-                    }
+                    mCarAudioManager = (CarAudioManager) mCar.getCarManager(Car.AUDIO_SERVICE);
+                    initVolumeInfo();
                 }
 
                 @Override
@@ -148,14 +143,10 @@
         final SeekBar.OnSeekBarChangeListener seekListener = new SeekBar.OnSeekBarChangeListener() {
             public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                 final float percent = (progress - 100) / 100.0f;
-                try {
-                    if (seekBar.getId() == R.id.fade_bar) {
-                        mCarAudioManager.setFadeTowardFront(percent);
-                    } else {
-                        mCarAudioManager.setBalanceTowardRight(percent);
-                    }
-                } catch (CarNotConnectedException e) {
-                    Log.e(TAG, "Can't adjust fade or balance when car not connected", e);
+                if (seekBar.getId() == R.id.fade_bar) {
+                    mCarAudioManager.setFadeTowardFront(percent);
+                } else {
+                    mCarAudioManager.setBalanceTowardRight(percent);
                 }
             }
 
@@ -180,16 +171,11 @@
             Log.e(TAG, "CarAudioManager is null");
             return;
         }
-        int current = 0;
-        try {
-            current = mCarAudioManager.getGroupVolume(groupId);
-            int volume = current + (up ? 1 : -1);
-            mCarAudioManager.setGroupVolume(groupId, volume,
-                    AudioManager.FLAG_SHOW_UI | AudioManager.FLAG_PLAY_SOUND);
-            Log.d(TAG, "Set group " + groupId + " volume " + volume);
-        } catch (CarNotConnectedException e) {
-            Log.e(TAG, "car not connected", e);
-        }
+        int current = mCarAudioManager.getGroupVolume(groupId);
+        int volume = current + (up ? 1 : -1);
+        mCarAudioManager.setGroupVolume(groupId, volume,
+                AudioManager.FLAG_SHOW_UI | AudioManager.FLAG_PLAY_SOUND);
+        Log.d(TAG, "Set group " + groupId + " volume " + volume);
     }
 
     public void requestFocus(int groupId) {
@@ -197,36 +183,32 @@
     }
 
     private void initVolumeInfo() {
-        try {
-            int volumeGroupCount = mCarAudioManager.getVolumeGroupCount();
-            mVolumeInfos = new VolumeInfo[volumeGroupCount + 1];
-            mGroupIdIndexMap.clear();
-            mVolumeInfos[0] = new VolumeInfo();
-            mVolumeInfos[0].mId = "Group id";
-            mVolumeInfos[0].mCurrent = "Current";
-            mVolumeInfos[0].mMax = "Max";
+        int volumeGroupCount = mCarAudioManager.getVolumeGroupCount();
+        mVolumeInfos = new VolumeInfo[volumeGroupCount + 1];
+        mGroupIdIndexMap.clear();
+        mVolumeInfos[0] = new VolumeInfo();
+        mVolumeInfos[0].mId = "Group id";
+        mVolumeInfos[0].mCurrent = "Current";
+        mVolumeInfos[0].mMax = "Max";
 
-            int i = 1;
-            for (int groupId = 0; groupId < volumeGroupCount; groupId++) {
-                mVolumeInfos[i] = new VolumeInfo();
-                mVolumeInfos[i].mGroupId = groupId;
-                mGroupIdIndexMap.put(groupId, i);
-                mVolumeInfos[i].mId = String.valueOf(groupId);
+        int i = 1;
+        for (int groupId = 0; groupId < volumeGroupCount; groupId++) {
+            mVolumeInfos[i] = new VolumeInfo();
+            mVolumeInfos[i].mGroupId = groupId;
+            mGroupIdIndexMap.put(groupId, i);
+            mVolumeInfos[i].mId = String.valueOf(groupId);
 
 
-                int current = mCarAudioManager.getGroupVolume(groupId);
-                int max = mCarAudioManager.getGroupMaxVolume(groupId);
-                mVolumeInfos[i].mCurrent = String.valueOf(current);
-                mVolumeInfos[i].mMax = String.valueOf(max);
+            int current = mCarAudioManager.getGroupVolume(groupId);
+            int max = mCarAudioManager.getGroupMaxVolume(groupId);
+            mVolumeInfos[i].mCurrent = String.valueOf(current);
+            mVolumeInfos[i].mMax = String.valueOf(max);
 
-                Log.d(TAG, groupId + " max: " + mVolumeInfos[i].mMax + " current: "
-                        + mVolumeInfos[i].mCurrent);
-                i++;
-            }
-            mAdapter.refreshVolumes(mVolumeInfos);
-        } catch (CarNotConnectedException e) {
-            Log.e(TAG, "car not connected", e);
+            Log.d(TAG, groupId + " max: " + mVolumeInfos[i].mMax + " current: "
+                    + mVolumeInfos[i].mCurrent);
+            i++;
         }
+        mAdapter.refreshVolumes(mVolumeInfos);
     }
 
     @Override
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/weblinks/WebLinksTestFragment.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/weblinks/WebLinksTestFragment.java
new file mode 100644
index 0000000..2d2f864
--- /dev/null
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/weblinks/WebLinksTestFragment.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2018 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.google.android.car.kitchensink.weblinks;
+
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.LinearLayout;
+
+import androidx.annotation.Nullable;
+import androidx.fragment.app.Fragment;
+
+import com.google.android.car.kitchensink.R;
+
+/**
+ * This fragment just has a few links to web pages.
+ */
+public class WebLinksTestFragment extends Fragment {
+    @Override
+    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
+            @Nullable Bundle savedInstanceState) {
+        View root = inflater.inflate(R.layout.weblinks_fragment, container, false);
+
+        LinearLayout buttons = root.findViewById(R.id.buttons);
+        for (int i = 0; i < buttons.getChildCount(); i++) {
+            buttons.getChildAt(i).setOnClickListener(this::onClick);
+        }
+
+        return root;
+    }
+
+    private void onClick(View view) {
+        String url = view.getTag().toString();
+
+        if (!url.startsWith("http")) {
+            url = "http://" + url;
+        }
+        startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
+    }
+}
diff --git a/tests/GarageModeTestApp/res/layout/activity_content.xml b/tests/GarageModeTestApp/res/layout/activity_content.xml
deleted file mode 100644
index 4ae4c8d..0000000
--- a/tests/GarageModeTestApp/res/layout/activity_content.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2018 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.
--->
-<!-- We use this container to place app fragments. It insets the fragment contents -->
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/activity_content"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent">
-</FrameLayout>
\ No newline at end of file
diff --git a/tests/GarageModeTestApp/res/layout/main_activity.xml b/tests/GarageModeTestApp/res/layout/main_activity.xml
new file mode 100644
index 0000000..b76e5b7
--- /dev/null
+++ b/tests/GarageModeTestApp/res/layout/main_activity.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2018 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.
+-->
+<androidx.drawerlayout.widget.DrawerLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:id="@+id/drawer_layout"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <LinearLayout
+        android:background="@android:color/black"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:orientation="vertical">
+
+        <!-- The min height of the Toolbar needs to be set to ensure that the icons in it
+             are vertically centered. -->
+        <androidx.appcompat.widget.Toolbar
+            android:id="@+id/car_toolbar"
+            android:background="@android:color/black"
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/car_app_bar_height"
+            android:layout_gravity="center_vertical"
+            android:minHeight="@dimen/car_app_bar_height"
+            style="?attr/toolbarStyle" />
+
+        <FrameLayout
+            android:id="@+id/activity_content"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent" />
+    </LinearLayout>
+
+    <!-- Using a CosntraintLayout to specify a maxWidth. -->
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_gravity="start"
+        android:layout_marginEnd="@dimen/car_margin"
+        android:maxWidth="@dimen/car_drawer_max_width">
+
+        <include
+            layout="@layout/car_drawer"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintStart_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent" />
+    </androidx.constraintlayout.widget.ConstraintLayout>
+</androidx.drawerlayout.widget.DrawerLayout>
diff --git a/tests/GarageModeTestApp/res/values/strings.xml b/tests/GarageModeTestApp/res/values/strings.xml
index 7ad5d70..59945125 100644
--- a/tests/GarageModeTestApp/res/values/strings.xml
+++ b/tests/GarageModeTestApp/res/values/strings.xml
@@ -14,35 +14,35 @@
      limitations under the License.
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-  <string name="app_name">GarageMode Test App</string>
+  <string name="app_name" translatable="false">GarageMode Test App</string>
 
-  <string name="button_schedule_job">Schedule Job</string>
-  <string name="button_job_info">Job Info</string>
-  <string name="button_enter_garage_mode">Enter GarageMode</string>
-  <string name="button_exit_garage_mode">Exit GarageMode</string>
+  <string name="button_schedule_job" translatable="false">Schedule Job</string>
+  <string name="button_job_info" translatable="false">Job Info</string>
+  <string name="button_enter_garage_mode" translatable="false">Enter GarageMode</string>
+  <string name="button_exit_garage_mode" translatable="false">Exit GarageMode</string>
 
-  <string name="checkbox_require_persisted">Persisted?</string>
-  <string name="checkbox_require_idleness">Require idleness?</string>
-  <string name="checkbox_require_charging">Require charging?</string>
+  <string name="checkbox_require_persisted" translatable="false">Persisted?</string>
+  <string name="checkbox_require_idleness" translatable="false">Require idleness?</string>
+  <string name="checkbox_require_charging" translatable="false">Require charging?</string>
 
-  <string name="no_results">No Results</string>
+  <string name="no_results" translatable="false">No Results</string>
 
-  <string name="section_header_garage_mode_config">GarageMode Settings</string>
-  <string name="section_header_job_configuration">Job Configuration</string>
-  <string name="section_header_jobs_list">Scheduled Jobs</string>
-  <string name="section_header_watchdog">Watchdog</string>
+  <string name="section_header_garage_mode_config" translatable="false">GarageMode Settings</string>
+  <string name="section_header_job_configuration" translatable="false">Job Configuration</string>
+  <string name="section_header_jobs_list" translatable="false">Scheduled Jobs</string>
+  <string name="section_header_watchdog" translatable="false">Watchdog</string>
 
-  <string name="spinner_label_garage_mode_duration">GarageMode max duration:</string>
-  <string name="spinner_label_job_duration">Job duration:</string>
-  <string name="spinner_label_network_type">Network type:</string>
+  <string name="spinner_label_garage_mode_duration" translatable="false">GarageMode max duration:</string>
+  <string name="spinner_label_job_duration" translatable="false">Job duration:</string>
+  <string name="spinner_label_network_type" translatable="false">Network type:</string>
 
-  <string-array name="network_types_list">
+  <string-array name="network_types_list" translatable="false">
     <item>ANY</item>
     <item>NONE</item>
     <item>UNMETERED</item>
   </string-array>
 
-  <string-array name="duration_list">
+  <string-array name="duration_list" translatable="false">
     <item>1 second</item>
     <item>5 seconds</item>
     <item>10 seconds</item>
@@ -51,4 +51,7 @@
     <item>5 minutes</item>
     <item>1 hour</item>
   </string-array>
+
+  <string name="car_drawer_open" translatable="false">Open drawer</string>
+  <string name="car_drawer_close" translatable="false">Close drawer</string>
 </resources>
diff --git a/tests/GarageModeTestApp/res/values/styles.xml b/tests/GarageModeTestApp/res/values/styles.xml
index 92cb1c5..642e7ea 100644
--- a/tests/GarageModeTestApp/res/values/styles.xml
+++ b/tests/GarageModeTestApp/res/values/styles.xml
@@ -14,7 +14,7 @@
      limitations under the License.
 -->
 <resources>
-  <style name="GarageModeTheme" parent="Theme.Car.Light.NoActionBar.Drawer">
+  <style name="GarageModeTheme" parent="Theme.Car.Dark.NoActionBar.Drawer">
     <item name="android:textSize">24sp</item>
   </style>
   <style name="SectionContainer">
@@ -54,4 +54,4 @@
     <item name="android:layout_margin">5dp</item>
     <item name="android:padding">3dp</item>
   </style>
-</resources>
\ No newline at end of file
+</resources>
diff --git a/tests/GarageModeTestApp/src/com/google/android/car/garagemode/testapp/MainActivity.java b/tests/GarageModeTestApp/src/com/google/android/car/garagemode/testapp/MainActivity.java
index 55b7c03..2019b7e 100644
--- a/tests/GarageModeTestApp/src/com/google/android/car/garagemode/testapp/MainActivity.java
+++ b/tests/GarageModeTestApp/src/com/google/android/car/garagemode/testapp/MainActivity.java
@@ -15,19 +15,28 @@
  */
 package com.google.android.car.garagemode.testapp;
 
+import android.content.res.Configuration;
 import android.os.Bundle;
+import android.view.MenuItem;
 
-import androidx.car.drawer.CarDrawerActivity;
+import androidx.appcompat.app.ActionBarDrawerToggle;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.appcompat.widget.Toolbar;
 import androidx.car.drawer.CarDrawerAdapter;
+import androidx.car.drawer.CarDrawerController;
 import androidx.car.drawer.DrawerItemViewHolder;
+import androidx.drawerlayout.widget.DrawerLayout;
 import androidx.fragment.app.Fragment;
 
 import java.util.ArrayList;
 import java.util.List;
 
-public class MainActivity extends CarDrawerActivity {
+public class MainActivity extends AppCompatActivity {
     private static final Logger LOG = new Logger("MainActivity");
 
+    private CarDrawerController mDrawerController;
+    private Toolbar mToolbar;
+
     private final List<MenuEntry> mMenuEntries = new ArrayList<MenuEntry>() {
         {
             add("Offcar testing", OffcarTestingFragment.class);
@@ -47,9 +56,47 @@
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        setMainContent(R.layout.activity_content);
+        setContentView(R.layout.main_activity);
+
+        DrawerLayout drawerLayout = findViewById(R.id.drawer_layout);
+        ActionBarDrawerToggle drawerToggle = new ActionBarDrawerToggle(
+                /* activity= */ this,
+                drawerLayout,
+                R.string.car_drawer_open,
+                R.string.car_drawer_close);
+
+        mToolbar = findViewById(R.id.car_toolbar);
+        setSupportActionBar(mToolbar);
+        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+        getSupportActionBar().setHomeButtonEnabled(true);
+
         mMenuEntries.get(0).onClick();
-        getDrawerController().setRootAdapter(new DrawerAdapter());
+
+        mDrawerController = new CarDrawerController(drawerLayout, drawerToggle);
+        mDrawerController.setRootAdapter(new DrawerAdapter());
+    }
+
+    @Override
+    protected void onPostCreate(Bundle savedInstanceState) {
+        super.onPostCreate(savedInstanceState);
+        mDrawerController.syncState();
+    }
+
+    @Override
+    protected void onStop() {
+        super.onStop();
+        mDrawerController.closeDrawer();
+    }
+
+    @Override
+    public void onConfigurationChanged(Configuration newConfig) {
+        super.onConfigurationChanged(newConfig);
+        mDrawerController.onConfigurationChanged(newConfig);
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        return mDrawerController.onOptionsItemSelected(item) || super.onOptionsItemSelected(item);
     }
 
     private interface ClickHandler {
@@ -155,8 +202,7 @@
             }
 
             mMenuEntries.get(position).onClick();
-
-            getDrawerController().closeDrawer();
+            mDrawerController.closeDrawer();
         }
     }
 }
diff --git a/tests/InstrumentClusterRendererSample/res/values/strings.xml b/tests/InstrumentClusterRendererSample/res/values/strings.xml
index 5c39d53..2666619 100644
--- a/tests/InstrumentClusterRendererSample/res/values/strings.xml
+++ b/tests/InstrumentClusterRendererSample/res/values/strings.xml
@@ -15,47 +15,47 @@
 -->
 
 <resources xmlns:xliff="http://schemas.android.com/tools">
-    <string name="app_name">InstrumentClusterRendererImpl</string>
+    <string name="app_name" translatable="false">InstrumentClusterRendererImpl</string>
 
-    <string name="incoming_call">Incoming call</string>
-    <string name="dialing">Dialing</string>
-    <string name="dummy_call_type">• Mobile</string>
+    <string name="incoming_call" translatable="false">Incoming call</string>
+    <string name="dialing" translatable="false">Dialing</string>
+    <string name="dummy_call_type" translatable="false">• Mobile</string>
 
-    <string name="font_family_primary">sans-serif-medium</string>
-    <string name="font_family_secondary">sans-serif-regular</string>
+    <string name="font_family_primary" translatable="false">sans-serif-medium</string>
+    <string name="font_family_secondary" translatable="false">sans-serif-regular</string>
 
-    <string name="dummy_weather_forecast">Partly cloudy</string>
-    <string name="dummy_weather_location">Mountain View, CA</string>
-    <string name="dummy_weather_temperature">82°</string>
+    <string name="dummy_weather_forecast" translatable="false">Partly cloudy</string>
+    <string name="dummy_weather_location" translatable="false">Mountain View, CA</string>
+    <string name="dummy_weather_temperature" translatable="false">82°</string>
 
-    <string name="nav_distance_units_ft">ft</string>
-    <string name="nav_distance_units_meters">m</string>
-    <string name="nav_distance_units_kilometers">km</string>
-    <string name="nav_distance_units_miles">mi</string>
-    <string name="nav_distance_units_yards">yd</string>
+    <string name="nav_distance_units_ft" translatable="false">ft</string>
+    <string name="nav_distance_units_meters" translatable="false">m</string>
+    <string name="nav_distance_units_kilometers" translatable="false">km</string>
+    <string name="nav_distance_units_miles" translatable="false">mi</string>
+    <string name="nav_distance_units_yards" translatable="false">yd</string>
 
-    <string name="incoming_message">Incoming message</string>
+    <string name="incoming_message" translatable="false">Incoming message</string>
 
-    <string name="unknown">Unknown</string>
-    <string name="voicemail">Voicemail</string>
-    <string name="phone_label_with_info">
+    <string name="unknown" translatable="false">Unknown</string>
+    <string name="voicemail" translatable="false">Voicemail</string>
+    <string name="phone_label_with_info" translatable="false">
         <xliff:g id="label" example="Mobile">%1$s</xliff:g>
         " \u00B7 "
         <xliff:g id="duration" example="1:20">%2$s</xliff:g>
     </string>
     <!-- Status label for phone state [CHAR LIMIT=20] -->
-    <string name="call_state_connecting">Connecting</string>
+    <string name="call_state_connecting" translatable="false">Connecting</string>
     <!-- Status label for phone state [CHAR LIMIT=20] -->
-    <string name="call_state_dialing">Dialing</string>
+    <string name="call_state_dialing" translatable="false">Dialing</string>
     <!-- Status label for phone state [CHAR LIMIT=20] -->
-    <string name="call_state_hold">On Hold</string>
+    <string name="call_state_hold" translatable="false">On Hold</string>
     <!-- Status label for phone state [CHAR LIMIT=20] -->
-    <string name="call_state_call_ended">Call Ended</string>
+    <string name="call_state_call_ended" translatable="false">Call Ended</string>
     <!-- Status label for phone state [CHAR LIMIT=20] -->
-    <string name="call_state_call_active">Connected</string>
+    <string name="call_state_call_active" translatable="false">Connected</string>
     <!-- Status label for phone state [CHAR LIMIT=20] -->
-    <string name="call_state_call_ringing">Ringing</string>
+    <string name="call_state_call_ringing" translatable="false">Ringing</string>
     <!-- Status label for phone state [CHAR LIMIT=20] -->
-    <string name="call_state_call_ending">Disconnecting</string>
+    <string name="call_state_call_ending" translatable="false">Disconnecting</string>
 
 </resources>
diff --git a/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/InstrumentClusterRenderingServiceImpl.java b/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/InstrumentClusterRenderingServiceImpl.java
index 15296d9..066072e 100644
--- a/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/InstrumentClusterRenderingServiceImpl.java
+++ b/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/InstrumentClusterRenderingServiceImpl.java
@@ -46,12 +46,12 @@
     }
 
     @Override
-    protected NavigationRenderer getNavigationRenderer() {
+    public NavigationRenderer getNavigationRenderer() {
         return mController.getNavigationRenderer();
     }
 
     @Override
-    protected void onKeyEvent(KeyEvent keyEvent) {
+    public void onKeyEvent(KeyEvent keyEvent) {
         // No need to handle key events in this implementation.
     }
 }
diff --git a/tests/ThemePlayground/Android.mk b/tests/ThemePlayground/Android.mk
new file mode 100644
index 0000000..90d12b0
--- /dev/null
+++ b/tests/ThemePlayground/Android.mk
@@ -0,0 +1,48 @@
+#
+# Copyright (C) 2018 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.
+#
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_USE_AAPT2 := true
+
+LOCAL_MODULE_TAGS := optional
+LOCAL_AAPT_FLAGS := --auto-add-overlay
+
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
+
+LOCAL_STATIC_ANDROID_LIBRARIES += \
+    androidx.car_car \
+    car-theme-lib \
+    androidx.transition_transition \
+    androidx.legacy_legacy-support-v4 \
+    androidx-constraintlayout_constraintlayout
+
+LOCAL_MODULE_OWNER := google
+LOCAL_PACKAGE_NAME := ThemePlayground
+LOCAL_PRIVATE_PLATFORM_APIS := true
+LOCAL_CERTIFICATE := platform
+LOCAL_PRIVILEGED_MODULE := true
+LOCAL_STATIC_JAVA_LIBRARIES := \
+         androidx-constraintlayout_constraintlayout-solver
+
+LOCAL_PROGUARD_ENABLED := disabled
+
+LOCAL_JAVA_LIBRARIES += android.car
+
+include $(BUILD_PACKAGE)
diff --git a/tests/ThemePlayground/AndroidManifest.xml b/tests/ThemePlayground/AndroidManifest.xml
new file mode 100644
index 0000000..def394f
--- /dev/null
+++ b/tests/ThemePlayground/AndroidManifest.xml
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2018 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
+  -->
+
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+          package="com.android.car.themeplayground">
+    <uses-sdk
+        android:minSdkVersion="26"
+        android:targetSdkVersion="26"/>
+    <uses-permission android:name="android.permission.MODIFY_DAY_NIGHT_MODE" />
+    <application
+        android:allowBackup="true"
+        android:icon="@drawable/ic_launcher"
+        android:label="@string/app_name"
+        android:supportsRtl="true"
+        android:theme="@style/Theme.App">
+        <activity
+            android:name=".TextSamples"
+            android:label="@string/app_name"
+            android:windowSoftInputMode="stateUnchanged"
+            android:resizeableActivity="true"
+            android:allowEmbedded="true">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+        <activity
+            android:name=".ColorSamples"
+            android:label="@string/panel_elements"
+            android:windowSoftInputMode="stateUnchanged"
+            android:resizeableActivity="true"
+            android:allowEmbedded="true">
+        </activity>
+        <activity android:name=".DialogSamples"
+                  android:label="@string/dialog_elements"
+                  android:parentActivityName="com.android.car.themeplayground.TextSamples">
+        </activity>
+        <activity android:name=".WidgetsSamples"
+            android:label="@string/widgets"
+            android:parentActivityName="com.android.car.themeplayground.TextSamples">
+        </activity>
+        <activity android:name=".PagedListViewSamples"
+                  android:label="@string/paged_list_view"
+                  android:parentActivityName="com.android.car.themeplayground.TextSamples">
+        </activity>
+        <activity android:name=".DefaultThemeSamples"
+                  android:label="@string/default_themes"
+                  android:parentActivityName="com.android.car.themeplayground.TextSamples">
+        </activity>
+        <activity android:name=".MultipleIntentSamples"
+                  android:label="@string/multiple_intent"
+                  android:parentActivityName="com.android.car.themeplayground.TextSamples">
+        </activity>
+    </application>
+</manifest>
\ No newline at end of file
diff --git a/tests/ThemePlayground/res/drawable/ic_launcher.png b/tests/ThemePlayground/res/drawable/ic_launcher.png
new file mode 100644
index 0000000..5d5dc1a
--- /dev/null
+++ b/tests/ThemePlayground/res/drawable/ic_launcher.png
Binary files differ
diff --git a/tests/ThemePlayground/res/drawable/ic_launcher_background.xml b/tests/ThemePlayground/res/drawable/ic_launcher_background.xml
new file mode 100644
index 0000000..29fd4e0
--- /dev/null
+++ b/tests/ThemePlayground/res/drawable/ic_launcher_background.xml
@@ -0,0 +1,186 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2018 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
+  -->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="108dp"
+    android:height="108dp"
+    android:viewportHeight="108"
+    android:viewportWidth="108">
+    <path
+        android:fillColor="#26A69A"
+        android:pathData="M0,0h108v108h-108z" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M9,0L9,108"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M19,0L19,108"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M29,0L29,108"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M39,0L39,108"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M49,0L49,108"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M59,0L59,108"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M69,0L69,108"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M79,0L79,108"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M89,0L89,108"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M99,0L99,108"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M0,9L108,9"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M0,19L108,19"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M0,29L108,29"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M0,39L108,39"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M0,49L108,49"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M0,59L108,59"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M0,69L108,69"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M0,79L108,79"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M0,89L108,89"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M0,99L108,99"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M19,29L89,29"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M19,39L89,39"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M19,49L89,49"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M19,59L89,59"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M19,69L89,69"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M19,79L89,79"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M29,19L29,89"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M39,19L39,89"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M49,19L49,89"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M59,19L59,89"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M69,19L69,89"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M79,19L79,89"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+</vector>
diff --git a/tests/ThemePlayground/res/drawable/ic_launcher_foreground.xml b/tests/ThemePlayground/res/drawable/ic_launcher_foreground.xml
new file mode 100644
index 0000000..497b104
--- /dev/null
+++ b/tests/ThemePlayground/res/drawable/ic_launcher_foreground.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2018 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
+  -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:aapt="http://schemas.android.com/aapt"
+    android:width="108dp"
+    android:height="108dp"
+    android:viewportHeight="108"
+    android:viewportWidth="108">
+    <path
+        android:fillType="evenOdd"
+        android:pathData="M32,64C32,64 38.39,52.99 44.13,50.95C51.37,48.37 70.14,49.57 70.14,49.57L108.26,87.69L108,109.01L75.97,107.97L32,64Z"
+        android:strokeColor="#00000000"
+        android:strokeWidth="1">
+        <aapt:attr name="android:fillColor">
+            <gradient
+                android:endX="78.5885"
+                android:endY="90.9159"
+                android:startX="48.7653"
+                android:startY="61.0927"
+                android:type="linear">
+                <item
+                    android:color="#44000000"
+                    android:offset="0.0" />
+                <item
+                    android:color="#00000000"
+                    android:offset="1.0" />
+            </gradient>
+        </aapt:attr>
+    </path>
+    <path
+        android:fillColor="#FFFFFF"
+        android:fillType="nonZero"
+        android:pathData="M66.94,46.02L66.94,46.02C72.44,50.07 76,56.61 76,64L32,64C32,56.61 35.56,50.11 40.98,46.06L36.18,41.19C35.45,40.45 35.45,39.3 36.18,38.56C36.91,37.81 38.05,37.81 38.78,38.56L44.25,44.05C47.18,42.57 50.48,41.71 54,41.71C57.48,41.71 60.78,42.57 63.68,44.05L69.11,38.56C69.84,37.81 70.98,37.81 71.71,38.56C72.44,39.3 72.44,40.45 71.71,41.19L66.94,46.02ZM62.94,56.92C64.08,56.92 65,56.01 65,54.88C65,53.76 64.08,52.85 62.94,52.85C61.8,52.85 60.88,53.76 60.88,54.88C60.88,56.01 61.8,56.92 62.94,56.92ZM45.06,56.92C46.2,56.92 47.13,56.01 47.13,54.88C47.13,53.76 46.2,52.85 45.06,52.85C43.92,52.85 43,53.76 43,54.88C43,56.01 43.92,56.92 45.06,56.92Z"
+        android:strokeColor="#00000000"
+        android:strokeWidth="1" />
+</vector>
diff --git a/tests/ThemePlayground/res/layout/device_default_theme_samples.xml b/tests/ThemePlayground/res/layout/device_default_theme_samples.xml
new file mode 100644
index 0000000..94391cd
--- /dev/null
+++ b/tests/ThemePlayground/res/layout/device_default_theme_samples.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2018 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
+  -->
+
+<androidx.constraintlayout.widget.ConstraintLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context="com.codinginflow.radiobuttonexample.MainActivity">
+
+    <TextView
+        android:id="@+id/set_application_theme"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="8dp"
+        android:layout_marginTop="16dp"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        android:text="@string/theme_name"/>
+
+    <AutoCompleteTextView
+        android:id="@+id/theme_name"
+        android:layout_width="800dp"
+        android:layout_height="wrap_content"
+        android:layout_weight="1"
+        android:layout_marginStart="16dp"
+        android:layout_marginTop="8dp"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintEnd_toStartOf="@+id/button_apply"
+        app:layout_constraintStart_toEndOf="@+id/set_application_theme"/>
+
+    <Button
+        android:id="@+id/button_apply"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_below="@+id/text_view_selected"
+        android:layout_centerHorizontal="true"
+        android:layout_marginTop="16dp"
+        android:text="apply"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toEndOf="@+id/theme_name"
+        app:layout_constraintTop_toTopOf="parent"/>
+
+    <include layout="@layout/menu_button"/>
+
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/tests/ThemePlayground/res/layout/dialog_samples.xml b/tests/ThemePlayground/res/layout/dialog_samples.xml
new file mode 100644
index 0000000..9958de1
--- /dev/null
+++ b/tests/ThemePlayground/res/layout/dialog_samples.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2018 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
+  -->
+
+<androidx.constraintlayout.widget.ConstraintLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:id="@+id/dialogLayout"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <include layout="@layout/set_background"
+             android:id="@+id/setBackground"
+             android:layout_width="wrap_content"
+             android:layout_height="wrap_content"
+             android:layout_marginTop="20dp"
+             app:layout_constraintBottom_toTopOf="@+id/showDialogBT"
+             app:layout_constraintEnd_toEndOf="parent"
+             app:layout_constraintStart_toStartOf="parent"
+             app:layout_constraintTop_toTopOf="parent"/>
+
+
+    <Button
+        android:id="@+id/showDialogBT"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="Show Dialog"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <Button
+        android:id="@+id/showDialogWithCheckboxBT"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="Show Dialog With Checkbox"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="@+id/showDialogBT" />
+
+    <include layout="@layout/menu_button"/>
+
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/tests/ThemePlayground/res/layout/item_list.xml b/tests/ThemePlayground/res/layout/item_list.xml
new file mode 100644
index 0000000..67b5b63
--- /dev/null
+++ b/tests/ThemePlayground/res/layout/item_list.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2018 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
+  -->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="horizontal">
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="10dp"
+        android:layout_marginBottom="10dp"
+        android:id="@+id/textTitle"
+        android:text="TESTING"/>
+
+</LinearLayout>
diff --git a/tests/ThemePlayground/res/layout/menu_button.xml b/tests/ThemePlayground/res/layout/menu_button.xml
new file mode 100644
index 0000000..9dbe9ee
--- /dev/null
+++ b/tests/ThemePlayground/res/layout/menu_button.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2018 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
+  -->
+
+<androidx.constraintlayout.widget.ConstraintLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:id="@+id/dialogLayout"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <Button
+        android:id="@+id/button_menu"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_below="@+id/text_view_selected"
+        android:layout_centerHorizontal="true"
+        android:layout_marginTop="20dp"
+        android:text="menu"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"/>
+
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/tests/ThemePlayground/res/layout/multiple_intent_samples.xml b/tests/ThemePlayground/res/layout/multiple_intent_samples.xml
new file mode 100644
index 0000000..fcca86f
--- /dev/null
+++ b/tests/ThemePlayground/res/layout/multiple_intent_samples.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2018 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
+  -->
+
+<androidx.constraintlayout.widget.ConstraintLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <Button
+        android:id="@+id/fire_web_intent_button"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="Fire Intent web"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+    <include layout="@layout/menu_button"/>
+
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/tests/ThemePlayground/res/layout/paged_list_view_samples.xml b/tests/ThemePlayground/res/layout/paged_list_view_samples.xml
new file mode 100644
index 0000000..a3ebb1e
--- /dev/null
+++ b/tests/ThemePlayground/res/layout/paged_list_view_samples.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2018 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
+  -->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <androidx.car.widget.PagedListView
+        android:id="@+id/list"
+        android:theme="@style/PagedListTheme"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        app:gutter="both" />
+    <include layout="@layout/menu_button"/>
+</LinearLayout>
diff --git a/tests/ThemePlayground/res/layout/panel_samples.xml b/tests/ThemePlayground/res/layout/panel_samples.xml
new file mode 100644
index 0000000..8e19e14
--- /dev/null
+++ b/tests/ThemePlayground/res/layout/panel_samples.xml
@@ -0,0 +1,190 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2018 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
+  -->
+
+<androidx.constraintlayout.widget.ConstraintLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+    <ScrollView
+        android:layout_width="0dp"
+        android:layout_height="0dp"
+        android:layout_marginBottom="8dp"
+        android:layout_marginEnd="16dp"
+        android:layout_marginStart="16dp"
+        android:layout_marginTop="8dp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent">
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="vertical">
+
+            <FrameLayout
+                android:layout_width="match_parent"
+                android:layout_height="100dp"
+                android:background="?android:attr/colorPrimary">
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="android:attr/colorPrimary"/>
+            </FrameLayout>
+            <FrameLayout
+                android:layout_width="match_parent"
+                android:layout_height="100dp"
+                android:background="?android:attr/colorPrimaryDark">
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="android:attr/colorPrimaryDark"/>
+            </FrameLayout>
+            <FrameLayout
+                android:layout_width="match_parent"
+                android:layout_height="100dp"
+                android:background="?android:attr/colorAccent">
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="android:attr/colorAccent"/>
+            </FrameLayout>
+            <FrameLayout
+                android:layout_width="match_parent"
+                android:layout_height="100dp"
+                android:background="?android:attr/colorForeground">
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="android:attr/colorForeground"
+                    android:textColor="?android:attr/textColorPrimaryInverse"/>
+            </FrameLayout>
+            <FrameLayout
+                android:layout_width="match_parent"
+                android:layout_height="100dp"
+                android:background="?android:attr/colorBackground">
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="android:attr/colorBackground"/>
+            </FrameLayout>
+            <FrameLayout
+                android:layout_width="match_parent"
+                android:layout_height="100dp"
+                android:background="?android:attr/windowBackground">
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="android:attr/windowBackground"/>
+            </FrameLayout>
+            <FrameLayout
+                android:layout_width="match_parent"
+                android:layout_height="100dp"
+                android:background="?android:attr/colorBackgroundFloating">
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="android:attr/colorBackgroundFloating"/>
+            </FrameLayout>
+            <FrameLayout
+                android:layout_width="match_parent"
+                android:layout_height="100dp"
+                android:background="?android:attr/colorActivatedHighlight">
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="android:attr/colorActivatedHighlight"/>
+            </FrameLayout>
+            <FrameLayout
+                android:layout_width="match_parent"
+                android:layout_height="100dp"
+                android:background="?android:attr/colorControlActivated">
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="android:attr/colorControlActivated"/>
+            </FrameLayout>
+            <FrameLayout
+                android:layout_width="match_parent"
+                android:layout_height="100dp"
+                android:background="?android:attr/colorControlHighlight">
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="android:attr/colorControlHighlight"/>
+            </FrameLayout>
+            <FrameLayout
+                android:layout_width="match_parent"
+                android:layout_height="100dp"
+                android:background="?android:attr/colorControlNormal">
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="android:attr/colorControlNormal"/>
+            </FrameLayout>
+            <FrameLayout
+                android:layout_width="match_parent"
+                android:layout_height="100dp"
+                android:background="?android:attr/colorError">
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="android:attr/colorError"/>
+            </FrameLayout>
+            <FrameLayout
+                android:layout_width="match_parent"
+                android:layout_height="100dp"
+                android:background="?android:attr/colorButtonNormal">
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="android:attr/colorButtonNormal"/>
+            </FrameLayout>
+            <FrameLayout
+                android:layout_width="match_parent"
+                android:layout_height="100dp"
+                android:background="?android:attr/colorFocusedHighlight">
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="android:attr/colorFocusedHighlight"/>
+            </FrameLayout>
+            <FrameLayout
+                android:layout_width="match_parent"
+                android:layout_height="100dp"
+                android:background="?android:attr/panelColorBackground">
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="android:attr/panelColorBackground"/>
+            </FrameLayout>
+            <FrameLayout
+                android:layout_width="match_parent"
+                android:layout_height="100dp"
+                android:background="?android:attr/panelColorForeground">
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="android:attr/panelColorForeground"
+                    android:textColor="?android:attr/textColorPrimaryInverse"/>
+            </FrameLayout>
+        </LinearLayout>
+    </ScrollView>
+    <include layout="@layout/menu_button"/>
+
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/tests/ThemePlayground/res/layout/set_background.xml b/tests/ThemePlayground/res/layout/set_background.xml
new file mode 100644
index 0000000..7cb86b9
--- /dev/null
+++ b/tests/ThemePlayground/res/layout/set_background.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2018 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
+  -->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:orientation="horizontal"
+    android:layout_height="match_parent">
+
+  <TextView
+      android:id="@+id/set_background_name"
+      android:layout_width="wrap_content"
+      android:layout_height="wrap_content"
+      android:layout_marginTop="8dp"
+      android:layout_marginStart="8dp"
+      android:text="@string/background_name" />
+
+  <EditText
+      android:id="@+id/background_input_color"
+      android:layout_width="wrap_content"
+      android:layout_height="wrap_content"
+      android:layout_marginStart="16dp"
+      android:layout_marginTop="8dp"
+      android:ems="10" />
+
+  <Button
+      android:id="@+id/set_background_color"
+      android:layout_width="wrap_content"
+      android:layout_height="wrap_content"
+      android:layout_marginEnd="8dp"
+      android:layout_marginTop="8dp"
+      android:layout_marginStart="30dp"
+      android:text="@string/apply"/>
+
+  <Button
+      android:id="@+id/reset"
+      android:layout_width="wrap_content"
+      android:layout_height="wrap_content"
+      android:layout_marginEnd="8dp"
+      android:layout_marginTop="8dp"
+      android:layout_marginStart="50dp"
+      android:text="@string/reset"/>
+</LinearLayout>
\ No newline at end of file
diff --git a/tests/ThemePlayground/res/layout/text_samples.xml b/tests/ThemePlayground/res/layout/text_samples.xml
new file mode 100644
index 0000000..cc806bf
--- /dev/null
+++ b/tests/ThemePlayground/res/layout/text_samples.xml
@@ -0,0 +1,137 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2018 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
+  -->
+
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <include layout="@layout/set_background"
+             android:id="@+id/setBackground"
+             android:layout_width="wrap_content"
+             android:layout_height="wrap_content"
+             android:layout_marginTop="20dp"
+             app:layout_constraintBottom_toTopOf="@+id/text_sample_list"
+             app:layout_constraintEnd_toEndOf="parent"
+             app:layout_constraintStart_toStartOf="parent"
+             app:layout_constraintTop_toTopOf="parent"/>
+
+    <ScrollView
+        android:id="@+id/text_sample_list"
+        android:layout_width="0dp"
+        android:layout_height="0dp"
+        android:layout_marginBottom="8dp"
+        android:layout_marginEnd="8dp"
+        android:layout_marginStart="8dp"
+        android:layout_marginTop="8dp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@id/setBackground">
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="vertical">
+
+            <TextView
+                android:id="@+id/unset"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:text="Text Appearance Not Set (thus textAppearanceSmall)"/>
+
+            <TextView
+                android:id="@+id/textAppearanceLarge"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:text="textAppearanceLarge"
+                android:textAppearance="?android:attr/textAppearanceLarge" />
+
+            <TextView
+                android:id="@+id/textAppearanceLargeInverse"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:text="textAppearanceLargeInverse"
+                android:textAppearance="?android:attr/textAppearanceLargeInverse" />
+
+            <TextView
+                android:id="@+id/textAppearanceMedium"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:text="TextApperanceMedium"
+                android:textAppearance="?android:attr/textAppearanceMedium" />
+
+            <TextView
+                android:id="@+id/textAppearanceMediumInverse"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:text="textAppearanceMediumInverse"
+                android:textAppearance="?android:attr/textAppearanceMediumInverse" />
+
+            <TextView
+                android:id="@+id/textAppearance"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:text="textAppearance"
+                android:textAppearance="?android:attr/textAppearance" />
+
+            <TextView
+                android:id="@+id/textAppearanceInverse"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:text="textAppearanceInverse"
+                android:textAppearance="?android:attr/textAppearanceInverse" />
+
+            <TextView
+                android:id="@+id/small"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:text="TextApperanceSmall"
+                android:textAppearance="?android:attr/textAppearanceSmall" />
+
+            <TextView
+                android:id="@+id/textAppearanceSmallInverse"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:text="textAppearanceSmallInverse"
+                android:textAppearance="?android:attr/textAppearanceSmallInverse" />
+
+            <TextView
+                android:id="@+id/textAppearanceListItem"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:text="textAppearanceListItem"
+                android:textAppearance="?android:attr/textAppearanceListItem" />
+
+            <TextView
+                android:id="@+id/textAppearanceListItemSmall"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:text="textAppearanceListItemSmall"
+                android:textAppearance="?android:attr/textAppearanceListItemSmall" />
+
+            <TextView
+                android:id="@+id/textAppearanceListItemSecondary"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:text="textAppearanceListItemSecondary"
+                android:textAppearance="?android:attr/textAppearanceListItemSecondary" />
+        </LinearLayout>
+    </ScrollView>
+    <include layout="@layout/menu_button"/>
+
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/tests/ThemePlayground/res/layout/widget_samples.xml b/tests/ThemePlayground/res/layout/widget_samples.xml
new file mode 100644
index 0000000..54472ac
--- /dev/null
+++ b/tests/ThemePlayground/res/layout/widget_samples.xml
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2018 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
+  -->
+
+<androidx.constraintlayout.widget.ConstraintLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:id="@+id/widgetLayout"
+    android:background="@color/widget_background"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <include layout="@layout/set_background"
+             android:id="@+id/setBackground"
+             android:layout_width="wrap_content"
+             android:layout_height="wrap_content"
+             android:layout_marginTop="20dp"
+             app:layout_constraintBottom_toTopOf="@+id/widget_checkbox"
+             app:layout_constraintEnd_toEndOf="parent"
+             app:layout_constraintStart_toStartOf="parent"
+             app:layout_constraintTop_toTopOf="parent"/>
+
+    <LinearLayout
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="20dp"
+        android:layout_marginStart="100dp"
+        android:orientation="horizontal"
+        android:id="@+id/checkbox_layout"
+        app:layout_constraintTop_toBottomOf="@+id/setBackground"
+        app:layout_constraintStart_toStartOf="parent">
+
+        <TextView
+            android:id="@+id/widget_checkbox"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/widget_checkbox"/>
+
+        <CheckBox android:id="@+id/widget_checkbox"
+                  android:layout_width="wrap_content"
+                  android:layout_height="wrap_content"
+                  android:layout_marginStart="16dp"/>
+
+    </LinearLayout>
+
+    <LinearLayout
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal"
+        android:layout_marginTop="20dp"
+        android:layout_marginStart="100dp"
+        android:id="@+id/switch_layout"
+        app:layout_constraintTop_toBottomOf="@+id/checkbox_layout"
+        app:layout_constraintStart_toStartOf="parent">
+
+        <TextView
+            android:id="@+id/toggle_switch"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/toggle_switch"/>
+
+        <Switch
+            android:id="@+id/widget_switch"
+            android:layout_width="wrap_content"
+            android:layout_marginStart="16dp"
+            android:layout_height="wrap_content"/>
+
+    </LinearLayout>
+
+    <LinearLayout
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal"
+        android:layout_marginTop="20dp"
+        android:layout_marginStart="100dp"
+        android:id="@+id/progress_bar_layout"
+        app:layout_constraintTop_toBottomOf="@+id/switch_layout"
+        app:layout_constraintStart_toStartOf="parent">
+
+        <TextView
+            android:id="@+id/progress_bar"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/progress_bar"/>
+
+        <SeekBar
+            android:id="@+id/widget_seek_bar"
+            android:layout_width="200dp"
+            android:layout_height="30dp"
+            android:layout_marginStart="16dp"/>
+
+    </LinearLayout>
+
+
+    <Button
+        android:id="@+id/trigger_config_change"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="Trigger Config change Day/Night Mode"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/progress_bar_layout"/>
+    <include layout="@layout/menu_button"/>
+
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/tests/ThemePlayground/res/menu/menu_main.xml b/tests/ThemePlayground/res/menu/menu_main.xml
new file mode 100644
index 0000000..eb7f771
--- /dev/null
+++ b/tests/ThemePlayground/res/menu/menu_main.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2018 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License
+  -->
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+      xmlns:app="http://schemas.android.com/apk/res-auto"
+      xmlns:tools="http://schemas.android.com/tools"
+      tools:context="com.google.themetesting.Main">
+    <item
+        android:id="@+id/text_elements"
+        android:orderInCategory="100"
+        android:title="@string/text_elements"
+        app:showAsAction="never" />
+    <item
+        android:id="@+id/panel_elements"
+        android:orderInCategory="100"
+        android:title="@string/panel_elements"
+        app:showAsAction="never" />
+    <item
+        android:id="@+id/dialog_elements"
+        android:orderInCategory="100"
+        android:title="@string/dialog_elements"
+        app:showAsAction="never" />
+    <item
+        android:id="@+id/toggle_theme"
+        android:orderInCategory="100"
+        android:title="@string/toggle_theme"
+        app:showAsAction="never" />
+    <item
+        android:id="@+id/widgets"
+        android:orderInCategory="100"
+        android:title="@string/widgets"
+        app:showAsAction="never" />
+    <item
+        android:id="@+id/page_list_view"
+        android:orderInCategory="100"
+        android:title="@string/paged_list_view"
+        app:showAsAction="never" />
+    <item
+        android:id="@+id/default_themes"
+        android:orderInCategory="100"
+        android:title="@string/default_themes"
+        app:showAsAction="never" />
+    <item
+        android:id="@+id/multiple_intent"
+        android:orderInCategory="100"
+        android:title="@string/multiple_intent"
+        app:showAsAction="never" />
+</menu>
\ No newline at end of file
diff --git a/tests/ThemePlayground/res/raw/theme_names.txt b/tests/ThemePlayground/res/raw/theme_names.txt
new file mode 100644
index 0000000..ea3394d
--- /dev/null
+++ b/tests/ThemePlayground/res/raw/theme_names.txt
@@ -0,0 +1,3 @@
+Theme.DeviceDefault
+Theme.DeviceDefault.Light
+Theme.DeviceDefault.NoActionBar
\ No newline at end of file
diff --git a/tests/ThemePlayground/res/values-night/colors.xml b/tests/ThemePlayground/res/values-night/colors.xml
new file mode 100644
index 0000000..036beb3
--- /dev/null
+++ b/tests/ThemePlayground/res/values-night/colors.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2017 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>
+  <color name="widget_background">#1565c0</color>
+</resources>
diff --git a/tests/ThemePlayground/res/values/colors.xml b/tests/ThemePlayground/res/values/colors.xml
new file mode 100644
index 0000000..421c33c
--- /dev/null
+++ b/tests/ThemePlayground/res/values/colors.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2017 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>
+  <color name="widget_background">#7986CB</color>
+</resources>
diff --git a/tests/ThemePlayground/res/values/strings.xml b/tests/ThemePlayground/res/values/strings.xml
new file mode 100644
index 0000000..e263fd0
--- /dev/null
+++ b/tests/ThemePlayground/res/values/strings.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2018 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">
+    <string name="app_name" translatable="false">AAE Theme Playground</string>
+    <string name="text_elements" translatable="false">Text Elements</string>
+    <string name="panel_elements" translatable="false">Color Panels</string>
+    <string name="dialog_elements" translatable="false">Dialogs</string>
+    <string name="toggle_theme" translatable="false">Change configuration(Day/Night)</string>
+    <string name="apply" translatable="false">Apply</string>
+    <string name="widgets" translatable="false">Widgets</string>
+    <string name="paged_list_view" translatable="false">Paged List View</string>
+    <string name="widget_checkbox" translatable="false">Checkbox</string>
+    <string name="toggle_switch" translatable="false">Toggle Switch</string>
+    <string name="reset" translatable="false">Reset</string>
+    <string name="progress_bar" translatable="false">Progress Bar</string>
+    <string name="background_name" translatable="false">Set background color :</string>
+    <string name="default_themes" translatable="false">Apply Themes</string>
+    <string name="theme_name" translatable="false">Theme Name:</string>
+    <string name="multiple_intent" translatable="false">Chooser Activity</string>
+    <string name="default_background_color" translatable="false">#90CAF9</string>
+</resources>
diff --git a/tests/ThemePlayground/res/values/themes.xml b/tests/ThemePlayground/res/values/themes.xml
new file mode 100644
index 0000000..1211c92
--- /dev/null
+++ b/tests/ThemePlayground/res/values/themes.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2018 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>
+
+    <!--Theme for the app, it's defined empty here so it can be overlaid easily -->
+    <style name="Theme.App" parent="android:Theme.DeviceDefault">
+    </style>
+
+    <!--Theme for the dialog testing-->
+    <style name="Theme.Testing.Dialog.Alert" parent="android:Theme.DeviceDefault.Dialog.Alert">
+    </style>
+
+    <!--This Theme contains attributes required for components from the car support lib -->
+    <style name="PagedListTheme" parent="Theme.CarSupportWrapper.NoActionBar">
+    </style>
+</resources>
\ No newline at end of file
diff --git a/tests/ThemePlayground/src/com/android/car/themeplayground/AbstractSampleActivity.java b/tests/ThemePlayground/src/com/android/car/themeplayground/AbstractSampleActivity.java
new file mode 100644
index 0000000..85989ae
--- /dev/null
+++ b/tests/ThemePlayground/src/com/android/car/themeplayground/AbstractSampleActivity.java
@@ -0,0 +1,157 @@
+/*
+ * Copyright (C) 2019 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.car.themeplayground;
+
+import android.app.Activity;
+import android.app.UiModeManager;
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.Color;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.PopupMenu;
+import android.widget.TextView;
+import android.widget.Toast;
+
+/**
+ * Handles the menu for the theme playground app
+ */
+public abstract class AbstractSampleActivity extends Activity implements
+        PopupMenu.OnMenuItemClickListener {
+
+    private UiModeManager mUiModeManager;
+
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        // Inflate the menu; this adds items to the action bar if it is present.
+        getMenuInflater().inflate(R.menu.menu_main, menu);
+        mUiModeManager = (UiModeManager) this.getSystemService(Context.UI_MODE_SERVICE);
+        return true;
+    }
+
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        switch (item.getItemId()) {
+            case R.id.text_elements:
+                return startSampleActivity(TextSamples.class);
+            case R.id.panel_elements:
+                return startSampleActivity(ColorSamples.class);
+            case R.id.dialog_elements:
+                return startSampleActivity(DialogSamples.class);
+            case R.id.toggle_theme:
+                return toggleDayNight();
+            case R.id.widgets:
+                return startSampleActivity(WidgetsSamples.class);
+            case R.id.page_list_view:
+                return startSampleActivity(PagedListViewSamples.class);
+            case R.id.default_themes:
+                return startSampleActivity(DefaultThemeSamples.class);
+            case R.id.multiple_intent:
+                return startSampleActivity(MultipleIntentSamples.class);
+            default:
+                return true;
+        }
+    }
+
+    /**
+     * Will show the menu onclick of the menu button. This button will only appear when the theme is
+     * set to NoActionBar.
+     */
+    private void showPopupMenu(View v) {
+        PopupMenu popup = new PopupMenu(this, v);
+        popup.setOnMenuItemClickListener(this);
+        popup.inflate(R.menu.menu_main);
+        popup.show();
+    }
+
+    @Override
+    public boolean onMenuItemClick(MenuItem item) {
+        return onOptionsItemSelected(item);
+    }
+
+    @Override
+    protected void onStart() {
+        super.onStart();
+        bindMenuButton();
+    }
+
+
+    /**
+     * When theme is set to NoActionBar then the menu also disappears blocking the user to navigate
+     * between the activities. At that point this method will bring up the menu button that will
+     * help user to navigate between activities.
+     */
+    private void bindMenuButton() {
+        Button buttonMenu = findViewById(R.id.button_menu);
+        if (Utils.sThemeName.equals("Theme.DeviceDefault.NoActionBar")) {
+            buttonMenu.setVisibility(View.VISIBLE);
+        } else {
+            buttonMenu.setVisibility(View.GONE);
+        }
+        buttonMenu.setOnClickListener(v -> {
+            showPopupMenu(v);
+        });
+    }
+
+    /**
+     * Launch the given sample activity
+     */
+    private boolean startSampleActivity(Class<?> cls) {
+        Intent dialogIntent = new Intent(this, cls);
+        startActivity(dialogIntent);
+        return true;
+    }
+
+    private boolean toggleDayNight() {
+        mUiModeManager.setNightMode(
+                (mUiModeManager.getNightMode() == UiModeManager.MODE_NIGHT_YES)
+                        ? UiModeManager.MODE_NIGHT_NO : UiModeManager.MODE_NIGHT_YES);
+        return true;
+    }
+
+    void setupBackgroundColorControls(int backgroundLayoutId) {
+        Button colorSetButton = findViewById(R.id.set_background_color);
+        ((EditText) findViewById(R.id.background_input_color)).setText(
+                R.string.default_background_color,
+                TextView.BufferType.EDITABLE);
+        colorSetButton.setOnClickListener(v -> {
+            String value = ((EditText) findViewById(R.id.background_input_color)).getText()
+                    .toString();
+            try {
+                int color = Color.parseColor(value);
+                View dialogLayout = findViewById(backgroundLayoutId);
+                dialogLayout.setBackgroundColor(color);
+            } catch (Exception e) {
+                Toast.makeText(this, "not a color", Toast.LENGTH_LONG).show();
+            }
+        });
+        Button colorResetButton = findViewById(R.id.reset);
+        colorResetButton.setOnClickListener(v -> {
+            try {
+                View dialogLayout = findViewById(backgroundLayoutId);
+                dialogLayout.setBackgroundColor(android.R.color.black);
+            } catch (Exception e) {
+                Toast.makeText(this, "Something went Wrong. Try again later.",
+                        Toast.LENGTH_LONG).show();
+            }
+        });
+    }
+}
diff --git a/tests/ThemePlayground/src/com/android/car/themeplayground/ColorSamples.java b/tests/ThemePlayground/src/com/android/car/themeplayground/ColorSamples.java
new file mode 100644
index 0000000..de82489
--- /dev/null
+++ b/tests/ThemePlayground/src/com/android/car/themeplayground/ColorSamples.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2019 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.car.themeplayground;
+
+import android.os.Bundle;
+
+/**
+ * Activity that renders a bunch of color values from the theme.
+ */
+public class ColorSamples extends AbstractSampleActivity {
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        Utils.onActivityCreateSetTheme(this);
+        setContentView(R.layout.panel_samples);
+    }
+}
diff --git a/tests/ThemePlayground/src/com/android/car/themeplayground/DefaultThemeSamples.java b/tests/ThemePlayground/src/com/android/car/themeplayground/DefaultThemeSamples.java
new file mode 100644
index 0000000..1b87e82
--- /dev/null
+++ b/tests/ThemePlayground/src/com/android/car/themeplayground/DefaultThemeSamples.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2019 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.car.themeplayground;
+
+import android.os.Bundle;
+import android.widget.ArrayAdapter;
+import android.widget.AutoCompleteTextView;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.Toast;
+
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Activity that shows different device default themes. Auto complete themes come from
+ * theme_names.txt file in the raw folder. User can also input a valid theme in the textbox even if
+ * the theme is not available in the auto-complete.
+ */
+public class DefaultThemeSamples extends AbstractSampleActivity {
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        Utils.onActivityCreateSetTheme(this);
+        setContentView(R.layout.device_default_theme_samples);
+        Button buttonApply = findViewById(R.id.button_apply);
+        AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.theme_name);
+        ArrayAdapter<String> adapter =
+                new ArrayAdapter<>(this, android.R.layout.simple_list_item_1,
+                        listAllThemes());
+        textView.setAdapter(adapter);
+        buttonApply.setOnClickListener(v -> {
+            EditText input = findViewById(R.id.theme_name);
+            String themeName = input.getText().toString();
+            int themeResId = this.getResources().getIdentifier(themeName,
+                    "style", "android");
+            if (themeResId == 0) {
+                Toast.makeText(this, "No such theme found. ",
+                        Toast.LENGTH_SHORT).show();
+                return;
+            }
+            Toast.makeText(this, "Applying theme: " + themeName,
+                    Toast.LENGTH_SHORT).show();
+            Utils.changeToTheme(this, themeName, themeResId);
+        });
+    }
+
+    private String[] listAllThemes() {
+        String data;
+        List<String> list = new ArrayList<>();
+        InputStream is = this.getResources().openRawResource(R.raw.theme_names);
+        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
+        try {
+            while ((data = reader.readLine()) != null) {
+                list.add(data);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return list.toArray(new String[0]);
+    }
+}
diff --git a/tests/ThemePlayground/src/com/android/car/themeplayground/DialogSamples.java b/tests/ThemePlayground/src/com/android/car/themeplayground/DialogSamples.java
new file mode 100644
index 0000000..87480f5
--- /dev/null
+++ b/tests/ThemePlayground/src/com/android/car/themeplayground/DialogSamples.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2019 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.car.themeplayground;
+
+import android.app.AlertDialog;
+import android.os.Bundle;
+import android.view.ContextThemeWrapper;
+import android.widget.Button;
+import android.widget.TextView;
+
+
+/**
+ * Activity that shows different dialogs from the device default theme.
+ */
+public class DialogSamples extends AbstractSampleActivity {
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        Utils.onActivityCreateSetTheme(this);
+        setContentView(R.layout.dialog_samples);
+
+        Button mShowDialogBT = findViewById(R.id.showDialogBT);
+        Button mShowDialogWithCheckboxBT = findViewById(R.id.showDialogWithCheckboxBT);
+        setupBackgroundColorControls(R.id.dialogLayout);
+        mShowDialogBT.setOnClickListener(v -> openDialog(false));
+        mShowDialogWithCheckboxBT.setOnClickListener(v -> openDialog(true));
+    }
+
+
+    private void openDialog(boolean showCheckbox) {
+
+        AlertDialog.Builder builder = new AlertDialog.Builder(
+                new ContextThemeWrapper(this, R.style.Theme_Testing_Dialog_Alert));
+
+        if (showCheckbox) {
+            // Set Custom Title
+            TextView title = new TextView(this);
+            // Title Properties
+            title.setText("Custom Dialog Box");
+            builder.setCustomTitle(title);
+            builder.setMultiChoiceItems(new CharSequence[]{"I am a checkbox"},
+                    new boolean[]{false},
+                    (dialog, which, isChecked) -> {
+                    });
+        } else {
+            builder.setTitle("Standard Alert Dialog")
+                    .setMessage("With a message to show.");
+        }
+
+        builder.setPositiveButton("OK", (dialoginterface, i) -> {
+        }).setNegativeButton("CANCEL",
+                (dialog, which) -> {
+                });
+        builder.show();
+    }
+}
diff --git a/tests/ThemePlayground/src/com/android/car/themeplayground/MultipleIntentSamples.java b/tests/ThemePlayground/src/com/android/car/themeplayground/MultipleIntentSamples.java
new file mode 100644
index 0000000..b6a9aa3
--- /dev/null
+++ b/tests/ThemePlayground/src/com/android/car/themeplayground/MultipleIntentSamples.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2019 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.car.themeplayground;
+
+
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Bundle;
+import android.widget.Toast;
+
+/**
+ * Activity that shows how the Intent is handled when there are more than one application that could
+ * accept and handle the intent.
+ */
+public class MultipleIntentSamples extends AbstractSampleActivity {
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        Utils.onActivityCreateSetTheme(this);
+        setContentView(R.layout.multiple_intent_samples);
+        findViewById(R.id.fire_web_intent_button).setOnClickListener(
+                v -> triggerIntentResolverForWeb());
+    }
+
+    private void triggerIntentResolverForWeb() {
+        Intent intent = new Intent(Intent.ACTION_VIEW);
+        intent.setData(Uri.parse("http://www.google.com"));
+
+        if (intent.resolveActivity(getPackageManager()) != null) {
+            startActivity(intent);
+        } else {
+            Toast.makeText(this, "No Application Installed to handle this action",
+                    Toast.LENGTH_LONG).show();
+        }
+    }
+}
diff --git a/tests/ThemePlayground/src/com/android/car/themeplayground/PagedListViewAdapter.java b/tests/ThemePlayground/src/com/android/car/themeplayground/PagedListViewAdapter.java
new file mode 100644
index 0000000..2b23f15
--- /dev/null
+++ b/tests/ThemePlayground/src/com/android/car/themeplayground/PagedListViewAdapter.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2019 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.car.themeplayground;
+
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+
+import java.util.ArrayList;
+
+/**
+ * Implementation of {@link PagedListViewAdapter} that can be used with RecyclerViews.
+ */
+public class PagedListViewAdapter extends
+        RecyclerView.Adapter<PagedListViewAdapter.PagedListViewHolder> {
+
+    private ArrayList<String> mData;
+
+    PagedListViewAdapter(ArrayList<String> data) {
+        this.mData = data;
+    }
+
+    @NonNull
+    @Override
+    public PagedListViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+        LayoutInflater inflator = LayoutInflater.from(parent.getContext());
+        View view = inflator.inflate(R.layout.item_list, parent, false);
+        return new PagedListViewHolder(view);
+    }
+
+    @Override
+    public void onBindViewHolder(@NonNull PagedListViewHolder holder, int position) {
+        String title = mData.get(position);
+        holder.mTextTitle.setText(title);
+    }
+
+    @Override
+    public int getItemCount() {
+        return mData.size();
+    }
+
+
+    /**
+     * Holds views for each element in the list.
+     */
+    public static class PagedListViewHolder extends RecyclerView.ViewHolder {
+        TextView mTextTitle;
+
+        PagedListViewHolder(@NonNull View itemView) {
+            super(itemView);
+            mTextTitle = itemView.findViewById(R.id.textTitle);
+        }
+    }
+}
diff --git a/tests/ThemePlayground/src/com/android/car/themeplayground/PagedListViewSamples.java b/tests/ThemePlayground/src/com/android/car/themeplayground/PagedListViewSamples.java
new file mode 100644
index 0000000..c301abf
--- /dev/null
+++ b/tests/ThemePlayground/src/com/android/car/themeplayground/PagedListViewSamples.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2019 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.car.themeplayground;
+
+import android.os.Bundle;
+
+import androidx.car.widget.PagedListView;
+
+import java.util.ArrayList;
+
+/**
+ * Activity that shows pagedlistView example with dummy data.
+ */
+public class PagedListViewSamples extends AbstractSampleActivity {
+
+    private final ArrayList<String> mData = new ArrayList<>();
+    private final int mDataToGenerate = 15;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        Utils.onActivityCreateSetTheme(this);
+        setContentView(R.layout.paged_list_view_samples);
+        PagedListView pagedListView = (PagedListView) findViewById(R.id.list);
+
+        PagedListViewAdapter pagedListAdapter = new PagedListViewAdapter(generateDummyData());
+        pagedListView.setAdapter(pagedListAdapter);
+    }
+
+    private ArrayList<String> generateDummyData() {
+        for (int i = 0; i <= mDataToGenerate; i++) {
+            mData.add("data" + i);
+        }
+        return mData;
+    }
+
+}
diff --git a/tests/ThemePlayground/src/com/android/car/themeplayground/TextSamples.java b/tests/ThemePlayground/src/com/android/car/themeplayground/TextSamples.java
new file mode 100644
index 0000000..9b02050
--- /dev/null
+++ b/tests/ThemePlayground/src/com/android/car/themeplayground/TextSamples.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2019 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.car.themeplayground;
+
+import android.os.Bundle;
+
+/**
+ * Activity that shows text values from the device default theme
+ */
+public class TextSamples extends AbstractSampleActivity {
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        Utils.onActivityCreateSetTheme(this);
+        setContentView(R.layout.text_samples);
+        setupBackgroundColorControls(R.id.text_sample_list);
+    }
+}
diff --git a/tests/ThemePlayground/src/com/android/car/themeplayground/Utils.java b/tests/ThemePlayground/src/com/android/car/themeplayground/Utils.java
new file mode 100644
index 0000000..0990273
--- /dev/null
+++ b/tests/ThemePlayground/src/com/android/car/themeplayground/Utils.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2019 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.car.themeplayground;
+
+import android.app.Activity;
+import android.content.Intent;
+
+/**
+ * Utility class for changing the theme of the app at run time.
+ */
+public class Utils {
+    static String sThemeName = "";
+    private static int sThemeResId = 0;
+
+    /**
+     * Set the theme of the Activity, and restart it by creating a new Activity of the same type.
+     */
+    public static void changeToTheme(Activity activity, String themeName, int themeResId) {
+        sThemeName = themeName;
+        sThemeResId = themeResId;
+        activity.finish();
+        activity.startActivity(new Intent(activity, activity.getClass()));
+    }
+
+    /** Set the theme of the activity, according to the configuration. */
+    public static void onActivityCreateSetTheme(Activity activity) {
+        if (sThemeName.equals("")) {
+            activity.setTheme(android.R.style.Theme_DeviceDefault);
+        } else {
+            activity.setTheme(sThemeResId);
+        }
+    }
+}
diff --git a/tests/ThemePlayground/src/com/android/car/themeplayground/WidgetsSamples.java b/tests/ThemePlayground/src/com/android/car/themeplayground/WidgetsSamples.java
new file mode 100644
index 0000000..c124f85
--- /dev/null
+++ b/tests/ThemePlayground/src/com/android/car/themeplayground/WidgetsSamples.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2019 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.car.themeplayground;
+
+import android.app.UiModeManager;
+import android.content.Context;
+import android.os.Bundle;
+import android.widget.Button;
+
+/**
+ * Activity that shows different widgets on configuration changes.
+ */
+public class WidgetsSamples extends AbstractSampleActivity {
+
+    private UiModeManager mUiModeManager;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        Utils.onActivityCreateSetTheme(this);
+        setContentView(R.layout.widget_samples);
+        Button triggerConfigChanges = findViewById(R.id.trigger_config_change);
+        mUiModeManager = (UiModeManager) this.getSystemService(Context.UI_MODE_SERVICE);
+        setupBackgroundColorControls(R.id.widgetLayout);
+        triggerConfigChanges.setOnClickListener(v -> {
+            if (mUiModeManager.getNightMode() == UiModeManager.MODE_NIGHT_YES) {
+                mUiModeManager.setNightMode(UiModeManager.MODE_NIGHT_NO);
+            } else {
+                mUiModeManager.setNightMode(UiModeManager.MODE_NIGHT_YES);
+            }
+        });
+    }
+}
diff --git a/tests/UxRestrictionsSample/AndroidManifest.xml b/tests/UxRestrictionsSample/AndroidManifest.xml
index 43a6362..bd28e0d 100644
--- a/tests/UxRestrictionsSample/AndroidManifest.xml
+++ b/tests/UxRestrictionsSample/AndroidManifest.xml
@@ -19,7 +19,7 @@
     <uses-permission android:name="android.car.permission.CAR_DRIVING_STATE"/>
 
     <application android:label="UxRestrictions Sample">
-        <activity android:name=".MainActivity" android:theme="@style/Theme.Car.NoActionBar">
+        <activity android:name=".MainActivity" android:theme="@style/AppTheme" android:launchMode="singleTask">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN"/>
                 <category android:name="android.intent.category.LAUNCHER"/>
@@ -27,7 +27,7 @@
             <meta-data android:name="distractionOptimized" android:value="true"/>
         </activity>
         <activity android:name=".SampleMessageActivity"
-                  android:theme="@style/Theme.Car.NoActionBar">
+                  android:theme="@style/AppTheme">
             <meta-data android:name="distractionOptimized" android:value="true"/>
         </activity>
     </application>
diff --git a/tests/UxRestrictionsSample/res/layout/activity_sample_message.xml b/tests/UxRestrictionsSample/res/layout/activity_sample_message.xml
index 20c6465..a778975 100644
--- a/tests/UxRestrictionsSample/res/layout/activity_sample_message.xml
+++ b/tests/UxRestrictionsSample/res/layout/activity_sample_message.xml
@@ -13,29 +13,24 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<androidx.car.moderator.SpeedBumpView
+<LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent">
-
-    <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="match_parent">
-        <Button
-            android:id="@+id/home_button"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:text="@string/return_home"
-            android:textAllCaps="false"
-            android:textAppearance="?android:textAppearanceLarge"/>
-        <LinearLayout
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content">
-            <androidx.car.widget.PagedListView
-                android:id="@+id/paged_list_view"
-                android:layout_height="match_parent"
-                android:layout_width="wrap_content"
-                android:layout_weight="4"/>
-        </LinearLayout>
-    </LinearLayout>
-</androidx.car.moderator.SpeedBumpView>
+  <Button
+      android:id="@+id/home_button"
+      android:layout_width="wrap_content"
+      android:layout_height="wrap_content"
+      android:text="@string/return_home"
+      android:textAllCaps="false"
+      android:textAppearance="?android:textAppearanceLarge"/>
+  <LinearLayout
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content">
+    <androidx.car.widget.PagedListView
+        android:id="@+id/paged_list_view"
+        android:layout_height="match_parent"
+        android:layout_width="wrap_content"
+        android:layout_weight="4"/>
+  </LinearLayout>
+</LinearLayout>
diff --git a/tests/UxRestrictionsSample/res/layout/main_activity.xml b/tests/UxRestrictionsSample/res/layout/main_activity.xml
index 695e93b..0b097fb 100644
--- a/tests/UxRestrictionsSample/res/layout/main_activity.xml
+++ b/tests/UxRestrictionsSample/res/layout/main_activity.xml
@@ -13,114 +13,167 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<androidx.car.moderator.SpeedBumpView
+<LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="horizontal"
     android:layout_width="match_parent"
     android:layout_height="match_parent">
-    <LinearLayout
-        android:orientation="horizontal"
+
+  <LinearLayout
+      android:layout_height="match_parent"
+      android:layout_width="0dp"
+      android:layout_weight="1"
+      android:orientation="vertical">
+
+    <TextView
         android:layout_width="match_parent"
-        android:layout_height="match_parent">
+        android:layout_height="wrap_content"
+        android:text="@string/status_header"
+        android:layout_gravity="center"
+        android:padding="@dimen/section_padding"
+        android:textSize="@dimen/header_text_size"
+        android:textAppearance="?android:textAppearanceLarge"/>
 
-        <LinearLayout
-            android:layout_height="match_parent"
-            android:layout_width="0dp"
-            android:layout_weight="1"
-            android:orientation="vertical">
+    <TextView
+        android:id="@+id/driving_state"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="@string/driving_state"
+        android:textSize="@dimen/info_text_size"
+        android:layout_gravity="center"
+        android:padding="@dimen/section_padding"
+        android:textAppearance="?android:textAppearanceLarge"/>
 
-            <TextView
-                android:text="@string/status_header"
-                android:layout_gravity="center"
-                android:padding="@dimen/section_padding"
-                android:textSize="@dimen/header_text_size"
-                android:layout_width="match_parent"
-                android:textAppearance="?android:textAppearanceLarge"
-                android:layout_height="wrap_content" />
+    <TextView
+        android:id="@+id/do_status"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="@string/is_do_reqd"
+        android:textSize="@dimen/info_text_size"
+        android:padding="@dimen/section_padding"
+        android:textAppearance="?android:textAppearanceLarge"/>
 
-            <TextView
-                android:id="@+id/driving_state"
-                android:text="@string/driving_state"
-                android:textSize="@dimen/info_text_size"
-                android:layout_gravity="center"
-                android:padding="@dimen/section_padding"
-                android:layout_width="match_parent"
-                android:textAppearance="?android:textAppearanceLarge"
-                android:layout_height="wrap_content" />
+    <TextView
+        android:id="@+id/uxr_status"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="@string/active_restrictions"
+        android:padding="@dimen/section_padding"
+        android:textSize="@dimen/info_text_size"
+        android:textAppearance="?android:textAppearanceLarge"/>
 
-            <TextView
-                android:id="@+id/do_status"
-                android:text="@string/is_do_reqd"
-                android:textSize="@dimen/info_text_size"
-                android:padding="@dimen/section_padding"
-                android:layout_width="match_parent"
-                android:textAppearance="?android:textAppearanceLarge"
-                android:layout_height="wrap_content" />
+    <TextView
+        android:id="@+id/show_uxr_config"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="@string/uxr_config_header"
+        android:padding="@dimen/section_padding"
+        android:textSize="@dimen/info_text_size"
+        android:textAppearance="?android:textAppearanceLarge"/>
 
-            <TextView
-                android:id="@+id/uxr_status"
-                android:text="@string/active_restrictions"
-                android:padding="@dimen/section_padding"
-                android:textSize="@dimen/info_text_size"
-                android:layout_width="match_parent"
-                android:textAppearance="?android:textAppearanceLarge"
-                android:layout_height="wrap_content" />
+    <View
+        android:layout_width="match_parent"
+        android:layout_height="1dp"
+        android:padding="@dimen/section_padding"
+        android:layout_marginBottom="10dp"
+        android:background="@android:color/darker_gray"/>
 
-            <View
-                android:layout_width="match_parent"
-                android:layout_height="1dp"
-                android:padding="@dimen/section_padding"
-                android:layout_marginBottom="10dp"
-                android:background="@android:color/darker_gray"/>
+    <TextView
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="@string/action_header"
+        android:padding="@dimen/section_padding"
+        android:textSize="@dimen/header_text_size"
+        android:textAppearance="?android:textAppearanceLarge"/>
 
-            <TextView
-                android:text="@string/action_header"
-                android:padding="@dimen/section_padding"
-                android:textSize="@dimen/header_text_size"
-                android:layout_width="match_parent"
-                android:textAppearance="?android:textAppearanceLarge"
-                android:layout_height="wrap_content" />
-
-            <LinearLayout
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content">
-                <Button
-                    android:id="@+id/toggle_status"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:padding="@dimen/section_padding"
-                    android:text="@string/disable_uxr"
-                    android:textAllCaps="false"
-                    android:textSize="@dimen/info_text_size" />
-            </LinearLayout>
-
-            <View
-                android:layout_width="match_parent"
-                android:layout_height="1dp"
-                android:layout_marginTop="@dimen/section_padding"
-                android:layout_marginBottom="10dp"
-                android:background="@android:color/darker_gray"/>
-
-            <TextView
-                android:text="@string/sample_header"
-                android:padding="@dimen/section_padding"
-                android:textSize="@dimen/header_text_size"
-                android:layout_width="match_parent"
-                android:textAppearance="?android:textAppearanceLarge"
-                android:layout_height="wrap_content" />
-
-            <LinearLayout
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content">
-                <Button
-                    android:id="@+id/launch_message"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:text="@string/sample_msg_activity"
-                    android:textAllCaps="false"
-                    android:textSize="@dimen/info_text_size" />
-            </LinearLayout>
-        </LinearLayout>
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content">
+      <Button
+          android:id="@+id/toggle_status"
+          android:layout_width="wrap_content"
+          android:layout_height="wrap_content"
+          android:layout_marginLeft="@dimen/section_padding"
+          android:padding="@dimen/section_padding"
+          android:text="@string/disable_uxr"
+          android:textAllCaps="false"
+          android:textSize="@dimen/info_text_size"/>
+      <Button
+          android:id="@+id/show_staged_config"
+          android:layout_width="wrap_content"
+          android:layout_height="wrap_content"
+          android:layout_marginLeft="@dimen/section_padding"
+          android:padding="@dimen/section_padding"
+          android:text="@string/show_staged_config"
+          android:textAllCaps="false"
+          android:textSize="@dimen/info_text_size"/>
+      <Button
+          android:id="@+id/show_prod_config"
+          android:layout_width="wrap_content"
+          android:layout_height="wrap_content"
+          android:layout_marginLeft="@dimen/section_padding"
+          android:padding="@dimen/section_padding"
+          android:text="@string/show_prod_config"
+          android:textAllCaps="false"
+          android:textSize="@dimen/info_text_size"/>
     </LinearLayout>
-</androidx.car.moderator.SpeedBumpView>
+
+    <View
+        android:layout_width="match_parent"
+        android:layout_height="1dp"
+        android:layout_marginTop="@dimen/section_padding"
+        android:layout_marginBottom="10dp"
+        android:background="@android:color/darker_gray"/>
+
+    <TextView
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="@string/sample_header"
+        android:padding="@dimen/section_padding"
+        android:textSize="@dimen/header_text_size"
+        android:textAppearance="?android:textAppearanceLarge"/>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content">
+      <Button
+          android:id="@+id/launch_message"
+          android:layout_width="wrap_content"
+          android:layout_height="wrap_content"
+          android:padding="@dimen/section_padding"
+          android:text="@string/sample_msg_activity"
+          android:textAllCaps="false"
+          android:textSize="@dimen/info_text_size"/>
+    </LinearLayout>
+
+    <View
+        android:layout_width="match_parent"
+        android:layout_height="1dp"
+        android:layout_marginTop="@dimen/section_padding"
+        android:layout_marginBottom="10dp"
+        android:background="@android:color/darker_gray"/>
+
+    <TextView
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="@string/save_uxr_config_header"
+        android:padding="@dimen/section_padding"
+        android:textSize="@dimen/header_text_size"
+        android:textAppearance="?android:textAppearanceLarge"/>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content">
+      <Button
+          android:id="@+id/save_uxr_config"
+          android:layout_width="wrap_content"
+          android:layout_height="wrap_content"
+          android:padding="@dimen/section_padding"
+          android:text="@string/save_uxr_config"
+          android:textSize="@dimen/info_text_size"/>
+    </LinearLayout>
+  </LinearLayout>
+</LinearLayout>
+
 
 
diff --git a/tests/UxRestrictionsSample/res/values/strings.xml b/tests/UxRestrictionsSample/res/values/strings.xml
index 612e251..b36d7f9 100644
--- a/tests/UxRestrictionsSample/res/values/strings.xml
+++ b/tests/UxRestrictionsSample/res/values/strings.xml
@@ -14,15 +14,27 @@
      limitations under the License.
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name">UxRestrictionsSample</string>
-    <string name="title_activity_main">MainActivity</string>
-    <string name="status_header"><u>Current Status</u></string>
-    <string name="driving_state">Driving State: </string>
-    <string name="is_do_reqd">Distraction Optimization Required? </string>
-    <string name="active_restrictions">Active UX Restrictions: </string>
-    <string name="action_header"><u>Available Actions</u></string>
-    <string name="disable_uxr">Disable Ux Restriction Engine</string>
-    <string name="sample_header"><u>Sample Activities</u></string>
-    <string name="sample_msg_activity">Sample Message Activity</string>
-    <string name="return_home"><u>Return Home</u></string>
+    <string name="app_name" translatable="false">UxRestrictionsSample</string>
+    <string name="title_activity_main" translatable="false">MainActivity</string>
+    <string name="status_header" translatable="false"><u>Current Status</u></string>
+    <string name="driving_state" translatable="false">Driving State: </string>
+    <string name="is_do_reqd" translatable="false">Distraction Optimization Required? </string>
+    <string name="active_restrictions" translatable="false">Active UX Restrictions: </string>
+    <string name="uxr_config_header" translatable="false">UxR Configuration: </string>
+    <string name="action_header" translatable="false"><u>Available Actions</u></string>
+    <string name="disable_uxr" translatable="false">Disable Ux Restriction Engine</string>
+    <string name="show_staged_config" translatable="false">Show Staged Config</string>
+    <string name="show_prod_config" translatable="false">Show Production Config</string>
+    <string name="sample_header" translatable="false"><u>Sample Activities</u></string>
+    <string name="sample_msg_activity" translatable="false">Sample Message Activity</string>
+    <string name="return_home" translatable="false"><u>Return Home</u></string>
+    <string name="save_uxr_config_header" translatable="false"><u>Save UX Restrictions For Next Boot</u></string>
+    <string name="save_uxr_config" translatable="false">Save UX Restrictions</string>
+    <string name="set_uxr_config_dialog_title" translatable="false">Select restrictions for IDLING/MOVING</string>
+    <string name="set_uxr_config_dialog_negative_button" translatable="false">Cancel</string>
+    <string name="set_uxr_config_dialog_positive_button" translatable="false">Save UXR Config</string>
+    <string name="no_staged_config" translatable="false">There is no staged configuration found</string>
+    <string name="no_prod_config" translatable="false">There is no production configuration found</string>
+    <string name="staged_config_title" translatable="false">Staged Config</string>
+    <string name="prod_config_title" translatable="false">Production Config</string>
 </resources>
diff --git a/tests/UxRestrictionsSample/res/values/styles.xml b/tests/UxRestrictionsSample/res/values/styles.xml
new file mode 100644
index 0000000..05d0d03
--- /dev/null
+++ b/tests/UxRestrictionsSample/res/values/styles.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2018 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>
+
+    <style name="AppTheme" parent="@style/Theme.Car.NoActionBar">
+        <item name="android:windowBackground">@android:color/black</item>
+    </style>
+</resources>
\ No newline at end of file
diff --git a/tests/UxRestrictionsSample/src/com/google/android/car/uxr/sample/MainActivity.java b/tests/UxRestrictionsSample/src/com/google/android/car/uxr/sample/MainActivity.java
index 104e145..0fa9259 100644
--- a/tests/UxRestrictionsSample/src/com/google/android/car/uxr/sample/MainActivity.java
+++ b/tests/UxRestrictionsSample/src/com/google/android/car/uxr/sample/MainActivity.java
@@ -15,30 +15,53 @@
  */
 package com.google.android.car.uxr.sample;
 
+import static android.car.drivingstate.CarDrivingStateEvent.DRIVING_STATE_IDLING;
+import static android.car.drivingstate.CarDrivingStateEvent.DRIVING_STATE_MOVING;
+import static android.car.drivingstate.CarDrivingStateEvent.DRIVING_STATE_PARKED;
+
 import android.app.Activity;
+import android.app.AlertDialog;
 import android.car.Car;
-import android.car.CarNotConnectedException;
 import android.car.content.pm.CarPackageManager;
 import android.car.drivingstate.CarDrivingStateEvent;
 import android.car.drivingstate.CarDrivingStateManager;
 import android.car.drivingstate.CarUxRestrictions;
+import android.car.drivingstate.CarUxRestrictionsConfiguration;
 import android.car.drivingstate.CarUxRestrictionsManager;
 import android.content.ComponentName;
 import android.content.Intent;
 import android.content.ServiceConnection;
 import android.os.Bundle;
 import android.os.IBinder;
+import android.util.JsonWriter;
 import android.util.Log;
 import android.view.View;
 import android.widget.Button;
 import android.widget.TextView;
 
+import java.io.CharArrayWriter;
+
 /**
  * Sample app that uses components in car support library to demonstrate Car drivingstate UXR
  * status.
  */
 public class MainActivity extends Activity {
     public static final String TAG = "drivingstate";
+
+    // Order of elements is based on number of bits shifted in value of the constants.
+    private static final CharSequence[] UX_RESTRICTION_NAMES = new CharSequence[]{
+            "BASELINE",
+            "NO_DIALPAD",
+            "NO_FILTERING",
+            "LIMIT_STRING_LENGTH",
+            "NO_KEYBOARD",
+            "NO_VIDEO",
+            "LIMIT_CONTENT",
+            "NO_SETUP",
+            "NO_TEXT_MESSAGE",
+            "NO_VOICE_TRANSCRIPTION",
+    };
+
     private Car mCar;
     private CarDrivingStateManager mCarDrivingStateManager;
     private CarUxRestrictionsManager mCarUxRestrictionsManager;
@@ -48,6 +71,9 @@
     private TextView mUxrStatus;
     private Button mToggleButton;
     private Button mSampleMsgButton;
+    private Button mSaveUxrConfigButton;
+    private Button mShowStagedConfig;
+    private Button mShowProdConfig;
 
     private boolean mEnableUxR;
 
@@ -57,26 +83,20 @@
                 public void onServiceConnected(ComponentName name, IBinder iBinder) {
                     Log.d(TAG, "Connected to " + name.flattenToString());
                     // Get Driving State & UXR manager
-                    try {
-                        mCarDrivingStateManager = (CarDrivingStateManager) mCar.getCarManager(
-                                Car.CAR_DRIVING_STATE_SERVICE);
-                        mCarUxRestrictionsManager = (CarUxRestrictionsManager) mCar.getCarManager(
-                                Car.CAR_UX_RESTRICTION_SERVICE);
-                        mCarPackageManager = (CarPackageManager) mCar.getCarManager(
-                                Car.PACKAGE_SERVICE);
-
-                        if (mCarDrivingStateManager != null) {
-                            mCarDrivingStateManager.registerListener(mDrvStateChangeListener);
-                            updateDrivingStateText(
-                                    mCarDrivingStateManager.getCurrentCarDrivingState());
-                        }
-                        if (mCarUxRestrictionsManager != null) {
-                            mCarUxRestrictionsManager.registerListener(mUxRChangeListener);
-                            updateUxRText(mCarUxRestrictionsManager.getCurrentCarUxRestrictions());
-                        }
-
-                    } catch (CarNotConnectedException e) {
-                        Log.e(TAG, "Failed to get a connection", e);
+                    mCarDrivingStateManager = (CarDrivingStateManager) mCar.getCarManager(
+                            Car.CAR_DRIVING_STATE_SERVICE);
+                    mCarUxRestrictionsManager = (CarUxRestrictionsManager) mCar.getCarManager(
+                            Car.CAR_UX_RESTRICTION_SERVICE);
+                    mCarPackageManager = (CarPackageManager) mCar.getCarManager(
+                            Car.PACKAGE_SERVICE);
+                    if (mCarDrivingStateManager != null) {
+                        mCarDrivingStateManager.registerListener(mDrvStateChangeListener);
+                        updateDrivingStateText(
+                                mCarDrivingStateManager.getCurrentCarDrivingState());
+                    }
+                    if (mCarUxRestrictionsManager != null) {
+                        mCarUxRestrictionsManager.registerListener(mUxRChangeListener);
+                        updateUxRText(mCarUxRestrictionsManager.getCurrentCarUxRestrictions());
                     }
                 }
 
@@ -96,7 +116,9 @@
                         : "No Distraction Optimization required");
 
         mUxrStatus.setText("Active Restrictions : 0x"
-                + Integer.toHexString(restrictions.getActiveRestrictions()));
+                + Integer.toHexString(restrictions.getActiveRestrictions())
+                + " - "
+                + Integer.toBinaryString(restrictions.getActiveRestrictions()));
 
         mDistractionOptStatus.requestLayout();
         mUxrStatus.requestLayout();
@@ -123,13 +145,13 @@
         }
         String displayText;
         switch (state.eventValue) {
-            case CarDrivingStateEvent.DRIVING_STATE_PARKED:
+            case DRIVING_STATE_PARKED:
                 displayText = "Parked";
                 break;
-            case CarDrivingStateEvent.DRIVING_STATE_IDLING:
+            case DRIVING_STATE_IDLING:
                 displayText = "Idling";
                 break;
-            case CarDrivingStateEvent.DRIVING_STATE_MOVING:
+            case DRIVING_STATE_MOVING:
                 displayText = "Moving";
                 break;
             default:
@@ -147,8 +169,9 @@
             this::updateDrivingStateText;
 
     @Override
-    public void onCreate(Bundle savedInstanceState) {
+    protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
+
         setContentView(R.layout.main_activity);
 
         mDrvStatus = findViewById(R.id.driving_state);
@@ -156,9 +179,14 @@
         mUxrStatus = findViewById(R.id.uxr_status);
         mToggleButton = findViewById(R.id.toggle_status);
 
-        mToggleButton.setOnClickListener(v -> {
-            updateToggleUxREnable();
-        });
+        mSaveUxrConfigButton = findViewById(R.id.save_uxr_config);
+        mSaveUxrConfigButton.setOnClickListener(v -> saveUxrConfig());
+
+        mShowStagedConfig = findViewById(R.id.show_staged_config);
+        mShowStagedConfig.setOnClickListener(v -> showStagedUxRestrictionsConfig());
+        mShowProdConfig = findViewById(R.id.show_prod_config);
+        mShowProdConfig.setOnClickListener(v -> showProdUxRestrictionsConfig());
+        mToggleButton.setOnClickListener(v -> updateToggleUxREnable());
 
         mSampleMsgButton = findViewById(R.id.launch_message);
         mSampleMsgButton.setOnClickListener(this::launchSampleMsgActivity);
@@ -168,23 +196,96 @@
         mCar.connect();
     }
 
+    private void saveUxrConfig() {
+        // Pop up a dialog to build the IDLING restrictions.
+        boolean[] selected = new boolean[UX_RESTRICTION_NAMES.length];
+        new AlertDialog.Builder(this)
+                .setTitle(R.string.set_uxr_config_dialog_title)
+                .setMultiChoiceItems(UX_RESTRICTION_NAMES, null,
+                        (dialog, which, isChecked) -> selected[which] = isChecked)
+                .setPositiveButton(R.string.set_uxr_config_dialog_positive_button,
+                        (dialog, id) -> setUxRestrictionsConfig(selected))
+                .setNegativeButton(R.string.set_uxr_config_dialog_negative_button, null)
+                .show();
+    }
+
+    private void setUxRestrictionsConfig(boolean[] selected) {
+        int selectedRestrictions = 0;
+        // Iteration starts at 1 because 0 is BASELINE (no restrictions).
+        for (int i = 1; i < selected.length; i++) {
+            if (selected[i]) {
+                selectedRestrictions += 1 << (i - 1);
+            }
+        }
+        boolean reqOpt = selectedRestrictions != 0;
+        CarUxRestrictionsConfiguration config = new CarUxRestrictionsConfiguration.Builder()
+                .setUxRestrictions(DRIVING_STATE_PARKED, false, 0)
+                .setUxRestrictions(DRIVING_STATE_IDLING, reqOpt, selectedRestrictions)
+                .setUxRestrictions(DRIVING_STATE_MOVING, reqOpt, selectedRestrictions)
+                .build();
+
+        mCarUxRestrictionsManager.saveUxRestrictionsConfigurationForNextBoot(config);
+    }
+
+    private void showStagedUxRestrictionsConfig() {
+        try {
+            CarUxRestrictionsConfiguration stagedConfig =
+                    mCarUxRestrictionsManager.getStagedConfig();
+            if (stagedConfig == null) {
+                new AlertDialog.Builder(this)
+                        .setMessage(R.string.no_staged_config)
+                        .show();
+                return;
+            }
+            CharArrayWriter charWriter = new CharArrayWriter();
+            JsonWriter writer = new JsonWriter(charWriter);
+            writer.setIndent("\t");
+            stagedConfig.writeJson(writer);
+            new AlertDialog.Builder(this)
+                    .setTitle(R.string.staged_config_title)
+                    .setMessage(charWriter.toString())
+                    .show();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    private void showProdUxRestrictionsConfig() {
+        try {
+            CarUxRestrictionsConfiguration prodConfig =
+                    mCarUxRestrictionsManager.getConfig();
+            if (prodConfig == null) {
+                new AlertDialog.Builder(this)
+                        .setMessage(R.string.no_prod_config)
+                        .show();
+                return;
+            }
+            CharArrayWriter charWriter = new CharArrayWriter();
+            JsonWriter writer = new JsonWriter(charWriter);
+            writer.setIndent("\t");
+            prodConfig.writeJson(writer);
+            new AlertDialog.Builder(this)
+                    .setTitle(R.string.prod_config_title)
+                    .setMessage(charWriter.toString())
+                    .show();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
     private void launchSampleMsgActivity(View view) {
         Intent msgIntent = new Intent(this, SampleMessageActivity.class);
         startActivity(msgIntent);
     }
 
-
     @Override
     protected void onDestroy() {
-        try {
-            if (mCarUxRestrictionsManager != null) {
-                mCarUxRestrictionsManager.unregisterListener();
-            }
-            if (mCarDrivingStateManager != null) {
-                mCarDrivingStateManager.unregisterListener();
-            }
-        } catch (CarNotConnectedException e) {
-            Log.e(TAG, "Error unregistering listeners", e);
+        super.onDestroy();
+        if (mCarUxRestrictionsManager != null) {
+            mCarUxRestrictionsManager.unregisterListener();
+        }
+        if (mCarDrivingStateManager != null) {
+            mCarDrivingStateManager.unregisterListener();
         }
         if (mCar != null) {
             mCar.disconnect();
diff --git a/tests/VmsPublisherClientSample/res/values/strings.xml b/tests/VmsPublisherClientSample/res/values/strings.xml
index df8bf05..9d548e4 100644
--- a/tests/VmsPublisherClientSample/res/values/strings.xml
+++ b/tests/VmsPublisherClientSample/res/values/strings.xml
@@ -14,5 +14,5 @@
      limitations under the License.
 -->
 <resources>
-  <string name="app_name">VmsPublisherClientSample</string>
+  <string name="app_name" translatable="false">VmsPublisherClientSample</string>
 </resources>
diff --git a/tests/VmsSubscriberClientSample/res/values/strings.xml b/tests/VmsSubscriberClientSample/res/values/strings.xml
index 24df55e..64b8482 100644
--- a/tests/VmsSubscriberClientSample/res/values/strings.xml
+++ b/tests/VmsSubscriberClientSample/res/values/strings.xml
@@ -1,3 +1,3 @@
 <resources>
-  <string name="app_name">VmsSubscriberClientSample</string>
+  <string name="app_name" translatable="false">VmsSubscriberClientSample</string>
 </resources>
diff --git a/tests/VmsSubscriberClientSample/src/com/google/android/car/vms/subscriber/VmsSubscriberClientSampleActivity.java b/tests/VmsSubscriberClientSample/src/com/google/android/car/vms/subscriber/VmsSubscriberClientSampleActivity.java
index 41de024..3730104 100644
--- a/tests/VmsSubscriberClientSample/src/com/google/android/car/vms/subscriber/VmsSubscriberClientSampleActivity.java
+++ b/tests/VmsSubscriberClientSample/src/com/google/android/car/vms/subscriber/VmsSubscriberClientSampleActivity.java
@@ -18,7 +18,6 @@
 
 import android.app.Activity;
 import android.car.Car;
-import android.car.CarNotConnectedException;
 import android.car.vms.VmsAvailableLayers;
 import android.car.vms.VmsLayer;
 import android.car.vms.VmsSubscriberManager;
@@ -88,25 +87,20 @@
         @Override
         public void onServiceDisconnected(ComponentName name) {
             Log.d(TAG, "Disconnect from Car Service");
+            if (mVmsSubscriberManager != null) {
+                mVmsSubscriberManager.clearVmsSubscriberClientCallback();
+                mVmsSubscriberManager.unsubscribe(TEST_LAYER);
+            }
         }
 
         private VmsSubscriberManager getVmsSubscriberManager() {
-            try {
-                return (VmsSubscriberManager) mCarApi.getCarManager(
-                        Car.VMS_SUBSCRIBER_SERVICE);
-            } catch (CarNotConnectedException e) {
-                Log.e(TAG, "Car is not connected!", e);
-            }
-            return null;
+            return (VmsSubscriberManager) mCarApi.getCarManager(
+                    Car.VMS_SUBSCRIBER_SERVICE);
         }
 
         private void configureSubscriptions(VmsSubscriberManager vmsSubscriberManager) {
-            try {
-                vmsSubscriberManager.setVmsSubscriberClientCallback(mExecutor, mClientCallback);
-                vmsSubscriberManager.subscribe(TEST_LAYER);
-            } catch (CarNotConnectedException e) {
-                Log.e(TAG, "Car is not connected!", e);
-            }
+            vmsSubscriberManager.setVmsSubscriberClientCallback(mExecutor, mClientCallback);
+            vmsSubscriberManager.subscribe(TEST_LAYER);
         }
 
     };
diff --git a/tests/android_car_api_test/Android.mk b/tests/android_car_api_test/Android.mk
index b1c2728..c1d412c 100644
--- a/tests/android_car_api_test/Android.mk
+++ b/tests/android_car_api_test/Android.mk
@@ -35,7 +35,7 @@
 
 LOCAL_STATIC_JAVA_LIBRARIES := junit
 LOCAL_STATIC_JAVA_LIBRARIES += \
-        android-support-test \
+        androidx.test.rules \
         android.hidl.base-V1.0-java \
         android.hardware.automotive.vehicle-V2.0-java \
 
diff --git a/tests/android_car_api_test/src/android/car/apitest/CarApiUtilTest.java b/tests/android_car_api_test/src/android/car/apitest/CarApiUtilTest.java
index 9027ad4..78a6f02 100644
--- a/tests/android_car_api_test/src/android/car/apitest/CarApiUtilTest.java
+++ b/tests/android_car_api_test/src/android/car/apitest/CarApiUtilTest.java
@@ -15,9 +15,7 @@
  */
 package android.car.apitest;
 
-import android.car.Car;
 import android.car.CarApiUtil;
-import android.car.CarNotConnectedException;
 import android.car.settings.CarSettings;
 
 import junit.framework.TestCase;
@@ -57,24 +55,4 @@
         assertTrue(CarApiUtil.encodeGarageTimeSetting(10, 0).equals("10:0"));
         assertTrue(CarApiUtil.encodeGarageTimeSetting(23, 59).equals("23:59"));
     }
-
-    public void testCheckCarNotConnectedExceptionFromCarService() {
-        IllegalStateException e = new IllegalStateException(Car.CAR_NOT_CONNECTED_EXCEPTION_MSG);
-        Exception resultException = null;
-        try {
-            CarApiUtil.checkCarNotConnectedExceptionFromCarService(e);
-        } catch (Exception exception) {
-            resultException = exception;
-        }
-        assertTrue(resultException instanceof CarNotConnectedException);
-
-        e = new IllegalStateException("Hello");
-        resultException = null;
-        try {
-            CarApiUtil.checkCarNotConnectedExceptionFromCarService(e);
-        } catch (Exception exception) {
-            resultException = exception;
-        }
-        assertEquals(e, resultException);
-    }
 }
diff --git a/tests/android_car_api_test/src/android/car/apitest/CarAppFocusManagerTest.java b/tests/android_car_api_test/src/android/car/apitest/CarAppFocusManagerTest.java
index a067fe3..369c8f3 100644
--- a/tests/android_car_api_test/src/android/car/apitest/CarAppFocusManagerTest.java
+++ b/tests/android_car_api_test/src/android/car/apitest/CarAppFocusManagerTest.java
@@ -21,7 +21,6 @@
 
 import android.car.Car;
 import android.car.CarAppFocusManager;
-import android.car.CarNotConnectedException;
 import android.content.Context;
 import android.os.Handler;
 import android.os.Looper;
@@ -305,13 +304,12 @@
                 APP_FOCUS_TYPE_NAVIGATION, false));
     }
 
-    private CarAppFocusManager createManager()
-            throws CarNotConnectedException, InterruptedException {
+    private CarAppFocusManager createManager() throws InterruptedException {
         return createManager(getContext(), mEventThread);
     }
 
     private static CarAppFocusManager createManager(Context context,
-            LooperThread eventThread) throws InterruptedException, CarNotConnectedException {
+            LooperThread eventThread) throws InterruptedException {
         Car car = createCar(context, eventThread);
         CarAppFocusManager manager = (CarAppFocusManager) car.getCarManager(Car.APP_FOCUS_SERVICE);
         assertNotNull(manager);
diff --git a/tests/android_car_api_test/src/android/car/apitest/CarProjectionManagerTest.java b/tests/android_car_api_test/src/android/car/apitest/CarProjectionManagerTest.java
index 5b3953f..abfeb11 100644
--- a/tests/android_car_api_test/src/android/car/apitest/CarProjectionManagerTest.java
+++ b/tests/android_car_api_test/src/android/car/apitest/CarProjectionManagerTest.java
@@ -23,8 +23,10 @@
 import android.net.wifi.WifiConfiguration;
 import android.os.Binder;
 import android.os.IBinder;
-import android.support.test.filters.RequiresDevice;
 import android.test.suitebuilder.annotation.LargeTest;
+import android.test.suitebuilder.annotation.Suppress;
+
+import androidx.test.filters.RequiresDevice;
 
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
@@ -103,6 +105,8 @@
         mManager.unregisterProjectionRunner(intent);
     }
 
+    //TODO(b/120081013): move this test to CTS
+    @Suppress
     @RequiresDevice
     public void testAccessPoint() throws Exception {
         CountDownLatch startedLatch = new CountDownLatch(1);
diff --git a/tests/android_car_api_test/src/android/car/apitest/CarTest.java b/tests/android_car_api_test/src/android/car/apitest/CarTest.java
index c51e659..38e566a 100644
--- a/tests/android_car_api_test/src/android/car/apitest/CarTest.java
+++ b/tests/android_car_api_test/src/android/car/apitest/CarTest.java
@@ -17,7 +17,6 @@
 package android.car.apitest;
 
 import android.car.Car;
-import android.car.CarNotConnectedException;
 import android.car.ICar;
 import android.car.hardware.CarSensorManager;
 import android.content.ComponentName;
@@ -108,20 +107,4 @@
         Car car2 = new Car(getContext(), mICar, null);
         assertTrue(car2.isConnected());
     }
-
-    public void testCheckCarNotConnectedExceptionFromCarService() throws Exception {
-        try {
-            Car.checkCarNotConnectedExceptionFromCarService(new IllegalStateException());
-            fail();
-        } catch(IllegalStateException e) {
-            // expected
-        }
-        try {
-            Car.checkCarNotConnectedExceptionFromCarService(
-                    new IllegalStateException(Car.CAR_NOT_CONNECTED_EXCEPTION_MSG));
-            fail();
-        } catch(CarNotConnectedException e) {
-            // expected
-        }
-    }
 }
diff --git a/tests/android_car_api_test/src/android/car/apitest/CarUxRestrictionsConfigurationTest.java b/tests/android_car_api_test/src/android/car/apitest/CarUxRestrictionsConfigurationTest.java
new file mode 100644
index 0000000..f86c76e
--- /dev/null
+++ b/tests/android_car_api_test/src/android/car/apitest/CarUxRestrictionsConfigurationTest.java
@@ -0,0 +1,387 @@
+/*
+ * Copyright (C) 2018 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 android.car.apitest;
+
+import static android.car.drivingstate.CarDrivingStateEvent.DRIVING_STATE_IDLING;
+import static android.car.drivingstate.CarDrivingStateEvent.DRIVING_STATE_MOVING;
+import static android.car.drivingstate.CarDrivingStateEvent.DRIVING_STATE_PARKED;
+import static android.car.drivingstate.CarUxRestrictions.UX_RESTRICTIONS_BASELINE;
+import static android.car.drivingstate.CarUxRestrictions.UX_RESTRICTIONS_FULLY_RESTRICTED;
+import static android.car.drivingstate.CarUxRestrictions.UX_RESTRICTIONS_NO_VIDEO;
+import static android.car.drivingstate.CarUxRestrictionsConfiguration.Builder.SpeedRange.MAX_SPEED;
+
+import android.car.drivingstate.CarUxRestrictions;
+import android.car.drivingstate.CarUxRestrictionsConfiguration;
+import android.util.JsonReader;
+import android.util.JsonWriter;
+
+import androidx.test.filters.SmallTest;
+
+import junit.framework.TestCase;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.io.PrintWriter;
+
+/**
+ * Unit test for UXR config and its subclasses.
+ */
+@SmallTest
+public class CarUxRestrictionsConfigurationTest extends TestCase {
+
+    // This test verifies the expected way to build config would succeed.
+    public void testConstruction() {
+        new CarUxRestrictionsConfiguration.Builder().build();
+
+        new CarUxRestrictionsConfiguration.Builder()
+                .setMaxStringLength(1)
+                .build();
+
+        new CarUxRestrictionsConfiguration.Builder()
+                .setUxRestrictions(DRIVING_STATE_PARKED, false, UX_RESTRICTIONS_BASELINE)
+                .build();
+
+        new CarUxRestrictionsConfiguration.Builder()
+                .setUxRestrictions(DRIVING_STATE_MOVING, true, UX_RESTRICTIONS_FULLY_RESTRICTED)
+                .build();
+
+        new CarUxRestrictionsConfiguration.Builder()
+                .setUxRestrictions(DRIVING_STATE_MOVING,
+                        new CarUxRestrictionsConfiguration.Builder.SpeedRange(0f, MAX_SPEED),
+                        true, UX_RESTRICTIONS_FULLY_RESTRICTED)
+                .build();
+
+        new CarUxRestrictionsConfiguration.Builder()
+                .setUxRestrictions(DRIVING_STATE_MOVING,
+                        new CarUxRestrictionsConfiguration.Builder.SpeedRange(0f, 1f),
+                        true, UX_RESTRICTIONS_FULLY_RESTRICTED)
+                .setUxRestrictions(DRIVING_STATE_MOVING,
+                        new CarUxRestrictionsConfiguration.Builder.SpeedRange(1f, MAX_SPEED),
+                        true, UX_RESTRICTIONS_FULLY_RESTRICTED)
+                .build();
+    }
+
+    public void testUnspecifiedDrivingStateUsesDefaultRestriction() {
+        CarUxRestrictionsConfiguration config =
+                new CarUxRestrictionsConfiguration.Builder().build();
+
+        CarUxRestrictions parkedRestrictions = config.getUxRestrictions(DRIVING_STATE_PARKED, 0f);
+        assertTrue(parkedRestrictions.isRequiresDistractionOptimization());
+        assertEquals(parkedRestrictions.getActiveRestrictions(), UX_RESTRICTIONS_FULLY_RESTRICTED);
+
+        CarUxRestrictions movingRestrictions = config.getUxRestrictions(DRIVING_STATE_MOVING, 1f);
+        assertTrue(movingRestrictions.isRequiresDistractionOptimization());
+        assertEquals(movingRestrictions.getActiveRestrictions(), UX_RESTRICTIONS_FULLY_RESTRICTED);
+    }
+
+    public void testBuilderValidation_MultipleSpeedRange_NonZeroStart() {
+        CarUxRestrictionsConfiguration.Builder builder =
+                new CarUxRestrictionsConfiguration.Builder();
+        builder.setUxRestrictions(DRIVING_STATE_MOVING,
+                new CarUxRestrictionsConfiguration.Builder.SpeedRange(1, 2),
+                true, UX_RESTRICTIONS_FULLY_RESTRICTED);
+        builder.setUxRestrictions(DRIVING_STATE_MOVING,
+                new CarUxRestrictionsConfiguration.Builder.SpeedRange(2, MAX_SPEED),
+                true, UX_RESTRICTIONS_FULLY_RESTRICTED);
+
+        try {
+            builder.build();
+            fail();
+        } catch (IllegalStateException e) {
+            // Expected exception.
+        }
+    }
+
+    public void testBuilderValidation_SpeedRange_NonZeroStart() {
+        CarUxRestrictionsConfiguration.Builder builder =
+                new CarUxRestrictionsConfiguration.Builder();
+        builder.setUxRestrictions(DRIVING_STATE_MOVING,
+                new CarUxRestrictionsConfiguration.Builder.SpeedRange(1, MAX_SPEED),
+                true, UX_RESTRICTIONS_FULLY_RESTRICTED);
+
+        try {
+            builder.build();
+            fail();
+        } catch (IllegalStateException e) {
+            // Expected exception.
+        }
+    }
+
+    public void testBuilderValidation_SpeedRange_Overlap() {
+        CarUxRestrictionsConfiguration.Builder builder =
+                new CarUxRestrictionsConfiguration.Builder();
+        builder.setUxRestrictions(DRIVING_STATE_MOVING,
+                new CarUxRestrictionsConfiguration.Builder.SpeedRange(0, 5), true,
+                UX_RESTRICTIONS_FULLY_RESTRICTED);
+        builder.setUxRestrictions(DRIVING_STATE_MOVING,
+                new CarUxRestrictionsConfiguration.Builder.SpeedRange(4), true,
+                UX_RESTRICTIONS_FULLY_RESTRICTED);
+
+        try {
+            builder.build();
+            fail();
+        } catch (IllegalStateException e) {
+            // Expected exception.
+        }
+    }
+
+    public void testBuilderValidation_SpeedRange_Gap() {
+        CarUxRestrictionsConfiguration.Builder builder =
+                new CarUxRestrictionsConfiguration.Builder();
+        builder.setUxRestrictions(DRIVING_STATE_MOVING,
+                new CarUxRestrictionsConfiguration.Builder.SpeedRange(0, 5), true,
+                UX_RESTRICTIONS_FULLY_RESTRICTED);
+        builder.setUxRestrictions(DRIVING_STATE_MOVING,
+                new CarUxRestrictionsConfiguration.Builder.SpeedRange(8), true,
+                UX_RESTRICTIONS_FULLY_RESTRICTED);
+
+        try {
+            builder.build();
+            fail();
+        } catch (IllegalStateException e) {
+            // Expected exception.
+        }
+    }
+
+    public void testBuilderValidation_NonMovingStateCannotUseSpeedRange() {
+        CarUxRestrictionsConfiguration.Builder builder =
+                new CarUxRestrictionsConfiguration.Builder();
+        try {
+            builder.setUxRestrictions(DRIVING_STATE_PARKED,
+                    new CarUxRestrictionsConfiguration.Builder.SpeedRange(0, 5), true,
+                    UX_RESTRICTIONS_FULLY_RESTRICTED);
+        } catch (IllegalArgumentException e) {
+            // Expected exception.
+        }
+    }
+
+    public void testSpeedRange_Construction() {
+        new CarUxRestrictionsConfiguration.Builder.SpeedRange(0f);
+        new CarUxRestrictionsConfiguration.Builder.SpeedRange(0f, 1f);
+        new CarUxRestrictionsConfiguration.Builder.SpeedRange(0f, MAX_SPEED);
+    }
+
+    public void testSpeedRange_NegativeMax() {
+        try {
+            new CarUxRestrictionsConfiguration.Builder.SpeedRange(2f, -1f);
+        } catch (IllegalArgumentException e) {
+            // Expected exception.
+        }
+    }
+
+    public void testSpeedRange_MinGreaterThanMax() {
+        try {
+            new CarUxRestrictionsConfiguration.Builder.SpeedRange(5f, 2f);
+        } catch (IllegalArgumentException e) {
+            // Expected exception.
+        }
+    }
+
+    public void testSpeedRangeComparison_DifferentMin() {
+        CarUxRestrictionsConfiguration.Builder.SpeedRange s1 =
+                new CarUxRestrictionsConfiguration.Builder.SpeedRange(1f);
+        CarUxRestrictionsConfiguration.Builder.SpeedRange s2 =
+                new CarUxRestrictionsConfiguration.Builder.SpeedRange(2f);
+        assertTrue(s1.compareTo(s2) < 0);
+        assertTrue(s2.compareTo(s1) > 0);
+    }
+
+    public void testSpeedRangeComparison_SameMin() {
+        CarUxRestrictionsConfiguration.Builder.SpeedRange s1 =
+                new CarUxRestrictionsConfiguration.Builder.SpeedRange(1f);
+        CarUxRestrictionsConfiguration.Builder.SpeedRange s2 =
+                new CarUxRestrictionsConfiguration.Builder.SpeedRange(1f);
+        assertTrue(s1.compareTo(s2) == 0);
+    }
+
+    public void testSpeedRangeComparison_SameMinDifferentMax() {
+        CarUxRestrictionsConfiguration.Builder.SpeedRange s1 =
+                new CarUxRestrictionsConfiguration.Builder.SpeedRange(0f, 1f);
+        CarUxRestrictionsConfiguration.Builder.SpeedRange s2 =
+                new CarUxRestrictionsConfiguration.Builder.SpeedRange(0f, 2f);
+        assertTrue(s1.compareTo(s2) < 0);
+        assertTrue(s2.compareTo(s1) > 0);
+    }
+
+    public void testSpeedRangeComparison_MaxSpeed() {
+        CarUxRestrictionsConfiguration.Builder.SpeedRange s1 =
+                new CarUxRestrictionsConfiguration.Builder.SpeedRange(0f, 1f);
+        CarUxRestrictionsConfiguration.Builder.SpeedRange s2 =
+                new CarUxRestrictionsConfiguration.Builder.SpeedRange(0f);
+        assertTrue(s1.compareTo(s2) < 0);
+        assertTrue(s2.compareTo(s1) > 0);
+    }
+
+    public void testSpeedRangeEquals() {
+        CarUxRestrictionsConfiguration.Builder.SpeedRange s1, s2;
+
+        s1 = new CarUxRestrictionsConfiguration.Builder.SpeedRange(0f);
+        assertTrue(s1.equals(s1));
+
+        s1 = new CarUxRestrictionsConfiguration.Builder.SpeedRange(1f);
+        s2 = new CarUxRestrictionsConfiguration.Builder.SpeedRange(1f);
+        assertTrue(s1.compareTo(s2) == 0);
+        assertTrue(s1.equals(s2));
+
+        s1 = new CarUxRestrictionsConfiguration.Builder.SpeedRange(0f, 1f);
+        s2 = new CarUxRestrictionsConfiguration.Builder.SpeedRange(0f, 1f);
+        assertTrue(s1.equals(s2));
+
+        s1 = new CarUxRestrictionsConfiguration.Builder.SpeedRange(0f, MAX_SPEED);
+        s2 = new CarUxRestrictionsConfiguration.Builder.SpeedRange(0f, MAX_SPEED);
+        assertTrue(s1.equals(s2));
+
+        s1 = new CarUxRestrictionsConfiguration.Builder.SpeedRange(0f);
+        s2 = new CarUxRestrictionsConfiguration.Builder.SpeedRange(1f);
+        assertFalse(s1.equals(s2));
+
+        s1 = new CarUxRestrictionsConfiguration.Builder.SpeedRange(0f, 1f);
+        s2 = new CarUxRestrictionsConfiguration.Builder.SpeedRange(0f, 2f);
+        assertFalse(s1.equals(s2));
+    }
+
+    // TODO: add more tests that each verifies setting one filed in builder can be
+    // successfully retrieved out of saved json.
+    public void testJsonSerialization_DefaultConstructor() {
+        CarUxRestrictionsConfiguration config =
+                new CarUxRestrictionsConfiguration.Builder().build();
+
+        verifyConfigThroughJsonSerialization(config);
+    }
+
+    public void testJsonSerialization_RestrictionParameters() {
+        CarUxRestrictionsConfiguration config = new CarUxRestrictionsConfiguration.Builder()
+                .setMaxStringLength(1)
+                .setMaxCumulativeContentItems(1)
+                .setMaxContentDepth(1)
+                .build();
+
+        verifyConfigThroughJsonSerialization(config);
+    }
+
+    public void testJsonSerialization_NonMovingStateRestrictions() {
+        CarUxRestrictionsConfiguration config = new CarUxRestrictionsConfiguration.Builder()
+                .setUxRestrictions(DRIVING_STATE_PARKED, false, UX_RESTRICTIONS_BASELINE)
+                .build();
+
+        verifyConfigThroughJsonSerialization(config);
+    }
+
+    public void testJsonSerialization_MovingStateNoSpeedRange() {
+        CarUxRestrictionsConfiguration config = new CarUxRestrictionsConfiguration.Builder()
+                .setUxRestrictions(DRIVING_STATE_MOVING, true, UX_RESTRICTIONS_FULLY_RESTRICTED)
+                .build();
+
+        verifyConfigThroughJsonSerialization(config);
+    }
+
+    public void testJsonSerialization_MovingStateWithSpeedRange() {
+        CarUxRestrictionsConfiguration config = new CarUxRestrictionsConfiguration.Builder()
+                .setUxRestrictions(DRIVING_STATE_MOVING,
+                        new CarUxRestrictionsConfiguration.Builder.SpeedRange(0f, 5f),
+                        true, UX_RESTRICTIONS_FULLY_RESTRICTED)
+                .setUxRestrictions(DRIVING_STATE_MOVING,
+                        new CarUxRestrictionsConfiguration.Builder.SpeedRange(5f, MAX_SPEED),
+                        true, UX_RESTRICTIONS_FULLY_RESTRICTED)
+                .build();
+
+        verifyConfigThroughJsonSerialization(config);
+    }
+
+    public void testDump() {
+        CarUxRestrictionsConfiguration[] configs = new CarUxRestrictionsConfiguration[] {
+                // Driving state with no speed range
+                new CarUxRestrictionsConfiguration.Builder()
+                        .setUxRestrictions(DRIVING_STATE_PARKED, false, UX_RESTRICTIONS_BASELINE)
+                        .setUxRestrictions(DRIVING_STATE_IDLING, true, UX_RESTRICTIONS_NO_VIDEO)
+                        .setUxRestrictions(DRIVING_STATE_MOVING, true, UX_RESTRICTIONS_NO_VIDEO)
+                        .build(),
+                // Parameters
+                new CarUxRestrictionsConfiguration.Builder()
+                        .setMaxStringLength(1)
+                        .setMaxContentDepth(1)
+                        .setMaxCumulativeContentItems(1)
+                        .build(),
+                // Driving state with single speed range
+                new CarUxRestrictionsConfiguration.Builder()
+                        .setUxRestrictions(DRIVING_STATE_MOVING,
+                                new CarUxRestrictionsConfiguration.Builder.SpeedRange(0f),
+                                true, UX_RESTRICTIONS_NO_VIDEO)
+                        .build(),
+                // Driving state with multiple speed ranges
+                new CarUxRestrictionsConfiguration.Builder()
+                        .setUxRestrictions(DRIVING_STATE_MOVING,
+                                new CarUxRestrictionsConfiguration.Builder.SpeedRange(0f, 1f),
+                                true, UX_RESTRICTIONS_NO_VIDEO)
+                        .setUxRestrictions(DRIVING_STATE_MOVING,
+                                new CarUxRestrictionsConfiguration.Builder.SpeedRange(1f),
+                                true, UX_RESTRICTIONS_NO_VIDEO)
+                        .build(),
+        };
+
+        for (CarUxRestrictionsConfiguration config : configs) {
+            config.dump(new PrintWriter(new ByteArrayOutputStream()));
+        }
+    }
+
+    public void testDumpContainsNecessaryInfo() {
+
+        CarUxRestrictionsConfiguration config = new CarUxRestrictionsConfiguration.Builder()
+                .setUxRestrictions(DRIVING_STATE_MOVING,
+                        new CarUxRestrictionsConfiguration.Builder.SpeedRange(0f, 1f),
+                        true, UX_RESTRICTIONS_NO_VIDEO)
+                .setUxRestrictions(DRIVING_STATE_MOVING,
+                        new CarUxRestrictionsConfiguration.Builder.SpeedRange(1f),
+                        true, UX_RESTRICTIONS_NO_VIDEO)
+                .build();
+        ByteArrayOutputStream output = new ByteArrayOutputStream();
+        try (PrintWriter writer = new PrintWriter(output)) {
+            config.dump(writer);
+        }
+
+        String dump = new String(output.toByteArray());
+        assertTrue(dump.contains("Max String length"));
+        assertTrue(dump.contains("Max Cumulative Content Items"));
+        assertTrue(dump.contains("Max Content depth"));
+        assertTrue(dump.contains("State:moving"));
+        assertTrue(dump.contains("Speed Range"));
+        assertTrue(dump.contains("Requires DO?"));
+        assertTrue(dump.contains("Restrictions"));
+    }
+
+    private void verifyConfigThroughJsonSerialization(CarUxRestrictionsConfiguration config) {
+        ByteArrayOutputStream out = new ByteArrayOutputStream();
+        try (JsonWriter writer = new JsonWriter(new OutputStreamWriter(out))) {
+            config.writeJson(writer);
+        } catch (Exception e) {
+            e.printStackTrace();
+            fail();
+        }
+
+        ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
+        try (JsonReader reader = new JsonReader(new InputStreamReader(in))) {
+            CarUxRestrictionsConfiguration deserialized = CarUxRestrictionsConfiguration.readJson(
+                    reader);
+            assertTrue(config.equals(deserialized));
+        } catch (Exception e) {
+            e.printStackTrace();
+            fail();
+        }
+    }
+}
diff --git a/tests/carservice_test/Android.mk b/tests/carservice_test/Android.mk
index 0270748..2ac3256 100644
--- a/tests/carservice_test/Android.mk
+++ b/tests/carservice_test/Android.mk
@@ -20,7 +20,8 @@
 
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
-LOCAL_RESOURCE_DIR += packages/services/Car/service/res
+LOCAL_RESOURCE_DIR += $(LOCAL_PATH)/res \
+    packages/services/Car/service/res
 
 LOCAL_AAPT_FLAGS += --extra-packages com.android.car --auto-add-overlay
 
@@ -43,7 +44,7 @@
     vehicle-hal-support-lib \
     car-systemtest \
     mockito-target-inline \
-    android-support-test \
+    androidx.test.rules \
     android.hardware.automotive.vehicle-V2.0-java \
     com.android.car.test.utils \
     truth-prebuilt
diff --git a/tests/carservice_test/AndroidManifest.xml b/tests/carservice_test/AndroidManifest.xml
index 0e98404..7c92513 100644
--- a/tests/carservice_test/AndroidManifest.xml
+++ b/tests/carservice_test/AndroidManifest.xml
@@ -29,7 +29,7 @@
     <uses-permission android:name="android.car.permission.CAR_CONTROL_AUDIO_SETTINGS" />
     <uses-permission android:name="android.car.permission.STORAGE_MONITORING" />
 
-    <instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
+    <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
             android:targetPackage="com.android.car.test"
             android:label="Tests for Car APIs"/>
 
diff --git a/tests/carservice_test/res/xml/ux_restrictions_moving_state_multi_speed_range.xml b/tests/carservice_test/res/xml/ux_restrictions_moving_state_multi_speed_range.xml
new file mode 100644
index 0000000..9dd3678
--- /dev/null
+++ b/tests/carservice_test/res/xml/ux_restrictions_moving_state_multi_speed_range.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+This xml contains UX restrictions configuration for testing.
+-->
+<UxRestrictions xmlns:car="http://schemas.android.com/apk/res-auto">
+    <RestrictionMapping>
+        <DrivingState car:state="moving" car:minSpeed="0" car:maxSpeed="5.0">
+            <Restrictions car:requiresDistractionOptimization="true" car:uxr="no_video"/>
+        </DrivingState>
+        <!-- Restrictions for speed >=5 -->
+        <DrivingState car:state="moving" car:minSpeed="5.0">
+            <Restrictions car:requiresDistractionOptimization="true" car:uxr="no_keyboard"/>
+        </DrivingState>
+    </RestrictionMapping>
+</UxRestrictions>
diff --git a/tests/carservice_test/res/xml/ux_restrictions_moving_state_no_speed_range.xml b/tests/carservice_test/res/xml/ux_restrictions_moving_state_no_speed_range.xml
new file mode 100644
index 0000000..405619e
--- /dev/null
+++ b/tests/carservice_test/res/xml/ux_restrictions_moving_state_no_speed_range.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+This xml contains UX restrictions configuration for testing.
+-->
+
+<UxRestrictions xmlns:car="http://schemas.android.com/apk/res-auto">
+    <RestrictionMapping>
+        <DrivingState car:state="moving">
+            <Restrictions car:requiresDistractionOptimization="true" car:uxr="no_video"/>
+        </DrivingState>
+    </RestrictionMapping>
+</UxRestrictions>
diff --git a/tests/carservice_test/res/xml/ux_restrictions_moving_state_single_speed_range.xml b/tests/carservice_test/res/xml/ux_restrictions_moving_state_single_speed_range.xml
new file mode 100644
index 0000000..4cd11b0
--- /dev/null
+++ b/tests/carservice_test/res/xml/ux_restrictions_moving_state_single_speed_range.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+This xml contains UX restrictions configuration for testing.
+-->
+<UxRestrictions xmlns:car="http://schemas.android.com/apk/res-auto">
+    <RestrictionMapping>
+        <DrivingState car:state="moving" car:minSpeed="0">
+            <Restrictions car:requiresDistractionOptimization="true" car:uxr="no_video"/>
+        </DrivingState>
+    </RestrictionMapping>
+</UxRestrictions>
diff --git a/tests/carservice_test/res/xml/ux_restrictions_non_moving_state.xml b/tests/carservice_test/res/xml/ux_restrictions_non_moving_state.xml
new file mode 100644
index 0000000..cc49260
--- /dev/null
+++ b/tests/carservice_test/res/xml/ux_restrictions_non_moving_state.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+This xml contains UX restrictions configuration for testing.
+-->
+<UxRestrictions xmlns:car="http://schemas.android.com/apk/res-auto">
+    <RestrictionMapping>
+        <DrivingState car:state="parked">
+            <Restrictions car:requiresDistractionOptimization="false" car:uxr="baseline"/>
+        </DrivingState>
+        <DrivingState car:state="idling">
+            <Restrictions car:requiresDistractionOptimization="true" car:uxr="no_video"/>
+        </DrivingState>
+    </RestrictionMapping>
+</UxRestrictions>
diff --git a/tests/carservice_test/res/xml/ux_restrictions_only_parameters.xml b/tests/carservice_test/res/xml/ux_restrictions_only_parameters.xml
new file mode 100644
index 0000000..4c30c16
--- /dev/null
+++ b/tests/carservice_test/res/xml/ux_restrictions_only_parameters.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+This xml contains UX restrictions configuration for testing.
+-->
+
+<UxRestrictions xmlns:car="http://schemas.android.com/apk/res-auto">
+    <!-- restriction parameters -->
+    <RestrictionParameters>
+        <StringRestrictions car:maxLength="1"/>
+        <ContentRestrictions car:maxCumulativeItems="1" car:maxDepth="1"/>
+    </RestrictionParameters>
+</UxRestrictions>
diff --git a/tests/carservice_test/src/android/media/tests/AudioPolicyTest.java b/tests/carservice_test/src/android/media/tests/AudioPolicyTest.java
index 9fcf449..9e0f311 100644
--- a/tests/carservice_test/src/android/media/tests/AudioPolicyTest.java
+++ b/tests/carservice_test/src/android/media/tests/AudioPolicyTest.java
@@ -30,11 +30,12 @@
 import android.media.audiopolicy.AudioPolicy;
 import android.os.Handler;
 import android.os.Looper;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.filters.MediumTest;
-import android.support.test.runner.AndroidJUnit4;
 import android.util.Log;
 
+import androidx.test.InstrumentationRegistry;
+import androidx.test.filters.MediumTest;
+import androidx.test.runner.AndroidJUnit4;
+
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
diff --git a/tests/carservice_test/src/com/android/car/AppFocusTest.java b/tests/carservice_test/src/com/android/car/AppFocusTest.java
index 630717f..910a132 100644
--- a/tests/carservice_test/src/com/android/car/AppFocusTest.java
+++ b/tests/carservice_test/src/com/android/car/AppFocusTest.java
@@ -19,10 +19,11 @@
 
 import android.car.Car;
 import android.car.CarAppFocusManager;
-import android.support.test.filters.MediumTest;
-import android.support.test.runner.AndroidJUnit4;
 import android.util.Log;
 
+import androidx.test.filters.MediumTest;
+import androidx.test.runner.AndroidJUnit4;
+
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
diff --git a/tests/carservice_test/src/com/android/car/CarAudioManagerTest.java b/tests/carservice_test/src/com/android/car/CarAudioManagerTest.java
index 1eb641f..d11159e 100644
--- a/tests/carservice_test/src/com/android/car/CarAudioManagerTest.java
+++ b/tests/carservice_test/src/com/android/car/CarAudioManagerTest.java
@@ -17,10 +17,11 @@
 
 import android.car.Car;
 import android.car.media.CarAudioManager;
-import android.support.test.filters.MediumTest;
-import android.support.test.runner.AndroidJUnit4;
 import android.util.Log;
 
+import androidx.test.filters.MediumTest;
+import androidx.test.runner.AndroidJUnit4;
+
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
diff --git a/tests/carservice_test/src/com/android/car/CarCabinManagerTest.java b/tests/carservice_test/src/com/android/car/CarCabinManagerTest.java
index 67725b9..46d54b7 100644
--- a/tests/carservice_test/src/com/android/car/CarCabinManagerTest.java
+++ b/tests/carservice_test/src/com/android/car/CarCabinManagerTest.java
@@ -30,11 +30,12 @@
 import android.hardware.automotive.vehicle.V2_0.VehiclePropValue;
 import android.hardware.automotive.vehicle.V2_0.VehicleProperty;
 import android.os.SystemClock;
-import android.support.test.filters.MediumTest;
-import android.support.test.runner.AndroidJUnit4;
 import android.util.Log;
 import android.util.MutableInt;
 
+import androidx.test.filters.MediumTest;
+import androidx.test.runner.AndroidJUnit4;
+
 import com.android.car.vehiclehal.VehiclePropValueBuilder;
 import com.android.car.vehiclehal.test.MockedVehicleHal.VehicleHalPropertyHandler;
 
diff --git a/tests/carservice_test/src/com/android/car/CarDiagnosticConstantsTest.java b/tests/carservice_test/src/com/android/car/CarDiagnosticConstantsTest.java
index 4d08e2d..2955345 100644
--- a/tests/carservice_test/src/com/android/car/CarDiagnosticConstantsTest.java
+++ b/tests/carservice_test/src/com/android/car/CarDiagnosticConstantsTest.java
@@ -16,10 +16,11 @@
 
 package com.android.car;
 
-import android.support.test.filters.MediumTest;
-import android.support.test.runner.AndroidJUnit4;
 import android.util.Log;
 
+import androidx.test.filters.MediumTest;
+import androidx.test.runner.AndroidJUnit4;
+
 import junit.framework.TestCase;
 
 import org.junit.Test;
diff --git a/tests/carservice_test/src/com/android/car/CarDiagnosticManagerTest.java b/tests/carservice_test/src/com/android/car/CarDiagnosticManagerTest.java
index ac07d0e..f73c401 100644
--- a/tests/carservice_test/src/com/android/car/CarDiagnosticManagerTest.java
+++ b/tests/carservice_test/src/com/android/car/CarDiagnosticManagerTest.java
@@ -16,7 +16,6 @@
 
 package com.android.car;
 
-import static java.lang.Integer.toHexString;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
@@ -37,12 +36,13 @@
 import android.hardware.automotive.vehicle.V2_0.VehiclePropValue;
 import android.hardware.automotive.vehicle.V2_0.VehicleProperty;
 import android.os.SystemClock;
-import android.support.test.filters.MediumTest;
-import android.support.test.runner.AndroidJUnit4;
 import android.util.JsonReader;
 import android.util.JsonWriter;
 import android.util.Log;
 
+import androidx.test.filters.MediumTest;
+import androidx.test.runner.AndroidJUnit4;
+
 import com.android.car.vehiclehal.DiagnosticEventBuilder;
 import com.android.car.vehiclehal.DiagnosticJson;
 import com.android.car.vehiclehal.VehiclePropValueBuilder;
@@ -51,6 +51,8 @@
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
+import static java.lang.Integer.toHexString;
+
 import java.io.StringReader;
 import java.io.StringWriter;
 import java.util.Arrays;
diff --git a/tests/carservice_test/src/com/android/car/CarDrivingRestrictionsTest.java b/tests/carservice_test/src/com/android/car/CarDrivingRestrictionsTest.java
index 7f94cbb..162cd3e 100644
--- a/tests/carservice_test/src/com/android/car/CarDrivingRestrictionsTest.java
+++ b/tests/carservice_test/src/com/android/car/CarDrivingRestrictionsTest.java
@@ -23,7 +23,6 @@
 import static org.junit.Assert.assertTrue;
 
 import android.car.Car;
-import android.car.CarNotConnectedException;
 import android.car.drivingstate.CarDrivingStateEvent;
 import android.car.drivingstate.CarDrivingStateManager;
 import android.car.drivingstate.CarUxRestrictions;
@@ -31,10 +30,11 @@
 import android.hardware.automotive.vehicle.V2_0.VehicleGear;
 import android.hardware.automotive.vehicle.V2_0.VehicleProperty;
 import android.os.SystemClock;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
 import android.util.Log;
 
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
 import com.android.car.vehiclehal.VehiclePropValueBuilder;
 import com.android.internal.annotations.GuardedBy;
 
@@ -85,7 +85,7 @@
     }
 
     @Test
-    public void testDrivingStateChange() throws CarNotConnectedException, InterruptedException {
+    public void testDrivingStateChange() throws InterruptedException {
         CarDrivingStateEvent drivingEvent;
         CarUxRestrictions restrictions;
         DrivingStateListener listener = new DrivingStateListener();
@@ -175,8 +175,7 @@
     }
 
     @Test
-    public void testDrivingStateChangeForMalformedInputs()
-            throws CarNotConnectedException, InterruptedException {
+    public void testDrivingStateChangeForMalformedInputs() throws InterruptedException {
         CarDrivingStateEvent drivingEvent;
         CarUxRestrictions restrictions;
         DrivingStateListener listener = new DrivingStateListener();
diff --git a/tests/carservice_test/src/com/android/car/CarHvacManagerTest.java b/tests/carservice_test/src/com/android/car/CarHvacManagerTest.java
index 1493fe9..a32cca5 100644
--- a/tests/carservice_test/src/com/android/car/CarHvacManagerTest.java
+++ b/tests/carservice_test/src/com/android/car/CarHvacManagerTest.java
@@ -32,11 +32,12 @@
 import android.hardware.automotive.vehicle.V2_0.VehiclePropertyAccess;
 import android.hardware.automotive.vehicle.V2_0.VehiclePropertyChangeMode;
 import android.os.SystemClock;
-import android.support.test.filters.MediumTest;
-import android.support.test.runner.AndroidJUnit4;
 import android.util.Log;
 import android.util.MutableInt;
 
+import androidx.test.filters.MediumTest;
+import androidx.test.runner.AndroidJUnit4;
+
 import com.android.car.vehiclehal.VehiclePropValueBuilder;
 import com.android.car.vehiclehal.test.MockedVehicleHal.VehicleHalPropertyHandler;
 
diff --git a/tests/carservice_test/src/com/android/car/CarInfoManagerTest.java b/tests/carservice_test/src/com/android/car/CarInfoManagerTest.java
index 9f5aa3a..f028663 100644
--- a/tests/carservice_test/src/com/android/car/CarInfoManagerTest.java
+++ b/tests/carservice_test/src/com/android/car/CarInfoManagerTest.java
@@ -22,8 +22,9 @@
 import android.car.Car;
 import android.car.CarInfoManager;
 import android.hardware.automotive.vehicle.V2_0.VehicleProperty;
-import android.support.test.filters.MediumTest;
-import android.support.test.runner.AndroidJUnit4;
+
+import androidx.test.filters.MediumTest;
+import androidx.test.runner.AndroidJUnit4;
 
 import com.android.car.vehiclehal.VehiclePropValueBuilder;
 
diff --git a/tests/carservice_test/src/com/android/car/CarPackageManagerTest.java b/tests/carservice_test/src/com/android/car/CarPackageManagerTest.java
index 84afde9..302e827 100644
--- a/tests/carservice_test/src/com/android/car/CarPackageManagerTest.java
+++ b/tests/carservice_test/src/com/android/car/CarPackageManagerTest.java
@@ -20,15 +20,15 @@
 import static org.junit.Assert.assertTrue;
 
 import android.car.Car;
-import android.car.CarNotConnectedException;
 import android.car.content.pm.AppBlockingPackageInfo;
 import android.car.content.pm.CarAppBlockingPolicy;
 import android.car.content.pm.CarPackageManager;
-import android.support.test.filters.SmallTest;
-import android.support.test.filters.Suppress;
-import android.support.test.runner.AndroidJUnit4;
 import android.util.Log;
 
+import androidx.test.filters.SmallTest;
+import androidx.test.filters.Suppress;
+import androidx.test.runner.AndroidJUnit4;
+
 import com.android.car.pm.CarPackageManagerService;
 
 import org.junit.Test;
@@ -68,16 +68,10 @@
         }, POLLING_MAX_RETRY, POLLING_SLEEP));
         final String thisPackage = getContext().getPackageName();
         final String serviceClassName = "DOES_NOT_MATTER";
-        assertTrue(pollingCheck(new PollingChecker() {
-            @Override
-            public boolean check() {
-                try {
-                    return mCarPm.isServiceDistractionOptimized(thisPackage, serviceClassName);
-                } catch (CarNotConnectedException e) {
-                    return false;
-                }
-            }
-        }, POLLING_MAX_RETRY, POLLING_SLEEP));
+        assertTrue(pollingCheck(
+                () -> mCarPm.isServiceDistractionOptimized(thisPackage, serviceClassName),
+                POLLING_MAX_RETRY,
+                POLLING_SLEEP));
         assertTrue(mCarPm.isServiceDistractionOptimized(thisPackage, null));
         assertFalse(mCarPm.isServiceDistractionOptimized(serviceClassName, serviceClassName));
         assertFalse(mCarPm.isServiceDistractionOptimized(serviceClassName, null));
diff --git a/tests/carservice_test/src/com/android/car/CarPowerManagementTest.java b/tests/carservice_test/src/com/android/car/CarPowerManagementTest.java
index 1fdba6e..ab5c271 100644
--- a/tests/carservice_test/src/com/android/car/CarPowerManagementTest.java
+++ b/tests/carservice_test/src/com/android/car/CarPowerManagementTest.java
@@ -28,9 +28,10 @@
 import android.hardware.automotive.vehicle.V2_0.VehiclePropertyAccess;
 import android.hardware.automotive.vehicle.V2_0.VehiclePropertyChangeMode;
 import android.os.SystemClock;
-import android.support.test.annotation.UiThreadTest;
-import android.support.test.filters.MediumTest;
-import android.support.test.runner.AndroidJUnit4;
+
+import androidx.test.annotation.UiThreadTest;
+import androidx.test.filters.MediumTest;
+import androidx.test.runner.AndroidJUnit4;
 
 import com.android.car.systeminterface.DisplayInterface;
 import com.android.car.systeminterface.SystemInterface;
diff --git a/tests/carservice_test/src/com/android/car/CarProjectionManagerTest.java b/tests/carservice_test/src/com/android/car/CarProjectionManagerTest.java
index 8b108df..8efc823 100644
--- a/tests/carservice_test/src/com/android/car/CarProjectionManagerTest.java
+++ b/tests/carservice_test/src/com/android/car/CarProjectionManagerTest.java
@@ -26,11 +26,12 @@
 import android.hardware.automotive.vehicle.V2_0.VehicleProperty;
 import android.hardware.automotive.vehicle.V2_0.VehiclePropertyAccess;
 import android.os.SystemClock;
-import android.support.test.filters.MediumTest;
-import android.support.test.runner.AndroidJUnit4;
 import android.util.Log;
 import android.view.KeyEvent;
 
+import androidx.test.filters.MediumTest;
+import androidx.test.runner.AndroidJUnit4;
+
 import com.android.car.vehiclehal.VehiclePropValueBuilder;
 import com.android.car.vehiclehal.test.MockedVehicleHal.VehicleHalPropertyHandler;
 
diff --git a/tests/carservice_test/src/com/android/car/CarSensorManagerTest.java b/tests/carservice_test/src/com/android/car/CarSensorManagerTest.java
index e5b3566..16e974c 100644
--- a/tests/carservice_test/src/com/android/car/CarSensorManagerTest.java
+++ b/tests/carservice_test/src/com/android/car/CarSensorManagerTest.java
@@ -22,7 +22,6 @@
 import static org.junit.Assert.assertTrue;
 
 import android.car.Car;
-import android.car.CarNotConnectedException;
 import android.car.hardware.CarSensorEvent;
 import android.car.hardware.CarSensorManager;
 import android.hardware.automotive.vehicle.V2_0.VehicleGear;
@@ -228,7 +227,7 @@
     }
 
     @Test
-    public void testIgnitionState() throws CarNotConnectedException {
+    public void testIgnitionState() {
         CarSensorEvent event = mCarSensorManager.getLatestSensorEvent(
                 CarSensorManager.SENSOR_TYPE_IGNITION_STATE);
         assertNotNull(event);
diff --git a/tests/carservice_test/src/com/android/car/CarStorageMonitoringTest.java b/tests/carservice_test/src/com/android/car/CarStorageMonitoringTest.java
index f034ccb..37e5c49 100644
--- a/tests/carservice_test/src/com/android/car/CarStorageMonitoringTest.java
+++ b/tests/carservice_test/src/com/android/car/CarStorageMonitoringTest.java
@@ -37,13 +37,14 @@
 import android.content.pm.PackageManager.NameNotFoundException;
 import android.content.pm.ResolveInfo;
 import android.os.SystemClock;
-import android.support.test.filters.MediumTest;
-import android.support.test.runner.AndroidJUnit4;
 import android.util.JsonWriter;
 import android.util.Log;
 import android.util.Pair;
 import android.util.SparseArray;
 
+import androidx.test.filters.MediumTest;
+import androidx.test.runner.AndroidJUnit4;
+
 import com.android.car.storagemonitoring.LifetimeWriteInfoProvider;
 import com.android.car.storagemonitoring.UidIoStatsProvider;
 import com.android.car.storagemonitoring.WearEstimateRecord;
@@ -371,7 +372,7 @@
             mMockStorageMonitoringInterface.setWriteInfo(wearData.currentLifetimeWriteInfo);
 
             if (wearHistory != null) {
-                File wearHistoryFile = new File(getFakeSystemInterface().getFilesDir(),
+                File wearHistoryFile = new File(getFakeSystemInterface().getSystemCarDir(),
                     CarStorageMonitoringService.WEAR_INFO_FILENAME);
                 try (JsonWriter jsonWriter = new JsonWriter(new FileWriter(wearHistoryFile))) {
                     wearHistory.writeToJson(jsonWriter);
@@ -379,7 +380,7 @@
             }
 
             if (wearData.uptime > 0) {
-                File uptimeFile = new File(getFakeSystemInterface().getFilesDir(),
+                File uptimeFile = new File(getFakeSystemInterface().getSystemCarDir(),
                     CarStorageMonitoringService.UPTIME_TRACKER_FILENAME);
                 try (JsonWriter jsonWriter = new JsonWriter(new FileWriter(uptimeFile))) {
                     jsonWriter.beginObject();
@@ -389,7 +390,7 @@
             }
 
             if (wearData.previousLifetimeWriteInfo.length > 0) {
-                File previousLifetimeFile = new File(getFakeSystemInterface().getFilesDir(),
+                File previousLifetimeFile = new File(getFakeSystemInterface().getSystemCarDir(),
                     CarStorageMonitoringService.LIFETIME_WRITES_FILENAME);
                 try (JsonWriter jsonWriter = new JsonWriter(new FileWriter(previousLifetimeFile))) {
                     jsonWriter.beginObject();
diff --git a/tests/carservice_test/src/com/android/car/CarUxRestrictionsConfigurationXmlParserTest.java b/tests/carservice_test/src/com/android/car/CarUxRestrictionsConfigurationXmlParserTest.java
new file mode 100644
index 0000000..cad210e
--- /dev/null
+++ b/tests/carservice_test/src/com/android/car/CarUxRestrictionsConfigurationXmlParserTest.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright (C) 2018 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.car;
+
+import static android.car.drivingstate.CarDrivingStateEvent.DRIVING_STATE_IDLING;
+import static android.car.drivingstate.CarDrivingStateEvent.DRIVING_STATE_MOVING;
+import static android.car.drivingstate.CarDrivingStateEvent.DRIVING_STATE_PARKED;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import android.car.drivingstate.CarUxRestrictions;
+import android.car.drivingstate.CarUxRestrictionsConfiguration;
+import android.content.Context;
+
+import androidx.test.InstrumentationRegistry;
+import androidx.test.filters.MediumTest;
+import androidx.test.runner.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.IOException;
+
+@RunWith(AndroidJUnit4.class)
+@MediumTest
+public class CarUxRestrictionsConfigurationXmlParserTest {
+    private Context getContext() {
+        return InstrumentationRegistry.getTargetContext();
+    }
+
+    @Test
+    public void testParsingDefaultConfiguration() throws IOException, XmlPullParserException {
+        CarUxRestrictionsConfigurationXmlParser.parse(getContext(), R.xml.car_ux_restrictions_map);
+    }
+
+    @Test
+    public void testParsingParameters() throws IOException, XmlPullParserException {
+        CarUxRestrictionsConfiguration config = CarUxRestrictionsConfigurationXmlParser.parse(
+                getContext(), R.xml.ux_restrictions_only_parameters);
+
+        CarUxRestrictions r = config.getUxRestrictions(DRIVING_STATE_PARKED, 0f);
+        assertEquals(1, r.getMaxContentDepth());
+        assertEquals(1, r.getMaxCumulativeContentItems());
+        assertEquals(1, r.getMaxRestrictedStringLength());
+    }
+
+    @Test
+    public void testParsingNonMovingState() throws IOException, XmlPullParserException {
+        CarUxRestrictionsConfiguration config = CarUxRestrictionsConfigurationXmlParser.parse(
+                getContext(), R.xml.ux_restrictions_non_moving_state);
+
+        CarUxRestrictions parked = config.getUxRestrictions(DRIVING_STATE_PARKED, 0f);
+        assertFalse(parked.isRequiresDistractionOptimization());
+
+        CarUxRestrictions idling = config.getUxRestrictions(DRIVING_STATE_IDLING, 0f);
+        assertTrue(idling.isRequiresDistractionOptimization());
+        assertEquals(CarUxRestrictions.UX_RESTRICTIONS_NO_VIDEO, idling.getActiveRestrictions());
+    }
+
+    @Test
+    public void testParsingMovingState_NoSpeedRange() throws IOException, XmlPullParserException {
+        CarUxRestrictionsConfiguration config = CarUxRestrictionsConfigurationXmlParser.parse(
+                getContext(), R.xml.ux_restrictions_moving_state_no_speed_range);
+
+        CarUxRestrictions r = config.getUxRestrictions(DRIVING_STATE_MOVING, 1f);
+        assertTrue(r.isRequiresDistractionOptimization());
+        assertEquals(CarUxRestrictions.UX_RESTRICTIONS_NO_VIDEO, r.getActiveRestrictions());
+    }
+
+    @Test
+    public void testParsingMovingState_SingleSpeedRange()
+            throws IOException, XmlPullParserException {
+        CarUxRestrictionsConfiguration config = CarUxRestrictionsConfigurationXmlParser.parse(
+                getContext(), R.xml.ux_restrictions_moving_state_single_speed_range);
+
+        CarUxRestrictions r = config.getUxRestrictions(DRIVING_STATE_MOVING, 1f);
+        assertTrue(r.isRequiresDistractionOptimization());
+        assertEquals(CarUxRestrictions.UX_RESTRICTIONS_NO_VIDEO, r.getActiveRestrictions());
+    }
+
+    @Test
+    public void testParsingMovingState_MultiSpeedRange()
+            throws IOException, XmlPullParserException {
+        CarUxRestrictionsConfiguration config = CarUxRestrictionsConfigurationXmlParser.parse(
+                getContext(), R.xml.ux_restrictions_moving_state_single_speed_range);
+
+        CarUxRestrictions slow = config.getUxRestrictions(DRIVING_STATE_MOVING, 1f);
+        assertTrue(slow.isRequiresDistractionOptimization());
+        assertEquals(CarUxRestrictions.UX_RESTRICTIONS_NO_VIDEO, slow.getActiveRestrictions());
+
+        CarUxRestrictions fast = config.getUxRestrictions(DRIVING_STATE_MOVING, 6f);
+        assertTrue(fast.isRequiresDistractionOptimization());
+        assertEquals(CarUxRestrictions.UX_RESTRICTIONS_NO_VIDEO, fast.getActiveRestrictions());
+    }
+}
diff --git a/tests/carservice_test/src/com/android/car/CarUxRestrictionsManagerServiceTest.java b/tests/carservice_test/src/com/android/car/CarUxRestrictionsManagerServiceTest.java
new file mode 100644
index 0000000..de1c16e
--- /dev/null
+++ b/tests/carservice_test/src/com/android/car/CarUxRestrictionsManagerServiceTest.java
@@ -0,0 +1,236 @@
+/*
+ * Copyright (C) 2018 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.car;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.anyString;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.reset;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.car.drivingstate.CarDrivingStateEvent;
+import android.car.drivingstate.CarUxRestrictionsConfiguration;
+import android.car.hardware.CarPropertyValue;
+import android.car.userlib.CarUserManagerHelper;
+import android.content.Context;
+import android.content.res.Resources;
+import android.hardware.automotive.vehicle.V2_0.VehicleProperty;
+import android.util.JsonReader;
+import android.util.JsonWriter;
+
+import androidx.test.InstrumentationRegistry;
+import androidx.test.filters.MediumTest;
+import androidx.test.runner.AndroidJUnit4;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+
+@RunWith(AndroidJUnit4.class)
+@MediumTest
+public class CarUxRestrictionsManagerServiceTest {
+    private CarUxRestrictionsManagerService mService;
+
+    @Mock
+    private CarDrivingStateService mMockDrivingStateService;
+    @Mock
+    private CarPropertyService mMockCarPropertyService;
+    @Mock
+    private CarUserManagerHelper mMockCarUserManagerHelper;
+
+    private Context mSpyContext;
+
+    @Before
+    public void setUp() throws Exception {
+        MockitoAnnotations.initMocks(this);
+        mSpyContext = spy(InstrumentationRegistry.getTargetContext());
+
+        setUpMockParkedState();
+
+        mService = new CarUxRestrictionsManagerService(mSpyContext,
+                mMockDrivingStateService, mMockCarPropertyService, mMockCarUserManagerHelper);
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        mService = null;
+    }
+
+    @Test
+    public void testSaveConfig_WriteStagedFile() throws Exception {
+        // Reset spy context because service tries to access production config
+        // during construction (due to calling loadConfig()).
+        reset(mSpyContext);
+
+        File staged = setupMockFile(CarUxRestrictionsManagerService.CONFIG_FILENAME_STAGED, null);
+        CarUxRestrictionsConfiguration config = createEmptyConfig();
+
+        assertTrue(mService.saveUxRestrictionsConfigurationForNextBoot(config));
+        assertTrue(readFile(staged).equals(config));
+        // Verify prod config file was not touched.
+        verify(mSpyContext, never()).getFileStreamPath(
+                CarUxRestrictionsManagerService.CONFIG_FILENAME_PRODUCTION);
+    }
+
+    @Test
+    public void testSaveConfig_ReturnFalseOnException() throws Exception {
+        File tempFile = File.createTempFile("uxr_test", null);
+        doReturn(tempFile).when(mSpyContext).getFileStreamPath(anyString());
+
+        CarUxRestrictionsConfiguration spyConfig = spy(createEmptyConfig());
+        doThrow(new IOException()).when(spyConfig).writeJson(any(JsonWriter.class));
+
+        assertFalse(mService.saveUxRestrictionsConfigurationForNextBoot(spyConfig));
+    }
+
+    @Test
+    public void testSaveConfig_DoesNotAffectCurrentConfig() throws Exception {
+        File tempFile = File.createTempFile("uxr_test", null);
+        doReturn(tempFile).when(mSpyContext).getFileStreamPath(anyString());
+        CarUxRestrictionsConfiguration spyConfig = spy(createEmptyConfig());
+
+        CarUxRestrictionsConfiguration currentConfig = mService.getConfig();
+        assertTrue(mService.saveUxRestrictionsConfigurationForNextBoot(spyConfig));
+
+        verify(spyConfig).writeJson(any(JsonWriter.class));
+        // Verify current config is untouched by address comparison.
+        assertTrue(mService.getConfig() == currentConfig);
+    }
+
+    @Test
+    public void testLoadConfig_UseDefaultConfigWhenNoSavedConfigFileNoXml() {
+        // Prevent R.xml.car_ux_restrictions_map being returned.
+        Resources spyResources = spy(mSpyContext.getResources());
+        doReturn(spyResources).when(mSpyContext).getResources();
+        doReturn(null).when(spyResources).getXml(anyInt());
+
+        assertTrue(mService.loadConfig().equals(mService.createDefaultConfig()));
+    }
+
+    @Test
+    public void testLoadConfig_UseXml() throws IOException, XmlPullParserException {
+        CarUxRestrictionsConfiguration expected = CarUxRestrictionsConfigurationXmlParser.parse(
+                mSpyContext, R.xml.car_ux_restrictions_map);
+
+        CarUxRestrictionsConfiguration actual = mService.loadConfig();
+
+        assertTrue(actual.equals(expected));
+    }
+
+    @Test
+    public void testLoadConfig_UseProdConfig() throws IOException {
+        CarUxRestrictionsConfiguration expected = createEmptyConfig();
+        setupMockFile(CarUxRestrictionsManagerService.CONFIG_FILENAME_PRODUCTION, expected);
+
+        CarUxRestrictionsConfiguration actual = mService.loadConfig();
+
+        assertTrue(actual.equals(expected));
+    }
+
+    @Test
+    public void testLoadConfig_PromoteStagedFileWhenParked() throws Exception {
+        CarUxRestrictionsConfiguration expected = createEmptyConfig();
+        // Staged file contains actual config. Ignore prod since it should be overwritten by staged.
+        File staged = setupMockFile(CarUxRestrictionsManagerService.CONFIG_FILENAME_STAGED,
+                expected);
+        // Set up temp file for prod to avoid polluting other tests.
+        setupMockFile(CarUxRestrictionsManagerService.CONFIG_FILENAME_PRODUCTION, null);
+
+        CarUxRestrictionsConfiguration actual = mService.loadConfig();
+
+        // Staged file should be moved as production.
+        assertFalse(staged.exists());
+        assertTrue(actual.equals(expected));
+    }
+
+    @Test
+    public void testLoadConfig_NoPromoteStagedFileWhenMoving() throws Exception {
+        CarUxRestrictionsConfiguration expected = createEmptyConfig();
+        File staged = setupMockFile(CarUxRestrictionsManagerService.CONFIG_FILENAME_STAGED, null);
+        // Prod file contains actual config. Ignore staged since it should not be promoted.
+        setupMockFile(CarUxRestrictionsManagerService.CONFIG_FILENAME_PRODUCTION, expected);
+
+        setUpMockDrivingState();
+        CarUxRestrictionsConfiguration actual = mService.loadConfig();
+
+        // Staged file should be untouched.
+        assertTrue(staged.exists());
+        assertTrue(actual.equals(expected));
+    }
+
+    private CarUxRestrictionsConfiguration createEmptyConfig() {
+        return new CarUxRestrictionsConfiguration.Builder().build();
+    }
+
+    private void setUpMockParkedState() {
+        when(mMockDrivingStateService.getCurrentDrivingState()).thenReturn(
+                new CarDrivingStateEvent(CarDrivingStateEvent.DRIVING_STATE_PARKED, 0));
+
+        CarPropertyValue<Float> speed = new CarPropertyValue<>(VehicleProperty.PERF_VEHICLE_SPEED,
+                0, 0f);
+        when(mMockCarPropertyService.getProperty(VehicleProperty.PERF_VEHICLE_SPEED, 0))
+                .thenReturn(speed);
+    }
+
+    private void setUpMockDrivingState() {
+        when(mMockDrivingStateService.getCurrentDrivingState()).thenReturn(
+                new CarDrivingStateEvent(CarDrivingStateEvent.DRIVING_STATE_MOVING, 0));
+
+        CarPropertyValue<Float> speed = new CarPropertyValue<>(VehicleProperty.PERF_VEHICLE_SPEED,
+                0, 30f);
+        when(mMockCarPropertyService.getProperty(VehicleProperty.PERF_VEHICLE_SPEED, 0))
+                .thenReturn(speed);
+    }
+
+    private File setupMockFile(String filename, CarUxRestrictionsConfiguration config)
+            throws IOException {
+        File f = File.createTempFile("uxr_test", null);
+        doReturn(f).when(mSpyContext).getFileStreamPath(filename);
+
+        if (config != null) {
+            try (JsonWriter writer = new JsonWriter(
+                    new OutputStreamWriter(new FileOutputStream(f), "UTF-8"))) {
+                config.writeJson(writer);
+            }
+        }
+        return f;
+    }
+
+    private CarUxRestrictionsConfiguration readFile(File file) throws Exception {
+        try (JsonReader reader = new JsonReader(
+                new InputStreamReader(new FileInputStream(file), "UTF-8"))) {
+            return CarUxRestrictionsConfiguration.readJson(reader);
+        }
+    }
+}
diff --git a/tests/carservice_test/src/com/android/car/CarVendorExtensionManagerTest.java b/tests/carservice_test/src/com/android/car/CarVendorExtensionManagerTest.java
index 1f6bb10..97d5003 100644
--- a/tests/carservice_test/src/com/android/car/CarVendorExtensionManagerTest.java
+++ b/tests/carservice_test/src/com/android/car/CarVendorExtensionManagerTest.java
@@ -32,11 +32,12 @@
 import android.hardware.automotive.vehicle.V2_0.VehiclePropertyGroup;
 import android.hardware.automotive.vehicle.V2_0.VehiclePropertyType;
 import android.os.SystemClock;
-import android.support.test.filters.MediumTest;
-import android.support.test.runner.AndroidJUnit4;
 import android.util.Log;
 import android.util.SparseArray;
 
+import androidx.test.filters.MediumTest;
+import androidx.test.runner.AndroidJUnit4;
+
 import com.android.car.vehiclehal.test.MockedVehicleHal;
 import com.android.car.vehiclehal.test.VehiclePropConfigBuilder;
 
diff --git a/tests/carservice_test/src/com/android/car/FastPairProviderTest.java b/tests/carservice_test/src/com/android/car/FastPairProviderTest.java
index 02c4cf1..6aee11d 100644
--- a/tests/carservice_test/src/com/android/car/FastPairProviderTest.java
+++ b/tests/carservice_test/src/com/android/car/FastPairProviderTest.java
@@ -28,8 +28,9 @@
 import android.content.Context;
 import android.content.res.Resources;
 import android.os.ParcelUuid;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
+
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
 
 import org.junit.Assert;
 import org.junit.Before;
diff --git a/tests/carservice_test/src/com/android/car/MockedCarTestBase.java b/tests/carservice_test/src/com/android/car/MockedCarTestBase.java
index b27adfc..b99253f 100644
--- a/tests/carservice_test/src/com/android/car/MockedCarTestBase.java
+++ b/tests/carservice_test/src/com/android/car/MockedCarTestBase.java
@@ -34,11 +34,12 @@
 import android.os.Handler;
 import android.os.IBinder;
 import android.os.Looper;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.annotation.UiThreadTest;
 import android.util.Log;
 import android.util.SparseArray;
 
+import androidx.test.InstrumentationRegistry;
+import androidx.test.annotation.UiThreadTest;
+
 import com.android.car.pm.CarPackageManagerService;
 import com.android.car.systeminterface.DisplayInterface;
 import com.android.car.systeminterface.IOInterface;
@@ -306,7 +307,7 @@
         private TemporaryDirectory mFilesDir = null;
 
         @Override
-        public File getFilesDir() {
+        public File getSystemCarDir() {
             if (mFilesDir == null) {
                 try {
                     mFilesDir = new TemporaryDirectory(TAG);
diff --git a/tests/carservice_test/src/com/android/car/SystemActivityMonitoringServiceTest.java b/tests/carservice_test/src/com/android/car/SystemActivityMonitoringServiceTest.java
index f8a4f0a..906192a 100644
--- a/tests/carservice_test/src/com/android/car/SystemActivityMonitoringServiceTest.java
+++ b/tests/carservice_test/src/com/android/car/SystemActivityMonitoringServiceTest.java
@@ -16,7 +16,6 @@
 package com.android.car;
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotEquals;
 import static org.junit.Assert.assertTrue;
 
 import android.app.Activity;
@@ -24,9 +23,10 @@
 import android.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.filters.MediumTest;
-import android.support.test.runner.AndroidJUnit4;
+
+import androidx.test.InstrumentationRegistry;
+import androidx.test.filters.MediumTest;
+import androidx.test.runner.AndroidJUnit4;
 
 import com.android.car.SystemActivityMonitoringService.TopTaskInfoContainer;
 
@@ -37,11 +37,13 @@
 
 import java.util.concurrent.Semaphore;
 import java.util.concurrent.TimeUnit;
+import java.util.function.BooleanSupplier;
 
 @RunWith(AndroidJUnit4.class)
 @MediumTest
 public class SystemActivityMonitoringServiceTest {
     private static final long ACTIVITY_TIME_OUT = 5000;
+    private static final long DEFAULT_TIMEOUT_SECONDS = 2;
 
     private SystemActivityMonitoringService mService;
     private Semaphore mActivityLaunchSemaphore = new Semaphore(0);
@@ -100,17 +102,30 @@
         ComponentName activityThatFinishesImmediately =
                 toComponentName(getTestContext(), ActivityThatFinishesImmediately.class);
         startActivity(getContext(), activityThatFinishesImmediately);
-        assertTrue(mActivityLaunchSemaphore.tryAcquire(2, TimeUnit.SECONDS));
+        waitUntil(() -> topTasksHasComponent(activityThatFinishesImmediately));
+        waitUntil(() -> !topTasksHasComponent(activityThatFinishesImmediately));
+    }
 
-        // We won't know if the stack changes, unless we launch another activity.
-        startActivity(getContext(), toComponentName(getTestContext(), ActivityA.class));
-        assertTrue(mActivityLaunchSemaphore.tryAcquire(2, TimeUnit.SECONDS));
 
-        for (TopTaskInfoContainer topTaskInfoContainer: mService.getTopTasks()) {
-            assertNotEquals(topTaskInfoContainer.topActivity, activityThatFinishesImmediately);
+    private void waitUntil(BooleanSupplier condition) throws Exception {
+        while (!condition.getAsBoolean()) {
+            boolean didAquire =
+                    mActivityLaunchSemaphore.tryAcquire(DEFAULT_TIMEOUT_SECONDS, TimeUnit.SECONDS);
+            if (!didAquire && !condition.getAsBoolean()) {
+                throw new RuntimeException("failed while waiting for condition to become true");
+            }
         }
     }
 
+    private boolean topTasksHasComponent(ComponentName component) {
+        for (TopTaskInfoContainer topTaskInfoContainer: mService.getTopTasks()) {
+            if (topTaskInfoContainer.topActivity.equals(component)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     /** Activity that closes itself after some timeout to clean up the screen. */
     public static class TempActivity extends Activity {
         @Override
diff --git a/tests/carservice_test/src/com/android/car/VmsHalServiceSubscriptionEventTest.java b/tests/carservice_test/src/com/android/car/VmsHalServiceSubscriptionEventTest.java
index 16b0572..ad586ae 100644
--- a/tests/carservice_test/src/com/android/car/VmsHalServiceSubscriptionEventTest.java
+++ b/tests/carservice_test/src/com/android/car/VmsHalServiceSubscriptionEventTest.java
@@ -30,8 +30,9 @@
 import android.hardware.automotive.vehicle.V2_0.VmsMessageType;
 import android.hardware.automotive.vehicle.V2_0.VmsMessageWithLayerIntegerValuesIndex;
 import android.hardware.automotive.vehicle.V2_0.VmsSubscriptionsStateIntegerValuesIndex;
-import android.support.test.filters.MediumTest;
-import android.support.test.runner.AndroidJUnit4;
+
+import androidx.test.filters.MediumTest;
+import androidx.test.runner.AndroidJUnit4;
 
 import com.android.car.vehiclehal.VehiclePropValueBuilder;
 import com.android.car.vehiclehal.test.MockedVehicleHal;
diff --git a/tests/carservice_test/src/com/android/car/VmsOperationRecorderTest.java b/tests/carservice_test/src/com/android/car/VmsOperationRecorderTest.java
index c05ec99..2c41f32 100644
--- a/tests/carservice_test/src/com/android/car/VmsOperationRecorderTest.java
+++ b/tests/carservice_test/src/com/android/car/VmsOperationRecorderTest.java
@@ -22,10 +22,11 @@
 import android.car.vms.VmsLayerDependency;
 import android.car.vms.VmsLayersOffering;
 import android.car.vms.VmsOperationRecorder;
-import android.support.test.filters.MediumTest;
-import android.support.test.runner.AndroidJUnit4;
 import android.util.Log;
 
+import androidx.test.filters.MediumTest;
+import androidx.test.runner.AndroidJUnit4;
+
 import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONObject;
diff --git a/tests/carservice_test/src/com/android/car/VmsPublisherClientServiceTest.java b/tests/carservice_test/src/com/android/car/VmsPublisherClientServiceTest.java
index d8cbe7b..2f9d34e 100644
--- a/tests/carservice_test/src/com/android/car/VmsPublisherClientServiceTest.java
+++ b/tests/carservice_test/src/com/android/car/VmsPublisherClientServiceTest.java
@@ -21,6 +21,7 @@
 
 import android.car.VehicleAreaType;
 import android.car.vms.VmsLayer;
+import android.content.Intent;
 import android.hardware.automotive.vehicle.V2_0.VehiclePropValue;
 import android.hardware.automotive.vehicle.V2_0.VehicleProperty;
 import android.hardware.automotive.vehicle.V2_0.VehiclePropertyAccess;
@@ -28,10 +29,12 @@
 import android.hardware.automotive.vehicle.V2_0.VmsBaseMessageIntegerValuesIndex;
 import android.hardware.automotive.vehicle.V2_0.VmsMessageType;
 import android.hardware.automotive.vehicle.V2_0.VmsMessageWithLayerIntegerValuesIndex;
-import android.support.test.filters.MediumTest;
-import android.support.test.runner.AndroidJUnit4;
+import android.os.UserHandle;
 import android.util.Log;
 
+import androidx.test.filters.MediumTest;
+import androidx.test.runner.AndroidJUnit4;
+
 import com.android.car.vehiclehal.VehiclePropValueBuilder;
 import com.android.car.vehiclehal.test.MockedVehicleHal;
 import com.android.car.vehiclehal.test.MockedVehicleHal.VehicleHalPropertyHandler;
@@ -73,8 +76,10 @@
 
     @Override
     protected synchronized void configureResourceOverrides(MockResources resources) {
-        resources.overrideResource(R.array.vmsPublisherClients,
+        resources.overrideResource(R.array.vmsPublisherSystemClients,
             new String[]{ getFlattenComponent(SimpleVmsPublisherClientService.class) });
+        resources.overrideResource(R.array.vmsPublisherUserClients,
+                new String[]{ getFlattenComponent(SimpleVmsPublisherClientService.class) });
     }
 
     private VehiclePropValue getHalSubscriptionRequest() {
@@ -95,6 +100,16 @@
         mHalHandlerSemaphore = new Semaphore(0);
         super.setUp();
 
+        // Trigger VmsClientManager to bind to the SimpleVmsPublisherClientService
+        if (getContext().getUserId() == UserHandle.USER_SYSTEM) {
+            // If test is running as U0, trigger system client binding
+            getContext().sendBroadcast(new Intent(Intent.ACTION_LOCKED_BOOT_COMPLETED));
+        } else {
+            // If test is running as U10+, trigger user client binding
+            getContext().sendBroadcastAsUser(new Intent(Intent.ACTION_USER_SWITCHED),
+                    UserHandle.ALL);
+        }
+
         // Inject a subscribe event which simulates the HAL is subscribed to the Mock Publisher.
         MockedVehicleHal mHal = getMockedVehicleHal();
         mHal.injectEvent(getHalSubscriptionRequest());
@@ -163,4 +178,4 @@
             return mValue;
         }
     }
-}
\ No newline at end of file
+}
diff --git a/tests/carservice_test/src/com/android/car/VmsPublisherSubscriberTest.java b/tests/carservice_test/src/com/android/car/VmsPublisherSubscriberTest.java
index 1ef35f7..631d85a 100644
--- a/tests/carservice_test/src/com/android/car/VmsPublisherSubscriberTest.java
+++ b/tests/carservice_test/src/com/android/car/VmsPublisherSubscriberTest.java
@@ -25,11 +25,15 @@
 import android.car.vms.VmsAvailableLayers;
 import android.car.vms.VmsLayer;
 import android.car.vms.VmsSubscriberManager;
+import android.content.Intent;
 import android.hardware.automotive.vehicle.V2_0.VehicleProperty;
 import android.hardware.automotive.vehicle.V2_0.VehiclePropertyAccess;
 import android.hardware.automotive.vehicle.V2_0.VehiclePropertyChangeMode;
-import android.support.test.filters.MediumTest;
-import android.support.test.runner.AndroidJUnit4;
+import android.os.UserHandle;
+
+import androidx.test.filters.FlakyTest;
+import androidx.test.filters.MediumTest;
+import androidx.test.runner.AndroidJUnit4;
 
 import com.android.car.vehiclehal.test.MockedVehicleHal;
 
@@ -47,6 +51,7 @@
 
 @RunWith(AndroidJUnit4.class)
 @MediumTest
+@FlakyTest // TODO(b/116333782): Remove the flag when issue fixed
 public class VmsPublisherSubscriberTest extends MockedCarTestBase {
     private static final int LAYER_ID = 88;
     private static final int LAYER_VERSION = 19;
@@ -105,7 +110,11 @@
 
     @Override
     protected synchronized void configureResourceOverrides(MockResources resources) {
-        resources.overrideResource(com.android.car.R.array.vmsPublisherClients,
+        // Override publisher client endpoint configurations
+        // Both lists must be set, but only one will be used (see setUp)
+        resources.overrideResource(com.android.car.R.array.vmsPublisherSystemClients,
+                new String[]{getFlattenComponent(VmsPublisherClientMockService.class)});
+        resources.overrideResource(com.android.car.R.array.vmsPublisherUserClients,
                 new String[]{getFlattenComponent(VmsPublisherClientMockService.class)});
     }
 
@@ -133,6 +142,16 @@
         mClientCallback = new TestClientCallback();
         mVmsSubscriberManager.setVmsSubscriberClientCallback(mExecutor, mClientCallback);
         mVmsSubscriberManager.subscribe(LAYER);
+
+        // Trigger VmsClientManager to bind to the VmsPublisherClientMockService
+        if (getContext().getUserId() == UserHandle.USER_SYSTEM) {
+            // If test is running as U0, trigger system client binding
+            getContext().sendBroadcast(new Intent(Intent.ACTION_LOCKED_BOOT_COMPLETED));
+        } else {
+            // If test is running as U10+, trigger user client binding
+            getContext().sendBroadcastAsUser(new Intent(Intent.ACTION_USER_SWITCHED),
+                    UserHandle.ALL);
+        }
     }
 
     public void postSetup() throws Exception {
@@ -148,6 +167,7 @@
     @Test
     public void testPublisherToSubscriber() throws Exception {
         postSetup();
+        assertTrue(mSubscriberSemaphore.tryAcquire(2L, TimeUnit.SECONDS));
         assertEquals(LAYER, mClientCallback.getLayer());
         assertTrue(Arrays.equals(PAYLOAD, mClientCallback.getPayload()));
     }
diff --git a/tests/carservice_test/src/com/android/car/VmsSubscriberManagerTest.java b/tests/carservice_test/src/com/android/car/VmsSubscriberManagerTest.java
index 63b0e62..8bb4f27 100644
--- a/tests/carservice_test/src/com/android/car/VmsSubscriberManagerTest.java
+++ b/tests/carservice_test/src/com/android/car/VmsSubscriberManagerTest.java
@@ -34,10 +34,11 @@
 import android.hardware.automotive.vehicle.V2_0.VmsAvailabilityStateIntegerValuesIndex;
 import android.hardware.automotive.vehicle.V2_0.VmsMessageType;
 import android.os.SystemClock;
-import android.support.test.filters.MediumTest;
-import android.support.test.runner.AndroidJUnit4;
 import android.util.Log;
 
+import androidx.test.filters.MediumTest;
+import androidx.test.runner.AndroidJUnit4;
+
 import com.android.car.vehiclehal.VehiclePropValueBuilder;
 import com.android.car.vehiclehal.test.MockedVehicleHal.VehicleHalPropertyHandler;
 
diff --git a/tests/carservice_test/src/com/android/car/garagemode/ControllerTest.java b/tests/carservice_test/src/com/android/car/garagemode/ControllerTest.java
index 447cc2c..cf184c1 100644
--- a/tests/carservice_test/src/com/android/car/garagemode/ControllerTest.java
+++ b/tests/carservice_test/src/com/android/car/garagemode/ControllerTest.java
@@ -28,15 +28,15 @@
 import static org.mockito.Mockito.verify;
 
 import android.car.Car;
-import android.car.CarNotConnectedException;
 import android.car.hardware.power.CarPowerManager;
 import android.car.hardware.power.CarPowerManager.CarPowerStateListener;
 import android.content.Context;
 import android.content.Intent;
 import android.os.Handler;
 import android.os.Looper;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
+
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -124,7 +124,7 @@
     }
 
     @Test
-    public void testWakeupTimeProgression() throws CarNotConnectedException {
+    public void testWakeupTimeProgression() {
         // Doing initial suspend
         startAndAssertGarageModeWithSignal(CarPowerStateListener.SHUTDOWN_PREPARE);
 
diff --git a/tests/carservice_test/src/com/android/car/garagemode/GarageModeServiceTest.java b/tests/carservice_test/src/com/android/car/garagemode/GarageModeServiceTest.java
index b67c50d..91059fc 100644
--- a/tests/carservice_test/src/com/android/car/garagemode/GarageModeServiceTest.java
+++ b/tests/carservice_test/src/com/android/car/garagemode/GarageModeServiceTest.java
@@ -23,8 +23,9 @@
 
 import android.content.ContentResolver;
 import android.content.Context;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
+
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
 
 import org.junit.Before;
 import org.junit.Test;
diff --git a/tests/carservice_test/src/com/android/car/garagemode/WakeupPolicyTest.java b/tests/carservice_test/src/com/android/car/garagemode/WakeupPolicyTest.java
index 0a36754..921434b 100644
--- a/tests/carservice_test/src/com/android/car/garagemode/WakeupPolicyTest.java
+++ b/tests/carservice_test/src/com/android/car/garagemode/WakeupPolicyTest.java
@@ -19,9 +19,10 @@
 import static com.google.common.truth.Truth.assertThat;
 
 import android.content.Context;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
+
+import androidx.test.InstrumentationRegistry;
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
 
 import com.android.car.R;
 
diff --git a/tests/carservice_unit_test/Android.mk b/tests/carservice_unit_test/Android.mk
index b444e05..ccc97b5 100644
--- a/tests/carservice_unit_test/Android.mk
+++ b/tests/carservice_unit_test/Android.mk
@@ -42,7 +42,8 @@
 
 LOCAL_STATIC_JAVA_LIBRARIES := \
     junit \
-    android-support-test \
+    androidx.test.core \
+    androidx.test.rules \
     mockito-target-minus-junit4 \
     com.android.car.test.utils \
     truth-prebuilt
diff --git a/tests/carservice_unit_test/AndroidManifest.xml b/tests/carservice_unit_test/AndroidManifest.xml
index 0f67275..1a9a3cc 100644
--- a/tests/carservice_unit_test/AndroidManifest.xml
+++ b/tests/carservice_unit_test/AndroidManifest.xml
@@ -18,7 +18,7 @@
         xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
         package="com.android.car.carservice_unittest"
         android:sharedUserId="android.uid.system" >
-    <instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
+    <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
             android:targetPackage="com.android.car"
             android:label="Unit Tests for Car APIs"/>
 
diff --git a/tests/carservice_unit_test/src/android/car/userlib/CarUserManagerHelperTest.java b/tests/carservice_unit_test/src/android/car/userlib/CarUserManagerHelperTest.java
new file mode 100644
index 0000000..19ae7f4
--- /dev/null
+++ b/tests/carservice_unit_test/src/android/car/userlib/CarUserManagerHelperTest.java
@@ -0,0 +1,937 @@
+/*
+ * Copyright (C) 2018 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 android.car.userlib;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+
+import android.app.ActivityManager;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.pm.UserInfo;
+import android.graphics.Bitmap;
+import android.graphics.drawable.Drawable;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.SystemProperties;
+import android.os.UserHandle;
+import android.os.UserManager;
+import android.provider.Settings;
+import android.sysprop.CarProperties;
+
+import androidx.test.InstrumentationRegistry;
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.MockitoAnnotations;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * This class contains unit tests for the {@link CarUserManagerHelper}.
+ * It tests that {@link CarUserManagerHelper} does the right thing for user management flows.
+ *
+ * The following mocks are used:
+ * 1. {@link Context} provides system services and resources.
+ * 2. {@link UserManager} provides dummy users and user info.
+ * 3. {@link ActivityManager} to verify user switch is invoked.
+ * 4. {@link CarUserManagerHelper.OnUsersUpdateListener} registers a listener for user updates.
+ */
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+public class CarUserManagerHelperTest {
+    @Mock
+    private Context mContext;
+    @Mock
+    private UserManager mUserManager;
+    @Mock
+    private ActivityManager mActivityManager;
+    @Mock
+    private CarUserManagerHelper.OnUsersUpdateListener mTestListener;
+
+    private static final String GUEST_USER_NAME = "testGuest";
+    private static final String TEST_USER_NAME = "testUser";
+    private static final String DEFAULT_ADMIN_NAME = "defaultAdminName";
+
+    private CarUserManagerHelper mCarUserManagerHelper;
+    private UserInfo mCurrentProcessUser;
+    private UserInfo mSystemUser;
+    private int mForegroundUserId;
+    private UserInfo mForegroundUser;
+
+    @Before
+    public void setUpMocksAndVariables() throws Exception {
+        MockitoAnnotations.initMocks(this);
+        doReturn(mUserManager).when(mContext).getSystemService(Context.USER_SERVICE);
+        doReturn(mActivityManager).when(mContext).getSystemService(Context.ACTIVITY_SERVICE);
+        doReturn(InstrumentationRegistry.getTargetContext().getResources())
+                .when(mContext).getResources();
+        doReturn(InstrumentationRegistry.getTargetContext().getContentResolver())
+                .when(mContext).getContentResolver();
+        doReturn(mContext).when(mContext).getApplicationContext();
+        mCarUserManagerHelper = new CarUserManagerHelper(mContext);
+        mCarUserManagerHelper.setDefaultAdminName(DEFAULT_ADMIN_NAME);
+
+        mCurrentProcessUser = createUserInfoForId(UserHandle.myUserId());
+        mSystemUser = createUserInfoForId(UserHandle.USER_SYSTEM);
+        doReturn(mCurrentProcessUser).when(mUserManager).getUserInfo(UserHandle.myUserId());
+
+        // Get the ID of the foreground user running this test.
+        // We cannot mock the foreground user since getCurrentUser is static.
+        // We cannot rely on foreground_id != system_id, they could be the same user.
+        mForegroundUserId = ActivityManager.getCurrentUser();
+        mForegroundUser = createUserInfoForId(mForegroundUserId);
+
+        // Restore the non-headless state before every test. Individual tests can set the property
+        // to true to test the headless system user scenario.
+        CarProperties.headless_system_user(false);
+    }
+
+    @Test
+    public void checkIsSystemUser() {
+        UserInfo testInfo = new UserInfo();
+
+        testInfo.id = UserHandle.USER_SYSTEM;
+        assertThat(mCarUserManagerHelper.isSystemUser(testInfo)).isTrue();
+
+        testInfo.id = UserHandle.USER_SYSTEM + 2; // Make it different than system id.
+        assertThat(mCarUserManagerHelper.isSystemUser(testInfo)).isFalse();
+    }
+
+    // System user will not be returned when calling get all users.
+    @Test
+    public void testHeadlessUser0GetAllUsers_NotReturnSystemUser() {
+        CarProperties.headless_system_user(true);
+        UserInfo otherUser1 = createUserInfoForId(10);
+        UserInfo otherUser2 = createUserInfoForId(11);
+        UserInfo otherUser3 = createUserInfoForId(12);
+
+        mockGetUsers(mSystemUser, otherUser1, otherUser2, otherUser3);
+
+        assertThat(mCarUserManagerHelper.getAllUsers())
+                .containsExactly(otherUser1, otherUser2, otherUser3);
+    }
+
+    @Test
+    public void testGetAllSwitchableUsers() {
+        // Create two non-foreground users.
+        UserInfo user1 = createUserInfoForId(mForegroundUserId + 1);
+        UserInfo user2 = createUserInfoForId(mForegroundUserId + 2);
+
+        mockGetUsers(mForegroundUser, user1, user2);
+
+        // Should return all non-foreground users.
+        assertThat(mCarUserManagerHelper.getAllSwitchableUsers()).containsExactly(user1, user2);
+    }
+
+    @Test
+    public void testGetAllPersistentUsers() {
+        // Create two non-ephemeral users.
+        UserInfo user1 = createUserInfoForId(mForegroundUserId);
+        UserInfo user2 = createUserInfoForId(mForegroundUserId + 1);
+        // Create two ephemeral users.
+        UserInfo user3 = new UserInfo(
+              /* id= */mForegroundUserId + 2, /* name = */ "user3", UserInfo.FLAG_EPHEMERAL);
+        UserInfo user4 = new UserInfo(
+              /* id= */mForegroundUserId + 3, /* name = */ "user4", UserInfo.FLAG_EPHEMERAL);
+
+        mockGetUsers(user1, user2, user3, user4);
+
+        // Should return all non-ephemeral users.
+        assertThat(mCarUserManagerHelper.getAllPersistentUsers()).containsExactly(user1, user2);
+    }
+
+    @Test
+    public void testGetAllAdminUsers() {
+        // Create two admin, and two non-admin users.
+        UserInfo user1 = new UserInfo(/* id= */ 10, /* name = */ "user10", UserInfo.FLAG_ADMIN);
+        UserInfo user2 = createUserInfoForId(11);
+        UserInfo user3 = createUserInfoForId(12);
+        UserInfo user4 = new UserInfo(/* id= */ 13, /* name = */ "user13", UserInfo.FLAG_ADMIN);
+
+        mockGetUsers(user1, user2, user3, user4);
+
+        // Should return only admin users.
+        assertThat(mCarUserManagerHelper.getAllAdminUsers()).containsExactly(user1, user4);
+    }
+
+    @Test
+    public void testGetAllUsersExceptGuests() {
+        // Create two users and a guest user.
+        UserInfo user1 = createUserInfoForId(10);
+        UserInfo user2 = createUserInfoForId(12);
+        UserInfo user3 = new UserInfo(/* id= */ 13, /* name = */ "user13", UserInfo.FLAG_GUEST);
+
+        mockGetUsers(user1, user2, user3);
+
+        // Should not return guests.
+        assertThat(mCarUserManagerHelper.getAllUsersExceptGuests())
+                .containsExactly(user1, user2);
+    }
+
+    @Test
+    public void testUserCanBeRemoved() {
+        UserInfo testInfo = new UserInfo();
+
+        // System user cannot be removed.
+        testInfo.id = UserHandle.USER_SYSTEM;
+        assertThat(mCarUserManagerHelper.canUserBeRemoved(testInfo)).isFalse();
+
+        testInfo.id = UserHandle.USER_SYSTEM + 2; // Make it different than system id.
+        assertThat(mCarUserManagerHelper.canUserBeRemoved(testInfo)).isTrue();
+    }
+
+    @Test
+    public void testCurrentProcessCanAddUsers() {
+        doReturn(false).when(mUserManager)
+            .hasUserRestriction(UserManager.DISALLOW_ADD_USER);
+        assertThat(mCarUserManagerHelper.canCurrentProcessAddUsers()).isTrue();
+
+        doReturn(true).when(mUserManager)
+            .hasUserRestriction(UserManager.DISALLOW_ADD_USER);
+        assertThat(mCarUserManagerHelper.canCurrentProcessAddUsers()).isFalse();
+    }
+
+    @Test
+    public void testCurrentProcessCanRemoveUsers() {
+        doReturn(false).when(mUserManager)
+            .hasUserRestriction(UserManager.DISALLOW_REMOVE_USER);
+        assertThat(mCarUserManagerHelper.canCurrentProcessRemoveUsers()).isTrue();
+
+        doReturn(true).when(mUserManager)
+            .hasUserRestriction(UserManager.DISALLOW_REMOVE_USER);
+        assertThat(mCarUserManagerHelper.canCurrentProcessRemoveUsers()).isFalse();
+    }
+
+    @Test
+    public void testCurrentProcessCanSwitchUsers() {
+        doReturn(false).when(mUserManager)
+            .hasUserRestriction(UserManager.DISALLOW_USER_SWITCH);
+        assertThat(mCarUserManagerHelper.canCurrentProcessSwitchUsers()).isTrue();
+
+        doReturn(true).when(mUserManager)
+            .hasUserRestriction(UserManager.DISALLOW_USER_SWITCH);
+        assertThat(mCarUserManagerHelper.canCurrentProcessSwitchUsers()).isFalse();
+    }
+
+    @Test
+    public void testCurrentGuestProcessCannotModifyAccounts() {
+        assertThat(mCarUserManagerHelper.canCurrentProcessModifyAccounts()).isTrue();
+
+        doReturn(true).when(mUserManager).isGuestUser();
+
+        assertThat(mCarUserManagerHelper.canCurrentProcessModifyAccounts()).isFalse();
+    }
+
+    @Test
+    public void testCurrentDemoProcessCannotModifyAccounts() {
+        assertThat(mCarUserManagerHelper.canCurrentProcessModifyAccounts()).isTrue();
+
+        doReturn(true).when(mUserManager).isDemoUser();
+
+        assertThat(mCarUserManagerHelper.canCurrentProcessModifyAccounts()).isFalse();
+    }
+
+    @Test
+    public void testCurrentDisallowModifyAccountsProcessIsEnforced() {
+        assertThat(mCarUserManagerHelper.canCurrentProcessModifyAccounts()).isTrue();
+
+        doReturn(true).when(mUserManager)
+                .hasUserRestriction(UserManager.DISALLOW_MODIFY_ACCOUNTS);
+
+        assertThat(mCarUserManagerHelper.canCurrentProcessModifyAccounts()).isFalse();
+    }
+
+    @Test
+    public void testGetMaxSupportedUsers() {
+        SystemProperties.set("fw.max_users", "11");
+
+        assertThat(mCarUserManagerHelper.getMaxSupportedUsers()).isEqualTo(11);
+
+        // In headless user 0 model, we want to exclude the system user.
+        CarProperties.headless_system_user(true);
+        assertThat(mCarUserManagerHelper.getMaxSupportedUsers()).isEqualTo(10);
+    }
+
+    @Test
+    public void testGetMaxSupportedRealUsers() {
+        SystemProperties.set("fw.max_users", "7");
+
+        // Create three managed profiles, and two normal users.
+        UserInfo user1 = createUserInfoForId(10);
+        UserInfo user2 =
+                new UserInfo(/* id= */ 11, /* name = */ "user11", UserInfo.FLAG_MANAGED_PROFILE);
+        UserInfo user3 =
+                new UserInfo(/* id= */ 12, /* name = */ "user12", UserInfo.FLAG_MANAGED_PROFILE);
+        UserInfo user4 = createUserInfoForId(13);
+        UserInfo user5 =
+                new UserInfo(/* id= */ 14, /* name = */ "user14", UserInfo.FLAG_MANAGED_PROFILE);
+
+        mockGetUsers(user1, user2, user3, user4, user5);
+
+        // Max users - # managed profiles.
+        assertThat(mCarUserManagerHelper.getMaxSupportedRealUsers()).isEqualTo(4);
+    }
+
+    @Test
+    public void testIsUserLimitReached() {
+        UserInfo user1 = createUserInfoForId(10);
+        UserInfo user2 =
+                new UserInfo(/* id= */ 11, /* name = */ "user11", UserInfo.FLAG_MANAGED_PROFILE);
+        UserInfo user3 =
+                new UserInfo(/* id= */ 12, /* name = */ "user12", UserInfo.FLAG_MANAGED_PROFILE);
+        UserInfo user4 = createUserInfoForId(13);
+
+        mockGetUsers(user1, user2, user3, user4);
+
+        SystemProperties.set("fw.max_users", "5");
+        assertThat(mCarUserManagerHelper.isUserLimitReached()).isFalse();
+
+        SystemProperties.set("fw.max_users", "4");
+        assertThat(mCarUserManagerHelper.isUserLimitReached()).isTrue();
+    }
+
+    @Test
+    public void testHeadlessSystemUser_IsUserLimitReached() {
+        CarProperties.headless_system_user(true);
+        UserInfo user1 = createUserInfoForId(10);
+        UserInfo user2 =
+                new UserInfo(/* id= */ 11, /* name = */ "user11", UserInfo.FLAG_MANAGED_PROFILE);
+        UserInfo user3 =
+                new UserInfo(/* id= */ 12, /* name = */ "user12", UserInfo.FLAG_MANAGED_PROFILE);
+        UserInfo user4 = createUserInfoForId(13);
+
+        mockGetUsers(mSystemUser, user1, user2, user3, user4);
+
+        SystemProperties.set("fw.max_users", "6");
+        assertThat(mCarUserManagerHelper.isUserLimitReached()).isFalse();
+
+        SystemProperties.set("fw.max_users", "5");
+        assertThat(mCarUserManagerHelper.isUserLimitReached()).isTrue();
+    }
+
+    @Test
+    public void testIsUserLimitReachedIgnoresGuests() {
+        SystemProperties.set("fw.max_users", "5");
+
+        UserInfo user1 = createUserInfoForId(10);
+        UserInfo user2 =
+                new UserInfo(/* id= */ 11, /* name = */ "user11", UserInfo.FLAG_MANAGED_PROFILE);
+        UserInfo user3 =
+                new UserInfo(/* id= */ 12, /* name = */ "user12", UserInfo.FLAG_MANAGED_PROFILE);
+        UserInfo user4 = createUserInfoForId(13);
+        UserInfo user5 = new UserInfo(/* id= */ 14, /* name = */ "user14", UserInfo.FLAG_GUEST);
+        UserInfo user6 = createUserInfoForId(15);
+
+        mockGetUsers(user1, user2, user3, user4);
+        assertThat(mCarUserManagerHelper.isUserLimitReached()).isFalse();
+
+        // Add guest user. Verify it doesn't affect the limit.
+        mockGetUsers(user1, user2, user3, user4, user5);
+        assertThat(mCarUserManagerHelper.isUserLimitReached()).isFalse();
+
+        // Add normal user. Limit is reached
+        mockGetUsers(user1, user2, user3, user4, user5, user6);
+        assertThat(mCarUserManagerHelper.isUserLimitReached()).isTrue();
+    }
+
+    @Test
+    public void testCreateNewAdminUserCallsCreateUser() {
+        // Make sure current user is admin, since only admins can create other admins.
+        doReturn(true).when(mUserManager).isAdminUser();
+
+        mCarUserManagerHelper.createNewAdminUser(TEST_USER_NAME);
+        verify(mUserManager).createUser(TEST_USER_NAME, UserInfo.FLAG_ADMIN);
+    }
+
+    @Test
+    public void testCreateNewAdminUserReturnsNullUsers() {
+        // Make sure current user is admin, since only admins can create other admins.
+        doReturn(true).when(mUserManager).isAdminUser();
+
+        doReturn(null).when(mUserManager).createUser(TEST_USER_NAME, UserInfo.FLAG_ADMIN);
+        assertThat(mCarUserManagerHelper.createNewAdminUser(TEST_USER_NAME)).isNull();
+    }
+
+    @Test
+    public void testCreateNewAdminUserReturnsCreatedUser() {
+        // Make sure current user is admin, since only admins can create other admins.
+        doReturn(true).when(mUserManager).isAdminUser();
+
+        UserInfo newUser = new UserInfo();
+        newUser.name = TEST_USER_NAME;
+        doReturn(newUser).when(mUserManager).createUser(TEST_USER_NAME, UserInfo.FLAG_ADMIN);
+        assertThat(mCarUserManagerHelper.createNewAdminUser(TEST_USER_NAME)).isEqualTo(newUser);
+    }
+
+    @Test
+    public void testCreateNewAdminUserWithDefaultUserNameCallsCreateUser() {
+        // Make sure current user is admin, since only admins can create other admins.
+        doReturn(true).when(mUserManager).isAdminUser();
+
+        mCarUserManagerHelper.createNewAdminUser();
+        verify(mUserManager).createUser(DEFAULT_ADMIN_NAME, UserInfo.FLAG_ADMIN);
+    }
+
+    @Test
+    public void testCreateNewAdminUserWithDefaultUserNameReturnsNullUsers() {
+        // Make sure current user is admin, since only admins can create other admins.
+        doReturn(true).when(mUserManager).isAdminUser();
+
+        doReturn(null).when(mUserManager).createUser(DEFAULT_ADMIN_NAME, UserInfo.FLAG_ADMIN);
+        assertThat(mCarUserManagerHelper.createNewAdminUser(DEFAULT_ADMIN_NAME)).isNull();
+    }
+
+    @Test
+    public void testCreateNewAdminUserWithDefaultUserNameReturnsCreatedUser() {
+        // Make sure current user is admin, since only admins can create other admins.
+        doReturn(true).when(mUserManager).isAdminUser();
+
+        UserInfo newUser = new UserInfo();
+        newUser.name = DEFAULT_ADMIN_NAME;
+        doReturn(newUser).when(mUserManager).createUser(DEFAULT_ADMIN_NAME, UserInfo.FLAG_ADMIN);
+        assertThat(mCarUserManagerHelper.createNewAdminUser()).isEqualTo(newUser);
+    }
+
+    @Test
+    public void testAdminsCanCreateAdmins() {
+        String newAdminName = "Test new admin";
+        UserInfo expectedAdmin = new UserInfo();
+        expectedAdmin.name = newAdminName;
+        doReturn(expectedAdmin).when(mUserManager).createUser(newAdminName, UserInfo.FLAG_ADMIN);
+
+        // Admins can create other admins.
+        doReturn(true).when(mUserManager).isAdminUser();
+        UserInfo actualAdmin = mCarUserManagerHelper.createNewAdminUser(newAdminName);
+        assertThat(actualAdmin).isEqualTo(expectedAdmin);
+    }
+
+    @Test
+    public void testNonAdminsCanNotCreateAdmins() {
+        String newAdminName = "Test new admin";
+        UserInfo expectedAdmin = new UserInfo();
+        expectedAdmin.name = newAdminName;
+        doReturn(expectedAdmin).when(mUserManager).createUser(newAdminName, UserInfo.FLAG_ADMIN);
+
+        // Test that non-admins cannot create new admins.
+        doReturn(false).when(mUserManager).isAdminUser(); // Current user non-admin.
+        assertThat(mCarUserManagerHelper.createNewAdminUser(newAdminName)).isNull();
+    }
+
+    @Test
+    public void testSystemUserCanCreateAdmins() {
+        String newAdminName = "Test new admin";
+        UserInfo expectedAdmin = new UserInfo();
+        expectedAdmin.name = newAdminName;
+
+        doReturn(expectedAdmin).when(mUserManager).createUser(newAdminName, UserInfo.FLAG_ADMIN);
+
+        // System user can create admins.
+        doReturn(true).when(mUserManager).isSystemUser();
+        UserInfo actualAdmin = mCarUserManagerHelper.createNewAdminUser(newAdminName);
+        assertThat(actualAdmin).isEqualTo(expectedAdmin);
+    }
+
+    @Test
+    public void testCreateNewNonAdminUser() {
+        // Verify createUser on UserManager gets called.
+        mCarUserManagerHelper.createNewNonAdminUser(TEST_USER_NAME);
+        verify(mUserManager).createUser(TEST_USER_NAME, 0);
+
+        doReturn(null).when(mUserManager).createUser(TEST_USER_NAME, 0);
+        assertThat(mCarUserManagerHelper.createNewNonAdminUser(TEST_USER_NAME)).isNull();
+
+        UserInfo newUser = new UserInfo();
+        newUser.name = TEST_USER_NAME;
+        doReturn(newUser).when(mUserManager).createUser(TEST_USER_NAME, 0);
+        assertThat(mCarUserManagerHelper.createNewNonAdminUser(TEST_USER_NAME)).isEqualTo(newUser);
+    }
+
+    @Test
+    public void testCannotRemoveSystemUser() {
+        assertThat(mCarUserManagerHelper.removeUser(mSystemUser, GUEST_USER_NAME)).isFalse();
+    }
+
+    @Test
+    public void testAdminsCanRemoveOtherUsers() {
+        int idToRemove = mCurrentProcessUser.id + 2;
+        UserInfo userToRemove = createUserInfoForId(idToRemove);
+
+        doReturn(true).when(mUserManager).removeUser(idToRemove);
+
+        // If Admin is removing non-current, non-system user, simply calls removeUser.
+        doReturn(true).when(mUserManager).isAdminUser();
+        assertThat(mCarUserManagerHelper.removeUser(userToRemove, GUEST_USER_NAME)).isTrue();
+        verify(mUserManager).removeUser(idToRemove);
+    }
+
+    @Test
+    public void testNonAdminsCanNotRemoveOtherUsers() {
+        UserInfo otherUser = createUserInfoForId(mCurrentProcessUser.id + 2);
+
+        // Make current user non-admin.
+        doReturn(false).when(mUserManager).isAdminUser();
+
+        // Mock so that removeUser always pretends it's successful.
+        doReturn(true).when(mUserManager).removeUser(anyInt());
+
+        // If Non-Admin is trying to remove someone other than themselves, they should fail.
+        assertThat(mCarUserManagerHelper.removeUser(otherUser, GUEST_USER_NAME)).isFalse();
+        verify(mUserManager, never()).removeUser(otherUser.id);
+    }
+
+    @Test
+    public void testRemoveLastActiveUser() {
+        // Cannot remove system user.
+        assertThat(mCarUserManagerHelper.removeUser(mSystemUser, GUEST_USER_NAME)).isFalse();
+
+        UserInfo adminInfo = new UserInfo(/* id= */10, "admin", UserInfo.FLAG_ADMIN);
+        mockGetUsers(adminInfo);
+
+        assertThat(mCarUserManagerHelper.removeUser(adminInfo, GUEST_USER_NAME))
+            .isEqualTo(false);
+    }
+
+    @Test
+    public void testRemoveLastAdminUser() {
+        // Make current user admin.
+        doReturn(true).when(mUserManager).isAdminUser();
+
+        UserInfo adminInfo = new UserInfo(/* id= */10, "admin", UserInfo.FLAG_ADMIN);
+        UserInfo nonAdminInfo = new UserInfo(/* id= */11, "non-admin", 0);
+        mockGetUsers(adminInfo, nonAdminInfo);
+
+        UserInfo newAdminInfo = new UserInfo(/* id= */12, DEFAULT_ADMIN_NAME, UserInfo.FLAG_ADMIN);
+        doReturn(newAdminInfo)
+                .when(mUserManager).createUser(DEFAULT_ADMIN_NAME, UserInfo.FLAG_ADMIN);
+
+        mCarUserManagerHelper.removeUser(adminInfo, GUEST_USER_NAME);
+        verify(mUserManager).createUser(DEFAULT_ADMIN_NAME, UserInfo.FLAG_ADMIN);
+        verify(mActivityManager).switchUser(newAdminInfo.id);
+        verify(mUserManager).removeUser(adminInfo.id);
+    }
+
+    @Test
+    public void testRemoveLastAdminUserFailsToCreateNewUser() {
+        // Make current user admin.
+        doReturn(true).when(mUserManager).isAdminUser();
+
+        UserInfo adminInfo = new UserInfo(/* id= */10, "admin", UserInfo.FLAG_ADMIN);
+        UserInfo nonAdminInfo = new UserInfo(/* id= */11, "non-admin", 0);
+        mockGetUsers(adminInfo, nonAdminInfo);
+
+        UserInfo newAdminInfo = new UserInfo(/* id= */12, DEFAULT_ADMIN_NAME, UserInfo.FLAG_ADMIN);
+        doReturn(newAdminInfo)
+                .when(mUserManager).createUser(DEFAULT_ADMIN_NAME, UserInfo.FLAG_ADMIN);
+
+        // Fail to create a new user to force a failure case
+        doReturn(null)
+                .when(mUserManager).createUser(DEFAULT_ADMIN_NAME, UserInfo.FLAG_ADMIN);
+
+        mCarUserManagerHelper.removeUser(adminInfo, GUEST_USER_NAME);
+        verify(mUserManager).createUser(DEFAULT_ADMIN_NAME, UserInfo.FLAG_ADMIN);
+        verify(mActivityManager, never()).switchUser(anyInt());
+        verify(mUserManager, never()).removeUser(adminInfo.id);
+    }
+
+    @Test
+    public void testSwitchToGuest() {
+        mCarUserManagerHelper.startGuestSession(GUEST_USER_NAME);
+        verify(mUserManager).createGuest(mContext, GUEST_USER_NAME);
+
+        UserInfo guestInfo = new UserInfo(/* id= */21, GUEST_USER_NAME, UserInfo.FLAG_GUEST);
+        doReturn(guestInfo).when(mUserManager).createGuest(mContext, GUEST_USER_NAME);
+        mCarUserManagerHelper.startGuestSession(GUEST_USER_NAME);
+        verify(mActivityManager).switchUser(21);
+    }
+
+    @Test
+    public void testSwitchToId() {
+        int userIdToSwitchTo = mForegroundUserId + 2;
+        doReturn(true).when(mActivityManager).switchUser(userIdToSwitchTo);
+
+        assertThat(mCarUserManagerHelper.switchToUserId(userIdToSwitchTo)).isTrue();
+        verify(mActivityManager).switchUser(userIdToSwitchTo);
+    }
+
+    @Test
+    public void testSwitchToForegroundIdExitsEarly() {
+        doReturn(true).when(mActivityManager).switchUser(mForegroundUserId);
+
+        assertThat(mCarUserManagerHelper.switchToUserId(mForegroundUserId)).isFalse();
+        verify(mActivityManager, never()).switchUser(mForegroundUserId);
+    }
+
+    @Test
+    public void testCannotSwitchIfSwitchingNotAllowed() {
+        int userIdToSwitchTo = mForegroundUserId + 2;
+        doReturn(true).when(mActivityManager).switchUser(userIdToSwitchTo);
+        doReturn(true).when(mUserManager).hasUserRestriction(UserManager.DISALLOW_USER_SWITCH);
+        assertThat(mCarUserManagerHelper.switchToUserId(userIdToSwitchTo)).isFalse();
+        verify(mActivityManager, never()).switchUser(userIdToSwitchTo);
+    }
+
+    @Test
+    public void testGetUserIcon() {
+        mCarUserManagerHelper.getUserIcon(mCurrentProcessUser);
+        verify(mUserManager).getUserIcon(mCurrentProcessUser.id);
+    }
+
+    @Test
+    public void testScaleUserIcon() {
+        Bitmap fakeIcon = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
+        Drawable scaledIcon = mCarUserManagerHelper.scaleUserIcon(fakeIcon, 300);
+        assertThat(scaledIcon.getIntrinsicWidth()).isEqualTo(300);
+        assertThat(scaledIcon.getIntrinsicHeight()).isEqualTo(300);
+    }
+
+    @Test
+    public void testSetUserName() {
+        UserInfo testInfo = createUserInfoForId(mCurrentProcessUser.id + 3);
+        String newName = "New Test Name";
+        mCarUserManagerHelper.setUserName(testInfo, newName);
+        verify(mUserManager).setUserName(mCurrentProcessUser.id + 3, newName);
+    }
+
+    @Test
+    public void testIsCurrentProcessSystemUser() {
+        doReturn(true).when(mUserManager).isAdminUser();
+        assertThat(mCarUserManagerHelper.isCurrentProcessAdminUser()).isTrue();
+
+        doReturn(false).when(mUserManager).isAdminUser();
+        assertThat(mCarUserManagerHelper.isCurrentProcessAdminUser()).isFalse();
+    }
+
+    @Test
+    public void testGrantAdminPermissions() {
+        int userId = 30;
+        UserInfo testInfo = createUserInfoForId(userId);
+
+        // Test that non-admins cannot grant admin permissions.
+        doReturn(false).when(mUserManager).isAdminUser(); // Current user non-admin.
+        mCarUserManagerHelper.grantAdminPermissions(testInfo);
+        verify(mUserManager, never()).setUserAdmin(userId);
+
+        // Admins can grant admin permissions.
+        doReturn(true).when(mUserManager).isAdminUser();
+        mCarUserManagerHelper.grantAdminPermissions(testInfo);
+        verify(mUserManager).setUserAdmin(userId);
+    }
+
+    @Test
+    public void testSetUserRestriction() {
+        int userId = 20;
+        UserInfo testInfo = createUserInfoForId(userId);
+
+        mCarUserManagerHelper.setUserRestriction(
+                testInfo, UserManager.DISALLOW_ADD_USER, /* enable= */ true);
+        verify(mUserManager).setUserRestriction(
+                UserManager.DISALLOW_ADD_USER, true, UserHandle.of(userId));
+
+        mCarUserManagerHelper.setUserRestriction(
+                testInfo, UserManager.DISALLOW_REMOVE_USER, /* enable= */ false);
+        verify(mUserManager).setUserRestriction(
+                UserManager.DISALLOW_REMOVE_USER, false, UserHandle.of(userId));
+    }
+
+    @Test
+    public void testDefaultNonAdminRestrictions() {
+        String testUserName = "Test User";
+        int userId = 20;
+        UserInfo newNonAdmin = createUserInfoForId(userId);
+
+        doReturn(newNonAdmin).when(mUserManager).createUser(testUserName, /* flags= */ 0);
+
+        mCarUserManagerHelper.createNewNonAdminUser(testUserName);
+
+        verify(mUserManager).setUserRestriction(
+                UserManager.DISALLOW_FACTORY_RESET, /* enable= */ true, UserHandle.of(userId));
+        verify(mUserManager).setUserRestriction(
+                UserManager.DISALLOW_SMS, /* enable= */ false, UserHandle.of(userId));
+        verify(mUserManager).setUserRestriction(
+                UserManager.DISALLOW_OUTGOING_CALLS, /* enable= */ false, UserHandle.of(userId));
+    }
+
+    @Test
+    public void testDefaultGuestRestrictions() {
+        int guestRestrictionsExpectedCount = 7;
+
+        ArgumentCaptor<Bundle> bundleCaptor = ArgumentCaptor.forClass(Bundle.class);
+        mCarUserManagerHelper.initDefaultGuestRestrictions();
+
+        verify(mUserManager).setDefaultGuestRestrictions(bundleCaptor.capture());
+        Bundle guestRestrictions = bundleCaptor.getValue();
+
+        assertThat(guestRestrictions.keySet()).hasSize(guestRestrictionsExpectedCount);
+        assertThat(guestRestrictions.getBoolean(UserManager.DISALLOW_FACTORY_RESET)).isTrue();
+        assertThat(guestRestrictions.getBoolean(UserManager.DISALLOW_REMOVE_USER)).isTrue();
+        assertThat(guestRestrictions.getBoolean(UserManager.DISALLOW_MODIFY_ACCOUNTS)).isTrue();
+        assertThat(guestRestrictions.getBoolean(UserManager.DISALLOW_OUTGOING_CALLS)).isTrue();
+        assertThat(guestRestrictions.getBoolean(UserManager.DISALLOW_SMS)).isTrue();
+        assertThat(guestRestrictions.getBoolean(UserManager.DISALLOW_INSTALL_APPS)).isTrue();
+        assertThat(guestRestrictions.getBoolean(UserManager.DISALLOW_UNINSTALL_APPS)).isTrue();
+    }
+
+    @Test
+    public void testGrantingAdminPermissionsRemovesNonAdminRestrictions() {
+        int testUserId = 30;
+        boolean restrictionEnabled = false;
+        UserInfo testInfo = createUserInfoForId(testUserId);
+
+        // Only admins can grant permissions.
+        doReturn(true).when(mUserManager).isAdminUser();
+
+        mCarUserManagerHelper.grantAdminPermissions(testInfo);
+
+        verify(mUserManager).setUserRestriction(
+                UserManager.DISALLOW_FACTORY_RESET, restrictionEnabled, UserHandle.of(testUserId));
+    }
+
+    @Test
+    public void testRegisterUserChangeReceiver() {
+        mCarUserManagerHelper.registerOnUsersUpdateListener(mTestListener);
+
+        ArgumentCaptor<BroadcastReceiver> receiverCaptor =
+                ArgumentCaptor.forClass(BroadcastReceiver.class);
+        ArgumentCaptor<UserHandle> handleCaptor = ArgumentCaptor.forClass(UserHandle.class);
+        ArgumentCaptor<IntentFilter> filterCaptor = ArgumentCaptor.forClass(IntentFilter.class);
+        ArgumentCaptor<String> permissionCaptor = ArgumentCaptor.forClass(String.class);
+        ArgumentCaptor<Handler> handlerCaptor = ArgumentCaptor.forClass(Handler.class);
+
+        verify(mContext).registerReceiverAsUser(
+                receiverCaptor.capture(),
+                handleCaptor.capture(),
+                filterCaptor.capture(),
+                permissionCaptor.capture(),
+                handlerCaptor.capture());
+
+        // Verify we're listening to Intents from ALL users.
+        assertThat(handleCaptor.getValue()).isEqualTo(UserHandle.ALL);
+
+        // Verify the presence of each intent in the filter.
+        // Verify the exact number of filters. Every time a new intent is added, this test should
+        // get updated.
+        assertThat(filterCaptor.getValue().countActions()).isEqualTo(6);
+        assertThat(filterCaptor.getValue().hasAction(Intent.ACTION_USER_REMOVED)).isTrue();
+        assertThat(filterCaptor.getValue().hasAction(Intent.ACTION_USER_ADDED)).isTrue();
+        assertThat(filterCaptor.getValue().hasAction(Intent.ACTION_USER_INFO_CHANGED)).isTrue();
+        assertThat(filterCaptor.getValue().hasAction(Intent.ACTION_USER_SWITCHED)).isTrue();
+        assertThat(filterCaptor.getValue().hasAction(Intent.ACTION_USER_STOPPED)).isTrue();
+        assertThat(filterCaptor.getValue().hasAction(Intent.ACTION_USER_UNLOCKED)).isTrue();
+
+        // Verify that calling the receiver calls the listener.
+        receiverCaptor.getValue().onReceive(mContext, new Intent());
+        verify(mTestListener).onUsersUpdate();
+
+        assertThat(permissionCaptor.getValue()).isNull();
+        assertThat(handlerCaptor.getValue()).isNull();
+
+        // Unregister the receiver.
+        mCarUserManagerHelper.unregisterOnUsersUpdateListener(mTestListener);
+        verify(mContext).unregisterReceiver(receiverCaptor.getValue());
+    }
+
+    @Test
+    public void testMultipleRegistrationsOfSameListener() {
+        CarUserManagerHelper.OnUsersUpdateListener listener =
+                Mockito.mock(CarUserManagerHelper.OnUsersUpdateListener.class);
+
+        ArgumentCaptor<BroadcastReceiver> receiverCaptor =
+                ArgumentCaptor.forClass(BroadcastReceiver.class);
+
+        mCarUserManagerHelper.registerOnUsersUpdateListener(listener);
+        mCarUserManagerHelper.registerOnUsersUpdateListener(listener);
+        // Even for multiple registrations of the same listener, broadcast receiver registered once.
+        verify(mContext, times(1))
+                .registerReceiverAsUser(receiverCaptor.capture(), any(), any(), any(), any());
+
+        // Verify that calling the receiver calls the listener.
+        receiverCaptor.getValue().onReceive(mContext, new Intent());
+        verify(listener).onUsersUpdate();
+
+        // Verify that a single removal unregisters the listener.
+        mCarUserManagerHelper.unregisterOnUsersUpdateListener(listener);
+        verify(mContext).unregisterReceiver(any());
+    }
+
+    @Test
+    public void testMultipleUnregistrationsOfTheSameListener() {
+        CarUserManagerHelper.OnUsersUpdateListener listener =
+                Mockito.mock(CarUserManagerHelper.OnUsersUpdateListener.class);
+        mCarUserManagerHelper.registerOnUsersUpdateListener(listener);
+
+        // Verify that a multiple unregistrations cause only one unregister for broadcast receiver.
+        mCarUserManagerHelper.unregisterOnUsersUpdateListener(listener);
+        mCarUserManagerHelper.unregisterOnUsersUpdateListener(listener);
+        mCarUserManagerHelper.unregisterOnUsersUpdateListener(listener);
+        verify(mContext, times(1)).unregisterReceiver(any());
+    }
+
+    @Test
+    public void testUnregisterReceiverCalledAfterAllListenersUnregister() {
+        CarUserManagerHelper.OnUsersUpdateListener listener1 =
+                Mockito.mock(CarUserManagerHelper.OnUsersUpdateListener.class);
+        CarUserManagerHelper.OnUsersUpdateListener listener2 =
+                Mockito.mock(CarUserManagerHelper.OnUsersUpdateListener.class);
+
+        mCarUserManagerHelper.registerOnUsersUpdateListener(listener1);
+        mCarUserManagerHelper.registerOnUsersUpdateListener(listener2);
+
+        mCarUserManagerHelper.unregisterOnUsersUpdateListener(listener1);
+        verify(mContext, never()).unregisterReceiver(any());
+
+        mCarUserManagerHelper.unregisterOnUsersUpdateListener(listener2);
+        verify(mContext, times(1)).unregisterReceiver(any());
+    }
+
+    @Test
+    public void testRegisteringMultipleListeners() {
+        CarUserManagerHelper.OnUsersUpdateListener listener1 =
+                Mockito.mock(CarUserManagerHelper.OnUsersUpdateListener.class);
+        CarUserManagerHelper.OnUsersUpdateListener listener2 =
+                Mockito.mock(CarUserManagerHelper.OnUsersUpdateListener.class);
+        ArgumentCaptor<BroadcastReceiver> receiverCaptor =
+                ArgumentCaptor.forClass(BroadcastReceiver.class);
+
+        mCarUserManagerHelper.registerOnUsersUpdateListener(listener1);
+        mCarUserManagerHelper.registerOnUsersUpdateListener(listener2);
+        verify(mContext, times(1))
+                .registerReceiverAsUser(receiverCaptor.capture(), any(), any(), any(), any());
+
+        // Verify that calling the receiver calls both listeners.
+        receiverCaptor.getValue().onReceive(mContext, new Intent());
+        verify(listener1).onUsersUpdate();
+        verify(listener2).onUsersUpdate();
+    }
+
+    @Test
+    public void testUnregisteringListenerStopsUpdatesForListener() {
+        CarUserManagerHelper.OnUsersUpdateListener listener1 =
+                Mockito.mock(CarUserManagerHelper.OnUsersUpdateListener.class);
+        CarUserManagerHelper.OnUsersUpdateListener listener2 =
+                Mockito.mock(CarUserManagerHelper.OnUsersUpdateListener.class);
+        ArgumentCaptor<BroadcastReceiver> receiverCaptor =
+                ArgumentCaptor.forClass(BroadcastReceiver.class);
+
+        mCarUserManagerHelper.registerOnUsersUpdateListener(listener1);
+        mCarUserManagerHelper.registerOnUsersUpdateListener(listener2);
+        verify(mContext, times(1))
+                .registerReceiverAsUser(receiverCaptor.capture(), any(), any(), any(), any());
+
+        // Unregister listener2
+        mCarUserManagerHelper.unregisterOnUsersUpdateListener(listener2);
+
+        // Verify that calling the receiver calls only one listener.
+        receiverCaptor.getValue().onReceive(mContext, new Intent());
+        verify(listener1).onUsersUpdate();
+        verify(listener2, never()).onUsersUpdate();
+    }
+
+    @Test
+    public void testGetInitialUserWithValidLastActiveUser() {
+        CarProperties.headless_system_user(true);
+        int lastActiveUserId = 12;
+
+        UserInfo otherUser1 = createUserInfoForId(lastActiveUserId - 2);
+        UserInfo otherUser2 = createUserInfoForId(lastActiveUserId - 1);
+        UserInfo otherUser3 = createUserInfoForId(lastActiveUserId);
+
+        setLastActiveUser(lastActiveUserId);
+        mockGetUsers(mSystemUser, otherUser1, otherUser2, otherUser3);
+
+        assertThat(mCarUserManagerHelper.getInitialUser()).isEqualTo(lastActiveUserId);
+    }
+
+    @Test
+    public void testGetInitialUserWithNonExistLastActiveUser() {
+        CarProperties.headless_system_user(true);
+        int lastActiveUserId = 12;
+
+        UserInfo otherUser1 = createUserInfoForId(lastActiveUserId - 2);
+        UserInfo otherUser2 = createUserInfoForId(lastActiveUserId - 1);
+
+        setLastActiveUser(lastActiveUserId);
+        mockGetUsers(mSystemUser, otherUser1, otherUser2);
+
+        assertThat(mCarUserManagerHelper.getInitialUser()).isEqualTo(lastActiveUserId - 2);
+    }
+
+    @Test
+    public void test_CreateNewOrFindExistingGuest_ReturnsExistingGuest() {
+        // Create two users and a guest user.
+        UserInfo user1 = createUserInfoForId(10);
+        UserInfo user2 = createUserInfoForId(12);
+        UserInfo user3 = new UserInfo(/* id= */ 13, /* name = */ "user13", UserInfo.FLAG_GUEST);
+
+        mockGetUsers(user1, user2, user3);
+        doReturn(null).when(mUserManager).createGuest(any(), any());
+
+        UserInfo guest = mCarUserManagerHelper.createNewOrFindExistingGuest(GUEST_USER_NAME);
+        assertThat(guest).isEqualTo(user3);
+    }
+
+    @Test
+    public void test_CreateNewOrFindExistingGuest_CreatesNewGuest_IfNoExisting() {
+        // Create two users.
+        UserInfo user1 = createUserInfoForId(10);
+        UserInfo user2 = createUserInfoForId(12);
+
+        mockGetUsers(user1, user2);
+
+        // Create a user for the "new guest" user.
+        UserInfo guestInfo = new UserInfo(/* id= */21, GUEST_USER_NAME, UserInfo.FLAG_GUEST);
+        doReturn(guestInfo).when(mUserManager).createGuest(mContext, GUEST_USER_NAME);
+
+        UserInfo guest = mCarUserManagerHelper.createNewOrFindExistingGuest(GUEST_USER_NAME);
+        verify(mUserManager).createGuest(mContext, GUEST_USER_NAME);
+        assertThat(guest).isEqualTo(guestInfo);
+    }
+
+    private UserInfo createUserInfoForId(int id) {
+        UserInfo userInfo = new UserInfo();
+        userInfo.id = id;
+        return userInfo;
+    }
+
+    private void mockGetUsers(UserInfo... users) {
+        List<UserInfo> testUsers = new ArrayList<>();
+        for (UserInfo user: users) {
+            testUsers.add(user);
+        }
+        doReturn(testUsers).when(mUserManager).getUsers(true);
+    }
+
+    private void setLastActiveUser(int userId) {
+        Settings.Global.putInt(InstrumentationRegistry.getTargetContext().getContentResolver(),
+                Settings.Global.LAST_ACTIVE_USER_ID, userId);
+    }
+}
diff --git a/tests/carservice_unit_test/src/com/android/car/BluetoothAutoConnectPolicyTest.java b/tests/carservice_unit_test/src/com/android/car/BluetoothAutoConnectPolicyTest.java
index a180886..8a27909 100644
--- a/tests/carservice_unit_test/src/com/android/car/BluetoothAutoConnectPolicyTest.java
+++ b/tests/carservice_unit_test/src/com/android/car/BluetoothAutoConnectPolicyTest.java
@@ -64,7 +64,10 @@
  * and connection results can be injected (imitating results from the stack)
  * 2. {@link CarCabinService} & {@link CarSensorService} - Fake vehicle events are injected to the
  * policy's Broadcast Receiver.
+ *
+ * TODO(b/77825248): Fix the flakiness to enable the test class again
  */
+@Suppress
 public class BluetoothAutoConnectPolicyTest extends AndroidTestCase {
     private BluetoothDeviceConnectionPolicy mBluetoothDeviceConnectionPolicyTest;
     private BluetoothAdapter mBluetoothAdapter;
diff --git a/tests/carservice_unit_test/src/com/android/car/CarConfigurationServiceTest.java b/tests/carservice_unit_test/src/com/android/car/CarConfigurationServiceTest.java
index 58b9c9a..9254a56 100644
--- a/tests/carservice_unit_test/src/com/android/car/CarConfigurationServiceTest.java
+++ b/tests/carservice_unit_test/src/com/android/car/CarConfigurationServiceTest.java
@@ -27,8 +27,9 @@
 import static com.google.common.truth.Truth.assertThat;
 
 import android.car.settings.SpeedBumpConfiguration;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.runner.AndroidJUnit4;
+
+import androidx.test.InstrumentationRegistry;
+import androidx.test.runner.AndroidJUnit4;
 
 import org.json.JSONException;
 import org.json.JSONObject;
diff --git a/tests/carservice_unit_test/src/com/android/car/CarInputServiceTest.java b/tests/carservice_unit_test/src/com/android/car/CarInputServiceTest.java
new file mode 100644
index 0000000..2db29db
--- /dev/null
+++ b/tests/carservice_unit_test/src/com/android/car/CarInputServiceTest.java
@@ -0,0 +1,360 @@
+/*
+ * Copyright (C) 2019 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.car;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.ArgumentMatchers.isNull;
+import static org.mockito.Mockito.atLeast;
+import static org.mockito.Mockito.clearInvocations;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.ignoreStubs;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.Mockito.when;
+
+import android.car.input.CarInputHandlingService.InputFilter;
+import android.car.input.ICarInputListener;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Message;
+import android.os.RemoteException;
+import android.os.UserHandle;
+import android.service.voice.VoiceInteractionSession;
+import android.telecom.TelecomManager;
+import android.view.KeyEvent;
+
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.runner.AndroidJUnit4;
+
+import com.android.car.hal.InputHalService;
+import com.android.internal.app.AssistUtils;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+import org.mockito.Spy;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+
+import java.util.function.Supplier;
+
+@RunWith(AndroidJUnit4.class)
+public class CarInputServiceTest {
+    @Rule public MockitoRule rule = MockitoJUnit.rule();
+
+    @Mock InputHalService mInputHalService;
+    @Mock TelecomManager mTelecomManager;
+    @Mock AssistUtils mAssistUtils;
+    @Mock CarInputService.KeyEventListener mDefaultMainListener;
+    @Mock Supplier<String> mLastCallSupplier;
+
+    @Spy Context mContext = ApplicationProvider.getApplicationContext();
+    @Spy Handler mHandler = new Handler(Looper.getMainLooper());
+
+    private CarInputService mCarInputService;
+
+    @Before
+    public void setUp() {
+        mCarInputService = new CarInputService(mContext, mInputHalService, mHandler,
+                mTelecomManager, mAssistUtils, mDefaultMainListener, mLastCallSupplier,
+                /* customInputServiceComponent= */ null);
+
+        when(mInputHalService.isKeyInputSupported()).thenReturn(true);
+        mCarInputService.init();
+
+        // Delay Handler callbacks until flushHandler() is called.
+        doReturn(true).when(mHandler).sendMessageAtTime(any(), anyLong());
+    }
+
+    @Test
+    public void ordinaryEvents_onMainDisplay_routedToInputManager() {
+        KeyEvent event = send(Key.DOWN, KeyEvent.KEYCODE_ENTER, Display.MAIN);
+
+        verify(mDefaultMainListener).onKeyEvent(event);
+    }
+
+    @Test
+    public void ordinaryEvents_onInstrumentClusterDisplay_notRoutedToInputManager() {
+        send(Key.DOWN, KeyEvent.KEYCODE_ENTER, Display.INSTRUMENT_CLUSTER);
+
+        verify(mDefaultMainListener, never()).onKeyEvent(any());
+    }
+
+    @Test
+    public void ordinaryEvents_onInstrumentClusterDisplay_routedToListener() {
+        CarInputService.KeyEventListener listener = mock(CarInputService.KeyEventListener.class);
+        mCarInputService.setInstrumentClusterKeyListener(listener);
+
+        KeyEvent event = send(Key.DOWN, KeyEvent.KEYCODE_ENTER, Display.INSTRUMENT_CLUSTER);
+        verify(listener).onKeyEvent(event);
+    }
+
+    @Test
+    public void customEventHandler_capturesRegisteredEvents_ignoresUnregisteredEvents()
+            throws RemoteException {
+        KeyEvent event;
+        ICarInputListener listener = registerInputListener(
+                new InputFilter(KeyEvent.KEYCODE_ENTER, InputHalService.DISPLAY_MAIN),
+                new InputFilter(KeyEvent.KEYCODE_ENTER, InputHalService.DISPLAY_INSTRUMENT_CLUSTER),
+                new InputFilter(KeyEvent.KEYCODE_MENU, InputHalService.DISPLAY_MAIN));
+
+        CarInputService.KeyEventListener instrumentClusterListener =
+                mock(CarInputService.KeyEventListener.class);
+        mCarInputService.setInstrumentClusterKeyListener(instrumentClusterListener);
+
+        event = send(Key.DOWN, KeyEvent.KEYCODE_ENTER, Display.MAIN);
+        verify(listener).onKeyEvent(event, InputHalService.DISPLAY_MAIN);
+        verify(mDefaultMainListener, never()).onKeyEvent(any());
+
+        event = send(Key.DOWN, KeyEvent.KEYCODE_ENTER, Display.INSTRUMENT_CLUSTER);
+        verify(listener).onKeyEvent(event, InputHalService.DISPLAY_INSTRUMENT_CLUSTER);
+        verify(instrumentClusterListener, never()).onKeyEvent(any());
+
+        event = send(Key.DOWN, KeyEvent.KEYCODE_MENU, Display.MAIN);
+        verify(listener).onKeyEvent(event, InputHalService.DISPLAY_MAIN);
+        verify(mDefaultMainListener, never()).onKeyEvent(any());
+
+        event = send(Key.DOWN, KeyEvent.KEYCODE_MENU, Display.INSTRUMENT_CLUSTER);
+        verify(listener, never()).onKeyEvent(event, InputHalService.DISPLAY_INSTRUMENT_CLUSTER);
+        verify(instrumentClusterListener).onKeyEvent(event);
+    }
+
+    @Test
+    public void voiceKey_shortPress_withRegisteredListener_triggersListener() {
+        Runnable listener = mock(Runnable.class);
+        mCarInputService.setVoiceAssistantKeyListener(listener);
+
+        send(Key.DOWN, KeyEvent.KEYCODE_VOICE_ASSIST, Display.MAIN);
+        send(Key.UP, KeyEvent.KEYCODE_VOICE_ASSIST, Display.MAIN);
+
+        verify(listener).run();
+    }
+
+    @Test
+    public void voiceKey_longPress_withRegisteredListener_triggersListener() {
+        Runnable shortPressListener = mock(Runnable.class);
+        Runnable longPressListener = mock(Runnable.class);
+        mCarInputService.setVoiceAssistantKeyListener(shortPressListener);
+        mCarInputService.setLongVoiceAssistantKeyListener(longPressListener);
+
+        send(Key.DOWN, KeyEvent.KEYCODE_VOICE_ASSIST, Display.MAIN);
+        verify(shortPressListener, never()).run();
+        verify(longPressListener, never()).run();
+
+        // Simulate the long-press timer expiring.
+        flushHandler();
+        verify(longPressListener).run();
+
+        // Ensure that the short-press listener is *not* called.
+        send(Key.UP, KeyEvent.KEYCODE_VOICE_ASSIST, Display.MAIN);
+        flushHandler();
+        verify(shortPressListener, never()).run();
+    }
+
+    @Test
+    public void voiceKey_shortPress_withoutRegisteredListener_triggersAssistUtils() {
+        when(mAssistUtils.getAssistComponentForUser(anyInt()))
+                .thenReturn(new ComponentName("pkg", "cls"));
+
+        send(Key.DOWN, KeyEvent.KEYCODE_VOICE_ASSIST, Display.MAIN);
+        send(Key.UP, KeyEvent.KEYCODE_VOICE_ASSIST, Display.MAIN);
+
+        ArgumentCaptor<Bundle> bundleCaptor = ArgumentCaptor.forClass(Bundle.class);
+        verify(mAssistUtils).showSessionForActiveService(
+                bundleCaptor.capture(),
+                eq(VoiceInteractionSession.SHOW_SOURCE_PUSH_TO_TALK),
+                any(),
+                isNull());
+        assertThat(bundleCaptor.getValue().getBoolean(CarInputService.EXTRA_CAR_PUSH_TO_TALK))
+                .isTrue();
+    }
+
+    @Test
+    public void voiceKey_longPress_withoutRegisteredListener_triggersAssistUtils() {
+        when(mAssistUtils.getAssistComponentForUser(anyInt()))
+                .thenReturn(new ComponentName("pkg", "cls"));
+
+        send(Key.DOWN, KeyEvent.KEYCODE_VOICE_ASSIST, Display.MAIN);
+        flushHandler();
+
+        ArgumentCaptor<Bundle> bundleCaptor = ArgumentCaptor.forClass(Bundle.class);
+        verify(mAssistUtils).showSessionForActiveService(
+                bundleCaptor.capture(),
+                eq(VoiceInteractionSession.SHOW_SOURCE_PUSH_TO_TALK),
+                any(),
+                isNull());
+        assertThat(bundleCaptor.getValue().getBoolean(CarInputService.EXTRA_CAR_PUSH_TO_TALK))
+                .isTrue();
+
+        send(Key.UP, KeyEvent.KEYCODE_VOICE_ASSIST, Display.MAIN);
+        verifyNoMoreInteractions(ignoreStubs(mAssistUtils));
+    }
+
+    @Test
+    public void voiceKey_repeatedEvents_ignored() {
+        // Pressing a key starts the long-press timer.
+        send(Key.DOWN, KeyEvent.KEYCODE_VOICE_ASSIST, Display.MAIN);
+        verify(mHandler).sendMessageAtTime(any(), anyLong());
+        clearInvocations(mHandler);
+
+        // Repeated KEY_DOWN events don't reset the timer.
+        sendWithRepeat(Key.DOWN, KeyEvent.KEYCODE_VOICE_ASSIST, Display.MAIN, 1);
+        verify(mHandler, never()).sendMessageAtTime(any(), anyLong());
+    }
+
+    @Test
+    public void callKey_shortPress_launchesDialer() {
+        ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
+
+        doNothing().when(mContext).startActivityAsUser(any(), any(), any());
+
+        send(Key.DOWN, KeyEvent.KEYCODE_CALL, Display.MAIN);
+        send(Key.UP, KeyEvent.KEYCODE_CALL, Display.MAIN);
+
+        verify(mContext).startActivityAsUser(
+                intentCaptor.capture(), any(), eq(UserHandle.CURRENT_OR_SELF));
+        assertThat(intentCaptor.getValue().getAction()).isEqualTo(Intent.ACTION_DIAL);
+    }
+
+    @Test
+    public void callKey_shortPress_whenCallRinging_answersCall() {
+        when(mTelecomManager.isRinging()).thenReturn(true);
+
+        send(Key.DOWN, KeyEvent.KEYCODE_CALL, Display.MAIN);
+        send(Key.UP, KeyEvent.KEYCODE_CALL, Display.MAIN);
+
+        verify(mTelecomManager).acceptRingingCall();
+        // Ensure default handler does not run.
+        verify(mContext, never()).startActivityAsUser(any(), any(), any());
+    }
+
+    @Test
+    public void callKey_longPress_redialsLastCall() {
+        ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
+
+        when(mLastCallSupplier.get()).thenReturn("1234567890");
+        doNothing().when(mContext).startActivityAsUser(any(), any(), any());
+
+        send(Key.DOWN, KeyEvent.KEYCODE_CALL, Display.MAIN);
+        flushHandler();
+
+        verify(mContext).startActivityAsUser(
+                intentCaptor.capture(), any(), eq(UserHandle.CURRENT_OR_SELF));
+
+        Intent intent = intentCaptor.getValue();
+        assertThat(intent.getAction()).isEqualTo(Intent.ACTION_CALL);
+        assertThat(intent.getData()).isEqualTo(Uri.parse("tel:1234567890"));
+
+        clearInvocations(mContext);
+        send(Key.UP, KeyEvent.KEYCODE_CALL, Display.MAIN);
+        verify(mContext, never()).startActivityAsUser(any(), any(), any());
+    }
+
+    @Test
+    public void callKey_longPress_withNoLastCall_doesNothing() {
+        when(mLastCallSupplier.get()).thenReturn("");
+
+        send(Key.DOWN, KeyEvent.KEYCODE_CALL, Display.MAIN);
+        flushHandler();
+
+        verify(mContext, never()).startActivityAsUser(any(), any(), any());
+    }
+
+    @Test
+    public void callKey_longPress_whenCallRinging_answersCall() {
+        when(mTelecomManager.isRinging()).thenReturn(true);
+
+        send(Key.DOWN, KeyEvent.KEYCODE_CALL, Display.MAIN);
+        flushHandler();
+
+        verify(mTelecomManager).acceptRingingCall();
+
+        send(Key.UP, KeyEvent.KEYCODE_CALL, Display.MAIN);
+        // Ensure that default handler does not run, either after accepting ringing call,
+        // or as a result of key-up.
+        verify(mContext, never()).startActivityAsUser(any(), any(), any());
+    }
+
+    @Test
+    public void callKey_repeatedEvents_ignored() {
+        // Pressing a key starts the long-press timer.
+        send(Key.DOWN, KeyEvent.KEYCODE_CALL, Display.MAIN);
+        verify(mHandler).sendMessageAtTime(any(), anyLong());
+        clearInvocations(mHandler);
+
+        // Repeated KEY_DOWN events don't reset the timer.
+        sendWithRepeat(Key.DOWN, KeyEvent.KEYCODE_CALL, Display.MAIN, 1);
+        verify(mHandler, never()).sendMessageAtTime(any(), anyLong());
+    }
+    private enum Key {DOWN, UP}
+
+    private enum Display {MAIN, INSTRUMENT_CLUSTER}
+
+    private KeyEvent send(Key action, int keyCode, Display display) {
+        return sendWithRepeat(action, keyCode, display, 0);
+    }
+
+    private KeyEvent sendWithRepeat(Key action, int keyCode, Display display, int repeatCount) {
+        KeyEvent event = new KeyEvent(
+                /* downTime= */ 0L,
+                /* eventTime= */ 0L,
+                action == Key.DOWN ? KeyEvent.ACTION_DOWN : KeyEvent.ACTION_UP,
+                keyCode,
+                repeatCount);
+        mCarInputService.onKeyEvent(
+                event,
+                display == Display.MAIN
+                        ? InputHalService.DISPLAY_MAIN
+                        : InputHalService.DISPLAY_INSTRUMENT_CLUSTER);
+        return event;
+    }
+
+    private ICarInputListener registerInputListener(InputFilter... handledKeys) {
+        ICarInputListener listener = mock(ICarInputListener.class);
+        mCarInputService.mCarInputListener = listener;
+        mCarInputService.setHandledKeys(handledKeys);
+        return listener;
+    }
+
+    private void flushHandler() {
+        ArgumentCaptor<Message> messageCaptor = ArgumentCaptor.forClass(Message.class);
+
+        verify(mHandler, atLeast(0)).sendMessageAtTime(messageCaptor.capture(), anyLong());
+
+        for (Message message : messageCaptor.getAllValues()) {
+            mHandler.dispatchMessage(message);
+        }
+
+        clearInvocations(mHandler);
+    }
+}
diff --git a/tests/carservice_unit_test/src/com/android/car/CarLocationServiceTest.java b/tests/carservice_unit_test/src/com/android/car/CarLocationServiceTest.java
index 8bc8e34..dabb617 100644
--- a/tests/carservice_unit_test/src/com/android/car/CarLocationServiceTest.java
+++ b/tests/carservice_unit_test/src/com/android/car/CarLocationServiceTest.java
@@ -43,8 +43,9 @@
 import android.location.LocationManager;
 import android.os.RemoteException;
 import android.os.SystemClock;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.runner.AndroidJUnit4;
+
+import androidx.test.InstrumentationRegistry;
+import androidx.test.runner.AndroidJUnit4;
 
 import com.android.internal.util.ArrayUtils;
 
diff --git a/tests/carservice_unit_test/src/com/android/car/CarPowerManagementServiceTest.java b/tests/carservice_unit_test/src/com/android/car/CarPowerManagementServiceTest.java
index 70cec5d..557816a 100644
--- a/tests/carservice_unit_test/src/com/android/car/CarPowerManagementServiceTest.java
+++ b/tests/carservice_unit_test/src/com/android/car/CarPowerManagementServiceTest.java
@@ -340,7 +340,7 @@
         private TemporaryDirectory mFilesDir;
 
         @Override
-        public File getFilesDir() {
+        public File getSystemCarDir() {
             if (mFilesDir == null) {
                 try {
                     mFilesDir = new TemporaryDirectory(TAG);
diff --git a/tests/carservice_unit_test/src/com/android/car/CarUserManagerHelperTest.java b/tests/carservice_unit_test/src/com/android/car/CarUserManagerHelperTest.java
deleted file mode 100644
index f731bec..0000000
--- a/tests/carservice_unit_test/src/com/android/car/CarUserManagerHelperTest.java
+++ /dev/null
@@ -1,851 +0,0 @@
-/*
- * Copyright (C) 2018 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.car;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.Matchers.any;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-
-import android.app.ActivityManager;
-import android.car.userlib.CarUserManagerHelper;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.pm.UserInfo;
-import android.graphics.Bitmap;
-import android.graphics.drawable.Drawable;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.SystemProperties;
-import android.os.UserHandle;
-import android.os.UserManager;
-import android.provider.Settings;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Mock;
-import org.mockito.Mockito;
-import org.mockito.MockitoAnnotations;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * This class contains unit tests for the {@link CarUserManagerHelper}.
- * It tests that {@link CarUserManagerHelper} does the right thing for user management flows.
- *
- * The following mocks are used:
- * 1. {@link Context} provides system services and resources.
- * 2. {@link UserManager} provides dummy users and user info.
- * 3. {@link ActivityManager} to verify user switch is invoked.
- * 4. {@link CarUserManagerHelper.OnUsersUpdateListener} registers a listener for user updates.
- */
-@RunWith(AndroidJUnit4.class)
-@SmallTest
-public class CarUserManagerHelperTest {
-    @Mock
-    private Context mContext;
-    @Mock
-    private UserManager mUserManager;
-    @Mock
-    private ActivityManager mActivityManager;
-    @Mock
-    private CarUserManagerHelper.OnUsersUpdateListener mTestListener;
-
-    private CarUserManagerHelper mCarUserManagerHelper;
-    private UserInfo mCurrentProcessUser;
-    private UserInfo mSystemUser;
-    private String mGuestUserName = "testGuest";
-    private String mTestUserName = "testUser";
-    private int mForegroundUserId;
-    private UserInfo mForegroundUser;
-
-    @Before
-    public void setUpMocksAndVariables() throws Exception {
-        MockitoAnnotations.initMocks(this);
-        doReturn(mUserManager).when(mContext).getSystemService(Context.USER_SERVICE);
-        doReturn(mActivityManager).when(mContext).getSystemService(Context.ACTIVITY_SERVICE);
-        doReturn(InstrumentationRegistry.getTargetContext().getResources())
-                .when(mContext).getResources();
-        doReturn(InstrumentationRegistry.getTargetContext().getContentResolver())
-                .when(mContext).getContentResolver();
-        doReturn(mContext).when(mContext).getApplicationContext();
-        mCarUserManagerHelper = new CarUserManagerHelper(mContext);
-
-        mCurrentProcessUser = createUserInfoForId(UserHandle.myUserId());
-        mSystemUser = createUserInfoForId(UserHandle.USER_SYSTEM);
-        doReturn(mCurrentProcessUser).when(mUserManager).getUserInfo(UserHandle.myUserId());
-
-        // Get the ID of the foreground user running this test.
-        // We cannot mock the foreground user since getCurrentUser is static.
-        // We cannot rely on foreground_id != system_id, they could be the same user.
-        mForegroundUserId = ActivityManager.getCurrentUser();
-        mForegroundUser = createUserInfoForId(mForegroundUserId);
-
-        // Restore the non-headless state before every test. Individual tests can set the property
-        // to true to test the headless system user scenario.
-        SystemProperties.set("android.car.systemuser.headless", "false");
-    }
-
-    @Test
-    public void checkIsSystemUser() {
-        UserInfo testInfo = new UserInfo();
-
-        testInfo.id = UserHandle.USER_SYSTEM;
-        assertThat(mCarUserManagerHelper.isSystemUser(testInfo)).isTrue();
-
-        testInfo.id = UserHandle.USER_SYSTEM + 2; // Make it different than system id.
-        assertThat(mCarUserManagerHelper.isSystemUser(testInfo)).isFalse();
-    }
-
-    // System user will not be returned when calling get all users.
-    @Test
-    public void testHeadlessUser0GetAllUsers_NotReturnSystemUser() {
-        SystemProperties.set("android.car.systemuser.headless", "true");
-        UserInfo otherUser1 = createUserInfoForId(10);
-        UserInfo otherUser2 = createUserInfoForId(11);
-        UserInfo otherUser3 = createUserInfoForId(12);
-
-        mockGetUsers(mSystemUser, otherUser1, otherUser2, otherUser3);
-
-        assertThat(mCarUserManagerHelper.getAllUsers())
-                .containsExactly(otherUser1, otherUser2, otherUser3);
-    }
-
-    @Test
-    public void testGetAllSwitchableUsers() {
-        // Create two non-foreground users.
-        UserInfo user1 = createUserInfoForId(mForegroundUserId + 1);
-        UserInfo user2 = createUserInfoForId(mForegroundUserId + 2);
-
-        mockGetUsers(mForegroundUser, user1, user2);
-
-        // Should return all non-foreground users.
-        assertThat(mCarUserManagerHelper.getAllSwitchableUsers()).containsExactly(user1, user2);
-    }
-
-    @Test
-    public void testGetAllPersistentUsers() {
-        // Create two non-ephemeral users.
-        UserInfo user1 = createUserInfoForId(mForegroundUserId);
-        UserInfo user2 = createUserInfoForId(mForegroundUserId + 1);
-        // Create two ephemeral users.
-        UserInfo user3 = new UserInfo(
-              /* id= */mForegroundUserId + 2, /* name = */ "user3", UserInfo.FLAG_EPHEMERAL);
-        UserInfo user4 = new UserInfo(
-              /* id= */mForegroundUserId + 3, /* name = */ "user4", UserInfo.FLAG_EPHEMERAL);
-
-        mockGetUsers(user1, user2, user3, user4);
-
-        // Should return all non-ephemeral users.
-        assertThat(mCarUserManagerHelper.getAllPersistentUsers()).containsExactly(user1, user2);
-    }
-
-    @Test
-    public void testGetAllAdminUsers() {
-        // Create two admin, and two non-admin users.
-        UserInfo user1 = new UserInfo(/* id= */ 10, /* name = */ "user10", UserInfo.FLAG_ADMIN);
-        UserInfo user2 = createUserInfoForId(11);
-        UserInfo user3 = createUserInfoForId(12);
-        UserInfo user4 = new UserInfo(/* id= */ 13, /* name = */ "user13", UserInfo.FLAG_ADMIN);
-
-        mockGetUsers(user1, user2, user3, user4);
-
-        // Should return only admin users.
-        assertThat(mCarUserManagerHelper.getAllAdminUsers()).containsExactly(user1, user4);
-    }
-
-    @Test
-    public void testGetAllUsersExceptGuests() {
-        // Create two users and a guest user.
-        UserInfo user1 = createUserInfoForId(10);
-        UserInfo user2 = createUserInfoForId(12);
-        UserInfo user3 = new UserInfo(/* id= */ 13, /* name = */ "user13", UserInfo.FLAG_GUEST);
-
-        mockGetUsers(user1, user2, user3);
-
-        // Should not return guests.
-        assertThat(mCarUserManagerHelper.getAllUsersExceptGuests())
-                .containsExactly(user1, user2);
-    }
-
-    @Test
-    public void testUserCanBeRemoved() {
-        UserInfo testInfo = new UserInfo();
-
-        // System user cannot be removed.
-        testInfo.id = UserHandle.USER_SYSTEM;
-        assertThat(mCarUserManagerHelper.canUserBeRemoved(testInfo)).isFalse();
-
-        testInfo.id = UserHandle.USER_SYSTEM + 2; // Make it different than system id.
-        assertThat(mCarUserManagerHelper.canUserBeRemoved(testInfo)).isTrue();
-    }
-
-    @Test
-    public void testCurrentProcessCanAddUsers() {
-        doReturn(false).when(mUserManager)
-            .hasUserRestriction(UserManager.DISALLOW_ADD_USER);
-        assertThat(mCarUserManagerHelper.canCurrentProcessAddUsers()).isTrue();
-
-        doReturn(true).when(mUserManager)
-            .hasUserRestriction(UserManager.DISALLOW_ADD_USER);
-        assertThat(mCarUserManagerHelper.canCurrentProcessAddUsers()).isFalse();
-    }
-
-    @Test
-    public void testCurrentProcessCanRemoveUsers() {
-        doReturn(false).when(mUserManager)
-            .hasUserRestriction(UserManager.DISALLOW_REMOVE_USER);
-        assertThat(mCarUserManagerHelper.canCurrentProcessRemoveUsers()).isTrue();
-
-        doReturn(true).when(mUserManager)
-            .hasUserRestriction(UserManager.DISALLOW_REMOVE_USER);
-        assertThat(mCarUserManagerHelper.canCurrentProcessRemoveUsers()).isFalse();
-    }
-
-    @Test
-    public void testCurrentProcessCanSwitchUsers() {
-        doReturn(false).when(mUserManager)
-            .hasUserRestriction(UserManager.DISALLOW_USER_SWITCH);
-        assertThat(mCarUserManagerHelper.canCurrentProcessSwitchUsers()).isTrue();
-
-        doReturn(true).when(mUserManager)
-            .hasUserRestriction(UserManager.DISALLOW_USER_SWITCH);
-        assertThat(mCarUserManagerHelper.canCurrentProcessSwitchUsers()).isFalse();
-    }
-
-    @Test
-    public void testCurrentGuestProcessCannotModifyAccounts() {
-        assertThat(mCarUserManagerHelper.canCurrentProcessModifyAccounts()).isTrue();
-
-        doReturn(true).when(mUserManager).isGuestUser();
-
-        assertThat(mCarUserManagerHelper.canCurrentProcessModifyAccounts()).isFalse();
-    }
-
-    @Test
-    public void testCurrentDemoProcessCannotModifyAccounts() {
-        assertThat(mCarUserManagerHelper.canCurrentProcessModifyAccounts()).isTrue();
-
-        doReturn(true).when(mUserManager).isDemoUser();
-
-        assertThat(mCarUserManagerHelper.canCurrentProcessModifyAccounts()).isFalse();
-    }
-
-    @Test
-    public void testCurrentDisallowModifyAccountsProcessIsEnforced() {
-        assertThat(mCarUserManagerHelper.canCurrentProcessModifyAccounts()).isTrue();
-
-        doReturn(true).when(mUserManager)
-                .hasUserRestriction(UserManager.DISALLOW_MODIFY_ACCOUNTS);
-
-        assertThat(mCarUserManagerHelper.canCurrentProcessModifyAccounts()).isFalse();
-    }
-
-    @Test
-    public void testGetMaxSupportedUsers() {
-        SystemProperties.set("fw.max_users", "11");
-
-        assertThat(mCarUserManagerHelper.getMaxSupportedUsers()).isEqualTo(11);
-
-        // In headless user 0 model, we want to exclude the system user.
-        SystemProperties.set("android.car.systemuser.headless", "true");
-        assertThat(mCarUserManagerHelper.getMaxSupportedUsers()).isEqualTo(10);
-    }
-
-    @Test
-    public void testGetMaxSupportedRealUsers() {
-        SystemProperties.set("fw.max_users", "7");
-
-        // Create three managed profiles, and two normal users.
-        UserInfo user1 = createUserInfoForId(10);
-        UserInfo user2 =
-                new UserInfo(/* id= */ 11, /* name = */ "user11", UserInfo.FLAG_MANAGED_PROFILE);
-        UserInfo user3 =
-                new UserInfo(/* id= */ 12, /* name = */ "user12", UserInfo.FLAG_MANAGED_PROFILE);
-        UserInfo user4 = createUserInfoForId(13);
-        UserInfo user5 =
-                new UserInfo(/* id= */ 14, /* name = */ "user14", UserInfo.FLAG_MANAGED_PROFILE);
-
-        mockGetUsers(user1, user2, user3, user4, user5);
-
-        // Max users - # managed profiles.
-        assertThat(mCarUserManagerHelper.getMaxSupportedRealUsers()).isEqualTo(4);
-    }
-
-    @Test
-    public void testIsUserLimitReached() {
-        UserInfo user1 = createUserInfoForId(10);
-        UserInfo user2 =
-                new UserInfo(/* id= */ 11, /* name = */ "user11", UserInfo.FLAG_MANAGED_PROFILE);
-        UserInfo user3 =
-                new UserInfo(/* id= */ 12, /* name = */ "user12", UserInfo.FLAG_MANAGED_PROFILE);
-        UserInfo user4 = createUserInfoForId(13);
-
-        mockGetUsers(user1, user2, user3, user4);
-
-        SystemProperties.set("fw.max_users", "5");
-        assertThat(mCarUserManagerHelper.isUserLimitReached()).isFalse();
-
-        SystemProperties.set("fw.max_users", "4");
-        assertThat(mCarUserManagerHelper.isUserLimitReached()).isTrue();
-    }
-
-    @Test
-    public void testHeadlessSystemUser_IsUserLimitReached() {
-        SystemProperties.set("android.car.systemuser.headless", "true");
-        UserInfo user1 = createUserInfoForId(10);
-        UserInfo user2 =
-                new UserInfo(/* id= */ 11, /* name = */ "user11", UserInfo.FLAG_MANAGED_PROFILE);
-        UserInfo user3 =
-                new UserInfo(/* id= */ 12, /* name = */ "user12", UserInfo.FLAG_MANAGED_PROFILE);
-        UserInfo user4 = createUserInfoForId(13);
-
-        mockGetUsers(mSystemUser, user1, user2, user3, user4);
-
-        SystemProperties.set("fw.max_users", "6");
-        assertThat(mCarUserManagerHelper.isUserLimitReached()).isFalse();
-
-        SystemProperties.set("fw.max_users", "5");
-        assertThat(mCarUserManagerHelper.isUserLimitReached()).isTrue();
-    }
-
-    @Test
-    public void testIsUserLimitReachedIgnoresGuests() {
-        SystemProperties.set("fw.max_users", "5");
-
-        UserInfo user1 = createUserInfoForId(10);
-        UserInfo user2 =
-                new UserInfo(/* id= */ 11, /* name = */ "user11", UserInfo.FLAG_MANAGED_PROFILE);
-        UserInfo user3 =
-                new UserInfo(/* id= */ 12, /* name = */ "user12", UserInfo.FLAG_MANAGED_PROFILE);
-        UserInfo user4 = createUserInfoForId(13);
-        UserInfo user5 = new UserInfo(/* id= */ 14, /* name = */ "user14", UserInfo.FLAG_GUEST);
-        UserInfo user6 = createUserInfoForId(15);
-
-        mockGetUsers(user1, user2, user3, user4);
-        assertThat(mCarUserManagerHelper.isUserLimitReached()).isFalse();
-
-        // Add guest user. Verify it doesn't affect the limit.
-        mockGetUsers(user1, user2, user3, user4, user5);
-        assertThat(mCarUserManagerHelper.isUserLimitReached()).isFalse();
-
-        // Add normal user. Limit is reached
-        mockGetUsers(user1, user2, user3, user4, user5, user6);
-        assertThat(mCarUserManagerHelper.isUserLimitReached()).isTrue();
-    }
-
-    @Test
-    public void testCreateNewAdminUser() {
-        // Make sure current user is admin, since only admins can create other admins.
-        doReturn(true).when(mUserManager).isAdminUser();
-
-        // Verify createUser on UserManager gets called.
-        mCarUserManagerHelper.createNewAdminUser(mTestUserName);
-        verify(mUserManager).createUser(mTestUserName, UserInfo.FLAG_ADMIN);
-
-        doReturn(null).when(mUserManager).createUser(mTestUserName, UserInfo.FLAG_ADMIN);
-        assertThat(mCarUserManagerHelper.createNewAdminUser(mTestUserName)).isNull();
-
-        UserInfo newUser = new UserInfo();
-        newUser.name = mTestUserName;
-        doReturn(newUser).when(mUserManager).createUser(mTestUserName, UserInfo.FLAG_ADMIN);
-        assertThat(mCarUserManagerHelper.createNewAdminUser(mTestUserName)).isEqualTo(newUser);
-    }
-
-    @Test
-    public void testAdminsCanCreateAdmins() {
-        String newAdminName = "Test new admin";
-        UserInfo expectedAdmin = new UserInfo();
-        expectedAdmin.name = newAdminName;
-        doReturn(expectedAdmin).when(mUserManager).createUser(newAdminName, UserInfo.FLAG_ADMIN);
-
-        // Admins can create other admins.
-        doReturn(true).when(mUserManager).isAdminUser();
-        UserInfo actualAdmin = mCarUserManagerHelper.createNewAdminUser(newAdminName);
-        assertThat(actualAdmin).isEqualTo(expectedAdmin);
-    }
-
-    @Test
-    public void testNonAdminsCanNotCreateAdmins() {
-        String newAdminName = "Test new admin";
-        UserInfo expectedAdmin = new UserInfo();
-        expectedAdmin.name = newAdminName;
-        doReturn(expectedAdmin).when(mUserManager).createUser(newAdminName, UserInfo.FLAG_ADMIN);
-
-        // Test that non-admins cannot create new admins.
-        doReturn(false).when(mUserManager).isAdminUser(); // Current user non-admin.
-        assertThat(mCarUserManagerHelper.createNewAdminUser(newAdminName)).isNull();
-    }
-
-    @Test
-    public void testSystemUserCanCreateAdmins() {
-        String newAdminName = "Test new admin";
-        UserInfo expectedAdmin = new UserInfo();
-        expectedAdmin.name = newAdminName;
-
-        doReturn(expectedAdmin).when(mUserManager).createUser(newAdminName, UserInfo.FLAG_ADMIN);
-
-        // System user can create admins.
-        doReturn(true).when(mUserManager).isSystemUser();
-        UserInfo actualAdmin = mCarUserManagerHelper.createNewAdminUser(newAdminName);
-        assertThat(actualAdmin).isEqualTo(expectedAdmin);
-    }
-
-    @Test
-    public void testCreateNewNonAdminUser() {
-        // Verify createUser on UserManager gets called.
-        mCarUserManagerHelper.createNewNonAdminUser(mTestUserName);
-        verify(mUserManager).createUser(mTestUserName, 0);
-
-        doReturn(null).when(mUserManager).createUser(mTestUserName, 0);
-        assertThat(mCarUserManagerHelper.createNewNonAdminUser(mTestUserName)).isNull();
-
-        UserInfo newUser = new UserInfo();
-        newUser.name = mTestUserName;
-        doReturn(newUser).when(mUserManager).createUser(mTestUserName, 0);
-        assertThat(mCarUserManagerHelper.createNewNonAdminUser(mTestUserName)).isEqualTo(newUser);
-    }
-
-    @Test
-    public void testCannotRemoveSystemUser() {
-        assertThat(mCarUserManagerHelper.removeUser(mSystemUser, mGuestUserName)).isFalse();
-    }
-
-    @Test
-    public void testAdminsCanRemoveOtherUsers() {
-        int idToRemove = mCurrentProcessUser.id + 2;
-        UserInfo userToRemove = createUserInfoForId(idToRemove);
-
-        doReturn(true).when(mUserManager).removeUser(idToRemove);
-
-        // If Admin is removing non-current, non-system user, simply calls removeUser.
-        doReturn(true).when(mUserManager).isAdminUser();
-        assertThat(mCarUserManagerHelper.removeUser(userToRemove, mGuestUserName)).isTrue();
-        verify(mUserManager).removeUser(idToRemove);
-    }
-
-    @Test
-    public void testNonAdminsCanNotRemoveOtherUsers() {
-        UserInfo otherUser = createUserInfoForId(mCurrentProcessUser.id + 2);
-
-        // Make current user non-admin.
-        doReturn(false).when(mUserManager).isAdminUser();
-
-        // Mock so that removeUser always pretends it's successful.
-        doReturn(true).when(mUserManager).removeUser(anyInt());
-
-        // If Non-Admin is trying to remove someone other than themselves, they should fail.
-        assertThat(mCarUserManagerHelper.removeUser(otherUser, mGuestUserName)).isFalse();
-        verify(mUserManager, never()).removeUser(otherUser.id);
-    }
-
-    @Test
-    public void testRemoveLastActiveUser() {
-        // Cannot remove system user.
-        assertThat(mCarUserManagerHelper.removeUser(mSystemUser, mGuestUserName)).isFalse();
-
-        UserInfo adminInfo = new UserInfo(/* id= */10, "admin", UserInfo.FLAG_ADMIN);
-        mockGetUsers(adminInfo);
-
-        assertThat(mCarUserManagerHelper.removeUser(adminInfo, mGuestUserName))
-            .isEqualTo(false);
-    }
-
-    @Test
-    public void testSwitchToGuest() {
-        mCarUserManagerHelper.startGuestSession(mGuestUserName);
-        verify(mUserManager).createGuest(mContext, mGuestUserName);
-
-        UserInfo guestInfo = new UserInfo(/* id= */21, mGuestUserName, UserInfo.FLAG_GUEST);
-        doReturn(guestInfo).when(mUserManager).createGuest(mContext, mGuestUserName);
-        mCarUserManagerHelper.startGuestSession(mGuestUserName);
-        verify(mActivityManager).switchUser(21);
-    }
-
-    @Test
-    public void testSwitchToId() {
-        int userIdToSwitchTo = mForegroundUserId + 2;
-        doReturn(true).when(mActivityManager).switchUser(userIdToSwitchTo);
-
-        assertThat(mCarUserManagerHelper.switchToUserId(userIdToSwitchTo)).isTrue();
-        verify(mActivityManager).switchUser(userIdToSwitchTo);
-    }
-
-    @Test
-    public void testSwitchToForegroundIdExitsEarly() {
-        doReturn(true).when(mActivityManager).switchUser(mForegroundUserId);
-
-        assertThat(mCarUserManagerHelper.switchToUserId(mForegroundUserId)).isFalse();
-        verify(mActivityManager, never()).switchUser(mForegroundUserId);
-    }
-
-    @Test
-    public void testCannotSwitchIfSwitchingNotAllowed() {
-        int userIdToSwitchTo = mForegroundUserId + 2;
-        doReturn(true).when(mActivityManager).switchUser(userIdToSwitchTo);
-        doReturn(true).when(mUserManager).hasUserRestriction(UserManager.DISALLOW_USER_SWITCH);
-        assertThat(mCarUserManagerHelper.switchToUserId(userIdToSwitchTo)).isFalse();
-        verify(mActivityManager, never()).switchUser(userIdToSwitchTo);
-    }
-
-    @Test
-    public void testGetUserIcon() {
-        mCarUserManagerHelper.getUserIcon(mCurrentProcessUser);
-        verify(mUserManager).getUserIcon(mCurrentProcessUser.id);
-    }
-
-    @Test
-    public void testScaleUserIcon() {
-        Bitmap fakeIcon = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
-        Drawable scaledIcon = mCarUserManagerHelper.scaleUserIcon(fakeIcon, 300);
-        assertThat(scaledIcon.getIntrinsicWidth()).isEqualTo(300);
-        assertThat(scaledIcon.getIntrinsicHeight()).isEqualTo(300);
-    }
-
-    @Test
-    public void testSetUserName() {
-        UserInfo testInfo = createUserInfoForId(mCurrentProcessUser.id + 3);
-        String newName = "New Test Name";
-        mCarUserManagerHelper.setUserName(testInfo, newName);
-        verify(mUserManager).setUserName(mCurrentProcessUser.id + 3, newName);
-    }
-
-    @Test
-    public void testIsCurrentProcessSystemUser() {
-        doReturn(true).when(mUserManager).isAdminUser();
-        assertThat(mCarUserManagerHelper.isCurrentProcessAdminUser()).isTrue();
-
-        doReturn(false).when(mUserManager).isAdminUser();
-        assertThat(mCarUserManagerHelper.isCurrentProcessAdminUser()).isFalse();
-    }
-
-    @Test
-    public void testGrantAdminPermissions() {
-        int userId = 30;
-        UserInfo testInfo = createUserInfoForId(userId);
-
-        // Test that non-admins cannot grant admin permissions.
-        doReturn(false).when(mUserManager).isAdminUser(); // Current user non-admin.
-        mCarUserManagerHelper.grantAdminPermissions(testInfo);
-        verify(mUserManager, never()).setUserAdmin(userId);
-
-        // Admins can grant admin permissions.
-        doReturn(true).when(mUserManager).isAdminUser();
-        mCarUserManagerHelper.grantAdminPermissions(testInfo);
-        verify(mUserManager).setUserAdmin(userId);
-    }
-
-    @Test
-    public void testSetUserRestriction() {
-        int userId = 20;
-        UserInfo testInfo = createUserInfoForId(userId);
-
-        mCarUserManagerHelper.setUserRestriction(
-                testInfo, UserManager.DISALLOW_ADD_USER, /* enable= */ true);
-        verify(mUserManager).setUserRestriction(
-                UserManager.DISALLOW_ADD_USER, true, UserHandle.of(userId));
-
-        mCarUserManagerHelper.setUserRestriction(
-                testInfo, UserManager.DISALLOW_REMOVE_USER, /* enable= */ false);
-        verify(mUserManager).setUserRestriction(
-                UserManager.DISALLOW_REMOVE_USER, false, UserHandle.of(userId));
-    }
-
-    @Test
-    public void testDefaultNonAdminRestrictions() {
-        String testUserName = "Test User";
-        int userId = 20;
-        UserInfo newNonAdmin = createUserInfoForId(userId);
-
-        doReturn(newNonAdmin).when(mUserManager).createUser(testUserName, /* flags= */ 0);
-
-        mCarUserManagerHelper.createNewNonAdminUser(testUserName);
-
-        verify(mUserManager).setUserRestriction(
-                UserManager.DISALLOW_FACTORY_RESET, /* enable= */ true, UserHandle.of(userId));
-        verify(mUserManager).setUserRestriction(
-                UserManager.DISALLOW_SMS, /* enable= */ false, UserHandle.of(userId));
-        verify(mUserManager).setUserRestriction(
-                UserManager.DISALLOW_OUTGOING_CALLS, /* enable= */ false, UserHandle.of(userId));
-    }
-
-    @Test
-    public void testDefaultGuestRestrictions() {
-        int guestRestrictionsExpectedCount = 7;
-
-        ArgumentCaptor<Bundle> bundleCaptor = ArgumentCaptor.forClass(Bundle.class);
-        mCarUserManagerHelper.initDefaultGuestRestrictions();
-
-        verify(mUserManager).setDefaultGuestRestrictions(bundleCaptor.capture());
-        Bundle guestRestrictions = bundleCaptor.getValue();
-
-        assertThat(guestRestrictions.keySet()).hasSize(guestRestrictionsExpectedCount);
-        assertThat(guestRestrictions.getBoolean(UserManager.DISALLOW_FACTORY_RESET)).isTrue();
-        assertThat(guestRestrictions.getBoolean(UserManager.DISALLOW_REMOVE_USER)).isTrue();
-        assertThat(guestRestrictions.getBoolean(UserManager.DISALLOW_MODIFY_ACCOUNTS)).isTrue();
-        assertThat(guestRestrictions.getBoolean(UserManager.DISALLOW_OUTGOING_CALLS)).isTrue();
-        assertThat(guestRestrictions.getBoolean(UserManager.DISALLOW_SMS)).isTrue();
-        assertThat(guestRestrictions.getBoolean(UserManager.DISALLOW_INSTALL_APPS)).isTrue();
-        assertThat(guestRestrictions.getBoolean(UserManager.DISALLOW_UNINSTALL_APPS)).isTrue();
-    }
-
-    @Test
-    public void testGrantingAdminPermissionsRemovesNonAdminRestrictions() {
-        int testUserId = 30;
-        boolean restrictionEnabled = false;
-        UserInfo testInfo = createUserInfoForId(testUserId);
-
-        // Only admins can grant permissions.
-        doReturn(true).when(mUserManager).isAdminUser();
-
-        mCarUserManagerHelper.grantAdminPermissions(testInfo);
-
-        verify(mUserManager).setUserRestriction(
-                UserManager.DISALLOW_FACTORY_RESET, restrictionEnabled, UserHandle.of(testUserId));
-    }
-
-    @Test
-    public void testRegisterUserChangeReceiver() {
-        mCarUserManagerHelper.registerOnUsersUpdateListener(mTestListener);
-
-        ArgumentCaptor<BroadcastReceiver> receiverCaptor =
-                ArgumentCaptor.forClass(BroadcastReceiver.class);
-        ArgumentCaptor<UserHandle> handleCaptor = ArgumentCaptor.forClass(UserHandle.class);
-        ArgumentCaptor<IntentFilter> filterCaptor = ArgumentCaptor.forClass(IntentFilter.class);
-        ArgumentCaptor<String> permissionCaptor = ArgumentCaptor.forClass(String.class);
-        ArgumentCaptor<Handler> handlerCaptor = ArgumentCaptor.forClass(Handler.class);
-
-        verify(mContext).registerReceiverAsUser(
-                receiverCaptor.capture(),
-                handleCaptor.capture(),
-                filterCaptor.capture(),
-                permissionCaptor.capture(),
-                handlerCaptor.capture());
-
-        // Verify we're listening to Intents from ALL users.
-        assertThat(handleCaptor.getValue()).isEqualTo(UserHandle.ALL);
-
-        // Verify the presence of each intent in the filter.
-        // Verify the exact number of filters. Every time a new intent is added, this test should
-        // get updated.
-        assertThat(filterCaptor.getValue().countActions()).isEqualTo(6);
-        assertThat(filterCaptor.getValue().hasAction(Intent.ACTION_USER_REMOVED)).isTrue();
-        assertThat(filterCaptor.getValue().hasAction(Intent.ACTION_USER_ADDED)).isTrue();
-        assertThat(filterCaptor.getValue().hasAction(Intent.ACTION_USER_INFO_CHANGED)).isTrue();
-        assertThat(filterCaptor.getValue().hasAction(Intent.ACTION_USER_SWITCHED)).isTrue();
-        assertThat(filterCaptor.getValue().hasAction(Intent.ACTION_USER_STOPPED)).isTrue();
-        assertThat(filterCaptor.getValue().hasAction(Intent.ACTION_USER_UNLOCKED)).isTrue();
-
-        // Verify that calling the receiver calls the listener.
-        receiverCaptor.getValue().onReceive(mContext, new Intent());
-        verify(mTestListener).onUsersUpdate();
-
-        assertThat(permissionCaptor.getValue()).isNull();
-        assertThat(handlerCaptor.getValue()).isNull();
-
-        // Unregister the receiver.
-        mCarUserManagerHelper.unregisterOnUsersUpdateListener(mTestListener);
-        verify(mContext).unregisterReceiver(receiverCaptor.getValue());
-    }
-
-    @Test
-    public void testMultipleRegistrationsOfSameListener() {
-        CarUserManagerHelper.OnUsersUpdateListener listener =
-                Mockito.mock(CarUserManagerHelper.OnUsersUpdateListener.class);
-
-        ArgumentCaptor<BroadcastReceiver> receiverCaptor =
-                ArgumentCaptor.forClass(BroadcastReceiver.class);
-
-        mCarUserManagerHelper.registerOnUsersUpdateListener(listener);
-        mCarUserManagerHelper.registerOnUsersUpdateListener(listener);
-        // Even for multiple registrations of the same listener, broadcast receiver registered once.
-        verify(mContext, times(1))
-                .registerReceiverAsUser(receiverCaptor.capture(), any(), any(), any(), any());
-
-        // Verify that calling the receiver calls the listener.
-        receiverCaptor.getValue().onReceive(mContext, new Intent());
-        verify(listener).onUsersUpdate();
-
-        // Verify that a single removal unregisters the listener.
-        mCarUserManagerHelper.unregisterOnUsersUpdateListener(listener);
-        verify(mContext).unregisterReceiver(any());
-    }
-
-    @Test
-    public void testMultipleUnregistrationsOfTheSameListener() {
-        CarUserManagerHelper.OnUsersUpdateListener listener =
-                Mockito.mock(CarUserManagerHelper.OnUsersUpdateListener.class);
-        mCarUserManagerHelper.registerOnUsersUpdateListener(listener);
-
-        // Verify that a multiple unregistrations cause only one unregister for broadcast receiver.
-        mCarUserManagerHelper.unregisterOnUsersUpdateListener(listener);
-        mCarUserManagerHelper.unregisterOnUsersUpdateListener(listener);
-        mCarUserManagerHelper.unregisterOnUsersUpdateListener(listener);
-        verify(mContext, times(1)).unregisterReceiver(any());
-    }
-
-    @Test
-    public void testUnregisterReceiverCalledAfterAllListenersUnregister() {
-        CarUserManagerHelper.OnUsersUpdateListener listener1 =
-                Mockito.mock(CarUserManagerHelper.OnUsersUpdateListener.class);
-        CarUserManagerHelper.OnUsersUpdateListener listener2 =
-                Mockito.mock(CarUserManagerHelper.OnUsersUpdateListener.class);
-
-        mCarUserManagerHelper.registerOnUsersUpdateListener(listener1);
-        mCarUserManagerHelper.registerOnUsersUpdateListener(listener2);
-
-        mCarUserManagerHelper.unregisterOnUsersUpdateListener(listener1);
-        verify(mContext, never()).unregisterReceiver(any());
-
-        mCarUserManagerHelper.unregisterOnUsersUpdateListener(listener2);
-        verify(mContext, times(1)).unregisterReceiver(any());
-    }
-
-    @Test
-    public void testRegisteringMultipleListeners() {
-        CarUserManagerHelper.OnUsersUpdateListener listener1 =
-                Mockito.mock(CarUserManagerHelper.OnUsersUpdateListener.class);
-        CarUserManagerHelper.OnUsersUpdateListener listener2 =
-                Mockito.mock(CarUserManagerHelper.OnUsersUpdateListener.class);
-        ArgumentCaptor<BroadcastReceiver> receiverCaptor =
-                ArgumentCaptor.forClass(BroadcastReceiver.class);
-
-        mCarUserManagerHelper.registerOnUsersUpdateListener(listener1);
-        mCarUserManagerHelper.registerOnUsersUpdateListener(listener2);
-        verify(mContext, times(1))
-                .registerReceiverAsUser(receiverCaptor.capture(), any(), any(), any(), any());
-
-        // Verify that calling the receiver calls both listeners.
-        receiverCaptor.getValue().onReceive(mContext, new Intent());
-        verify(listener1).onUsersUpdate();
-        verify(listener2).onUsersUpdate();
-    }
-
-    @Test
-    public void testUnregisteringListenerStopsUpdatesForListener() {
-        CarUserManagerHelper.OnUsersUpdateListener listener1 =
-                Mockito.mock(CarUserManagerHelper.OnUsersUpdateListener.class);
-        CarUserManagerHelper.OnUsersUpdateListener listener2 =
-                Mockito.mock(CarUserManagerHelper.OnUsersUpdateListener.class);
-        ArgumentCaptor<BroadcastReceiver> receiverCaptor =
-                ArgumentCaptor.forClass(BroadcastReceiver.class);
-
-        mCarUserManagerHelper.registerOnUsersUpdateListener(listener1);
-        mCarUserManagerHelper.registerOnUsersUpdateListener(listener2);
-        verify(mContext, times(1))
-                .registerReceiverAsUser(receiverCaptor.capture(), any(), any(), any(), any());
-
-        // Unregister listener2
-        mCarUserManagerHelper.unregisterOnUsersUpdateListener(listener2);
-
-        // Verify that calling the receiver calls only one listener.
-        receiverCaptor.getValue().onReceive(mContext, new Intent());
-        verify(listener1).onUsersUpdate();
-        verify(listener2, never()).onUsersUpdate();
-    }
-
-    @Test
-    public void testGetInitialUserWithValidLastActiveUser() {
-        SystemProperties.set("android.car.systemuser.headless", "true");
-        int lastActiveUserId = 12;
-
-        UserInfo otherUser1 = createUserInfoForId(lastActiveUserId - 2);
-        UserInfo otherUser2 = createUserInfoForId(lastActiveUserId - 1);
-        UserInfo otherUser3 = createUserInfoForId(lastActiveUserId);
-
-        setLastActiveUser(lastActiveUserId);
-        mockGetUsers(mSystemUser, otherUser1, otherUser2, otherUser3);
-
-        assertThat(mCarUserManagerHelper.getInitialUser()).isEqualTo(lastActiveUserId);
-    }
-
-    @Test
-    public void testGetInitialUserWithNonExistLastActiveUser() {
-        SystemProperties.set("android.car.systemuser.headless", "true");
-        int lastActiveUserId = 12;
-
-        UserInfo otherUser1 = createUserInfoForId(lastActiveUserId - 2);
-        UserInfo otherUser2 = createUserInfoForId(lastActiveUserId - 1);
-
-        setLastActiveUser(lastActiveUserId);
-        mockGetUsers(mSystemUser, otherUser1, otherUser2);
-
-        assertThat(mCarUserManagerHelper.getInitialUser()).isEqualTo(lastActiveUserId - 2);
-    }
-
-    @Test
-    public void test_CreateNewOrFindExistingGuest_ReturnsExistingGuest() {
-        // Create two users and a guest user.
-        UserInfo user1 = createUserInfoForId(10);
-        UserInfo user2 = createUserInfoForId(12);
-        UserInfo user3 = new UserInfo(/* id= */ 13, /* name = */ "user13", UserInfo.FLAG_GUEST);
-
-        mockGetUsers(user1, user2, user3);
-        doReturn(null).when(mUserManager).createGuest(any(), any());
-
-        UserInfo guest = mCarUserManagerHelper.createNewOrFindExistingGuest(mGuestUserName);
-        assertThat(guest).isEqualTo(user3);
-    }
-
-    @Test
-    public void test_CreateNewOrFindExistingGuest_CreatesNewGuest_IfNoExisting() {
-        // Create two users.
-        UserInfo user1 = createUserInfoForId(10);
-        UserInfo user2 = createUserInfoForId(12);
-
-        mockGetUsers(user1, user2);
-
-        // Create a user for the "new guest" user.
-        UserInfo guestInfo = new UserInfo(/* id= */21, mGuestUserName, UserInfo.FLAG_GUEST);
-        doReturn(guestInfo).when(mUserManager).createGuest(mContext, mGuestUserName);
-
-        UserInfo guest = mCarUserManagerHelper.createNewOrFindExistingGuest(mGuestUserName);
-        verify(mUserManager).createGuest(mContext, mGuestUserName);
-        assertThat(guest).isEqualTo(guestInfo);
-    }
-
-    private UserInfo createUserInfoForId(int id) {
-        UserInfo userInfo = new UserInfo();
-        userInfo.id = id;
-        return userInfo;
-    }
-
-    private void mockGetUsers(UserInfo... users) {
-        List<UserInfo> testUsers = new ArrayList<>();
-        for (UserInfo user: users) {
-            testUsers.add(user);
-        }
-        doReturn(testUsers).when(mUserManager).getUsers(true);
-    }
-
-    private void setLastActiveUser(int userId) {
-        Settings.Global.putInt(InstrumentationRegistry.getTargetContext().getContentResolver(),
-                Settings.Global.LAST_ACTIVE_USER_ID, userId);
-    }
-}
diff --git a/tests/carservice_unit_test/src/com/android/car/hal/InputHalServiceTest.java b/tests/carservice_unit_test/src/com/android/car/hal/InputHalServiceTest.java
new file mode 100644
index 0000000..32f8e1d
--- /dev/null
+++ b/tests/carservice_unit_test/src/com/android/car/hal/InputHalServiceTest.java
@@ -0,0 +1,240 @@
+/*
+ * Copyright (C) 2019 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.car.hal;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.reset;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.hardware.automotive.vehicle.V2_0.VehicleHwKeyInputAction;
+import android.hardware.automotive.vehicle.V2_0.VehiclePropConfig;
+import android.hardware.automotive.vehicle.V2_0.VehiclePropValue;
+import android.hardware.automotive.vehicle.V2_0.VehicleProperty;
+import android.view.KeyEvent;
+
+import androidx.test.runner.AndroidJUnit4;
+
+import com.android.car.vehiclehal.test.VehiclePropConfigBuilder;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Set;
+import java.util.function.LongSupplier;
+
+@RunWith(AndroidJUnit4.class)
+public class InputHalServiceTest {
+    @Rule public MockitoRule mMockitoRule = MockitoJUnit.rule();
+
+    @Mock VehicleHal mVehicleHal;
+    @Mock InputHalService.InputListener mInputListener;
+    @Mock LongSupplier mUptimeSupplier;
+
+    private static final VehiclePropConfig HW_KEY_INPUT_CONFIG =
+            VehiclePropConfigBuilder.newBuilder(VehicleProperty.HW_KEY_INPUT).build();
+    private static final int DISPLAY = 42;
+
+    private enum Key { DOWN, UP }
+
+    private InputHalService mInputHalService;
+
+    @Before
+    public void setUp() {
+        when(mUptimeSupplier.getAsLong()).thenReturn(0L);
+        mInputHalService = new InputHalService(mVehicleHal, mUptimeSupplier);
+        mInputHalService.init();
+    }
+
+    @After
+    public void tearDown() {
+        mInputHalService.release();
+        mInputHalService = null;
+    }
+
+    @Test
+    public void ignoresSetListener_beforeKeyInputSupported() {
+        assertThat(mInputHalService.isKeyInputSupported()).isFalse();
+
+        mInputHalService.setInputListener(mInputListener);
+
+        mInputHalService.handleHalEvents(
+                ImmutableList.of(makeKeyPropValue(Key.DOWN, KeyEvent.KEYCODE_ENTER)));
+        verify(mInputListener, never()).onKeyEvent(any(), anyInt());
+    }
+
+    @Test
+    public void takesKeyInputProperty() {
+        Set<VehiclePropConfig> offeredProps = ImmutableSet.of(
+                VehiclePropConfigBuilder.newBuilder(VehicleProperty.ABS_ACTIVE).build(),
+                HW_KEY_INPUT_CONFIG,
+                VehiclePropConfigBuilder.newBuilder(VehicleProperty.CURRENT_GEAR).build());
+
+        Collection<VehiclePropConfig> takenProps =
+                mInputHalService.takeSupportedProperties(offeredProps);
+
+        assertThat(takenProps).containsExactly(HW_KEY_INPUT_CONFIG);
+        assertThat(mInputHalService.isKeyInputSupported()).isTrue();
+    }
+
+    @Test
+    public void dispatchesInputEvent_single_toListener() {
+        subscribeListener();
+
+        KeyEvent event = dispatchSingleEvent(Key.DOWN, KeyEvent.KEYCODE_ENTER);
+        assertThat(event.getAction()).isEqualTo(KeyEvent.ACTION_DOWN);
+        assertThat(event.getKeyCode()).isEqualTo(KeyEvent.KEYCODE_ENTER);
+    }
+
+    @Test
+    public void dispatchesInputEvent_multiple_toListener() {
+        subscribeListener();
+
+        // KeyEvents get recycled, so we can't just use ArgumentCaptor#getAllValues here.
+        // We need to make a copy of the information we need at the time of the call.
+        List<KeyEvent> events = new ArrayList<>();
+        doAnswer(inv -> {
+            KeyEvent event = inv.getArgument(0);
+            events.add(event.copy());
+            return null;
+        }).when(mInputListener).onKeyEvent(any(), eq(DISPLAY));
+
+        mInputHalService.handleHalEvents(
+                ImmutableList.of(
+                        makeKeyPropValue(Key.DOWN, KeyEvent.KEYCODE_ENTER),
+                        makeKeyPropValue(Key.DOWN, KeyEvent.KEYCODE_MENU)));
+
+        assertThat(events.get(0).getKeyCode()).isEqualTo(KeyEvent.KEYCODE_ENTER);
+        assertThat(events.get(1).getKeyCode()).isEqualTo(KeyEvent.KEYCODE_MENU);
+
+        events.forEach(KeyEvent::recycle);
+    }
+
+    @Test
+    public void handlesRepeatedKeys() {
+        subscribeListener();
+
+        KeyEvent event = dispatchSingleEvent(Key.DOWN, KeyEvent.KEYCODE_ENTER);
+        assertThat(event.getAction()).isEqualTo(KeyEvent.ACTION_DOWN);
+        assertThat(event.getKeyCode()).isEqualTo(KeyEvent.KEYCODE_ENTER);
+        assertThat(event.getEventTime()).isEqualTo(0L);
+        assertThat(event.getDownTime()).isEqualTo(0L);
+        assertThat(event.getRepeatCount()).isEqualTo(0);
+
+        when(mUptimeSupplier.getAsLong()).thenReturn(5L);
+        event = dispatchSingleEvent(Key.DOWN, KeyEvent.KEYCODE_ENTER);
+
+        assertThat(event.getAction()).isEqualTo(KeyEvent.ACTION_DOWN);
+        assertThat(event.getKeyCode()).isEqualTo(KeyEvent.KEYCODE_ENTER);
+        assertThat(event.getEventTime()).isEqualTo(5L);
+        assertThat(event.getDownTime()).isEqualTo(5L);
+        assertThat(event.getRepeatCount()).isEqualTo(1);
+
+        when(mUptimeSupplier.getAsLong()).thenReturn(10L);
+        event = dispatchSingleEvent(Key.UP, KeyEvent.KEYCODE_ENTER);
+
+        assertThat(event.getAction()).isEqualTo(KeyEvent.ACTION_UP);
+        assertThat(event.getKeyCode()).isEqualTo(KeyEvent.KEYCODE_ENTER);
+        assertThat(event.getEventTime()).isEqualTo(10L);
+        assertThat(event.getDownTime()).isEqualTo(5L);
+        assertThat(event.getRepeatCount()).isEqualTo(0);
+
+        when(mUptimeSupplier.getAsLong()).thenReturn(15L);
+        event = dispatchSingleEvent(Key.DOWN, KeyEvent.KEYCODE_ENTER);
+
+        assertThat(event.getAction()).isEqualTo(KeyEvent.ACTION_DOWN);
+        assertThat(event.getKeyCode()).isEqualTo(KeyEvent.KEYCODE_ENTER);
+        assertThat(event.getEventTime()).isEqualTo(15L);
+        assertThat(event.getDownTime()).isEqualTo(15L);
+        assertThat(event.getRepeatCount()).isEqualTo(0);
+    }
+
+    @Test
+    public void handlesKeyUp_withoutKeyDown() {
+        subscribeListener();
+
+        when(mUptimeSupplier.getAsLong()).thenReturn(42L);
+        KeyEvent event = dispatchSingleEvent(Key.UP, KeyEvent.KEYCODE_ENTER);
+
+        assertThat(event.getEventTime()).isEqualTo(42L);
+        assertThat(event.getDownTime()).isEqualTo(42L);
+        assertThat(event.getRepeatCount()).isEqualTo(0);
+    }
+
+    @Test
+    public void separateKeyDownEvents_areIndependent() {
+        subscribeListener();
+
+        when(mUptimeSupplier.getAsLong()).thenReturn(27L);
+        dispatchSingleEvent(Key.DOWN, KeyEvent.KEYCODE_ENTER);
+
+        when(mUptimeSupplier.getAsLong()).thenReturn(42L);
+        KeyEvent event = dispatchSingleEvent(Key.DOWN, KeyEvent.KEYCODE_MENU);
+
+        assertThat(event.getKeyCode()).isEqualTo(KeyEvent.KEYCODE_MENU);
+        assertThat(event.getDownTime()).isEqualTo(42L);
+        assertThat(event.getRepeatCount()).isEqualTo(0);
+    }
+
+    private void subscribeListener() {
+        mInputHalService.takeSupportedProperties(ImmutableSet.of(HW_KEY_INPUT_CONFIG));
+        assertThat(mInputHalService.isKeyInputSupported()).isTrue();
+
+        mInputHalService.setInputListener(mInputListener);
+        verify(mVehicleHal).subscribeProperty(mInputHalService, VehicleProperty.HW_KEY_INPUT);
+    }
+
+
+    private VehiclePropValue makeKeyPropValue(Key action, int code) {
+        VehiclePropValue v = new VehiclePropValue();
+        v.prop = VehicleProperty.HW_KEY_INPUT;
+        v.value.int32Values.add(
+                (action == Key.DOWN
+                        ? VehicleHwKeyInputAction.ACTION_DOWN
+                        : VehicleHwKeyInputAction.ACTION_UP));
+        v.value.int32Values.add(code);
+        v.value.int32Values.add(DISPLAY);
+        return v;
+    }
+
+    private KeyEvent dispatchSingleEvent(Key action, int code) {
+        ArgumentCaptor<KeyEvent> captor = ArgumentCaptor.forClass(KeyEvent.class);
+        reset(mInputListener);
+        mInputHalService.handleHalEvents(ImmutableList.of(makeKeyPropValue(action, code)));
+        verify(mInputListener).onKeyEvent(captor.capture(), eq(DISPLAY));
+        reset(mInputListener);
+        return captor.getValue();
+    }
+}
diff --git a/tests/carservice_unit_test/src/com/android/car/hal/VmsHalServiceTest.java b/tests/carservice_unit_test/src/com/android/car/hal/VmsHalServiceTest.java
new file mode 100644
index 0000000..3e9eb56
--- /dev/null
+++ b/tests/carservice_unit_test/src/com/android/car/hal/VmsHalServiceTest.java
@@ -0,0 +1,167 @@
+/*
+ * Copyright (C) 2018 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.car.hal;
+
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.verify;
+
+import android.car.vms.VmsAssociatedLayer;
+import android.car.vms.VmsAvailableLayers;
+import android.car.vms.VmsLayer;
+import android.car.vms.VmsLayerDependency;
+import android.car.vms.VmsLayersOffering;
+import android.os.Binder;
+import android.os.IBinder;
+
+import androidx.test.runner.AndroidJUnit4;
+
+import com.google.android.collect.Sets;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+
+@RunWith(AndroidJUnit4.class)
+public class VmsHalServiceTest {
+    @Rule public MockitoRule mockito = MockitoJUnit.rule();
+    @Mock private VehicleHal mMockVehicleHal;
+    @Mock private VmsHalService.VmsHalSubscriberListener mMockHalSusbcriber;
+    private IBinder mToken;
+    private VmsHalService mHalService;
+
+    @Before
+    public void setUp() throws Exception {
+        mToken = new Binder();
+        mHalService = new VmsHalService(mMockVehicleHal);
+        mHalService.addSubscriberListener(mMockHalSusbcriber);
+    }
+
+    @Test
+    public void testSetPublisherLayersOffering() {
+        VmsLayer layer = new VmsLayer(1, 2, 3);
+        VmsLayersOffering offering = new VmsLayersOffering(
+                Sets.newHashSet(new VmsLayerDependency(layer)), 12345);
+        mHalService.setPublisherLayersOffering(mToken, offering);
+
+        VmsAssociatedLayer associatedLayer = new VmsAssociatedLayer(layer, Sets.newHashSet(12345));
+        verify(mMockHalSusbcriber).onLayersAvaiabilityChange(eq(new VmsAvailableLayers(
+                Sets.newHashSet(associatedLayer),
+                1)));
+    }
+
+    @Test
+    public void testSetPublisherLayersOffering_Repeated() {
+        VmsLayer layer = new VmsLayer(1, 2, 3);
+        VmsLayersOffering offering = new VmsLayersOffering(
+                Sets.newHashSet(new VmsLayerDependency(layer)), 12345);
+        mHalService.setPublisherLayersOffering(mToken, offering);
+        mHalService.setPublisherLayersOffering(mToken, offering);
+
+        VmsAssociatedLayer associatedLayer = new VmsAssociatedLayer(layer, Sets.newHashSet(12345));
+        verify(mMockHalSusbcriber).onLayersAvaiabilityChange(eq(new VmsAvailableLayers(
+                Sets.newHashSet(associatedLayer),
+                1)));
+        verify(mMockHalSusbcriber).onLayersAvaiabilityChange(eq(new VmsAvailableLayers(
+                Sets.newHashSet(associatedLayer),
+                2)));
+
+    }
+
+    @Test
+    public void testSetPublisherLayersOffering_MultiplePublishers() {
+        VmsLayer layer = new VmsLayer(1, 2, 3);
+        VmsLayersOffering offering = new VmsLayersOffering(
+                Sets.newHashSet(new VmsLayerDependency(layer)), 12345);
+        VmsLayersOffering offering2 = new VmsLayersOffering(
+                Sets.newHashSet(new VmsLayerDependency(layer)), 54321);
+        mHalService.setPublisherLayersOffering(mToken, offering);
+        mHalService.setPublisherLayersOffering(new Binder(), offering2);
+
+        verify(mMockHalSusbcriber).onLayersAvaiabilityChange(eq(new VmsAvailableLayers(
+                Sets.newHashSet(new VmsAssociatedLayer(layer, Sets.newHashSet(12345))),
+                1)));
+        verify(mMockHalSusbcriber).onLayersAvaiabilityChange(eq(new VmsAvailableLayers(
+                Sets.newHashSet(new VmsAssociatedLayer(layer, Sets.newHashSet(12345, 54321))),
+                2)));
+
+    }
+
+    @Test
+    public void testSetPublisherLayersOffering_MultiplePublishers_SharedToken() {
+        VmsLayer layer = new VmsLayer(1, 2, 3);
+        VmsLayersOffering offering = new VmsLayersOffering(
+                Sets.newHashSet(new VmsLayerDependency(layer)), 12345);
+        VmsLayersOffering offering2 = new VmsLayersOffering(
+                Sets.newHashSet(new VmsLayerDependency(layer)), 54321);
+        mHalService.setPublisherLayersOffering(mToken, offering);
+        mHalService.setPublisherLayersOffering(mToken, offering2);
+
+        verify(mMockHalSusbcriber).onLayersAvaiabilityChange(eq(new VmsAvailableLayers(
+                Sets.newHashSet(new VmsAssociatedLayer(layer, Sets.newHashSet(12345))),
+                1)));
+        verify(mMockHalSusbcriber).onLayersAvaiabilityChange(eq(new VmsAvailableLayers(
+                Sets.newHashSet(new VmsAssociatedLayer(layer, Sets.newHashSet(12345, 54321))),
+                2)));
+    }
+
+    @Test
+    public void testSetPublisherLayersOffering_MultiplePublishers_MultipleLayers() {
+        VmsLayer layer = new VmsLayer(1, 2, 3);
+        VmsLayer layer2 = new VmsLayer(2, 2, 3);
+        VmsLayersOffering offering = new VmsLayersOffering(
+                Sets.newHashSet(new VmsLayerDependency(layer)), 12345);
+        VmsLayersOffering offering2 = new VmsLayersOffering(
+                Sets.newHashSet(new VmsLayerDependency(layer2)), 54321);
+        mHalService.setPublisherLayersOffering(mToken, offering);
+        mHalService.setPublisherLayersOffering(new Binder(), offering2);
+
+        verify(mMockHalSusbcriber).onLayersAvaiabilityChange(eq(new VmsAvailableLayers(
+                Sets.newHashSet(new VmsAssociatedLayer(layer, Sets.newHashSet(12345))),
+                1)));
+        verify(mMockHalSusbcriber).onLayersAvaiabilityChange(eq(new VmsAvailableLayers(
+                Sets.newHashSet(
+                        new VmsAssociatedLayer(layer, Sets.newHashSet(12345)),
+                        new VmsAssociatedLayer(layer2, Sets.newHashSet(54321))),
+                2)));
+
+    }
+
+    @Test
+    public void testSetPublisherLayersOffering_MultiplePublishers_MultipleLayers_SharedToken() {
+        VmsLayer layer = new VmsLayer(1, 2, 3);
+        VmsLayer layer2 = new VmsLayer(2, 2, 3);
+        VmsLayersOffering offering = new VmsLayersOffering(
+                Sets.newHashSet(new VmsLayerDependency(layer)), 12345);
+        VmsLayersOffering offering2 = new VmsLayersOffering(
+                Sets.newHashSet(new VmsLayerDependency(layer2)), 54321);
+        mHalService.setPublisherLayersOffering(mToken, offering);
+        mHalService.setPublisherLayersOffering(mToken, offering2);
+
+        verify(mMockHalSusbcriber).onLayersAvaiabilityChange(eq(new VmsAvailableLayers(
+                Sets.newHashSet(new VmsAssociatedLayer(layer, Sets.newHashSet(12345))),
+                1)));
+        verify(mMockHalSusbcriber).onLayersAvaiabilityChange(eq(new VmsAvailableLayers(
+                Sets.newHashSet(
+                        new VmsAssociatedLayer(layer, Sets.newHashSet(12345)),
+                        new VmsAssociatedLayer(layer2, Sets.newHashSet(54321))),
+                2)));
+
+    }
+}
diff --git a/tests/carservice_unit_test/src/com/android/car/user/CarUserServiceTest.java b/tests/carservice_unit_test/src/com/android/car/user/CarUserServiceTest.java
index 2e3386b..b8bccf3 100644
--- a/tests/carservice_unit_test/src/com/android/car/user/CarUserServiceTest.java
+++ b/tests/carservice_unit_test/src/com/android/car/user/CarUserServiceTest.java
@@ -18,10 +18,14 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.verify;
 
+import android.car.settings.CarSettings;
 import android.car.userlib.CarUserManagerHelper;
 import android.content.Context;
 import android.content.Intent;
@@ -30,7 +34,10 @@
 import android.location.LocationManager;
 import android.os.UserHandle;
 import android.os.UserManager;
-import android.support.test.runner.AndroidJUnit4;
+import android.provider.Settings;
+
+import androidx.test.InstrumentationRegistry;
+import androidx.test.runner.AndroidJUnit4;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -66,6 +73,11 @@
     @Mock
     private CarUserManagerHelper mCarUserManagerHelper;
 
+    private static final String DEFAULT_ADMIN_NAME = "defaultName";
+
+    private boolean mUser0TaskExecuted;
+
+
     /**
      * Initialize all of the objects with the @Mock annotation.
      */
@@ -74,10 +86,15 @@
         MockitoAnnotations.initMocks(this);
         doReturn(mApplicationContext).when(mMockContext).getApplicationContext();
         doReturn(mLocationManager).when(mMockContext).getSystemService(Context.LOCATION_SERVICE);
+        doReturn(InstrumentationRegistry.getTargetContext().getContentResolver())
+                .when(mMockContext).getContentResolver();
 
         mCarUserService = new CarUserService(mMockContext, mCarUserManagerHelper);
 
         doReturn(new ArrayList<>()).when(mCarUserManagerHelper).getAllUsers();
+
+        // Restore default value at the beginning of each test.
+        putSettingsInt(CarSettings.Global.DEFAULT_USER_RESTRICTIONS_SET, 0);
     }
 
     /**
@@ -86,6 +103,9 @@
      */
     @Test
     public void testRegistersToReceiveEvents() {
+        if (!mCarUserManagerHelper.isHeadlessSystemUser()) {
+            return;
+        }
         ArgumentCaptor<IntentFilter> argument = ArgumentCaptor.forClass(IntentFilter.class);
         mCarUserService.init();
         verify(mMockContext).registerReceiver(eq(mCarUserService), argument.capture());
@@ -102,7 +122,9 @@
     @Test
     public void testUnregistersEventReceivers() {
         mCarUserService.release();
-        verify(mMockContext).unregisterReceiver(mCarUserService);
+        if (mCarUserManagerHelper.isHeadlessSystemUser()) {
+            verify(mMockContext).unregisterReceiver(mCarUserService);
+        }
     }
 
     /**
@@ -115,8 +137,6 @@
         systemUser.id = UserHandle.USER_SYSTEM;
         doReturn(systemUser).when(mCarUserManagerHelper).getSystemUserInfo();
 
-        mockAdmin(10);
-
         mCarUserService.onReceive(mMockContext,
                 new Intent(Intent.ACTION_LOCKED_BOOT_COMPLETED));
 
@@ -125,12 +145,29 @@
     }
 
     /**
+     * Test that the {@link CarUserService} does not set restrictions on user 0 if they have already
+     * been set.
+     */
+    @Test
+    public void testDoesNotSetSystemUserRestrictions_IfRestrictionsAlreadySet() {
+        // Mock system user.
+        UserInfo systemUser = new UserInfo();
+        systemUser.id = UserHandle.USER_SYSTEM;
+        doReturn(systemUser).when(mCarUserManagerHelper).getSystemUserInfo();
+
+        putSettingsInt(CarSettings.Global.DEFAULT_USER_RESTRICTIONS_SET, 1);
+        mCarUserService.onReceive(mMockContext,
+                new Intent(Intent.ACTION_LOCKED_BOOT_COMPLETED));
+
+        verify(mCarUserManagerHelper, never())
+                .setUserRestriction(systemUser, UserManager.DISALLOW_MODIFY_ACCOUNTS, true);
+    }
+
+    /**
      * Test that the {@link CarUserService} disable location service for user 0 upon first run.
      */
     @Test
     public void testDisableLocationForSystemUserOnFirstRun() {
-        mockAdmin(/* adminId= */ 10);
-
         mCarUserService.onReceive(mMockContext,
                 new Intent(Intent.ACTION_LOCKED_BOOT_COMPLETED));
 
@@ -159,20 +196,59 @@
      * Test that the {@link CarUserService} sets default guest restrictions on first boot.
      */
     @Test
-    public void testInitializeGuestRestrictionsOnFirstRun() {
-        mockAdmin(/* adminId= */ 10);
-
-        mCarUserService.onReceive(mMockContext,
-                new Intent(Intent.ACTION_LOCKED_BOOT_COMPLETED));
-
+    public void testInitializeGuestRestrictions_IfNotAlreadySet() {
+        mCarUserService.onReceive(mMockContext, new Intent(Intent.ACTION_LOCKED_BOOT_COMPLETED));
         verify(mCarUserManagerHelper).initDefaultGuestRestrictions();
+        assertThat(getSettingsInt(CarSettings.Global.DEFAULT_USER_RESTRICTIONS_SET)).isEqualTo(1);
+    }
+
+    /**
+     * Test that the {@link CarUserService} does not set restrictions after they have been set once.
+     */
+    @Test
+    public void test_DoesNotInitializeGuestRestrictions_IfAlreadySet() {
+        putSettingsInt(CarSettings.Global.DEFAULT_USER_RESTRICTIONS_SET, 1);
+        mCarUserService.onReceive(mMockContext, new Intent(Intent.ACTION_LOCKED_BOOT_COMPLETED));
+        verify(mCarUserManagerHelper, never()).initDefaultGuestRestrictions();
+    }
+
+    @Test
+    public void testRunOnUser0UnlockImmediate() {
+        mUser0TaskExecuted = false;
+        mCarUserService.setUserLockStatus(UserHandle.USER_SYSTEM, true);
+        mCarUserService.runOnUser0Unlock(() -> {
+            mUser0TaskExecuted = true;
+        });
+        assertTrue(mUser0TaskExecuted);
+    }
+
+    @Test
+    public void testRunOnUser0UnlockLater() {
+        mUser0TaskExecuted = false;
+        mCarUserService.runOnUser0Unlock(() -> {
+            mUser0TaskExecuted = true;
+        });
+        assertFalse(mUser0TaskExecuted);
+        mCarUserService.setUserLockStatus(UserHandle.USER_SYSTEM, true);
+        assertTrue(mUser0TaskExecuted);
+    }
+
+    private void putSettingsInt(String key, int value) {
+        Settings.Global.putInt(InstrumentationRegistry.getTargetContext().getContentResolver(),
+                key, value);
+    }
+
+    private int getSettingsInt(String key) {
+        return Settings.Global.getInt(
+                InstrumentationRegistry.getTargetContext().getContentResolver(),
+                key, /* default= */ 0);
     }
 
     private UserInfo mockAdmin(int adminId) {
-        UserInfo admin = new UserInfo(adminId, CarUserManagerHelper.DEFAULT_FIRST_ADMIN_NAME,
+        UserInfo admin = new UserInfo(adminId, DEFAULT_ADMIN_NAME,
                 UserInfo.FLAG_ADMIN);
-        doReturn(admin).when(mCarUserManagerHelper)
-                .createNewAdminUser(CarUserManagerHelper.DEFAULT_FIRST_ADMIN_NAME);
+        doReturn(admin).when(mCarUserManagerHelper).createNewAdminUser();
+
         return admin;
     }
 }
diff --git a/tests/carservice_unit_test/src/com/android/car/vms/VmsClientManagerTest.java b/tests/carservice_unit_test/src/com/android/car/vms/VmsClientManagerTest.java
new file mode 100644
index 0000000..cd0e2a0
--- /dev/null
+++ b/tests/carservice_unit_test/src/com/android/car/vms/VmsClientManagerTest.java
@@ -0,0 +1,643 @@
+/*
+ * Copyright (C) 2019 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.car.vms;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.ArgumentMatchers.isNull;
+import static org.mockito.Mockito.atLeast;
+import static org.mockito.Mockito.reset;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.when;
+
+import android.car.userlib.CarUserManagerHelper;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.ServiceConnection;
+import android.content.pm.PackageManager;
+import android.content.pm.UserInfo;
+import android.content.res.Resources;
+import android.os.Binder;
+import android.os.Handler;
+import android.os.UserHandle;
+
+import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Captor;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+public class VmsClientManagerTest {
+    @Rule
+    public MockitoRule mMockitoRule = MockitoJUnit.rule();
+    @Mock
+    private Context mContext;
+    @Mock
+    private PackageManager mPackageManager;
+    @Mock
+    private Resources mResources;
+    @Mock
+    private CarUserManagerHelper mUserManager;
+    private UserInfo mUserInfo;
+
+    @Mock
+    private VmsClientManager.ConnectionListener mConnectionListener;
+    private VmsClientManager mClientManager;
+
+    @Captor
+    private ArgumentCaptor<ServiceConnection> mConnectionCaptor;
+
+    @Before
+    public void setUp() {
+        resetContext();
+        when(mPackageManager.isPackageAvailable(any())).thenReturn(true);
+
+        when(mResources.getInteger(
+                com.android.car.R.integer.millisecondsBeforeRebindToVmsPublisher)).thenReturn(
+                5);
+        when(mResources.getStringArray(
+                com.android.car.R.array.vmsPublisherSystemClients)).thenReturn(
+                        new String[]{
+                                "com.google.android.apps.vms.test/.VmsSystemClient"
+                        });
+        when(mResources.getStringArray(
+                com.android.car.R.array.vmsPublisherUserClients)).thenReturn(
+                        new String[]{
+                                "com.google.android.apps.vms.test/.VmsUserClient"
+                        });
+        mUserInfo = new UserInfo(10, "Driver", 0);
+        when(mUserManager.getCurrentForegroundUserInfo()).thenReturn(mUserInfo);
+
+        mClientManager = new VmsClientManager(mContext, mUserManager);
+        mClientManager.registerConnectionListener(mConnectionListener);
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        Thread.sleep(10); // Time to allow for delayed rebinds to settle
+        verify(mContext, atLeast(0)).getResources();
+        verify(mContext, atLeast(0)).getPackageManager();
+        verifyNoMoreInteractions(mContext);
+    }
+
+    @Test
+    public void testInit() {
+        mClientManager.init();
+
+        // Verify registration of boot completed receiver
+        ArgumentCaptor<IntentFilter> bootFilterCaptor = ArgumentCaptor.forClass(IntentFilter.class);
+        verify(mContext).registerReceiver(eq(mClientManager.mBootCompletedReceiver),
+                bootFilterCaptor.capture());
+        IntentFilter bootFilter = bootFilterCaptor.getValue();
+        assertEquals(1, bootFilter.countActions());
+        assertTrue(bootFilter.hasAction(Intent.ACTION_LOCKED_BOOT_COMPLETED));
+
+        // Verify registration of user switch receiver
+        ArgumentCaptor<IntentFilter> userFilterCaptor = ArgumentCaptor.forClass(IntentFilter.class);
+        verify(mContext).registerReceiverAsUser(eq(mClientManager.mUserSwitchReceiver),
+                eq(UserHandle.ALL), userFilterCaptor.capture(), isNull(), isNull());
+        IntentFilter userEventFilter = userFilterCaptor.getValue();
+        assertEquals(2, userEventFilter.countActions());
+        assertTrue(userEventFilter.hasAction(Intent.ACTION_USER_SWITCHED));
+        assertTrue(userEventFilter.hasAction(Intent.ACTION_USER_UNLOCKED));
+    }
+
+    @Test
+    public void testRelease() {
+        mClientManager.release();
+
+        // Verify both receivers are unregistered
+        verify(mContext).unregisterReceiver(mClientManager.mBootCompletedReceiver);
+        verify(mContext).unregisterReceiver(mClientManager.mUserSwitchReceiver);
+    }
+
+    @Test
+    public void testLockedBootCompleted() {
+        notifyLockedBootCompleted();
+        notifyLockedBootCompleted();
+
+        // Multiple events should only trigger a single bind, when successful
+        verifySystemBind(1);
+    }
+
+    @Test
+    public void testLockedBootCompleted_BindFailed() {
+        when(mContext.bindServiceAsUser(any(), any(), anyInt(), any(), any())).thenReturn(false);
+        notifyLockedBootCompleted();
+        notifyLockedBootCompleted();
+
+        // Failure state will trigger another attempt on event
+        verifySystemBind(2);
+    }
+
+    @Test
+    public void testLockedBootCompleted_BindException() {
+        when(mContext.bindServiceAsUser(any(), any(), anyInt(), any(), any())).thenThrow(
+                new SecurityException());
+        notifyLockedBootCompleted();
+        notifyLockedBootCompleted();
+
+        // Failure state will trigger another attempt on event
+        verifySystemBind(2);
+    }
+
+    @Test
+    public void testUserSwitched() {
+        notifyUserSwitched();
+        notifyUserSwitched();
+
+        // Multiple events should only trigger a single bind, when successful
+        verifyUserBind(1);
+    }
+
+    @Test
+    public void testUserSwitched_BindFailed() {
+        when(mContext.bindServiceAsUser(any(), any(), anyInt(), any(), any())).thenReturn(false);
+        notifyUserSwitched();
+        notifyUserSwitched();
+
+        // Failure state will trigger another attempt on event
+        verifyUserBind(2);
+    }
+
+    @Test
+    public void testUserSwitched_BindException() {
+        when(mContext.bindServiceAsUser(any(), any(), anyInt(), any(), any())).thenThrow(
+                new SecurityException());
+        notifyUserSwitched();
+        notifyUserSwitched();
+
+        // Failure state will trigger another attempt on event
+        verifyUserBind(2);
+    }
+
+    @Test
+    public void testUserUnlocked() {
+        notifyUserUnlocked();
+        notifyUserUnlocked();
+
+        // Multiple events should only trigger a single bind, when successful
+        verifyUserBind(1);
+    }
+
+    @Test
+    public void testUserUnlocked_BindFailed() {
+        when(mContext.bindServiceAsUser(any(), any(), anyInt(), any(), any())).thenReturn(false);
+        notifyUserUnlocked();
+        notifyUserUnlocked();
+
+        // Failure state will trigger another attempt on event
+        verifyUserBind(2);
+    }
+
+    @Test
+    public void testUserUnlocked_BindException() {
+        when(mContext.bindServiceAsUser(any(), any(), anyInt(), any(), any())).thenThrow(
+                new SecurityException());
+        notifyUserUnlocked();
+        notifyUserUnlocked();
+
+        // Failure state will trigger another attempt on event
+        verifyUserBind(2);
+    }
+
+    @Test
+    public void testUserSwitchedAndUnlocked() {
+        notifyUserSwitched();
+        notifyUserUnlocked();
+
+        // Multiple events should only trigger a single bind, when successful
+        verifyUserBind(1);
+    }
+
+    @Test
+    public void testUserSwitchedToSystemUser() {
+        mUserInfo = new UserInfo(UserHandle.USER_SYSTEM, "Owner", 0);
+        when(mUserManager.getCurrentForegroundUserInfo()).thenReturn(mUserInfo);
+        notifyUserSwitched();
+
+        // System user should not trigger any binding
+        verifyUserBind(0);
+    }
+
+    @Test
+    public void testUnregisterConnectionListener() {
+        mClientManager.unregisterConnectionListener(mConnectionListener);
+        notifyLockedBootCompleted();
+        verifySystemBind(1);
+
+        ServiceConnection connection = mConnectionCaptor.getValue();
+        connection.onServiceConnected(null, new Binder());
+        verifyZeroInteractions(mConnectionListener);
+    }
+
+    @Test
+    public void testOnSystemServiceConnected() {
+        notifyLockedBootCompleted();
+        verifySystemBind(1);
+        resetContext();
+
+        Binder binder = new Binder();
+        ServiceConnection connection = mConnectionCaptor.getValue();
+        connection.onServiceConnected(null, binder);
+
+        verify(mConnectionListener).onClientConnected(
+                eq("com.google.android.apps.vms.test/com.google.android.apps.vms.test"
+                        + ".VmsSystemClient U=0"),
+                eq(binder));
+    }
+
+    @Test
+    public void testOnUserServiceConnected() {
+        notifyUserSwitched();
+        verifyUserBind(1);
+        resetContext();
+
+        Binder binder = new Binder();
+        ServiceConnection connection = mConnectionCaptor.getValue();
+        connection.onServiceConnected(null, binder);
+
+        verify(mConnectionListener).onClientConnected(
+                eq("com.google.android.apps.vms.test/com.google.android.apps.vms.test"
+                        + ".VmsUserClient U=10"),
+                eq(binder));
+    }
+
+    @Test
+    public void testOnSystemServiceDisconnected() throws Exception {
+        notifyLockedBootCompleted();
+        verifySystemBind(1);
+        resetContext();
+
+        ServiceConnection connection = mConnectionCaptor.getValue();
+        connection.onServiceConnected(null, new Binder());
+        connection.onServiceDisconnected(null);
+
+        verify(mConnectionListener).onClientDisconnected(
+                eq("com.google.android.apps.vms.test/com.google.android.apps.vms.test"
+                        + ".VmsSystemClient U=0"));
+    }
+
+    @Test
+    public void testOnSystemServiceDisconnected_ServiceNotConnected() throws Exception {
+        notifyLockedBootCompleted();
+        verifySystemBind(1);
+        resetContext();
+
+        ServiceConnection connection = mConnectionCaptor.getValue();
+        connection.onServiceDisconnected(null);
+
+        verifyZeroInteractions(mConnectionListener);
+    }
+
+    @Test
+    public void testOnUserServiceDisconnected() throws Exception {
+        notifyUserSwitched();
+        verifyUserBind(1);
+        resetContext();
+
+        ServiceConnection connection = mConnectionCaptor.getValue();
+        connection.onServiceConnected(null, new Binder());
+        connection.onServiceDisconnected(null);
+
+        verify(mConnectionListener).onClientDisconnected(
+                eq("com.google.android.apps.vms.test/com.google.android.apps.vms.test"
+                        + ".VmsUserClient U=10"));
+    }
+
+    @Test
+    public void testOnUserServiceDisconnected_ServiceNotConnected() throws Exception {
+        notifyUserSwitched();
+        verifyUserBind(1);
+        resetContext();
+
+        ServiceConnection connection = mConnectionCaptor.getValue();
+        connection.onServiceDisconnected(null);
+
+        verifyZeroInteractions(mConnectionListener);
+    }
+
+    @Test
+    public void testOnSystemServiceBindingDied() throws Exception {
+        notifyLockedBootCompleted();
+        verifySystemBind(1);
+        resetContext();
+
+        ServiceConnection connection = mConnectionCaptor.getValue();
+        connection.onServiceConnected(null, new Binder());
+        connection.onBindingDied(null);
+
+        verify(mContext).unbindService(connection);
+        verify(mConnectionListener).onClientDisconnected(
+                eq("com.google.android.apps.vms.test/com.google.android.apps.vms.test"
+                        + ".VmsSystemClient U=0"));
+
+        Thread.sleep(10);
+        verifySystemBind(1);
+    }
+
+    @Test
+    public void testOnSystemServiceBindingDied_ServiceNotConnected() throws Exception {
+        notifyLockedBootCompleted();
+        verifySystemBind(1);
+        resetContext();
+
+        ServiceConnection connection = mConnectionCaptor.getValue();
+        connection.onBindingDied(null);
+
+        verify(mContext).unbindService(connection);
+        verifyZeroInteractions(mConnectionListener);
+
+        Thread.sleep(10);
+        verifySystemBind(1);
+    }
+
+    @Test
+    public void testOnUserServiceBindingDied() throws Exception {
+        notifyUserSwitched();
+        verifyUserBind(1);
+        resetContext();
+
+        ServiceConnection connection = mConnectionCaptor.getValue();
+        connection.onServiceConnected(null, new Binder());
+        connection.onBindingDied(null);
+
+        verify(mContext).unbindService(connection);
+        verify(mConnectionListener).onClientDisconnected(
+                eq("com.google.android.apps.vms.test/com.google.android.apps.vms.test"
+                        + ".VmsUserClient U=10"));
+
+        Thread.sleep(10);
+        verifyUserBind(1);
+    }
+
+    @Test
+    public void testOnUserServiceBindingDied_ServiceNotConnected() throws Exception {
+        notifyUserSwitched();
+        verifyUserBind(1);
+        resetContext();
+
+        ServiceConnection connection = mConnectionCaptor.getValue();
+        connection.onBindingDied(null);
+
+        verify(mContext).unbindService(connection);
+        verifyZeroInteractions(mConnectionListener);
+
+        Thread.sleep(10);
+        verifyUserBind(1);
+    }
+
+    @Test
+    public void testOnSystemServiceNullBinding() throws Exception {
+        notifyLockedBootCompleted();
+        verifySystemBind(1);
+        resetContext();
+
+        ServiceConnection connection = mConnectionCaptor.getValue();
+        connection.onServiceConnected(null, new Binder());
+        connection.onNullBinding(null);
+
+        verify(mContext).unbindService(connection);
+        verify(mConnectionListener).onClientDisconnected(
+                eq("com.google.android.apps.vms.test/com.google.android.apps.vms.test"
+                        + ".VmsSystemClient U=0"));
+    }
+
+    @Test
+    public void testOnSystemServiceNullBinding_ServiceNotConnected() throws Exception {
+        notifyLockedBootCompleted();
+        verifySystemBind(1);
+        resetContext();
+
+        ServiceConnection connection = mConnectionCaptor.getValue();
+        connection.onNullBinding(null);
+
+        verify(mContext).unbindService(connection);
+        verifyZeroInteractions(mConnectionListener);
+    }
+
+    @Test
+    public void testOnUserServiceNullBinding() throws Exception {
+        notifyUserSwitched();
+        verifyUserBind(1);
+        resetContext();
+
+        ServiceConnection connection = mConnectionCaptor.getValue();
+        connection.onServiceConnected(null, new Binder());
+        connection.onNullBinding(null);
+
+        verify(mContext).unbindService(connection);
+        verify(mConnectionListener).onClientDisconnected(
+                eq("com.google.android.apps.vms.test/com.google.android.apps.vms.test"
+                        + ".VmsUserClient U=10"));
+    }
+
+    @Test
+    public void testOnUserServiceNullBinding_ServiceNotConnected() throws Exception {
+        notifyUserSwitched();
+        verifyUserBind(1);
+        resetContext();
+
+        ServiceConnection connection = mConnectionCaptor.getValue();
+        connection.onNullBinding(null);
+
+        verify(mContext).unbindService(connection);
+        verifyZeroInteractions(mConnectionListener);
+    }
+
+    @Test
+    public void testOnUserSwitched_UserChange() {
+        notifyUserSwitched();
+        verifyUserBind(1);
+        ServiceConnection connection = mConnectionCaptor.getValue();
+        connection.onServiceConnected(null, new Binder());
+        resetContext();
+        reset(mConnectionListener);
+
+        mUserInfo = new UserInfo(11, "Driver", 0);
+        when(mUserManager.getCurrentForegroundUserInfo()).thenReturn(mUserInfo);
+        notifyUserSwitched();
+
+        verify(mContext).unbindService(connection);
+        verify(mConnectionListener).onClientDisconnected(
+                eq("com.google.android.apps.vms.test/com.google.android.apps.vms.test"
+                        + ".VmsUserClient U=10"));
+        verifyBind(1, "com.google.android.apps.vms.test/.VmsUserClient",
+                mUserInfo.getUserHandle());
+    }
+
+    @Test
+    public void testOnUserSwitched_UserChange_ToSystemUser() {
+        notifyUserSwitched();
+        verifyUserBind(1);
+        ServiceConnection connection = mConnectionCaptor.getValue();
+        connection.onServiceConnected(null, new Binder());
+        resetContext();
+        reset(mConnectionListener);
+
+        mUserInfo = new UserInfo(UserHandle.USER_SYSTEM, "Owner", 0);
+        when(mUserManager.getCurrentForegroundUserInfo()).thenReturn(mUserInfo);
+        notifyUserSwitched();
+
+        verify(mContext).unbindService(connection);
+        verify(mConnectionListener).onClientDisconnected(
+                eq("com.google.android.apps.vms.test/com.google.android.apps.vms.test"
+                        + ".VmsUserClient U=10"));
+        // User processes will not be bound for system user
+        verifyBind(0, "com.google.android.apps.vms.test/.VmsUserClient",
+                mUserInfo.getUserHandle());
+    }
+
+    @Test
+    public void testOnUserSwitched_UserChange_ServiceNotConnected() {
+        notifyUserSwitched();
+        verifyUserBind(1);
+        ServiceConnection connection = mConnectionCaptor.getValue();
+        resetContext();
+
+        mUserInfo = new UserInfo(11, "Driver", 0);
+        when(mUserManager.getCurrentForegroundUserInfo()).thenReturn(mUserInfo);
+        notifyUserSwitched();
+
+        verify(mContext).unbindService(connection);
+        verifyBind(1, "com.google.android.apps.vms.test/.VmsUserClient",
+                mUserInfo.getUserHandle());
+    }
+
+    @Test
+    public void testOnUserUnlocked_UserChange() {
+        notifyUserUnlocked();
+        verifyUserBind(1);
+        ServiceConnection connection = mConnectionCaptor.getValue();
+        connection.onServiceConnected(null, new Binder());
+        resetContext();
+        reset(mConnectionListener);
+
+        mUserInfo = new UserInfo(11, "Driver", 0);
+        when(mUserManager.getCurrentForegroundUserInfo()).thenReturn(mUserInfo);
+        notifyUserUnlocked();
+
+        verify(mContext).unbindService(connection);
+        verify(mConnectionListener).onClientDisconnected(
+                eq("com.google.android.apps.vms.test/com.google.android.apps.vms.test"
+                        + ".VmsUserClient U=10"));
+        verifyBind(1, "com.google.android.apps.vms.test/.VmsUserClient",
+                mUserInfo.getUserHandle());
+    }
+
+    @Test
+    public void testOnUserLocked_UserChange_ToSystemUser() {
+        notifyUserUnlocked();
+        verifyUserBind(1);
+        ServiceConnection connection = mConnectionCaptor.getValue();
+        connection.onServiceConnected(null, new Binder());
+        resetContext();
+        reset(mConnectionListener);
+
+        mUserInfo = new UserInfo(UserHandle.USER_SYSTEM, "Owner", 0);
+        when(mUserManager.getCurrentForegroundUserInfo()).thenReturn(mUserInfo);
+        notifyUserUnlocked();
+
+        verify(mContext).unbindService(connection);
+        verify(mConnectionListener).onClientDisconnected(
+                eq("com.google.android.apps.vms.test/com.google.android.apps.vms.test"
+                        + ".VmsUserClient U=10"));
+        // User processes will not be bound for system user
+        verifyBind(0, "com.google.android.apps.vms.test/.VmsUserClient",
+                mUserInfo.getUserHandle());
+    }
+
+    @Test
+    public void testOnUserUnlocked_UserChange_ServiceNotConnected() {
+        notifyUserUnlocked();
+        verifyUserBind(1);
+        ServiceConnection connection = mConnectionCaptor.getValue();
+        resetContext();
+
+        mUserInfo = new UserInfo(11, "Driver", 0);
+        when(mUserManager.getCurrentForegroundUserInfo()).thenReturn(mUserInfo);
+        notifyUserUnlocked();
+
+        verify(mContext).unbindService(connection);
+        verifyBind(1, "com.google.android.apps.vms.test/.VmsUserClient",
+                mUserInfo.getUserHandle());
+    }
+
+    private void resetContext() {
+        reset(mContext);
+        when(mContext.getPackageManager()).thenReturn(mPackageManager);
+        when(mContext.bindServiceAsUser(any(), any(), anyInt(), any(), any())).thenReturn(true);
+        when(mContext.getResources()).thenReturn(mResources);
+    }
+
+    private void notifyLockedBootCompleted() {
+        mClientManager.mBootCompletedReceiver.onReceive(mContext,
+                new Intent(Intent.ACTION_LOCKED_BOOT_COMPLETED));
+    }
+
+    private void notifyUserSwitched() {
+        mClientManager.mUserSwitchReceiver.onReceive(mContext,
+                new Intent(Intent.ACTION_USER_SWITCHED));
+    }
+
+    private void notifyUserUnlocked() {
+        mClientManager.mUserSwitchReceiver.onReceive(mContext,
+                new Intent(Intent.ACTION_USER_UNLOCKED));
+    }
+
+    private void verifySystemBind(int times) {
+        verifyBind(times, "com.google.android.apps.vms.test/.VmsSystemClient",
+                UserHandle.SYSTEM);
+    }
+
+    private void verifyUserBind(int times) {
+        verifyBind(times, "com.google.android.apps.vms.test/.VmsUserClient",
+                mUserInfo.getUserHandle());
+    }
+
+    private void verifyBind(int times, String componentName,
+            UserHandle user) {
+        ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
+        verify(mContext, times(times)).bindServiceAsUser(
+                intentCaptor.capture(),
+                mConnectionCaptor.capture(),
+                eq(Context.BIND_AUTO_CREATE), any(Handler.class), eq(user));
+        if (times > 0) {
+            assertEquals(
+                    ComponentName.unflattenFromString(componentName),
+                    intentCaptor.getValue().getComponent());
+        }
+    }
+}
diff --git a/tests/obd2_app/res/values/arrays.xml b/tests/obd2_app/res/values/arrays.xml
index 2bd7ce3..3b3c4ac 100644
--- a/tests/obd2_app/res/values/arrays.xml
+++ b/tests/obd2_app/res/values/arrays.xml
@@ -14,12 +14,12 @@
      limitations under the License.
 -->
 <resources>
-  <string-array name="scan_delay_entries">
+  <string-array name="scan_delay_entries" translatable="false">
     <item>2 seconds</item>
     <item>5 seconds</item>
     <item>10 seconds</item>
   </string-array>
-  <string-array name="scan_delay_entryValues">
+  <string-array name="scan_delay_entryValues" translatable="false">
     <item>2</item>
     <item>5</item>
     <item>10</item>
diff --git a/tests/obd2_app/res/values/strings.xml b/tests/obd2_app/res/values/strings.xml
index c615c4f..28db929 100644
--- a/tests/obd2_app/res/values/strings.xml
+++ b/tests/obd2_app/res/values/strings.xml
@@ -14,39 +14,39 @@
      limitations under the License.
 -->
 <resources>
-  <string name="app_name">Obd2App</string>
-  <string name="title_activity_settings">Settings</string>
+  <string name="app_name" translatable="false">Obd2App</string>
+  <string name="title_activity_settings" translatable="false">Settings</string>
 
   <!-- Strings related to Settings -->
 
   <!-- Example General settings -->
-  <string name="pref_header_general">General</string>
+  <string name="pref_header_general" translatable="false">General</string>
 
-  <string name="pref_title_social_recommendations">Enable social recommendations</string>
-  <string name="pref_description_social_recommendations">Recommendations for people to contact based
+  <string name="pref_title_social_recommendations" translatable="false">Enable social recommendations</string>
+  <string name="pref_description_social_recommendations" translatable="false">Recommendations for people to contact based
     on your message history
   </string>
 
-  <string name="pref_title_display_name">Display name</string>
-  <string name="pref_default_display_name">John Smith</string>
+  <string name="pref_title_display_name" translatable="false">Display name</string>
+  <string name="pref_default_display_name" translatable="false">John Smith</string>
 
-  <string name="pref_title_add_friends_to_messages">Add friends to messages</string>
-  <string-array name="pref_example_list_titles">
+  <string name="pref_title_add_friends_to_messages" translatable="false">Add friends to messages</string>
+  <string-array name="pref_example_list_titles" translatable="false">
     <item>Always</item>
     <item>When possible</item>
     <item>Never</item>
   </string-array>
-  <string-array name="pref_example_list_values">
+  <string-array name="pref_example_list_values" translatable="false">
     <item>1</item>
     <item>0</item>
     <item>-1</item>
   </string-array>
 
   <!-- Example settings for Data & Sync -->
-  <string name="pref_header_data_sync">Data &amp; sync</string>
+  <string name="pref_header_data_sync" translatable="false">Data &amp; sync</string>
 
-  <string name="pref_title_sync_frequency">Sync frequency</string>
-  <string-array name="pref_sync_frequency_titles">
+  <string name="pref_title_sync_frequency" translatable="false">Sync frequency</string>
+  <string-array name="pref_sync_frequency_titles" translatable="false">
     <item>15 minutes</item>
     <item>30 minutes</item>
     <item>1 hour</item>
@@ -54,7 +54,7 @@
     <item>6 hours</item>
     <item>Never</item>
   </string-array>
-  <string-array name="pref_sync_frequency_values">
+  <string-array name="pref_sync_frequency_values" translatable="false">
     <item>15</item>
     <item>30</item>
     <item>60</item>
@@ -63,13 +63,13 @@
     <item>-1</item>
   </string-array>
 
-  <string-array name="list_preference_entries">
+  <string-array name="list_preference_entries" translatable="false">
     <item>Entry 1</item>
     <item>Entry 2</item>
     <item>Entry 3</item>
   </string-array>
 
-  <string-array name="list_preference_entry_values">
+  <string-array name="list_preference_entry_values" translatable="false">
     <item>1</item>
     <item>2</item>
     <item>3</item>
@@ -77,15 +77,15 @@
 
   <string-array name="multi_select_list_preference_default_value"/>
 
-  <string name="pref_title_system_sync_settings">System sync settings</string>
+  <string name="pref_title_system_sync_settings" translatable="false">System sync settings</string>
 
   <!-- Example settings for Notifications -->
-  <string name="pref_header_notifications">Notifications</string>
+  <string name="pref_header_notifications" translatable="false">Notifications</string>
 
-  <string name="pref_title_new_message_notifications">New message notifications</string>
+  <string name="pref_title_new_message_notifications" translatable="false">New message notifications</string>
 
-  <string name="pref_title_ringtone">Ringtone</string>
-  <string name="pref_ringtone_silent">Silent</string>
+  <string name="pref_title_ringtone" translatable="false">Ringtone</string>
+  <string name="pref_ringtone_silent" translatable="false">Silent</string>
 
-  <string name="pref_title_vibrate">Vibrate</string>
+  <string name="pref_title_vibrate" translatable="false">Vibrate</string>
 </resources>
diff --git a/tests/obd2_test/Android.mk b/tests/obd2_test/Android.mk
index 06ffe31..f2ae94d 100644
--- a/tests/obd2_test/Android.mk
+++ b/tests/obd2_test/Android.mk
@@ -33,7 +33,7 @@
 LOCAL_PROGUARD_ENABLED := disabled
 
 LOCAL_STATIC_JAVA_LIBRARIES += com.android.car.obd2 \
-                               android-support-test \
+                               androidx.test.rules \
 
 LOCAL_JAVA_LIBRARIES := android.car android.test.runner
 
diff --git a/tests/obd2_test/AndroidManifest.xml b/tests/obd2_test/AndroidManifest.xml
index 0de21a4..ee40a8a 100644
--- a/tests/obd2_test/AndroidManifest.xml
+++ b/tests/obd2_test/AndroidManifest.xml
@@ -18,7 +18,7 @@
     package="com.android.car.obd2.test"
     android:sharedUserId="android.uid.system" >
 
-  <instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
+  <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
       android:targetPackage="com.android.car.obd2.test"
       android:label="Tests for OBD2 APIs"/>
 
diff --git a/tests/usb/AoapHostApp/res/values/strings.xml b/tests/usb/AoapHostApp/res/values/strings.xml
index f2caeb3..1643b19 100644
--- a/tests/usb/AoapHostApp/res/values/strings.xml
+++ b/tests/usb/AoapHostApp/res/values/strings.xml
@@ -14,6 +14,6 @@
      limitations under the License.
 -->
 <resources>
-  <string name="app_title">AOAP Test Host App</string>
-  <string name="exit">Exit</string>
+  <string name="app_title" translatable="false">AOAP Test Host App</string>
+  <string name="exit" translatable="false">Exit</string>
 </resources>
diff --git a/tests/usb/AoapPhoneCompanionApp/res/values/strings.xml b/tests/usb/AoapPhoneCompanionApp/res/values/strings.xml
index bea6654..9b98c9b 100644
--- a/tests/usb/AoapPhoneCompanionApp/res/values/strings.xml
+++ b/tests/usb/AoapPhoneCompanionApp/res/values/strings.xml
@@ -14,6 +14,6 @@
      limitations under the License.
 -->
 <resources>
-  <string name="app_title">AOAP Test Companion App</string>
-  <string name="exit">Exit</string>
+  <string name="app_title" translatable="false">AOAP Test Companion App</string>
+  <string name="exit" translatable="false">Exit</string>
 </resources>
diff --git a/tests/vehiclehal_test/Android.mk b/tests/vehiclehal_test/Android.mk
index d5adc65..58678b3 100644
--- a/tests/vehiclehal_test/Android.mk
+++ b/tests/vehiclehal_test/Android.mk
@@ -33,7 +33,7 @@
 LOCAL_PROGUARD_ENABLED := disabled
 
 LOCAL_STATIC_JAVA_LIBRARIES += vehicle-hal-support-lib \
-                               android-support-test \
+                               androidx.test.rules \
                                android.hidl.base-V1.0-java \
                                android.hardware.automotive.vehicle-V2.0-java
 
diff --git a/tests/vehiclehal_test/AndroidManifest.xml b/tests/vehiclehal_test/AndroidManifest.xml
index c03406d..ee0dccc 100644
--- a/tests/vehiclehal_test/AndroidManifest.xml
+++ b/tests/vehiclehal_test/AndroidManifest.xml
@@ -20,7 +20,7 @@
 
     <uses-permission android:name="android.car.permission.CONTROL_CAR_CLIMATE" />
 
-    <instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
+    <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
             android:targetPackage="com.android.car.vehiclehal.test"
             android:label="Tests for Vehicle HAL APIs"/>
 
diff --git a/tests/vehiclehal_test/src/com/android/car/vehiclehal/test/CarDiagnosticTest.java b/tests/vehiclehal_test/src/com/android/car/vehiclehal/test/CarDiagnosticTest.java
index b0dd2c7..c39683a 100644
--- a/tests/vehiclehal_test/src/com/android/car/vehiclehal/test/CarDiagnosticTest.java
+++ b/tests/vehiclehal_test/src/com/android/car/vehiclehal/test/CarDiagnosticTest.java
@@ -26,11 +26,12 @@
 import android.car.hardware.CarSensorManager;
 import android.hardware.automotive.vehicle.V2_0.VehiclePropValue;
 import android.hardware.automotive.vehicle.V2_0.VehicleProperty;
-import android.support.test.filters.LargeTest;
-import android.support.test.runner.AndroidJUnit4;
 import android.util.Log;
 import android.util.SparseIntArray;
 
+import androidx.test.filters.LargeTest;
+import androidx.test.runner.AndroidJUnit4;
+
 import com.android.car.vehiclehal.VehiclePropValueBuilder;
 
 import org.junit.Test;
diff --git a/tests/vehiclehal_test/src/com/android/car/vehiclehal/test/CarPropertyTest.java b/tests/vehiclehal_test/src/com/android/car/vehiclehal/test/CarPropertyTest.java
index 27579bd..e47c733 100644
--- a/tests/vehiclehal_test/src/com/android/car/vehiclehal/test/CarPropertyTest.java
+++ b/tests/vehiclehal_test/src/com/android/car/vehiclehal/test/CarPropertyTest.java
@@ -18,21 +18,22 @@
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
-import static java.lang.Integer.toHexString;
-
 import android.car.Car;
 import android.car.hardware.CarPropertyConfig;
 import android.car.hardware.CarPropertyValue;
 import android.car.hardware.property.CarPropertyManager;
-import android.support.test.filters.LargeTest;
-import android.support.test.runner.AndroidJUnit4;
 import android.util.ArraySet;
 import android.util.Log;
 
+import androidx.test.filters.LargeTest;
+import androidx.test.runner.AndroidJUnit4;
+
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
+import static java.lang.Integer.toHexString;
+
 import java.io.File;
 import java.time.Duration;
 import java.util.List;
diff --git a/tests/vehiclehal_test/src/com/android/car/vehiclehal/test/E2eCarTestBase.java b/tests/vehiclehal_test/src/com/android/car/vehiclehal/test/E2eCarTestBase.java
index 9485d80..d78713f 100644
--- a/tests/vehiclehal_test/src/com/android/car/vehiclehal/test/E2eCarTestBase.java
+++ b/tests/vehiclehal_test/src/com/android/car/vehiclehal/test/E2eCarTestBase.java
@@ -28,9 +28,10 @@
 import android.os.ConditionVariable;
 import android.os.FileUtils;
 import android.os.IBinder;
-import android.support.test.InstrumentationRegistry;
 import android.util.Log;
 
+import androidx.test.InstrumentationRegistry;
+
 import com.google.android.collect.Lists;
 
 import org.json.JSONException;
@@ -44,7 +45,6 @@
 import java.io.OutputStream;
 import java.util.List;
 
-
 public class E2eCarTestBase {
     private static final String TAG = Utils.concatTag(E2eCarTestBase.class);
     private static final int DEFAULT_WAIT_TIMEOUT_MS = 1000;
diff --git a/tests/vehiclehal_test/src/com/android/car/vehiclehal/test/E2ePerformanceTest.java b/tests/vehiclehal_test/src/com/android/car/vehiclehal/test/E2ePerformanceTest.java
index 6427a07..56ce568 100644
--- a/tests/vehiclehal_test/src/com/android/car/vehiclehal/test/E2ePerformanceTest.java
+++ b/tests/vehiclehal_test/src/com/android/car/vehiclehal/test/E2ePerformanceTest.java
@@ -21,28 +21,28 @@
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
-import static java.lang.Integer.toHexString;
-
 import android.annotation.Nullable;
 import android.car.Car;
-import android.car.CarNotConnectedException;
 import android.car.hardware.CarPropertyConfig;
 import android.car.hardware.CarSensorManager;
 import android.car.hardware.CarSensorManager.OnSensorChangedListener;
 import android.car.hardware.hvac.CarHvacManager;
 import android.hardware.automotive.vehicle.V2_0.VehicleProperty;
 import android.os.SystemClock;
-import android.support.test.filters.MediumTest;
-import android.support.test.runner.AndroidJUnit4;
 import android.util.Log;
 import android.util.SparseArray;
 import android.util.SparseIntArray;
 
+import androidx.test.filters.MediumTest;
+import androidx.test.runner.AndroidJUnit4;
+
 import com.google.android.collect.Lists;
 
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
+import static java.lang.Integer.toHexString;
+
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.CountDownLatch;
@@ -233,12 +233,8 @@
 
         while (counter.getCount() > 0) {
             float actualValue;
-            try {
-                mgr.setFloatProperty(cfg.getPropertyId(), areaId, curValue);
-                actualValue = mgr.getFloatProperty(cfg.getPropertyId(), areaId);
-            } catch (CarNotConnectedException e) {
-                throw new RuntimeException(e);
-            }
+            mgr.setFloatProperty(cfg.getPropertyId(), areaId, curValue);
+            actualValue = mgr.getFloatProperty(cfg.getPropertyId(), areaId);
             assertEquals(curValue, actualValue, 0.001);
             curValue += 0.5;
             if (curValue > maxValue) {
@@ -250,9 +246,8 @@
     }
 
     @Nullable
-    private <T> CarPropertyConfig<T> findHvacPropConfig(Class<T> clazz, int hvacPropId,
-                CarHvacManager mgr)
-            throws CarNotConnectedException {
+    private <T> CarPropertyConfig<T> findHvacPropConfig(
+            Class<T> clazz, int hvacPropId, CarHvacManager mgr) {
         for (CarPropertyConfig<?> cfg : mgr.getPropertyList()) {
             if (cfg.getPropertyId() == hvacPropId) {
                 return (CarPropertyConfig<T>) cfg;
diff --git a/tools/keventreader/client/src/com/android/car/keventreader/KeypressEvent.java b/tools/keventreader/client/src/com/android/car/keventreader/KeypressEvent.java
index 34aa992..8f74011 100644
--- a/tools/keventreader/client/src/com/android/car/keventreader/KeypressEvent.java
+++ b/tools/keventreader/client/src/com/android/car/keventreader/KeypressEvent.java
@@ -17,6 +17,7 @@
 
 import android.os.Parcel;
 import android.os.Parcelable;
+
 import java.util.HashMap;
 import java.util.Map;
 
@@ -628,6 +629,17 @@
     }
 
     public String keycodeToString() {
-        return KEYCODE_NAME_MAP.getOrDefault(keycode, Integer.toHexString(keycode));
+        return keycodeToString(keycode);
+    }
+
+    /**
+     * Translates a key code from keventreader into a string.
+     * @param keycode Key code from a keventreader KeypressEvent.
+     * @return String String label corresponding to keycode, if available. If not, String with
+     *     hexidecimal representation of keycode.
+     */
+    public static String keycodeToString(int keycode) {
+        String ret = KEYCODE_NAME_MAP.get(keycode);
+        return ret != null ? ret : "0x" + Integer.toHexString(keycode);
     }
 }
diff --git a/tools/keventreader/server/Android.mk b/tools/keventreader/server/Android.mk
index 726e2fc..3dd6bba 100644
--- a/tools/keventreader/server/Android.mk
+++ b/tools/keventreader/server/Android.mk
@@ -42,6 +42,5 @@
 LOCAL_MODULE_TAGS := optional
 
 LOCAL_CFLAGS += -Wall -Werror
-LOCAL_CPPFLAGS += -std=c++17
 
 include $(BUILD_EXECUTABLE)
diff --git a/user/car-user-lib/Android.mk b/user/car-user-lib/Android.mk
deleted file mode 100644
index cc6cb55..0000000
--- a/user/car-user-lib/Android.mk
+++ /dev/null
@@ -1,91 +0,0 @@
-# Copyright (C) 2018 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.
-#
-#
-
-#disble build in PDK, missing aidl import breaks build
-ifneq ($(TARGET_BUILD_PDK),true)
-
-LOCAL_PATH:= $(call my-dir)
-
-include $(CLEAR_VARS)
-
-car_user_lib_sources := $(call all-java-files-under, src)
-
-# API Check
-# ---------------------------------------------
-car_user_module := android.car.userlib
-car_user_module_src_files := $(car_user_lib_sources)
-car_user_module_api_dir := $(LOCAL_PATH)/api
-car_user_module_java_libraries := framework
-car_user_module_include_systemapi := true
-car_user_module_java_packages := android.car.userlib*
-include $(CAR_API_CHECK)
-
-# Build stubs jar for target android-support-car
-# ---------------------------------------------
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-LOCAL_JAVA_LIBRARIES := android.car.userlib
-
-LOCAL_ADDITIONAL_JAVA_DIR := $(call intermediates-dir-for,JAVA_LIBRARIES,android.car.userlib,,COMMON)/src
-
-android_car_userlib_stub_packages := \
-    android.car.userlib*
-
-android_car_userlib_api := \
-    $(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/android.car.userlib_api.txt
-
-# Note: The make target is android.car.userlib-stub-docs
-LOCAL_MODULE := android.car.userlib-stub
-LOCAL_DROIDDOC_OPTIONS := \
-    -stubs $(call intermediates-dir-for,JAVA_LIBRARIES,android.car.userlib-stubs,,COMMON)/src \
-    -stubpackages $(subst $(space),:,$(android_car_userlib_stub_packages)) \
-    -api $(android_car_userlib_api) \
-    -nodocs
-
-LOCAL_DROIDDOC_SOURCE_PATH := $(LOCAL_PATH)/java/
-LOCAL_DROIDDOC_HTML_DIR :=
-
-LOCAL_MODULE_CLASS := JAVA_LIBRARIES
-
-LOCAL_UNINSTALLABLE_MODULE := true
-
-include $(BUILD_DROIDDOC)
-
-$(android_car_userlib_api): $(full_target)
-
-android.car.userlib-stubs_stamp := $(full_target)
-
-###############################################
-# Build the stubs java files into a jar. This build rule relies on the
-# stubs_stamp make variable being set from the droiddoc rule.
-
-include $(CLEAR_VARS)
-
-# CAR_API_CHECK uses the same name to generate a module, but BUILD_DROIDDOC
-# appends "-docs" to module name.
-LOCAL_MODULE := android.car.userlib-stubs
-LOCAL_SOURCE_FILES_ALL_GENERATED := true
-
-# Make sure to run droiddoc first to generate the stub source files.
-LOCAL_ADDITIONAL_DEPENDENCIES := $(android.car.userlib-stubs_stamp)
-
-include $(BUILD_STATIC_JAVA_LIBRARY)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
-
-endif #TARGET_BUILD_PDK
\ No newline at end of file
diff --git a/user/car-user-lib/src/android/car/userlib/CarUserManagerHelper.java b/user/car-user-lib/src/android/car/userlib/CarUserManagerHelper.java
index 227b2fb..2d8ea5d 100644
--- a/user/car-user-lib/src/android/car/userlib/CarUserManagerHelper.java
+++ b/user/car-user-lib/src/android/car/userlib/CarUserManagerHelper.java
@@ -29,12 +29,14 @@
 import android.graphics.drawable.BitmapDrawable;
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
-import android.os.SystemProperties;
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.provider.Settings;
+import android.sysprop.CarProperties;
+import android.text.TextUtils;
 import android.util.Log;
 
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.util.UserIcons;
 
 import com.google.android.collect.Sets;
@@ -56,10 +58,6 @@
  */
 public class CarUserManagerHelper {
     private static final String TAG = "CarUserManagerHelper";
-    private static final String HEADLESS_SYSTEM_USER = "android.car.systemuser.headless";
-
-    // Place holder for user name of the first user created.
-    public static final String DEFAULT_FIRST_ADMIN_NAME = "Driver";
 
     /**
      * Default set of restrictions for Non-Admin users.
@@ -69,6 +67,17 @@
     );
 
     /**
+     * Additional optional set of restrictions for Non-Admin users.
+     */
+    public static final Set<String> OPTIONAL_NON_ADMIN_RESTRICTIONS = Sets.newArraySet(
+            UserManager.DISALLOW_ADD_USER,
+            UserManager.DISALLOW_OUTGOING_CALLS,
+            UserManager.DISALLOW_SMS,
+            UserManager.DISALLOW_INSTALL_APPS,
+            UserManager.DISALLOW_UNINSTALL_APPS
+    );
+
+    /**
      * Default set of restrictions for Guest users.
      */
     private static final Set<String> DEFAULT_GUEST_RESTRICTIONS = Sets.newArraySet(
@@ -84,6 +93,7 @@
     private final Context mContext;
     private final UserManager mUserManager;
     private final ActivityManager mActivityManager;
+    private String mDefaultAdminName;
     private Bitmap mDefaultGuestUserIcon;
     private ArrayList<OnUsersUpdateListener> mUpdateListeners;
     private final BroadcastReceiver mUserChangeReceiver = new BroadcastReceiver() {
@@ -100,6 +110,11 @@
         }
     };
 
+    /**
+     * Initializes with a default name for admin users.
+     *
+     * @param context Application Context
+     */
     public CarUserManagerHelper(Context context) {
         mUpdateListeners = new ArrayList<>();
         mContext = context.getApplicationContext();
@@ -259,7 +274,7 @@
      * @return {@boolean true} if headless system user.
      */
     public boolean isHeadlessSystemUser() {
-        return SystemProperties.getBoolean(HEADLESS_SYSTEM_USER, false);
+        return CarProperties.headless_system_user().orElse(false);
     }
 
     /**
@@ -728,6 +743,19 @@
 
         // Remove restrictions imposed on non-admins.
         setDefaultNonAdminRestrictions(user, /* enable= */ false);
+        setOptionalNonAdminRestrictions(user, /* enable= */ false);
+    }
+
+    /**
+     * Creates a new user on the system with a default user name. This user name is set during
+     * constrution. The created user would be granted admin role. Only admins can create other
+     * admins.
+     *
+     * @return Newly created admin user, null if failed to create a user.
+     */
+    @Nullable
+    public UserInfo createNewAdminUser() {
+        return createNewAdminUser(getDefaultAdminName());
     }
 
     /**
@@ -752,6 +780,7 @@
             return null;
         }
         assignDefaultIcon(user);
+
         return user;
     }
 
@@ -793,6 +822,18 @@
     }
 
     /**
+     * Sets the values of settings controllable restrictions to the passed in value.
+     *
+     * @param userInfo User to set restrictions on.
+     * @param enable If true, restriction is ON, If false, restriction is OFF.
+     */
+    private void setOptionalNonAdminRestrictions(UserInfo userInfo, boolean enable) {
+        for (String restriction : OPTIONAL_NON_ADMIN_RESTRICTIONS) {
+            setUserRestriction(userInfo, restriction, enable);
+        }
+    }
+
+    /**
      * Sets the value of the specified restriction for the specified user.
      *
      * @param userInfo the user whose restriction is to be changed
@@ -809,8 +850,10 @@
      * Tries to remove the user that's passed in. System user cannot be removed.
      * If the user to be removed is user currently running the process,
      * it switches to the guest user first, and then removes the user.
+     * If the user being removed is the last admin user, this will create a new admin user.
      *
      * @param userInfo User to be removed
+     * @param guestUserName User name to use for the guest user if we need to switch to it
      * @return {@code true} if user is successfully removed, {@code false} otherwise.
      */
     public boolean removeUser(UserInfo userInfo, String guestUserName) {
@@ -844,10 +887,12 @@
     }
 
     private boolean removeLastAdmin(UserInfo userInfo) {
-        Log.i(TAG, "User " + userInfo.id
-                + " is the last admin user on device. Creating a new admin.");
+        if (Log.isLoggable(TAG, Log.INFO)) {
+            Log.i(TAG, "User " + userInfo.id
+                    + " is the last admin user on device. Creating a new admin.");
+        }
 
-        UserInfo newAdmin = createNewAdminUser(DEFAULT_FIRST_ADMIN_NAME);
+        UserInfo newAdmin = createNewAdminUser(getDefaultAdminName());
         if (newAdmin == null) {
             Log.w(TAG, "Couldn't create another admin, cannot delete current user.");
             return false;
@@ -1024,6 +1069,18 @@
         mContext.unregisterReceiver(mUserChangeReceiver);
     }
 
+    private String getDefaultAdminName() {
+        if (TextUtils.isEmpty(mDefaultAdminName)) {
+            mDefaultAdminName = mContext.getString(com.android.internal.R.string.owner_name);
+        }
+        return mDefaultAdminName;
+    }
+
+    @VisibleForTesting
+    void setDefaultAdminName(String defaultAdminName) {
+        mDefaultAdminName = defaultAdminName;
+    }
+
     /**
      * Interface for listeners that want to register for receiving updates to changes to the users
      * on the system including removing and adding users, and changing user info.