Merge "Delete the location cache after SUSPEND_EXIT." into qt-dev
diff --git a/.clang-format b/.clang-format
new file mode 100644
index 0000000..fc4eb1b
--- /dev/null
+++ b/.clang-format
@@ -0,0 +1,13 @@
+BasedOnStyle: Google
+AllowShortBlocksOnASingleLine: false
+AllowShortFunctionsOnASingleLine: false
+
+AccessModifierOffset: -2
+ColumnLimit: 100
+CommentPragmas: NOLINT:.*
+DerivePointerAlignment: false
+IndentWidth: 4
+PointerAlignment: Left
+TabWidth: 4
+UseTab: Never
+PenaltyExcessCharacter: 32
diff --git a/FrameworkPackageStubs/AndroidManifest.xml b/FrameworkPackageStubs/AndroidManifest.xml
index 1cfd7de..89ea2b0 100644
--- a/FrameworkPackageStubs/AndroidManifest.xml
+++ b/FrameworkPackageStubs/AndroidManifest.xml
@@ -74,6 +74,11 @@
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
             <intent-filter android:priority="-1">
+                <action android:name="android.settings.PROCESS_WIFI_EASY_CONNECT_URI" />
+                <category android:name="android.intent.category.DEFAULT" />
+                <data android:scheme="DPP"/>
+            </intent-filter>
+            <intent-filter android:priority="-1">
                 <action android:name="android.settings.USER_DICTIONARY_SETTINGS" />
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..d935103
--- /dev/null
+++ b/README.md
@@ -0,0 +1,9 @@
+Native (C++) code format is required to be compatible with .clang-format file. Run
+
+```
+git clang-format --style=file --extension='h,cpp,cc' HEAD~
+```
+
+Note that clang-format is *not* desirable for Android java files. Therefore
+the  command line above is limited to specific extensions.
+
diff --git a/car-bugreportd/Android.bp b/car-bugreportd/Android.bp
new file mode 100644
index 0000000..e026d0b
--- /dev/null
+++ b/car-bugreportd/Android.bp
@@ -0,0 +1,35 @@
+//
+// 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.
+//
+
+cc_binary {
+    name: "car-bugreportd",
+    init_rc: ["car-bugreportd.rc"],
+    srcs: [
+        "main.cpp",
+    ],
+    cflags: [
+        "-Werror",
+        "-Wall",
+    ],
+    cppflags: [
+        "-Wno-unused-parameter",
+    ],
+    shared_libs: [
+        "libbase",
+        "liblog",
+        "libcutils",
+    ],
+}
diff --git a/car-bugreportd/car-bugreportd.rc b/car-bugreportd/car-bugreportd.rc
new file mode 100644
index 0000000..4c405e1
--- /dev/null
+++ b/car-bugreportd/car-bugreportd.rc
@@ -0,0 +1,17 @@
+service car-bugreportd /system/bin/car-bugreportd
+    socket car_br_progress_socket stream 0660 shell log
+    socket car_br_output_socket stream 0660 shell log
+    class core
+    user shell
+    group log
+    disabled
+    oneshot
+
+# car-dumpstatez generates a zipped bugreport but also uses a socket to print the file location once
+# it is finished.
+service car-dumpstatez /system/bin/dumpstate -S -d -z \
+        -o /data/user_de/0/com.android.shell/files/bugreports/bugreport
+    socket dumpstate stream 0660 shell log
+    class main
+    disabled
+    oneshot
\ No newline at end of file
diff --git a/car-bugreportd/main.cpp b/car-bugreportd/main.cpp
new file mode 100644
index 0000000..055d35a
--- /dev/null
+++ b/car-bugreportd/main.cpp
@@ -0,0 +1,247 @@
+/*
+ * 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.
+ */
+
+#define LOG_TAG "car-bugreportd"
+
+#include <android-base/errors.h>
+#include <android-base/file.h>
+#include <android-base/logging.h>
+#include <android-base/macros.h>
+#include <android-base/properties.h>
+#include <android-base/stringprintf.h>
+#include <android-base/strings.h>
+#include <android-base/unique_fd.h>
+#include <cutils/sockets.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <log/log_main.h>
+#include <private/android_filesystem_config.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <time.h>
+#include <unistd.h>
+
+#include <chrono>
+#include <string>
+#include <vector>
+
+namespace {
+// Socket to write the progress information.
+constexpr const char* kCarBrProgressSocket = "car_br_progress_socket";
+// Socket to write the zipped bugreport file.
+constexpr const char* kCarBrOutputSocket = "car_br_output_socket";
+// The prefix used by bugreportz protocol to indicate bugreport finished successfully.
+constexpr const char* kOkPrefix = "OK:";
+// Number of connect attempts to dumpstate socket
+constexpr const int kMaxDumpstateConnectAttempts = 20;
+// Wait time between connect attempts
+constexpr const int kWaitTimeBetweenConnectAttemptsInSec = 1;
+// Wait time for dumpstate. No timeout in dumpstate is longer than 60 seconds. Choose
+// a value that is twice longer.
+constexpr const int kDumpstateTimeoutInSec = 120;
+
+// Returns a valid socket descriptor or -1 on failure.
+int openSocket(const char* service) {
+    int s = android_get_control_socket(service);
+    if (s < 0) {
+        ALOGE("android_get_control_socket(%s): %s", service, strerror(errno));
+        return -1;
+    }
+    fcntl(s, F_SETFD, FD_CLOEXEC);
+    if (listen(s, 4) < 0) {
+        ALOGE("listen(control socket): %s", strerror(errno));
+        return -1;
+    }
+
+    struct sockaddr addr;
+    socklen_t alen = sizeof(addr);
+    int fd = accept(s, &addr, &alen);
+    if (fd < 0) {
+        ALOGE("accept(control socket): %s", strerror(errno));
+        return -1;
+    }
+    return fd;
+}
+
+// Processes the given dumpstate progress protocol |line| and updates
+// |out_last_nonempty_line| when |line| is non-empty, and |out_zip_path| when
+// the bugreport is finished.
+void processLine(const std::string& line, std::string* out_zip_path,
+                 std::string* out_last_nonempty_line) {
+    // The protocol is documented in frameworks/native/cmds/bugreportz/readme.md
+    if (line.empty()) {
+        return;
+    }
+    *out_last_nonempty_line = line;
+    if (line.find(kOkPrefix) != 0) {
+        return;
+    }
+    *out_zip_path = line.substr(strlen(kOkPrefix));
+    return;
+}
+
+int copyTo(int fd_in, int fd_out, void* buffer, size_t buffer_len) {
+    ssize_t bytes_read = TEMP_FAILURE_RETRY(read(fd_in, buffer, buffer_len));
+    if (bytes_read == 0) {
+        return 0;
+    }
+    if (bytes_read == -1) {
+        // EAGAIN really means time out, so make that clear.
+        if (errno == EAGAIN) {
+            ALOGE("read timed out");
+        } else {
+            ALOGE("read terminated abnormally (%s)", strerror(errno));
+        }
+        return -1;
+    }
+    // copy all bytes to the output socket
+    if (!android::base::WriteFully(fd_out, buffer, bytes_read)) {
+        ALOGE("write failed");
+        return -1;
+    }
+    return bytes_read;
+}
+
+bool copyFile(const std::string& zip_path, int output_socket) {
+    android::base::unique_fd fd(TEMP_FAILURE_RETRY(open(zip_path.c_str(), O_RDONLY)));
+    if (fd == -1) {
+        return false;
+    }
+    while (1) {
+        char buffer[65536];
+        int bytes_copied = copyTo(fd, output_socket, buffer, sizeof(buffer));
+        if (bytes_copied == 0) {
+            break;
+        }
+        if (bytes_copied == -1) {
+            return false;
+        }
+    }
+    return true;
+}
+
+// Triggers a bugreport and waits until it is all collected.
+// returns false if error, true if success
+bool doBugreport(int progress_socket, size_t* out_bytes_written, std::string* zip_path) {
+    // Socket will not be available until service starts.
+    android::base::unique_fd s;
+    for (int i = 0; i < kMaxDumpstateConnectAttempts; i++) {
+        s.reset(socket_local_client("dumpstate", ANDROID_SOCKET_NAMESPACE_RESERVED, SOCK_STREAM));
+        if (s != -1) break;
+        sleep(kWaitTimeBetweenConnectAttemptsInSec);
+    }
+
+    if (s == -1) {
+        ALOGE("failed to connect to dumpstatez service");
+        return false;
+    }
+
+    // Set a timeout so that if nothing is read by the timeout, stop reading and quit
+    struct timeval tv = {
+        .tv_sec = kDumpstateTimeoutInSec,
+        .tv_usec = 0,
+    };
+    if (setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv)) != 0) {
+        ALOGW("Cannot set socket timeout (%s)", strerror(errno));
+    }
+
+    std::string line;
+    std::string last_nonempty_line;
+    while (true) {
+        char buffer[65536];
+        ssize_t bytes_read = copyTo(s, progress_socket, buffer, sizeof(buffer));
+        if (bytes_read == 0) {
+            break;
+        }
+        if (bytes_read == -1) {
+            return false;
+        }
+        // Process the buffer line by line. this is needed for the filename.
+        for (int i = 0; i < bytes_read; i++) {
+            char c = buffer[i];
+            if (c == '\n') {
+                processLine(line, zip_path, &last_nonempty_line);
+                line.clear();
+            } else {
+                line.append(1, c);
+            }
+        }
+    }
+    s.reset();
+    // Process final line, in case it didn't finish with newline.
+    processLine(line, zip_path, &last_nonempty_line);
+    // if doBugReport finished successfully, zip path should be set.
+    if (zip_path->empty()) {
+        ALOGE("no zip file path was found in bugreportz progress data");
+        return false;
+    }
+    return true;
+}
+
+// Removes bugreport
+void cleanupBugreportFile(const std::string& zip_path) {
+    if (unlink(zip_path.c_str()) != 0) {
+        ALOGE("Could not unlink %s (%s)", zip_path.c_str(), strerror(errno));
+    }
+}
+
+}  // namespace
+
+int main(void) {
+    ALOGE("Starting bugreport collecting service");
+
+    auto t0 = std::chrono::steady_clock::now();
+
+    // Start the dumpstatez service.
+    android::base::SetProperty("ctl.start", "car-dumpstatez");
+
+    size_t bytes_written = 0;
+
+    std::string zip_path;
+    int progress_socket = openSocket(kCarBrProgressSocket);
+    if (progress_socket < 0) {
+        // early out. in this case we will not print the final message, but that is ok.
+        android::base::SetProperty("ctl.stop", "car-dumpstatez");
+        return EXIT_FAILURE;
+    }
+    bool ret_val = doBugreport(progress_socket, &bytes_written, &zip_path);
+    close(progress_socket);
+
+    int output_socket = openSocket(kCarBrOutputSocket);
+    if (output_socket != -1 && ret_val) {
+        ret_val = copyFile(zip_path, output_socket);
+    }
+    if (output_socket != -1) {
+        close(output_socket);
+    }
+
+    auto delta = std::chrono::duration_cast<std::chrono::duration<double>>(
+                     std::chrono::steady_clock::now() - t0)
+                     .count();
+
+    std::string result = ret_val ? "success" : "failed";
+    ALOGI("bugreport %s in %.02fs, %zu bytes written", result.c_str(), delta, bytes_written);
+    cleanupBugreportFile(zip_path);
+
+    // No matter how doBugreport() finished, let's try to explicitly stop
+    // car-dumpstatez in case it stalled.
+    android::base::SetProperty("ctl.stop", "car-dumpstatez");
+
+    return ret_val ? EXIT_SUCCESS : EXIT_FAILURE;
+}
diff --git a/car-cluster-logging-renderer/Android.mk b/car-cluster-logging-renderer/Android.mk
deleted file mode 100644
index 5d88b48..0000000
--- a/car-cluster-logging-renderer/Android.mk
+++ /dev/null
@@ -1,41 +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.
-#
-#
-ifneq ($(TARGET_BUILD_PDK),true)
-LOCAL_PATH:= $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-LOCAL_PACKAGE_NAME := android.car.cluster.loggingrenderer
-LOCAL_PRIVATE_PLATFORM_APIS := true
-
-# Each update should be signed by OEMs
-LOCAL_CERTIFICATE := platform
-LOCAL_PRIVILEGED_MODULE := true
-
-LOCAL_PROGUARD_FLAG_FILES := proguard.flags
-LOCAL_PROGUARD_ENABLED := disabled
-
-LOCAL_JAVA_LIBRARIES += android.car
-
-LOCAL_STATIC_ANDROID_LIBRARIES += \
-    androidx.car_car-cluster
-
-LOCAL_REQUIRED_MODULES := privapp_whitelist_android.car.cluster.loggingrenderer
-
-include $(BUILD_PACKAGE)
-endif
diff --git a/car-cluster-logging-renderer/AndroidManifest.xml b/car-cluster-logging-renderer/AndroidManifest.xml
deleted file mode 100644
index 81fa46d..0000000
--- a/car-cluster-logging-renderer/AndroidManifest.xml
+++ /dev/null
@@ -1,35 +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="android.car.cluster.loggingrenderer"
-      android:sharedUserId="android.uid.system"
-      android:versionCode="1"
-      android:versionName="1.0">
-
-    <protected-broadcast android:name="android.car.cluster.NAVIGATION_STATE_UPDATE"/>
-
-    <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS"/>
-
-    <application android:label="@string/app_name"
-                 android:icon="@drawable/ic_launcher"
-                 android:directBootAware="true"
-                 android:persistent="true">
-        <service android:name=".LoggingClusterRenderingService"
-                 android:exported="false"
-                 android:permission="android.car.permission.BIND_INSTRUMENT_CLUSTER_RENDERER_SERVICE"
-        />
-    </application>
-</manifest>
diff --git a/car-cluster-logging-renderer/proguard.flags b/car-cluster-logging-renderer/proguard.flags
deleted file mode 100644
index 22cc22d..0000000
--- a/car-cluster-logging-renderer/proguard.flags
+++ /dev/null
@@ -1,3 +0,0 @@
--verbose
--keep @com.android.internal.annotations.VisibleForTesting class *
-
diff --git a/car-cluster-logging-renderer/res/drawable-hdpi/ic_launcher.png b/car-cluster-logging-renderer/res/drawable-hdpi/ic_launcher.png
deleted file mode 100644
index 96a442e..0000000
--- a/car-cluster-logging-renderer/res/drawable-hdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/car-cluster-logging-renderer/res/drawable-ldpi/ic_launcher.png b/car-cluster-logging-renderer/res/drawable-ldpi/ic_launcher.png
deleted file mode 100644
index 9923872..0000000
--- a/car-cluster-logging-renderer/res/drawable-ldpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/car-cluster-logging-renderer/res/drawable-mdpi/ic_launcher.png b/car-cluster-logging-renderer/res/drawable-mdpi/ic_launcher.png
deleted file mode 100644
index 359047d..0000000
--- a/car-cluster-logging-renderer/res/drawable-mdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/car-cluster-logging-renderer/res/drawable-xhdpi/ic_launcher.png b/car-cluster-logging-renderer/res/drawable-xhdpi/ic_launcher.png
deleted file mode 100644
index 71c6d76..0000000
--- a/car-cluster-logging-renderer/res/drawable-xhdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/car-cluster-logging-renderer/res/values-am/strings.xml b/car-cluster-logging-renderer/res/values-am/strings.xml
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-am/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-ar/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-as/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index a3ea5d3..0000000
--- a/car-cluster-logging-renderer/res/values-az/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-b+sr+Latn/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-be/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-bg/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-bn/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-bs/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-ca/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-cs/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-da/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-de/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-el/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-en-rAU/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-en-rCA/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-en-rGB/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-en-rIN/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index 9cf17c1..0000000
--- a/car-cluster-logging-renderer/res/values-en-rXC/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-es-rUS/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-es/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-et/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-eu/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-fa/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-fi/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-fr-rCA/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-fr/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-gl/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-gu/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-hi/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-hr/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-hu/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-hy/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-in/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-is/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-it/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-iw/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-ja/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-ka/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-kk/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-km/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-kn/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-ko/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-ky/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-lo/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-lt/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-lv/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-mk/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-ml/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-mn/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-mr/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-ms/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-my/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-nb/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-ne/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-nl/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-or/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-pa/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-pl/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-pt-rPT/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-pt/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-ro/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-ru/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-si/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-sk/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-sl/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-sq/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-sr/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-sv/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-sw/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-ta/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-te/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-th/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-tl/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-tr/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-uk/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-ur/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-uz/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-vi/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-zh-rCN/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-zh-rHK/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-zh-rTW/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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
deleted file mode 100644
index daa61a3..0000000
--- a/car-cluster-logging-renderer/res/values-zu/strings.xml
+++ /dev/null
@@ -1,20 +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.
- -->
-
-<resources 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/strings.xml b/car-cluster-logging-renderer/res/values/strings.xml
deleted file mode 100644
index f36db0d..0000000
--- a/car-cluster-logging-renderer/res/values/strings.xml
+++ /dev/null
@@ -1,18 +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.
--->
-<resources>
-    <string name="app_name">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
deleted file mode 100644
index c42ea5e..0000000
--- a/car-cluster-logging-renderer/src/android/car/cluster/loggingrenderer/LoggingClusterRenderingService.java
+++ /dev/null
@@ -1,80 +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.loggingrenderer;
-
-import android.car.cluster.renderer.InstrumentClusterRenderingService;
-import android.car.cluster.renderer.NavigationRenderer;
-import android.car.navigation.CarNavigationInstrumentCluster;
-import android.content.Intent;
-import android.os.Bundle;
-import android.os.UserHandle;
-import android.util.Log;
-
-import androidx.car.cluster.navigation.NavigationState;
-import androidx.versionedparcelable.ParcelUtils;
-
-import com.google.android.collect.Lists;
-
-/**
- * Dummy implementation of {@link LoggingClusterRenderingService} to log all interaction.
- */
-public class LoggingClusterRenderingService extends InstrumentClusterRenderingService {
-    private static final String TAG = LoggingClusterRenderingService.class.getSimpleName();
-    private static final String NAV_STATE_BUNDLE_KEY = "navstate";
-    private static final int NAV_STATE_EVENT_ID = 1;
-
-    @Override
-    public NavigationRenderer getNavigationRenderer() {
-        NavigationRenderer navigationRenderer = new NavigationRenderer() {
-            @Override
-            public CarNavigationInstrumentCluster getNavigationProperties() {
-                Log.i(TAG, "getNavigationProperties");
-                CarNavigationInstrumentCluster config =
-                        CarNavigationInstrumentCluster.createCluster(1000);
-                config.getExtra().putIntegerArrayList("dummy", Lists.newArrayList(1, 2, 3, 4));
-                Log.i(TAG, "getNavigationProperties, returns: " + config);
-                return config;
-            }
-
-            @Override
-            public void onEvent(int eventType, Bundle bundle) {
-                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());
-
-                    // Sending broadcast for testing.
-                    Intent intent = new Intent("android.car.cluster.NAVIGATION_STATE_UPDATE");
-                    intent.putExtra(NAV_STATE_BUNDLE_KEY, bundle);
-                    sendBroadcastAsUser(intent, UserHandle.ALL);
-                } else {
-                    for (String key : bundle.keySet()) {
-                        bundleSummary.append(key);
-                        bundleSummary.append("=");
-                        bundleSummary.append(bundle.get(key));
-                        bundleSummary.append(" ");
-                    }
-                }
-                Log.i(TAG, "onEvent(" + eventType + ", " + bundleSummary + ")");
-            }
-        };
-
-        Log.i(TAG, "createNavigationRenderer, returns: " + navigationRenderer);
-        return navigationRenderer;
-    }
-}
diff --git a/car-lib/src/android/car/CarBugreportManager.java b/car-lib/src/android/car/CarBugreportManager.java
index 07e9c5d..398e208 100644
--- a/car-lib/src/android/car/CarBugreportManager.java
+++ b/car-lib/src/android/car/CarBugreportManager.java
@@ -141,9 +141,11 @@
     /**
      * Request a bug report. An old style flat bugreport is generated in the background.
      * The fd is closed when bugreport is written or if an exception happens.
+     * This API will be removed once the clients move the new API.
      *
      * @param fd  the dump file
      * @param callback  the callback for reporting dump status
+     * @deprecated  use requestZippedbugreport instead.
      */
     @RequiresPermission(android.Manifest.permission.DUMP)
     public void requestBugreport(@NonNull ParcelFileDescriptor fd,
@@ -161,6 +163,36 @@
         }
     }
 
+    /**
+     * Request a bug report. An zipped bugreport is generated in the background.
+     * The file descriptors are closed when bugreport is written or if an exception happens.
+     * The progress protocol is described
+     * <a href="https://android.googlesource.com/platform/frameworks/native/+/master/cmds/bugreportz/readme.md">
+     *     here</a>
+     *
+     * @param output the zipped bugreport file
+     * @param progress the progress information that includes failure/success status.
+     * @param callback  the callback for reporting dump status
+     */
+    @RequiresPermission(android.Manifest.permission.DUMP)
+    public void requestZippedBugreport(@NonNull ParcelFileDescriptor output,
+            @NonNull ParcelFileDescriptor progress,
+            @NonNull CarBugreportManagerCallback callback) {
+        Preconditions.checkNotNull(output);
+        Preconditions.checkNotNull(progress);
+        Preconditions.checkNotNull(callback);
+        try {
+            CarBugreportManagerCallbackWrapper wrapper =
+                    new CarBugreportManagerCallbackWrapper(callback, mHandler);
+            mService.requestZippedBugreport(output, progress, wrapper);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        } finally {
+            IoUtils.closeQuietly(output);
+            IoUtils.closeQuietly(progress);
+        }
+    }
+
     @Override
     public void onCarDisconnected() {
     }
diff --git a/car-lib/src/android/car/ICarBugreportService.aidl b/car-lib/src/android/car/ICarBugreportService.aidl
index 9f20081..709cc2b 100644
--- a/car-lib/src/android/car/ICarBugreportService.aidl
+++ b/car-lib/src/android/car/ICarBugreportService.aidl
@@ -26,7 +26,23 @@
  interface ICarBugreportService {
 
     /**
-     * Starts bugreport service to capture a bugreport
+     * Starts bugreport service to capture a bugreport.
+     * This method will be removed once all the clients transition to the new API.
+     * @deprecated
      */
     void requestBugreport(in ParcelFileDescriptor pfd, ICarBugreportCallback callback) = 1;
- }
\ No newline at end of file
+
+    /**
+     * Starts bugreport service to capture a zipped bugreport. The caller needs to provide
+     * two file descriptors. The "output" file descriptor will be used to provide the actual
+     * zip file and the "progress" descriptor will be used to provide the progress information.
+     * Both of these descriptors are written by the service and will be read by the client.
+     *
+     * The progress protocol is described
+     * <a href="https://android.googlesource.com/platform/frameworks/native/+/master/cmds/bugreportz/readme.md">
+     *     here</a>
+     */
+    void requestZippedBugreport(in ParcelFileDescriptor output, in ParcelFileDescriptor progress,
+        ICarBugreportCallback callback) = 2;
+ }
+
diff --git a/car-lib/src/android/car/media/CarAudioManager.java b/car-lib/src/android/car/media/CarAudioManager.java
index 6c2e1cd..c3338a9 100644
--- a/car-lib/src/android/car/media/CarAudioManager.java
+++ b/car-lib/src/android/car/media/CarAudioManager.java
@@ -412,6 +412,71 @@
     }
 
     /**
+     * Gets the audio zones currently available
+     *
+     * @return audio zone ids
+     * @hide
+     */
+    @RequiresPermission(Car.PERMISSION_CAR_CONTROL_AUDIO_SETTINGS)
+    public @NonNull int[] getAudioZoneIds() {
+        try {
+            return mService.getAudioZoneIds();
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /**
+     * Gets the audio zone id currently mapped to uId,
+     * defaults to PRIMARY_AUDIO_ZONE if no mapping exist
+     *
+     * @param uid The uid to map
+     * @return zone id mapped to uid
+     * @hide
+     */
+    @RequiresPermission(Car.PERMISSION_CAR_CONTROL_AUDIO_SETTINGS)
+    public int getZoneIdForUid(int uid) {
+        try {
+            return mService.getZoneIdForUid(uid);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /**
+     * Maps the audio zone id to uid
+     *
+     * @param zoneId The audio zone id
+     * @param uid The uid to map
+     * @return true if the uid is successfully mapped
+     * @hide
+     */
+    @RequiresPermission(Car.PERMISSION_CAR_CONTROL_AUDIO_SETTINGS)
+    public boolean setZoneIdForUid(int zoneId, int uid) {
+        try {
+            return mService.setZoneIdForUid(zoneId, uid);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /**
+     * Clears the current zone mapping of the uid
+     *
+     * @param uid The uid to clear
+     * @return true if the zone was successfully cleared
+     * @hide
+     */
+    @RequiresPermission(Car.PERMISSION_CAR_CONTROL_AUDIO_SETTINGS)
+    public boolean clearZoneIdForUid(int uid) {
+        try {
+            return mService.clearZoneIdForUid(uid);
+        } catch (RemoteException e) {
+            throw e.rethrowFromSystemServer();
+        }
+    }
+
+    /**
      * Gets array of {@link AudioAttributes} usages for a volume group in a zone.
      *
      * @param zoneId The zone id whose volume group is queried.
diff --git a/car-lib/src/android/car/media/ICarAudio.aidl b/car-lib/src/android/car/media/ICarAudio.aidl
index 178f75a..a2f33ad 100644
--- a/car-lib/src/android/car/media/ICarAudio.aidl
+++ b/car-lib/src/android/car/media/ICarAudio.aidl
@@ -43,6 +43,11 @@
     int getVolumeGroupIdForUsage(int zoneId, int usage);
     int[] getUsagesForVolumeGroupId(int zoneId, int groupId);
 
+    int[] getAudioZoneIds();
+    int getZoneIdForUid(int uid);
+    boolean setZoneIdForUid(int zoneId, int uid);
+    boolean clearZoneIdForUid(int uid);
+
     /**
      * IBinder is ICarVolumeCallback but passed as IBinder due to aidl hidden.
      */
diff --git a/car_product/build/car.mk b/car_product/build/car.mk
index 66577be..104d5d6 100644
--- a/car_product/build/car.mk
+++ b/car_product/build/car.mk
@@ -39,8 +39,7 @@
     EmbeddedKitchenSinkApp \
     VmsPublisherClientSample \
     VmsSubscriberClientSample \
-    android.car.cluster.loggingrenderer \
-    DirectRenderingClusterSample \
+    DirectRenderingCluster \
     GarageModeTestApp \
 
 # SEPolicy for test apps / services
diff --git a/car_product/build/car_base.mk b/car_product/build/car_base.mk
index 385a2ea..5132890 100644
--- a/car_product/build/car_base.mk
+++ b/car_product/build/car_base.mk
@@ -53,7 +53,8 @@
     libwebrtc_audio_preprocessing \
     wifi-service \
     A2dpSinkService \
-    PackageInstaller
+    PackageInstaller \
+    car-bugreportd \
 
 # EVS resources
 PRODUCT_PACKAGES += android.automotive.evs.manager@1.0
diff --git a/car_product/overlay/frameworks/base/core/res/res/values-night/colors_device_defaults.xml b/car_product/overlay/frameworks/base/core/res/res/values-night/colors_device_defaults.xml
new file mode 100644
index 0000000..f062f1f
--- /dev/null
+++ b/car_product/overlay/frameworks/base/core/res/res/values-night/colors_device_defaults.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.
+*/
+-->
+
+<resources>
+    <color name="background_floating_device_default_dark">@*android:color/car_grey_900</color>
+    <color name="background_floating_device_default_light">@*android:color/car_grey_900</color>
+</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values/colors_device_defaults.xml b/car_product/overlay/frameworks/base/core/res/res/values/colors_device_defaults.xml
index 2cd2d1f..7e2c329 100644
--- a/car_product/overlay/frameworks/base/core/res/res/values/colors_device_defaults.xml
+++ b/car_product/overlay/frameworks/base/core/res/res/values/colors_device_defaults.xml
@@ -42,8 +42,8 @@
     <color name="background_device_default_dark">@*android:color/car_background</color>
     <color name="background_device_default_light">@*android:color/car_background</color>
 
-    <color name="background_floating_device_default_dark">@*android:color/car_colorSecondary</color>
-    <color name="background_floating_device_default_light">@*android:color/car_colorSecondary</color>
+    <color name="background_floating_device_default_dark">@*android:color/car_grey_868</color>
+    <color name="background_floating_device_default_light">@*android:color/car_grey_868</color>
 
     <color name="error_color_device_default_dark">@*android:color/car_red_a700</color>
     <color name="error_color_device_default_light">@*android:color/car_red_a700</color>
diff --git a/car_product/sepolicy/private/carservice_app.te b/car_product/sepolicy/private/carservice_app.te
index 3c72a79..4f8315a 100644
--- a/car_product/sepolicy/private/carservice_app.te
+++ b/car_product/sepolicy/private/carservice_app.te
@@ -3,6 +3,7 @@
 
 # Allow Car Service to be the client of Vehicle and Audio Control HALs
 hal_client_domain(carservice_app, hal_audiocontrol)
+hal_client_domain(carservice_app, hal_health)
 hal_client_domain(carservice_app, hal_vehicle)
 
 # Allow to set boot.car_service_created property
@@ -11,6 +12,8 @@
 # Allow Car Service to register itself with ServiceManager
 allow carservice_app carservice_service:service_manager add;
 
+allow carservice_app wifi_service:service_manager find;
+
 # Allow Car Service to access certain system services.
 # Keep alphabetically sorted.
 allow carservice_app {
@@ -46,6 +49,8 @@
 allow carservice_app system_car_data_file:dir create_dir_perms;
 allow carservice_app system_car_data_file:{ file lnk_file } create_file_perms;
 
+allow carservice_app cgroup:file rw_file_perms;
+
 # For I/O stats tracker
 allow carservice_app proc_uid_io_stats:file { read open getattr };
 
@@ -54,8 +59,5 @@
 # To access /sys/fs/<type>/<partition>/lifetime_write_kbytes
 allow carservice_app sysfs_fs_lifetime_write:file { getattr open read };
 
-# For allowing dumpstate to be called by CarBugreportManagerService only in userdebug or eng builds.
-userdebug_or_eng(`
 set_prop(carservice_app, ctl_start_prop)
 unix_socket_connect(carservice_app, dumpstate, dumpstate)
-')
\ No newline at end of file
diff --git a/car_product/sepolicy/private/dumpstate.te b/car_product/sepolicy/private/dumpstate.te
new file mode 100644
index 0000000..24a0208
--- /dev/null
+++ b/car_product/sepolicy/private/dumpstate.te
@@ -0,0 +1,3 @@
+set_prop(dumpstate, ctl_start_prop)
+set_prop(dumpstate, ctl_stop_prop)
+allow dumpstate dumpstate_socket:sock_file write;
\ No newline at end of file
diff --git a/car_product/sepolicy/private/file_contexts b/car_product/sepolicy/private/file_contexts
index b8f62fa..908c853 100644
--- a/car_product/sepolicy/private/file_contexts
+++ b/car_product/sepolicy/private/file_contexts
@@ -2,3 +2,7 @@
 
 
 /data/system/car(/.*)? u:object_r:system_car_data_file:s0
+
+/system/bin/car-bugreportd  u:object_r:dumpstate_exec:s0
+/dev/socket/car_br_progress_socket  u:object_r:dumpstate_socket:s0
+/dev/socket/car_br_output_socket  u:object_r:dumpstate_socket:s0
diff --git a/car_product/sepolicy/private/system_app.te b/car_product/sepolicy/private/system_app.te
new file mode 100644
index 0000000..232b117
--- /dev/null
+++ b/car_product/sepolicy/private/system_app.te
@@ -0,0 +1 @@
+hal_client_domain(system_app, hal_vehicle)
diff --git a/car_product/sepolicy/private/system_server.te b/car_product/sepolicy/private/system_server.te
index 44a11c5..2743021 100644
--- a/car_product/sepolicy/private/system_server.te
+++ b/car_product/sepolicy/private/system_server.te
@@ -1,3 +1,4 @@
 # Car service in system server can read bootuser device id property
 get_prop(system_server, car_bootuser_prop)
 
+allow system_server carservice_service:service_manager find;
diff --git a/evs/sepolicy/evs_app.te b/evs/sepolicy/evs_app.te
index b5e3c95..8c036b3 100644
--- a/evs/sepolicy/evs_app.te
+++ b/evs/sepolicy/evs_app.te
@@ -6,11 +6,11 @@
 hal_client_domain(evs_app, hal_graphics_allocator)
 
 # allow init to launch processes in this context
-type evs_app_exec, exec_type, file_type;
+type evs_app_exec, exec_type, file_type, system_file_type;
 init_daemon_domain(evs_app)
 
 # gets access to its own files on disk
-type evs_app_files, file_type;
+type evs_app_files, file_type, system_file_type;
 allow evs_app evs_app_files:file { getattr open read };
 allow evs_app evs_app_files:dir search;
 
diff --git a/evs/sepolicy/evs_driver.te b/evs/sepolicy/evs_driver.te
index 3d5263e..f1f31e9 100644
--- a/evs/sepolicy/evs_driver.te
+++ b/evs/sepolicy/evs_driver.te
@@ -1,9 +1,10 @@
 # evs_mock mock hardware driver service
 type hal_evs_driver, domain, coredomain;
 hal_server_domain(hal_evs_driver, hal_evs)
+hal_client_domain(hal_evs_driver, hal_evs)
 
 # allow init to launch processes in this context
-type hal_evs_driver_exec, exec_type, file_type;
+type hal_evs_driver_exec, exec_type, file_type, system_file_type;
 init_daemon_domain(hal_evs_driver)
 binder_use(hal_evs_driver)
 
diff --git a/evs/sepolicy/evs_manager.te b/evs/sepolicy/evs_manager.te
index 58ea6aa..51acac1 100644
--- a/evs/sepolicy/evs_manager.te
+++ b/evs/sepolicy/evs_manager.te
@@ -2,10 +2,9 @@
 type evs_manager, domain, coredomain;
 hal_server_domain(evs_manager, hal_evs)
 hal_client_domain(evs_manager, hal_evs)
-add_hwservice(hal_evs, hal_evs_hwservice)
 
 # allow init to launch processes in this context
-type evs_manager_exec, exec_type, file_type;
+type evs_manager_exec, exec_type, file_type, system_file_type;
 init_daemon_domain(evs_manager)
 
 # allow use of hwservices
diff --git a/service/AndroidManifest.xml b/service/AndroidManifest.xml
index 3e50805..25b2cfe 100644
--- a/service/AndroidManifest.xml
+++ b/service/AndroidManifest.xml
@@ -496,6 +496,7 @@
     <uses-permission android:name="android.permission.LOCATION_HARDWARE" />
     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
     <uses-permission android:name="android.permission.PROVIDE_TRUST_AGENT" />
+    <uses-permission android:name="android.permission.READ_LOGS" />
 
     <application android:label="@string/app_title"
                  android:directBootAware="true"
diff --git a/service/res/values-af/config.xml b/service/res/values-af/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-af/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index d5b6dbd..8da32cf 100644
--- a/service/res/values-af/strings.xml
+++ b/service/res/values-af/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"lees diagnostiese data"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Lees diagnostiese data van die motor af."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"vee diagnostiese data uit"</string>
diff --git a/service/res/values-am/config.xml b/service/res/values-am/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-am/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index 3b5594c..41b7622 100644
--- a/service/res/values-am/strings.xml
+++ b/service/res/values-am/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"የምርመራ ውሂብን አንብብ"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"ከመኪናው ላይ የምርመራ ውሂብን ያንብቡ።"</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"የምርመራ ውሂብን አጽዳ"</string>
diff --git a/service/res/values-ar/config.xml b/service/res/values-ar/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-ar/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index 288e0bb..d9b7040 100644
--- a/service/res/values-ar/strings.xml
+++ b/service/res/values-ar/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"قراءة البيانات التشخيصية"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"يمكنك قراءة البيانات التشخيصية من السيارة."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"محو البيانات التشخيصية"</string>
diff --git a/service/res/values-as/config.xml b/service/res/values-as/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-as/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index d40ec8f..0cac303 100644
--- a/service/res/values-as/strings.xml
+++ b/service/res/values-as/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"ডায়গন’ষ্টিক ডেটা পঢ়িব"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"গাড়ীৰ ডায়গ’ষ্টিক তথ্য পঢ়িব।"</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"ডায়গন’ষ্টিক ডেটা মচিব"</string>
diff --git a/service/res/values-az/config.xml b/service/res/values-az/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-az/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index 50f8279..5cdfa3d 100644
--- a/service/res/values-az/strings.xml
+++ b/service/res/values-az/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"diaqnoztika məlumatlarını oxumaq"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Avtomobilin diaqnoztika məlumatlarını oxumaq."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"diaqnoztika məlumatlarını silmək"</string>
diff --git a/service/res/values-b+sr+Latn/config.xml b/service/res/values-b+sr+Latn/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-b+sr+Latn/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index 1f23ce7..e0da81d 100644
--- a/service/res/values-b+sr+Latn/strings.xml
+++ b/service/res/values-b+sr+Latn/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"čitanje dijagnostičkih podataka"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Čitanje dijagnostičkih podataka iz automobila."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"brisanje dijagnostičkih podataka"</string>
diff --git a/service/res/values-be/config.xml b/service/res/values-be/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-be/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index 6174588..b5d46ae 100644
--- a/service/res/values-be/strings.xml
+++ b/service/res/values-be/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"атрымліваць даныя дыягностыкі"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Счытванне дыягнастычных даных аўтамабіля"</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"ачысціць даныя дыягностыкі"</string>
diff --git a/service/res/values-bg/config.xml b/service/res/values-bg/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-bg/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index fd36d20..d5c1fa4 100644
--- a/service/res/values-bg/strings.xml
+++ b/service/res/values-bg/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"четене на диагностични данни"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Четене на диагностични данни от автомобила."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"изчистване на диагностичните данни"</string>
diff --git a/service/res/values-bn/config.xml b/service/res/values-bn/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-bn/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index 0b03a73..3b5957b 100644
--- a/service/res/values-bn/strings.xml
+++ b/service/res/values-bn/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"ডায়াগনস্টিক ডেটা দেখা"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"গাড়ির ডায়াগনস্টিক সংক্রান্ত ডেটা দেখা।"</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"ডায়াগনস্টিকস ডেটা সরানো"</string>
diff --git a/service/res/values-bs/config.xml b/service/res/values-bs/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-bs/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index 2d69ac0..5770adf 100644
--- a/service/res/values-bs/strings.xml
+++ b/service/res/values-bs/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"očitati dijagnostičke podatke"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Očitati dijagnostičke podatke automobila."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"brisati dijagnostičke podatke"</string>
diff --git a/service/res/values-ca/config.xml b/service/res/values-ca/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-ca/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index e31da04..535b403 100644
--- a/service/res/values-ca/strings.xml
+++ b/service/res/values-ca/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"llegeix les dades de diagnòstic"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Llegeix les dades de diagnòstic del cotxe."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"esborra les dades de diagnòstic"</string>
diff --git a/service/res/values-cs/config.xml b/service/res/values-cs/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-cs/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index b01f87b..369cdbc 100644
--- a/service/res/values-cs/strings.xml
+++ b/service/res/values-cs/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"čtení diagnostických dat"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Čtení diagnostických dat z auta."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"vymazat diagnostická data"</string>
diff --git a/service/res/values-da/config.xml b/service/res/values-da/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-da/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index d3a3fb0..5513137 100644
--- a/service/res/values-da/strings.xml
+++ b/service/res/values-da/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"tjekke diagnosticeringsdata"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Tjek diagnosticeringsdata fra bilen."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"rydde diagnosticeringsdata"</string>
diff --git a/service/res/values-de/config.xml b/service/res/values-de/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-de/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index 04c3af6..ff4c461 100644
--- a/service/res/values-de/strings.xml
+++ b/service/res/values-de/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"Diagnosedaten zu lesen"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Diagnosedaten des Autos lesen."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"Diagnosedaten zu löschen"</string>
diff --git a/service/res/values-el/config.xml b/service/res/values-el/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-el/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index ec05dc2..d2846d8 100644
--- a/service/res/values-el/strings.xml
+++ b/service/res/values-el/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"παρακολούθηση δεδομένων διαγνωστικών στοιχείων"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Παρακολούθηση δεδομένων διαγνωστικών στοιχείων από το αυτοκίνητο."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"διαγραφή δεδομένων διαγνωστικών στοιχείων"</string>
diff --git a/service/res/values-en-rAU/config.xml b/service/res/values-en-rAU/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-en-rAU/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index d102771..49741f1 100644
--- a/service/res/values-en-rAU/strings.xml
+++ b/service/res/values-en-rAU/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"read diagnostic data"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Read diagnostic data from the car."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"clear diagnostic data"</string>
diff --git a/service/res/values-en-rCA/config.xml b/service/res/values-en-rCA/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-en-rCA/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index d102771..49741f1 100644
--- a/service/res/values-en-rCA/strings.xml
+++ b/service/res/values-en-rCA/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"read diagnostic data"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Read diagnostic data from the car."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"clear diagnostic data"</string>
diff --git a/service/res/values-en-rGB/config.xml b/service/res/values-en-rGB/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-en-rGB/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index d102771..49741f1 100644
--- a/service/res/values-en-rGB/strings.xml
+++ b/service/res/values-en-rGB/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"read diagnostic data"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Read diagnostic data from the car."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"clear diagnostic data"</string>
diff --git a/service/res/values-en-rIN/config.xml b/service/res/values-en-rIN/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-en-rIN/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index d102771..49741f1 100644
--- a/service/res/values-en-rIN/strings.xml
+++ b/service/res/values-en-rIN/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"read diagnostic data"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Read diagnostic data from the car."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"clear diagnostic data"</string>
diff --git a/service/res/values-en-rXC/config.xml b/service/res/values-en-rXC/config.xml
deleted file mode 100644
index a19ba0f..0000000
--- a/service/res/values-en-rXC/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‏‎‎‎‏‎‏‎‎‏‏‎‎‎‏‎‏‏‎‎‏‎‏‏‎‎‎‎‏‎‏‎‏‎‎‎‎‏‎‏‎‏‎‎‏‎‏‏‏‎‎‏‎‎‏‏‎android.car.cluster.sample/.ClusterRenderingServiceImpl‎‏‎‎‏‎"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‎‎‏‎‎‏‎‏‎‏‏‏‏‎‎‎‎‎‏‏‏‏‏‏‏‎‎‎‎‏‎‎‏‎‎‎‏‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‏‎‏‎‎com.android.car/com.android.car.pm.ActivityBlockingActivity‎‏‎‎‏‎"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index fbe2ce1..5bbe05b 100644
--- a/service/res/values-en-rXC/strings.xml
+++ b/service/res/values-en-rXC/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‎‏‏‎‎‏‎‎‏‏‏‏‏‎‏‏‏‎‎‏‎‎‎‎‏‎‏‎‎‎‎‎‏‏‎‏‏‏‎‏‎‎‏‏‎‏‏‏‎‎‏‏‎‎‎read diagnostic data‎‏‎‎‏‎"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‎‎‏‎‎‎‎‎‎‎‏‏‎‏‏‎‏‎‏‎‏‎‏‏‏‏‎‏‎‏‎‏‏‎‏‎‎‎‎‏‎‏‎‎‏‏‎‎‎‏‎‎‎‏‎‎Read diagnostic data from the car.‎‏‎‎‏‎"</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‏‏‎‎‎‎‎‏‏‏‎‎‎‎‏‎‏‎‎‏‎‎‏‏‎‏‏‎‎‎‎‏‎‏‎‎‎‎‏‎‏‏‎‏‏‎‎‏‏‏‎‏‏‎‏‎clear diagnostic data‎‏‎‎‏‎"</string>
diff --git a/service/res/values-es-rUS/config.xml b/service/res/values-es-rUS/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-es-rUS/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index 9011028..ebcc08c 100644
--- a/service/res/values-es-rUS/strings.xml
+++ b/service/res/values-es-rUS/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"leer datos de diagnóstico"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Leer datos de diagnóstico del vehículo."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"borrar datos de diagnóstico"</string>
diff --git a/service/res/values-es/config.xml b/service/res/values-es/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-es/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index 5d54e80..e2a9e88 100644
--- a/service/res/values-es/strings.xml
+++ b/service/res/values-es/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"consultar datos de diagnóstico"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Consultar los datos de diagnóstico del coche."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"borrar los datos de diagnóstico"</string>
diff --git a/service/res/values-et/config.xml b/service/res/values-et/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-et/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index e0b6f86..cfaf748 100644
--- a/service/res/values-et/strings.xml
+++ b/service/res/values-et/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"diagnostikaandmete lugemine"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Auto diagnostikaandmete lugemine."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"diagnostikaandmete kustutamine"</string>
diff --git a/service/res/values-eu/config.xml b/service/res/values-eu/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-eu/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index 5f0249a..9e031a5 100644
--- a/service/res/values-eu/strings.xml
+++ b/service/res/values-eu/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"irakurri datu diagnostikoak"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Irakurri autoaren datu diagnostikoak."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"garbitu datu diagnostikoak"</string>
diff --git a/service/res/values-fa/config.xml b/service/res/values-fa/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-fa/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index 60c38d9..2e29029 100644
--- a/service/res/values-fa/strings.xml
+++ b/service/res/values-fa/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"خواندن داده‌های عیب‌یابی"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"داده‌های عیب‌یابی خودرو را بخوانید."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"پاک کردن داده‌های عیب‌یابی"</string>
diff --git a/service/res/values-fi/config.xml b/service/res/values-fi/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-fi/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index 88d4188..256cdfa 100644
--- a/service/res/values-fi/strings.xml
+++ b/service/res/values-fi/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"nähdä diagnostiikkadataa"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"lukea auton diagnostiikkadataa"</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"poistaa diagnostiikkatiedot"</string>
diff --git a/service/res/values-fr-rCA/config.xml b/service/res/values-fr-rCA/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-fr-rCA/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index 82dc2e6..470879d 100644
--- a/service/res/values-fr-rCA/strings.xml
+++ b/service/res/values-fr-rCA/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"lire des données de diagnostic"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Lire des données de diagnostic à partir de la voiture."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"effacer les données de diagnostic"</string>
diff --git a/service/res/values-fr/config.xml b/service/res/values-fr/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-fr/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index 4c742e3..6d562be 100644
--- a/service/res/values-fr/strings.xml
+++ b/service/res/values-fr/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"Lire les données de diagnostic"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Lire les données de diagnostic de la voiture."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"Effacer les données de diagnostic"</string>
diff --git a/service/res/values-gl/config.xml b/service/res/values-gl/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-gl/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index f3b1a83..efcf7b2 100644
--- a/service/res/values-gl/strings.xml
+++ b/service/res/values-gl/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"ler datos de diagnóstico"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Ler datos de diagnóstico do coche."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"borrar datos de diagnóstico"</string>
diff --git a/service/res/values-gu/config.xml b/service/res/values-gu/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-gu/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index e465258..7c00a7d 100644
--- a/service/res/values-gu/strings.xml
+++ b/service/res/values-gu/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"નિદાનનો ડેટા વાંચો"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"કારમાંથી નિદાનનો ડેટા વાંચો."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"નિદાનનો ડેટા સાફ કરો"</string>
diff --git a/service/res/values-hi/config.xml b/service/res/values-hi/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-hi/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index a53a9ce..ff8429a 100644
--- a/service/res/values-hi/strings.xml
+++ b/service/res/values-hi/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"गड़बड़ी की पहचान का डेटा देख सकता है"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"कार की \'गड़बड़ी की पहचान का डेटा\' देख सकता है."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"गड़बड़ी की पहचान का डेटा मिटा सकता है"</string>
diff --git a/service/res/values-hr/config.xml b/service/res/values-hr/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-hr/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index edc2b17..2d2060b 100644
--- a/service/res/values-hr/strings.xml
+++ b/service/res/values-hr/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"čitati dijagnostičke podatke"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"čitati dijagnostičke podatke automobila"</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"izbrisati dijagnostičke podatke"</string>
diff --git a/service/res/values-hu/config.xml b/service/res/values-hu/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-hu/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index ef60a68..f427b07 100644
--- a/service/res/values-hu/strings.xml
+++ b/service/res/values-hu/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"olvashatja a diagnosztikai adatokat"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Olvashatja az autó diagnosztikai adatait."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"törölheti a diagnosztikai adatokat"</string>
diff --git a/service/res/values-hy/config.xml b/service/res/values-hy/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-hy/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index 34ae170..a706dc4 100644
--- a/service/res/values-hy/strings.xml
+++ b/service/res/values-hy/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"կարդալ ախտորոշման մասին տվյալները"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Կարդալ մեքենայի ախտորոշման տվյալները։"</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"մաքրել ախտորոշման տվյալները"</string>
diff --git a/service/res/values-in/config.xml b/service/res/values-in/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-in/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index 169cdcc..3651eaa 100644
--- a/service/res/values-in/strings.xml
+++ b/service/res/values-in/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"membaca data diagnostik"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Membaca data diagnostik dari mobil."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"menghapus data diagnostik"</string>
diff --git a/service/res/values-is/config.xml b/service/res/values-is/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-is/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index bd81b4c..64f68f5 100644
--- a/service/res/values-is/strings.xml
+++ b/service/res/values-is/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"lesa greiningargögn"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Lesa greiningargögn úr bílnum."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"hreinsa greiningargögn"</string>
diff --git a/service/res/values-it/config.xml b/service/res/values-it/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-it/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index f6be2f8..07aad4e 100644
--- a/service/res/values-it/strings.xml
+++ b/service/res/values-it/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"Lettura dei dati diagnostici"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Consente di leggere i dati diagnostici dell\'automobile."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"Cancellazione dei dati diagnostici"</string>
diff --git a/service/res/values-iw/config.xml b/service/res/values-iw/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-iw/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index 7e28b02..1770cf9 100644
--- a/service/res/values-iw/strings.xml
+++ b/service/res/values-iw/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"קריאת נתוני אבחון"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"קריאת נתוני אבחון מהרכב."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"מחיקת נתוני האבחון"</string>
diff --git a/service/res/values-ja/config.xml b/service/res/values-ja/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-ja/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index 22ca04f..9c8ad93 100644
--- a/service/res/values-ja/strings.xml
+++ b/service/res/values-ja/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"診断データの読み取り"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"車から診断データを読み取ります。"</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"診断データの消去"</string>
diff --git a/service/res/values-ka/config.xml b/service/res/values-ka/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-ka/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index bf533b3..d8343a8 100644
--- a/service/res/values-ka/strings.xml
+++ b/service/res/values-ka/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"დიაგნოსტიკური მონაცემების წაკითხვა"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"დიაგნოსტიკური მონაცემების წაკითხვა მანქანიდან."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"დიაგნოსტიკური მონაცემების გასუფთავება"</string>
diff --git a/service/res/values-kk/config.xml b/service/res/values-kk/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-kk/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index 2eeb9cf..b031e9d 100644
--- a/service/res/values-kk/strings.xml
+++ b/service/res/values-kk/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"диагностикалық деректерді көру"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Көліктің диагностикалық деректерін көру."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"диагностикалық деректерді өшіру"</string>
diff --git a/service/res/values-km/config.xml b/service/res/values-km/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-km/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index d25d5aa..3039b03 100644
--- a/service/res/values-km/strings.xml
+++ b/service/res/values-km/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"អានទិន្នន័យ​វិភាគ"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"អាន​អំពីទិន្នន័យ​វិភាគពី​រថយន្ត។"</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"សម្អាត​ទិន្នន័យ​វិភាគ"</string>
diff --git a/service/res/values-kn/config.xml b/service/res/values-kn/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-kn/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index 14b7b54..0473b2d 100644
--- a/service/res/values-kn/strings.xml
+++ b/service/res/values-kn/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"ಡಯಾಗ್ನೋಸ್ಟಿಕ್ ಡೇಟಾವನ್ನು ಓದಿ"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"ಕಾರಿನಲ್ಲಿರುವ ಅದರ ಡಯಾಗ್ನೋಸ್ಟಿಕ್ ಡೇಟಾವನ್ನು ಓದಿ."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"ಡಯಾಗ್ನೋಸ್ಟಿಕ್ ಡೇಟಾವನ್ನು ತೆರವುಗೊಳಿಸಿ"</string>
diff --git a/service/res/values-ko/config.xml b/service/res/values-ko/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-ko/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index cfcc030..4853d47 100644
--- a/service/res/values-ko/strings.xml
+++ b/service/res/values-ko/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"진단 데이터 읽기"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"차량의 진단 데이터를 읽습니다."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"진단 데이터 삭제"</string>
diff --git a/service/res/values-ky/config.xml b/service/res/values-ky/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-ky/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index 2999b31..f2a21df 100644
--- a/service/res/values-ky/strings.xml
+++ b/service/res/values-ky/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"мүчүлүштүктөрдү аныктоо дайындарын окуу"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Унаадагы мүчүлүштүктөрдү аныктоо дайындарын окуу."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"мүчүлүштүктөрдү аныктоо дайындарын тазалоо"</string>
diff --git a/service/res/values-lo/config.xml b/service/res/values-lo/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-lo/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index 2052db6..2fe6c4f 100644
--- a/service/res/values-lo/strings.xml
+++ b/service/res/values-lo/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"ອ່ານຂໍ້ມູນການວິເຄາະ"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"ອ່ານຂໍ້ມູນການວິເຄາະຈາກລົດ."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"ລຶບລ້າງຂໍ້ມູນການວິເຄາະ"</string>
diff --git a/service/res/values-lt/config.xml b/service/res/values-lt/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-lt/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index d9eca78..2342259 100644
--- a/service/res/values-lt/strings.xml
+++ b/service/res/values-lt/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"nuskaityti diagnostikos duomenis"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Nuskaityti automobilio diagnostikos duomenis."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"išvalyti diagnostikos duomenis"</string>
diff --git a/service/res/values-lv/config.xml b/service/res/values-lv/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-lv/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index c319e52..f926f13 100644
--- a/service/res/values-lv/strings.xml
+++ b/service/res/values-lv/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"nolasīt diagnostikas datus"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Nolasīt diagnostikas datus no automašīnas."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"notīrīt diagnostikas datus"</string>
diff --git a/service/res/values-mk/config.xml b/service/res/values-mk/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-mk/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index c5fa0bb..b419e52 100644
--- a/service/res/values-mk/strings.xml
+++ b/service/res/values-mk/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"ги чита дијагностичките податоци"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Чита дијагностички податоци од автомобилот."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"чисти дијагностички податоци"</string>
diff --git a/service/res/values-ml/config.xml b/service/res/values-ml/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-ml/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index fc9e458..6e6007f 100644
--- a/service/res/values-ml/strings.xml
+++ b/service/res/values-ml/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"പ്രശ്‌നനിർണ്ണയ ഡാറ്റ വായിക്കുക"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"കാറിൽ നിന്നുള്ള പ്രശ്‌നനിർണ്ണയ ഡാറ്റ വായിക്കുക."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"പ്രശ്‌നനിർണ്ണയ ഡാറ്റ മായ്‌ക്കുക"</string>
diff --git a/service/res/values-mn/config.xml b/service/res/values-mn/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-mn/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index 1808c32..83da614 100644
--- a/service/res/values-mn/strings.xml
+++ b/service/res/values-mn/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"оношилгооны өгөгдлийг унших"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Машины оношилгооны өгөгдлийг унших."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"оношилгооны өгөгдлийг устгах"</string>
diff --git a/service/res/values-mr/config.xml b/service/res/values-mr/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-mr/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index 0afb98e..efdc646 100644
--- a/service/res/values-mr/strings.xml
+++ b/service/res/values-mr/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"निदान डेटा वाचा"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"कारचा निदान डेटा वाचा."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"निदान डेटा साफ करा"</string>
diff --git a/service/res/values-ms/config.xml b/service/res/values-ms/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-ms/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index 23332b8..6869364 100644
--- a/service/res/values-ms/strings.xml
+++ b/service/res/values-ms/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"baca data diagnostik"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Baca data diagnostik daripada kereta."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"kosongkan data diagnostik"</string>
diff --git a/service/res/values-my/config.xml b/service/res/values-my/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-my/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index f62bf4e..e2e8572 100644
--- a/service/res/values-my/strings.xml
+++ b/service/res/values-my/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"အမှားရှာပြင်ခြင်းဒေတာများကို ကြည့်ပါမည်"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"ကားအတွင်း အမှားရှာပြင်ခြင်းဒေတာကို ကြည့်ပါမည်။"</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"အမှားရှာပြင်ခြင်းဒေတာများကို ရှင်းလင်းပါမည်"</string>
diff --git a/service/res/values-nb/config.xml b/service/res/values-nb/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-nb/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index d273bcb..62108e6 100644
--- a/service/res/values-nb/strings.xml
+++ b/service/res/values-nb/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"lese diagnostikkdata"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Les diagnostikkdata fra bilen."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"slette diagnostikkdata"</string>
diff --git a/service/res/values-ne/config.xml b/service/res/values-ne/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-ne/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index 5d9431c..add0fb9 100644
--- a/service/res/values-ne/strings.xml
+++ b/service/res/values-ne/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"निदानसम्बन्धी डेटा पढ्ने"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"कारको निदानसम्बन्धी डेटा पढ्ने।"</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"निदानसम्बन्धी डेटा हटाउने"</string>
diff --git a/service/res/values-nl/config.xml b/service/res/values-nl/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-nl/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index 659afb0..0959bb8 100644
--- a/service/res/values-nl/strings.xml
+++ b/service/res/values-nl/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"diagnostische gegevens lezen"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Diagnostische gegevens van auto lezen."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"diagnostische gegevens wissen"</string>
diff --git a/service/res/values-or/config.xml b/service/res/values-or/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-or/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index b054470..2d90b94 100644
--- a/service/res/values-or/strings.xml
+++ b/service/res/values-or/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"ଡାଏଗ୍ନୋଷ୍ଟିକ୍ ଡାଟାକୁ ପଢ଼ିବ"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"କାର୍‍ ମଧ୍ୟରୁ ଡାଏଗ୍ନୋଷ୍ଟିକ୍ ଡାଟାକୁ ପଢ଼ିବ।"</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"ଡାଏଗ୍ନୋଷ୍ଟିକ୍ ଡାଟା ଖାଲି କରନ୍ତୁ"</string>
diff --git a/service/res/values-pa/config.xml b/service/res/values-pa/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-pa/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index 576e5b7..d3700ed 100644
--- a/service/res/values-pa/strings.xml
+++ b/service/res/values-pa/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"ਤਸ਼ਖੀਸੀ ਡਾਟੇ ਨੂੰ ਪੜ੍ਹਨਾ"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"ਕਾਰ ਦਾ ਤਸ਼ਖੀਸੀ ਡਾਟਾ ਪੜ੍ਹਨਾ।"</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"ਤਸ਼ਖੀਸੀ ਡਾਟਾ ਕਲੀਅਰ ਕਰਨਾ"</string>
diff --git a/service/res/values-pl/config.xml b/service/res/values-pl/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-pl/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index 537d513..593181e 100644
--- a/service/res/values-pl/strings.xml
+++ b/service/res/values-pl/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"odczytywanie danych diagnostycznych"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Odczytywanie danych diagnostycznych samochodu."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"czyszczenie danych diagnostycznych"</string>
diff --git a/service/res/values-pt-rPT/config.xml b/service/res/values-pt-rPT/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-pt-rPT/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index bf327df..3ba192b 100644
--- a/service/res/values-pt-rPT/strings.xml
+++ b/service/res/values-pt-rPT/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"ler os dados de diagnóstico"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Ler os dados de diagnóstico do automóvel."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"limpar os dados de diagnóstico"</string>
diff --git a/service/res/values-pt/config.xml b/service/res/values-pt/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-pt/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index 5236c7b..3a002c3 100644
--- a/service/res/values-pt/strings.xml
+++ b/service/res/values-pt/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"ler dados de diagnóstico"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Ler dados de diagnóstico do carro."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"limpar dados de diagnóstico"</string>
diff --git a/service/res/values-ro/config.xml b/service/res/values-ro/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-ro/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index 77d4b1e..6f48c30 100644
--- a/service/res/values-ro/strings.xml
+++ b/service/res/values-ro/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"Citește datele de diagnosticare"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Citește datele de diagnosticare de la mașină."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"Șterge datele de diagnosticare"</string>
diff --git a/service/res/values-ru/config.xml b/service/res/values-ru/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-ru/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index a7439e5..205d54a 100644
--- a/service/res/values-ru/strings.xml
+++ b/service/res/values-ru/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"чтение диагностических данных"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Чтение диагностических данных автомобиля."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"удаление диагностических данных"</string>
diff --git a/service/res/values-si/config.xml b/service/res/values-si/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-si/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index 4ad1eaf..49e9ce4 100644
--- a/service/res/values-si/strings.xml
+++ b/service/res/values-si/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"දෝෂනිර්ණ දත්ත කියවන්න"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"මෝටර් රථයෙන් දෝෂනිර්ණ දත්ත කියවන්න."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"දෝෂනිර්ණ දත්ත හිස් කරන්න"</string>
diff --git a/service/res/values-sk/config.xml b/service/res/values-sk/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-sk/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index 3c16be6..8e5cb3e 100644
--- a/service/res/values-sk/strings.xml
+++ b/service/res/values-sk/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"čítať diagnostické údaje"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Čítanie diagnostických údajov z auta."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"vymazať diagnostické údaje"</string>
diff --git a/service/res/values-sl/config.xml b/service/res/values-sl/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-sl/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index f1ff307..2e00b3a 100644
--- a/service/res/values-sl/strings.xml
+++ b/service/res/values-sl/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"branje diagnostičnih podatkov"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Branje diagnostičnih podatkov avtomobila."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"brisanje diagnostičnih podatkov"</string>
diff --git a/service/res/values-sq/config.xml b/service/res/values-sq/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-sq/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index 8d56e6d..f7f4684 100644
--- a/service/res/values-sq/strings.xml
+++ b/service/res/values-sq/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"lexo të dhënat diagnostikuese"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Lexo të dhënat diagnostikuese nga makina."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"pastro të dhënat diagnostikuese"</string>
diff --git a/service/res/values-sr/config.xml b/service/res/values-sr/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-sr/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index 8c58e53..0983a07 100644
--- a/service/res/values-sr/strings.xml
+++ b/service/res/values-sr/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"читање дијагностичких података"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Читање дијагностичких података из аутомобила."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"брисање дијагностичких података"</string>
diff --git a/service/res/values-sv/config.xml b/service/res/values-sv/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-sv/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index 32dffc1..3f0ea0c 100644
--- a/service/res/values-sv/strings.xml
+++ b/service/res/values-sv/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"läsa diagnostikdata"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Läsa diagnostisk data om bilen."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"rensa diagnostikdata"</string>
diff --git a/service/res/values-sw/config.xml b/service/res/values-sw/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-sw/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index 66fa85f..0619eac 100644
--- a/service/res/values-sw/strings.xml
+++ b/service/res/values-sw/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"kusoma data ya uchunguzi"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Kusoma data ya uchunguzi kwenye gari."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"kufuta data ya uchunguzi wa gari"</string>
diff --git a/service/res/values-ta/config.xml b/service/res/values-ta/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-ta/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index 0fcb211..8eab4ef 100644
--- a/service/res/values-ta/strings.xml
+++ b/service/res/values-ta/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"ஆய்வுத் தரவை அறிய வேண்டும்"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"கார் தொடர்பான ஆய்வுத் தரவை அறிய வேண்டும்."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"ஆய்வுத் தரவை அழிக்க வேண்டும்"</string>
diff --git a/service/res/values-te/config.xml b/service/res/values-te/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-te/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index eec213e..494e476 100644
--- a/service/res/values-te/strings.xml
+++ b/service/res/values-te/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"సమస్య విశ్లేషణ డేటాను తెలుసుకోగలవు"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"కారు నుండి విశ్లేషణ డేటాను తెలుసుకోగలవు."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"సమస్య విశ్లేషణ డేటాను క్లియర్ చేయగలవు"</string>
diff --git a/service/res/values-th/config.xml b/service/res/values-th/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-th/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index e391708..197bc75 100644
--- a/service/res/values-th/strings.xml
+++ b/service/res/values-th/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"อ่านข้อมูลการวินิจฉัย"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"อ่านข้อมูลการวินิจฉัยจากรถ"</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"ล้างข้อมูลการวินิจฉัย"</string>
diff --git a/service/res/values-tl/config.xml b/service/res/values-tl/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-tl/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index a453ca1..d50637f 100644
--- a/service/res/values-tl/strings.xml
+++ b/service/res/values-tl/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"basahin ang data ng mga diagnostic"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Basahin ang data ng mga diagnostic mula sa sasakyan."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"i-clear ang data ng mga diagnostic"</string>
diff --git a/service/res/values-tr/config.xml b/service/res/values-tr/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-tr/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index 5ad22dd..861d4cb 100644
--- a/service/res/values-tr/strings.xml
+++ b/service/res/values-tr/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"teşhis verilerini okuma"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Araçtan teşhis verilerini okuma."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"teşhis verilerini temizleme"</string>
diff --git a/service/res/values-uk/config.xml b/service/res/values-uk/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-uk/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index ca4f8b5..24fc867 100644
--- a/service/res/values-uk/strings.xml
+++ b/service/res/values-uk/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"перегляд даних діагностики"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Перегляд даних діагностики автомобіля."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"очищення даних діагностики"</string>
diff --git a/service/res/values-ur/config.xml b/service/res/values-ur/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-ur/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index 517ae7b..58f1aca 100644
--- a/service/res/values-ur/strings.xml
+++ b/service/res/values-ur/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"تشخیصی ڈیٹا پڑھیں"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"کار کے تشخیصی ڈیٹا کے بارے میں پڑھیں۔"</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"تشخیصی ڈیٹا صاف کریں"</string>
diff --git a/service/res/values-uz/config.xml b/service/res/values-uz/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-uz/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index 893ba9d..f6bfb87 100644
--- a/service/res/values-uz/strings.xml
+++ b/service/res/values-uz/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"diagnostika axborotini ochish"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Avtomobildan diagnostika axborotini olish."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"diagnostika axborotini tozalash"</string>
diff --git a/service/res/values-vi/config.xml b/service/res/values-vi/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-vi/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index 265173b..57be52a 100644
--- a/service/res/values-vi/strings.xml
+++ b/service/res/values-vi/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"đọc dữ liệu chẩn đoán"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Đọc dữ liệu chẩn đoán từ ô tô."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"xóa dữ liệu chẩn đoán"</string>
diff --git a/service/res/values-zh-rCN/config.xml b/service/res/values-zh-rCN/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-zh-rCN/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index ad55cda..b30acc4 100644
--- a/service/res/values-zh-rCN/strings.xml
+++ b/service/res/values-zh-rCN/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"读取诊断数据"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"读取汽车的诊断数据。"</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"清除诊断数据"</string>
diff --git a/service/res/values-zh-rHK/config.xml b/service/res/values-zh-rHK/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-zh-rHK/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index 0dca2f2..e344bfb 100644
--- a/service/res/values-zh-rHK/strings.xml
+++ b/service/res/values-zh-rHK/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"讀取診斷資料"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"讀取來自汽車的診斷資料。"</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"清除診斷資料"</string>
diff --git a/service/res/values-zh-rTW/config.xml b/service/res/values-zh-rTW/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-zh-rTW/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index ffb8cc4..1848811 100644
--- a/service/res/values-zh-rTW/strings.xml
+++ b/service/res/values-zh-rTW/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"讀取診斷資料"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"讀取車輛的診斷資料。"</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"清除診斷資料"</string>
diff --git a/service/res/values-zu/config.xml b/service/res/values-zu/config.xml
deleted file mode 100644
index f2b960f..0000000
--- a/service/res/values-zu/config.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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="2416852774232083347">"android.car.cluster.sample/.ClusterRenderingServiceImpl"</string>
-    <string name="activityBlockingActivity" msgid="1307583481022873450">"com.android.car/com.android.car.pm.ActivityBlockingActivity"</string>
-    <string name="activityWhitelist" msgid="1814434236909655273"></string>
-    <!-- no translation found for systemActivityWhitelist (1256445723884668706) -->
-    <skip />
-    <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
index 9966b54..7225857 100644
--- a/service/res/values-zu/strings.xml
+++ b/service/res/values-zu/strings.xml
@@ -69,7 +69,6 @@
     <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="7248894224877702604">"funda idatha yokuxilonga"</string>
     <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Ukufunda idatha yokuxilonga kusuka emotweni."</string>
     <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"sula idatha yokuxilonga"</string>
diff --git a/service/res/values/config.xml b/service/res/values/config.xml
index c03536f..9d90a7c 100644
--- a/service/res/values/config.xml
+++ b/service/res/values/config.xml
@@ -40,7 +40,8 @@
 
     <string name="inputService" translatable="false">android.car.input.service/.DefaultInputService</string>
 
-    <string name="instrumentClusterRendererService" translatable="false">android.car.cluster.sample/.ClusterRenderingServiceImpl</string>
+    <!--  Service responsible for displaying information on the car instrument cluster. -->
+    <string name="instrumentClusterRendererService" translatable="false">android.car.cluster/.ClusterRenderingService</string>
 
     <!--  Whether to enable Activity blocking for safety. When Activity blocking is enabled,
           only whitelisted safe Activities will be allowed while car is not parked. -->
diff --git a/service/res/values/strings.xml b/service/res/values/strings.xml
index c5216c3..3d8a402 100644
--- a/service/res/values/strings.xml
+++ b/service/res/values/strings.xml
@@ -261,4 +261,8 @@
 
     <!-- The package name of the media application that will be selected as the default [CHAR LIMIT=NONE] -->
     <string name="default_media_application" translatable="false">com.android.bluetooth</string>
+    <!-- The package name of the default bugreport application that can use CarBugreportServiceManager.
+         There is no default bugreporting app.-->
+    <string name="default_car_bugreport_application" translatable="false"></string>
+
 </resources>
diff --git a/service/src/com/android/car/CarBugreportManagerService.java b/service/src/com/android/car/CarBugreportManagerService.java
index 25592e8..26a306b 100644
--- a/service/src/com/android/car/CarBugreportManagerService.java
+++ b/service/src/com/android/car/CarBugreportManagerService.java
@@ -21,12 +21,14 @@
 import android.car.ICarBugreportCallback;
 import android.car.ICarBugreportService;
 import android.content.Context;
+import android.content.pm.PackageManager;
 import android.net.LocalSocket;
 import android.net.LocalSocketAddress;
-import android.os.Build;
+import android.os.Binder;
 import android.os.Handler;
 import android.os.HandlerThread;
 import android.os.ParcelFileDescriptor;
+import android.os.Process;
 import android.os.RemoteException;
 import android.os.SystemClock;
 import android.os.SystemProperties;
@@ -63,6 +65,11 @@
 
     // The socket at /dev/socket/dumpstate to communicate with dumpstate.
     private static final String DUMPSTATE_SOCKET = "dumpstate";
+    // The socket definitions must match the actual socket names defined in car_bugreportd service
+    // definition.
+    private static final String BUGREPORT_PROGRESS_SOCKET = "car_br_progress_socket";
+    private static final String BUGREPORT_OUTPUT_SOCKET = "car_br_output_socket";
+
     private static final int SOCKET_CONNECTION_MAX_RETRY = 10;
 
     /**
@@ -76,21 +83,136 @@
 
     @Override
     public void init() {
-        // Initialize handler only if build is debuggable.
-        if (Build.IS_DEBUGGABLE) {
-            mHandlerThread = new HandlerThread(TAG);
-            mHandlerThread.start();
-            mHandler = new Handler(mHandlerThread.getLooper());
-        }
+        mHandlerThread = new HandlerThread(TAG);
+        mHandlerThread.start();
+        mHandler = new Handler(mHandlerThread.getLooper());
     }
 
     @Override
     public void release() {
-        if (mHandlerThread != null) {
-            mHandlerThread.quitSafely();
+        mHandlerThread.quitSafely();
+    }
+
+    @Override
+    @RequiresPermission(android.Manifest.permission.DUMP)
+    public void requestZippedBugreport(ParcelFileDescriptor data, ParcelFileDescriptor progress,
+            ICarBugreportCallback callback) {
+
+        // Check the caller has proper permission
+        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DUMP,
+                "requestZippedBugreport");
+        // Check the caller is signed with platform keys
+        PackageManager pm = mContext.getPackageManager();
+        int callingUid = Binder.getCallingUid();
+        if (pm.checkSignatures(Process.myUid(), callingUid) != PackageManager.SIGNATURE_MATCH) {
+            throw new SecurityException("Caller " + pm.getNameForUid(callingUid)
+                            + " does not have the right signature");
+        }
+        // Check the caller is the default designated bugreport app
+        String defaultAppPkgName = mContext.getString(R.string.default_car_bugreport_application);
+        String[] packageNamesForCallerUid = pm.getPackagesForUid(callingUid);
+        boolean found = false;
+        if (packageNamesForCallerUid != null) {
+            for (String packageName : packageNamesForCallerUid) {
+                if (defaultAppPkgName.equals(packageName)) {
+                    found = true;
+                    break;
+                }
+            }
+        }
+        if (!found) {
+            throw new SecurityException("Caller " +  pm.getNameForUid(callingUid)
+                    + " is not a designated bugreport app");
+        }
+
+        synchronized (mLock) {
+            requestZippedBugReportLocked(data, progress, callback);
         }
     }
 
+    @GuardedBy("mLock")
+    private void requestZippedBugReportLocked(ParcelFileDescriptor data,
+            ParcelFileDescriptor progress, ICarBugreportCallback callback) {
+        if (mIsServiceRunning) {
+            Slog.w(TAG, "Bugreport Service already running");
+            reportError(callback, CarBugreportManagerCallback.CAR_BUGREPORT_IN_PROGRESS);
+            return;
+        }
+        mIsServiceRunning = true;
+        mHandler.post(() -> startBugreportd(data, progress, callback));
+    }
+
+    private void startBugreportd(ParcelFileDescriptor data, ParcelFileDescriptor progress,
+            ICarBugreportCallback callback) {
+        readBugreport(data, progress, callback);
+        synchronized (mLock) {
+            mIsServiceRunning = false;
+        }
+    }
+
+    private void readBugreport(ParcelFileDescriptor output, ParcelFileDescriptor progress,
+            ICarBugreportCallback callback) {
+        Slog.i(TAG, "Starting car-bugreportd");
+        try {
+            SystemProperties.set("ctl.start", "car-bugreportd");
+        } catch (RuntimeException e) {
+            Slog.e(TAG, "Failed to start car-bugreportd", e);
+            reportError(callback, CarBugreportManagerCallback.CAR_BUGREPORT_DUMPSTATE_FAILED);
+            return;
+        }
+        // The native service first generates the progress data. Once it writes the progress
+        // data fully, it closes the socket and writes the zip file. So we read both files
+        // sequentially here.
+        if (!readSocket(BUGREPORT_PROGRESS_SOCKET, progress, callback)) {
+            Slog.e(TAG, "failed reading bugreport progress socket");
+            reportError(callback, CarBugreportManagerCallback.CAR_BUGREPORT_DUMPSTATE_FAILED);
+            return;
+        }
+        if (!readSocket(BUGREPORT_OUTPUT_SOCKET, output, callback)) {
+            Slog.i(TAG, "failed reading bugreport output socket");
+            reportError(callback, CarBugreportManagerCallback.CAR_BUGREPORT_DUMPSTATE_FAILED);
+            return;
+        }
+        Slog.i(TAG, "finished reading bugreport");
+        try {
+            callback.onFinished();
+        } catch (RemoteException e) {
+            Slog.e(TAG, "onFinished() failed: " + e.getMessage());
+        }
+    }
+
+    private boolean readSocket(String name, ParcelFileDescriptor pfd,
+            ICarBugreportCallback callback) {
+        LocalSocket localSocket;
+
+        try {
+            localSocket = connectSocket(name);
+        } catch (IOException e) {
+            Slog.e(TAG, "Failed connecting to socket " + name, e);
+            reportError(callback,
+                    CarBugreportManagerCallback.CAR_BUGREPORT_DUMPSTATE_CONNECTION_FAILED);
+            // Early out if connection to socket fails.
+            return false;
+        }
+
+        try (
+            DataInputStream in = new DataInputStream(localSocket.getInputStream());
+            DataOutputStream out =
+                    new DataOutputStream(new ParcelFileDescriptor.AutoCloseOutputStream(pfd));
+        ) {
+            rawCopyStream(out, in);
+        } catch (IOException | RuntimeException e) {
+            Slog.e(TAG, "Failed to grab dump state " + name, e);
+            reportError(callback, CarBugreportManagerCallback.CAR_BUGREPORT_DUMPSTATE_FAILED);
+            return false;
+        }
+        return true;
+    }
+
+
+    /**
+     * This API and all descendants will be removed once the clients transition to new method
+     */
     @Override
     @RequiresPermission(android.Manifest.permission.DUMP)
     public void requestBugreport(ParcelFileDescriptor pfd, ICarBugreportCallback callback) {
@@ -127,10 +249,6 @@
         }
     }
 
-    @Override
-    public void dump(PrintWriter writer) {
-    }
-
     private void dumpStateToFileWrapper(ParcelFileDescriptor pfd, ICarBugreportCallback callback) {
         dumpStateToFile(pfd, callback);
         synchronized (mLock) {
@@ -138,6 +256,11 @@
         }
     }
 
+    @Override
+    public void dump(PrintWriter writer) {
+        // TODO(sgurun) implement
+    }
+
     private void dumpStateToFile(ParcelFileDescriptor pfd, ICarBugreportCallback callback) {
         if (DEBUG) {
             Slog.d(TAG, "Dumpstate to file");
@@ -155,7 +278,7 @@
         }
 
         try {
-            localSocket = connectToDumpstateService();
+            localSocket = connectSocket(DUMPSTATE_SOCKET);
         } catch (IOException e) {
             Slog.e(TAG, "Timed out connecting to dumpstate socket", e);
             reportError(callback,
@@ -184,7 +307,7 @@
         }
     }
 
-    private LocalSocket connectToDumpstateService() throws IOException {
+    private LocalSocket connectSocket(String socketName) throws IOException {
         LocalSocket socket = new LocalSocket();
         // The dumpstate socket will be created by init upon receiving the
         // service request. It may not be ready by this point. So we will
@@ -195,14 +318,15 @@
             // first time too.
             SystemClock.sleep(/* ms= */ 1000);
             try {
-                socket.connect(new LocalSocketAddress(DUMPSTATE_SOCKET,
+                socket.connect(new LocalSocketAddress(socketName,
                         LocalSocketAddress.Namespace.RESERVED));
                 return socket;
             } catch (IOException e) {
                 if (++retryCount >= SOCKET_CONNECTION_MAX_RETRY) {
                     throw e;
                 }
-                Log.i(TAG, "Failed to connect to dumpstate, will try again: " + e.getMessage());
+                Log.i(TAG, "Failed to connect to" + socketName + ". will try again"
+                        + e.getMessage());
             }
         }
     }
diff --git a/service/src/com/android/car/CarMediaService.java b/service/src/com/android/car/CarMediaService.java
index a4e0d6e..bac93f9 100644
--- a/service/src/com/android/car/CarMediaService.java
+++ b/service/src/com/android/car/CarMediaService.java
@@ -34,6 +34,8 @@
 import android.media.session.MediaSessionManager;
 import android.media.session.MediaSessionManager.OnActiveSessionsChangedListener;
 import android.media.session.PlaybackState;
+import android.os.Handler;
+import android.os.HandlerThread;
 import android.os.RemoteCallbackList;
 import android.os.RemoteException;
 import android.service.media.MediaBrowserService;
@@ -81,10 +83,15 @@
     // null if playback has not been started yet.
     private MediaController mActiveUserMediaController;
     private SessionChangedListener mSessionsListener;
+    private boolean mStartPlayback;
 
     private RemoteCallbackList<ICarMediaSourceListener> mMediaSourceListeners =
             new RemoteCallbackList();
 
+    // Handler to receive PlaybackState callbacks from the active media controller.
+    private Handler mHandler;
+    private HandlerThread mHandlerThread;
+
     /** The package name of the last media source that was removed while being primary. */
     private String mRemovedMediaSourcePackage;
 
@@ -128,6 +135,10 @@
         mMediaSessionManager = mContext.getSystemService(MediaSessionManager.class);
         mMediaSessionUpdater = new MediaSessionUpdater();
 
+        mHandlerThread = new HandlerThread(CarLog.TAG_MEDIA);
+        mHandlerThread.start();
+        mHandler = new Handler(mHandlerThread.getLooper());
+
         IntentFilter filter = new IntentFilter();
         filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
         filter.addAction(Intent.ACTION_PACKAGE_REPLACED);
@@ -147,6 +158,8 @@
         CarLocalServices.getService(CarUserService.class).runOnUser0Unlock(() -> {
             mSharedPrefs = mContext.getSharedPreferences(SHARED_PREF, Context.MODE_PRIVATE);
             mPrimaryMediaPackage = getLastMediaPackage();
+            mStartPlayback = mSharedPrefs.getInt(PLAYBACK_STATE_KEY, PlaybackState.STATE_NONE)
+                    == PlaybackState.STATE_PLAYING;
             notifyListeners();
         });
     }
@@ -217,6 +230,18 @@
     }
 
     /**
+     * Attempts to play the current source using MediaController.TransportControls.play()
+     */
+    private void play() {
+        if (mActiveUserMediaController != null) {
+            TransportControls controls = mActiveUserMediaController.getTransportControls();
+            if (controls != null) {
+                controls.play();
+            }
+        }
+    }
+
+    /**
      * Attempts to stop the current source using MediaController.TransportControls.stop()
      */
     private void stop() {
@@ -331,6 +356,7 @@
 
         stop();
 
+        mStartPlayback = false;
         mPrimaryMediaPackage = packageName;
         updateActiveMediaController(mMediaSessionManager
                 .getActiveSessionsForUser(null, ActivityManager.getCurrentUser()));
@@ -364,6 +390,8 @@
         @Override
         public void onPlaybackStateChanged(PlaybackState state) {
             savePlaybackState(state);
+            // Try to start playback if the new state allows the play action
+            maybeRestartPlayback(state);
         }
     };
 
@@ -442,9 +470,22 @@
         return new ArrayDeque(Arrays.asList(packageNames));
     }
 
-    private void savePlaybackState(PlaybackState state) {
-        mSharedPrefs.edit().putInt(PLAYBACK_STATE_KEY, state != null ? state.getState()
-                : PlaybackState.STATE_NONE).apply();
+    private void savePlaybackState(PlaybackState playbackState) {
+        int state = playbackState != null ? playbackState.getState() : PlaybackState.STATE_NONE;
+        if (state == PlaybackState.STATE_PLAYING) {
+            // No longer need to request play if audio was resumed already via some other means,
+            // e.g. Assistant starts playback, user uses hardware button, etc.
+            mStartPlayback = false;
+        }
+        mSharedPrefs.edit().putInt(PLAYBACK_STATE_KEY, state).apply();
+    }
+
+    private void maybeRestartPlayback(PlaybackState state) {
+        if (mStartPlayback && state != null
+                && (state.getActions() & PlaybackState.ACTION_PLAY) != 0) {
+            play();
+            mStartPlayback = false;
+        }
     }
 
     /**
@@ -462,8 +503,14 @@
         for (MediaController controller : mediaControllers) {
             if (mPrimaryMediaPackage.equals(controller.getPackageName())) {
                 mActiveUserMediaController = controller;
-                savePlaybackState(mActiveUserMediaController.getPlaybackState());
-                mActiveUserMediaController.registerCallback(mMediaControllerCallback);
+                // Specify Handler to receive callbacks on, to avoid defaulting to the calling
+                // thread; this method can be called from the MediaSessionManager callback.
+                // Using the version of this method without passing a handler causes a
+                // RuntimeException for failing to create a Handler.
+                PlaybackState state = mActiveUserMediaController.getPlaybackState();
+                savePlaybackState(state);
+                mActiveUserMediaController.registerCallback(mMediaControllerCallback, mHandler);
+                maybeRestartPlayback(state);
                 return;
             }
         }
diff --git a/service/src/com/android/car/CarProjectionService.java b/service/src/com/android/car/CarProjectionService.java
index 33ed8f6..144804e 100644
--- a/service/src/com/android/car/CarProjectionService.java
+++ b/service/src/com/android/car/CarProjectionService.java
@@ -17,6 +17,7 @@
 
 import static android.car.CarProjectionManager.ProjectionAccessPointCallback.ERROR_GENERIC;
 import static android.car.projection.ProjectionStatus.PROJECTION_STATE_INACTIVE;
+import static android.car.projection.ProjectionStatus.PROJECTION_STATE_READY_TO_PROJECT;
 import static android.net.wifi.WifiManager.EXTRA_PREVIOUS_WIFI_AP_STATE;
 import static android.net.wifi.WifiManager.EXTRA_WIFI_AP_FAILURE_REASON;
 import static android.net.wifi.WifiManager.EXTRA_WIFI_AP_INTERFACE_NAME;
@@ -410,7 +411,15 @@
             ProjectionReceiverClient client = getOrCreateProjectionReceiverClientLocked(token);
             client.mProjectionStatus = status;
 
-            if (status.isActive() || TextUtils.equals(packageName, mCurrentProjectionPackage)) {
+            // If the projection package that's reporting its projection state is the currently
+            // active projection package, update the state. If it is a different package, update the
+            // current projection state if the new package is reporting that it is projecting or if
+            // it is reporting that it's ready to project, and the current package has an inactive
+            // projection state.
+            if (status.isActive()
+                    || (status.getState() == PROJECTION_STATE_READY_TO_PROJECT
+                            && mCurrentProjectionState == PROJECTION_STATE_INACTIVE)
+                    || TextUtils.equals(packageName, mCurrentProjectionPackage)) {
                 mCurrentProjectionState = status.getState();
                 mCurrentProjectionPackage = packageName;
             }
diff --git a/service/src/com/android/car/ICarImpl.java b/service/src/com/android/car/ICarImpl.java
index 2f90d3d..244ee8b 100644
--- a/service/src/com/android/car/ICarImpl.java
+++ b/service/src/com/android/car/ICarImpl.java
@@ -449,7 +449,7 @@
                     + " without permission " + android.Manifest.permission.DUMP);
             return;
         }
-        if (args == null || args.length == 0) {
+        if (args == null || args.length == 0 || (args.length > 0 && "-a".equals(args[0]))) {
             writer.println("*dump car service*");
 
             writer.println("*FutureConfig, DEFAULT:" + FeatureConfiguration.DEFAULT);
@@ -702,19 +702,19 @@
             switch (arg) {
                 case PARAM_ON_MODE:
                     mGarageModeService.forceStartGarageMode();
+                    writer.println("Garage mode: " + mGarageModeService.isGarageModeActive());
                     break;
                 case PARAM_OFF_MODE:
                     mGarageModeService.stopAndResetGarageMode();
+                    writer.println("Garage mode: " + mGarageModeService.isGarageModeActive());
                     break;
                 case PARAM_QUERY_MODE:
-                    // Nothing to do. Always query at the end anyway.
+                    mGarageModeService.dump(writer);
                     break;
                 default:
                     writer.println("Unknown value. Valid argument: " + PARAM_ON_MODE + "|"
                             + PARAM_OFF_MODE + "|" + PARAM_QUERY_MODE);
-                    return;
             }
-            writer.println("Garage mode: " + mGarageModeService.isGarageModeActive());
         }
 
         /**
diff --git a/service/src/com/android/car/VmsSubscriberService.java b/service/src/com/android/car/VmsSubscriberService.java
index fc28978..aaadf4f 100644
--- a/service/src/com/android/car/VmsSubscriberService.java
+++ b/service/src/com/android/car/VmsSubscriberService.java
@@ -200,7 +200,7 @@
             VmsHalService hal) {
         mContext = context;
         mBrokerService = brokerService;
-        hal.setVmsSubscriberService(this);
+        hal.setVmsSubscriberService(this, mBrokerService::removeDeadSubscriber);
     }
 
     // Implements CarServiceBase interface.
diff --git a/service/src/com/android/car/audio/CarAudioFocus.java b/service/src/com/android/car/audio/CarAudioFocus.java
index 714459e..165caad 100644
--- a/service/src/com/android/car/audio/CarAudioFocus.java
+++ b/service/src/com/android/car/audio/CarAudioFocus.java
@@ -47,6 +47,7 @@
     static final int INTERACTION_EXCLUSIVE  = 1;    // Focus granted, others loose focus
     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
@@ -434,6 +435,21 @@
     public synchronized void onAudioFocusAbandon(AudioFocusInfo afi) {
         Log.i(TAG, "onAudioFocusAbandon " + afi.getClientId());
 
+        FocusEntry deadEntry = removeFocusEntry(afi);
+
+        if (deadEntry != null) {
+            removeFocusEntryAndRestoreUnblockedWaiters(deadEntry);
+        }
+    }
+
+    /**
+     * Remove Focus entry from focus holder or losers entry lists
+     * @param afi Audio Focus Info to remove
+     * @return Removed Focus Entry
+     */
+    private FocusEntry removeFocusEntry(AudioFocusInfo afi) {
+        Log.i(TAG, "removeFocusEntry " + afi.getClientId());
+
         // Remove this entry from our active or pending list
         FocusEntry deadEntry = mFocusHolders.remove(afi.getClientId());
         if (deadEntry == null) {
@@ -450,11 +466,9 @@
                 // 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;
             }
         }
-
-        removeFocusEntryAndRestoreUnblockedWaiters(deadEntry);
+        return deadEntry;
     }
 
     private void removeFocusEntryAndRestoreUnblockedWaiters(FocusEntry deadEntry) {
@@ -475,32 +489,113 @@
                 // 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);
-                }
+                dispatchFocusGained(entry.mAfi);
+
             }
         }
     }
 
-    public synchronized void dump(PrintWriter writer) {
-        writer.println("*CarAudioFocus*");
+    /**
+     * Dispatch focus gain
+     * @param afi Audio focus info
+     * @return AudioManager.AUDIOFOCUS_REQUEST_GRANTED if focus is dispatched successfully
+     */
+    private int dispatchFocusGained(AudioFocusInfo afi) {
+        // Send the focus (re)gain notification
+        int result = mAudioManager.dispatchAudioFocusChange(
+                afi,
+                afi.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);
+        }
+        return result;
+    }
 
-        writer.println("  Current Focus Holders:");
+
+    /**
+     * Query the current list of focus loser for uid
+     * @param uid uid to query current focus loser
+     * @return list of current focus losers for uid
+     */
+    ArrayList<AudioFocusInfo> getAudioFocusLosersForUid(int uid) {
+        return getAudioFocusListForUid(uid, mFocusLosers);
+    }
+
+    /**
+     * Query the current list of focus holders for uid
+     * @param uid uid to query current focus holders
+     * @return list of current focus holders that for uid
+     */
+    ArrayList<AudioFocusInfo> getAudioFocusHoldersForUid(int uid) {
+        return getAudioFocusListForUid(uid, mFocusHolders);
+    }
+
+    /**
+     * Query input list for matching uid
+     * @param uid uid to match in map
+     * @param mapToQuery map to query for uid info
+     * @return list of audio focus info that match uid
+     */
+    private ArrayList<AudioFocusInfo> getAudioFocusListForUid(int uid,
+            HashMap<String, FocusEntry> mapToQuery) {
+        ArrayList<AudioFocusInfo> matchingInfoList = new ArrayList<>();
+        for (String clientId : mapToQuery.keySet()) {
+            AudioFocusInfo afi = mapToQuery.get(clientId).mAfi;
+            if (afi.getClientUid() == uid) {
+                matchingInfoList.add(afi);
+            }
+        }
+        return matchingInfoList;
+    }
+
+    /**
+     * Remove the audio focus info, if entry is still active
+     * dispatch lose focus transient to listeners
+     * @param afi Audio Focus info to remove
+     */
+    void removeAudioFocusInfoAndTransientlyLoseFocus(AudioFocusInfo afi) {
+        FocusEntry deadEntry = removeFocusEntry(afi);
+
+        if (deadEntry != null) {
+            sendFocusLoss(deadEntry, AudioManager.AUDIOFOCUS_LOSS_TRANSIENT);
+            removeFocusEntryAndRestoreUnblockedWaiters(deadEntry);
+        }
+    }
+
+    /**
+     * Reevaluate focus request and regain focus
+     * @param afi audio focus info to reevaluate
+     * @return AudioManager.AUDIOFOCUS_REQUEST_GRANTED if focus is granted
+     */
+    int reevaluateAndRegainAudioFocus(AudioFocusInfo afi) {
+        int results = evaluateFocusRequest(afi);
+
+        if (results == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
+            return dispatchFocusGained(afi);
+        }
+        return results;
+    }
+
+    /**
+     * dumps the current state of the CarAudioFocus object
+     * @param indent indent to add to each line in the current stream
+     * @param writer stream to write to
+     */
+    public synchronized void dump(String indent, PrintWriter writer) {
+        writer.printf("%s*CarAudioFocus*\n", indent);
+
+        writer.printf("%s\tCurrent Focus Holders:\n", indent);
         for (String clientId : mFocusHolders.keySet()) {
-            System.out.println(clientId);
+            writer.printf("%s\t\t%s\n", indent, clientId);
         }
 
-        writer.println("  Transient Focus Losers:");
+        writer.printf("%s\tTransient Focus Losers:\n", indent);
         for (String clientId : mFocusLosers.keySet()) {
-            System.out.println(clientId);
+            writer.printf("%s\t\t%s\n", indent, clientId);
         }
     }
 
diff --git a/service/src/com/android/car/audio/CarAudioService.java b/service/src/com/android/car/audio/CarAudioService.java
index 88d3463..62bcd00 100644
--- a/service/src/com/android/car/audio/CarAudioService.java
+++ b/service/src/com/android/car/audio/CarAudioService.java
@@ -31,6 +31,7 @@
 import android.media.AudioAttributes;
 import android.media.AudioDeviceInfo;
 import android.media.AudioDevicePort;
+import android.media.AudioFocusInfo;
 import android.media.AudioFormat;
 import android.media.AudioGain;
 import android.media.AudioGainConfig;
@@ -65,7 +66,9 @@
 import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.NoSuchElementException;
 import java.util.Set;
 import java.util.stream.Collectors;
@@ -187,10 +190,14 @@
     };
 
     private AudioPolicy mAudioPolicy;
-    private CarAudioFocus mFocusHandler;
+    private CarZonesAudioFocus mFocusHandler;
     private String mCarAudioConfigurationPath;
     private CarAudioZone[] mCarAudioZones;
 
+    // TODO do not store uid mapping here instead use the uid
+    //  device affinity in audio policy when available
+    private Map<Integer, Integer> mUidToZoneMap;
+
     public CarAudioService(Context context) {
         mContext = context;
         mTelephonyManager = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
@@ -198,6 +205,7 @@
         mUseDynamicRouting = mContext.getResources().getBoolean(R.bool.audioUseDynamicRouting);
         mPersistMasterMuteState = mContext.getResources().getBoolean(
                 R.bool.audioPersistMasterMuteState);
+        mUidToZoneMap = new HashMap<>();
     }
 
     /**
@@ -277,7 +285,18 @@
             for (CarAudioZone zone : mCarAudioZones) {
                 zone.dump("\t", writer);
             }
+            writer.println();
+            writer.println("\tUID to Zone Mapping:");
+            for (int callingId : mUidToZoneMap.keySet()) {
+                writer.printf("\t\tUID %d mapped to zone %d\n",
+                        callingId,
+                        mUidToZoneMap.get(callingId));
+            }
+            //Print focus handler info
+            writer.println();
+            mFocusHandler.dump("\t", writer);
         }
+
     }
 
     @Override
@@ -460,7 +479,9 @@
             // 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, mContext.getPackageManager());
+            mFocusHandler = new CarZonesAudioFocus(mAudioManager,
+                    mContext.getPackageManager(),
+                    mCarAudioZones);
             builder.setAudioPolicyFocusListener(mFocusHandler);
             builder.setIsAudioFocusPolicy(true);
         }
@@ -736,6 +757,182 @@
         }
     }
 
+    /**
+     * Gets the ids of all available audio zones
+     *
+     * @return Array of available audio zones ids
+     */
+    @Override
+    public @NonNull int[] getAudioZoneIds() {
+        enforcePermission(Car.PERMISSION_CAR_CONTROL_AUDIO_SETTINGS);
+        synchronized (mImplLock) {
+            return Arrays.stream(mCarAudioZones).mapToInt(CarAudioZone::getId).toArray();
+        }
+    }
+
+    /**
+     * Gets the audio zone id currently mapped to uid,
+     * defaults to PRIMARY_AUDIO_ZONE if no mapping exist
+     *
+     * @param uid The uid
+     * @return zone id mapped to uid
+     */
+    @Override
+    public int getZoneIdForUid(int uid) {
+        enforcePermission(Car.PERMISSION_CAR_CONTROL_AUDIO_SETTINGS);
+        synchronized (mImplLock) {
+            if (!mUidToZoneMap.containsKey(uid)) {
+                Log.i(CarLog.TAG_AUDIO, "getZoneIdForUid uid "
+                        + uid + " does not have a zone. Defaulting to PRIMARY_AUDIO_ZONE: "
+                        + CarAudioManager.PRIMARY_AUDIO_ZONE);
+
+                // Must be added to PRIMARY_AUDIO_ZONE otherwise
+                // audio may be routed to other devices
+                // that match the audio criterion (i.e. usage)
+                setZoneIdForUidNoCheckLocked(CarAudioManager.PRIMARY_AUDIO_ZONE, uid);
+            }
+
+            return mUidToZoneMap.get(uid);
+        }
+    }
+    /**
+     * Maps the audio zone id to uid
+     *
+     * @param zoneId The audio zone id
+     * @param uid The uid to map
+     * @return true if the device affinities, for devices in zone, are successfully set
+     */
+    @Override
+    public boolean setZoneIdForUid(int zoneId, int uid) {
+        enforcePermission(Car.PERMISSION_CAR_CONTROL_AUDIO_SETTINGS);
+        synchronized (mImplLock) {
+            Log.i(CarLog.TAG_AUDIO, "setZoneIdForUid Calling uid "
+                    + uid + " mapped to : "
+                    + zoneId);
+
+            // Figure out if anything is currently holding focus,
+            // This will change the focus to transient loss while we are switching zones
+            Integer currentZoneId = mUidToZoneMap.get(uid);
+            ArrayList<AudioFocusInfo> currentFocusHoldersForUid = new ArrayList<>();
+            ArrayList<AudioFocusInfo> currentFocusLosersForUid = new ArrayList<>();
+            if (currentZoneId != null) {
+                currentFocusHoldersForUid = mFocusHandler.getAudioFocusHoldersForUid(uid,
+                        currentZoneId.intValue());
+                currentFocusLosersForUid = mFocusHandler.getAudioFocusLosersForUid(uid,
+                        currentZoneId.intValue());
+                if (!currentFocusHoldersForUid.isEmpty() || !currentFocusLosersForUid.isEmpty()) {
+                    // Order matters here: Remove the focus losers first
+                    // then do the current holder to prevent loser from popping up while
+                    // the focus is being remove for current holders
+                    // Remove focus for current focus losers
+                    mFocusHandler.transientlyLoseInFocusInZone(currentFocusLosersForUid,
+                            currentZoneId.intValue());
+                    // Remove focus for current holders
+                    mFocusHandler.transientlyLoseInFocusInZone(currentFocusHoldersForUid,
+                            currentZoneId.intValue());
+                }
+            }
+
+            // if the current uid is in the list
+            // remove it from the list
+
+            if (checkAndRemoveUidLocked(uid)) {
+                if (setZoneIdForUidNoCheckLocked(zoneId, uid)) {
+                    // Order matters here: Regain focus for
+                    // Previously lost focus holders then regain
+                    // focus for holders that had it last
+                    // Regain focus for the focus losers from previous zone
+                    if (!currentFocusLosersForUid.isEmpty()) {
+                        regainAudioFocusLocked(currentFocusLosersForUid, zoneId);
+                    }
+                    // Regain focus for the focus holders from previous zone
+                    if (!currentFocusHoldersForUid.isEmpty()) {
+                        regainAudioFocusLocked(currentFocusHoldersForUid, zoneId);
+                    }
+                    return true;
+                }
+            }
+            return false;
+        }
+    }
+
+    /**
+     * Regain focus for the focus list passed in
+     * @param afiList focus info list to regain
+     * @param zoneId zone id where the focus holder belong
+     */
+    void regainAudioFocusLocked(ArrayList<AudioFocusInfo> afiList, int zoneId) {
+        for (AudioFocusInfo info : afiList) {
+            if (mFocusHandler.reevaluateAndRegainAudioFocus(info)
+                    != AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
+                Log.i(CarLog.TAG_AUDIO,
+                        " Focus could not be granted for entry "
+                                + info.getClientId()
+                                + " uid " + info.getClientUid()
+                                + " in zone " + zoneId);
+            }
+        }
+    }
+
+    /**
+     * Removes the current mapping of the uid, focus will be lost in zone
+     * @param uid The uid to remove
+     * return true if all the devices affinities currently
+     *            mapped to uid are successfully removed
+     */
+    @Override
+    public boolean clearZoneIdForUid(int uid) {
+        enforcePermission(Car.PERMISSION_CAR_CONTROL_AUDIO_SETTINGS);
+        synchronized (mImplLock) {
+            return checkAndRemoveUidLocked(uid);
+        }
+    }
+
+    /**
+     * Sets the zone id for uid
+     * @param zoneId zone id to map to uid
+     * @param uid uid to map
+     * @return true if setting uid device affinity is successful
+     */
+    private boolean setZoneIdForUidNoCheckLocked(int zoneId, int uid) {
+        Log.d(CarLog.TAG_AUDIO, "setZoneIdForUidNoCheck Calling uid "
+                + uid + " mapped to " + zoneId);
+        //Request to add uid device affinity
+        if (mAudioPolicy.setUidDeviceAffinity(uid, mCarAudioZones[zoneId].getAudioDeviceInfos())) {
+            // TODO do not store uid mapping here instead use the uid
+            //  device affinity in audio policy when available
+            mUidToZoneMap.put(uid, zoneId);
+            return true;
+        }
+        Log.w(CarLog.TAG_AUDIO, "setZoneIdForUidNoCheck Failed set device affinity for uid "
+                + uid + " in zone " + zoneId);
+        return false;
+    }
+
+    /**
+     * Check if uid is attached to a zone and remove it
+     * @param uid unique id to remove
+     * @return true if the uid was successfully removed or mapping was not assigned
+     */
+    private boolean checkAndRemoveUidLocked(int uid) {
+        Integer zoneId = mUidToZoneMap.get(uid);
+        if (zoneId != null) {
+            Log.i(CarLog.TAG_AUDIO, "checkAndRemoveUid removing Calling uid "
+                    + uid + " from zone " + zoneId);
+            if (mAudioPolicy.removeUidDeviceAffinity(uid)) {
+                // TODO use the uid device affinity in audio policy when available
+                mUidToZoneMap.remove(uid);
+                return true;
+            }
+            //failed to remove device affinity from zone devices
+            Log.w(CarLog.TAG_AUDIO,
+                    "checkAndRemoveUid Failed remove device affinity for uid "
+                            + uid + " in zone " +  zoneId);
+            return false;
+        }
+        return true;
+    }
+
     @Override
     public void registerVolumeCallback(@NonNull IBinder binder) {
         synchronized (mImplLock) {
diff --git a/service/src/com/android/car/audio/CarAudioZone.java b/service/src/com/android/car/audio/CarAudioZone.java
index 36bbf42..4bdf0b7 100644
--- a/service/src/com/android/car/audio/CarAudioZone.java
+++ b/service/src/com/android/car/audio/CarAudioZone.java
@@ -16,6 +16,7 @@
 package com.android.car.audio;
 
 import android.car.media.CarAudioManager;
+import android.media.AudioDeviceInfo;
 import android.util.Log;
 import android.view.DisplayAddress;
 
@@ -74,6 +75,19 @@
         return mVolumeGroups.get(groupId);
     }
 
+    /**
+     * @return Snapshot of available {@link AudioDeviceInfo}s in List.
+     */
+    List<AudioDeviceInfo> getAudioDeviceInfos() {
+        final List<AudioDeviceInfo> devices = new ArrayList<>();
+        for (CarVolumeGroup group : mVolumeGroups) {
+            for (int busNumber : group.getBusNumbers()) {
+                devices.add(group.getCarAudioDeviceInfoForBus(busNumber).getAudioDeviceInfo());
+            }
+        }
+        return devices;
+    }
+
     int getVolumeGroupCount() {
         return mVolumeGroups.size();
     }
diff --git a/service/src/com/android/car/audio/CarAudioZonesHelper.java b/service/src/com/android/car/audio/CarAudioZonesHelper.java
index 00cbb4b..17d9393 100644
--- a/service/src/com/android/car/audio/CarAudioZonesHelper.java
+++ b/service/src/com/android/car/audio/CarAudioZonesHelper.java
@@ -31,6 +31,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
+import java.util.Comparator;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -59,7 +60,6 @@
     private static final String ATTR_CONTEXT_NAME = "context";
     private static final String ATTR_PHYSICAL_PORT = "port";
     private static final int SUPPORTED_VERSION = 1;
-    private static final int NO_XML_RESOURCE = 0;
 
     private static final Map<String, Integer> CONTEXT_NAME_MAP;
 
@@ -93,7 +93,7 @@
         mPortIds = new HashSet<>();
     }
 
-    public CarAudioZone[] loadAudioZones() throws IOException, XmlPullParserException {
+    CarAudioZone[] loadAudioZones() throws IOException, XmlPullParserException {
         List<CarAudioZone> carAudioZones = new ArrayList<>();
         parseCarAudioZones(carAudioZones, mInputStream);
         return carAudioZones.toArray(new CarAudioZone[0]);
@@ -139,6 +139,7 @@
             }
         }
         Preconditions.checkArgument(mHasPrimaryZone, "Requires one primary zone");
+        carAudioZones.sort(Comparator.comparing(CarAudioZone::getId));
     }
 
     private CarAudioZone parseAudioZone(XmlPullParser parser)
@@ -181,7 +182,7 @@
 
     private DisplayAddress.Physical parsePhysicalDisplayAddress(XmlPullParser parser) {
         String port = parser.getAttributeValue(NAMESPACE, ATTR_PHYSICAL_PORT);
-        Long portId;
+        long portId;
         try {
             portId = Long.parseLong(port);
         } catch (NumberFormatException e) {
diff --git a/service/src/com/android/car/audio/CarAudioZonesHelperLegacy.java b/service/src/com/android/car/audio/CarAudioZonesHelperLegacy.java
index b0df7e8..7f11275 100644
--- a/service/src/com/android/car/audio/CarAudioZonesHelperLegacy.java
+++ b/service/src/com/android/car/audio/CarAudioZonesHelperLegacy.java
@@ -74,7 +74,7 @@
         }
     }
 
-    public CarAudioZone[] loadAudioZones() {
+    CarAudioZone[] loadAudioZones() {
         final CarAudioZone zone = new CarAudioZone(CarAudioManager.PRIMARY_AUDIO_ZONE,
                 "Primary zone");
         for (CarVolumeGroup group : loadVolumeGroups()) {
diff --git a/service/src/com/android/car/audio/CarZonesAudioFocus.java b/service/src/com/android/car/audio/CarZonesAudioFocus.java
new file mode 100644
index 0000000..9b4b945
--- /dev/null
+++ b/service/src/com/android/car/audio/CarZonesAudioFocus.java
@@ -0,0 +1,169 @@
+/*
+ * 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.content.pm.PackageManager;
+import android.media.AudioAttributes;
+import android.media.AudioFocusInfo;
+import android.media.AudioManager;
+import android.media.audiopolicy.AudioPolicy;
+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.HashMap;
+import java.util.Map;
+
+/**
+ * Implements {@link AudioPolicy.AudioPolicyFocusListener}
+ *
+ * @note Manages audio focus on a per zone basis.
+ */
+class CarZonesAudioFocus extends AudioPolicy.AudioPolicyFocusListener {
+
+    private CarAudioService mCarAudioService; // Dynamically assigned just after construction
+    private AudioPolicy mAudioPolicy; // Dynamically assigned just after construction
+
+    private final Map<Integer, CarAudioFocus> mFocusZones = new HashMap<>();
+
+    CarZonesAudioFocus(AudioManager audioManager,
+            PackageManager packageManager,
+            @NonNull CarAudioZone[] carAudioZones) {
+        //Create the zones here, the policy will be set setOwningPolicy,
+        // which is called right after this constructor.
+
+        Preconditions.checkNotNull(carAudioZones);
+        Preconditions.checkArgument(carAudioZones.length != 0,
+                "There must be a minimum of one audio zone");
+
+        //Create focus for all the zones
+        for (CarAudioZone audioZone : carAudioZones) {
+            Log.d(CarLog.TAG_AUDIO,
+                    "CarZonesAudioFocus adding new zone " + audioZone.getId());
+            CarAudioFocus zoneFocusListener = new CarAudioFocus(audioManager, packageManager);
+            mFocusZones.put(audioZone.getId(), zoneFocusListener);
+        }
+    }
+
+
+    /**
+     * Query the current list of focus loser in zoneId for uid
+     * @param uid uid to query for current focus losers
+     * @param zoneId zone id to query for info
+     * @return list of current focus losers for uid
+     */
+    ArrayList<AudioFocusInfo> getAudioFocusLosersForUid(int uid, int zoneId) {
+        CarAudioFocus focus = mFocusZones.get(zoneId);
+        return focus.getAudioFocusLosersForUid(uid);
+    }
+
+    /**
+     * Query the current list of focus holders in zoneId for uid
+     * @param uid uid to query for current focus holders
+     * @param zoneId zone id to query
+     * @return list of current focus holders that for uid
+     */
+    ArrayList<AudioFocusInfo> getAudioFocusHoldersForUid(int uid, int zoneId) {
+        CarAudioFocus focus = mFocusZones.get(zoneId);
+        return focus.getAudioFocusHoldersForUid(uid);
+    }
+
+    /**
+     * For each entry in list, transiently lose focus
+     * @param afiList list of audio focus entries
+     * @param zoneId zone id where focus should should be lost
+     */
+    void transientlyLoseInFocusInZone(@NonNull ArrayList<AudioFocusInfo> afiList,
+            int zoneId) {
+        CarAudioFocus focus = mFocusZones.get(zoneId);
+
+        for (AudioFocusInfo info : afiList) {
+            focus.removeAudioFocusInfoAndTransientlyLoseFocus(info);
+        }
+    }
+
+    int reevaluateAndRegainAudioFocus(AudioFocusInfo afi) {
+        CarAudioFocus focus = getFocusForUid(afi.getClientUid());
+        return focus.reevaluateAndRegainAudioFocus(afi);
+    }
+
+
+    /**
+     * Sets the owning policy of the audio focus
+     *
+     * @param audioService owning car audio service
+     * @param parentPolicy owning parent car audio policy
+     * @Note 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.
+     */
+    void setOwningPolicy(CarAudioService audioService, AudioPolicy parentPolicy) {
+        mCarAudioService = audioService;
+        mAudioPolicy = parentPolicy;
+
+        for (int zoneId : mFocusZones.keySet()) {
+            mFocusZones.get(zoneId).setOwningPolicy(mCarAudioService, mAudioPolicy);
+        }
+    }
+
+    @Override
+    public void onAudioFocusRequest(AudioFocusInfo afi, int requestResult) {
+        CarAudioFocus focus = getFocusForUid(afi.getClientUid());
+        focus.onAudioFocusRequest(afi, requestResult);
+    }
+
+    /**
+     * @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 void onAudioFocusAbandon(AudioFocusInfo afi) {
+        CarAudioFocus focus = getFocusForUid(afi.getClientUid());
+        focus.onAudioFocusAbandon(afi);
+    }
+
+    private CarAudioFocus getFocusForUid(int uid) {
+        //getZoneIdForUid defaults to returning default zoneId
+        //if uid has not been mapped, thus the value returned will be
+        //default zone focus
+        int zoneId = mCarAudioService.getZoneIdForUid(uid);
+
+        CarAudioFocus focus =  mFocusZones.get(zoneId);
+        return focus;
+    }
+
+    /**
+     * dumps the current state of the CarZoneAudioFocus
+     *
+     * @param indent indent to append to each new line
+     * @param writer stream to write current state
+     */
+    synchronized void dump(String indent, PrintWriter writer) {
+        writer.printf("%s*CarZonesAudioFocus*\n", indent);
+
+        writer.printf("%s\tCar Zones Audio Focus Listeners:\n", indent);
+        Integer[] keys = mFocusZones.keySet().stream().sorted().toArray(Integer[]::new);
+        for (Integer zoneId : keys) {
+            writer.printf("%s\tZone Id: %s", indent, zoneId.toString());
+            mFocusZones.get(zoneId).dump(indent + "\t", writer);
+        }
+    }
+}
diff --git a/service/src/com/android/car/garagemode/Controller.java b/service/src/com/android/car/garagemode/Controller.java
index 347ba73..d7235dd 100644
--- a/service/src/com/android/car/garagemode/Controller.java
+++ b/service/src/com/android/car/garagemode/Controller.java
@@ -28,6 +28,7 @@
 import com.android.car.CarLocalServices;
 import com.android.internal.annotations.VisibleForTesting;
 
+import java.util.List;
 import java.util.concurrent.CompletableFuture;
 
 /**
@@ -105,6 +106,13 @@
     }
 
     /**
+     * @return The names of the jobs that Garage Mode is waiting for
+     */
+    List<String> pendingGarageModeJobs() {
+        return mGarageMode.pendingJobs();
+    }
+
+    /**
      * Wrapper method to send a broadcast
      *
      * @param i intent that contains broadcast data
diff --git a/service/src/com/android/car/garagemode/GarageMode.java b/service/src/com/android/car/garagemode/GarageMode.java
index b13045e..1165de5 100644
--- a/service/src/com/android/car/garagemode/GarageMode.java
+++ b/service/src/com/android/car/garagemode/GarageMode.java
@@ -63,6 +63,7 @@
 
     private boolean mGarageModeActive;
     private JobScheduler mJobScheduler;
+    private List<String> mPendingJobs = new ArrayList<>();
     private Handler mHandler;
     private Runnable mRunnable = new Runnable() {
         @Override
@@ -129,6 +130,10 @@
         return mGarageModeActive;
     }
 
+    synchronized List<String> pendingJobs() {
+        return mPendingJobs;
+    }
+
     void enterGarageMode(CompletableFuture<Void> future) {
         LOG.d("Entering GarageMode");
         synchronized (this) {
@@ -141,9 +146,7 @@
         ArrayList<Integer> startedUsers =
                 CarLocalServices.getService(CarUserService.class).startAllBackgroundUsers();
         synchronized (this) {
-            for (Integer user : startedUsers) {
-                mStartedBackgroundUsers.add(user);
-            }
+            mStartedBackgroundUsers.addAll(startedUsers);
         }
     }
 
@@ -224,15 +227,22 @@
         mHandler.removeCallbacks(mRunnable);
     }
 
-    private int numberOfJobsRunning() {
+    private synchronized int numberOfJobsRunning() {
         List<JobInfo> startedJobs = mJobScheduler.getStartedJobs();
         int count = 0;
+        List<String> currentPendingJobs = new ArrayList<>();
         for (JobSnapshot snap : mJobScheduler.getAllJobSnapshots()) {
             if (startedJobs.contains(snap.getJobInfo())
                     && snap.getJobInfo().isRequireDeviceIdle()) {
+                currentPendingJobs.add(snap.getJobInfo().toString());
                 count++;
             }
         }
+        if (count > 0) {
+            // We have something pending, so update the list.
+            // (Otherwise, keep the old list.)
+            mPendingJobs = currentPendingJobs;
+        }
         return count;
     }
 }
diff --git a/service/src/com/android/car/garagemode/GarageModeService.java b/service/src/com/android/car/garagemode/GarageModeService.java
index f28bb35..8527bc7 100644
--- a/service/src/com/android/car/garagemode/GarageModeService.java
+++ b/service/src/com/android/car/garagemode/GarageModeService.java
@@ -23,6 +23,7 @@
 import com.android.internal.annotations.VisibleForTesting;
 
 import java.io.PrintWriter;
+import java.util.List;
 
 /**
  * Main service container for car Garage Mode.
@@ -63,11 +64,24 @@
 
     /**
      * Dumps useful information about GarageMode
-     * @param writer
+     * @param writer Where to dump the information
      */
     @Override
     public void dump(PrintWriter writer) {
-        writer.println("GarageModeInProgress " + mController.isGarageModeActive());
+        boolean isActive = mController.isGarageModeActive();
+        writer.println("GarageModeInProgress " + isActive);
+        List<String> jobs = mController.pendingGarageModeJobs();
+        if (isActive) {
+            writer.println("GarageMode is currently waiting for " + jobs.size() + " jobs:");
+        } else {
+            writer.println("GarageMode was last waiting for " + jobs.size() + " jobs:");
+        }
+        // Dump the names of the jobs that GM is/was waiting for
+        int jobNumber = 1;
+        for (String job : jobs) {
+            writer.println("   " + jobNumber + ": " + job);
+            jobNumber++;
+        }
     }
 
     /**
diff --git a/service/src/com/android/car/hal/InputHalService.java b/service/src/com/android/car/hal/InputHalService.java
index f0993eb..d719510 100644
--- a/service/src/com/android/car/hal/InputHalService.java
+++ b/service/src/com/android/car/hal/InputHalService.java
@@ -140,12 +140,19 @@
                             KeyEvent.ACTION_DOWN : KeyEvent.ACTION_UP;
             int code = v.value.int32Values.get(1);
             int display = v.value.int32Values.get(2);
+            int indentsCount = v.value.int32Values.size() < 4 ? 1 : v.value.int32Values.get(3);
             if (DBG) {
-                Log.i(CarLog.TAG_INPUT, "hal event code:" + code + ", action:" + action +
-                        ", display:" + display);
+                Log.i(CarLog.TAG_INPUT, new StringBuilder()
+                                        .append("hal event code:").append(code)
+                                        .append(", action:").append(action)
+                                        .append(", display: ").append(display)
+                                        .append(", number of indents: ").append(indentsCount)
+                                        .toString());
             }
-
-            dispatchKeyEvent(listener, action, code, display);
+            while (indentsCount > 0) {
+                indentsCount--;
+                dispatchKeyEvent(listener, action, code, display);
+            }
         }
     }
 
diff --git a/service/src/com/android/car/hal/VmsHalService.java b/service/src/com/android/car/hal/VmsHalService.java
index 1f6c2e2..487ec1f 100644
--- a/service/src/com/android/car/hal/VmsHalService.java
+++ b/service/src/com/android/car/hal/VmsHalService.java
@@ -40,26 +40,30 @@
 import android.hardware.automotive.vehicle.V2_0.VmsMessageWithLayerIntegerValuesIndex;
 import android.hardware.automotive.vehicle.V2_0.VmsOfferingMessageIntegerValuesIndex;
 import android.hardware.automotive.vehicle.V2_0.VmsPublisherInformationIntegerValuesIndex;
+import android.hardware.automotive.vehicle.V2_0.VmsStartSessionMessageIntegerValuesIndex;
 import android.os.Handler;
 import android.os.HandlerThread;
 import android.os.IBinder;
 import android.os.Message;
 import android.os.RemoteException;
+import android.os.SystemClock;
 import android.util.ArraySet;
 import android.util.Log;
 
-import androidx.annotation.GuardedBy;
 import androidx.annotation.VisibleForTesting;
 
 import com.android.car.CarLog;
 
 import java.io.PrintWriter;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
+import java.util.function.Consumer;
+import java.util.function.Supplier;
 
 /**
  * VMS client implementation that proxies VmsPublisher/VmsSubscriber API calls to the Vehicle HAL
@@ -72,18 +76,20 @@
     private static final String TAG = "VmsHalService";
     private static final int HAL_PROPERTY_ID = VehicleProperty.VEHICLE_MAP_SERVICE;
     private static final int NUM_INTEGERS_IN_VMS_LAYER = 3;
+    private static final int UNKNOWN_CLIENT_ID = -1;
 
     private final VehicleHal mVehicleHal;
+    private final int mCoreId;
+    private final MessageQueue mMessageQueue;
     private volatile boolean mIsSupported = false;
 
-    private IBinder mPublisherToken;
     private IVmsPublisherService mPublisherService;
-    private IVmsSubscriberService mSubscriberService;
+    private Consumer<IBinder> mPublisherOnHalConnected;
+    private Runnable mPublisherOnHalDisconnected;
+    private IBinder mPublisherToken;
 
-    @GuardedBy("this")
-    private HandlerThread mHandlerThread;
-    @GuardedBy("this")
-    private Handler mHandler;
+    private IVmsSubscriberService mSubscriberService;
+    private Consumer<IVmsSubscriberClient> mSuscriberOnHalDisconnected;
 
     private int mSubscriptionStateSequence = -1;
     private int mAvailableLayersSequence = -1;
@@ -97,14 +103,19 @@
 
         @Override
         public void onVmsSubscriptionChange(VmsSubscriptionState subscriptionState) {
-            // Registration of this callback is handled by VmsPublisherService.
-            // As a result, HAL support must be checked whenever the callback is triggered.
-            if (!mIsSupported) {
+            if (DBG) Log.d(TAG, "Handling a subscription state change");
+            // Drop out-of-order notifications
+            if (subscriptionState.getSequenceNumber() <= mSubscriptionStateSequence) {
+                Log.w(TAG,
+                        String.format("Out of order subscription state received: %d (expecting %d)",
+                                subscriptionState.getSequenceNumber(),
+                                mSubscriptionStateSequence + 1));
                 return;
             }
-            if (DBG) Log.d(TAG, "Handling a subscription state change");
-            Message.obtain(mHandler, VmsMessageType.SUBSCRIPTIONS_CHANGE, subscriptionState)
-                    .sendToTarget();
+            mSubscriptionStateSequence = subscriptionState.getSequenceNumber();
+            mMessageQueue.enqueue(VmsMessageType.SUBSCRIPTIONS_CHANGE,
+                    createSubscriptionStateMessage(VmsMessageType.SUBSCRIPTIONS_CHANGE,
+                            subscriptionState));
         }
     };
 
@@ -112,67 +123,87 @@
         @Override
         public void onVmsMessageReceived(VmsLayer layer, byte[] payload) {
             if (DBG) Log.d(TAG, "Handling a data message for Layer: " + layer);
-            // TODO(b/124130256): Set publisher ID of data message
-            Message.obtain(mHandler, VmsMessageType.DATA, createDataMessage(layer, 0, payload))
-                    .sendToTarget();
+            mMessageQueue.enqueue(VmsMessageType.DATA, createDataMessage(layer, payload));
         }
 
         @Override
         public void onLayersAvailabilityChanged(VmsAvailableLayers availableLayers) {
             if (DBG) Log.d(TAG, "Handling a layer availability change");
-            Message.obtain(mHandler, VmsMessageType.AVAILABILITY_CHANGE, availableLayers)
-                    .sendToTarget();
+            // Drop out-of-order notifications
+            if (availableLayers.getSequence() <= mAvailableLayersSequence) {
+                Log.w(TAG,
+                        String.format("Out of order layer availability received: %d (expecting %d)",
+                                availableLayers.getSequence(),
+                                mAvailableLayersSequence + 1));
+                return;
+            }
+            mAvailableLayersSequence = availableLayers.getSequence();
+            mMessageQueue.enqueue(VmsMessageType.AVAILABILITY_CHANGE,
+                    createAvailableLayersMessage(VmsMessageType.AVAILABILITY_CHANGE,
+                            availableLayers));
         }
     };
 
-    private final Handler.Callback mHandlerCallback = msg -> {
-        int messageType = msg.what;
-        VehiclePropValue vehicleProp = null;
-        switch (messageType) {
-            case VmsMessageType.DATA:
-                vehicleProp = (VehiclePropValue) msg.obj;
-                break;
-            case VmsMessageType.SUBSCRIPTIONS_CHANGE:
-                VmsSubscriptionState subscriptionState = (VmsSubscriptionState) msg.obj;
-                // Drop out-of-order notifications
-                if (subscriptionState.getSequenceNumber() <= mSubscriptionStateSequence) {
-                    break;
-                }
-                vehicleProp = createSubscriptionStateMessage(
-                        VmsMessageType.SUBSCRIPTIONS_CHANGE,
-                        subscriptionState);
-                mSubscriptionStateSequence = subscriptionState.getSequenceNumber();
-                break;
-            case VmsMessageType.AVAILABILITY_CHANGE:
-                VmsAvailableLayers availableLayers = (VmsAvailableLayers) msg.obj;
-                // Drop out-of-order notifications
-                if (availableLayers.getSequence() <= mAvailableLayersSequence) {
-                    break;
-                }
-                vehicleProp = createAvailableLayersMessage(
-                        VmsMessageType.AVAILABILITY_CHANGE,
-                        availableLayers);
-                mAvailableLayersSequence = availableLayers.getSequence();
-                break;
-            default:
-                Log.e(TAG, "Unexpected message type: " + messageType);
+    private class MessageQueue implements Handler.Callback {
+        private final Set<Integer> mSupportedMessageTypes = new ArraySet<>(Arrays.asList(
+                VmsMessageType.DATA,
+                VmsMessageType.START_SESSION,
+                VmsMessageType.AVAILABILITY_CHANGE,
+                VmsMessageType.SUBSCRIPTIONS_CHANGE
+        ));
+        private HandlerThread mHandlerThread;
+        private Handler mHandler;
+
+        synchronized void init() {
+            mHandlerThread = new HandlerThread(TAG);
+            mHandlerThread.start();
+            mHandler = new Handler(mHandlerThread.getLooper(), this);
         }
-        if (vehicleProp != null) {
+
+        synchronized void release() {
+            if (mHandlerThread != null) {
+                mHandlerThread.quitSafely();
+            }
+        }
+
+        synchronized void enqueue(int messageType, Object message) {
+            if (mSupportedMessageTypes.contains(messageType)) {
+                Message.obtain(mHandler, messageType, message).sendToTarget();
+            } else {
+                Log.e(TAG, "Unexpected message type: " + VmsMessageType.toString(messageType));
+            }
+        }
+
+        synchronized void clear() {
+            mSupportedMessageTypes.forEach(mHandler::removeMessages);
+        }
+
+        @Override
+        public boolean handleMessage(Message msg) {
+            int messageType = msg.what;
+            VehiclePropValue vehicleProp = (VehiclePropValue) msg.obj;
             if (DBG) Log.d(TAG, "Sending " + VmsMessageType.toString(messageType) + " message");
             try {
                 setPropertyValue(vehicleProp);
             } catch (RemoteException e) {
                 Log.e(TAG, "While sending " + VmsMessageType.toString(messageType));
             }
+            return true;
         }
-        return true;
-    };
+    }
 
     /**
      * Constructor used by {@link VehicleHal}
      */
     VmsHalService(VehicleHal vehicleHal) {
+        this(vehicleHal, SystemClock::uptimeMillis);
+    }
+
+    @VisibleForTesting
+    VmsHalService(VehicleHal vehicleHal, Supplier<Long> getCoreId) {
         mVehicleHal = vehicleHal;
+        mCoreId = (int) (getCoreId.get() % Integer.MAX_VALUE);
+        mMessageQueue = new MessageQueue();
     }
 
     /**
@@ -180,21 +211,25 @@
      */
     @VisibleForTesting
     Handler getHandler() {
-        return mHandler;
+        return mMessageQueue.mHandler;
     }
 
     /**
      * Gets the {@link IVmsPublisherClient} implementation for the HAL's publisher callback.
      */
-    public IBinder getPublisherClient() {
-        return mPublisherClient.asBinder();
+    public void setPublisherConnectionCallbacks(Consumer<IBinder> onHalConnected,
+            Runnable onHalDisconnected) {
+        mPublisherOnHalConnected = onHalConnected;
+        mPublisherOnHalDisconnected = onHalDisconnected;
     }
 
     /**
      * Sets a reference to the {@link IVmsSubscriberService} implementation for use by the HAL.
      */
-    public void setVmsSubscriberService(IVmsSubscriberService service) {
+    public void setVmsSubscriberService(IVmsSubscriberService service,
+            Consumer<IVmsSubscriberClient> onHalDisconnected) {
         mSubscriberService = service;
+        mSuscriberOnHalDisconnected = onHalDisconnected;
     }
 
     @Override
@@ -219,39 +254,14 @@
             return; // Do not continue initialization
         }
 
-        synchronized (this) {
-            mHandlerThread = new HandlerThread(TAG);
-            mHandlerThread.start();
-            mHandler = new Handler(mHandlerThread.getLooper(), mHandlerCallback);
-        }
-
-        if (mSubscriberService != null) {
-            try {
-                mSubscriberService.addVmsSubscriberToNotifications(mSubscriberClient);
-            } catch (RemoteException e) {
-                Log.e(TAG, "While adding subscriber callback", e);
-            }
-
-            // Publish layer availability to HAL clients (this triggers HAL client initialization)
-            try {
-                mSubscriberClient.onLayersAvailabilityChanged(
-                        mSubscriberService.getAvailableLayers());
-            } catch (RemoteException e) {
-                Log.e(TAG, "While publishing layer availability", e);
-            }
-        } else if (DBG) {
-            Log.d(TAG, "VmsSubscriberService not registered");
-        }
+        mMessageQueue.init();
+        mMessageQueue.enqueue(VmsMessageType.START_SESSION,
+                createStartSessionMessage(mCoreId, UNKNOWN_CLIENT_ID));
     }
 
     @Override
     public void release() {
-        synchronized (this) {
-            if (mHandlerThread != null) {
-                mHandlerThread.quitSafely();
-            }
-        }
-
+        mMessageQueue.release();
         mSubscriptionStateSequence = -1;
         mAvailableLayersSequence = -1;
 
@@ -330,6 +340,9 @@
                     case VmsMessageType.SUBSCRIPTIONS_REQUEST:
                         handleSubscriptionsRequestEvent();
                         break;
+                    case VmsMessageType.START_SESSION:
+                        handleStartSessionEvent(vec);
+                        break;
                     default:
                         Log.e(TAG, "Unexpected message type: " + messageType);
                 }
@@ -340,6 +353,72 @@
     }
 
     /**
+     * SESSION_START message format:
+     * <ul>
+     * <li>Message type
+     * <li>Core ID
+     * <li>Client ID
+     * </ul>
+     */
+    private void handleStartSessionEvent(List<Integer> message) {
+        int coreId = message.get(VmsStartSessionMessageIntegerValuesIndex.SERVICE_ID);
+        int clientId = message.get(VmsStartSessionMessageIntegerValuesIndex.CLIENT_ID);
+        if (DBG) {
+            Log.d(TAG,
+                    "Handling a session start event with coreId: " + coreId + " client: "
+                            + clientId);
+        }
+
+        if (coreId != mCoreId) {
+            if (mPublisherOnHalDisconnected != null) {
+                mPublisherOnHalDisconnected.run();
+            } else {
+                Log.w(TAG, "Publisher disconnect callback not registered");
+            }
+            if (mSuscriberOnHalDisconnected != null) {
+                mSuscriberOnHalDisconnected.accept(mSubscriberClient);
+            } else {
+                Log.w(TAG, "Subscriber disconnect callback not registered");
+            }
+
+            // Drop all queued messages and client state
+            mMessageQueue.clear();
+            mSubscriptionStateSequence = -1;
+            mAvailableLayersSequence = -1;
+
+            // Enqueue an acknowledgement message
+            mMessageQueue.enqueue(VmsMessageType.START_SESSION,
+                    createStartSessionMessage(mCoreId, clientId));
+        }
+
+        // Notify client manager of connection
+        if (mPublisherOnHalConnected != null) {
+            mPublisherOnHalConnected.accept(mPublisherClient);
+        } else {
+            Log.w(TAG, "Publisher connect callback not registered");
+        }
+
+        // Notify subscriber service of connection
+        if (mSubscriberService != null) {
+            try {
+                mSubscriberService.addVmsSubscriberToNotifications(mSubscriberClient);
+            } catch (RemoteException e) {
+                Log.e(TAG, "While adding subscriber callback", e);
+            }
+
+            // Publish layer availability to HAL clients (this triggers HAL client initialization)
+            try {
+                mSubscriberClient.onLayersAvailabilityChanged(
+                        mSubscriberService.getAvailableLayers());
+            } catch (RemoteException e) {
+                Log.e(TAG, "While publishing layer availability", e);
+            }
+        } else {
+            Log.w(TAG, "Subscriber connect callback not registered");
+        }
+    }
+
+    /**
      * DATA message format:
      * <ul>
      * <li>Message type
@@ -588,6 +667,30 @@
     }
 
     /**
+     * Creates a SESSION_START type {@link VehiclePropValue}.
+     *
+     * SESSION_START message format:
+     * <ul>
+     * <li>Message type
+     * <li>Core ID
+     * <li>Client ID
+     * </ul>
+     */
+    private static VehiclePropValue createStartSessionMessage(int coreId, int clientId) {
+        // Message type + layer
+        VehiclePropValue vehicleProp = createVmsMessage(VmsMessageType.START_SESSION);
+        List<Integer> message = vehicleProp.value.int32Values;
+
+        // Core ID
+        message.add(coreId);
+
+        // Client ID
+        message.add(clientId);
+
+        return vehicleProp;
+    }
+
+    /**
      * Creates a DATA type {@link VehiclePropValue}.
      *
      * DATA message format:
@@ -602,14 +705,15 @@
      *
      * @param layer Layer for which message was published.
      */
-    private static VehiclePropValue createDataMessage(VmsLayer layer, int publisherId,
-            byte[] payload) {
+    private static VehiclePropValue createDataMessage(VmsLayer layer, byte[] payload) {
         // Message type + layer
-        VehiclePropValue vehicleProp = createVmsMessageWithLayer(VmsMessageType.DATA, layer);
+        VehiclePropValue vehicleProp = createVmsMessage(VmsMessageType.DATA);
+        appendLayer(vehicleProp.value.int32Values, layer);
         List<Integer> message = vehicleProp.value.int32Values;
 
         // Publisher ID
-        message.add(publisherId);
+        // TODO(b/124130256): Set publisher ID of data message
+        message.add(0);
 
         // Payload
         appendBytes(vehicleProp.value.bytes, payload);
@@ -709,20 +813,6 @@
     }
 
     /**
-     * Creates a {@link VehiclePropValue} of the requested message type, with layer message fields
-     * populated. Other message fields are *not* populated.
-     *
-     * @param messageType Type of message, from {@link VmsMessageType}
-     * @param layer       Layer affected by message.
-     */
-    private static VehiclePropValue createVmsMessageWithLayer(
-            int messageType, VmsLayer layer) {
-        VehiclePropValue vehicleProp = createVmsMessage(messageType);
-        appendLayer(vehicleProp.value.int32Values, layer);
-        return vehicleProp;
-    }
-
-    /**
      * Appends a {@link VmsLayer} to an encoded VMS message.
      *
      * Layer format:
@@ -761,9 +851,7 @@
         message.add(layer.getVmsLayer().getSubtype());
         message.add(layer.getVmsLayer().getVersion());
         message.add(layer.getPublisherIds().size());
-        for (int publisherId : layer.getPublisherIds()) {
-            message.add(publisherId);
-        }
+        message.addAll(layer.getPublisherIds());
     }
 
     private static void appendBytes(ArrayList<Byte> dst, byte[] src) {
diff --git a/service/src/com/android/car/trust/BleManager.java b/service/src/com/android/car/trust/BleManager.java
index 61e1be6..24a3b79 100644
--- a/service/src/com/android/car/trust/BleManager.java
+++ b/service/src/com/android/car/trust/BleManager.java
@@ -54,6 +54,9 @@
     private static final int BLE_RETRY_LIMIT = 5;
     private static final int BLE_RETRY_INTERVAL_MS = 1000;
 
+    private static final int GATT_SERVER_RETRY_LIMIT = 20;
+    private static final int GATT_SERVER_RETRY_DELAY_MS = 200;
+
     // https://www.bluetooth.com/specifications/gatt/viewer?attributeXmlFile=org.bluetooth
     // .service.generic_access.xml
     private static final UUID GENERIC_ACCESS_PROFILE_UUID =
@@ -71,6 +74,10 @@
     private BluetoothGattServer mGattServer;
     private BluetoothGatt mBluetoothGatt;
     private int mAdvertiserStartCount;
+    private int mGattServerRetryStartCount;
+    private BluetoothGattService mBluetoothGattService;
+    private AdvertiseCallback mAdvertiseCallback;
+    private AdvertiseData mData;
 
     BleManager(Context context) {
         mContext = context;
@@ -97,32 +104,38 @@
             return;
         }
 
+        mBluetoothGattService = service;
+        mAdvertiseCallback = advertiseCallback;
+        mData = data;
+        mGattServerRetryStartCount = 0;
+        mBluetoothManager = (BluetoothManager) mContext.getSystemService(
+            Context.BLUETOOTH_SERVICE);
+        openGattServer();
+    }
+
+    private void openGattServer() {
         // Only open one Gatt server.
-        if (mGattServer == null) {
+        if (mGattServer != null) {
             if (Log.isLoggable(TAG, Log.DEBUG)) {
-                Log.d(TAG, "Opening a new GATT Server");
+                Log.d(TAG, "Gatt Server created, retry count: " + mGattServerRetryStartCount);
             }
-            mBluetoothManager = (BluetoothManager) mContext.getSystemService(
-                    Context.BLUETOOTH_SERVICE);
-            mGattServer = mBluetoothManager.openGattServer(mContext, mGattServerCallback);
-
-            if (mGattServer == null) {
-                Log.e(TAG, "Gatt Server not created");
-                return;
-            }
-        }
-
-        mGattServer.clearServices();
-        mGattServer.addService(service);
-
-        AdvertiseSettings settings = new AdvertiseSettings.Builder()
+            mGattServer.clearServices();
+            mGattServer.addService(mBluetoothGattService);
+            AdvertiseSettings settings = new AdvertiseSettings.Builder()
                 .setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_LOW_LATENCY)
                 .setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_HIGH)
                 .setConnectable(true)
                 .build();
-
-        mAdvertiserStartCount = 0;
-        startAdvertisingInternally(settings, data, advertiseCallback);
+            mAdvertiserStartCount = 0;
+            startAdvertisingInternally(settings, mData, mAdvertiseCallback);
+            mGattServerRetryStartCount = 0;
+        } else if (mGattServerRetryStartCount < GATT_SERVER_RETRY_LIMIT) {
+            mGattServer = mBluetoothManager.openGattServer(mContext, mGattServerCallback);
+            mGattServerRetryStartCount++;
+            mHandler.postDelayed(() -> openGattServer(), GATT_SERVER_RETRY_DELAY_MS);
+        } else {
+            Log.e(TAG, "Gatt server not created - exceeded retry limit.");
+        }
     }
 
     private void startAdvertisingInternally(AdvertiseSettings settings, AdvertiseData data,
@@ -132,6 +145,9 @@
         }
 
         if (mAdvertiser != null) {
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "Advertiser created, retry count: " + mAdvertiserStartCount);
+            }
             mAdvertiser.startAdvertising(settings, data, advertiseCallback);
             mAdvertiserStartCount = 0;
         } else if (mAdvertiserStartCount < BLE_RETRY_LIMIT) {
@@ -209,6 +225,9 @@
         if (Log.isLoggable(TAG, Log.DEBUG)) {
             Log.d(TAG, "stopGattServer");
         }
+        if (mBluetoothGatt != null) {
+            mBluetoothGatt.disconnect();
+        }
         mGattServer.close();
         mGattServer = null;
     }
diff --git a/service/src/com/android/car/trust/CarTrustAgentBleManager.java b/service/src/com/android/car/trust/CarTrustAgentBleManager.java
index 3e073a0..f42c1e4 100644
--- a/service/src/com/android/car/trust/CarTrustAgentBleManager.java
+++ b/service/src/com/android/car/trust/CarTrustAgentBleManager.java
@@ -401,6 +401,9 @@
         public void onStartFailure(int errorCode) {
             Log.e(TAG, "Failed to advertise, errorCode: " + errorCode);
             super.onStartFailure(errorCode);
+            if (errorCode == AdvertiseCallback.ADVERTISE_FAILED_ALREADY_STARTED) {
+                return;
+            }
             if (Log.isLoggable(TAG, Log.DEBUG)) {
                 Log.d(TAG, "Start unlock advertising fail, retry to advertising..");
             }
diff --git a/service/src/com/android/car/trust/CarTrustAgentEnrollmentService.java b/service/src/com/android/car/trust/CarTrustAgentEnrollmentService.java
index 812cb63..6743375 100644
--- a/service/src/com/android/car/trust/CarTrustAgentEnrollmentService.java
+++ b/service/src/com/android/car/trust/CarTrustAgentEnrollmentService.java
@@ -16,6 +16,7 @@
 
 package com.android.car.trust;
 
+import static android.car.trust.CarTrustAgentEnrollmentManager.ENROLLMENT_HANDSHAKE_FAILURE;
 import static android.car.trust.CarTrustAgentEnrollmentManager.ENROLLMENT_NOT_ALLOWED;
 
 import android.app.ActivityManager;
@@ -134,7 +135,6 @@
             client.mListenerBinder.unlinkToDeath(client, 0);
         }
         mEnrollmentStateClients.clear();
-        setEnrollmentHandshakeAccepted(false);
     }
 
     // Implementing the ICarTrustAgentEnrollment interface
@@ -148,13 +148,7 @@
         if (!mTrustedDeviceService.getSharedPrefs()
                 .getBoolean(TRUSTED_DEVICE_ENROLLMENT_ENABLED_KEY, true)) {
             Log.e(TAG, "Trusted Device Enrollment disabled");
-            for (EnrollmentStateClient client : mEnrollmentStateClients) {
-                try {
-                    client.mListener.onEnrollmentHandshakeFailure(null, ENROLLMENT_NOT_ALLOWED);
-                } catch (RemoteException e) {
-                    Log.e(TAG, "onEnrollmentHandshakeFailure dispatch failed", e);
-                }
-            }
+            dispatchEnrollmentFailure(ENROLLMENT_NOT_ALLOWED);
             return;
         }
         // Stop any current broadcasts
@@ -191,7 +185,7 @@
         addEnrollmentServiceLog("enrollmentHandshakeAccepted");
         mCarTrustAgentBleManager.sendMessage(device, CONFIRMATION_SIGNAL,
                 OperationType.ENCRYPTION_HANDSHAKE, /* isPayloadEncrypted= */ false);
-        setEnrollmentHandshakeAccepted(true);
+        setEnrollmentHandshakeAccepted();
     }
 
     /**
@@ -201,7 +195,6 @@
      */
     @Override
     public void terminateEnrollmentHandshake() {
-        setEnrollmentHandshakeAccepted(false);
         addEnrollmentServiceLog("terminateEnrollmentHandshake");
         // Disconnect from BLE
         mCarTrustAgentBleManager.disconnectRemoteDevice();
@@ -269,7 +262,10 @@
     public void setTrustedDeviceEnrollmentEnabled(boolean isEnabled) {
         SharedPreferences.Editor editor = mTrustedDeviceService.getSharedPrefs().edit();
         editor.putBoolean(TRUSTED_DEVICE_ENROLLMENT_ENABLED_KEY, isEnabled);
-        editor.apply();
+        if (!editor.commit()) {
+            Log.wtf(TAG,
+                    "Enrollment Failure: Commit to SharedPreferences failed. Enable? " + isEnabled);
+        }
     }
 
     /**
@@ -340,10 +336,10 @@
         if (mRemoteEnrollmentDevice == null) {
             Log.e(TAG, "onEscrowTokenAdded() but no remote device connected!");
             removeEscrowToken(handle, uid);
+            dispatchEnrollmentFailure(ENROLLMENT_HANDSHAKE_FAILURE);
             return;
         }
-        // To conveniently get the user id to unlock when handle is received.
-        mTrustedDeviceService.getSharedPrefs().edit().putInt(String.valueOf(handle), uid).apply();
+
         mTokenActiveStateMap.put(handle, false);
         for (EnrollmentStateClient client : mEnrollmentStateClients) {
             try {
@@ -372,14 +368,18 @@
         Iterator<String> iterator = deviceInfos.iterator();
         while (iterator.hasNext()) {
             String deviceInfoString = iterator.next();
-            if (TrustedDeviceInfo.deserialize(deviceInfoString).getHandle()
-                    == handle) {
+            if (TrustedDeviceInfo.deserialize(deviceInfoString).getHandle() == handle) {
+                if (Log.isLoggable(TAG, Log.DEBUG)) {
+                    Log.d(TAG, "Removing trusted device handle: " + handle);
+                }
                 iterator.remove();
                 break;
             }
         }
         editor.putStringSet(String.valueOf(uid), deviceInfos);
-        editor.apply();
+        if (!editor.commit()) {
+            Log.e(TAG, "EscrowToken removed, but shared prefs update failed");
+        }
     }
 
     /**
@@ -391,36 +391,65 @@
         if (Log.isLoggable(TAG, Log.DEBUG)) {
             Log.d(TAG, "onEscrowTokenActiveStateChanged: " + Long.toHexString(handle));
         }
-        mTokenActiveStateMap.put(handle, isTokenActive);
-        dispatchEscrowTokenActiveStateChanged(handle, isTokenActive);
-        if (isTokenActive) {
-            Set<String> deviceInfo = mTrustedDeviceService.getSharedPrefs().getStringSet(
-                    String.valueOf(uid), new HashSet<>());
-            String deviceName;
-            if (mRemoteEnrollmentDevice.getName() != null) {
-                deviceName = mRemoteEnrollmentDevice.getName();
-            } else if (mDeviceName != null) {
-                deviceName = mDeviceName;
-            } else {
-                deviceName = mContext.getString(R.string.trust_device_default_name);
+        if (mRemoteEnrollmentDevice == null || !isTokenActive) {
+            if (mRemoteEnrollmentDevice == null) {
+                Log.e(TAG,
+                        "Device disconnected before sending back handle.  Enrollment incomplete");
             }
-            addEnrollmentServiceLog("trustedDeviceAdded (handle:" + handle + ", uid:" + uid
-                    + ", addr:" + mRemoteEnrollmentDevice.getAddress()
-                    + ", name:" + deviceName + ")");
-            deviceInfo.add(new TrustedDeviceInfo(handle, mRemoteEnrollmentDevice.getAddress(),
-                    deviceName).serialize());
-            // To conveniently get the devices info regarding certain user.
-            mTrustedDeviceService.getSharedPrefs().edit().putStringSet(String.valueOf(uid),
-                    deviceInfo).apply();
-            if (Log.isLoggable(TAG, Log.DEBUG)) {
-                Log.d(TAG, "Sending handle: " + handle);
+            if (!isTokenActive) {
+                Log.e(TAG, "Unexpected: Escrow Token activation failed");
             }
-            mCarTrustAgentBleManager.sendMessage(mRemoteEnrollmentDevice,
-                    mEncryptionKey.encryptData(Utils.longToBytes(handle)),
-                    OperationType.CLIENT_MESSAGE, /* isPayloadEncrypted= */ true);
-        } else {
             removeEscrowToken(handle, uid);
+            dispatchEnrollmentFailure(ENROLLMENT_HANDSHAKE_FAILURE);
+            return;
         }
+
+        mTokenActiveStateMap.put(handle, isTokenActive);
+        Set<String> deviceInfo = mTrustedDeviceService.getSharedPrefs().getStringSet(
+                String.valueOf(uid), new HashSet<>());
+        String deviceName;
+        if (mRemoteEnrollmentDevice.getName() != null) {
+            deviceName = mRemoteEnrollmentDevice.getName();
+        } else if (mDeviceName != null) {
+            deviceName = mDeviceName;
+        } else {
+            deviceName = mContext.getString(R.string.trust_device_default_name);
+        }
+        StringBuffer log = new StringBuffer()
+                .append("trustedDeviceAdded (handle:").append(handle)
+                .append(", uid:").append(uid)
+                .append(", addr:").append(mRemoteEnrollmentDevice.getAddress())
+                .append(", name:").append(deviceName).append(")");
+        addEnrollmentServiceLog(log.toString());
+        deviceInfo.add(new TrustedDeviceInfo(handle, mRemoteEnrollmentDevice.getAddress(),
+                deviceName).serialize());
+
+        // To conveniently get the devices info regarding certain user.
+        SharedPreferences.Editor editor = mTrustedDeviceService.getSharedPrefs().edit();
+        editor.putStringSet(String.valueOf(uid), deviceInfo);
+        if (!editor.commit()) {
+            Log.e(TAG, "Writing DeviceInfo to shared prefs Failed");
+            removeEscrowToken(handle, uid);
+            dispatchEnrollmentFailure(ENROLLMENT_HANDSHAKE_FAILURE);
+            return;
+        }
+
+        // To conveniently get the user id to unlock when handle is received.
+        editor.putInt(String.valueOf(handle), uid);
+        if (!editor.commit()) {
+            Log.e(TAG, "Writing (handle, uid) to shared prefs Failed");
+            removeEscrowToken(handle, uid);
+            dispatchEnrollmentFailure(ENROLLMENT_HANDSHAKE_FAILURE);
+            return;
+        }
+
+        if (Log.isLoggable(TAG, Log.DEBUG)) {
+            Log.d(TAG, "Sending handle: " + handle);
+        }
+        mCarTrustAgentBleManager.sendMessage(mRemoteEnrollmentDevice,
+                mEncryptionKey.encryptData(Utils.longToBytes(handle)),
+                OperationType.CLIENT_MESSAGE, /* isPayloadEncrypted= */ true);
+        dispatchEscrowTokenActiveStateChanged(handle, isTokenActive);
     }
 
     void onEnrollmentAdvertiseStartSuccess() {
@@ -444,9 +473,8 @@
     }
 
     void onRemoteDeviceConnected(BluetoothDevice device) {
-        resetEncryptionState();
-
         addEnrollmentServiceLog("onRemoteDeviceConnected (addr:" + device.getAddress() + ")");
+        resetEncryptionState();
         synchronized (mRemoteDeviceLock) {
             mRemoteEnrollmentDevice = device;
         }
@@ -454,16 +482,21 @@
             try {
                 client.mListener.onBleEnrollmentDeviceConnected(device);
             } catch (RemoteException e) {
-                Log.e(TAG, "onAdvertiseSuccess dispatch failed", e);
+                Log.e(TAG, "onRemoteDeviceConnected dispatch failed", e);
             }
         }
         mCarTrustAgentBleManager.stopEnrollmentAdvertising();
     }
 
     void onRemoteDeviceDisconnected(BluetoothDevice device) {
-        resetEncryptionState();
-
+        if (Log.isLoggable(TAG, Log.DEBUG)) {
+            Log.d(TAG, "Device Disconnected: " + device.getAddress() + " Enrollment State: "
+                    + mEnrollmentState + " Encryption State: " + mEncryptionState);
+        }
         addEnrollmentServiceLog("onRemoteDeviceDisconnected (addr:" + device.getAddress() + ")");
+        addEnrollmentServiceLog(
+                "Enrollment State: " + mEnrollmentState + " EncryptionState: " + mEncryptionState);
+        resetEncryptionState();
         synchronized (mRemoteDeviceLock) {
             mRemoteEnrollmentDevice = null;
         }
@@ -471,7 +504,7 @@
             try {
                 client.mListener.onBleEnrollmentDeviceDisconnected(device);
             } catch (RemoteException e) {
-                Log.e(TAG, "onAdvertiseSuccess dispatch failed", e);
+                Log.e(TAG, "onRemoteDeviceDisconnected dispatch failed", e);
             }
         }
     }
@@ -498,7 +531,7 @@
                 notifyEscrowTokenReceived(value);
                 break;
             case ENROLLMENT_STATE_HANDLE:
-                // TODO(danharms): React to ACK. Shut down server?
+                mCarTrustAgentBleManager.disconnectRemoteDevice();
                 break;
             default:
                 // Should never get here
@@ -521,6 +554,12 @@
             Log.d(TAG, "Received device id: " + mDeviceId);
         }
         UUID uniqueId = mTrustedDeviceService.getUniqueId();
+        if (uniqueId == null) {
+            Log.e(TAG, "Cannot get Unique ID for the IHU");
+            resetEnrollmentStateOnFailure();
+            dispatchEnrollmentFailure(ENROLLMENT_HANDSHAKE_FAILURE);
+            return;
+        }
         if (Log.isLoggable(TAG, Log.DEBUG)) {
             Log.d(TAG, "Sending device id: " + uniqueId.toString());
         }
@@ -628,36 +667,44 @@
     }
 
     /**
+     * Reset the whole enrollment state.  Disconnects the peer device and removes any escrow token
+     * that has not been activated.
+     *
+     * <p>This method should be called from any stage in the middle of enrollment where we
+     * encounter a failure.
+     */
+    private void resetEnrollmentStateOnFailure() {
+        terminateEnrollmentHandshake();
+        resetEncryptionState();
+    }
+
+    /**
      * Resets the encryption status of this service.
      *
      * <p>This method should be called each time a device connects so that a new handshake can be
      * started and encryption keys exchanged.
      */
     private void resetEncryptionState() {
-        setEnrollmentHandshakeAccepted(false);
-
         mEncryptionRunner = EncryptionRunnerFactory.newRunner();
         mHandshakeMessage = null;
         mEncryptionKey = null;
         mEncryptionState = HandshakeState.UNKNOWN;
+        mEnrollmentState = ENROLLMENT_STATE_NONE;
     }
 
-    private synchronized void setEnrollmentHandshakeAccepted(boolean accepted) {
-        if (!accepted) {
-            return;
-        }
-
+    private synchronized void setEnrollmentHandshakeAccepted() {
         if (mEncryptionRunner == null) {
             Log.e(TAG, "Received notification that enrollment handshake was accepted, "
                     + "but encryption was never set up.");
             return;
         }
-
         HandshakeMessage message;
         try {
             message = mEncryptionRunner.verifyPin();
         } catch (HandshakeException e) {
             Log.e(TAG, "Error during PIN verification", e);
+            resetEnrollmentStateOnFailure();
+            dispatchEnrollmentFailure(ENROLLMENT_HANDSHAKE_FAILURE);
             return;
         }
 
@@ -669,9 +716,12 @@
 
         mEncryptionState = HandshakeState.FINISHED;
         mEncryptionKey = message.getKey();
-        mTrustedDeviceService.saveEncryptionKey(mDeviceId, mEncryptionKey.asBytes());
+        if (!mTrustedDeviceService.saveEncryptionKey(mDeviceId, mEncryptionKey.asBytes())) {
+            resetEnrollmentStateOnFailure();
+            dispatchEnrollmentFailure(ENROLLMENT_HANDSHAKE_FAILURE);
+            return;
+        }
         mEnrollmentState++;
-
     }
 
     /**
@@ -843,6 +893,16 @@
         }
     }
 
+    private void dispatchEnrollmentFailure(int error) {
+        for (EnrollmentStateClient client : mEnrollmentStateClients) {
+            try {
+                client.mListener.onEnrollmentHandshakeFailure(null, error);
+            } catch (RemoteException e) {
+                Log.e(TAG, "onEnrollmentHandshakeFailure dispatch failed", e);
+            }
+        }
+    }
+
     /**
      * Class that holds onto client related information - listener interface, process that hosts the
      * binder object etc.
diff --git a/service/src/com/android/car/trust/CarTrustAgentUnlockService.java b/service/src/com/android/car/trust/CarTrustAgentUnlockService.java
index e8a0afd..8808f50 100644
--- a/service/src/com/android/car/trust/CarTrustAgentUnlockService.java
+++ b/service/src/com/android/car/trust/CarTrustAgentUnlockService.java
@@ -83,7 +83,9 @@
     public void setTrustedDeviceUnlockEnabled(boolean isEnabled) {
         SharedPreferences.Editor editor = mTrustedDeviceService.getSharedPrefs().edit();
         editor.putBoolean(TRUSTED_DEVICE_UNLOCK_ENABLED_KEY, isEnabled);
-        editor.apply();
+        if (!editor.commit()) {
+            Log.wtf(TAG, "Unlock Enable Failed. Enable? " + isEnabled);
+        }
     }
     /**
      * Set a delegate that implements {@link CarTrustAgentUnlockDelegate}. The delegate will be
diff --git a/service/src/com/android/car/trust/CarTrustedDeviceService.java b/service/src/com/android/car/trust/CarTrustedDeviceService.java
index 2948bec..9995aa7 100644
--- a/service/src/com/android/car/trust/CarTrustedDeviceService.java
+++ b/service/src/com/android/car/trust/CarTrustedDeviceService.java
@@ -202,8 +202,9 @@
             }
         } else {
             mUniqueId = UUID.randomUUID();
-            prefs.edit().putString(UNIQUE_ID_KEY, mUniqueId.toString()).commit();
-            if (Log.isLoggable(TAG, Log.DEBUG)) {
+            if (!prefs.edit().putString(UNIQUE_ID_KEY, mUniqueId.toString()).commit()) {
+                mUniqueId = null;
+            } else if (Log.isLoggable(TAG, Log.DEBUG)) {
                 Log.d(TAG, "Generated new trusted unique id: "
                         + prefs.getString(UNIQUE_ID_KEY, ""));
             }
@@ -235,14 +236,19 @@
      *
      * @param deviceId did of trusted device
      * @param encryptionKey encryption key
+     * @return {@code true} if the operation succeeded
      */
-    void saveEncryptionKey(String deviceId, byte[] encryptionKey) {
+    boolean saveEncryptionKey(String deviceId, byte[] encryptionKey) {
         byte[] encryptedKey = encryptWithKeyStore(KEY_ALIAS, encryptionKey);
-        getSharedPrefs()
+        if (encryptedKey == null) {
+            return false;
+        }
+
+        return getSharedPrefs()
                 .edit()
                 .putString(PREF_ENCRYPTION_KEY_PREFIX + deviceId,
                         Base64.encodeToString(encryptedKey, Base64.DEFAULT))
-                .apply();
+                .commit();
     }
 
     /**
diff --git a/service/src/com/android/car/vms/VmsClientManager.java b/service/src/com/android/car/vms/VmsClientManager.java
index 5f5969e..14ef0a7 100644
--- a/service/src/com/android/car/vms/VmsClientManager.java
+++ b/service/src/com/android/car/vms/VmsClientManager.java
@@ -76,7 +76,6 @@
     private final Handler mHandler;
     private final CarUserService mUserService;
     private final CarUserManagerHelper mUserManagerHelper;
-    private final IBinder mHalClient;
     private final int mMillisBeforeRebind;
 
     @GuardedBy("mListeners")
@@ -84,6 +83,8 @@
     @GuardedBy("mSystemClients")
     private final Map<String, ClientConnection> mSystemClients = new ArrayMap<>();
     @GuardedBy("mSystemClients")
+    private IBinder mHalClient;
+    @GuardedBy("mSystemClients")
     private boolean mSystemUserUnlocked;
 
     @GuardedBy("mCurrentUserClients")
@@ -132,9 +133,9 @@
         mHandler = new Handler(Looper.getMainLooper());
         mUserService = userService;
         mUserManagerHelper = userManagerHelper;
-        mHalClient = halService.getPublisherClient();
         mMillisBeforeRebind = mContext.getResources().getInteger(
                 com.android.car.R.integer.millisecondsBeforeRebindToVmsPublisher);
+        halService.setPublisherConnectionCallbacks(this::onHalConnected, this::onHalDisconnected);
     }
 
     @Override
@@ -273,8 +274,10 @@
     }
 
     private void notifyListenerOfConnectedClients(ConnectionListener listener) {
-        listener.onClientConnected(HAL_CLIENT_NAME, mHalClient);
         synchronized (mSystemClients) {
+            if (mHalClient != null) {
+                listener.onClientConnected(HAL_CLIENT_NAME, mHalClient);
+            }
             mSystemClients.values().forEach(conn -> conn.notifyIfConnected(listener));
         }
         synchronized (mCurrentUserClients) {
@@ -298,6 +301,20 @@
         }
     }
 
+    private void onHalConnected(IBinder halClient) {
+        synchronized (mSystemClients) {
+            mHalClient = halClient;
+            notifyListenersOnClientConnected(HAL_CLIENT_NAME, mHalClient);
+        }
+    }
+
+    private void onHalDisconnected() {
+        synchronized (mSystemClients) {
+            mHalClient = null;
+            notifyListenersOnClientDisconnected(HAL_CLIENT_NAME);
+        }
+    }
+
     class ClientConnection implements ServiceConnection {
         private final ComponentName mName;
         private final UserHandle mUser;
diff --git a/tests/CarDeveloperOptions/res/values-es/strings.xml b/tests/CarDeveloperOptions/res/values-es/strings.xml
index 9c8131b..b2e8581 100644
--- a/tests/CarDeveloperOptions/res/values-es/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-es/strings.xml
@@ -3935,8 +3935,7 @@
     <skip />
     <!-- no translation found for accessibility_touch_vibration_title (285890135612038092) -->
     <skip />
-    <!-- no translation found for accessibility_service_master_switch_title (2734791644475782924) -->
-    <skip />
+    <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Usar servicio"</string>
     <!-- no translation found for accessibility_daltonizer_master_switch_title (4855011639012300777) -->
     <skip />
     <!-- no translation found for accessibility_caption_master_switch_title (6373335123229234053) -->
diff --git a/tests/CarDeveloperOptions/res/values-or/strings.xml b/tests/CarDeveloperOptions/res/values-or/strings.xml
index 3e19a25..b315f3e 100644
--- a/tests/CarDeveloperOptions/res/values-or/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-or/strings.xml
@@ -4223,8 +4223,7 @@
     <skip />
     <!-- no translation found for battery_tip_summary_title (2750922152518825526) -->
     <skip />
-    <!-- no translation found for battery_tip_summary_summary (6294900413896440006) -->
-    <skip />
+    <string name="battery_tip_summary_summary" product="default" msgid="6294900413896440006">"ଫୋନର ସାଧାରଣ ବ୍ୟାକଗ୍ରାଉଣ୍ଡ୍ ବ୍ୟାଟେରୀ ବ୍ୟବହାର ରହିଛି"</string>
     <!-- no translation found for battery_tip_summary_summary (5280099016800644130) -->
     <skip />
     <!-- no translation found for battery_tip_summary_summary (4459840492610842705) -->
diff --git a/tests/CarDeveloperOptions/res/values-pt/strings.xml b/tests/CarDeveloperOptions/res/values-pt/strings.xml
index 52e8b5b..f91bfd5 100644
--- a/tests/CarDeveloperOptions/res/values-pt/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-pt/strings.xml
@@ -3865,8 +3865,7 @@
     <skip />
     <!-- no translation found for accessibility_screen_magnification_navbar_configuration_warning (6477234309484795550) -->
     <skip />
-    <!-- no translation found for accessibility_global_gesture_preference_title (3842279082831426816) -->
-    <skip />
+    <string name="accessibility_global_gesture_preference_title" msgid="3842279082831426816">"Atalho do volume"</string>
     <!-- no translation found for accessibility_shortcut_service_title (3516052294376744060) -->
     <skip />
     <!-- no translation found for accessibility_shortcut_service_on_lock_screen_title (1279441617927949980) -->
diff --git a/tests/CarDeveloperOptions/res/values-th/strings.xml b/tests/CarDeveloperOptions/res/values-th/strings.xml
index 9c8131b..f4f98b1 100644
--- a/tests/CarDeveloperOptions/res/values-th/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-th/strings.xml
@@ -6702,8 +6702,7 @@
     <skip />
     <!-- no translation found for launch_by_default (6106985160202769725) -->
     <skip />
-    <!-- no translation found for app_launch_domain_links_title (2987289657348349133) -->
-    <skip />
+    <string name="app_launch_domain_links_title" msgid="2987289657348349133">"การเปิดลิงก์"</string>
     <!-- no translation found for app_launch_open_domain_urls_title (8595126859922391331) -->
     <skip />
     <!-- no translation found for app_launch_open_domain_urls_summary (6803029846855502366) -->
@@ -6794,8 +6793,7 @@
     <skip />
     <!-- no translation found for tap_to_wake_summary (8485222120721006793) -->
     <skip />
-    <!-- no translation found for domain_urls_title (7939209950373945367) -->
-    <skip />
+    <string name="domain_urls_title" msgid="7939209950373945367">"การเปิดลิงก์"</string>
     <!-- no translation found for domain_urls_summary_none (5401203416941265109) -->
     <skip />
     <!-- no translation found for domain_urls_summary_one (3893975485064803435) -->
diff --git a/tests/CarDeveloperOptions/res/values-zh-rHK/strings.xml b/tests/CarDeveloperOptions/res/values-zh-rHK/strings.xml
index 9c8131b..0b6bf27 100644
--- a/tests/CarDeveloperOptions/res/values-zh-rHK/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-zh-rHK/strings.xml
@@ -3945,8 +3945,7 @@
     <skip />
     <!-- no translation found for accessibility_hearingaid_title (3700978781235124891) -->
     <skip />
-    <!-- no translation found for accessibility_hearingaid_not_connected_summary (634573930469952213) -->
-    <skip />
+    <string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"無連接任何助聽器"</string>
     <!-- no translation found for accessibility_hearingaid_adding_summary (4139031880828714300) -->
     <skip />
     <!-- no translation found for accessibility_hearingaid_pair_instructions_first_message (2671518890909750740) -->
diff --git a/tests/CarDeveloperOptions/res/xml/security_dashboard_settings.xml b/tests/CarDeveloperOptions/res/xml/security_dashboard_settings.xml
index a797b2d..d10b977 100644
--- a/tests/CarDeveloperOptions/res/xml/security_dashboard_settings.xml
+++ b/tests/CarDeveloperOptions/res/xml/security_dashboard_settings.xml
@@ -133,13 +133,6 @@
         android:fragment="com.android.car.developeroptions.security.EncryptionAndCredential" />
 
     <Preference
-        android:order="70"
-        android:key="manage_trust_agents"
-        android:title="@string/manage_trust_agents"
-        android:summary="@string/summary_placeholder"
-        android:fragment="com.android.car.developeroptions.security.trustagent.TrustAgentSettings" />
-
-    <Preference
         android:order="80"
         android:key="screen_pinning_settings"
         android:title="@string/screen_pinning_title"
diff --git a/tests/CarDeveloperOptions/res/xml/trust_agent_settings.xml b/tests/CarDeveloperOptions/res/xml/trust_agent_settings.xml
deleted file mode 100644
index da6c9a8..0000000
--- a/tests/CarDeveloperOptions/res/xml/trust_agent_settings.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?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.
--->
-
-<PreferenceScreen
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:settings="http://schemas.android.com/apk/res-auto"
-    android:key="trust_agents"
-    android:title="@string/manage_trust_agents"
-    settings:controller="com.android.car.developeroptions.security.trustagent.TrustAgentsPreferenceController">
-</PreferenceScreen>
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/security/SecurityFeatureProvider.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/security/SecurityFeatureProvider.java
index d0872b5..95d601d 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/security/SecurityFeatureProvider.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/security/SecurityFeatureProvider.java
@@ -19,15 +19,11 @@
 import android.content.Context;
 
 import com.android.internal.widget.LockPatternUtils;
-import com.android.car.developeroptions.security.trustagent.TrustAgentManager;
 
 
 /** FeatureProvider for security. */
 public interface SecurityFeatureProvider {
 
-    /** Returns the {@link TrustAgentManager} bound to this {@link SecurityFeatureProvider}. */
-    TrustAgentManager getTrustAgentManager();
-
     /**
      * Returns a {@link LockPatternUtils} instance bound to application context.
      */
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/security/SecurityFeatureProviderImpl.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/security/SecurityFeatureProviderImpl.java
index 4ea9ece..21df466 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/security/SecurityFeatureProviderImpl.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/security/SecurityFeatureProviderImpl.java
@@ -19,23 +19,13 @@
 import android.content.Context;
 
 import com.android.internal.widget.LockPatternUtils;
-import com.android.car.developeroptions.security.trustagent.TrustAgentManager;
 
 /** Implementation for {@code SecurityFeatureProvider}. */
 public class SecurityFeatureProviderImpl implements SecurityFeatureProvider {
 
-    private TrustAgentManager mTrustAgentManager;
     private LockPatternUtils mLockPatternUtils;
 
     @Override
-    public TrustAgentManager getTrustAgentManager() {
-        if (mTrustAgentManager == null) {
-            mTrustAgentManager = new TrustAgentManager();
-        }
-        return mTrustAgentManager;
-    }
-
-    @Override
     public LockPatternUtils getLockPatternUtils(Context context) {
         if (mLockPatternUtils == null) {
             mLockPatternUtils = new LockPatternUtils(context.getApplicationContext());
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/security/SecuritySettings.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/security/SecuritySettings.java
index e866727..5aa22e5 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/security/SecuritySettings.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/security/SecuritySettings.java
@@ -30,8 +30,6 @@
 import com.android.car.developeroptions.dashboard.DashboardFragment;
 import com.android.car.developeroptions.enterprise.EnterprisePrivacyPreferenceController;
 import com.android.car.developeroptions.search.BaseSearchIndexProvider;
-import com.android.car.developeroptions.security.trustagent.ManageTrustAgentsPreferenceController;
-import com.android.car.developeroptions.security.trustagent.TrustAgentListPreferenceController;
 import com.android.car.developeroptions.widget.PreferenceCategoryController;
 import com.android.settingslib.core.AbstractPreferenceController;
 import com.android.settingslib.core.lifecycle.Lifecycle;
@@ -82,10 +80,6 @@
      */
     @Override
     public void onActivityResult(int requestCode, int resultCode, Intent data) {
-        if (use(TrustAgentListPreferenceController.class)
-                .handleActivityResult(requestCode, resultCode)) {
-            return;
-        }
         if (use(LockUnificationPreferenceController.class)
                 .handleActivityResult(requestCode, resultCode, data)) {
             return;
@@ -105,12 +99,10 @@
             Lifecycle lifecycle, SecuritySettings host) {
         final List<AbstractPreferenceController> controllers = new ArrayList<>();
         controllers.add(new EnterprisePrivacyPreferenceController(context));
-        controllers.add(new ManageTrustAgentsPreferenceController(context));
         controllers.add(new ScreenPinningPreferenceController(context));
         controllers.add(new SimLockPreferenceController(context));
         controllers.add(new EncryptionStatusPreferenceController(context,
                 PREF_KEY_ENCRYPTION_SECURITY_PAGE));
-        controllers.add(new TrustAgentListPreferenceController(context, host, lifecycle));
 
         final List<AbstractPreferenceController> securityPreferenceControllers = new ArrayList<>();
         securityPreferenceControllers.add(new FaceStatusPreferenceController(context));
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/security/screenlock/LockAfterTimeoutPreferenceController.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/security/screenlock/LockAfterTimeoutPreferenceController.java
index 9805171..79ced0c 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/security/screenlock/LockAfterTimeoutPreferenceController.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/security/screenlock/LockAfterTimeoutPreferenceController.java
@@ -22,17 +22,14 @@
 import android.content.Context;
 import android.os.UserHandle;
 import android.provider.Settings;
-import android.text.TextUtils;
 import android.util.Log;
 
 import androidx.preference.Preference;
 
-import com.android.internal.widget.LockPatternUtils;
 import com.android.car.developeroptions.R;
 import com.android.car.developeroptions.core.PreferenceControllerMixin;
 import com.android.car.developeroptions.display.TimeoutListPreference;
-import com.android.car.developeroptions.overlay.FeatureFactory;
-import com.android.car.developeroptions.security.trustagent.TrustAgentManager;
+import com.android.internal.widget.LockPatternUtils;
 import com.android.settingslib.RestrictedLockUtils;
 import com.android.settingslib.RestrictedLockUtilsInternal;
 import com.android.settingslib.core.AbstractPreferenceController;
@@ -44,7 +41,6 @@
 
     private final int mUserId;
     private final LockPatternUtils mLockPatternUtils;
-    private final TrustAgentManager mTrustAgentManager;
     private final DevicePolicyManager mDPM;
 
     public LockAfterTimeoutPreferenceController(Context context, int userId,
@@ -53,8 +49,6 @@
         mUserId = userId;
         mLockPatternUtils = lockPatternUtils;
         mDPM = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
-        mTrustAgentManager = FeatureFactory.getFactory(context)
-                .getSecurityFeatureProvider().getTrustAgentManager();
     }
 
     @Override
@@ -137,20 +131,7 @@
                     best = i;
                 }
             }
-
-            final CharSequence trustAgentLabel = mTrustAgentManager
-                    .getActiveTrustAgentLabel(mContext, mLockPatternUtils);
-            if (!TextUtils.isEmpty(trustAgentLabel)) {
-                if (Long.valueOf(values[best].toString()) == 0) {
-                    summary = mContext.getString(R.string.lock_immediately_summary_with_exception,
-                            trustAgentLabel);
-                } else {
-                    summary = mContext.getString(R.string.lock_after_timeout_summary_with_exception,
-                            entries[best], trustAgentLabel);
-                }
-            } else {
-                summary = mContext.getString(R.string.lock_after_timeout_summary, entries[best]);
-            }
+            summary = mContext.getString(R.string.lock_after_timeout_summary, entries[best]);
         }
         preference.setSummary(summary);
     }
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/security/screenlock/PowerButtonInstantLockPreferenceController.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/security/screenlock/PowerButtonInstantLockPreferenceController.java
index adc7acf..27e1d58 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/security/screenlock/PowerButtonInstantLockPreferenceController.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/security/screenlock/PowerButtonInstantLockPreferenceController.java
@@ -18,16 +18,13 @@
 
 import android.app.admin.DevicePolicyManager;
 import android.content.Context;
-import android.text.TextUtils;
 
 import androidx.preference.Preference;
 import androidx.preference.TwoStatePreference;
 
-import com.android.internal.widget.LockPatternUtils;
 import com.android.car.developeroptions.R;
 import com.android.car.developeroptions.core.PreferenceControllerMixin;
-import com.android.car.developeroptions.overlay.FeatureFactory;
-import com.android.car.developeroptions.security.trustagent.TrustAgentManager;
+import com.android.internal.widget.LockPatternUtils;
 import com.android.settingslib.core.AbstractPreferenceController;
 
 public class PowerButtonInstantLockPreferenceController extends AbstractPreferenceController
@@ -37,15 +34,12 @@
 
     private final int mUserId;
     private final LockPatternUtils mLockPatternUtils;
-    private final TrustAgentManager mTrustAgentManager;
 
     public PowerButtonInstantLockPreferenceController(Context context, int userId,
             LockPatternUtils lockPatternUtils) {
         super(context);
         mUserId = userId;
         mLockPatternUtils = lockPatternUtils;
-        mTrustAgentManager = FeatureFactory.getFactory(context)
-                .getSecurityFeatureProvider().getTrustAgentManager();
     }
 
     @Override
@@ -71,15 +65,7 @@
     public void updateState(Preference preference) {
         ((TwoStatePreference) preference).setChecked(
                 mLockPatternUtils.getPowerButtonInstantlyLocks(mUserId));
-        final CharSequence trustAgentLabel = mTrustAgentManager.getActiveTrustAgentLabel(
-                mContext, mLockPatternUtils);
-        if (!TextUtils.isEmpty(trustAgentLabel)) {
-            preference.setSummary(mContext.getString(
-                    R.string.lockpattern_settings_power_button_instantly_locks_summary,
-                    trustAgentLabel));
-        } else {
-            preference.setSummary(R.string.summary_placeholder);
-        }
+        preference.setSummary(R.string.summary_placeholder);
     }
 
     @Override
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/security/trustagent/ManageTrustAgentsPreferenceController.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/security/trustagent/ManageTrustAgentsPreferenceController.java
deleted file mode 100644
index 6633e34..0000000
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/security/trustagent/ManageTrustAgentsPreferenceController.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * 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.developeroptions.security.trustagent;
-
-import android.content.Context;
-import android.os.UserHandle;
-
-import androidx.annotation.VisibleForTesting;
-import androidx.preference.Preference;
-
-import com.android.internal.widget.LockPatternUtils;
-import com.android.car.developeroptions.R;
-import com.android.car.developeroptions.core.BasePreferenceController;
-import com.android.car.developeroptions.overlay.FeatureFactory;
-import com.android.car.developeroptions.security.SecurityFeatureProvider;
-
-public class ManageTrustAgentsPreferenceController extends BasePreferenceController {
-
-    @VisibleForTesting
-    static final String KEY_MANAGE_TRUST_AGENTS = "manage_trust_agents";
-    private static final int MY_USER_ID = UserHandle.myUserId();
-
-    private final LockPatternUtils mLockPatternUtils;
-    private TrustAgentManager mTrustAgentManager;
-
-    public ManageTrustAgentsPreferenceController(Context context) {
-        super(context, KEY_MANAGE_TRUST_AGENTS);
-        final SecurityFeatureProvider securityFeatureProvider = FeatureFactory.getFactory(context)
-                .getSecurityFeatureProvider();
-        mLockPatternUtils = securityFeatureProvider.getLockPatternUtils(context);
-        mTrustAgentManager = securityFeatureProvider.getTrustAgentManager();
-    }
-
-    @Override
-    public int getAvailabilityStatus() {
-        return mContext.getResources().getBoolean(R.bool.config_show_manage_trust_agents)
-                ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
-    }
-
-    @Override
-    public void updateState(Preference preference) {
-        final int numberOfTrustAgent = getTrustAgentCount();
-        if (!mLockPatternUtils.isSecure(MY_USER_ID)) {
-            preference.setEnabled(false);
-            preference.setSummary(R.string.disabled_because_no_backup_security);
-        } else if (numberOfTrustAgent > 0) {
-            preference.setEnabled(true);
-            preference.setSummary(mContext.getResources().getQuantityString(
-                    R.plurals.manage_trust_agents_summary_on,
-                    numberOfTrustAgent, numberOfTrustAgent));
-        } else {
-            preference.setEnabled(true);
-            preference.setSummary(R.string.manage_trust_agents_summary);
-        }
-    }
-
-    private int getTrustAgentCount() {
-        return mTrustAgentManager.getActiveTrustAgents(mContext, mLockPatternUtils).size();
-    }
-}
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/security/trustagent/TrustAgentInfo.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/security/trustagent/TrustAgentInfo.java
deleted file mode 100644
index 634935a..0000000
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/security/trustagent/TrustAgentInfo.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * 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.developeroptions.security.trustagent;
-
-import android.content.ComponentName;
-import android.graphics.drawable.Drawable;
-
-public class TrustAgentInfo implements Comparable<TrustAgentInfo> {
-    private final CharSequence mLabel;
-    private final ComponentName mComponentName;
-    private final Drawable mIcon;
-
-    public TrustAgentInfo(CharSequence label, ComponentName componentName, Drawable icon) {
-        mLabel = label;
-        mComponentName = componentName;
-        mIcon = icon;
-    }
-
-    public CharSequence getLabel() {
-        return mLabel;
-    }
-
-    public ComponentName getComponentName() {
-        return mComponentName;
-    }
-
-    public Drawable getIcon() {
-        return mIcon;
-    }
-
-    @Override
-    public boolean equals(Object other) {
-        if (other instanceof TrustAgentInfo) {
-            return mComponentName.equals(((TrustAgentInfo) other).getComponentName());
-        }
-        return false;
-    }
-
-    @Override
-    public int compareTo(TrustAgentInfo other) {
-        return mComponentName.compareTo(other.getComponentName());
-    }
-}
\ No newline at end of file
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/security/trustagent/TrustAgentListPreferenceController.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/security/trustagent/TrustAgentListPreferenceController.java
deleted file mode 100644
index fde9b6c..0000000
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/security/trustagent/TrustAgentListPreferenceController.java
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
- * 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.developeroptions.security.trustagent;
-
-import static com.android.car.developeroptions.security.SecuritySettings.CHANGE_TRUST_AGENT_SETTINGS;
-
-import android.app.Activity;
-import android.content.Context;
-import android.content.Intent;
-import android.os.Bundle;
-import android.os.UserHandle;
-import android.text.TextUtils;
-
-import androidx.annotation.VisibleForTesting;
-import androidx.preference.Preference;
-import androidx.preference.PreferenceCategory;
-import androidx.preference.PreferenceScreen;
-
-import com.android.internal.widget.LockPatternUtils;
-import com.android.car.developeroptions.R;
-import com.android.car.developeroptions.core.PreferenceControllerMixin;
-import com.android.car.developeroptions.overlay.FeatureFactory;
-import com.android.car.developeroptions.password.ChooseLockSettingsHelper;
-import com.android.car.developeroptions.security.SecurityFeatureProvider;
-import com.android.car.developeroptions.security.SecuritySettings;
-import com.android.settingslib.RestrictedPreference;
-import com.android.settingslib.core.AbstractPreferenceController;
-import com.android.settingslib.core.lifecycle.Lifecycle;
-import com.android.settingslib.core.lifecycle.LifecycleObserver;
-import com.android.settingslib.core.lifecycle.events.OnCreate;
-import com.android.settingslib.core.lifecycle.events.OnResume;
-import com.android.settingslib.core.lifecycle.events.OnSaveInstanceState;
-
-import java.util.List;
-
-public class TrustAgentListPreferenceController extends AbstractPreferenceController
-        implements PreferenceControllerMixin, LifecycleObserver, OnSaveInstanceState,
-        OnCreate, OnResume {
-
-    private static final String TRUST_AGENT_CLICK_INTENT = "trust_agent_click_intent";
-    @VisibleForTesting
-    static final String PREF_KEY_TRUST_AGENT = "trust_agent";
-    @VisibleForTesting
-    static final String PREF_KEY_SECURITY_CATEGORY = "security_category";
-    private static final int MY_USER_ID = UserHandle.myUserId();
-
-    private final LockPatternUtils mLockPatternUtils;
-    private final TrustAgentManager mTrustAgentManager;
-    private final SecuritySettings mHost;
-
-    private Intent mTrustAgentClickIntent;
-    private PreferenceCategory mSecurityCategory;
-
-    public TrustAgentListPreferenceController(Context context, SecuritySettings host,
-            Lifecycle lifecycle) {
-        super(context);
-        final SecurityFeatureProvider provider = FeatureFactory.getFactory(context)
-                .getSecurityFeatureProvider();
-        mHost = host;
-        mLockPatternUtils = provider.getLockPatternUtils(context);
-        mTrustAgentManager = provider.getTrustAgentManager();
-        if (lifecycle != null) {
-            lifecycle.addObserver(this);
-        }
-    }
-
-    @Override
-    public boolean isAvailable() {
-        return mContext.getResources().getBoolean(R.bool.config_show_trust_agent_click_intent);
-    }
-
-    @Override
-    public String getPreferenceKey() {
-        return PREF_KEY_TRUST_AGENT;
-    }
-
-    @Override
-    public void displayPreference(PreferenceScreen screen) {
-        super.displayPreference(screen);
-        mSecurityCategory = screen.findPreference(PREF_KEY_SECURITY_CATEGORY);
-        updateTrustAgents();
-    }
-
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        if (savedInstanceState != null
-                && savedInstanceState.containsKey(TRUST_AGENT_CLICK_INTENT)) {
-            mTrustAgentClickIntent = savedInstanceState.getParcelable(TRUST_AGENT_CLICK_INTENT);
-        }
-    }
-
-    @Override
-    public void onSaveInstanceState(Bundle outState) {
-        if (mTrustAgentClickIntent != null) {
-            outState.putParcelable(TRUST_AGENT_CLICK_INTENT, mTrustAgentClickIntent);
-        }
-    }
-
-    @Override
-    public boolean handlePreferenceTreeClick(Preference preference) {
-        if (!TextUtils.equals(preference.getKey(), getPreferenceKey())) {
-            return super.handlePreferenceTreeClick(preference);
-        }
-        final ChooseLockSettingsHelper helper = new ChooseLockSettingsHelper(
-                mHost.getActivity(), mHost);
-        mTrustAgentClickIntent = preference.getIntent();
-        boolean confirmationLaunched = helper.launchConfirmationActivity(
-                CHANGE_TRUST_AGENT_SETTINGS, preference.getTitle());
-
-        if (!confirmationLaunched && mTrustAgentClickIntent != null) {
-            // If this returns false, it means no password confirmation is required.
-            mHost.startActivity(mTrustAgentClickIntent);
-            mTrustAgentClickIntent = null;
-        }
-        return true;
-    }
-
-    @Override
-    public void onResume() {
-        updateTrustAgents();
-    }
-
-    private void updateTrustAgents() {
-        if (mSecurityCategory == null) {
-            return;
-        }
-        // First remove all old trust agents.
-        while (true) {
-            final Preference oldAgent = mSecurityCategory.findPreference(PREF_KEY_TRUST_AGENT);
-            if (oldAgent == null) {
-                break;
-            } else {
-                mSecurityCategory.removePreference(oldAgent);
-            }
-        }
-        // If for some reason the preference is no longer available, don't proceed to add.
-        if (!isAvailable()) {
-            return;
-        }
-        // Then add new ones.
-        final boolean hasSecurity = mLockPatternUtils.isSecure(MY_USER_ID);
-        final List<TrustAgentManager.TrustAgentComponentInfo> agents =
-                mTrustAgentManager.getActiveTrustAgents(mContext, mLockPatternUtils);
-        if (agents == null) {
-            return;
-        }
-        for (TrustAgentManager.TrustAgentComponentInfo agent : agents) {
-            final RestrictedPreference trustAgentPreference =
-                    new RestrictedPreference(mSecurityCategory.getContext());
-            trustAgentPreference.setKey(PREF_KEY_TRUST_AGENT);
-            trustAgentPreference.setTitle(agent.title);
-            trustAgentPreference.setSummary(agent.summary);
-            // Create intent for this preference.
-            trustAgentPreference.setIntent(new Intent(Intent.ACTION_MAIN)
-                    .setComponent(agent.componentName));
-            trustAgentPreference.setDisabledByAdmin(agent.admin);
-            if (!trustAgentPreference.isDisabledByAdmin() && !hasSecurity) {
-                trustAgentPreference.setEnabled(false);
-                trustAgentPreference.setSummary(R.string.disabled_because_no_backup_security);
-            }
-            // Add preference to the settings menu.
-            mSecurityCategory.addPreference(trustAgentPreference);
-        }
-    }
-
-    public boolean handleActivityResult(int requestCode, int resultCode) {
-        if (requestCode == CHANGE_TRUST_AGENT_SETTINGS && resultCode == Activity.RESULT_OK) {
-            if (mTrustAgentClickIntent != null) {
-                mHost.startActivity(mTrustAgentClickIntent);
-                mTrustAgentClickIntent = null;
-            }
-            return true;
-        }
-        return false;
-    }
-}
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/security/trustagent/TrustAgentManager.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/security/trustagent/TrustAgentManager.java
deleted file mode 100644
index 9be291e..0000000
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/security/trustagent/TrustAgentManager.java
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * 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.developeroptions.security.trustagent;
-
-import static android.service.trust.TrustAgentService.TRUST_AGENT_META_DATA;
-
-import android.app.admin.DevicePolicyManager;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
-import android.content.res.Resources;
-import android.content.res.TypedArray;
-import android.content.res.XmlResourceParser;
-import android.os.UserHandle;
-import android.service.trust.TrustAgentService;
-import android.text.TextUtils;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.util.Slog;
-import android.util.Xml;
-
-import androidx.annotation.VisibleForTesting;
-
-import com.android.internal.widget.LockPatternUtils;
-import com.android.settingslib.RestrictedLockUtils;
-import com.android.settingslib.RestrictedLockUtilsInternal;
-
-import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlPullParserException;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-
-/** A manager for trust agent state. */
-public class TrustAgentManager {
-
-    // Only allow one trust agent on the platform.
-    private static final boolean ONLY_ONE_TRUST_AGENT = false;
-
-    public static class TrustAgentComponentInfo {
-        public ComponentName componentName;
-        public String title;
-        public String summary;
-        public RestrictedLockUtils.EnforcedAdmin admin = null;
-    }
-
-    private static final String TAG = "TrustAgentManager";
-    private static final Intent TRUST_AGENT_INTENT =
-            new Intent(TrustAgentService.SERVICE_INTERFACE);
-
-    @VisibleForTesting
-    static final String PERMISSION_PROVIDE_AGENT =
-            android.Manifest.permission.PROVIDE_TRUST_AGENT;
-
-    /**
-     * Determines if the service associated with a resolved trust agent intent is allowed to provide
-     * trust on this device.
-     *
-     * @param resolveInfo The entry corresponding to the matched trust agent intent.
-     * @param pm          The package manager to be used to check for permissions.
-     * @return {@code true} if the associated service is allowed to provide a trust agent, and
-     * {@code false} if otherwise.
-     */
-    public boolean shouldProvideTrust(ResolveInfo resolveInfo, PackageManager pm) {
-        final String packageName = resolveInfo.serviceInfo.packageName;
-        if (pm.checkPermission(PERMISSION_PROVIDE_AGENT, packageName)
-                != PackageManager.PERMISSION_GRANTED) {
-            Log.w(TAG, "Skipping agent because package " + packageName
-                    + " does not have permission " + PERMISSION_PROVIDE_AGENT + ".");
-            return false;
-        }
-        return true;
-    }
-
-    /**
-     * Return the display label for active trust agent.
-     */
-    public CharSequence getActiveTrustAgentLabel(Context context, LockPatternUtils utils) {
-        final List<TrustAgentComponentInfo> agents = getActiveTrustAgents(context, utils);
-        return agents.isEmpty() ? null : agents.get(0).title;
-    }
-
-    /**
-     * Returns a list of trust agents.
-     *
-     * If {@link #ONLY_ONE_TRUST_AGENT} is set, the list will contain up to 1 agent instead of all
-     * available agents on device.
-     */
-    public List<TrustAgentComponentInfo> getActiveTrustAgents(Context context,
-            LockPatternUtils utils) {
-        final int myUserId = UserHandle.myUserId();
-        final DevicePolicyManager dpm = context.getSystemService(DevicePolicyManager.class);
-        final PackageManager pm = context.getPackageManager();
-        final List<TrustAgentComponentInfo> result = new ArrayList<>();
-
-        final List<ResolveInfo> resolveInfos = pm.queryIntentServices(TRUST_AGENT_INTENT,
-                PackageManager.GET_META_DATA);
-        final List<ComponentName> enabledTrustAgents = utils.getEnabledTrustAgents(myUserId);
-        final RestrictedLockUtils.EnforcedAdmin admin = RestrictedLockUtilsInternal
-                .checkIfKeyguardFeaturesDisabled(
-                        context, DevicePolicyManager.KEYGUARD_DISABLE_TRUST_AGENTS, myUserId);
-
-        if (enabledTrustAgents != null && !enabledTrustAgents.isEmpty()) {
-            for (ResolveInfo resolveInfo : resolveInfos) {
-                if (resolveInfo.serviceInfo == null || !shouldProvideTrust(resolveInfo, pm)) {
-                    continue;
-                }
-                final TrustAgentComponentInfo trustAgentComponentInfo =
-                        getSettingsComponent(pm, resolveInfo);
-                if (trustAgentComponentInfo.componentName == null ||
-                        !enabledTrustAgents.contains(getComponentName(resolveInfo)) ||
-                        TextUtils.isEmpty(trustAgentComponentInfo.title)) {
-                    continue;
-                }
-                if (admin != null && dpm.getTrustAgentConfiguration(
-                        null, getComponentName(resolveInfo)) == null) {
-                    trustAgentComponentInfo.admin = admin;
-                }
-                result.add(trustAgentComponentInfo);
-                if (ONLY_ONE_TRUST_AGENT) {
-                    break;
-                }
-            }
-        }
-        return result;
-    }
-
-    public ComponentName getComponentName(ResolveInfo resolveInfo) {
-        if (resolveInfo == null || resolveInfo.serviceInfo == null) return null;
-        return new ComponentName(resolveInfo.serviceInfo.packageName, resolveInfo.serviceInfo.name);
-    }
-
-    private TrustAgentComponentInfo getSettingsComponent(PackageManager pm,
-            ResolveInfo resolveInfo) {
-        if (resolveInfo == null || resolveInfo.serviceInfo == null
-                || resolveInfo.serviceInfo.metaData == null) {
-            return null;
-        }
-        String cn = null;
-        TrustAgentComponentInfo trustAgentComponentInfo = new TrustAgentComponentInfo();
-        XmlResourceParser parser = null;
-        Exception caughtException = null;
-        try {
-            parser = resolveInfo.serviceInfo.loadXmlMetaData(pm, TRUST_AGENT_META_DATA);
-            if (parser == null) {
-                Slog.w(TAG, "Can't find " + TRUST_AGENT_META_DATA + " meta-data");
-                return null;
-            }
-            Resources res = pm.getResourcesForApplication(resolveInfo.serviceInfo.applicationInfo);
-            AttributeSet attrs = Xml.asAttributeSet(parser);
-            int type;
-            while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
-                    && type != XmlPullParser.START_TAG) {
-            }
-            String nodeName = parser.getName();
-            if (!"trust-agent".equals(nodeName)) {
-                Slog.w(TAG, "Meta-data does not start with trust-agent tag");
-                return null;
-            }
-            TypedArray sa =
-                    res.obtainAttributes(attrs, com.android.internal.R.styleable.TrustAgent);
-            trustAgentComponentInfo.summary =
-                    sa.getString(com.android.internal.R.styleable.TrustAgent_summary);
-            trustAgentComponentInfo.title =
-                    sa.getString(com.android.internal.R.styleable.TrustAgent_title);
-            cn = sa.getString(com.android.internal.R.styleable.TrustAgent_settingsActivity);
-            sa.recycle();
-        } catch (PackageManager.NameNotFoundException e) {
-            caughtException = e;
-        } catch (IOException e) {
-            caughtException = e;
-        } catch (XmlPullParserException e) {
-            caughtException = e;
-        } finally {
-            if (parser != null) parser.close();
-        }
-        if (caughtException != null) {
-            Slog.w(TAG, "Error parsing : " + resolveInfo.serviceInfo.packageName, caughtException);
-            return null;
-        }
-        if (cn != null && cn.indexOf('/') < 0) {
-            cn = resolveInfo.serviceInfo.packageName + "/" + cn;
-        }
-        trustAgentComponentInfo.componentName =
-                (cn == null) ? null : ComponentName.unflattenFromString(cn);
-        return trustAgentComponentInfo;
-    }
-}
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/security/trustagent/TrustAgentSettings.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/security/trustagent/TrustAgentSettings.java
deleted file mode 100644
index b861741..0000000
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/security/trustagent/TrustAgentSettings.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * 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.developeroptions.security.trustagent;
-
-import android.app.settings.SettingsEnums;
-import android.content.Context;
-import android.provider.SearchIndexableResource;
-
-import com.android.car.developeroptions.R;
-import com.android.car.developeroptions.dashboard.DashboardFragment;
-import com.android.car.developeroptions.search.BaseSearchIndexProvider;
-import com.android.car.developeroptions.search.Indexable;
-import com.android.settingslib.search.SearchIndexable;
-
-import java.util.ArrayList;
-import java.util.List;
-
-@SearchIndexable
-public class TrustAgentSettings extends DashboardFragment {
-    private static final String TAG = "TrustAgentSettings";
-
-    @Override
-    public int getMetricsCategory() {
-        return SettingsEnums.TRUST_AGENT;
-    }
-
-    @Override
-    public int getHelpResource() {
-        return R.string.help_url_trust_agent;
-    }
-
-    @Override
-    protected String getLogTag() {
-        return TAG;
-    }
-
-    @Override
-    protected int getPreferenceScreenResId() {
-        return R.xml.trust_agent_settings;
-    }
-
-    public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
-            new BaseSearchIndexProvider() {
-                @Override
-                public List<SearchIndexableResource> getXmlResourcesToIndex(
-                        Context context, boolean enabled) {
-                    final List<SearchIndexableResource> result = new ArrayList<>();
-                    final SearchIndexableResource sir = new SearchIndexableResource(context);
-                    sir.xmlResId = R.xml.trust_agent_settings;
-                    result.add(sir);
-                    return result;
-                }
-            };
-}
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/security/trustagent/TrustAgentsPreferenceController.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/security/trustagent/TrustAgentsPreferenceController.java
deleted file mode 100644
index 926436b..0000000
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/security/trustagent/TrustAgentsPreferenceController.java
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- * 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.developeroptions.security.trustagent;
-
-import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
-
-import android.app.admin.DevicePolicyManager;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
-import android.graphics.drawable.Drawable;
-import android.os.UserHandle;
-import android.service.trust.TrustAgentService;
-import android.text.TextUtils;
-import android.util.ArrayMap;
-import android.util.ArraySet;
-import android.util.IconDrawableFactory;
-
-import androidx.preference.Preference;
-import androidx.preference.PreferenceScreen;
-import androidx.preference.SwitchPreference;
-
-import com.android.internal.widget.LockPatternUtils;
-import com.android.car.developeroptions.core.BasePreferenceController;
-import com.android.car.developeroptions.overlay.FeatureFactory;
-import com.android.car.developeroptions.security.SecurityFeatureProvider;
-import com.android.settingslib.RestrictedLockUtilsInternal;
-import com.android.settingslib.RestrictedSwitchPreference;
-import com.android.settingslib.core.lifecycle.LifecycleObserver;
-import com.android.settingslib.core.lifecycle.events.OnStart;
-
-import java.util.List;
-
-public class TrustAgentsPreferenceController extends BasePreferenceController
-        implements Preference.OnPreferenceChangeListener, LifecycleObserver, OnStart {
-
-    private static final Intent TRUST_AGENT_INTENT =
-            new Intent(TrustAgentService.SERVICE_INTERFACE);
-
-    private final ArrayMap<ComponentName, TrustAgentInfo> mAvailableAgents;
-    private final ArraySet<ComponentName> mActiveAgents;
-    private final DevicePolicyManager mDevicePolicyManager;
-    private final IconDrawableFactory mIconDrawableFactory;
-    private final LockPatternUtils mLockPatternUtils;
-    private final PackageManager mPackageManager;
-    private final TrustAgentManager mTrustAgentManager;
-
-    private PreferenceScreen mScreen;
-
-    public TrustAgentsPreferenceController(Context context, String key) {
-        super(context, key);
-        mAvailableAgents = new ArrayMap<>();
-        mActiveAgents = new ArraySet<>();
-        mDevicePolicyManager = context.getSystemService(DevicePolicyManager.class);
-        mIconDrawableFactory = IconDrawableFactory.newInstance(context);
-        final SecurityFeatureProvider securityFeatureProvider =
-                FeatureFactory.getFactory(context).getSecurityFeatureProvider();
-        mTrustAgentManager = securityFeatureProvider.getTrustAgentManager();
-        mLockPatternUtils = securityFeatureProvider.getLockPatternUtils(context);
-        mPackageManager = context.getPackageManager();
-    }
-
-    @Override
-    public void displayPreference(PreferenceScreen screen) {
-        super.displayPreference(screen);
-        mScreen = screen;
-    }
-
-    @Override
-    public int getAvailabilityStatus() {
-        return AVAILABLE;
-    }
-
-    @Override
-    public void onStart() {
-        updateAgents();
-    }
-
-    private void updateAgents() {
-        findAvailableTrustAgents();
-        loadActiveAgents();
-        removeUselessExistingPreferences();
-
-        final EnforcedAdmin admin = RestrictedLockUtilsInternal.checkIfKeyguardFeaturesDisabled(
-                mContext, DevicePolicyManager.KEYGUARD_DISABLE_TRUST_AGENTS, UserHandle.myUserId());
-
-        for (TrustAgentInfo agent : mAvailableAgents.values()) {
-            final ComponentName componentName = agent.getComponentName();
-            RestrictedSwitchPreference preference = (RestrictedSwitchPreference)
-                    mScreen.findPreference(componentName.flattenToString());
-            if (preference == null) {
-                preference = new RestrictedSwitchPreference(mScreen.getContext());
-            }
-            preference.setKey(componentName.flattenToString());
-            preference.useAdminDisabledSummary(true);
-            preference.setTitle(agent.getLabel());
-            preference.setIcon(agent.getIcon());
-            preference.setOnPreferenceChangeListener(this);
-            preference.setChecked(mActiveAgents.contains(componentName));
-            if (admin != null && mDevicePolicyManager.getTrustAgentConfiguration(null /* admin */,
-                    componentName) == null) {
-                preference.setChecked(false);
-                preference.setDisabledByAdmin(admin);
-            }
-            mScreen.addPreference(preference);
-        }
-    }
-
-    private void loadActiveAgents() {
-        final List<ComponentName> activeTrustAgents = mLockPatternUtils.getEnabledTrustAgents(
-                UserHandle.myUserId());
-        if (activeTrustAgents != null) {
-            mActiveAgents.addAll(activeTrustAgents);
-        }
-    }
-
-    private void saveActiveAgents() {
-        mLockPatternUtils.setEnabledTrustAgents(mActiveAgents, UserHandle.myUserId());
-    }
-
-    private void findAvailableTrustAgents() {
-        final List<ResolveInfo> resolveInfos = mPackageManager.queryIntentServices(
-                TRUST_AGENT_INTENT, PackageManager.GET_META_DATA);
-        mAvailableAgents.clear();
-        for (ResolveInfo resolveInfo : resolveInfos) {
-            if (resolveInfo.serviceInfo == null) {
-                continue;
-            }
-            if (!mTrustAgentManager.shouldProvideTrust(resolveInfo, mPackageManager)) {
-                continue;
-            }
-            final CharSequence label = resolveInfo.loadLabel(mPackageManager);
-            final ComponentName componentName = mTrustAgentManager.getComponentName(resolveInfo);
-            final Drawable icon = mIconDrawableFactory.getBadgedIcon(
-                    resolveInfo.getComponentInfo().applicationInfo);
-            final TrustAgentInfo agentInfo = new TrustAgentInfo(label, componentName, icon);
-            mAvailableAgents.put(componentName, agentInfo);
-        }
-    }
-
-    private void removeUselessExistingPreferences() {
-        final int count = mScreen.getPreferenceCount();
-        if (count <= 0) {
-            return;
-        }
-        for (int i = count - 1; i >= 0; i--) {
-            final Preference pref = mScreen.getPreference(i);
-            final String[] names = TextUtils.split(pref.getKey(), "/");
-            final ComponentName componentName = new ComponentName(names[0], names[1]);
-            if (!mAvailableAgents.containsKey(componentName)) {
-                mScreen.removePreference(pref);
-                mActiveAgents.remove(componentName);
-            }
-        }
-    }
-
-    @Override
-    public boolean onPreferenceChange(Preference preference, Object newValue) {
-        if (!(preference instanceof SwitchPreference)) {
-            return false;
-        }
-        for (TrustAgentInfo agent : mAvailableAgents.values()) {
-            final ComponentName componentName = agent.getComponentName();
-            if (!TextUtils.equals(preference.getKey(), componentName.flattenToString())) {
-                continue;
-            }
-            if ((Boolean) newValue && !mActiveAgents.contains(componentName)) {
-                mActiveAgents.add(componentName);
-            } else {
-                mActiveAgents.remove(componentName);
-            }
-            saveActiveAgents();
-            return true;
-        }
-        return false;
-    }
-}
diff --git a/tests/DirectRenderingClusterSample/Android.mk b/tests/DirectRenderingClusterSample/Android.mk
deleted file mode 100644
index aca5a75..0000000
--- a/tests/DirectRenderingClusterSample/Android.mk
+++ /dev/null
@@ -1,54 +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.
-#
-#
-LOCAL_PATH:= $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-LOCAL_PACKAGE_NAME := DirectRenderingClusterSample
-LOCAL_PRIVATE_PLATFORM_APIS := true
-
-# Each update should be signed by OEMs
-LOCAL_CERTIFICATE := platform
-LOCAL_PRIVILEGED_MODULE := true
-
-LOCAL_PROGUARD_FLAG_FILES := proguard.flags
-LOCAL_PROGUARD_ENABLED := disabled
-
-LOCAL_USE_AAPT2 := true
-
-LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
-
-LOCAL_JAVA_LIBRARIES += android.car
-LOCAL_STATIC_ANDROID_LIBRARIES += \
-    androidx.legacy_legacy-support-v4 \
-    androidx-constraintlayout_constraintlayout \
-    androidx.car_car-cluster \
-    car-arch-common \
-    car-media-common \
-    car-telephony-common \
-    car-apps-common
-
-LOCAL_REQUIRED_MODULES := privapp_whitelist_android.car.cluster.sample
-
-include $(BUILD_PACKAGE)
-
-# Use the following include to make our test apk.
-ifeq (,$(ONE_SHOT_MAKEFILE))
-include $(call all-makefiles-under,$(LOCAL_PATH))
-endif
-
diff --git a/tests/DirectRenderingClusterSample/AndroidManifest.xml b/tests/DirectRenderingClusterSample/AndroidManifest.xml
deleted file mode 100644
index 12c6bba..0000000
--- a/tests/DirectRenderingClusterSample/AndroidManifest.xml
+++ /dev/null
@@ -1,68 +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"
-    xmlns:tools="http://schemas.android.com/tools"
-    package="android.car.cluster.sample"
-    android:sharedUserId="android.uid.system">
-
-    <uses-sdk android:targetSdkVersion="25" android:minSdkVersion="25"/>
-
-    <!-- We set TYPE_SYSTEM_ALERT window flag to presentation in order
-         to show it outside of activity context -->
-    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
-    <uses-permission android:name="android.permission.CONTROL_INCALL_EXPERIENCE"/>
-    <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"
-        tools:ignore="ProtectedPermissions"/>
-    <uses-permission android:name="android.permission.MANAGE_ACTIVITY_STACKS"/>
-    <uses-permission android:name="android.permission.INJECT_EVENTS"/>
-    <uses-permission android:name="android.permission.INTERNET" />
-    <uses-permission android:name="android.permission.INTERNAL_SYSTEM_WINDOW"/>
-    <!-- Required by 'singleUser' service attribute -->
-    <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS"/>
-    <!-- Required by 'startActivityAsUser' -->
-    <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL"/>
-    <!-- Required to detect the current user in the device -->
-    <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=".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:showForAllUsers="true"
-            android:theme="@style/Theme.ClusterTheme">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN"/>
-                <category android:name="android.intent.category.DEFAULT"/>
-            </intent-filter>
-        </activity>
-    </application>
-</manifest>
diff --git a/tests/DirectRenderingClusterSample/res/color/icon_color.xml b/tests/DirectRenderingClusterSample/res/color/icon_color.xml
deleted file mode 100644
index 1ce35ee..0000000
--- a/tests/DirectRenderingClusterSample/res/color/icon_color.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?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-hdpi/ic_car_info.png b/tests/DirectRenderingClusterSample/res/drawable-hdpi/ic_car_info.png
deleted file mode 100644
index adb07d6..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable-hdpi/ic_car_info.png
+++ /dev/null
Binary files differ
diff --git a/tests/DirectRenderingClusterSample/res/drawable-hdpi/ic_music.png b/tests/DirectRenderingClusterSample/res/drawable-hdpi/ic_music.png
deleted file mode 100644
index f1b2533..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable-hdpi/ic_music.png
+++ /dev/null
Binary files differ
diff --git a/tests/DirectRenderingClusterSample/res/drawable-hdpi/ic_nav.png b/tests/DirectRenderingClusterSample/res/drawable-hdpi/ic_nav.png
deleted file mode 100644
index 8036b89..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable-hdpi/ic_nav.png
+++ /dev/null
Binary files differ
diff --git a/tests/DirectRenderingClusterSample/res/drawable-hdpi/ic_phone.png b/tests/DirectRenderingClusterSample/res/drawable-hdpi/ic_phone.png
deleted file mode 100644
index 2daaa8e..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable-hdpi/ic_phone.png
+++ /dev/null
Binary files differ
diff --git a/tests/DirectRenderingClusterSample/res/drawable-mdpi/ic_car_info.png b/tests/DirectRenderingClusterSample/res/drawable-mdpi/ic_car_info.png
deleted file mode 100644
index 9c45d3e..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable-mdpi/ic_car_info.png
+++ /dev/null
Binary files differ
diff --git a/tests/DirectRenderingClusterSample/res/drawable-mdpi/ic_music.png b/tests/DirectRenderingClusterSample/res/drawable-mdpi/ic_music.png
deleted file mode 100644
index fb0671a..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable-mdpi/ic_music.png
+++ /dev/null
Binary files differ
diff --git a/tests/DirectRenderingClusterSample/res/drawable-mdpi/ic_nav.png b/tests/DirectRenderingClusterSample/res/drawable-mdpi/ic_nav.png
deleted file mode 100644
index 4844c89..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable-mdpi/ic_nav.png
+++ /dev/null
Binary files differ
diff --git a/tests/DirectRenderingClusterSample/res/drawable-mdpi/ic_phone.png b/tests/DirectRenderingClusterSample/res/drawable-mdpi/ic_phone.png
deleted file mode 100644
index ef50db6..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable-mdpi/ic_phone.png
+++ /dev/null
Binary files differ
diff --git a/tests/DirectRenderingClusterSample/res/drawable-xhdpi/ic_car_info.png b/tests/DirectRenderingClusterSample/res/drawable-xhdpi/ic_car_info.png
deleted file mode 100644
index 2db5645..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable-xhdpi/ic_car_info.png
+++ /dev/null
Binary files differ
diff --git a/tests/DirectRenderingClusterSample/res/drawable-xhdpi/ic_music.png b/tests/DirectRenderingClusterSample/res/drawable-xhdpi/ic_music.png
deleted file mode 100644
index 6154079..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable-xhdpi/ic_music.png
+++ /dev/null
Binary files differ
diff --git a/tests/DirectRenderingClusterSample/res/drawable-xhdpi/ic_nav.png b/tests/DirectRenderingClusterSample/res/drawable-xhdpi/ic_nav.png
deleted file mode 100644
index f94db1e..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable-xhdpi/ic_nav.png
+++ /dev/null
Binary files differ
diff --git a/tests/DirectRenderingClusterSample/res/drawable-xhdpi/ic_phone.png b/tests/DirectRenderingClusterSample/res/drawable-xhdpi/ic_phone.png
deleted file mode 100644
index ca0be39..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable-xhdpi/ic_phone.png
+++ /dev/null
Binary files differ
diff --git a/tests/DirectRenderingClusterSample/res/drawable-xxhdpi/ic_car_info.png b/tests/DirectRenderingClusterSample/res/drawable-xxhdpi/ic_car_info.png
deleted file mode 100644
index f00be30..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable-xxhdpi/ic_car_info.png
+++ /dev/null
Binary files differ
diff --git a/tests/DirectRenderingClusterSample/res/drawable-xxhdpi/ic_music.png b/tests/DirectRenderingClusterSample/res/drawable-xxhdpi/ic_music.png
deleted file mode 100644
index 8a875ad..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable-xxhdpi/ic_music.png
+++ /dev/null
Binary files differ
diff --git a/tests/DirectRenderingClusterSample/res/drawable-xxhdpi/ic_nav.png b/tests/DirectRenderingClusterSample/res/drawable-xxhdpi/ic_nav.png
deleted file mode 100644
index 7b2b514..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable-xxhdpi/ic_nav.png
+++ /dev/null
Binary files differ
diff --git a/tests/DirectRenderingClusterSample/res/drawable-xxhdpi/ic_phone.png b/tests/DirectRenderingClusterSample/res/drawable-xxhdpi/ic_phone.png
deleted file mode 100644
index fce6fb7..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable-xxhdpi/ic_phone.png
+++ /dev/null
Binary files differ
diff --git a/tests/DirectRenderingClusterSample/res/drawable/car_top_view.png b/tests/DirectRenderingClusterSample/res/drawable/car_top_view.png
deleted file mode 100644
index b19ee12..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/car_top_view.png
+++ /dev/null
Binary files differ
diff --git a/tests/DirectRenderingClusterSample/res/drawable/direction_arrive.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_arrive.xml
deleted file mode 100644
index c83d9f0..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_arrive.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<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
deleted file mode 100644
index 3eba85d..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_arrive_left.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<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
deleted file mode 100644
index 0401e8c..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_arrive_right.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<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
deleted file mode 100644
index c83d9f0..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_arrive_straight.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<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
deleted file mode 100644
index c531094..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_close.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<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
deleted file mode 100644
index 231dac0..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_continue.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<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
deleted file mode 100644
index faa7027..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_continue_left.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<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
deleted file mode 100644
index 6ef4749..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_continue_right.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<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
deleted file mode 100644
index 46c2408..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_depart.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<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
deleted file mode 100644
index 8ca9ced..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_fork_left.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<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
deleted file mode 100644
index 9953608..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_fork_right.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<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
deleted file mode 100644
index b8954b8..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_merge_left.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<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
deleted file mode 100644
index ab89d03..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_merge_right.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<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
deleted file mode 100644
index 231dac0..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_new_name_straight.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<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
deleted file mode 100644
index 536fd22..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_off_ramp_left.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<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
deleted file mode 100644
index 3048587..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_off_ramp_right.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<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
deleted file mode 100644
index 91ffc9c..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_off_ramp_slight_left.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<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
deleted file mode 100644
index b549937..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_off_ramp_slight_right.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<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
deleted file mode 100644
index 65e66e2..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_on_ramp_left.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<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
deleted file mode 100644
index 1647927..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_on_ramp_right.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<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
deleted file mode 100644
index 83b821a..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_on_ramp_sharp_left.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<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
deleted file mode 100644
index 3394364..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_on_ramp_sharp_right.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<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
deleted file mode 100644
index 385a519..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_on_ramp_slight_left.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<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
deleted file mode 100644
index 2ee993c..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_on_ramp_slight_right.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<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
deleted file mode 100644
index 5504491..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<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_ccw_left.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_ccw_left.xml
deleted file mode 100644
index e3337c5..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_ccw_left.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<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_ccw_right.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_ccw_right.xml
deleted file mode 100644
index c4e3de7..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_ccw_right.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<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_ccw_sharp_left.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_ccw_sharp_left.xml
deleted file mode 100644
index f6b3999..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_ccw_sharp_left.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<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_ccw_sharp_right.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_ccw_sharp_right.xml
deleted file mode 100644
index 820ddf3..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_ccw_sharp_right.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<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_ccw_slight_left.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_ccw_slight_left.xml
deleted file mode 100644
index 7891bd7..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_ccw_slight_left.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<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_ccw_slight_right.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_ccw_slight_right.xml
deleted file mode 100644
index 028dc9f..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_ccw_slight_right.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<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_ccw_straight.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_ccw_straight.xml
deleted file mode 100644
index 301ce6c..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_ccw_straight.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<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_roundabout_cw.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_cw.xml
deleted file mode 100644
index fe948fc..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_cw.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp"
-        android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
-    <group android:pivotX="10" android:scaleX="-1">
-        <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"/>
-    </group>
-</vector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_cw_left.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_cw_left.xml
deleted file mode 100644
index 038da24..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_cw_left.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp"
-        android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
-    <group android:pivotX="10" android:scaleX="-1">
-        <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"/>
-    </group>
-</vector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_cw_right.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_cw_right.xml
deleted file mode 100644
index a96201d..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_cw_right.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp"
-        android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
-    <group android:pivotX="10" android:scaleX="-1">
-        <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"/>
-    </group>
-</vector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_cw_sharp_left.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_cw_sharp_left.xml
deleted file mode 100644
index da060af..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_cw_sharp_left.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp"
-        android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
-    <group android:pivotX="10" android:scaleX="-1">
-        <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"/>
-    </group>
-</vector>
diff --git a/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_cw_sharp_right.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_cw_sharp_right.xml
deleted file mode 100644
index 91165f8..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_cw_sharp_right.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp"
-        android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
-    <group android:pivotX="10" android:scaleX="-1">
-        <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"/>
-    </group>
-</vector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_cw_slight_left.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_cw_slight_left.xml
deleted file mode 100644
index 6bdd564..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_cw_slight_left.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp"
-        android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
-    <group android:pivotX="10" android:scaleX="-1">
-        <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"/>
-    </group>
-</vector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_cw_slight_right.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_cw_slight_right.xml
deleted file mode 100644
index 00c0fa5..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_cw_slight_right.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp"
-        android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
-    <group android:pivotX="10" android:scaleX="-1">
-        <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"/>
-    </group>
-</vector>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_cw_straight.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_cw_straight.xml
deleted file mode 100644
index 0961145..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_roundabout_cw_straight.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="20dp"
-        android:height="20dp" android:viewportWidth="20" android:viewportHeight="20">
-    <group android:pivotX="10" android:scaleX="-1">
-        <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"/>
-    </group>
-</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
deleted file mode 100644
index faa7027..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_turn_left.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<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
deleted file mode 100644
index 6ef4749..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_turn_right.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<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
deleted file mode 100644
index 9024be2..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_turn_sharp_left.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<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
deleted file mode 100644
index 3394364..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_turn_sharp_right.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<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
deleted file mode 100644
index 431736f..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_turn_slight_left.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<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
deleted file mode 100644
index 0ab8aef..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_turn_slight_right.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<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_left.xml b/tests/DirectRenderingClusterSample/res/drawable/direction_uturn_left.xml
deleted file mode 100644
index bfb9e0c..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_uturn_left.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<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
deleted file mode 100644
index 8fc9223..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/direction_uturn_right.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<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
deleted file mode 100644
index 9ded30c..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/focused_button_shape.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<shape xmlns:android="http://schemas.android.com/apk/res/android">
-    <stroke
-        android:width="2dp"
-        android:color="#333333"/>
-    <corners
-        android:radius="7dp"/>
-    <padding
-        android:left="5dp"
-        android:top="5dp"
-        android:right="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
deleted file mode 100644
index 8006864..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/gradient_bottom.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?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
deleted file mode 100644
index 74932ad..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/gradient_top.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?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/seekbar_background.xml b/tests/DirectRenderingClusterSample/res/drawable/seekbar_background.xml
deleted file mode 100644
index ec08455..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/seekbar_background.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Copyright 2016, The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT 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:id="@android:id/background">
-        <shape android:shape="line">
-            <stroke android:width="@dimen/playback_seekbar_track_height"/>
-        </shape>
-    </item>
-
-    <item android:id="@android:id/progress">
-        <clip>
-            <shape android:shape="line">
-                <stroke android:width="@dimen/playback_seekbar_track_height"/>
-            </shape>
-        </clip>
-    </item>
-
-</layer-list>
diff --git a/tests/DirectRenderingClusterSample/res/drawable/seekbar_thumb.xml b/tests/DirectRenderingClusterSample/res/drawable/seekbar_thumb.xml
deleted file mode 100644
index 1d0b4a1..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/seekbar_thumb.xml
+++ /dev/null
@@ -1,23 +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.
--->
-<shape xmlns:android="http://schemas.android.com/apk/res/android"
-    android:shape="oval">
-    <solid android:color="@color/progress_bar_thumb_color"/>
-    <size
-        android:width="@dimen/playback_seekbar_thumb_width"
-        android:height="@dimen/playback_seekbar_thumb_height"/>
-</shape>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/drawable/speedometer.xml b/tests/DirectRenderingClusterSample/res/drawable/speedometer.xml
deleted file mode 100644
index d97c54e..0000000
--- a/tests/DirectRenderingClusterSample/res/drawable/speedometer.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?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
deleted file mode 100644
index fa8db14..0000000
--- a/tests/DirectRenderingClusterSample/res/layout/activity_main.xml
+++ /dev/null
@@ -1,237 +0,0 @@
-<?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:id="@+id/activity_main"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:background="@android:color/background_dark"
-    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: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_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:orientation="vertical"
-            android:gravity="start">
-
-            <TextView
-                android:layout_height="wrap_content"
-                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/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>
-
-    <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_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_car_info.xml b/tests/DirectRenderingClusterSample/res/layout/fragment_car_info.xml
deleted file mode 100644
index 3a1f5ab..0000000
--- a/tests/DirectRenderingClusterSample/res/layout/fragment_car_info.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    tools:context="com.google.experiments.client.pavelm.fakeclusterux.CarInfoFragment">
-
-    <TextView
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="32 psi"
-        android:layout_gravity="center_horizontal"
-        android:layout_marginLeft="-80dp"
-        />
-
-    <TextView
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="33 psi"
-        android:layout_gravity="center_horizontal"
-        android:layout_marginLeft="80dp"
-        />
-
-    <TextView
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="33 psi"
-        android:layout_gravity="center_horizontal|bottom"
-        android:layout_marginLeft="80dp"
-        />
-
-    <TextView
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="31 psi"
-        android:layout_gravity="center_horizontal|bottom"
-        android:layout_marginLeft="-80dp"
-        />
-
-    <ImageView
-        android:layout_width="fill_parent"
-        android:layout_height="fill_parent"
-        android:src="@drawable/car_top_view"
-        android:padding="30dp"
-        android:scaleType="fitCenter" />
-
-</FrameLayout>
diff --git a/tests/DirectRenderingClusterSample/res/layout/fragment_music.xml b/tests/DirectRenderingClusterSample/res/layout/fragment_music.xml
deleted file mode 100644
index f9c72f7..0000000
--- a/tests/DirectRenderingClusterSample/res/layout/fragment_music.xml
+++ /dev/null
@@ -1,112 +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.
--->
-<androidx.cardview.widget.CardView
-    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_height="match_parent"
-    android:layout_width="match_parent"
-    app:cardElevation="0dp"
-    app:cardCornerRadius="6dp">
-
-    <com.android.car.apps.common.CrossfadeImageView
-        android:id="@+id/album_background"
-        android:foreground="?android:attr/selectableItemBackground"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:scaleType="fitStart" />
-
-    <View
-        android:id="@+id/playback_scrim"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:background="@color/album_art_scrim"
-        android:alpha="@dimen/album_art_scrim_alpha"/>
-
-    <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/playback_container"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent">
-
-        <TextView
-            android:id="@+id/app_name"
-            android:layout_width="0dp"
-            android:layout_height="wrap_content"
-            android:layout_marginTop="@dimen/playback_fragment_text_margin_top"
-            android:layout_marginLeft="@dimen/playback_fragment_text_margin_x"
-            android:layout_marginRight="@dimen/playback_fragment_text_margin_x"
-            android:textAppearance="?android:attr/textAppearanceMedium"
-            android:ellipsize="end"
-            android:maxLines="1"
-            android:includeFontPadding="false"
-            app:layout_constraintLeft_toLeftOf="parent"
-            app:layout_constraintRight_toRightOf="parent"
-            app:layout_constraintTop_toTopOf="parent"/>
-
-        <androidx.constraintlayout.widget.Guideline
-            android:id="@+id/margin_start"
-            android:layout_width="0dp"
-            android:layout_height="0dp"
-            android:orientation="vertical"
-            app:layout_constraintGuide_begin="@dimen/fragment_playback_guide_margin_x"/>
-
-        <androidx.constraintlayout.widget.Guideline
-            android:id="@+id/margin_end"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:orientation="vertical"
-            app:layout_constraintGuide_end="@dimen/fragment_playback_guide_margin_x"/>
-
-        <androidx.constraintlayout.widget.Guideline
-            android:id="@+id/margin_top"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:orientation="horizontal"
-            app:layout_constraintGuide_begin="@dimen/fragment_playback_guide_margin_top"/>
-
-        <ImageView
-            android:id="@+id/album_art"
-            android:layout_width="@dimen/playback_album_art_size_normal"
-            android:layout_height="@dimen/playback_album_art_size_normal"
-            android:layout_marginStart="@dimen/fragment_metadata_art_margin_start"
-            android:layout_marginEnd="@dimen/fragment_metadata_art_margin_end"
-            android:contentDescription="@string/album_art"
-            android:background="@color/album_art_background"
-            android:scaleType="centerCrop"
-            android:transitionName="@string/album_art"
-            app:layout_constraintTop_toTopOf="@+id/app_name"
-            app:layout_constraintBottom_toBottomOf="parent"
-            app:layout_constraintStart_toStartOf="@+id/margin_start"
-            tools:src="@drawable/ic_person"/>
-
-        <include
-            android:id="@+id/metadata_subcontainer"
-            layout="@layout/metadata_normal"
-            android:layout_width="0dp"
-            android:layout_height="wrap_content"
-            android:layout_marginStart="@dimen/fragment_metadata_metadata_margin_start"
-            android:layout_marginEnd="@dimen/fragment_metadata_metadata_margin_end"
-            app:layout_constraintBottom_toBottomOf="@+id/album_art"
-            app:layout_constraintEnd_toEndOf="@+id/margin_end"
-            app:layout_constraintStart_toEndOf="@+id/album_art"
-            app:layout_constraintTop_toTopOf="@+id/album_art"/>
-
-    </androidx.constraintlayout.widget.ConstraintLayout>
-
-</androidx.cardview.widget.CardView>
diff --git a/tests/DirectRenderingClusterSample/res/layout/fragment_navigation.xml b/tests/DirectRenderingClusterSample/res/layout/fragment_navigation.xml
deleted file mode 100644
index 54894c2..0000000
--- a/tests/DirectRenderingClusterSample/res/layout/fragment_navigation.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?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"
-    tools:context=".NavigationFragment">
-
-    <SurfaceView
-        android:id="@+id/nav_surface"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"/>
-
-    <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"/>
-
-    <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"/>
-
-    <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/fragment_phone.xml b/tests/DirectRenderingClusterSample/res/layout/fragment_phone.xml
deleted file mode 100644
index b7f903b..0000000
--- a/tests/DirectRenderingClusterSample/res/layout/fragment_phone.xml
+++ /dev/null
@@ -1,61 +0,0 @@
-<?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">
-
-    <FrameLayout
-        android:id="@+id/user_profile_container"
-        android:layout_width="match_parent"
-        android:gravity="center"
-        android:layout_height="0dp"
-        android:layout_weight="1">
-
-        <LinearLayout
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:gravity="center"
-            android:orientation="vertical">
-            <ImageView
-                android:id="@+id/avatar"
-                android:layout_width="@dimen/large_avatar_icon_size"
-                android:layout_height="@dimen/large_avatar_icon_size"
-                android:layout_gravity="center"
-                android:scaleType="fitCenter" />
-            <TextView
-                android:id="@+id/title"
-                android:textAppearance="?android:attr/textAppearanceLarge"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:paddingTop="@dimen/user_profile_title_padding_top"
-                android:focusable="true"
-                android:maxLines="1"
-                android:gravity="center"/>
-            <TextView
-                android:id="@+id/body"
-                android:textAppearance="?android:attr/textAppearanceSmall"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:paddingTop="@dimen/user_profile_body_padding_top"
-                android:gravity="center"
-                android:maxLines="1"/>
-        </LinearLayout>
-
-    </FrameLayout>
-
-</LinearLayout>
\ 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
deleted file mode 100644
index 8f1196a..0000000
--- a/tests/DirectRenderingClusterSample/res/layout/include_navigation_state.xml
+++ /dev/null
@@ -1,86 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-              android:layout_width="match_parent"
-              android:layout_height="match_parent"
-              android:orientation="horizontal">
-
-    <LinearLayout
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:orientation="vertical">
-
-        <ImageView
-            android:id="@+id/maneuver"
-            android:layout_width="@dimen/maneuver_width"
-            android:layout_height="@dimen/maneuver_height"
-            android:layout_marginLeft="@dimen/maneuver_margin"
-            android:layout_marginRight="@dimen/maneuver_margin"
-            android:tint="@android:color/white"/>
-        <ImageView
-            android:id="@+id/provided_maneuver"
-            android:layout_width="@dimen/provided_maneuver_width"
-            android:layout_height="@dimen/provided_maneuver_height"
-            android:layout_gravity="center"/>
-    </LinearLayout>
-
-    <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:orientation="vertical">
-
-        <LinearLayout
-            android:layout_width="wrap_content"
-            android:layout_height="match_parent"
-            android:layout_weight="1.0">
-
-            <TextView
-                android:id="@+id/distance"
-                android:layout_width="@dimen/distance_width"
-                android:layout_height="wrap_content"
-                android:maxLines="1"
-                android:textSize="@dimen/distance_text_size"/>
-
-            <android.car.cluster.sample.LaneView
-                android:id="@+id/lane"
-                android:layout_width="wrap_content"
-                android:layout_height="@dimen/laneview_height"
-                android:layout_alignParentRight="true"/>
-        </LinearLayout>
-
-        <android.car.cluster.sample.CueView
-            android:id="@+id/cue"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:maxLines="1"
-            android:textSize="@dimen/cue_text_size"/>
-
-        <LinearLayout
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:orientation="horizontal">
-
-            <TextView
-                android:id="@+id/eta"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_gravity="center"
-                android:layout_marginRight="@dimen/eta_margin_right"
-                android:maxLines="1"
-                android:textSize="@dimen/eta_text_size"/>
-
-            <TextView
-                android:id="@+id/segment"
-                android:layout_height="wrap_content"
-                android:layout_width="wrap_content"
-                android:maxLines="1"
-                android:ellipsize="end"
-                android:textSize="@dimen/segment_text_size"/>
-        </LinearLayout>
-
-        <android.car.cluster.sample.LaneView
-            android:id="@+id/provided_lane"
-            android:layout_width="wrap_content"
-            android:layout_height="@dimen/provided_laneview_height"
-            android:layout_marginLeft="@dimen/distance_width"/>
-    </LinearLayout>
-</LinearLayout>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/layout/metadata_normal.xml b/tests/DirectRenderingClusterSample/res/layout/metadata_normal.xml
deleted file mode 100644
index 5cb75a6..0000000
--- a/tests/DirectRenderingClusterSample/res/layout/metadata_normal.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.
--->
-<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/metadata_subcontainer"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:focusable="false">
-
-    <TextView
-        android:id="@+id/title"
-        android:layout_width="0dp"
-        android:layout_height="wrap_content"
-        android:ellipsize="end"
-        android:includeFontPadding="false"
-        android:maxLines="@integer/playback_title_text_max_lines"
-        android:textAppearance="?android:attr/textAppearanceLarge"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toTopOf="parent"
-        tools:text="Body 1 Header"/>
-    <TextView
-        android:id="@+id/subtitle"
-        android:layout_width="0dp"
-        android:layout_height="wrap_content"
-        android:layout_marginTop="@dimen/metadata_normal_subtitle_margin_top"
-        android:layout_marginEnd="@dimen/metadata_normal_subtitle_margin_end"
-        android:ellipsize="end"
-        android:maxLines="@integer/playback_subtitle_text_max_lines"
-        android:textAppearance="?android:attr/textAppearanceMedium"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintEnd_toStartOf="@+id/time"
-        app:layout_constraintTop_toBottomOf="@+id/title"
-        tools:text="Body 2"/>
-    <TextView
-        android:id="@+id/time"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_marginTop="@dimen/metadata_normal_time_margin_top"
-        android:ellipsize="end"
-        android:maxLines="@integer/playback_subtitle_text_max_lines"
-        android:gravity="end"
-        android:textAppearance="?android:attr/textAppearanceMedium"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintTop_toBottomOf="@+id/title"
-        tools:text="3:27 / 4:03"/>
-    <SeekBar
-        android:id="@+id/seek_bar"
-        android:layout_width="0dp"
-        android:layout_height="wrap_content"
-        android:layout_marginTop="@dimen/metadata_normal_seek_margin_top"
-        android:clickable="false"
-        android:focusable="false"
-        android:paddingEnd="@dimen/playback_seekbar_padding_end"
-        android:paddingStart="@dimen/playback_seekbar_padding_start"
-        android:progressDrawable="@drawable/seekbar_background"
-        android:thumb="@drawable/seekbar_thumb"
-        android:splitTrack="false"
-        android:progressTint="@color/progress_bar_highlight"
-        android:progressBackgroundTint="@color/progress_bar_background"
-        android:background="@null"
-        android:visibility="invisible"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintTop_toBottomOf="@+id/subtitle"
-        tools:progress="70"
-        tools:visibility="visible"/>
-
-</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/tests/DirectRenderingClusterSample/res/mipmap-hdpi/ic_launcher.png b/tests/DirectRenderingClusterSample/res/mipmap-hdpi/ic_launcher.png
deleted file mode 100644
index cde69bc..0000000
--- a/tests/DirectRenderingClusterSample/res/mipmap-hdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/tests/DirectRenderingClusterSample/res/mipmap-mdpi/ic_launcher.png b/tests/DirectRenderingClusterSample/res/mipmap-mdpi/ic_launcher.png
deleted file mode 100644
index c133a0c..0000000
--- a/tests/DirectRenderingClusterSample/res/mipmap-mdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/tests/DirectRenderingClusterSample/res/mipmap-xhdpi/ic_launcher.png b/tests/DirectRenderingClusterSample/res/mipmap-xhdpi/ic_launcher.png
deleted file mode 100644
index bfa42f0..0000000
--- a/tests/DirectRenderingClusterSample/res/mipmap-xhdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/tests/DirectRenderingClusterSample/res/mipmap-xxhdpi/ic_launcher.png b/tests/DirectRenderingClusterSample/res/mipmap-xxhdpi/ic_launcher.png
deleted file mode 100644
index 324e72c..0000000
--- a/tests/DirectRenderingClusterSample/res/mipmap-xxhdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/tests/DirectRenderingClusterSample/res/mipmap-xxxhdpi/ic_launcher.png b/tests/DirectRenderingClusterSample/res/mipmap-xxxhdpi/ic_launcher.png
deleted file mode 100644
index aee44e1..0000000
--- a/tests/DirectRenderingClusterSample/res/mipmap-xxxhdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/tests/DirectRenderingClusterSample/res/values-en-rUS/dimens.xml b/tests/DirectRenderingClusterSample/res/values-en-rUS/dimens.xml
deleted file mode 100644
index 05eef22..0000000
--- a/tests/DirectRenderingClusterSample/res/values-en-rUS/dimens.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-    <!--                                   -->
-    <!-- Sensor value conversion constants -->
-    <!--                                   -->
-    <!-- Speed: meters per second to miles per hour -->
-    <item name="speed_factor" format="float" type="dimen">2.236936</item>
-    <!-- Distance: miles to meters -->
-    <item name="distance_factor" format="float" type="dimen">1609.344</item>
-</resources>
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/res/values-w820dp/dimens.xml b/tests/DirectRenderingClusterSample/res/values-w820dp/dimens.xml
deleted file mode 100644
index 63fc816..0000000
--- a/tests/DirectRenderingClusterSample/res/values-w820dp/dimens.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<resources>
-    <!-- Example customization of dimensions originally defined in res/values/dimens.xml
-         (such as screen margins) for screens with more than 820dp of available width. This
-         would include 7" and 10" devices in landscape (~960dp and ~1280dp respectively). -->
-    <dimen name="activity_horizontal_margin">64dp</dimen>
-</resources>
diff --git a/tests/DirectRenderingClusterSample/res/values/colors.xml b/tests/DirectRenderingClusterSample/res/values/colors.xml
deleted file mode 100644
index c40f199..0000000
--- a/tests/DirectRenderingClusterSample/res/values/colors.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-    <color name="colorPrimary">#3F51B5</color>
-    <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>
-
-    <color name="album_art_background">@*android:color/car_grey_100</color>
-    <!-- Color used on the placeholder album art -->
-    <color name="album_art_placeholder_color">@*android:color/car_grey_800</color>
-    <!-- Color used on the progress bar background -->
-    <color name="progress_bar_background">@*android:color/car_seekbar_track_background</color>
-    <!-- Color used on the progress bar -->
-    <color name="progress_bar_highlight">@*android:color/car_accent</color>
-    <!-- Color used on the thumb of the progress bar -->
-    <color name="progress_bar_thumb_color">@*android:color/car_accent</color>
-</resources>
diff --git a/tests/DirectRenderingClusterSample/res/values/dimens.xml b/tests/DirectRenderingClusterSample/res/values/dimens.xml
deleted file mode 100644
index 21aec67..0000000
--- a/tests/DirectRenderingClusterSample/res/values/dimens.xml
+++ /dev/null
@@ -1,98 +0,0 @@
-<resources>
-    <!-- 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">100dp</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">8dp</dimen>
-    <dimen name="provided_maneuver_width">30dp</dimen>
-    <dimen name="provided_maneuver_height">30dp</dimen>
-    <!-- Distance -->
-    <dimen name="distance_width">125dp</dimen>
-    <dimen name="distance_text_size">20sp</dimen>
-    <!-- Segment -->
-    <dimen name="segment_text_size">15sp</dimen>
-    <!-- ETA -->
-    <dimen name="eta_margin_right">15dp</dimen>
-    <dimen name="eta_text_size">15sp</dimen>
-    <!-- Cue -->
-    <dimen name="cue_text_size">15sp</dimen>
-    <!-- Lane -->
-    <dimen name="laneview_height">25dp</dimen>
-    <dimen name="provided_laneview_height">25dp</dimen>
-    <dimen name="lane_width">50dp</dimen>
-    <dimen name="lane_height">50dp</dimen>
-
-    <dimen name="lane_icon_offset">12.5dp</dimen>
-
-    <!--                                   -->
-    <!-- Sensor value conversion constants -->
-    <!--                                   -->
-    <!-- Speed: meters per second to kilometers per hour -->
-    <item name="speed_factor" format="float" type="dimen">3.6</item>
-    <!-- Distance: kilometers to meters -->
-    <item name="distance_factor" format="float" type="dimen">1000</item>
-
-    <!-- fragment_metadata.xml -->
-    <dimen name="fragment_metadata_queue_divider_margin">@*android:dimen/car_keyline_1</dimen>
-    <dimen name="fragment_metadata_queue_margin_top">@*android:dimen/car_padding_4</dimen>
-    <dimen name="fragment_metadata_metadata_margin_start">@*android:dimen/car_padding_4</dimen>
-    <dimen name="fragment_metadata_metadata_margin_end">@*android:dimen/car_keyline_1</dimen>
-    <dimen name="fragment_metadata_art_margin_start">@*android:dimen/car_keyline_1</dimen>
-    <dimen name="fragment_metadata_art_margin_end">@*android:dimen/car_padding_4</dimen>
-
-    <!-- metadata_normal.xml -->
-    <dimen name="metadata_normal_subtitle_margin_top">@*android:dimen/car_padding_1</dimen>
-    <dimen name="metadata_normal_time_margin_top">@*android:dimen/car_padding_1</dimen>
-    <dimen name="metadata_normal_seek_margin_top">@*android:dimen/car_padding_4</dimen>
-    <dimen name="metadata_normal_subtitle_margin_end">@*android:dimen/car_padding_3</dimen>
-
-    <!-- Size of the album art thumbnail -->
-    <dimen name="playback_album_art_size_normal">156dp</dimen>
-
-    <!-- Playback seekbar track height -->
-    <dimen name="playback_seekbar_track_height">8dp</dimen>
-
-    <!-- Paddings of playback seekbar -->
-    <dimen name="playback_seekbar_padding_start">10dp</dimen>
-    <dimen name="playback_seekbar_padding_end">10dp</dimen>
-
-    <!-- Size of the thumb in the playback seekbar -->
-    <dimen name="playback_seekbar_thumb_height">20dp</dimen>
-    <dimen name="playback_seekbar_thumb_width">20dp</dimen>
-
-    <!-- fragment_playback.xml and fragment_playback_with_queue.xml -->
-    <dimen name="fragment_playback_guide_margin_x">@*android:dimen/car_margin</dimen>
-    <dimen name="fragment_playback_guide_margin_top">@*android:dimen/car_padding_4</dimen>
-
-    <!--                     -->
-    <!-- Communication Facet -->
-    <!--                     -->
-    <dimen name="user_profile_title_padding_top">@*android:dimen/car_padding_3</dimen>
-    <dimen name="user_profile_body_padding_top">@*android:dimen/car_padding_3</dimen>
-
-    <dimen name="large_avatar_icon_size">@dimen/car_large_avatar_size</dimen>
-</resources>
diff --git a/tests/DirectRenderingClusterSample/res/values/strings.xml b/tests/DirectRenderingClusterSample/res/values/strings.xml
deleted file mode 100644
index 5ec6198..0000000
--- a/tests/DirectRenderingClusterSample/res/values/strings.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<resources>
-    <string name="app_name" translatable="false">Fake Cluster Implementation</string>
-
-    <!-- TODO: Remove or change this placeholder text -->
-    <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>
-
-    <!-- Marker used to insert images inside rich-text strings. This string is never shown or spoken
-         to the user. Instead a image would be rendered in its place -->
-    <string name="span_image" translatable="false">[Image]</string>
-</resources>
diff --git a/tests/DirectRenderingClusterSample/res/values/styles.xml b/tests/DirectRenderingClusterSample/res/values/styles.xml
deleted file mode 100644
index cd5f552..0000000
--- a/tests/DirectRenderingClusterSample/res/values/styles.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<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
deleted file mode 100644
index 972a036..0000000
--- a/tests/DirectRenderingClusterSample/res/values/themes.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.
--->
-<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
deleted file mode 100644
index 6cabd69..0000000
--- a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/ActivityMonitor.java
+++ /dev/null
@@ -1,150 +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.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 onForegroundServicesChanged(int pid, int uid, int fgServicetypes) {
-        }
-
-        @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/CarInfoFragment.java b/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/CarInfoFragment.java
deleted file mode 100644
index 87d57e5..0000000
--- a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/CarInfoFragment.java
+++ /dev/null
@@ -1,43 +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 android.os.Bundle;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-
-import androidx.fragment.app.Fragment;
-
-/**
- * A simple {@link Fragment} subclass.
- */
-public class CarInfoFragment extends Fragment {
-
-
-    public CarInfoFragment() {
-        // Required empty public constructor
-    }
-
-
-    @Override
-    public View onCreateView(LayoutInflater inflater, ViewGroup container,
-                             Bundle savedInstanceState) {
-        // Inflate the layout for this fragment
-        return inflater.inflate(R.layout.fragment_car_info, container, false);
-    }
-
-}
diff --git a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/ClusterDisplayProvider.java b/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/ClusterDisplayProvider.java
deleted file mode 100644
index 007533c..0000000
--- a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/ClusterDisplayProvider.java
+++ /dev/null
@@ -1,155 +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.cluster.sample;
-
-import android.annotation.Nullable;
-import android.content.Context;
-import android.hardware.display.DisplayManager;
-import android.hardware.display.DisplayManager.DisplayListener;
-import android.os.SystemProperties;
-import android.text.TextUtils;
-import android.util.Log;
-import android.view.Display;
-import android.view.DisplayAddress;
-
-/**
- * This class provides a display for instrument cluster renderer.
- * <p>
- * By default it will try to provide physical secondary display if it is connected, if secondary
- * display is not connected during creation of this class then it will start networked virtual
- * display and listens for incoming connections.
- *
- * @see {@link NetworkedVirtualDisplay}
- */
-public class ClusterDisplayProvider {
-    private static final String TAG = "Cluster.DisplayProvider";
-
-    private static final String RO_CLUSTER_DISPLAY_PORT = "ro.car.cluster.displayport";
-    private static final String PERSIST_CLUSTER_DISPLAY_PORT =
-            "persist.car.cluster.displayport";
-    private static final int NETWORKED_DISPLAY_WIDTH = 1280;
-    private static final int NETWORKED_DISPLAY_HEIGHT = 720;
-    private static final int NETWORKED_DISPLAY_DPI = 320;
-
-    private final DisplayListener mListener;
-    private final DisplayManager mDisplayManager;
-
-    private NetworkedVirtualDisplay mNetworkedVirtualDisplay;
-    private int mClusterDisplayId = -1;
-
-    ClusterDisplayProvider(Context context, DisplayListener clusterDisplayListener) {
-        mListener = clusterDisplayListener;
-        mDisplayManager = context.getSystemService(DisplayManager.class);
-
-        Display clusterDisplay = getInstrumentClusterDisplay(mDisplayManager);
-        if (clusterDisplay != null) {
-            Log.i(TAG, String.format("Found display: %s (id: %d, owner: %s)",
-                    clusterDisplay.getName(), clusterDisplay.getDisplayId(),
-                    clusterDisplay.getOwnerPackageName()));
-            mClusterDisplayId = clusterDisplay.getDisplayId();
-            clusterDisplayListener.onDisplayAdded(clusterDisplay.getDisplayId());
-            trackClusterDisplay(null /* no need to track display by name */);
-        } else {
-            Log.i(TAG, "No physical cluster display found, starting network display");
-            setupNetworkDisplay(context);
-        }
-    }
-
-    private void setupNetworkDisplay(Context context) {
-        mNetworkedVirtualDisplay = new NetworkedVirtualDisplay(context,
-                NETWORKED_DISPLAY_WIDTH, NETWORKED_DISPLAY_HEIGHT, NETWORKED_DISPLAY_DPI);
-        String displayName = mNetworkedVirtualDisplay.start();
-        trackClusterDisplay(displayName);
-    }
-
-    private void trackClusterDisplay(@Nullable String displayName) {
-        mDisplayManager.registerDisplayListener(new DisplayListener() {
-            @Override
-            public void onDisplayAdded(int displayId) {
-                boolean clusterDisplayAdded = false;
-
-                if (displayName == null && mClusterDisplayId == -1) {
-                    mClusterDisplayId = displayId;
-                    clusterDisplayAdded = true;
-                } else {
-                    Display display = mDisplayManager.getDisplay(displayId);
-                    if (display != null && TextUtils.equals(display.getName(), displayName)) {
-                        mClusterDisplayId = displayId;
-                        clusterDisplayAdded = true;
-                    }
-                }
-
-                if (clusterDisplayAdded) {
-                    mListener.onDisplayAdded(displayId);
-                }
-            }
-
-            @Override
-            public void onDisplayRemoved(int displayId) {
-                if (displayId == mClusterDisplayId) {
-                    mClusterDisplayId = -1;
-                    mListener.onDisplayRemoved(displayId);
-                }
-            }
-
-            @Override
-            public void onDisplayChanged(int displayId) {
-                if (displayId == mClusterDisplayId) {
-                    mListener.onDisplayChanged(displayId);
-                }
-            }
-
-        }, null);
-    }
-
-    private static Display getInstrumentClusterDisplay(DisplayManager displayManager) {
-        Display[] displays = displayManager.getDisplays();
-        Log.d(TAG, "There are currently " + displays.length + " displays connected.");
-
-        final int displayPortPrimary = 0;  // primary port should not be instrument cluster.
-        int displayPort = SystemProperties.getInt(PERSIST_CLUSTER_DISPLAY_PORT,
-                displayPortPrimary);
-        if (displayPort == displayPortPrimary) {
-            displayPort = SystemProperties.getInt(RO_CLUSTER_DISPLAY_PORT,
-                    displayPortPrimary);
-            if (displayPort == displayPortPrimary) {
-                return null;
-            }
-        }
-        // match port for system display ( = null getOwnerPackageName())
-        // with separate check for main display as main display should be never picked up.
-        for (Display display : displays) {
-            if (display.getDisplayId() != Display.DEFAULT_DISPLAY
-                    && display.getOwnerPackageName() == null
-                    && display.getAddress() != null
-                    && display.getAddress() instanceof DisplayAddress.Physical) {
-                final byte port = ((DisplayAddress.Physical) display.getAddress()).getPort();
-                if (displayPort == port) {
-                    return display;
-                }
-            }
-        }
-        return null;
-    }
-
-    @Override
-    public String toString() {
-        return getClass().getSimpleName() + "{"
-                + " clusterDisplayId = " + mClusterDisplayId
-                + "}";
-    }
-}
diff --git a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/ClusterRenderingServiceImpl.java b/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/ClusterRenderingServiceImpl.java
deleted file mode 100644
index 80a94e1..0000000
--- a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/ClusterRenderingServiceImpl.java
+++ /dev/null
@@ -1,295 +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.content.Intent.FLAG_ACTIVITY_NEW_TASK;
-
-import static java.lang.Integer.parseInt;
-
-import android.annotation.Nullable;
-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.Binder;
-import android.os.Bundle;
-import android.os.IBinder;
-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.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.function.Consumer;
-
-/**
- * Implementation of {@link InstrumentClusterRenderingService} which renders an activity on a
- * virtual display that is transmitted to an external screen.
- */
-public class ClusterRenderingServiceImpl extends InstrumentClusterRenderingService implements
-        ImageResolver.BitmapFetcher {
-    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";
-
-    private List<ServiceClient> mClients = new ArrayList<>();
-    private ClusterDisplayProvider mDisplayProvider;
-    private int mDisplayId = NO_DISPLAY;
-    private final IBinder mLocalBinder = new LocalBinder();
-    private final ImageResolver mImageResolver = new ImageResolver(this);
-
-    public interface ServiceClient {
-        void onKeyEvent(KeyEvent keyEvent);
-        void onNavigationStateChange(NavigationState navState);
-    }
-
-    public class LocalBinder extends Binder {
-        ClusterRenderingServiceImpl getService() {
-            return ClusterRenderingServiceImpl.this;
-        }
-    }
-
-    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) {
-
-        }
-    };
-
-    public void setActivityLaunchOptions(int displayId, ClusterActivityState state) {
-        ActivityOptions options = displayId != Display.INVALID_DISPLAY
-                ? ActivityOptions.makeBasic().setLaunchDisplayId(displayId)
-                : null;
-        setClusterActivityLaunchOptions(options);
-        if (Log.isLoggable(TAG, Log.DEBUG)) {
-            Log.d(TAG, String.format("activity options set: %s (displayeId: %d)",
-                    options, options.getLaunchDisplayId()));
-        }
-        setClusterActivityState(state);
-        if (Log.isLoggable(TAG, Log.DEBUG)) {
-            Log.d(TAG, String.format("activity state set: %s", state));
-        }
-    }
-
-    public void registerClient(ServiceClient client) {
-        mClients.add(client);
-    }
-
-    public void unregisterClient(ServiceClient client) {
-        mClients.remove(client);
-    }
-
-    public ImageResolver getImageResolver() {
-        return mImageResolver;
-    }
-
-    @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) {
-        if (Log.isLoggable(TAG, Log.DEBUG)) {
-            Log.d(TAG, "onKeyEvent, keyEvent: " + keyEvent);
-        }
-        broadcastClientEvent(client -> client.onKeyEvent(keyEvent));
-    }
-
-    /**
-     * Broadcasts an event to all the registered service clients
-     *
-     * @param event event to broadcast
-     */
-    private void broadcastClientEvent(Consumer<ServiceClient> event) {
-        for (ServiceClient client : mClients) {
-            event.accept(client);
-        }
-    }
-
-    @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 onNavigationStateChanged(@Nullable Bundle bundle) {
-                try {
-                    if (bundle == null) {
-                        return;
-                    }
-                    StringBuilder bundleSummary = new StringBuilder();
-                    bundle.setClassLoader(ParcelUtils.class.getClassLoader());
-                    NavigationState navState = NavigationState
-                            .fromParcelable(bundle.getParcelable(NAV_STATE_BUNDLE_KEY));
-                    bundleSummary.append(navState.toString());
-
-                    // Update clients
-                    broadcastClientEvent(client -> client.onNavigationStateChange(navState));
-                    Log.d(TAG, "onNavigationStateChanged(" + bundleSummary + ")");
-                } catch (Exception e) {
-                    Log.e(TAG, "Error parsing event data (" + bundle + ")", e);
-                    NavigationState navState = new NavigationState.Builder().build();
-                    broadcastClientEvent(client -> client.onNavigationStateChange(navState));
-                }
-            }
-        };
-
-        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
deleted file mode 100644
index 1cf1b24..0000000
--- a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/ClusterViewModel.java
+++ /dev/null
@@ -1,334 +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.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.car.hardware.property.CarPropertyManager.CarPropertyEventCallback;
-import android.content.ComponentName;
-import android.content.ServiceConnection;
-import android.os.IBinder;
-import android.util.Log;
-import android.util.TypedValue;
-
-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.text.DecimalFormat;
-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;
-
-    private float mSpeedFactor;
-    private float mDistanceFactor;
-
-    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.registerCallback(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 CarPropertyEventCallback mCarPropertyEventListener = new CarPropertyEventCallback() {
-                @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();
-
-        TypedValue tv = new TypedValue();
-        getApplication().getResources().getValue(R.dimen.speed_factor, tv, true);
-        mSpeedFactor = tv.getFloat();
-
-        getApplication().getResources().getValue(R.dimen.distance_factor, tv, true);
-        mDistanceFactor = tv.getFloat();
-    }
-
-    @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 to 100.
-     */
-    public LiveData<Integer> 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;
-            }
-            if (fuelValue > fuelCapacityValue) {
-                return 100;
-            }
-            return Math.round(fuelValue / (fuelCapacityValue * 100f));
-        });
-    }
-
-    /**
-     * Returns a {@link LiveData} that tracks the RPM x 1000
-     */
-    public LiveData<String> getRPM() {
-        return Transformations.map(getSensor(Sensors.SENSOR_RPM), (rpmValue) -> {
-            return new DecimalFormat("#0.0").format(rpmValue / 1000f);
-        });
-    }
-
-    /**
-     * Returns a {@link LiveData} that tracks the speed in either mi/h or km/h depending on locale.
-     */
-    public LiveData<Integer> getSpeed() {
-        return Transformations.map(getSensor(Sensors.SENSOR_SPEED), (speedValue) -> {
-            return Math.round(speedValue * mSpeedFactor);
-        });
-    }
-
-    /**
-     * Returns a {@link LiveData} that tracks the range the vehicle has until it runs out of gas.
-     */
-    public LiveData<Integer> getRange() {
-        return Transformations.map(getSensor(Sensors.SENSOR_FUEL_RANGE), (rangeValue) -> {
-            return Math.round(rangeValue / mDistanceFactor);
-        });
-    }
-
-    /**
-     * 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
deleted file mode 100644
index d7bbf5f..0000000
--- a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/CueView.java
+++ /dev/null
@@ -1,116 +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.cluster.sample;
-
-import android.content.Context;
-import android.graphics.Bitmap;
-import android.graphics.drawable.BitmapDrawable;
-import android.os.Handler;
-import android.text.SpannableStringBuilder;
-import android.text.style.ImageSpan;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.widget.TextView;
-
-import androidx.car.cluster.navigation.ImageReference;
-import androidx.car.cluster.navigation.RichText;
-import androidx.car.cluster.navigation.RichTextElement;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.concurrent.CompletableFuture;
-import java.util.stream.Collectors;
-
-/**
- * View component that displays the Cue information on the instrument cluster display
- */
-public class CueView extends TextView {
-    private static final String TAG = "Cluster.CueView";
-
-    private String mImageSpanText;
-    private CompletableFuture<?> mFuture;
-    private Handler mHandler = new Handler();
-    private RichText mContent;
-
-    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);
-        mImageSpanText = context.getString(R.string.span_image);
-    }
-
-    public void setRichText(RichText richText, ImageResolver imageResolver) {
-        if (richText == null) {
-            setText(null);
-            return;
-        }
-
-        if (mFuture != null && !Objects.equals(richText, mContent)) {
-            mFuture.cancel(true);
-        }
-
-        List<ImageReference> imageReferences = richText.getElements().stream()
-                .filter(element -> element.getImage() != null)
-                .map(element -> element.getImage())
-                .collect(Collectors.toList());
-        mFuture = imageResolver
-                .getBitmaps(imageReferences, 0, getLineHeight())
-                .thenAccept(bitmaps -> {
-                    mHandler.post(() -> update(richText, bitmaps));
-                    mFuture = null;
-                })
-                .exceptionally(ex -> {
-                    if (Log.isLoggable(TAG, Log.DEBUG)) {
-                        Log.d(TAG, "Unable to fetch images for cue: " + richText);
-                    }
-                    mHandler.post(() -> update(richText, Collections.emptyMap()));
-                    return null;
-                });
-        mContent = richText;
-    }
-
-    private void update(RichText richText, Map<ImageReference, Bitmap> bitmaps) {
-        SpannableStringBuilder builder = new SpannableStringBuilder();
-
-        for (RichTextElement element : richText.getElements()) {
-            if (element.getImage() != null) {
-                Bitmap bitmap = bitmaps.get(element.getImage());
-                if (bitmap != null) {
-                    String imageText = element.getText().isEmpty() ? mImageSpanText :
-                            element.getText();
-                    int start = builder.length();
-                    int end = start + imageText.length();
-                    builder.append(imageText);
-                    BitmapDrawable drawable = new BitmapDrawable(getResources(), bitmap);
-                    drawable.setBounds(0, 0, bitmap.getWidth(), bitmap.getHeight());
-                    builder.setSpan(new ImageSpan(drawable), start, end, 0);
-                }
-            } else if (!element.getText().isEmpty()) {
-                builder.append(element.getText());
-            }
-        }
-
-        setText(builder);
-    }
-}
diff --git a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/HeartBeatLiveData.java b/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/HeartBeatLiveData.java
deleted file mode 100644
index 42116b8..0000000
--- a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/HeartBeatLiveData.java
+++ /dev/null
@@ -1,57 +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.cluster.sample;
-
-import android.os.Handler;
-import android.os.Looper;
-
-import androidx.lifecycle.LiveData;
-
-/**
- * Emits a true value in a fixed periodical pace. The first beat begins when this live data becomes
- * active.
- *
- * <p> Note that if this heart beat is shared, the time can be less than the given interval between
- * observation and first beat for the second observer.
- */
-public class HeartBeatLiveData extends LiveData<Boolean> {
-    private long mPulseRate;
-    private Handler mMainThreadHandler = new Handler(Looper.getMainLooper());
-
-    public HeartBeatLiveData(long rateInMillis) {
-        mPulseRate = rateInMillis;
-    }
-
-    @Override
-    protected void onActive() {
-        super.onActive();
-        mMainThreadHandler.post(mUpdateDurationRunnable);
-    }
-
-    @Override
-    protected void onInactive() {
-        super.onInactive();
-        mMainThreadHandler.removeCallbacks(mUpdateDurationRunnable);
-    }
-
-    private final Runnable mUpdateDurationRunnable = new Runnable() {
-        @Override
-        public void run() {
-            setValue(true);
-            mMainThreadHandler.postDelayed(this, mPulseRate);
-        }
-    };
-}
diff --git a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/ImageResolver.java b/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/ImageResolver.java
deleted file mode 100644
index 5e03b9b..0000000
--- a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/ImageResolver.java
+++ /dev/null
@@ -1,169 +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.cluster.sample;
-
-import android.graphics.Bitmap;
-import android.graphics.Point;
-import android.net.Uri;
-import android.util.Log;
-import android.util.LruCache;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.car.cluster.navigation.ImageReference;
-
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.CompletableFuture;
-import java.util.stream.Collectors;
-
-/**
- * Class for retrieving bitmap images from a ContentProvider
- */
-public class ImageResolver {
-    private static final String TAG = "Cluster.ImageResolver";
-    private static final int IMAGE_CACHE_SIZE_BYTES = 4 * 1024 * 1024; /* 4 mb */
-
-    private final BitmapFetcher mFetcher;
-    private final LruCache<String, Bitmap> mCache = new LruCache<String, Bitmap>(
-            IMAGE_CACHE_SIZE_BYTES) {
-        @Override
-        protected int sizeOf(String key, Bitmap value) {
-            return value.getByteCount();
-        }
-    };
-
-    public interface BitmapFetcher {
-        Bitmap getBitmap(Uri uri);
-    }
-
-    /**
-     * Creates a resolver that delegate the image retrieval to the given fetcher.
-     */
-    public ImageResolver(BitmapFetcher fetcher) {
-        mFetcher = fetcher;
-    }
-
-    /**
-     * Returns a {@link CompletableFuture} that provides a bitmap from a {@link ImageReference}.
-     * This image would fit inside the provided size. Either width, height or both should be greater
-     * than 0.
-     *
-     * @param width required width, or 0 if width is flexible based on height.
-     * @param height required height, or 0 if height is flexible based on width.
-     */
-    @NonNull
-    public CompletableFuture<Bitmap> getBitmap(@NonNull ImageReference img, int width, int height) {
-        if (Log.isLoggable(TAG, Log.DEBUG)) {
-            Log.d(TAG, String.format("Requesting image %s (width: %d, height: %d)",
-                    img.getRawContentUri(), width, height));
-        }
-
-        return CompletableFuture.supplyAsync(() -> {
-            // Adjust the size to fit in the requested box.
-            Point adjusted = getAdjustedSize(img.getOriginalWidth(), img.getOriginalHeight(), width,
-                    height);
-            if (adjusted == null) {
-                Log.e(TAG, "The provided image has no original size: " + img.getRawContentUri());
-                return null;
-            }
-            Uri uri = img.getContentUri(adjusted.x, adjusted.y);
-            Bitmap bitmap = mCache.get(uri.toString());
-            if (bitmap == null) {
-                bitmap = mFetcher.getBitmap(uri);
-                if (bitmap == null) {
-                    if (Log.isLoggable(TAG, Log.DEBUG)) {
-                        Log.d(TAG, "Unable to fetch image: " + uri);
-                    }
-                    return null;
-                }
-                if (bitmap.getWidth() != adjusted.x || bitmap.getHeight() != adjusted.y) {
-                    bitmap = Bitmap.createScaledBitmap(bitmap, adjusted.x, adjusted.y, true);
-                }
-                mCache.put(uri.toString(), bitmap);
-            }
-            if (Log.isLoggable(TAG, Log.DEBUG)) {
-                Log.d(TAG, String.format("Returning image %s (width: %d, height: %d)",
-                        img.getRawContentUri(), width, height));
-            }
-            return bitmap != null ? Bitmap.createScaledBitmap(bitmap, adjusted.x, adjusted.y, true)
-                    : null;
-        });
-    }
-
-    /**
-     * Same as {@link #getBitmap(ImageReference, int, int)} but it works on a list of images. The
-     * returning {@link CompletableFuture} will contain a map from each {@link ImageReference} to
-     * its bitmap. If any image fails to be fetched, the whole future completes exceptionally.
-     *
-     * @param width required width, or 0 if width is flexible based on height.
-     * @param height required height, or 0 if height is flexible based on width.
-     */
-    @NonNull
-    public CompletableFuture<Map<ImageReference, Bitmap>> getBitmaps(
-            @NonNull List<ImageReference> imgs, int width, int height) {
-        CompletableFuture<Map<ImageReference, Bitmap>> future = new CompletableFuture<>();
-
-        Map<ImageReference, CompletableFuture<Bitmap>> bitmapFutures = imgs.stream().collect(
-                Collectors.toMap(
-                        img -> img,
-                        img -> getBitmap(img, width, height)));
-
-        CompletableFuture.allOf(bitmapFutures.values().toArray(new CompletableFuture[0]))
-                .thenAccept(v -> {
-                    Map<ImageReference, Bitmap> bitmaps = bitmapFutures.entrySet().stream()
-                            .collect(Collectors.toMap(Map.Entry::getKey, entry -> entry
-                                    .getValue().join()));
-                    future.complete(bitmaps);
-                })
-                .exceptionally(ex -> {
-                    future.completeExceptionally(ex);
-                    return null;
-                });
-
-        return future;
-    }
-
-    /**
-     * Returns an image size that exactly fits inside a requested box, maintaining an original size
-     * aspect ratio.
-     *
-     * @param originalWidth original width (must be != 0)
-     * @param originalHeight original height (must be != 0)
-     * @param requestedWidth required width, or 0 if width is flexible based on height.
-     * @param requestedHeight required height, or 0 if height is flexible based on width.
-     */
-    @Nullable
-    public Point getAdjustedSize(int originalWidth, int originalHeight, int requestedWidth,
-            int requestedHeight) {
-        if (originalWidth <= 0 || originalHeight <= 0) {
-            return null;
-        } else if (requestedWidth == 0 && requestedHeight == 0) {
-            throw new IllegalArgumentException("At least one of width or height must be != 0");
-        }
-        // If width is flexible or if both width and height are set and the original image is wider
-        // than the space provided, then scale the width.
-        float requiredRatio = requestedHeight > 0 ? ((float) requestedWidth) / requestedHeight : 0;
-        float imageRatio = ((float) originalWidth) / originalHeight;
-        Point res = new Point(requestedWidth, requestedHeight);
-        if (requestedWidth == 0 || (requestedHeight != 0 && imageRatio < requiredRatio)) {
-            res.x = (int) (((float) requestedHeight / originalHeight) * originalWidth);
-        } else {
-            res.y = (int) (((float) requestedWidth / originalWidth) * originalHeight);
-        }
-        return res;
-    }
-}
diff --git a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/LaneView.java b/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/LaneView.java
deleted file mode 100644
index 1181fa2..0000000
--- a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/LaneView.java
+++ /dev/null
@@ -1,241 +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.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.os.Handler;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.widget.ImageView;
-import android.widget.LinearLayout;
-
-import androidx.car.cluster.navigation.ImageReference;
-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 static final String TAG = "Cluster.LaneView";
-
-    private Handler mHandler = new Handler();
-
-    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);
-    private final int mOffset = (int) getResources().getDimension(R.dimen.lane_icon_offset);
-
-    private enum Shift {
-        LEFT,
-        RIGHT,
-        BOTH
-    }
-
-    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(ImageReference imageReference, ImageResolver imageResolver) {
-        imageResolver
-                .getBitmap(imageReference, 0, getHeight())
-                .thenAccept(bitmap -> {
-                    mHandler.post(() -> {
-                        removeAllViews();
-                        ImageView imgView = new ImageView(getContext());
-                        imgView.setImageBitmap(bitmap);
-                        imgView.setAdjustViewBounds(true);
-                        addView(imgView);
-                    });
-                })
-                .exceptionally(ex -> {
-                    removeAllViews();
-                    if (Log.isLoggable(TAG, Log.DEBUG)) {
-                        Log.d(TAG, "Unable to fetch image for lane: " + imageReference);
-                    }
-                    return null;
-                });
-    }
-
-    public void setLanes(List<Lane> lanes) {
-        mLanes = new ArrayList<>(lanes);
-        removeAllViews();
-
-        // Use drawables for lane directional guidance
-        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);
-
-        Shift shift = getShift(lane);
-
-        for (LaneDirection laneDir : lane.getDirections()) {
-            if (!laneDir.isHighlighted()) {
-                drawToCanvas(laneDir, canvas, false, shift);
-            }
-        }
-
-        for (LaneDirection laneDir : lane.getDirections()) {
-            if (laneDir.isHighlighted()) {
-                drawToCanvas(laneDir, canvas, true, shift);
-            }
-        }
-
-        return bitmap;
-    }
-
-    private void drawToCanvas(LaneDirection laneDir, Canvas canvas, boolean isHighlighted,
-            Shift shift) {
-        int offset = getOffset(laneDir, shift);
-        VectorDrawable icon = (VectorDrawable) getLaneIcon(laneDir);
-        icon.setBounds(offset, 0, mWidth + offset, mHeight);
-        icon.setColorFilter(new PorterDuffColorFilter(isHighlighted
-                ? getContext().getColor(R.color.laneDirectionHighlighted)
-                : getContext().getColor(R.color.laneDirection),
-                PorterDuff.Mode.SRC_ATOP));
-        icon.draw(canvas);
-    }
-
-    /**
-     * Determines the offset direction to line up overlapping lane directions.
-     */
-    private Shift getShift(Lane lane) {
-        boolean containsRight = false;
-        boolean containsLeft = false;
-        boolean containsStraight = false;
-
-        for (LaneDirection laneDir : lane.getDirections()) {
-            if (laneDir.getShape().equals(LaneDirection.Shape.NORMAL_RIGHT)
-                    || laneDir.getShape().equals(LaneDirection.Shape.SLIGHT_RIGHT)
-                    || laneDir.getShape().equals(LaneDirection.Shape.SHARP_RIGHT)
-                    || laneDir.getShape().equals(LaneDirection.Shape.U_TURN_RIGHT)) {
-                containsRight = true;
-            }
-            if (laneDir.getShape().equals(LaneDirection.Shape.NORMAL_LEFT)
-                    || laneDir.getShape().equals(LaneDirection.Shape.SLIGHT_LEFT)
-                    || laneDir.getShape().equals(LaneDirection.Shape.SHARP_LEFT)
-                    || laneDir.getShape().equals(LaneDirection.Shape.U_TURN_LEFT)) {
-                containsLeft = true;
-            }
-            if (laneDir.getShape().equals(LaneDirection.Shape.STRAIGHT)) {
-                containsStraight = true;
-            }
-        }
-
-        if (containsLeft && containsRight) {
-            //shift turns outwards
-            return Shift.BOTH;
-        } else if (containsStraight && containsRight) {
-            //shift straight lane dir to the left
-            return Shift.LEFT;
-        } else if (containsStraight && containsLeft) {
-            //shift straight lane dir to the right
-            return Shift.RIGHT;
-        }
-
-        return null;
-    }
-
-    /**
-     * Returns the offset value of the lane direction based on the given shift direction.
-     */
-    private int getOffset(LaneDirection laneDir, Shift shift) {
-        if (shift == Shift.BOTH) {
-            if (laneDir.getShape().equals(LaneDirection.Shape.NORMAL_LEFT)
-                    || laneDir.getShape().equals(LaneDirection.Shape.SLIGHT_LEFT)
-                    || laneDir.getShape().equals(LaneDirection.Shape.SHARP_LEFT)
-                    || laneDir.getShape().equals(LaneDirection.Shape.U_TURN_LEFT)) {
-                return -mOffset;
-            }
-            if (laneDir.getShape().equals(LaneDirection.Shape.NORMAL_RIGHT)
-                    || laneDir.getShape().equals(LaneDirection.Shape.SLIGHT_RIGHT)
-                    || laneDir.getShape().equals(LaneDirection.Shape.SHARP_RIGHT)
-                    || laneDir.getShape().equals(LaneDirection.Shape.U_TURN_RIGHT)) {
-                return mOffset;
-            }
-        } else if (shift == Shift.LEFT) {
-            if (laneDir.getShape().equals(LaneDirection.Shape.STRAIGHT)) {
-                return -mOffset;
-            }
-        } else if (shift == Shift.RIGHT) {
-            if (laneDir.getShape().equals(LaneDirection.Shape.STRAIGHT)) {
-                return mOffset;
-            }
-        }
-
-        return 0;
-    }
-
-    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_left);
-            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
deleted file mode 100644
index 0bd298c..0000000
--- a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/MainClusterActivity.java
+++ /dev/null
@@ -1,475 +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.sample.ClusterRenderingServiceImpl.LOCAL_BINDING_ACTION;
-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;
-import android.os.IBinder;
-import android.os.UserHandle;
-import android.util.Log;
-import android.util.SparseArray;
-import android.view.Display;
-import android.view.InputDevice;
-import android.view.KeyEvent;
-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.viewpager.widget.ViewPager;
-
-import com.android.car.telephony.common.InMemoryPhoneBook;
-
-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 implements
-        ClusterRenderingServiceImpl.ServiceClient {
-    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 Map<View, Facet<?>> mButtonToFacet = new HashMap<>();
-    private SparseArray<Facet<?>> mOrderToFacet = new SparseArray<>();
-
-    private Map<Sensors.Gear, View> mGearsToIcon = new HashMap<>();
-    private InputMethodManager mInputMethodManager;
-    private ClusterRenderingServiceImpl mService;
-    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;
-
-    private int mPreviousFacet;
-
-    /**
-     * Description of a virtual display
-     */
-    public static class VirtualDisplay {
-        /** Identifier of the display */
-        public final int mDisplayId;
-        /** Rectangular area inside this display that can be viewed without obstructions */
-        public final Rect mUnobscuredBounds;
-
-        public VirtualDisplay(int displayId, Rect unobscuredBounds) {
-            mDisplayId = displayId;
-            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).mOrder);
-                    }
-                }
-            };
-
-    private ServiceConnection mClusterRenderingServiceConnection = new ServiceConnection() {
-        @Override
-        public void onServiceConnected(ComponentName name, IBinder service) {
-            Log.i(TAG, "onServiceConnected, name: " + name + ", service: " + service);
-            mService = ((ClusterRenderingServiceImpl.LocalBinder) service).getService();
-            mService.registerClient(MainClusterActivity.this);
-            mNavStateController.setImageResolver(mService.getImageResolver());
-            if (mPendingVirtualDisplay != null) {
-                // If haven't reported the virtual display yet, do so on service connect.
-                reportNavDisplay(mPendingVirtualDisplay);
-                mPendingVirtualDisplay = null;
-            }
-        }
-
-        @Override
-        public void onServiceDisconnected(ComponentName name) {
-            Log.i(TAG, "onServiceDisconnected, name: " + name);
-            mService = null;
-            mNavStateController.setImageResolver(null);
-            onNavigationStateChange(NULL_NAV_STATE);
-        }
-    };
-
-    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);
-        Log.d(TAG, "onCreate");
-        setContentView(R.layout.activity_main);
-
-        mInputMethodManager = getSystemService(InputMethodManager.class);
-
-        Intent intent = new Intent(this, ClusterRenderingServiceImpl.class);
-        intent.setAction(LOCAL_BINDING_ACTION);
-        bindServiceAsUser(intent, mClusterRenderingServiceConnection, 0, UserHandle.SYSTEM);
-
-        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).mButton.requestFocus();
-        mNavStateController = new NavStateController(findViewById(R.id.navigation_state));
-
-        mClusterViewModel = ViewModelProviders.of(this).get(ClusterViewModel.class);
-        mClusterViewModel.getNavigationFocus().observe(this, focus -> {
-            // If focus is lost, we launch the default navigation activity again.
-            if (!focus) {
-                mNavStateController.update(null);
-                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.getSpeed());
-        registerSensor(findViewById(R.id.info_range), mClusterViewModel.getRange());
-        registerSensor(findViewById(R.id.info_rpm), mClusterViewModel.getRPM());
-
-        mActivityMonitor.start();
-
-        mUserReceiver = new UserReceiver(this);
-        mUserReceiver.register(this);
-
-        try {
-            InMemoryPhoneBook.get();
-        } catch (IllegalStateException ex) {
-            // Initialize if not yet initialized
-            InMemoryPhoneBook.init(this);
-        }
-
-        PhoneFragmentViewModel phoneViewModel = ViewModelProviders.of(this).get(
-                PhoneFragmentViewModel.class);
-
-        phoneViewModel.setPhoneStateCallback(new PhoneFragmentViewModel.PhoneStateCallback() {
-            @Override
-            public void onCall() {
-                mPreviousFacet = mPager.getCurrentItem();
-                mOrderToFacet.get(1).mButton.requestFocus();
-            }
-
-            @Override
-            public void onDisconnect() {
-                mOrderToFacet.get(mPreviousFacet).mButton.requestFocus();
-            }
-        });
-    }
-
-    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) {
-            mService.unregisterClient(this);
-            mService = null;
-        }
-        unbindService(mClusterRenderingServiceConnection);
-    }
-
-    @Override
-    public void onKeyEvent(KeyEvent event) {
-        Log.i(TAG, "onKeyEvent, event: " + event);
-
-        // This is a hack. We use SOURCE_CLASS_POINTER here because this type of input is associated
-        // with the display. otherwise this event will be ignored in ViewRootImpl because injecting
-        // KeyEvent w/o activity being focused is useless.
-        event.setSource(event.getSource() | InputDevice.SOURCE_CLASS_POINTER);
-        mInputMethodManager.dispatchKeyEventFromInputMethod(getCurrentFocus(), event);
-    }
-
-    @Override
-    public void onNavigationStateChange(NavigationState state) {
-        Log.d(TAG, "onNavigationStateChange: " + state);
-        if (mNavStateController != null) {
-            mNavStateController.update(state);
-        }
-    }
-
-    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;
-            return;
-        } else {
-            reportNavDisplay(virtualDisplay);
-        }
-    }
-
-    private void reportNavDisplay(VirtualDisplay virtualDisplay) {
-        mService.setActivityLaunchOptions(virtualDisplay.mDisplayId, ClusterActivityState
-                .create(virtualDisplay.mDisplayId != Display.INVALID_DISPLAY,
-                        virtualDisplay.mUnobscuredBounds));
-    }
-
-    public class ClusterPageAdapter extends FragmentPagerAdapter {
-        public ClusterPageAdapter(FragmentManager fm) {
-            super(fm);
-        }
-
-        @Override
-        public int getCount() {
-            return mButtonToFacet.size();
-        }
-
-        @Override
-        public Fragment getItem(int position) {
-            return mOrderToFacet.get(position).getOrCreateFragment();
-        }
-    }
-
-    private <T> void registerFacet(Facet<T> facet) {
-        mOrderToFacet.append(facet.mOrder, facet);
-        mButtonToFacet.put(facet.mButton, facet);
-
-        facet.mButton.setOnFocusChangeListener(mFacetButtonFocusListener);
-    }
-
-    private static class Facet<T> {
-        Button mButton;
-        Class<T> mClazz;
-        int mOrder;
-
-        Facet(Button button, int order, Class<T> clazz) {
-            this.mButton = button;
-            this.mOrder = order;
-            this.mClazz = clazz;
-        }
-
-        private Fragment mFragment;
-
-        Fragment getOrCreateFragment() {
-            if (mFragment == null) {
-                try {
-                    mFragment = (Fragment) mClazz.getConstructors()[0].newInstance();
-                } catch (InstantiationException | IllegalAccessException
-                        | InvocationTargetException e) {
-                    throw new RuntimeException(e);
-                }
-            }
-            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/MusicFragment.java b/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/MusicFragment.java
deleted file mode 100644
index 25739e2..0000000
--- a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/MusicFragment.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * 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.cluster.sample;
-
-import android.os.Bundle;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ImageView;
-import android.widget.SeekBar;
-import android.widget.TextView;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.fragment.app.Fragment;
-import androidx.fragment.app.FragmentActivity;
-import androidx.lifecycle.ViewModelProviders;
-
-import com.android.car.apps.common.BackgroundImageView;
-import com.android.car.media.common.playback.PlaybackViewModel;
-import com.android.car.media.common.source.MediaSourceViewModel;
-
-/**
- * Displays information on the current media item selected.
- */
-public class MusicFragment extends Fragment {
-    private static final String TAG = "MusicFragment";
-
-    public MusicFragment() {
-        // Required empty public constructor
-    }
-
-    @Nullable
-    @Override
-    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
-            Bundle savedInstanceState) {
-        FragmentActivity activity = requireActivity();
-        PlaybackViewModel playbackViewModel = PlaybackViewModel.get(activity.getApplication());
-        MediaSourceViewModel mMediaSourceViewModel = MediaSourceViewModel.get(
-                activity.getApplication());
-
-        MusicFragmentViewModel innerViewModel = ViewModelProviders.of(activity).get(
-                MusicFragmentViewModel.class);
-        innerViewModel.init(mMediaSourceViewModel, playbackViewModel);
-
-        View view = inflater.inflate(R.layout.fragment_music, container, false);
-
-        TextView appName = view.findViewById(R.id.app_name);
-        innerViewModel.getAppName().observe(getViewLifecycleOwner(), appName::setText);
-
-        TextView title = view.findViewById(R.id.title);
-        innerViewModel.getTitle().observe(getViewLifecycleOwner(), title::setText);
-
-        TextView subtitle = view.findViewById(R.id.subtitle);
-        innerViewModel.getSubtitle().observe(getViewLifecycleOwner(), subtitle::setText);
-
-        SeekBar seekBar = view.findViewById(R.id.seek_bar);
-        innerViewModel.getMaxProgress().observe(getViewLifecycleOwner(),
-                maxProgress -> seekBar.setMax(maxProgress != null ? maxProgress.intValue() : 0));
-        innerViewModel.getProgress().observe(getViewLifecycleOwner(),
-                progress -> seekBar.setProgress((int) progress.getProgress()));
-        innerViewModel.hasTime().observe(getViewLifecycleOwner(),
-                hasTime -> seekBar.setVisibility(hasTime ? View.VISIBLE : View.INVISIBLE));
-
-        TextView time = view.findViewById(R.id.time);
-
-        innerViewModel.getTimeText().observe(getViewLifecycleOwner(),
-                timeText -> time.setText(timeText));
-
-        BackgroundImageView albumBackground = view.findViewById(R.id.album_background);
-        ImageView albumIcon = view.findViewById(R.id.album_art);
-        innerViewModel.getAlbumArt().observe(getViewLifecycleOwner(), albumArt -> {
-            albumBackground.setBackgroundImage(albumArt, true);
-            if (albumArt == null) {
-                albumIcon.setImageDrawable(getContext().getDrawable(R.drawable.ic_person));
-            } else {
-                albumIcon.setImageBitmap(albumArt);
-            }
-        });
-
-        return view;
-    }
-}
diff --git a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/MusicFragmentViewModel.java b/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/MusicFragmentViewModel.java
deleted file mode 100644
index 81a87df..0000000
--- a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/MusicFragmentViewModel.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * 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.cluster.sample;
-
-import static androidx.lifecycle.Transformations.map;
-
-import static com.android.car.arch.common.LiveDataFunctions.combine;
-import static com.android.car.arch.common.LiveDataFunctions.mapNonNull;
-
-import android.annotation.SuppressLint;
-import android.app.Application;
-import android.graphics.Bitmap;
-import android.media.session.PlaybackState;
-
-import androidx.lifecycle.AndroidViewModel;
-import androidx.lifecycle.LiveData;
-
-import com.android.car.media.common.MediaItemMetadata;
-import com.android.car.media.common.playback.AlbumArtLiveData;
-import com.android.car.media.common.playback.PlaybackProgress;
-import com.android.car.media.common.playback.PlaybackViewModel;
-import com.android.car.media.common.source.MediaSource;
-import com.android.car.media.common.source.MediaSourceViewModel;
-
-import com.bumptech.glide.request.target.Target;
-
-import java.util.concurrent.TimeUnit;
-
-/**
- * View model for {@link MusicFragment}
- */
-public final class MusicFragmentViewModel extends AndroidViewModel {
-
-    private LiveData<MediaSource> mMediaSource;
-    private LiveData<CharSequence> mAppName;
-    private LiveData<Bitmap> mAppIcon;
-    private LiveData<CharSequence> mTitle;
-    private LiveData<CharSequence> mSubtitle;
-    private LiveData<Bitmap> mAlbumArt;
-    private LiveData<PlaybackProgress> mProgress;
-    private LiveData<Long> mMaxProgress;
-    private LiveData<CharSequence> mTimeText;
-    private LiveData<Boolean> mHasTime;
-
-    private PlaybackViewModel mPlaybackViewModel;
-    private MediaSourceViewModel mMediaSourceViewModel;
-
-    public MusicFragmentViewModel(Application application) {
-        super(application);
-    }
-
-    void init(MediaSourceViewModel mediaSourceViewModel, PlaybackViewModel playbackViewModel) {
-        if (mMediaSourceViewModel == mediaSourceViewModel
-                && mPlaybackViewModel == playbackViewModel) {
-            return;
-        }
-        mPlaybackViewModel = playbackViewModel;
-        mMediaSourceViewModel = mediaSourceViewModel;
-        mMediaSource = mMediaSourceViewModel.getPrimaryMediaSource();
-        mAppName = mapNonNull(mMediaSource, MediaSource::getName);
-        mAppIcon = mapNonNull(mMediaSource, MediaSource::getRoundPackageIcon);
-        mTitle = mapNonNull(playbackViewModel.getMetadata(), MediaItemMetadata::getTitle);
-        mSubtitle = mapNonNull(playbackViewModel.getMetadata(), MediaItemMetadata::getSubtitle);
-        mAlbumArt = AlbumArtLiveData.getAlbumArt(getApplication(),
-                Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL, false,
-                playbackViewModel.getMetadata());
-        mProgress = playbackViewModel.getProgress();
-        mMaxProgress = map(playbackViewModel.getPlaybackStateWrapper(),
-                state -> state != null ? state.getMaxProgress() : 0L);
-        mTimeText = combine(mProgress, mMaxProgress, (progress, maxProgress) -> {
-            boolean showHours = TimeUnit.MILLISECONDS.toHours(maxProgress) > 0;
-            return String.format("%s / %s",
-                    formatTime(progress.getProgress(), showHours),
-                    formatTime(maxProgress, showHours));
-        });
-        mHasTime = combine(mProgress, mMaxProgress, (progress, maxProgress) ->
-                maxProgress > 0
-                        && progress.getProgress() != PlaybackState.PLAYBACK_POSITION_UNKNOWN);
-    }
-
-    LiveData<CharSequence> getAppName() {
-        return mAppName;
-    }
-
-    LiveData<Bitmap> getAppIcon() {
-        return mAppIcon;
-    }
-
-    LiveData<CharSequence> getTitle() {
-        return mTitle;
-    }
-
-    LiveData<CharSequence> getSubtitle() {
-        return mSubtitle;
-    }
-
-    LiveData<Bitmap> getAlbumArt() {
-        return mAlbumArt;
-    }
-
-    LiveData<PlaybackProgress> getProgress() {
-        return mProgress;
-    }
-
-    LiveData<Long> getMaxProgress() {
-        return mMaxProgress;
-    }
-
-    LiveData<CharSequence> getTimeText() {
-        return mTimeText;
-    }
-
-    LiveData<Boolean> hasTime() {
-        return mHasTime;
-    }
-
-    @SuppressLint("DefaultLocale")
-    private static String formatTime(long millis, boolean showHours) {
-        long hours = TimeUnit.MILLISECONDS.toHours(millis);
-        long minutes = TimeUnit.MILLISECONDS.toMinutes(millis) % TimeUnit.HOURS.toMinutes(1);
-        long seconds = TimeUnit.MILLISECONDS.toSeconds(millis) % TimeUnit.MINUTES.toSeconds(1);
-        if (showHours) {
-            return String.format("%d:%02d:%02d", hours, minutes, seconds);
-        } else {
-            return String.format("%d:%02d", minutes, seconds);
-        }
-    }
-}
diff --git a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/NavStateController.java b/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/NavStateController.java
deleted file mode 100644
index bb39e63..0000000
--- a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/NavStateController.java
+++ /dev/null
@@ -1,319 +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.cluster.sample;
-
-import android.annotation.Nullable;
-import android.content.Context;
-import android.graphics.drawable.Drawable;
-import android.os.Handler;
-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.ImageReference;
-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;
-
-/**
- * View controller for navigation state rendering.
- */
-public class NavStateController {
-    private static final String TAG = "Cluster.NavController";
-
-    private Handler mHandler = new Handler();
-
-    private ImageView mManeuver;
-    private ImageView mProvidedManeuver;
-    private LaneView mLane;
-    private LaneView mProvidedLane;
-    private TextView mDistance;
-    private TextView mSegment;
-    private TextView mEta;
-    private CueView mCue;
-    private Context mContext;
-    private ImageResolver mImageResolver;
-
-    /**
-     * Creates a controller to coordinate updates to the views displaying navigation state
-     * data.
-     *
-     * @param container {@link View} containing the navigation state views
-     */
-    public NavStateController(View container) {
-        mManeuver = container.findViewById(R.id.maneuver);
-        mProvidedManeuver = container.findViewById(R.id.provided_maneuver);
-        mLane = container.findViewById(R.id.lane);
-        mProvidedLane = container.findViewById(R.id.provided_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();
-    }
-
-    public void setImageResolver(@Nullable ImageResolver imageResolver) {
-        mImageResolver = imageResolver;
-    }
-
-    /**
-     * Updates views to reflect the provided navigation state
-     */
-    public void update(@Nullable NavigationState state) {
-        if (Log.isLoggable(TAG, Log.DEBUG)) {
-            Log.d(TAG, "Updating nav state: " + state);
-        }
-        Step step = state != null && state.getSteps().size() > 0 ? state.getSteps().get(0) : null;
-        Destination destination = state != null && !state.getDestinations().isEmpty()
-                ? state.getDestinations().get(0) : null;
-        ZonedDateTime eta = destination != null ? destination.getEta() : null;
-        Traffic traffic = destination != null ? destination.getTraffic() : null;
-
-        mEta.setText(eta != null ? formatEta(eta) : null);
-        mEta.setTextColor(getTrafficColor(traffic));
-        mManeuver.setImageDrawable(getManeuverIcon(step != null ? step.getManeuver() : null));
-        setProvidedManeuverIcon(mProvidedManeuver,
-                step != null ? step.getManeuver().getIcon() : null);
-        mDistance.setText(formatDistance(step != null ? step.getDistance() : null));
-        mSegment.setText(state != null ? getSegmentString(state.getCurrentSegment()) : null);
-        mCue.setRichText(step != null ? step.getCue() : null, mImageResolver);
-
-        if (step != null && step.getLanes().size() > 0) {
-            mProvidedLane.setLanes(step.getLanesImage(), mImageResolver);
-            mProvidedLane.setVisibility(View.VISIBLE);
-
-            mLane.setLanes(step.getLanes());
-            mLane.setVisibility(View.VISIBLE);
-        } else {
-            mLane.setVisibility(View.GONE);
-            mProvidedLane.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);
-        }
-    }
-
-    private String getSegmentString(Segment segment) {
-        if (segment != null) {
-            return segment.getName();
-        }
-
-        return null;
-    }
-
-    private void setProvidedManeuverIcon(ImageView view, ImageReference imageReference) {
-        if (mImageResolver == null || imageReference == null) {
-            view.setImageBitmap(null);
-            return;
-        }
-
-        mImageResolver
-                .getBitmap(imageReference, 0, view.getHeight())
-                .thenAccept(bitmap -> {
-                    mHandler.post(() -> {
-                        view.setImageBitmap(bitmap);
-                    });
-                })
-                .exceptionally(ex -> {
-                    if (Log.isLoggable(TAG, Log.DEBUG)) {
-                        Log.d(TAG, "Unable to fetch image for maneuver: " + imageReference);
-                    }
-                    return null;
-                });
-    }
-
-    private Drawable getManeuverIcon(@Nullable Maneuver maneuver) {
-        if (maneuver == null) {
-            return null;
-        }
-        switch (maneuver.getType()) {
-            case UNKNOWN:
-                return null;
-            case DEPART:
-                return mContext.getDrawable(R.drawable.direction_depart);
-            case NAME_CHANGE:
-                return mContext.getDrawable(R.drawable.direction_new_name_straight);
-            case KEEP_LEFT:
-                return mContext.getDrawable(R.drawable.direction_continue_left);
-            case KEEP_RIGHT:
-                return mContext.getDrawable(R.drawable.direction_continue_right);
-            case TURN_SLIGHT_LEFT:
-                return mContext.getDrawable(R.drawable.direction_turn_slight_left);
-            case TURN_SLIGHT_RIGHT:
-                return mContext.getDrawable(R.drawable.direction_turn_slight_right);
-            case TURN_NORMAL_LEFT:
-                return mContext.getDrawable(R.drawable.direction_turn_left);
-            case TURN_NORMAL_RIGHT:
-                return mContext.getDrawable(R.drawable.direction_turn_right);
-            case TURN_SHARP_LEFT:
-                return mContext.getDrawable(R.drawable.direction_turn_sharp_left);
-            case TURN_SHARP_RIGHT:
-                return mContext.getDrawable(R.drawable.direction_turn_sharp_right);
-            case U_TURN_LEFT:
-                return mContext.getDrawable(R.drawable.direction_uturn_left);
-            case U_TURN_RIGHT:
-                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:
-                return mContext.getDrawable(R.drawable.direction_on_ramp_slight_right);
-            case ON_RAMP_NORMAL_LEFT:
-                return mContext.getDrawable(R.drawable.direction_on_ramp_left);
-            case ON_RAMP_NORMAL_RIGHT:
-                return mContext.getDrawable(R.drawable.direction_on_ramp_right);
-            case ON_RAMP_SHARP_LEFT:
-                return mContext.getDrawable(R.drawable.direction_on_ramp_sharp_left);
-            case ON_RAMP_SHARP_RIGHT:
-                return mContext.getDrawable(R.drawable.direction_on_ramp_sharp_right);
-            case ON_RAMP_U_TURN_LEFT:
-                return mContext.getDrawable(R.drawable.direction_uturn_left);
-            case ON_RAMP_U_TURN_RIGHT:
-                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:
-                return mContext.getDrawable(R.drawable.direction_off_ramp_slight_right);
-            case OFF_RAMP_NORMAL_LEFT:
-                return mContext.getDrawable(R.drawable.direction_off_ramp_left);
-            case OFF_RAMP_NORMAL_RIGHT:
-                return mContext.getDrawable(R.drawable.direction_off_ramp_right);
-            case FORK_LEFT:
-                return mContext.getDrawable(R.drawable.direction_fork_left);
-            case FORK_RIGHT:
-                return mContext.getDrawable(R.drawable.direction_fork_right);
-            case MERGE_LEFT:
-                return mContext.getDrawable(R.drawable.direction_merge_left);
-            case MERGE_RIGHT:
-                return mContext.getDrawable(R.drawable.direction_merge_right);
-            case ROUNDABOUT_ENTER:
-                return mContext.getDrawable(R.drawable.direction_roundabout);
-            case ROUNDABOUT_EXIT:
-                return mContext.getDrawable(R.drawable.direction_roundabout);
-            case ROUNDABOUT_ENTER_AND_EXIT_CW_SHARP_RIGHT:
-                return mContext.getDrawable(R.drawable.direction_roundabout_cw_sharp_right);
-            case ROUNDABOUT_ENTER_AND_EXIT_CW_NORMAL_RIGHT:
-                return mContext.getDrawable(R.drawable.direction_roundabout_cw_right);
-            case ROUNDABOUT_ENTER_AND_EXIT_CW_SLIGHT_RIGHT:
-                return mContext.getDrawable(R.drawable.direction_roundabout_cw_slight_right);
-            case ROUNDABOUT_ENTER_AND_EXIT_CW_STRAIGHT:
-                return mContext.getDrawable(R.drawable.direction_roundabout_cw_straight);
-            case ROUNDABOUT_ENTER_AND_EXIT_CW_SHARP_LEFT:
-                return mContext.getDrawable(R.drawable.direction_roundabout_cw_sharp_left);
-            case ROUNDABOUT_ENTER_AND_EXIT_CW_NORMAL_LEFT:
-                return mContext.getDrawable(R.drawable.direction_roundabout_cw_left);
-            case ROUNDABOUT_ENTER_AND_EXIT_CW_SLIGHT_LEFT:
-                return mContext.getDrawable(R.drawable.direction_roundabout_cw_slight_left);
-            case ROUNDABOUT_ENTER_AND_EXIT_CW_U_TURN:
-                return mContext.getDrawable(R.drawable.direction_uturn_right);
-            case ROUNDABOUT_ENTER_AND_EXIT_CCW_SHARP_RIGHT:
-                return mContext.getDrawable(R.drawable.direction_roundabout_ccw_sharp_right);
-            case ROUNDABOUT_ENTER_AND_EXIT_CCW_NORMAL_RIGHT:
-                return mContext.getDrawable(R.drawable.direction_roundabout_ccw_right);
-            case ROUNDABOUT_ENTER_AND_EXIT_CCW_SLIGHT_RIGHT:
-                return mContext.getDrawable(R.drawable.direction_roundabout_ccw_slight_right);
-            case ROUNDABOUT_ENTER_AND_EXIT_CCW_STRAIGHT:
-                return mContext.getDrawable(R.drawable.direction_roundabout_ccw_straight);
-            case ROUNDABOUT_ENTER_AND_EXIT_CCW_SHARP_LEFT:
-                return mContext.getDrawable(R.drawable.direction_roundabout_ccw_sharp_left);
-            case ROUNDABOUT_ENTER_AND_EXIT_CCW_NORMAL_LEFT:
-                return mContext.getDrawable(R.drawable.direction_roundabout_ccw_left);
-            case ROUNDABOUT_ENTER_AND_EXIT_CCW_SLIGHT_LEFT:
-                return mContext.getDrawable(R.drawable.direction_roundabout_ccw_slight_left);
-            case ROUNDABOUT_ENTER_AND_EXIT_CCW_U_TURN:
-                return mContext.getDrawable(R.drawable.direction_uturn_left);
-            case STRAIGHT:
-                return mContext.getDrawable(R.drawable.direction_continue);
-            case FERRY_BOAT:
-                return mContext.getDrawable(R.drawable.direction_close);
-            case FERRY_TRAIN:
-                return mContext.getDrawable(R.drawable.direction_close);
-            case DESTINATION:
-                return mContext.getDrawable(R.drawable.direction_arrive);
-            case DESTINATION_STRAIGHT:
-                return mContext.getDrawable(R.drawable.direction_arrive_straight);
-            case DESTINATION_LEFT:
-                return mContext.getDrawable(R.drawable.direction_arrive_left);
-            case DESTINATION_RIGHT:
-                return mContext.getDrawable(R.drawable.direction_arrive_right);
-        }
-        return null;
-    }
-
-    private String formatDistance(@Nullable Distance distance) {
-        if (distance == null || distance.getDisplayUnit() == Distance.Unit.UNKNOWN) {
-            return null;
-        }
-
-        String unit = "";
-
-        switch (distance.getDisplayUnit()) {
-            case METERS:
-                unit = "m";
-                break;
-            case KILOMETERS:
-                unit = "km";
-                break;
-            case MILES:
-                unit = "mi";
-                break;
-            case YARDS:
-                unit = "yd";
-                break;
-            case FEET:
-                unit = "ft";
-                break;
-        }
-        return String.format("In %s %s", distance.getDisplayValue(), unit);
-    }
-}
diff --git a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/NavigationFragment.java b/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/NavigationFragment.java
deleted file mode 100644
index d35ba02..0000000
--- a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/NavigationFragment.java
+++ /dev/null
@@ -1,201 +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 android.content.Context;
-import android.graphics.Rect;
-import android.hardware.display.DisplayManager;
-import android.hardware.display.DisplayManager.DisplayListener;
-import android.hardware.display.VirtualDisplay;
-import android.os.Bundle;
-import android.os.Handler;
-import android.util.Log;
-import android.view.Display;
-import android.view.LayoutInflater;
-import android.view.Surface;
-import android.view.SurfaceHolder;
-import android.view.SurfaceHolder.Callback;
-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";
-
-    private SurfaceView mSurfaceView;
-    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)
-    private static VirtualDisplay mVirtualDisplay;
-    private static int mRegisteredNavDisplayId = Display.INVALID_DISPLAY;
-    private boolean mNavigationDisplayUpdatePending = false;
-
-    public NavigationFragment() {
-        // Required empty public constructor
-    }
-
-
-    private final DisplayListener mDisplayListener = new DisplayListener() {
-        @Override
-        public void onDisplayAdded(int displayId) {
-            int navDisplayId = getVirtualDisplayId();
-            Log.i(TAG, "onDisplayAdded, displayId: " + displayId
-                    + ", navigation display id: " + navDisplayId);
-
-            if (navDisplayId == displayId) {
-                mRegisteredNavDisplayId = displayId;
-                updateNavigationDisplay();
-            }
-        }
-
-        @Override
-        public void onDisplayRemoved(int displayId) {
-            if (mRegisteredNavDisplayId == displayId) {
-                mRegisteredNavDisplayId = Display.INVALID_DISPLAY;
-                updateNavigationDisplay();
-            }
-        }
-
-        @Override
-        public void onDisplayChanged(int displayId) {}
-    };
-
-    private void updateNavigationDisplay() {
-        if (mMainClusterActivity == null) {
-            // Not attached to the activity yet. Let's wait.
-            mNavigationDisplayUpdatePending = true;
-            return;
-        }
-
-        mNavigationDisplayUpdatePending = false;
-        mMainClusterActivity.updateNavDisplay(new MainClusterActivity.VirtualDisplay(
-                mRegisteredNavDisplayId, mUnobscuredBounds));
-    }
-
-    @Override
-    public void onAttach(Context context) {
-        super.onAttach(context);
-        mMainClusterActivity = (MainClusterActivity) context;
-        if (mNavigationDisplayUpdatePending) {
-            updateNavigationDisplay();
-        }
-    }
-
-    @Override
-    public void onDetach() {
-        mMainClusterActivity = null;
-        super.onDetach();
-    }
-
-    @Override
-    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());
-
-        // Inflate the layout for this fragment
-        View root = inflater.inflate(R.layout.fragment_navigation, container, false);
-
-        mSurfaceView = root.findViewById(R.id.nav_surface);
-        mSurfaceView.getHolder().addCallback(new Callback() {
-            @Override
-            public void surfaceCreated(SurfaceHolder holder) {
-                Log.i(TAG, "surfaceCreated, holder: " + holder);
-            }
-
-            @Override
-            public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
-                Log.i(TAG, "surfaceChanged, holder: " + holder + ", size:" + width + "x" + height
-                        + ", format:" + format);
-
-                // 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);
-                } else {
-                    mVirtualDisplay.setSurface(holder.getSurface());
-                }
-            }
-
-            @Override
-            public void surfaceDestroyed(SurfaceHolder holder) {
-                Log.i(TAG, "surfaceDestroyed, holder: " + holder + ", detaching surface from"
-                        + " display, surface: " + holder.getSurface());
-                // detaching surface is similar to turning off the display
-                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;
-    }
-
-    private VirtualDisplay createVirtualDisplay(Surface surface, int width, int height) {
-        Log.i(TAG, "createVirtualDisplay, surface: " + surface + ", width: " + width
-                + "x" + height);
-        return mDisplayManager.createVirtualDisplay("Cluster-App-VD", width, height, 160, surface,
-                DisplayManager.VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY);
-    }
-
-    @Override
-    public void onDestroy() {
-        super.onDestroy();
-        Log.i(TAG, "onDestroy");
-    }
-
-    private int getVirtualDisplayId() {
-        return (mVirtualDisplay != null && mVirtualDisplay.getDisplay() != null)
-                ? mVirtualDisplay.getDisplay().getDisplayId() : Display.INVALID_DISPLAY;
-    }
-}
diff --git a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/NetworkedVirtualDisplay.java b/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/NetworkedVirtualDisplay.java
deleted file mode 100644
index ba64ce5..0000000
--- a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/NetworkedVirtualDisplay.java
+++ /dev/null
@@ -1,452 +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.cluster.sample;
-
-import android.annotation.NonNull;
-import android.content.Context;
-import android.hardware.display.DisplayManager;
-import android.hardware.display.DisplayManager.DisplayListener;
-import android.hardware.display.VirtualDisplay;
-import android.media.MediaCodec;
-import android.media.MediaCodec.BufferInfo;
-import android.media.MediaCodec.CodecException;
-import android.media.MediaCodecInfo;
-import android.media.MediaCodecInfo.CodecProfileLevel;
-import android.media.MediaFormat;
-import android.os.Handler;
-import android.os.HandlerThread;
-import android.os.Looper;
-import android.os.Message;
-import android.util.Log;
-import android.view.Display;
-import android.view.Surface;
-
-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;
-import java.util.UUID;
-
-/**
- * This class encapsulates all work related to managing networked virtual display.
- * <p>
- * 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();
-
-    private final String mUniqueId =  UUID.randomUUID().toString();
-
-    private final DisplayManager mDisplayManager;
-    private final int mWidth;
-    private final int mHeight;
-    private final int mDpi;
-
-    private static final int FPS = 25;
-    private static final int BITRATE = 6144000;
-    private static final String MEDIA_FORMAT_MIMETYPE = MediaFormat.MIMETYPE_VIDEO_AVC;
-
-    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 Handler mHandler;
-    private byte[] mBuffer = null;
-    private int mLastFrameLength = 0;
-
-    private final DebugCounter mCounter = new DebugCounter();
-
-    NetworkedVirtualDisplay(Context context, int width, int height, int dpi) {
-        mDisplayManager = context.getSystemService(DisplayManager.class);
-        mWidth = width;
-        mHeight = height;
-        mDpi = dpi;
-
-        DisplayListener displayListener = new DisplayListener() {
-            @Override
-            public void onDisplayAdded(int i) {
-                final Display display = mDisplayManager.getDisplay(i);
-                if (display != null && getDisplayName().equals(display.getName())) {
-                    onVirtualDisplayReady(display);
-                }
-            }
-
-            @Override
-            public void onDisplayRemoved(int i) {}
-
-            @Override
-            public void onDisplayChanged(int i) {}
-        };
-
-        mDisplayManager.registerDisplayListener(displayListener, new Handler());
-    }
-
-    /**
-     * Opens socket and creates virtual display asynchronously once connection established.  Clients
-     * of this class may subscribe to
-     * {@link android.hardware.display.DisplayManager#registerDisplayListener(
-     * DisplayListener, Handler)} to be notified when virtual display is created.
-     * Note, that this method should be called only once.
-     *
-     * @return Unique display name associated with the instance of this class.
-     *
-     * @see {@link Display#getName()}
-     *
-     * @throws IllegalStateException thrown if networked display already started
-     */
-    public String start() {
-        if (mBroadcastThread.isAlive()) {
-            throw new IllegalStateException("Already started");
-        }
-
-        mBroadcastThread.start();
-        mHandler = new BroadcastThreadHandler(mBroadcastThread.getLooper());
-        mHandler.sendMessage(Message.obtain(mHandler, MSG_START));
-        return getDisplayName();
-    }
-
-    public void release() {
-        mHandler.sendMessage(Message.obtain(mHandler, MSG_STOP));
-        mBroadcastThread.quitSafely();
-
-        if (mVirtualDisplay != null) {
-            mVirtualDisplay.setSurface(null);
-            mVirtualDisplay.release();
-            mVirtualDisplay = null;
-        }
-    }
-
-    private String getDisplayName() {
-        return "Cluster-" + mUniqueId;
-    }
-
-    private VirtualDisplay createVirtualDisplay() {
-        Log.i(TAG, "createVirtualDisplay " + mWidth + "x" + mHeight +"@" + mDpi);
-        return mDisplayManager.createVirtualDisplay(getDisplayName(), mWidth, mHeight, mDpi,
-                null, 0 /* flags */, null, null );
-    }
-
-    private void onVirtualDisplayReady(Display display) {
-        Log.i(TAG, "onVirtualDisplayReady, display: " + display);
-    }
-
-    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");
-    }
-
-    private MediaCodec createVideoStream(Handler handler) {
-        MediaCodec encoder;
-        try {
-            encoder = MediaCodec.createEncoderByType(MEDIA_FORMAT_MIMETYPE);
-        } catch (IOException e) {
-            Log.e(TAG, "Failed to create video encoder for " + MEDIA_FORMAT_MIMETYPE, e);
-            return null;
-        }
-
-        encoder.setCallback(new MediaCodec.Callback() {
-            @Override
-            public void onInputBufferAvailable(@NonNull MediaCodec codec, int index) {
-                // Nothing to do
-            }
-
-            @Override
-            public void onOutputBufferAvailable(@NonNull MediaCodec codec, int index,
-                    @NonNull BufferInfo info) {
-                mCounter.outputBuffers++;
-                doOutputBufferAvailable(index, info);
-            }
-
-            @Override
-            public void onError(@NonNull MediaCodec codec, @NonNull CodecException e) {
-                Log.e(TAG, "onError, codec: " + codec, e);
-                mCounter.bufferErrors++;
-                stopCasting();
-                startCasting(handler);
-            }
-
-            @Override
-            public void onOutputFormatChanged(@NonNull MediaCodec codec,
-                    @NonNull MediaFormat format) {
-                Log.i(TAG, "onOutputFormatChanged, codec: " + codec + ", format: " + format);
-
-            }
-        }, handler);
-
-        configureVideoEncoder(encoder, mWidth, mHeight);
-        return encoder;
-    }
-
-    private void doOutputBufferAvailable(int index, @NonNull BufferInfo info) {
-        mHandler.removeMessages(MSG_SEND_FRAME);
-
-        ByteBuffer encodedData = mVideoEncoder.getOutputBuffer(index);
-        if (encodedData == null) {
-            throw new RuntimeException("couldn't fetch buffer at index " + index);
-        }
-
-        if (info.size != 0) {
-            encodedData.position(info.offset);
-            encodedData.limit(info.offset + info.size);
-            mLastFrameLength = encodedData.remaining();
-            if (mBuffer == null || mBuffer.length < mLastFrameLength) {
-                Log.i(TAG, "Allocating new buffer: " + mLastFrameLength);
-                mBuffer = new byte[mLastFrameLength];
-            }
-            encodedData.get(mBuffer, 0, mLastFrameLength);
-            mVideoEncoder.releaseOutputBuffer(index, false);
-
-            // 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 sendFrameAsync(long delayMs) {
-        Message msg = mHandler.obtainMessage(MSG_SEND_FRAME);
-        mHandler.sendMessageDelayed(msg, delayMs);
-    }
-
-    private void sendFrame(byte[] buf, int len) {
-        if (mActiveThread != null) {
-            mActiveThread.send(buf, len);
-        }
-    }
-
-    private void stopCasting() {
-        Log.i(TAG, "Stopping casting...");
-
-        if (mVirtualDisplay != null) {
-            Surface surface = mVirtualDisplay.getSurface();
-            if (surface != null) surface.release();
-        }
-
-        if (mVideoEncoder != null) {
-            // Releasing encoder as stop/start didn't work well (couldn't create or reuse input
-            // surface).
-            try {
-                mVideoEncoder.stop();
-                mVideoEncoder.release();
-            } catch (IllegalStateException e) {
-                // do nothing, already released
-            }
-            mVideoEncoder = null;
-        }
-        Log.i(TAG, "Casting stopped");
-    }
-
-    private class BroadcastThreadHandler extends Handler {
-        private static final int MAX_FAIL_COUNT = 10;
-        private int mFailConnectCounter;
-
-        BroadcastThreadHandler(Looper looper) {
-            super(looper);
-        }
-
-        @Override
-        public void handleMessage(Message msg) {
-            switch (msg.what) {
-                case MSG_START:
-                    Log.i(TAG, "Received start message");
-
-                    // Make sure mActiveThread cannot start multiple times
-                    if (mActiveThread != null) {
-                        Log.w(TAG, "Trying to start a running thread. Race condition may exist");
-                        break;
-                    }
-
-                    // Failure to connect to either pipe or network returns null
-                    if (mActiveThread == null) {
-                        mActiveThread = tryPipeConnect();
-                    }
-                    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;
-                    }
-
-                    try {
-                        mFailConnectCounter = 0;
-                        mCounter.clientsConnected++;
-                        mActiveThread.start();
-                        startCasting(this);
-                    } catch (Exception e) {
-                        Log.e(TAG, "Failed to start thread", e);
-                        Log.e(TAG, "DebugCounter: " + mCounter);
-                    }
-                    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_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.
-                    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) {
-        MediaFormat format = MediaFormat.createVideoFormat(MEDIA_FORMAT_MIMETYPE, width, height);
-
-        format.setInteger(MediaFormat.KEY_COLOR_FORMAT,
-                MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface);
-        format.setInteger(MediaFormat.KEY_BIT_RATE, BITRATE);
-        format.setInteger(MediaFormat.KEY_FRAME_RATE, FPS);
-        format.setInteger(MediaFormat.KEY_CAPTURE_RATE, FPS);
-        format.setInteger(MediaFormat.KEY_CHANNEL_COUNT, 1);
-        format.setFloat(MediaFormat.KEY_I_FRAME_INTERVAL, 1); // 1 second between I-frames
-        format.setInteger(MediaFormat.KEY_LEVEL, CodecProfileLevel.AVCLevel31);
-        format.setInteger(MediaFormat.KEY_PROFILE,
-                MediaCodecInfo.CodecProfileLevel.AVCProfileBaseline);
-
-        codec.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
-    }
-
-    @Override
-    public String toString() {
-        return getClass() + "{"
-                + ", receiver connected: " + (mActiveThread != null)
-                + ", encoder: " + mVideoEncoder
-                + ", virtualDisplay" + mVirtualDisplay
-                + "}";
-    }
-
-    private static class DebugCounter {
-        long outputBuffers;
-        long bufferErrors;
-        long clientsConnected;
-        long clientsDisconnected;
-
-        @Override
-        public String toString() {
-            return getClass().getSimpleName() + "{"
-                    + "outputBuffers=" + outputBuffers
-                    + ", bufferErrors=" + bufferErrors
-                    + ", clientsConnected=" + clientsConnected
-                    + ", clientsDisconnected= " + clientsDisconnected
-                    + "}";
-        }
-    }
-}
diff --git a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/PhoneFragment.java b/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/PhoneFragment.java
deleted file mode 100644
index c546f9d..0000000
--- a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/PhoneFragment.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * 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.cluster.sample;
-
-import android.os.Bundle;
-import android.telephony.TelephonyManager;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.fragment.app.Fragment;
-import androidx.fragment.app.FragmentActivity;
-import androidx.lifecycle.ViewModelProviders;
-
-import com.android.car.telephony.common.TelecomUtils;
-
-/**
- * Displays ongoing call information.
- */
-public class PhoneFragment extends Fragment {
-    private View mUserProfileContainerView;
-
-    private PhoneFragmentViewModel mViewModel;
-
-    public PhoneFragment() {
-        // Required empty public constructor
-    }
-
-    @Nullable
-    @Override
-    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
-            Bundle savedInstanceState) {
-        FragmentActivity activity = requireActivity();
-        mViewModel = ViewModelProviders.of(activity).get(
-                PhoneFragmentViewModel.class);
-
-        View fragmentView = inflater.inflate(R.layout.fragment_phone, container, false);
-        mUserProfileContainerView = fragmentView.findViewById(R.id.user_profile_container);
-
-        TextView body = mUserProfileContainerView.findViewById(R.id.body);
-        ImageView avatar = mUserProfileContainerView.findViewById(R.id.avatar);
-        TextView nameView = mUserProfileContainerView.findViewById(R.id.title);
-
-        mViewModel.getContactInfo().observe(getViewLifecycleOwner(), (contactInfo) -> {
-            nameView.setText(contactInfo.getDisplayName());
-            TelecomUtils.setContactBitmapAsync(getContext(),
-                    avatar, contactInfo.getContact(), contactInfo.getNumber());
-        });
-        mViewModel.getBody().observe(getViewLifecycleOwner(), body::setText);
-        mViewModel.getState().observe(getViewLifecycleOwner(), (state) -> {
-            if (state == TelephonyManager.CALL_STATE_IDLE) {
-                mUserProfileContainerView.setVisibility(View.GONE);
-            } else {
-                mUserProfileContainerView.setVisibility(View.VISIBLE);
-            }
-        });
-
-        return fragmentView;
-    }
-}
diff --git a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/PhoneFragmentViewModel.java b/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/PhoneFragmentViewModel.java
deleted file mode 100644
index dd955e1..0000000
--- a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/PhoneFragmentViewModel.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * 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.cluster.sample;
-
-import static androidx.lifecycle.Transformations.map;
-
-import android.app.Application;
-import android.content.Context;
-import android.telephony.PhoneStateListener;
-import android.telephony.TelephonyManager;
-
-import androidx.lifecycle.AndroidViewModel;
-import androidx.lifecycle.LiveData;
-import androidx.lifecycle.MutableLiveData;
-
-import com.android.car.telephony.common.Contact;
-import com.android.car.telephony.common.InMemoryPhoneBook;
-import com.android.car.telephony.common.TelecomUtils;
-
-/**
- * View model for {@link PhoneFragment}
- */
-public final class PhoneFragmentViewModel extends AndroidViewModel {
-    private MutableLiveData<Long> mConnectTime = new MutableLiveData<>();
-    private MutableLiveData<Integer> mState = new MutableLiveData<>();
-    private MutableLiveData<String> mNumber = new MutableLiveData<>();
-    private LiveData<String> mBody;
-    private LiveData<ContactInfo> mContactInfo;
-
-    private PhoneStateCallback mCallback;
-
-    public PhoneFragmentViewModel(Application application) {
-        super(application);
-
-        TelephonyManager telephonyManager = (TelephonyManager) application.getSystemService(
-                Context.TELEPHONY_SERVICE);
-        telephonyManager.listen(new ClusterPhoneStateListener(),
-                PhoneStateListener.LISTEN_CALL_STATE);
-
-        mBody = new SelfRefreshDescriptionLiveData(getApplication(), mState, mNumber, mConnectTime);
-
-        mContactInfo = map(mNumber, (number) -> {
-            return new ContactInfo(number);
-        });
-    }
-
-    public interface PhoneStateCallback {
-        void onCall();
-
-        void onDisconnect();
-    }
-
-    public LiveData<Integer> getState() {
-        return mState;
-    }
-
-    public LiveData<String> getBody() {
-        return mBody;
-    }
-
-    public LiveData<ContactInfo> getContactInfo() {
-        return mContactInfo;
-    }
-
-    public void setPhoneStateCallback(PhoneStateCallback callback) {
-        mCallback = callback;
-    }
-
-    /**
-     * Listens to phone state changes
-     */
-    private class ClusterPhoneStateListener extends PhoneStateListener {
-        ClusterPhoneStateListener() {
-        }
-
-        @Override
-        public void onCallStateChanged(int state, String incomingNumber) {
-            super.onCallStateChanged(state, incomingNumber);
-
-            mState.setValue(state);
-            mNumber.setValue(incomingNumber);
-
-            if (state == TelephonyManager.CALL_STATE_IDLE) {
-                if (mCallback != null) {
-                    mCallback.onDisconnect();
-                }
-            } else if (state == TelephonyManager.CALL_STATE_RINGING) {
-                if (mCallback != null) {
-                    mCallback.onCall();
-                }
-            } else if (state == TelephonyManager.CALL_STATE_OFFHOOK) {
-                mConnectTime.setValue(System.currentTimeMillis());
-                if (mCallback != null) {
-                    mCallback.onCall();
-                }
-            }
-        }
-    }
-
-    public class ContactInfo {
-        private String mNumber;
-        private String mDisplayName;
-        private Contact mContact;
-
-        public ContactInfo(String number) {
-            mNumber = number;
-            mDisplayName = TelecomUtils.getDisplayNameAndAvatarUri(getApplication(), number).first;
-            mContact = InMemoryPhoneBook.get().lookupContactEntry(number);
-        }
-
-        public String getNumber() {
-            return mNumber;
-        }
-
-        public String getDisplayName() {
-            return mDisplayName;
-        }
-
-        public Contact getContact() {
-            return mContact;
-        }
-    }
-}
diff --git a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/PipeThread.java b/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/PipeThread.java
deleted file mode 100644
index c96f482..0000000
--- a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/PipeThread.java
+++ /dev/null
@@ -1,81 +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.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/SelfRefreshDescriptionLiveData.java b/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/SelfRefreshDescriptionLiveData.java
deleted file mode 100644
index 79122c4..0000000
--- a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/SelfRefreshDescriptionLiveData.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * 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.cluster.sample;
-
-import android.content.Context;
-import android.telephony.TelephonyManager;
-import android.text.TextUtils;
-import android.text.format.DateUtils;
-
-import androidx.lifecycle.LiveData;
-import androidx.lifecycle.MediatorLiveData;
-
-import com.android.car.telephony.common.TelecomUtils;
-
-/**
- * Emits the description for the body in {@link PhoneFragmentViewModel}.
- *
- * This description may be the current duration of the call, call state, call type,
- * or a combination of them.
- *
- * Possible strings:
- * "Ringing"
- * "1:05"
- * "Mobile · Dialing"
- * "Mobile · 1:05"
- */
-public class SelfRefreshDescriptionLiveData extends MediatorLiveData<String> {
-    private final LiveData<Long> mConnectTimeLiveData;
-    private final LiveData<String> mNumberLiveData;
-    private final LiveData<Integer> mStateLiveData;
-    private final Context mContext;
-
-    /**
-     * @param stateLiveData       LiveData holding the {@link TelephonyManager} call state
-     * @param numberLiveData      LiveData holding the call number
-     * @param connectTimeLiveData LiveData holding the starting timestamp of the call
-     */
-    public SelfRefreshDescriptionLiveData(Context context,
-            LiveData<Integer> stateLiveData,
-            LiveData<String> numberLiveData,
-            LiveData<Long> connectTimeLiveData) {
-        mContext = context;
-        mNumberLiveData = numberLiveData;
-        mStateLiveData = stateLiveData;
-        mConnectTimeLiveData = connectTimeLiveData;
-
-        HeartBeatLiveData heartBeatLiveData = new HeartBeatLiveData(DateUtils.SECOND_IN_MILLIS);
-
-        addSource(stateLiveData, (trigger) -> updateDescription());
-        addSource(heartBeatLiveData, (trigger) -> updateDescription());
-        addSource(mNumberLiveData, (trigger) -> updateDescription());
-        addSource(mConnectTimeLiveData, (trigger) -> updateDescription());
-    }
-
-    private void updateDescription() {
-        String number = mNumberLiveData.getValue();
-        Integer callState = mStateLiveData.getValue();
-        Long connectTime = mConnectTimeLiveData.getValue();
-        if (callState != null) {
-            String newDescription = getCallInfoText(mContext, callState, number,
-                    connectTime != null ? connectTime : 0);
-
-            String oldDescription = getValue();
-            if (!newDescription.equals(oldDescription)) {
-                setValue(newDescription);
-            }
-        } else {
-            setValue("");
-        }
-    }
-
-    /**
-     * @return A formatted string that has information about the phone call
-     * Possible strings:
-     * "Mobile · Dialing"
-     * "Mobile · 1:05"
-     */
-    private String getCallInfoText(Context context, Integer callState, String number,
-            Long connectTime) {
-        CharSequence label = TelecomUtils.getTypeFromNumber(context, number);
-        String text = "";
-        if (callState == TelephonyManager.CALL_STATE_OFFHOOK) {
-            long duration = connectTime > 0 ? System.currentTimeMillis()
-                    - connectTime : 0;
-            String durationString = DateUtils.formatElapsedTime(duration / 1000);
-            if (!TextUtils.isEmpty(durationString) && !TextUtils.isEmpty(label)) {
-                text = context.getString(R.string.phone_label_with_info, label,
-                        durationString);
-            } else if (!TextUtils.isEmpty(durationString)) {
-                text = durationString;
-            } else if (!TextUtils.isEmpty(label)) {
-                text = (String) label;
-            }
-        } else {
-            String state = callStateToUiString(context, callState);
-            if (!TextUtils.isEmpty(label)) {
-                text = context.getString(R.string.phone_label_with_info, label, state);
-            } else {
-                text = state;
-            }
-        }
-
-        return text;
-    }
-
-    /**
-     * @return A string representation of the call state that can be presented to a user.
-     */
-    private String callStateToUiString(Context context, int state) {
-        switch (state) {
-            case TelephonyManager.CALL_STATE_IDLE:
-                return context.getString(R.string.call_state_call_ended);
-            case TelephonyManager.CALL_STATE_RINGING:
-                return context.getString(R.string.call_state_call_ringing);
-            case TelephonyManager.CALL_STATE_OFFHOOK:
-                return context.getString(R.string.call_state_call_active);
-            default:
-                return "";
-        }
-    }
-}
diff --git a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/SenderThread.java b/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/SenderThread.java
deleted file mode 100644
index 9def7ee..0000000
--- a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/SenderThread.java
+++ /dev/null
@@ -1,47 +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.cluster.sample;
-import android.os.Handler;
-import android.os.Message;
-import android.util.Log;
-
-/**
- * This class serves as a template for sending to specific clients of the broadcaster.
- */
-public abstract class SenderThread extends Thread {
-    private static final String TAG = "Cluster.SenderThread";
-
-    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.
-     */
-    synchronized void restart() {
-        if (mHandler.hasMessages(NetworkedVirtualDisplay.MSG_START)) return;
-        Log.i(TAG, "Sending STOP and START msgs to NetworkedVirtualDisplay");
-
-        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
deleted file mode 100644
index a5215b0..0000000
--- a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/SocketThread.java
+++ /dev/null
@@ -1,86 +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.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
deleted file mode 100644
index 8f01cd7..0000000
--- a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/sensors/Sensor.java
+++ /dev/null
@@ -1,65 +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.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
deleted file mode 100644
index 90d6350..0000000
--- a/tests/DirectRenderingClusterSample/src/android/car/cluster/sample/sensors/Sensors.java
+++ /dev/null
@@ -1,144 +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.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 meters */
-    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 meters per second */
-    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/DirectRenderingClusterSample/tests/Android.mk b/tests/DirectRenderingClusterSample/tests/Android.mk
deleted file mode 100644
index 9f0a4e8..0000000
--- a/tests/DirectRenderingClusterSample/tests/Android.mk
+++ /dev/null
@@ -1,19 +0,0 @@
-# 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.
-
-LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
-
-# Include all makefiles in subdirectories
-include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/tests/DirectRenderingClusterSample/tests/robotests/Android.mk b/tests/DirectRenderingClusterSample/tests/robotests/Android.mk
deleted file mode 100644
index 4dd6b7a..0000000
--- a/tests/DirectRenderingClusterSample/tests/robotests/Android.mk
+++ /dev/null
@@ -1,46 +0,0 @@
-#############################################
-# Messenger Robolectric test target. #
-#############################################
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := DirectRenderingClusterSampleTests
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-LOCAL_RESOURCE_DIR := \
-    $(LOCAL_PATH)/res
-
-LOCAL_JAVA_LIBRARIES := \
-    robolectric_android-all-stub \
-    Robolectric_all-target \
-    mockito-robolectric-prebuilt \
-    truth-prebuilt 
-
-LOCAL_INSTRUMENTATION_FOR := DirectRenderingClusterSample
-
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_STATIC_JAVA_LIBRARY)
-
-#############################################################
-# Messenger runner target to run the previous target. #
-#############################################################
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := RunDirectRenderingClusterSampleTests
-
-LOCAL_SDK_VERSION := current
-
-LOCAL_STATIC_JAVA_LIBRARIES := \
-    DirectRenderingClusterSampleTests
-
-LOCAL_TEST_PACKAGE := DirectRenderingClusterSample
-
-LOCAL_INSTRUMENT_SOURCE_DIRS := $(dir $(LOCAL_PATH))../src
-
-include prebuilts/misc/common/robolectric/3.6.1/run_robotests.mk
-
-
-
-
diff --git a/tests/DirectRenderingClusterSample/tests/robotests/AndroidManifest.xml b/tests/DirectRenderingClusterSample/tests/robotests/AndroidManifest.xml
deleted file mode 100644
index ad22fc2..0000000
--- a/tests/DirectRenderingClusterSample/tests/robotests/AndroidManifest.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?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"
-          package="android.car.cluster.sample.robotests">
-    <application/>
-
-</manifest>
diff --git a/tests/DirectRenderingClusterSample/tests/robotests/readme.md b/tests/DirectRenderingClusterSample/tests/robotests/readme.md
deleted file mode 100644
index 97cff08..0000000
--- a/tests/DirectRenderingClusterSample/tests/robotests/readme.md
+++ /dev/null
@@ -1,6 +0,0 @@
-Unit test suite for RenderingClusterSample using Robolectric.
-
-```
-$ croot
-$ make RunDirectRenderingClusterSampleTests -j96
-```
\ No newline at end of file
diff --git a/tests/DirectRenderingClusterSample/tests/robotests/src/android/car/cluster/sample/ImageResolverTest.java b/tests/DirectRenderingClusterSample/tests/robotests/src/android/car/cluster/sample/ImageResolverTest.java
deleted file mode 100644
index 0d1cece..0000000
--- a/tests/DirectRenderingClusterSample/tests/robotests/src/android/car/cluster/sample/ImageResolverTest.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * 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.cluster.sample;
-
-import static org.junit.Assert.assertEquals;
-
-import android.graphics.Point;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.annotation.internal.DoNotInstrument;
-
-@RunWith(RobolectricTestRunner.class)
-@DoNotInstrument
-public class ImageResolverTest {
-    private ImageResolver mImageResolver;
-
-    @Before
-    public void setup() {
-        mImageResolver = new ImageResolver((uri) -> null);
-    }
-
-    @Test
-    public void adjustedSize_widerImageInSquareBox() {
-        assertEquals(new Point(20, 10), mImageResolver.getAdjustedSize(40, 20, 20, 20));
-    }
-
-    @Test
-    public void adjustedSize_tallerImageInSquareBox() {
-        assertEquals(new Point(10, 20), mImageResolver.getAdjustedSize(20, 40, 20, 20));
-    }
-
-    @Test
-    public void adjustedSize_narrowerImageInSquareBox() {
-        assertEquals(new Point(10, 20), mImageResolver.getAdjustedSize(5, 10, 20, 20));
-    }
-
-    @Test
-    public void adjustedSize_shorterImageInSquareBox() {
-        assertEquals(new Point(20, 8), mImageResolver.getAdjustedSize(5, 2, 20, 20));
-    }
-
-    @Test
-    public void adjustedSize_widerImageInTallRectangle() {
-        assertEquals(new Point(20, 10), mImageResolver.getAdjustedSize(40, 20, 20, 40));
-    }
-
-    @Test
-    public void adjustedSize_tallerImageInTallRectangle() {
-        assertEquals(new Point(20, 40), mImageResolver.getAdjustedSize(5, 10, 20, 40));
-    }
-
-    @Test
-    public void adjustedSize_widerImageInWideRectangle() {
-        assertEquals(new Point(40, 20), mImageResolver.getAdjustedSize(10, 5, 40, 20));
-    }
-
-    @Test
-    public void adjustedSize_tallerImageInWideRectangle() {
-        assertEquals(new Point(10, 20), mImageResolver.getAdjustedSize(5, 10, 40, 20));
-    }
-
-    @Test
-    public void adjustedSize_nullIfNoOriginalWidth() {
-        assertEquals(null, mImageResolver.getAdjustedSize(0, 10, 40, 20));
-    }
-
-    @Test
-    public void adjustedSize_nullIfNoOriginalHeight() {
-        assertEquals(null, mImageResolver.getAdjustedSize(5, 0, 40, 20));
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void adjustedSize_exceptionIfRequestedWidthAndHeightNoProvided() {
-        assertEquals(null, mImageResolver.getAdjustedSize(5, 10, 0, 0));
-    }
-
-    @Test
-    public void adjustedSize_flexibleWidth() {
-        assertEquals(new Point(20, 30), mImageResolver.getAdjustedSize(40, 60, 0, 30));
-    }
-
-    @Test
-    public void adjustedSize_flexibleHeight() {
-        assertEquals(new Point(20, 20), mImageResolver.getAdjustedSize(40, 40, 20, 0));
-    }
-}
diff --git a/tests/EmbeddedKitchenSinkApp/Android.mk b/tests/EmbeddedKitchenSinkApp/Android.mk
index 65de56e..386044c 100644
--- a/tests/EmbeddedKitchenSinkApp/Android.mk
+++ b/tests/EmbeddedKitchenSinkApp/Android.mk
@@ -49,6 +49,7 @@
     android.hardware.automotive.vehicle-V2.0-java \
     vehicle-hal-support-lib \
     com.android.car.keventreader-client \
+    guava \
     kitchensink-gson
 
 LOCAL_JAVA_LIBRARIES += android.car
diff --git a/tests/EmbeddedKitchenSinkApp/res/layout/audio.xml b/tests/EmbeddedKitchenSinkApp/res/layout/audio.xml
index b918058..a7ff363 100644
--- a/tests/EmbeddedKitchenSinkApp/res/layout/audio.xml
+++ b/tests/EmbeddedKitchenSinkApp/res/layout/audio.xml
@@ -32,6 +32,22 @@
     <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
+        android:orientation="horizontal"
+        android:layout_weight="1" >
+        <TextView
+            android:id="@+id/zone_selection_title"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/select_zone" />
+        <Spinner
+            android:id="@+id/zone_spinner"
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="10dp"/>
+    </LinearLayout>
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
         android:orientation="vertical"
         android:layout_weight="1" >
         <LinearLayout
diff --git a/tests/EmbeddedKitchenSinkApp/res/layout/connectivity_fragment.xml b/tests/EmbeddedKitchenSinkApp/res/layout/connectivity_fragment.xml
index dc2d01a..c6e75fe 100644
--- a/tests/EmbeddedKitchenSinkApp/res/layout/connectivity_fragment.xml
+++ b/tests/EmbeddedKitchenSinkApp/res/layout/connectivity_fragment.xml
@@ -179,4 +179,39 @@
         </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
 
     </LinearLayout>
+
+    <LinearLayout
+        android:orientation="horizontal"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_margin="4dp">
+        <Button android:id="@+id/networkEnableWifiIntent"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="Enable Wifi Intent"/>
+        <Button android:id="@+id/networkDisableWifiIntent"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="Disable Wifi Intent"/>
+    </LinearLayout>
+
+    <LinearLayout
+        android:orientation="horizontal"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_margin="4dp">
+        <Button android:id="@+id/networkEnableBluetoothIntent"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="Enable Bluetooth Intent"/>
+        <Button android:id="@+id/networkDisableBluetoothIntent"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="Disable Bluetooth Intent"/>
+        <Button android:id="@+id/networkDiscoverableBluetoothIntent"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="Discoverable Bluetooth Intent"/>
+    </LinearLayout>
+
 </LinearLayout>
diff --git a/tests/EmbeddedKitchenSinkApp/res/layout/projection_status.xml b/tests/EmbeddedKitchenSinkApp/res/layout/projection_status.xml
new file mode 100644
index 0000000..65ccbe8
--- /dev/null
+++ b/tests/EmbeddedKitchenSinkApp/res/layout/projection_status.xml
@@ -0,0 +1,55 @@
+<?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:orientation="vertical"
+              android:layout_width="match_parent"
+              android:layout_height="match_parent">
+
+    <LinearLayout android:layout_width="wrap_content"
+                  android:layout_height="wrap_content"
+                  android:orientation="horizontal">
+        <TextView android:layout_width="wrap_content"
+                  android:layout_height="wrap_content"
+                  android:text="Current Projection State: "/>
+        <TextView android:layout_width="wrap_content"
+                  android:layout_height="wrap_content"
+                  android:text="Inactive"
+                  android:id="@+id/current_projection_status"/>
+    </LinearLayout>
+    <LinearLayout android:layout_width="wrap_content"
+                  android:layout_height="wrap_content"
+                  android:orientation="horizontal">
+        <TextView android:layout_width="wrap_content"
+                  android:layout_height="wrap_content"
+                  android:text="Current Projection Package: "/>
+        <TextView android:layout_width="wrap_content"
+                  android:layout_height="wrap_content"
+                  android:text="Unknown"
+                  android:id="@+id/current_projection_package"/>
+    </LinearLayout>
+    <LinearLayout android:layout_width="wrap_content"
+                  android:layout_height="wrap_content"
+                  android:orientation="vertical">
+        <TextView android:layout_width="wrap_content"
+                  android:layout_height="wrap_content"
+                  android:text="Current Projection Details: "/>
+        <LinearLayout android:layout_width="wrap_content"
+                      android:layout_height="wrap_content"
+                      android:orientation="vertical"
+                      android:id="@+id/current_projection_details"/>
+    </LinearLayout>
+
+</LinearLayout>
diff --git a/tests/EmbeddedKitchenSinkApp/res/layout/projection_status_details.xml b/tests/EmbeddedKitchenSinkApp/res/layout/projection_status_details.xml
new file mode 100644
index 0000000..ec06152
--- /dev/null
+++ b/tests/EmbeddedKitchenSinkApp/res/layout/projection_status_details.xml
@@ -0,0 +1,61 @@
+<?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:orientation="vertical"
+              android:layout_width="match_parent"
+              android:layout_height="match_parent">
+    <LinearLayout android:orientation="horizontal"
+                  android:layout_width="wrap_content"
+                  android:layout_height="wrap_content">
+        <TextView android:layout_width="wrap_content"
+                  android:layout_height="wrap_content"
+                  android:text="Package: "/>
+        <TextView android:layout_height="wrap_content"
+                  android:layout_width="wrap_content"
+                  android:id="@+id/projection_detail_package"/>
+    </LinearLayout>
+    <LinearLayout android:orientation="horizontal"
+                  android:layout_width="wrap_content"
+                  android:layout_height="wrap_content">
+        <TextView android:layout_width="wrap_content"
+                  android:layout_height="wrap_content"
+                  android:text="Projection State: "/>
+        <TextView android:layout_height="wrap_content"
+                  android:layout_width="wrap_content"
+                  android:id="@+id/projection_detail_state"/>
+    </LinearLayout>
+    <LinearLayout android:orientation="horizontal"
+                  android:layout_width="wrap_content"
+                  android:layout_height="wrap_content">
+        <TextView android:layout_width="wrap_content"
+                  android:layout_height="wrap_content"
+                  android:text="Transport: "/>
+        <TextView android:layout_height="wrap_content"
+                  android:layout_width="wrap_content"
+                  android:id="@+id/projection_detail_transport"/>
+    </LinearLayout>
+    <LinearLayout android:orientation="horizontal"
+                  android:layout_width="wrap_content"
+                  android:layout_height="wrap_content">
+        <TextView android:layout_width="wrap_content"
+                  android:layout_height="wrap_content"
+                  android:text="Devices: "/>
+        <LinearLayout android:layout_height="wrap_content"
+                      android:layout_width="wrap_content"
+                      android:orientation="vertical"
+                      android:id="@+id/projection_detail_devices"/>
+    </LinearLayout>
+</LinearLayout>
diff --git a/tests/EmbeddedKitchenSinkApp/res/layout/projection_status_device.xml b/tests/EmbeddedKitchenSinkApp/res/layout/projection_status_device.xml
new file mode 100644
index 0000000..ae4d7a9
--- /dev/null
+++ b/tests/EmbeddedKitchenSinkApp/res/layout/projection_status_device.xml
@@ -0,0 +1,61 @@
+<?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:orientation="vertical"
+              android:layout_width="match_parent"
+              android:layout_height="match_parent">
+    <LinearLayout android:orientation="horizontal"
+                  android:layout_width="wrap_content"
+                  android:layout_height="wrap_content">
+        <TextView android:layout_width="wrap_content"
+                  android:layout_height="wrap_content"
+                  android:text="ID: "/>
+        <TextView android:layout_height="wrap_content"
+                  android:layout_width="wrap_content"
+                  android:id="@+id/projection_device_id"/>
+    </LinearLayout>
+    <LinearLayout android:orientation="horizontal"
+                  android:layout_width="wrap_content"
+                  android:layout_height="wrap_content">
+        <TextView android:layout_width="wrap_content"
+                  android:layout_height="wrap_content"
+                  android:text="Name: "/>
+        <TextView android:layout_height="wrap_content"
+                  android:layout_width="wrap_content"
+                  android:id="@+id/projection_device_name"/>
+    </LinearLayout>
+    <LinearLayout android:orientation="horizontal"
+                  android:layout_width="wrap_content"
+                  android:layout_height="wrap_content">
+        <TextView android:layout_width="wrap_content"
+                  android:layout_height="wrap_content"
+                  android:text="Transports: "/>
+        <LinearLayout android:layout_height="wrap_content"
+                      android:layout_width="wrap_content"
+                      android:orientation="vertical"
+                      android:id="@+id/projection_device_transports"/>
+    </LinearLayout>
+    <LinearLayout android:orientation="horizontal"
+                  android:layout_width="wrap_content"
+                  android:layout_height="wrap_content">
+        <TextView android:layout_width="wrap_content"
+                  android:layout_height="wrap_content"
+                  android:text="Projecting: "/>
+        <TextView android:layout_height="wrap_content"
+                  android:layout_width="wrap_content"
+                  android:id="@+id/projection_device_projecting"/>
+    </LinearLayout>
+</LinearLayout>
diff --git a/tests/EmbeddedKitchenSinkApp/res/values/strings.xml b/tests/EmbeddedKitchenSinkApp/res/values/strings.xml
index 77b64c7..d1ce0d3 100644
--- a/tests/EmbeddedKitchenSinkApp/res/values/strings.xml
+++ b/tests/EmbeddedKitchenSinkApp/res/values/strings.xml
@@ -131,6 +131,8 @@
     <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>
+    <string name="select_zone" translatable="false">Select Zone</string>
+
 
     <!-- keyboard test fragment -->
     <string name="keyboard_test_title" translatable="false">Keyboard Test</string>
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 a80c3b4..70949a9 100644
--- a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/KitchenSinkActivity.java
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/KitchenSinkActivity.java
@@ -18,6 +18,7 @@
 
 import android.car.Car;
 import android.car.CarAppFocusManager;
+import android.car.CarProjectionManager;
 import android.car.hardware.CarSensorManager;
 import android.car.hardware.hvac.CarHvacManager;
 import android.car.hardware.power.CarPowerManager;
@@ -60,6 +61,7 @@
 import com.google.android.car.kitchensink.notification.NotificationFragment;
 import com.google.android.car.kitchensink.orientation.OrientationTestFragment;
 import com.google.android.car.kitchensink.power.PowerTestFragment;
+import com.google.android.car.kitchensink.projection.ProjectionFragment;
 import com.google.android.car.kitchensink.property.PropertyTestFragment;
 import com.google.android.car.kitchensink.sensor.SensorsTestFragment;
 import com.google.android.car.kitchensink.storagelifetime.StorageLifetimeFragment;
@@ -172,6 +174,7 @@
             new FragmentMenuEntry("notification", NotificationFragment.class),
             new FragmentMenuEntry("orientation test", OrientationTestFragment.class),
             new FragmentMenuEntry("power test", PowerTestFragment.class),
+            new FragmentMenuEntry("projection", ProjectionFragment.class),
             new FragmentMenuEntry("property test", PropertyTestFragment.class),
             new FragmentMenuEntry("sensors", SensorsTestFragment.class),
             new FragmentMenuEntry("storage lifetime", StorageLifetimeFragment.class),
@@ -189,6 +192,7 @@
     private CarPropertyManager mPropertyManager;
     private CarSensorManager mSensorManager;
     private CarAppFocusManager mCarAppFocusManager;
+    private CarProjectionManager mCarProjectionManager;
     private Object mPropertyManagerReady = new Object();
 
     public CarHvacManager getHvacManager() {
@@ -207,6 +211,10 @@
         return mSensorManager;
     }
 
+    public CarProjectionManager getProjectionManager() {
+        return mCarProjectionManager;
+    }
+
     /* 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 \
@@ -322,6 +330,8 @@
                         android.car.Car.SENSOR_SERVICE);
                 mCarAppFocusManager =
                         (CarAppFocusManager) mCarApi.getCarManager(Car.APP_FOCUS_SERVICE);
+                mCarProjectionManager =
+                        (CarProjectionManager) mCarApi.getCarManager(Car.PROJECTION_SERVICE);
                 mPropertyManagerReady.notifyAll();
             }
         }
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 cf74468..aa889b4 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,9 +20,12 @@
 import android.car.CarAppFocusManager;
 import android.car.CarAppFocusManager.OnAppFocusChangedListener;
 import android.car.CarAppFocusManager.OnAppFocusOwnershipCallback;
+import android.car.media.CarAudioManager;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.ServiceConnection;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
 import android.media.AudioAttributes;
 import android.media.AudioDeviceInfo;
 import android.media.AudioFocusRequest;
@@ -36,8 +39,11 @@
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.widget.AdapterView;
+import android.widget.ArrayAdapter;
 import android.widget.Button;
 import android.widget.RadioGroup;
+import android.widget.Spinner;
 import android.widget.TextView;
 import android.widget.Toast;
 import android.widget.ToggleButton;
@@ -47,6 +53,8 @@
 import com.google.android.car.kitchensink.CarEmulator;
 import com.google.android.car.kitchensink.R;
 
+import java.util.Arrays;
+
 public class AudioTestFragment extends Fragment {
     private static final String TAG = "CAR.AUDIO.KS";
     private static final boolean DBG = true;
@@ -75,6 +83,10 @@
     private AudioAttributes mRadioAudioAttrib;
     private AudioAttributes mSystemSoundAudioAttrib;
     private CarEmulator mCarEmulator;
+    private CarAudioManager mCarAudioManager;
+    private Spinner mZoneSpinner;
+    ArrayAdapter<Integer> mZoneAdapter;
+    private int mOldZonePosition;
 
     private final AudioManager.OnAudioFocusChangeListener mNavFocusListener = (focusChange) -> {
         Log.i(TAG, "Nav focus change:" + focusChange);
@@ -113,6 +125,19 @@
                         CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION);
                 mAppFocusManager.addFocusListener(listener,
                         CarAppFocusManager.APP_FOCUS_TYPE_VOICE_COMMAND);
+
+                mCarAudioManager = (CarAudioManager) mCar.getCarManager(Car.AUDIO_SERVICE);
+
+                //take care of zone selection
+                int[] zoneList = mCarAudioManager.getAudioZoneIds();
+                Integer[] zoneArray = Arrays.stream(zoneList).boxed().toArray(Integer[]::new);
+                mZoneAdapter = new ArrayAdapter<>(mContext,
+                        android.R.layout.simple_spinner_item, zoneArray);
+                mZoneAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
+                mZoneSpinner.setAdapter(mZoneAdapter);
+                mZoneSpinner.setEnabled(true);
+
+
             }
             @Override
             public void onServiceDisconnected(ComponentName name) {
@@ -283,9 +308,46 @@
                 mCarEmulator = null;
             }
         });
+
+        //Zone Spinner
+        mZoneSpinner = view.findViewById(R.id.zone_spinner);
+        mZoneSpinner.setEnabled(false);
+        mZoneSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
+            @Override
+            public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
+                handleZoneSelection();
+            }
+
+            @Override
+            public void onNothingSelected(AdapterView<?> parent) {
+            }
+        });
+
         return view;
     }
 
+    public void handleZoneSelection() {
+        int position = mZoneSpinner.getSelectedItemPosition();
+        int zone = mZoneAdapter.getItem(position);
+        Log.d(TAG, "Zone Selected: " + zone);
+        try {
+            ApplicationInfo info = mContext.getPackageManager().getApplicationInfo(
+                    mContext.getPackageName(), 0);
+            int uid = info.uid;
+            Log.d(TAG, "handleZoneSelection App uid: " + uid);
+            if (mCarAudioManager.setZoneIdForUid(zone, uid)) {
+                Log.d(TAG, "Changed uid " + uid + " sound to zone " + zone);
+                mOldZonePosition = position;
+            } else {
+                Log.d(TAG, "Filed to changed uid " + uid + " sound to zone " + zone);
+                mZoneSpinner.setSelection(mOldZonePosition);
+            }
+
+        } catch (PackageManager.NameNotFoundException e) {
+            Log.e(TAG, "handleZoneSelection Failed to find name: " , e);
+        }
+    }
+
     @Override
     public void onDestroyView() {
         super.onDestroyView();
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 31b83cc..3bdfd22 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,7 +18,9 @@
 
 import android.annotation.Nullable;
 import android.annotation.SuppressLint;
+import android.bluetooth.BluetoothAdapter;
 import android.content.Context;
+import android.content.Intent;
 import android.graphics.Color;
 import android.location.LocationManager;
 import android.net.ConnectivityManager;
@@ -491,9 +493,49 @@
         mTetheringStatusPolled = (TextView) view.findViewById(R.id.tetheringStatusPolled);
         mLocalOnlyStatus = (TextView) view.findViewById(R.id.localOnlyStatus);
 
+        view.findViewById(R.id.networkEnableWifiIntent).setOnClickListener(v -> enableWifiIntent());
+        view.findViewById(R.id.networkDisableWifiIntent)
+                .setOnClickListener(v -> disableWifiIntent());
+        view.findViewById(R.id.networkEnableBluetoothIntent)
+                .setOnClickListener(v -> enableBluetoothIntent());
+        view.findViewById(R.id.networkDisableBluetoothIntent)
+                .setOnClickListener(v -> disableBluetoothIntent());
+        view.findViewById(R.id.networkDiscoverableBluetoothIntent)
+                .setOnClickListener(v -> discoverableBluetoothIntent());
+
         return view;
     }
 
+    private void enableWifiIntent() {
+        Intent enableWifi = new Intent(WifiManager.ACTION_REQUEST_ENABLE);
+        enableWifi.putExtra(Intent.EXTRA_PACKAGE_NAME, getContext().getPackageName());
+        startActivity(enableWifi);
+    }
+
+    private void disableWifiIntent() {
+        Intent disableWifi = new Intent(WifiManager.ACTION_REQUEST_DISABLE);
+        disableWifi.putExtra(Intent.EXTRA_PACKAGE_NAME, getContext().getPackageName());
+        startActivity(disableWifi);
+    }
+
+    private void enableBluetoothIntent() {
+        Intent enableBluetooth = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
+        enableBluetooth.putExtra(Intent.EXTRA_PACKAGE_NAME, getContext().getPackageName());
+        startActivity(enableBluetooth);
+    }
+
+    private void disableBluetoothIntent() {
+        Intent disableBluetooth = new Intent(BluetoothAdapter.ACTION_REQUEST_DISABLE);
+        disableBluetooth.putExtra(Intent.EXTRA_PACKAGE_NAME, getContext().getPackageName());
+        startActivity(disableBluetooth);
+    }
+
+    private void discoverableBluetoothIntent() {
+        Intent discoverableBluetooth = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
+        discoverableBluetooth.putExtra(Intent.EXTRA_PACKAGE_NAME, getContext().getPackageName());
+        startActivity(discoverableBluetooth);
+    }
+
     @Override
     public void onResume() {
         super.onResume();
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/projection/ProjectionFragment.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/projection/ProjectionFragment.java
new file mode 100644
index 0000000..66fc1e2
--- /dev/null
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/projection/ProjectionFragment.java
@@ -0,0 +1,151 @@
+/*
+ * 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.projection;
+
+import android.car.CarProjectionManager;
+import android.car.CarProjectionManager.ProjectionStatusListener;
+import android.car.projection.ProjectionStatus;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import androidx.fragment.app.Fragment;
+
+import com.google.android.car.kitchensink.KitchenSinkActivity;
+import com.google.android.car.kitchensink.R;
+import com.google.common.collect.ImmutableMap;
+
+import java.util.List;
+
+/**
+ * Reports information about the current projection status.
+ */
+public class ProjectionFragment extends Fragment {
+    private KitchenSinkActivity mActivity;
+    private CarProjectionManager mCarProjectionManager;
+
+    private TextView mCurrentProjectionStatus;
+    private TextView mCurrentProjectionPackage;
+    private LinearLayout mCurrentProjectionDetails;
+
+    private static final ImmutableMap<Integer, String> STATE_TO_STRING = ImmutableMap.of(
+            ProjectionStatus.PROJECTION_STATE_INACTIVE, "Inactive",
+            ProjectionStatus.PROJECTION_STATE_READY_TO_PROJECT, "Ready to project",
+            ProjectionStatus.PROJECTION_STATE_ACTIVE_FOREGROUND, "Foreground",
+            ProjectionStatus.PROJECTION_STATE_ACTIVE_BACKGROUND, "Background");
+
+    private static final ImmutableMap<Integer, String> TRANSPORT_TO_STRING = ImmutableMap.of(
+            ProjectionStatus.PROJECTION_TRANSPORT_NONE, "None",
+            ProjectionStatus.PROJECTION_TRANSPORT_USB, "USB",
+            ProjectionStatus.PROJECTION_TRANSPORT_WIFI, "WiFi");
+
+    private class KitchenSinkProjectionStatusListener implements ProjectionStatusListener {
+        @Override
+        public void onProjectionStatusChanged(
+                int state,
+                String packageName,
+                List<ProjectionStatus> details) {
+            mCurrentProjectionStatus.setText(STATE_TO_STRING.get(state));
+            mCurrentProjectionPackage.setText(packageName);
+            mCurrentProjectionDetails.removeAllViews();
+            for (ProjectionStatus detail : details) {
+                LinearLayout detailLayout =
+                        (LinearLayout)
+                                getLayoutInflater()
+                                        .inflate(R.layout.projection_status_details, null);
+
+                TextView detailPackage = detailLayout.findViewById(R.id.projection_detail_package);
+                detailPackage.setText(detail.getPackageName());
+
+                TextView detailState = detailLayout.findViewById(R.id.projection_detail_state);
+                detailState.setText(STATE_TO_STRING.get(detail.getState()));
+
+                TextView detailTransport =
+                        detailLayout.findViewById(R.id.projection_detail_transport);
+                detailTransport.setText(TRANSPORT_TO_STRING.get(detail.getTransport()));
+
+                for (ProjectionStatus.MobileDevice device : detail.getConnectedMobileDevices()) {
+                    LinearLayout deviceLayout =
+                            (LinearLayout)
+                                    getLayoutInflater()
+                                            .inflate(R.layout.projection_status_device, null);
+
+                    TextView deviceId = deviceLayout.findViewById(R.id.projection_device_id);
+                    deviceId.setText(String.valueOf(device.getId()));
+
+                    TextView deviceName = deviceLayout.findViewById(R.id.projection_device_name);
+                    deviceName.setText(device.getName());
+
+                    LinearLayout deviceTransports =
+                            deviceLayout.findViewById(R.id.projection_device_transports);
+                    for (Integer transport : device.getAvailableTransports()) {
+                        TextView transportView = new TextView(mActivity);
+                        transportView.setText(TRANSPORT_TO_STRING.get(transport));
+
+                        deviceTransports.addView(transportView);
+                    }
+
+                    TextView deviceProjecting =
+                            deviceLayout.findViewById(R.id.projection_device_projecting);
+                    deviceProjecting.setText(String.valueOf(device.isProjecting()));
+
+                    detailLayout.addView(deviceLayout);
+                }
+                mCurrentProjectionDetails.addView(detailLayout);
+            }
+        }
+    }
+
+    private final KitchenSinkProjectionStatusListener mProjectionListener =
+            new KitchenSinkProjectionStatusListener();
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        mActivity = (KitchenSinkActivity) getActivity();
+        mCarProjectionManager = mActivity.getProjectionManager();
+        super.onCreate(savedInstanceState);
+    }
+
+    @Override
+    public View onCreateView(
+            LayoutInflater inflater,
+            ViewGroup container,
+            Bundle savedInstanceState) {
+        View layout = inflater.inflate(R.layout.projection_status, container, false);
+
+        mCurrentProjectionStatus = (TextView) layout.findViewById(R.id.current_projection_status);
+        mCurrentProjectionPackage = (TextView) layout.findViewById(R.id.current_projection_package);
+        mCurrentProjectionDetails =
+                (LinearLayout) layout.findViewById(R.id.current_projection_details);
+
+        return layout;
+    }
+
+    @Override
+    public void onStart() {
+        mCarProjectionManager.registerProjectionStatusListener(mProjectionListener);
+        super.onStart();
+    }
+
+    @Override
+    public void onStop() {
+        mCarProjectionManager.unregisterProjectionStatusListener(mProjectionListener);
+        super.onStop();
+    }
+}
diff --git a/tests/InstrumentClusterRendererSample/Android.mk b/tests/InstrumentClusterRendererSample/Android.mk
deleted file mode 100644
index fc00dfa..0000000
--- a/tests/InstrumentClusterRendererSample/Android.mk
+++ /dev/null
@@ -1,40 +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.
-#
-#
-
-LOCAL_PATH:= $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-LOCAL_PACKAGE_NAME := InstrumentClusterRendererSampleImpl
-LOCAL_PRIVATE_PLATFORM_APIS := true
-
-# Each update should be signed by OEMs
-LOCAL_CERTIFICATE := platform
-LOCAL_PRIVILEGED_MODULE := true
-
-LOCAL_PROGUARD_FLAG_FILES := proguard.flags
-LOCAL_PROGUARD_ENABLED := disabled
-
-LOCAL_JAVA_LIBRARIES += android.car
-
-LOCAL_USE_AAPT2 := true
-LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
-
-LOCAL_STATIC_ANDROID_LIBRARIES += androidx.legacy_legacy-support-v4
-
-include $(BUILD_PACKAGE)
diff --git a/tests/InstrumentClusterRendererSample/AndroidManifest.xml b/tests/InstrumentClusterRendererSample/AndroidManifest.xml
deleted file mode 100644
index 6231220..0000000
--- a/tests/InstrumentClusterRendererSample/AndroidManifest.xml
+++ /dev/null
@@ -1,55 +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.cluster.sample"
-      android:sharedUserId="android.uid.system">
-
-    <uses-sdk android:targetSdkVersion="23" android:minSdkVersion="23"/>
-
-    <!-- We set TYPE_SYSTEM_ALERT window flag to presentation in order
-         to show it outside of activity context -->
-    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
-
-    <uses-permission android:name="android.permission.CONTROL_INCALL_EXPERIENCE"/>
-
-    <application android:label="@string/app_name"
-                 android:icon="@drawable/ic_launcher"
-                 android:process="android.car.service"
-                 android:directBootAware="true">
-        <service android:name="com.android.car.cluster.sample.ClusterInCallService"
-                 android:permission="android.permission.BIND_INCALL_SERVICE"
-                 android:exported="false">
-            <meta-data android:name="android.telecom.METADATA_IN_CALL_UI"
-                       android:value="false" />
-            <intent-filter>
-                <action android:name="android.telecom.InCallService"/>
-            </intent-filter>
-        </service>
-
-        <service android:name="com.android.car.cluster.sample.StatusBarNotificationListener"
-                 android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"
-                 android:exported="false">
-            <intent-filter>
-                <action android:name="android.service.notification.NotificationListenerService" />
-            </intent-filter>
-        </service>
-
-        <service android:name="com.android.car.cluster.sample.InstrumentClusterRenderingServiceImpl"
-                 android:exported="false"
-                 android:permission="android.car.permission.BIND_INSTRUMENT_CLUSTER_RENDERER_SERVICE"
-        />
-    </application>
-</manifest>
diff --git a/tests/InstrumentClusterRendererSample/res/anim/icon_switcher_in.xml b/tests/InstrumentClusterRendererSample/res/anim/icon_switcher_in.xml
deleted file mode 100644
index 1c27b63..0000000
--- a/tests/InstrumentClusterRendererSample/res/anim/icon_switcher_in.xml
+++ /dev/null
@@ -1,20 +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.
--->
-
-<alpha xmlns:android="http://schemas.android.com/apk/res/android"
-       android:interpolator="@android:interpolator/linear"
-       android:fromAlpha="0.0" android:toAlpha="1.0"
-       android:duration="@android:integer/config_longAnimTime" />
diff --git a/tests/InstrumentClusterRendererSample/res/anim/icon_switcher_out.xml b/tests/InstrumentClusterRendererSample/res/anim/icon_switcher_out.xml
deleted file mode 100644
index 6039c48..0000000
--- a/tests/InstrumentClusterRendererSample/res/anim/icon_switcher_out.xml
+++ /dev/null
@@ -1,29 +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.
--->
-
-<set>
-    <!-- We hide this image only when a new one if fully visible, otherwise we may
-         be in the state when we have 2 images semi-transparent, and even combined together they
-         will look like semi-transparent it looks ugly when we have something underneath, e.g.
-         when phone is answered.
-      -->
-    <alpha xmlns:android="http://schemas.android.com/apk/res/android"
-           android:interpolator="@android:interpolator/linear"
-           android:fromAlpha="1.0"
-           android:toAlpha="0"
-           android:startOffset="@android:integer/config_longAnimTime"
-           android:duration="@android:integer/config_longAnimTime"/>
-</set>
diff --git a/tests/InstrumentClusterRendererSample/res/anim/slide_in_bottom.xml b/tests/InstrumentClusterRendererSample/res/anim/slide_in_bottom.xml
deleted file mode 100644
index 5739277..0000000
--- a/tests/InstrumentClusterRendererSample/res/anim/slide_in_bottom.xml
+++ /dev/null
@@ -1,22 +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.
--->
-
-<set xmlns:android="http://schemas.android.com/apk/res/android">
-    <translate android:fromYDelta="50%p" android:toYDelta="0"
-               android:duration="@android:integer/config_mediumAnimTime"/>
-    <alpha android:fromAlpha="0.0" android:toAlpha="1.0"
-           android:duration="@android:integer/config_mediumAnimTime" />
-</set>
diff --git a/tests/InstrumentClusterRendererSample/res/anim/slide_out_top.xml b/tests/InstrumentClusterRendererSample/res/anim/slide_out_top.xml
deleted file mode 100644
index 2a92e26..0000000
--- a/tests/InstrumentClusterRendererSample/res/anim/slide_out_top.xml
+++ /dev/null
@@ -1,22 +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.
--->
-
-<set xmlns:android="http://schemas.android.com/apk/res/android">
-    <translate android:fromYDelta="0" android:toYDelta="-50%p"
-               android:duration="@android:integer/config_mediumAnimTime"/>
-    <alpha android:fromAlpha="1.0" android:toAlpha="0.0"
-           android:duration="@android:integer/config_mediumAnimTime" />
-</set>
diff --git a/tests/InstrumentClusterRendererSample/res/drawable-ldpi/ic_launcher.png b/tests/InstrumentClusterRendererSample/res/drawable-ldpi/ic_launcher.png
deleted file mode 100644
index 9923872..0000000
--- a/tests/InstrumentClusterRendererSample/res/drawable-ldpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/tests/InstrumentClusterRendererSample/res/drawable/cloud_154_shadow.png b/tests/InstrumentClusterRendererSample/res/drawable/cloud_154_shadow.png
deleted file mode 100644
index 7275874..0000000
--- a/tests/InstrumentClusterRendererSample/res/drawable/cloud_154_shadow.png
+++ /dev/null
Binary files differ
diff --git a/tests/InstrumentClusterRendererSample/res/drawable/cloud_192.png b/tests/InstrumentClusterRendererSample/res/drawable/cloud_192.png
deleted file mode 100644
index 4fb90d3..0000000
--- a/tests/InstrumentClusterRendererSample/res/drawable/cloud_192.png
+++ /dev/null
Binary files differ
diff --git a/tests/InstrumentClusterRendererSample/res/drawable/cloud_384.png b/tests/InstrumentClusterRendererSample/res/drawable/cloud_384.png
deleted file mode 100644
index e74a3c6..0000000
--- a/tests/InstrumentClusterRendererSample/res/drawable/cloud_384.png
+++ /dev/null
Binary files differ
diff --git a/tests/InstrumentClusterRendererSample/res/drawable/cloud_96_shadow.png b/tests/InstrumentClusterRendererSample/res/drawable/cloud_96_shadow.png
deleted file mode 100644
index e73899c..0000000
--- a/tests/InstrumentClusterRendererSample/res/drawable/cloud_96_shadow.png
+++ /dev/null
Binary files differ
diff --git a/tests/InstrumentClusterRendererSample/res/drawable/gas_station_36.png b/tests/InstrumentClusterRendererSample/res/drawable/gas_station_36.png
deleted file mode 100644
index a766a2b..0000000
--- a/tests/InstrumentClusterRendererSample/res/drawable/gas_station_36.png
+++ /dev/null
Binary files differ
diff --git a/tests/InstrumentClusterRendererSample/res/drawable/hangouts_icon.png b/tests/InstrumentClusterRendererSample/res/drawable/hangouts_icon.png
deleted file mode 100644
index f7683f5..0000000
--- a/tests/InstrumentClusterRendererSample/res/drawable/hangouts_icon.png
+++ /dev/null
Binary files differ
diff --git a/tests/InstrumentClusterRendererSample/res/drawable/line_empty_divider.xml b/tests/InstrumentClusterRendererSample/res/drawable/line_empty_divider.xml
deleted file mode 100644
index cbaf65d..0000000
--- a/tests/InstrumentClusterRendererSample/res/drawable/line_empty_divider.xml
+++ /dev/null
@@ -1,19 +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.
--->
-
-<shape xmlns:android="http://schemas.android.com/apk/res/android">
-    <size android:height="5px" android:width="0dp"/>
-</shape>
diff --git a/tests/InstrumentClusterRendererSample/res/drawable/phone.png b/tests/InstrumentClusterRendererSample/res/drawable/phone.png
deleted file mode 100644
index d4fb6fc..0000000
--- a/tests/InstrumentClusterRendererSample/res/drawable/phone.png
+++ /dev/null
Binary files differ
diff --git a/tests/InstrumentClusterRendererSample/res/drawable/phone_active.png b/tests/InstrumentClusterRendererSample/res/drawable/phone_active.png
deleted file mode 100644
index 8c941bb..0000000
--- a/tests/InstrumentClusterRendererSample/res/drawable/phone_active.png
+++ /dev/null
Binary files differ
diff --git a/tests/InstrumentClusterRendererSample/res/drawable/sun_154.png b/tests/InstrumentClusterRendererSample/res/drawable/sun_154.png
deleted file mode 100644
index 0103438..0000000
--- a/tests/InstrumentClusterRendererSample/res/drawable/sun_154.png
+++ /dev/null
Binary files differ
diff --git a/tests/InstrumentClusterRendererSample/res/drawable/unknown_contact_480.png b/tests/InstrumentClusterRendererSample/res/drawable/unknown_contact_480.png
deleted file mode 100644
index 9f864ca..0000000
--- a/tests/InstrumentClusterRendererSample/res/drawable/unknown_contact_480.png
+++ /dev/null
Binary files differ
diff --git a/tests/InstrumentClusterRendererSample/res/layout/call_card.xml b/tests/InstrumentClusterRendererSample/res/layout/call_card.xml
deleted file mode 100644
index 8c024f3..0000000
--- a/tests/InstrumentClusterRendererSample/res/layout/call_card.xml
+++ /dev/null
@@ -1,55 +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.
--->
-
-<merge xmlns:android="http://schemas.android.com/apk/res/android">
-    <LinearLayout android:id="@+id/phone_text_panel"
-                  android:layout_width="@dimen/card_message_panel_width"
-                  android:layout_height="wrap_content"
-                  android:orientation="vertical"
-                  android:layout_centerVertical="true">
-        <TextView android:id="@+id/call_status"
-                  android:layout_width="match_parent"
-                  android:layout_height="wrap_content"
-                  android:text="@string/incoming_call"
-                  android:textColor="@color/cluster_font_secondary"
-                  android:fontFamily="@string/font_family_secondary"
-                  android:textSize="@dimen/font_size_large"/>
-        <TextView android:id="@+id/contact_name"
-                  android:layout_width="match_parent"
-                  android:layout_height="wrap_content"
-                  android:textColor="@color/cluster_font_primary"
-                  android:textSize="@dimen/font_size_large"
-                  android:fontFamily="@string/font_family_primary"/>
-        <LinearLayout android:id="@+id/call_duration_panel"
-                      android:layout_width="wrap_content"
-                      android:layout_height="wrap_content"
-                      android:orientation="horizontal">
-            <Chronometer android:id="@+id/call_duration"
-                         android:layout_width="wrap_content"
-                         android:layout_height="wrap_content"
-                         android:textColor="@color/cluster_font_secondary"
-                         android:fontFamily="@string/font_family_secondary"
-                         android:textSize="@dimen/font_size_large"/>
-            <TextView android:layout_width="wrap_content"
-                      android:layout_height="wrap_content"
-                      android:text="@string/dummy_call_type"
-                      android:textColor="@color/cluster_font_secondary"
-                      android:fontFamily="@string/font_family_secondary"
-                      android:textSize="@dimen/font_size_large"
-                      android:layout_marginLeft="@dimen/word_spacing"/>
-        </LinearLayout>
-    </LinearLayout>
-</merge>
\ No newline at end of file
diff --git a/tests/InstrumentClusterRendererSample/res/layout/card_view.xml b/tests/InstrumentClusterRendererSample/res/layout/card_view.xml
deleted file mode 100644
index 14fbd9d..0000000
--- a/tests/InstrumentClusterRendererSample/res/layout/card_view.xml
+++ /dev/null
@@ -1,31 +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.
--->
-
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-                android:layout_width="@dimen/card_width"
-                android:layout_height="@dimen/card_height">
-
-    <ImageView android:id="@+id/image_background"
-               android:layout_width="match_parent"
-               android:layout_height="match_parent"
-               android:layout_alignParentRight="true"
-               android:layout_centerVertical="true"
-               android:scaleType="centerCrop"
-               android:visibility="gone"/>
-
-    <include layout="@layout/icon_switcher" android:id="@+id/left_icon_switcher"/>
-    <include layout="@layout/icon_switcher" android:id="@+id/right_icon_switcher"/>
-</RelativeLayout>
\ No newline at end of file
diff --git a/tests/InstrumentClusterRendererSample/res/layout/cluster_view.xml b/tests/InstrumentClusterRendererSample/res/layout/cluster_view.xml
deleted file mode 100644
index b6d192c..0000000
--- a/tests/InstrumentClusterRendererSample/res/layout/cluster_view.xml
+++ /dev/null
@@ -1,31 +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.
--->
-
-<LinearLayout android:id="@+id/root"
-              android:layout_width="match_parent"
-              android:layout_height="match_parent"
-              android:keepScreenOn="true"
-              android:orientation="horizontal"
-              android:background="@color/cluster_background"
-              xmlns:android="http://schemas.android.com/apk/res/android">
-    <View android:layout_width="0dp" android:layout_height="0dp" android:layout_weight="1"/>
-    <com.android.car.cluster.sample.CardPanel
-            android:id="@+id/card_panel"
-            android:layout_width="@dimen/card_width"
-            android:layout_height="@dimen/card_height">
-
-    </com.android.car.cluster.sample.CardPanel>
-</LinearLayout>
\ No newline at end of file
diff --git a/tests/InstrumentClusterRendererSample/res/layout/hangout_layout.xml b/tests/InstrumentClusterRendererSample/res/layout/hangout_layout.xml
deleted file mode 100644
index fbd4f0d..0000000
--- a/tests/InstrumentClusterRendererSample/res/layout/hangout_layout.xml
+++ /dev/null
@@ -1,40 +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.
--->
-
-<merge xmlns:android="http://schemas.android.com/apk/res/android">
-    <LinearLayout android:id="@+id/msg_text_panel"
-                  android:layout_width="@dimen/card_message_panel_width"
-                  android:layout_height="wrap_content"
-                  android:orientation="vertical"
-                  android:layout_centerVertical="true"
-                  android:showDividers="middle"
-                  android:divider="@drawable/line_empty_divider">
-        <TextView android:id="@+id/msg_card_status"
-                  android:layout_width="match_parent"
-                  android:layout_height="wrap_content"
-                  android:text="@string/incoming_message"
-                  android:fontFamily="@string/font_family_secondary"
-                  android:textColor="@color/cluster_font_secondary"
-                  android:textSize="@dimen/font_size_large"/>
-        <TextView android:id="@+id/msg_card_contact_name"
-                  android:layout_width="match_parent"
-                  android:layout_height="wrap_content"
-                  android:textColor="@color/cluster_font_primary"
-                  android:fontFamily="@string/font_family_primary"
-                  android:text="@string/unknown"
-                  android:textSize="@dimen/font_size_large"/>
-    </LinearLayout>
-</merge>
\ No newline at end of file
diff --git a/tests/InstrumentClusterRendererSample/res/layout/icon_switcher.xml b/tests/InstrumentClusterRendererSample/res/layout/icon_switcher.xml
deleted file mode 100644
index 9bc4c5d..0000000
--- a/tests/InstrumentClusterRendererSample/res/layout/icon_switcher.xml
+++ /dev/null
@@ -1,33 +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.
--->
-
-<ViewSwitcher xmlns:android="http://schemas.android.com/apk/res/android"
-              android:id="@+id/left_icon_switcher"
-              android:layout_width="@dimen/card_icon_size"
-              android:layout_height="@dimen/card_icon_size"
-              android:layout_alignParentLeft="true"
-              android:layout_centerVertical="true"
-              android:inAnimation="@anim/icon_switcher_in"
-              android:outAnimation="@anim/icon_switcher_out">
-    <ImageView android:layout_width="match_parent"
-               android:layout_height="match_parent"
-               android:background="@android:color/transparent"
-               android:scaleType="centerCrop"/>
-    <ImageView android:layout_width="match_parent"
-               android:layout_height="match_parent"
-               android:background="@android:color/transparent"
-               android:scaleType="centerCrop"/>
-</ViewSwitcher>
\ No newline at end of file
diff --git a/tests/InstrumentClusterRendererSample/res/layout/media_card.xml b/tests/InstrumentClusterRendererSample/res/layout/media_card.xml
deleted file mode 100644
index 62a574c..0000000
--- a/tests/InstrumentClusterRendererSample/res/layout/media_card.xml
+++ /dev/null
@@ -1,50 +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.
--->
-
-<merge xmlns:android="http://schemas.android.com/apk/res/android">
-    <!-- Panel will be shown for media -->
-    <LinearLayout android:id="@+id/message_panel"
-                  android:layout_width="@dimen/card_message_panel_width"
-                  android:layout_height="wrap_content"
-                  android:orientation="vertical"
-                  android:layout_centerVertical="true"
-                  android:showDividers="middle"
-                  android:divider="@drawable/line_empty_divider">
-        <TextView android:id="@+id/media_title"
-                  android:layout_width="@dimen/card_message_panel_width"
-                  android:layout_height="wrap_content"
-                  android:textColor="@color/cluster_font_primary"
-                  android:textSize="@dimen/font_size_medium"
-                  android:fontFamily="sans-serif-medium"
-                  android:singleLine="false"/>
-        <TextView android:id="@+id/media_subtitle"
-                  android:layout_width="@dimen/card_message_panel_width"
-                  android:layout_height="wrap_content"
-                  android:textColor="@color/cluster_font_secondary"
-                  android:textSize="@dimen/font_size_small"
-                  android:fontFamily="sans-serif-regular"
-                  android:singleLine="false"/>
-        <ProgressBar
-                android:id="@+id/progress_bar"
-                android:progress="80"
-                style="?android:attr/progressBarStyleHorizontal"
-                android:layout_width="@dimen/media_card_progress_width"
-                android:layout_height="@dimen/media_card_progress_height"
-                android:layout_marginTop="@dimen/media_card_progress_margin_top"
-                android:background="#3cf5f5f5"
-                android:max="100"/>
-    </LinearLayout>
-</merge>
\ No newline at end of file
diff --git a/tests/InstrumentClusterRendererSample/res/layout/nav_card.xml b/tests/InstrumentClusterRendererSample/res/layout/nav_card.xml
deleted file mode 100644
index adee49c..0000000
--- a/tests/InstrumentClusterRendererSample/res/layout/nav_card.xml
+++ /dev/null
@@ -1,25 +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.
--->
-
-<merge xmlns:android="http://schemas.android.com/apk/res/android">
-    <ViewSwitcher android:id="@+id/nav_directions_switcher"
-                  android:layout_width="@dimen/card_message_panel_width"
-                  android:layout_height="wrap_content"
-                  android:layout_centerVertical="true"
-                  android:inAnimation="@anim/slide_in_bottom"
-                  android:outAnimation="@anim/slide_out_top">
-    </ViewSwitcher>
-</merge>
\ No newline at end of file
diff --git a/tests/InstrumentClusterRendererSample/res/layout/nav_card_maneuver_description.xml b/tests/InstrumentClusterRendererSample/res/layout/nav_card_maneuver_description.xml
deleted file mode 100644
index ca5ec3e..0000000
--- a/tests/InstrumentClusterRendererSample/res/layout/nav_card_maneuver_description.xml
+++ /dev/null
@@ -1,51 +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.
--->
-
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-              android:id="@+id/nav_directions"
-              android:layout_width="@dimen/card_message_panel_width"
-              android:layout_height="wrap_content"
-              android:layout_centerVertical="true"
-              android:orientation="vertical">
-    <!-- First line contains distance and units, e.g. 200 ft -->
-    <LinearLayout android:layout_width="wrap_content"
-                  android:layout_height="wrap_content"
-                  android:orientation="horizontal">
-        <TextView android:id="@+id/nav_distance"
-                  android:layout_width="wrap_content"
-                  android:layout_height="wrap_content"
-                  android:textSize="@dimen/font_size_nav_distance"
-                  android:textColor="@color/cluster_font_primary"
-                  android:fontFamily="@string/font_family_primary"/>
-        <TextView android:id="@+id/nav_distance_units"
-                  android:layout_marginLeft="@dimen/word_spacing"
-                  android:layout_width="wrap_content"
-                  android:layout_height="wrap_content"
-                  android:textSize="@dimen/font_size_medium"
-                  android:textColor="@color/cluster_font_dark_gray"
-                  android:fontFamily="@string/font_family_secondary"
-                  android:text="@string/nav_distance_units_ft"/>
-    </LinearLayout>
-
-    <!-- Second line for street name -->
-    <TextView android:id="@+id/nav_street"
-              android:layout_width="wrap_content"
-              android:layout_height="wrap_content"
-              android:textSize="@dimen/font_size_medium"
-              android:textColor="@color/cluster_font_secondary"
-              android:fontFamily="@string/font_family_secondary"/>
-</LinearLayout>
\ No newline at end of file
diff --git a/tests/InstrumentClusterRendererSample/res/layout/weather_card.xml b/tests/InstrumentClusterRendererSample/res/layout/weather_card.xml
deleted file mode 100644
index da01ffc..0000000
--- a/tests/InstrumentClusterRendererSample/res/layout/weather_card.xml
+++ /dev/null
@@ -1,72 +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.
--->
-
-<merge xmlns:android="http://schemas.android.com/apk/res/android">
-
-    <ImageView android:id="@+id/weather_near_cloud"
-               android:layout_width="@dimen/weather_card_near_cloud"
-               android:layout_height="@dimen/weather_card_near_cloud"
-               android:layout_alignParentBottom="true"
-               android:layout_alignParentRight="true"
-               android:src="@drawable/cloud_384"
-               android:scaleType="fitXY"
-               android:translationY="@dimen/weather_card_cloud_vertical_margin"
-               android:layout_marginRight="@dimen/weather_card_near_margin_right"/>
-    <ImageView android:id="@+id/weather_far_cloud"
-               android:layout_width="@dimen/weather_card_far_cloud"
-               android:layout_height="@dimen/weather_card_far_cloud"
-               android:layout_centerHorizontal="true"
-               android:layout_alignParentTop="true"
-               android:src="@drawable/cloud_192"
-               android:scaleType="fitXY"
-               android:translationY="@dimen/weather_card_cloud_vertical_margin"/>
-
-    <!-- Panel shown for the weather -->
-    <LinearLayout android:id="@+id/weather_panel"
-                  android:layout_width="wrap_content"
-                  android:layout_height="wrap_content"
-                  android:layout_centerVertical="true"
-                  android:orientation="horizontal">
-        <TextView android:id="@+id/weather_temperature"
-                  android:layout_width="wrap_content"
-                  android:layout_height="wrap_content"
-                  android:layout_gravity="center"
-                  android:fontFamily="sans-serif-light"
-                  android:textColor="@color/cluster_font_primary"
-                  android:text="@string/dummy_weather_temperature"
-                  android:textSize="@dimen/speedo_speed_min_font_size"/>
-        <LinearLayout android:layout_width="wrap_content"
-                      android:layout_height="wrap_content"
-                      android:orientation="vertical"
-                      android:layout_gravity="center"
-                      android:paddingLeft="@dimen/weather_card_text_left_padding">
-            <TextView android:id="@+id/weather_forecast"
-                      android:layout_width="wrap_content"
-                      android:layout_height="wrap_content"
-                      android:textSize="@dimen/font_size_large"
-                      android:textColor="@color/cluster_font_primary"
-                      android:text="@string/dummy_weather_forecast"
-                      android:translationY="6px"/>
-            <TextView android:id="@+id/weather_location"
-                      android:layout_width="wrap_content"
-                      android:layout_height="wrap_content"
-                      android:textSize="@dimen/font_size_large"
-                      android:textColor="@color/cluster_font_secondary"
-                      android:fontFamily="@string/font_family_secondary"
-                      android:text="@string/dummy_weather_location"/>
-        </LinearLayout>
-    </LinearLayout>
-</merge>
\ No newline at end of file
diff --git a/tests/InstrumentClusterRendererSample/res/mipmap-hdpi/ic_launcher.png b/tests/InstrumentClusterRendererSample/res/mipmap-hdpi/ic_launcher.png
deleted file mode 100644
index cde69bc..0000000
--- a/tests/InstrumentClusterRendererSample/res/mipmap-hdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/tests/InstrumentClusterRendererSample/res/mipmap-mdpi/ic_launcher.png b/tests/InstrumentClusterRendererSample/res/mipmap-mdpi/ic_launcher.png
deleted file mode 100644
index c133a0c..0000000
--- a/tests/InstrumentClusterRendererSample/res/mipmap-mdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/tests/InstrumentClusterRendererSample/res/mipmap-xhdpi/ic_launcher.png b/tests/InstrumentClusterRendererSample/res/mipmap-xhdpi/ic_launcher.png
deleted file mode 100644
index bfa42f0..0000000
--- a/tests/InstrumentClusterRendererSample/res/mipmap-xhdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/tests/InstrumentClusterRendererSample/res/mipmap-xxhdpi/ic_launcher.png b/tests/InstrumentClusterRendererSample/res/mipmap-xxhdpi/ic_launcher.png
deleted file mode 100644
index 324e72c..0000000
--- a/tests/InstrumentClusterRendererSample/res/mipmap-xxhdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/tests/InstrumentClusterRendererSample/res/mipmap-xxxhdpi/ic_launcher.png b/tests/InstrumentClusterRendererSample/res/mipmap-xxxhdpi/ic_launcher.png
deleted file mode 100644
index aee44e1..0000000
--- a/tests/InstrumentClusterRendererSample/res/mipmap-xxxhdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/tests/InstrumentClusterRendererSample/res/values/attrs.xml b/tests/InstrumentClusterRendererSample/res/values/attrs.xml
deleted file mode 100644
index 9386437..0000000
--- a/tests/InstrumentClusterRendererSample/res/values/attrs.xml
+++ /dev/null
@@ -1,18 +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.
--->
-
-<resources>
-</resources>
diff --git a/tests/InstrumentClusterRendererSample/res/values/colors.xml b/tests/InstrumentClusterRendererSample/res/values/colors.xml
deleted file mode 100644
index 2b7698b..0000000
--- a/tests/InstrumentClusterRendererSample/res/values/colors.xml
+++ /dev/null
@@ -1,73 +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.
--->
-
-<resources>
-    <color name="colorPrimary">#3F51B5</color>
-    <color name="colorPrimaryDark">#303F9F</color>
-    <color name="colorAccent">#FF4081</color>
-
-    <color name="black_overlay">#66000000</color>
-
-    <color name="cluster_background">#172026</color>
-    <color name="speedo_inner_circle_shade">#770c1013</color>
-    <color name="cluster_active_area_background">#ff141c21</color>
-    <color name="cluster_black">#ff0c1013</color>
-    <color name="cluster_font_primary">#fff5f5f5</color>
-    <color name="cluster_font_secondary">#8af5f5f5</color>
-    <!-- Speed unit -->
-    <color name="cluster_font_light_gray">#ffd8d9da</color>
-    <!-- Phone call duration / album -->
-    <color name="cluster_font_dark_gray">#ffa6a9ab</color>
-
-    <color name="media_icon_foreground">#ff202020</color>
-
-    <color name="media_background">#ff444444</color>
-    <color name="media_background_dark">#ff303030</color>
-
-    <color name="phone_background">#ff01579b</color>
-    <color name="phone_background_dark">#ff014174</color>
-    <color name="phone_icon_background">#ff0277bd</color>
-    <color name="phone_font_incoming_call">#ffa3c1d9</color>
-
-    <color name="maps_background">#ff0d904f</color>
-
-    <color name="speedo_minute_arm_color_begin">#ffffcbbb</color>
-    <color name="speedo_minute_arm_color_mid">#ffffcbbb</color>
-    <color name="speedo_minute_arm_color_end">#ffffcbbb</color>
-    <color name="speedo_minute_arm_color_border">#77ffcbbb</color>
-    <color name="speedo_clock_nail">#ffffcbbb</color>
-
-    <color name="speedo_clock_nail_shadow_start">#33000000</color>
-    <color name="speedo_clock_nail_shadow_mid">#22000000</color>
-    <color name="speedo_clock_nail_shadow_end">#00000000</color>
-    <color name="speedo_clock_nail_shadow">#33000000</color>
-
-    <color name="speedo_hour_arm_color_mid">@color/cluster_font_primary</color>
-    <color name="speedo_hour_arm_color_start">@color/cluster_font_primary</color>
-    <color name="speedo_hour_arm_color_end">@color/cluster_font_primary</color>
-    <color name="speedo_hour_arm_color_border">#77f5f5f5</color>
-
-    <color name="weather_blue_sky">#ff4385f4</color>
-    <color name="weather_sun">#fffdbf2d</color>
-    <color name="weather_cloud">#fffffeff</color>
-    <color name="weather_location_text">#ffb2d1ff</color>
-
-    <color name="hangout_background">#ff086934</color>
-    <color name="hangout_icon_background">#ff086934</color>
-    <color name="hangout_incoming_message_font_color">#ffa5c7b5</color>
-    <color name="hangout_background_dark">#ff054422</color>
-
-</resources>
diff --git a/tests/InstrumentClusterRendererSample/res/values/dimens.xml b/tests/InstrumentClusterRendererSample/res/values/dimens.xml
deleted file mode 100644
index 66d54de..0000000
--- a/tests/InstrumentClusterRendererSample/res/values/dimens.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.
--->
-
-<resources>
-    <dimen name="cluster_width">1920px</dimen>
-    <dimen name="cluster_height">720px</dimen>
-
-    <dimen name="fuel_panel_width">360px</dimen>
-
-    <dimen name="speedo_margin_top">43px</dimen>
-    <dimen name="speed_units_margin_from_center">165px</dimen>
-    <dimen name="speedo_outer_circle_diameter">651px</dimen>
-    <dimen name="speedo_inner_circle_min_diameter">232px</dimen>
-    <dimen name="speedo_speed_min_font_size">@dimen/font_size_xlarge</dimen>
-    <dimen name="speedo_speed_max_font_size">@dimen/font_size_xxlarge</dimen>
-
-    <dimen name="speedo_inner_circle_max_diameter">540px</dimen>
-    <dimen name="speedo_minute_arm_width">232px</dimen>
-    <dimen name="speedo_minute_arm_width_half">116px</dimen>
-    <dimen name="speedo_hour_arm_width">160px</dimen>
-    <dimen name="speedo_hour_arm_width_half">80px</dimen>
-    <dimen name="speedo_clock_nail">52px</dimen>
-    <dimen name="speedo_border_width">1px</dimen>
-
-    <dimen name="speedo_arm_height">8px</dimen>
-    <dimen name="speedo_arm_center">4px</dimen>
-
-
-    <dimen name="card_width">909px</dimen>
-    <dimen name="card_height">@dimen/cluster_height</dimen>
-    <dimen name="card_icon_size">154px</dimen>
-    <dimen name="card_background_image_width">780px</dimen>
-    <dimen name="card_message_panel_width">500px</dimen>
-    <dimen name="card_content_left_padding">40px</dimen>
-
-    <dimen name="word_spacing">10px</dimen>
-
-    <dimen name="font_size_nav_distance">56px</dimen>
-
-    <dimen name="font_size_xxlarge">152px</dimen>
-    <dimen name="font_size_xlarge">120px</dimen>
-    <dimen name="font_size_large">45px</dimen>
-    <dimen name="font_size_medium">36px</dimen>
-    <dimen name="font_size_small">26px</dimen>
-    <dimen name="font_size_xsmall">22px</dimen>
-
-    <dimen name="font_size_drive_state">@dimen/font_size_large</dimen>
-
-    <dimen name="weather_card_near_cloud">384px</dimen>
-    <dimen name="weather_card_near_margin_right">60px</dimen>
-    <dimen name="weather_card_far_cloud">192px</dimen>
-    <dimen name="weather_card_cloud_vertical_margin">40px</dimen>
-    <dimen name="weather_card_text_left_padding">20px</dimen>
-
-    <dimen name="media_card_progress_width">210px</dimen>
-    <dimen name="media_card_progress_height">2px</dimen>
-    <dimen name="media_card_progress_margin_top">12px</dimen>
-
-    <dimen name="drive_state_size">144px</dimen>
-    <dimen name="drive_state_inner_diameter">84px</dimen>
-
-    <dimen name="fuel_indicator_width">@dimen/drive_state_size</dimen>
-    <dimen name="fuel_indicator_radius">72px</dimen>  <!-- fuel_indicator_width / 2 -->
-    <dimen name="fuel_indicator_height">224px</dimen>
-    <dimen name="fuel_indicator_inner_padding">30px</dimen> <!-- (width - inner_diameter) / 2 -->
-    <dimen name="fuel_indicator_inner_padding_half">15px</dimen> <!-- padding / 2 -->
-    <dimen name="fuel_indicator_inner_height">168px</dimen> <!-- height - padding * 2 -->
-    <dimen name="fuel_indicator_inner_width">@dimen/drive_state_inner_diameter</dimen>
-    <dimen name="fuel_indicator_inner_radius">42px</dimen>  <!-- fuel_indicator_inner_diameter / 2 -->
-    <dimen name="fuel_indicator_border_width">1px</dimen>
-    <dimen name="fuel_panel_margin_right">40px</dimen>
-</resources>
\ No newline at end of file
diff --git a/tests/InstrumentClusterRendererSample/res/values/strings.xml b/tests/InstrumentClusterRendererSample/res/values/strings.xml
deleted file mode 100644
index 2666619..0000000
--- a/tests/InstrumentClusterRendererSample/res/values/strings.xml
+++ /dev/null
@@ -1,61 +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.
--->
-
-<resources xmlns:xliff="http://schemas.android.com/tools">
-    <string name="app_name" translatable="false">InstrumentClusterRendererImpl</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" translatable="false">sans-serif-medium</string>
-    <string name="font_family_secondary" translatable="false">sans-serif-regular</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" 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" translatable="false">Incoming message</string>
-
-    <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" translatable="false">Connecting</string>
-    <!-- Status label for phone state [CHAR LIMIT=20] -->
-    <string name="call_state_dialing" translatable="false">Dialing</string>
-    <!-- Status label for phone state [CHAR LIMIT=20] -->
-    <string name="call_state_hold" translatable="false">On Hold</string>
-    <!-- Status label for phone state [CHAR LIMIT=20] -->
-    <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" translatable="false">Connected</string>
-    <!-- Status label for phone state [CHAR LIMIT=20] -->
-    <string name="call_state_call_ringing" translatable="false">Ringing</string>
-    <!-- Status label for phone state [CHAR LIMIT=20] -->
-    <string name="call_state_call_ending" translatable="false">Disconnecting</string>
-
-</resources>
diff --git a/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/BitmapUtils.java b/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/BitmapUtils.java
deleted file mode 100644
index 430bf35..0000000
--- a/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/BitmapUtils.java
+++ /dev/null
@@ -1,206 +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.cluster.sample;
-
-import static android.graphics.Color.blue;
-import static android.graphics.Color.green;
-import static android.graphics.Color.red;
-
-import android.graphics.Bitmap;
-import android.graphics.Bitmap.Config;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.Paint;
-import android.graphics.PorterDuff.Mode;
-import android.graphics.PorterDuffXfermode;
-import android.graphics.Rect;
-import android.graphics.RectF;
-
-/**
- * Utility functions to work with bitmaps.
- */
-public class BitmapUtils {
-
-    // Non-transparent color to crop images using Xfermode.
-    private static final int OPAQUE_COLOR = 0xff424242;
-
-    /**
-     * Scales a bitmap while preserving the proportions such that both dimensions are the smallest
-     * values possible that are equal to or larger than the given dimensions.
-     *
-     * This function can be a few times as expensive as Bitmap.createScaledBitmap with
-     * filtering when downscaling, but it produces much nicer results.
-     *
-     * @param bm The bitmap to scale.
-     * @param width The desired width.
-     * @param height The desired height.
-     * @return The scaled bitmap, or the original bitmap if scaling was not necessary.
-     */
-    public static Bitmap scaleBitmap(Bitmap bm, int width, int height) {
-        if (bm == null || (bm.getHeight() == height && bm.getWidth() == width)) {
-            return bm;
-        }
-
-        float heightScale = (float) height / bm.getHeight();
-        float widthScale = (float) width / bm.getWidth();
-
-        float scale = heightScale > widthScale ? heightScale : widthScale;
-        int scaleWidth = (int) Math.ceil(bm.getWidth() * scale);
-        int scaleHeight = (int) Math.ceil(bm.getHeight() * scale);
-
-        Bitmap scaledBm = bm;
-        // If you try to scale an image down too much in one go, you can end up with discontinuous
-        // interpolation. Therefore, if necessary, we scale the image to twice the desired size
-        // and do a second scaling to the desired size, which smooths jaggedness from the first go.
-        if (scale < .5f) {
-            scaledBm = Bitmap.createScaledBitmap(scaledBm, scaleWidth * 2, scaleHeight * 2, true);
-        }
-
-        if (scale != 1f) {
-            Bitmap newScaledBitmap = Bitmap
-                    .createScaledBitmap(scaledBm, scaleWidth, scaleHeight, true);
-            if (scaledBm != bm) {
-                scaledBm.recycle();
-            }
-            scaledBm = newScaledBitmap;
-        }
-        return scaledBm;
-    }
-
-    public static Bitmap squareCropBitmap(Bitmap bitmap) {
-        if (bitmap.getWidth() == bitmap.getHeight()) {
-            return bitmap;
-        }
-
-        int size = Math.min(bitmap.getWidth(), bitmap.getHeight());
-
-        Bitmap output = Bitmap.createBitmap(size,
-                size, Config.ARGB_8888);
-        Canvas canvas = new Canvas(output);
-
-        int x = size < bitmap.getWidth() ? (bitmap.getWidth() - size ) / 2 : 0;
-        int y = size < bitmap.getHeight() ? (bitmap.getHeight() - size ) / 2 : 0;
-        Rect srcRect = new Rect(x, y, x + size, y + size);
-        Rect dstRect = new Rect(0, 0, output.getWidth(), output.getHeight());
-
-        canvas.drawBitmap(bitmap, srcRect, dstRect, null);
-        return output;
-    }
-
-    public static Bitmap circleCropBitmap(Bitmap bitmap) {
-        bitmap = squareCropBitmap(bitmap);
-        Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
-                bitmap.getHeight(), Config.ARGB_8888);
-        Canvas canvas = new Canvas(output);
-
-        Paint paint = new Paint();
-        Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
-
-        paint.setAntiAlias(true);
-        canvas.drawARGB(0, 0, 0, 0);
-        paint.setColor(OPAQUE_COLOR);
-        canvas.drawCircle(bitmap.getWidth() / 2, bitmap.getHeight() / 2,
-                bitmap.getWidth() / 2, paint);
-        paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
-        canvas.drawBitmap(bitmap, rect, rect, paint);
-        return output;
-    }
-
-    public static Bitmap generateNavManeuverIcon(int size, int bgColor, Bitmap maneuver) {
-        Bitmap bm = Bitmap.createBitmap(size, size, Config.ARGB_8888);
-        Canvas canvas = new Canvas(bm);
-        drawCircle(canvas, bgColor);
-
-        canvas.drawBitmap(maneuver,
-                (bm.getWidth() - maneuver.getWidth()) / 2,
-                (bm.getHeight() - maneuver.getHeight()) / 2,
-                new Paint(Paint.ANTI_ALIAS_FLAG));
-        return bm;
-    }
-
-    public static Bitmap generateMediaIcon(int size, int bgColor, int fgColor) {
-        final float goldenRatio = 1.618f;
-
-        Bitmap bm = Bitmap.createBitmap(size, size, Config.ARGB_8888);
-        Canvas canvas = new Canvas(bm);
-        drawCircle(canvas, bgColor);
-
-        // Calculate column parameters relative to the size.
-        int bottom = (int) (size / goldenRatio);
-        int columnWidth = size / 17;
-        int columnSpace = columnWidth / 2;
-        int allColumnsWidth = columnWidth * 3 + columnSpace * 2;
-        int left = size / 2 - (allColumnsWidth) / 2;
-
-        Paint columnPaint = new Paint();
-        columnPaint.setColor(fgColor);
-        columnPaint.setAntiAlias(true);
-        canvas.drawRect(new RectF(left, bottom - columnWidth * 2, left + columnWidth, bottom),
-                columnPaint);
-
-        left += columnWidth + columnSpace;
-        canvas.drawRect(new RectF(left, bottom - columnWidth * 4, left + columnWidth, bottom),
-                columnPaint);
-
-        left += columnWidth + columnSpace;
-        canvas.drawRect(new RectF(left, bottom - columnWidth * 3, left + columnWidth, bottom),
-                columnPaint);
-
-        return bm;
-    }
-
-    private static Canvas drawCircle(Canvas canvas, int bgColor) {
-        int size = canvas.getWidth();
-        Paint p = new Paint();
-        p.setAntiAlias(true);
-        p.setColor(bgColor);
-        canvas.drawCircle(size / 2, size / 2, (size / 2) - 1, p);
-        return canvas;
-    }
-
-    public static int[] getBaseColors(int color) {
-        return new int[] {red(color), green(color), blue(color)};
-    }
-
-    /**
-     * Scales colors for given bitmap. This could be used as color filter for example.
-     */
-    public static Bitmap scaleBitmapColors(Bitmap original, int minColor, int maxColor) {
-        int[] pixels = new int[original.getWidth() * original.getHeight()];
-        original.getPixels(pixels, 0, original.getWidth(), 0, 0,
-                original.getWidth(), original.getHeight());
-
-        int[] min = getBaseColors(minColor);
-        int[] max = getBaseColors(maxColor);
-
-        for (int i = 0; i < pixels.length; i++) {
-            int pixel = pixels[i];
-            int[] colors = new int[] {red(pixel), green(pixel), blue(pixel)};
-
-            for (int j = 0; j < 3; j++) {
-                colors[j] = (int)((colors[j] / 255.0) * (max[j] - min[j]) + min[j]);
-            }
-
-            pixels[i] = Color.rgb(colors[0], colors[1], colors[2]);
-        }
-
-        Bitmap bmp = Bitmap.createBitmap(original.getWidth(), original.getHeight(), Config.ARGB_8888);
-        bmp.setPixels(pixels, 0, original.getWidth(), 0, 0, original.getWidth(),
-                original.getHeight());
-        return bmp;
-    }
-}
diff --git a/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/CardPanel.java b/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/CardPanel.java
deleted file mode 100644
index 88c2aba..0000000
--- a/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/CardPanel.java
+++ /dev/null
@@ -1,144 +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.cluster.sample;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.view.View;
-import android.widget.FrameLayout;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-/**
- * Panel that responsible of holding cards.
- */
-public class CardPanel extends FrameLayout {
-    private final static String TAG = DebugUtil.getTag(CardPanel.class);
-
-    private final List<View> mOrderedChildren = new ArrayList<>(10);
-    private final Set<View> mViewsToBeRemoved = new HashSet<>();
-
-    public CardPanel(Context context) {
-        this(context, null);
-    }
-
-    public CardPanel(Context context, AttributeSet attrs) {
-        this(context, attrs, 0);
-    }
-
-    public CardPanel(Context context, AttributeSet attrs, int defStyleAttr) {
-        super(context, attrs, defStyleAttr);
-
-        setChildrenDrawingOrderEnabled(true);
-    }
-
-    @Override
-    public void addView(View child, int index) {
-        super.addView(child, index);
-        if (index < 0) {
-            mOrderedChildren.add(child);
-        } else {
-            mOrderedChildren.add(index, child);
-        }
-    }
-
-    @Override
-    public void removeView(View view) {
-        super.removeView(view);
-
-        mOrderedChildren.remove(view);
-        mViewsToBeRemoved.remove(view);
-    }
-
-    /**
-     * If we are removing view with animation, we do not want to treat this view as visible.
-     */
-    public void markViewToBeRemoved(View view) {
-        mViewsToBeRemoved.add(view);
-    }
-
-
-    public boolean childViewExists(View child) {
-        return indexOfChild(child) >= 0 && !mViewsToBeRemoved.contains(child);
-    }
-
-    /** Moves given child behind the top card */
-    public void moveChildBehindTheTop(View child) {
-        if (mOrderedChildren.size() <= 1) {
-            return;
-        }
-
-        int newIndex = mOrderedChildren.size() - 2;
-        int oldIndex = mOrderedChildren.indexOf(child);
-        if (oldIndex == -1) {
-            Log.e(TAG, "Child: " + child + " not found in "
-                    + Arrays.toString(mOrderedChildren.toArray()));
-            return;
-        }
-        if (newIndex == oldIndex) {
-            return;
-        }
-
-        // Swap children.
-        View tmpChild = mOrderedChildren.get(newIndex);
-        mOrderedChildren.set(newIndex, child);
-        mOrderedChildren.set(oldIndex, tmpChild);
-    }
-
-    public View getTopVisibleChild() {
-        for (int i = mOrderedChildren.size() - 1; i >= 0; i--) {
-            View child = mOrderedChildren.get(i);
-            if (child.getVisibility() == VISIBLE && !mViewsToBeRemoved.contains(child)) {
-                return child;
-            }
-        }
-        return null;
-    }
-
-    @SuppressWarnings("unchecked")
-    public <E> E getChildOrNull(Class<E> clazz) {
-        for (int i = 0; i < getChildCount(); i++) {
-            View child = getChildAt(i);
-            if (clazz.isInstance(child) && !mViewsToBeRemoved.contains(child)) {
-                return (E) child;
-            }
-        }
-        return null;
-    }
-
-    @SuppressWarnings("unchecked")
-    public <E> E getVisibleChildOrNull(Class<E> clazz) {
-        for (int i = 0; i < getChildCount(); i++) {
-            View child = getChildAt(i);
-            if (clazz.isInstance(child) && !mViewsToBeRemoved.contains(child)
-                    && child.getVisibility() == VISIBLE) {
-                return (E) child;
-            }
-        }
-        return null;
-    }
-
-    @Override
-    protected int getChildDrawingOrder(int childCount, int i) {
-        return indexOfChild(mOrderedChildren.get(i));
-    }
-}
diff --git a/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/ClusterInCallService.java b/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/ClusterInCallService.java
deleted file mode 100644
index 8348a2b..0000000
--- a/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/ClusterInCallService.java
+++ /dev/null
@@ -1,104 +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.cluster.sample;
-
-import static com.android.car.cluster.sample.DebugUtil.DEBUG;
-
-import android.content.Intent;
-import android.os.Binder;
-import android.os.IBinder;
-import android.telecom.Call;
-import android.telecom.Call.Callback;
-import android.telecom.InCallService;
-import android.util.Log;
-
-import java.lang.ref.WeakReference;
-
-/**
- * Monitors call state and reports it to the listeners that was registered using
- * {@link #registerListener} method.
- */
-public class ClusterInCallService extends InCallService {
-
-    private static final String TAG = DebugUtil.getTag(ClusterInCallService.class);
-
-    static final String ACTION_LOCAL_BINDING = "local_binding";
-
-    private final PhoneCallback mPhoneCallback = new PhoneCallback(this);
-    private volatile Callback mListener;
-
-    @Override
-    public void onCallAdded(Call call) {
-        if (DEBUG) {
-            Log.d(TAG, "onCallAdded");
-        }
-        call.registerCallback(mPhoneCallback);
-        mPhoneCallback.onStateChanged(call, call.getState());
-    }
-
-    @Override
-    public void onCallRemoved(Call call) {
-        if (DEBUG) {
-            Log.d(TAG, "onCallRemoved");
-        }
-        call.unregisterCallback(mPhoneCallback);
-    }
-
-    private void doStateChanged(Call call, int state) {
-        if (DEBUG) {
-            Log.d(TAG, "doStateChanged, call: " + call + ", state: " + state);
-        }
-        if (mListener != null) {
-            mListener.onStateChanged(call, state);
-        }
-    }
-
-    @Override
-    public IBinder onBind(Intent intent) {
-        Log.d(TAG, "onBind, intent:" + intent);
-        return ACTION_LOCAL_BINDING.equals(intent.getAction())
-            ? new LocalBinder() : super.onBind(intent);
-    }
-
-    public class LocalBinder extends Binder {
-        ClusterInCallService getService() {
-            return ClusterInCallService.this;
-        }
-    }
-
-    public void registerListener(Callback listener) {
-        Log.d(TAG, "registerListener, listener: " + listener);
-        mListener = listener;
-    }
-
-    private static class PhoneCallback extends Callback {
-        private final WeakReference<ClusterInCallService> mServiceRef;
-
-        private PhoneCallback(ClusterInCallService service) {
-            mServiceRef = new WeakReference<>(service);
-        }
-
-        @Override
-        public void onStateChanged(Call call, int state) {
-            Log.d(TAG, "PhoneCallback#onStateChanged, call: " + call + ", state: " + state);
-            ClusterInCallService service = mServiceRef.get();
-            if (service != null) {
-                service.doStateChanged(call, state);
-            }
-        }
-    }
-}
diff --git a/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/ClusterView.java b/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/ClusterView.java
deleted file mode 100644
index 7b4255c..0000000
--- a/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/ClusterView.java
+++ /dev/null
@@ -1,644 +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.cluster.sample;
-
-import static com.android.car.cluster.sample.BitmapUtils.generateMediaIcon;
-
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.content.Context;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.os.Handler;
-import android.os.Looper;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.view.View;
-import android.view.ViewAnimationUtils;
-import android.view.ViewGroup;
-import android.view.animation.AccelerateInterpolator;
-import android.view.animation.AlphaAnimation;
-import android.view.animation.Animation;
-import android.view.animation.Animation.AnimationListener;
-import android.view.animation.DecelerateInterpolator;
-import android.view.animation.Interpolator;
-import android.view.animation.Transformation;
-import android.view.animation.TranslateAnimation;
-import android.widget.FrameLayout;
-import android.widget.RelativeLayout;
-
-import com.android.car.cluster.sample.cards.CallCard;
-import com.android.car.cluster.sample.cards.CallCard.CallStatus;
-import com.android.car.cluster.sample.cards.CardView;
-import com.android.car.cluster.sample.cards.CardView.CardType;
-import com.android.car.cluster.sample.cards.MessageCard;
-import com.android.car.cluster.sample.cards.MediaCard;
-import com.android.car.cluster.sample.cards.NavCard;
-import com.android.car.cluster.sample.cards.WeatherCard;
-
-import java.util.PriorityQueue;
-
-/**
- * Class that represents cluster view. It is responsible of ranking cards and play animations
- * during card transitions.
- */
-public class ClusterView extends FrameLayout implements CardView.PriorityChangedListener{
-    private static final String TAG = DebugUtil.getTag(ClusterView.class);
-
-    private CardPanel mCardPanel;
-
-    private final Handler mHandler = new Handler(Looper.getMainLooper());
-    private final PriorityQueue<CardView> mQueue = new PriorityQueue<>(8);
-
-    public ClusterView(Context context) {
-        this(context, null);
-    }
-
-    public ClusterView(Context context, AttributeSet attrs) {
-        super(context, attrs);
-
-        inflate(getContext(), R.layout.cluster_view, this);
-        mCardPanel = (CardPanel) findViewById(R.id.card_panel);
-    }
-
-    private <E extends CardView> E createCard(@CardType int cardType) {
-        CardView card;
-        switch (cardType)
-        {
-            case CardType.WEATHER:
-                card = new WeatherCard(getContext(), this /* priority listener */);
-                break;
-            case CardType.MEDIA:
-                card = new MediaCard(getContext(), this /* priority listener */);
-                break;
-            case CardType.PHONE_CALL:
-                card = new CallCard(getContext(), this /* priority listener */);
-                break;
-            case CardType.NAV:
-                card = new NavCard(getContext(), this /* priority listener */);
-                break;
-            case CardType.HANGOUT:
-                card = new MessageCard(getContext(), this /* priority listener */);
-                break;
-            default:
-                card = new CardView(getContext(), cardType, this /* priority listener */);
-        }
-        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
-                ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
-        card.setLayoutParams(params);
-        return (E) card;
-    }
-
-    public void handleIncomingCall(Bitmap contactImage, String contactName) {
-        if (contactImage == null) {
-            contactImage = BitmapFactory.decodeResource(getResources(),
-                    R.drawable.unknown_contact_480);
-        }
-        CardView card = createIncomingCallCard(contactImage, contactName);
-        enqueueCard(card);
-    }
-
-    public void handleDialingCall(Bitmap contactImage, String contactName) {
-        if (contactImage == null) {
-            contactImage = BitmapFactory.decodeResource(getResources(),
-                    R.drawable.unknown_contact_480);
-        }
-        CardView card = createDialingCallCard(contactImage, contactName);
-        enqueueCard(card);
-    }
-
-    public void handleUpdateContactName(String contactName) {
-        CallCard card = getCallCard();
-        if (card != null) {
-            card.setContactName(contactName);
-        }
-    }
-
-    public void handleUpdateContactImage(Bitmap image) {
-        CallCard card = getCallCard();
-        if (card != null) {
-            updateContactImage(card, image);
-        }
-    }
-
-    public void handleHangoutMessage(Bitmap contactImage, String contactName) {
-        if (getCardOrNull(MessageCard.class) != null) {
-            return; // Deduplicate.
-        }
-
-        if (contactImage == null) {
-            contactImage = BitmapFactory.decodeResource(getResources(),
-                    R.drawable.unknown_contact_480);
-        }
-        MessageCard card = createCard(CardType.HANGOUT);
-        card.setContactName(contactName);
-
-        int c = getResources().getColor(R.color.hangout_background, null);
-        card.setBackgroundColor(c);
-        card.setLeftIcon(BitmapUtils.circleCropBitmap(contactImage));
-
-        enqueueCard(card);
-    }
-
-    public void handleCallConnected(long connectedTimestamp) {
-        if (DebugUtil.DEBUG) {
-            Log.d(TAG, "handleCallConnected, connectedTimestamp: " + connectedTimestamp);
-        }
-        CallCard card = getCallCard();
-        if (card != null) {
-            if (DebugUtil.DEBUG) {
-                Log.d(TAG, "handleCallConnected, call status: " + card.getCallStatus());
-            }
-
-            if (card.getCallStatus() == CallStatus.INCOMING_OR_DIALING) {
-                card.animateCallConnected(connectedTimestamp);
-            }
-        }
-    }
-
-    public void handleCallDisconnected() {
-        final CallCard callCard = getCallCard();
-        if (callCard != null) {
-            if (DebugUtil.DEBUG) {
-                Log.d(TAG, "handleCallDisconnected, callCard status: " + callCard.getCallStatus());
-            }
-
-            if (callCard == getCurrentCard()
-                    && callCard.getCallStatus() == CallStatus.ACTIVE) {
-                callCard.animateCallDisconnected();
-            } else {
-                removeCard(callCard);
-            }
-        }
-    }
-
-    public void runDelayed(long delay, final Runnable task) {
-        mHandler.postDelayed(task, delay);
-    }
-
-    public MediaCard createMediaCard(Bitmap albumCover, String title, String subtitle,
-            int appColor) {
-        MediaCard card = createCard(CardType.MEDIA);
-        int iconSize = card.getIconSize();
-
-        if (albumCover != null) {
-            Bitmap albumIcon = BitmapUtils.scaleBitmap(albumCover, iconSize, iconSize);
-            albumIcon = BitmapUtils.circleCropBitmap(albumIcon);
-            card.setLeftIcon(albumIcon);
-
-            Bitmap backgroundImage = BitmapUtils.scaleBitmapColors(albumCover,
-                    getResources().getColor(R.color.media_background_dark, null),
-                    getResources().getColor(R.color.media_background, null));
-
-            backgroundImage = BitmapUtils.scaleBitmap(backgroundImage,
-                    (int) (getResources().getDimension(R.dimen.card_width)),
-                    (int) getResources().getDimension(R.dimen.card_height));
-
-            int c = getResources().getColor(R.color.phone_background, null);
-            card.setBackground(backgroundImage, c);
-        }
-
-        Bitmap mediaApp = generateMediaIcon(iconSize,
-                appColor,
-                getResources().getColor(R.color.media_icon_foreground, null));
-        card.setRightIcon(mediaApp);
-        card.setProgressColor(appColor);
-        card.setTitle(title);
-        card.setSubtitle(subtitle);
-        return card;
-    }
-
-    public CardView getCurrentCard() {
-        return (CardView) mCardPanel.getTopVisibleChild();
-    }
-
-    public CardView createWeatherCard() {
-        CardView card;
-        card = createCard(CardType.WEATHER);
-        card.setBackgroundColor(getResources().getColor(R.color.weather_blue_sky, null));
-        return card;
-    }
-
-    public CallCard createIncomingCallCard(Bitmap contactImage, String contactName) {
-        CallCard card = createCard(CardType.PHONE_CALL);
-        updateContactImage(card, contactImage);
-        card.setContactName(contactName);
-        card.setStatusLabel(getContext().getString(R.string.incoming_call));
-        return card;
-    }
-
-    public CallCard createDialingCallCard(Bitmap contactImage, String contactName) {
-        CallCard card = createCard(CardType.PHONE_CALL);
-
-        updateContactImage(card, contactImage);
-        card.setContactName(contactName);
-        card.setStatusLabel(getContext().getString(R.string.dialing));
-        return card;
-    }
-
-    public NavCard createNavCard() {
-        return createCard(CardType.NAV);
-    }
-
-    private void updateContactImage(CardView card, Bitmap contactImage) {
-        int iconSize = (int)getResources().getDimension(R.dimen.card_icon_size);
-        Bitmap contactImageCircle = BitmapUtils.circleCropBitmap(
-                BitmapUtils.scaleBitmap(contactImage, iconSize, iconSize));
-        card.setLeftIcon(contactImageCircle);
-
-        contactImage = BitmapUtils.scaleBitmapColors(contactImage,
-                getResources().getColor(R.color.phone_background_dark, null),
-                getResources().getColor(R.color.phone_background, null));
-
-        contactImage = BitmapUtils.scaleBitmap(contactImage,
-                (int) getResources().getDimension(R.dimen.card_width),
-                (int) getResources().getDimension(R.dimen.card_height));
-
-        int c = getResources().getColor(R.color.phone_background, null);
-        card.setBackground(contactImage, c);
-    }
-
-    public boolean cardExists(CardView card) {
-        return mCardPanel.childViewExists(card);
-    }
-
-    public void removeCard(final CardView card) {
-        if (DebugUtil.DEBUG) {
-            Log.d(TAG, "removeCard, card: " + card);
-        }
-        final CardView currentlyShownCard = getCurrentCard();
-        if (currentlyShownCard == card) {
-            // Card is on the screen, play nice animation and then remove it.
-            mQueue.remove(card);
-            mCardPanel.markViewToBeRemoved(card);
-            CardView cardToShow = mQueue.peek();
-            if (cardToShow != null) {
-                Animation animation = cardToShow.getAnimation();
-                if (DebugUtil.DEBUG) {
-                    Log.d(TAG, "card to show: " + cardToShow + ", animation: " + animation);
-                }
-                if (animation != null) {
-                    cardToShow.getAnimation().cancel();
-                }
-
-                cardToShow.setVisibility(VISIBLE);
-                mCardPanel.moveChildBehindTheTop(cardToShow);
-            }
-            playUnrevealAnimation(card, new Runnable() {
-                @Override
-                public void run() {
-                    removeCardInternal(card);
-                }
-            });
-        } else {
-            // Card is not on the screen, just remove it.
-            if (DebugUtil.DEBUG) {
-                Log.d(TAG, "removeCard, card is not on the screen, remove it immediately");
-                removeCardInternal(card);
-            }
-        }
-    }
-
-    public void enqueueCard(final CardView card) {
-        if (DebugUtil.DEBUG) {
-            Log.d(TAG, "enqueueCard, card: " + card);
-        }
-        final CardView currentCard = getCurrentCard();
-        boolean cardIsOnTheScreen = card == currentCard;
-
-        boolean cardExisted = mQueue.remove(card);
-        mQueue.offer(card);
-
-        CardView activeCard = mQueue.peek();
-        boolean shouldDisplayCard = activeCard == card;
-
-        if (DebugUtil.DEBUG) {
-            Log.d(TAG, "enqueueCard, card: " + card + ", onScreen: "
-                    + cardIsOnTheScreen + ", cardExisted: " + cardExisted + ", shouldDisplayCard: "
-                    + shouldDisplayCard + ", activeCard: " + activeCard
-                    + ", currentCard: " + currentCard);
-        }
-
-        if (cardIsOnTheScreen) {
-            if (!shouldDisplayCard) {
-                // Card priority was decreased, but it still active. Need to reverse reveal
-                // animation and show underlying card.
-                showCardWithFadeoutAnimation(activeCard);
-            }
-        } else {
-            // Card is not on the screen right now.
-            if (cardExisted) {
-                if (shouldDisplayCard) {
-                    // Card was created in the past and is in the queue, need to show
-                    // this card using unreveal animation.
-                    showCardWithUnrevealAnimation(card);
-                }
-            } else {
-                if (shouldDisplayCard) {
-                    // Card doesn't exist, but we want to show it.
-                    showCardWithRevealAnimation(card);
-                } else {
-                    // We want to add the card to the panel, but do not want to show it.
-                    if (DebugUtil.DEBUG) {
-                        Log.d(TAG, "Adding hidden card");
-                    }
-                    card.setVisibility(GONE);
-                    mCardPanel.addView(card, 0);
-                }
-            }
-        }
-
-        removeInvisibleDuplicatedCard(card);  // Remove invisible cards with the same card type.
-
-        dumpCardsToLog();
-    }
-
-    private void showCardWithRevealAnimation(final CardView cardToShow) {
-        if (DebugUtil.DEBUG) {
-            Log.d(TAG, "showCardWithRevealAnimation, card: " + cardToShow);
-        }
-
-        removeInvisibleDuplicatedCard(cardToShow);
-
-        CardView currentCard = getCurrentCard();
-        mCardPanel.addView(cardToShow);
-        playRevealAnimation(cardToShow, currentCard, new RemoveOrHideCard(this, currentCard));
-    }
-
-    private void removeInvisibleDuplicatedCard(CardView card) {
-        Log.d(TAG, "removeInvisibleDuplicatedCard, card: " + card);
-        // Remove cards that has the same card type and not visible on the screen.
-        for (int i = mCardPanel.getChildCount() - 1; i >= 0; i--) {
-            CardView child = (CardView) mCardPanel.getChildAt(i);
-            if (child.getCardType() == card.getCardType()
-                    && child != card
-                    && child.getVisibility() != VISIBLE) {
-                Log.d(TAG, "removeInvisibleDuplicatedCard, found dup: " + child);
-                removeCardInternal(child);
-            }
-        }
-    }
-
-    private void showCardWithFadeoutAnimation(final CardView cardToShow) {
-        if (DebugUtil.DEBUG) {
-            Log.d(TAG, "showCardWithFadeoutAnimation, card: " + cardToShow);
-        }
-        // Place card behind the top card, it will become visible once fade out animation for the
-        // top card starts to play.
-        mCardPanel.moveChildBehindTheTop(cardToShow);
-        cardToShow.setVisibility(VISIBLE);
-
-        // Hide top card with animation.
-        playFadeOutAndSlideOutAnimation((CardView) mCardPanel.getTopVisibleChild());
-    }
-
-    private void showCardWithUnrevealAnimation(CardView cardToShow) {
-        if (DebugUtil.DEBUG) {
-            Log.d(TAG, "showCardWithUnrevealAnimation, card: " + cardToShow);
-        }
-        final CardView currentCard = (CardView) mCardPanel.getTopVisibleChild();
-        // Card was created in the past and is in the queue, need to show reverse reveal
-        // animation to unreveal this card.
-        mCardPanel.moveChildBehindTheTop(cardToShow);
-        cardToShow.setVisibility(VISIBLE);
-        playUnrevealAnimation(currentCard, new RemoveOrHideCard(this, currentCard));
-    }
-
-    private static class RemoveOrHideCard implements Runnable {
-        private final CardView mCard;
-
-        private final ClusterView mClusterView;
-
-        RemoveOrHideCard(ClusterView clusterView, CardView card) {
-            mCard = card;
-            mClusterView = clusterView;
-        }
-
-        @Override
-        public void run() {
-            if (DebugUtil.DEBUG) {
-                Log.d(TAG, "RemoveOrHideCard: " + mCard);
-            }
-
-            mClusterView.removeInvisibleDuplicatedCard(mCard);
-
-            if (mCard.isGarbage()) {
-                if (DebugUtil.DEBUG) {
-                    Log.d(TAG, "RemoveOrHideCard, card has garbage priority");
-                }
-                mClusterView.removeCardInternal(mCard);
-            } else {
-                if (DebugUtil.DEBUG) {
-                    Log.d(TAG, "RemoveOrHideCard, hiding card: " + mCard);
-                }
-                mCard.setVisibility(GONE);
-                mCard.setAlpha(1);  // Restore alpha after fade-out animation, it's gone anyway.
-                mClusterView.dumpCardsToLog();
-            }
-        }
-    }
-
-    private void removeCardInternal(CardView card) {
-        if (DebugUtil.DEBUG) {
-            Log.d(TAG, "removeCardInternal, card: " + card);
-        }
-        mCardPanel.removeView(card);
-        mQueue.remove(card);
-
-        dumpCardsToLog();
-    }
-
-    @Override
-    public void onPriorityChanged(CardView card, int priority) {
-        if (DebugUtil.DEBUG) {
-            Log.d(TAG, "onPriorityChanged, card: " + card + ", priority: " + priority);
-        }
-        if (cardExists(card)) {
-            enqueueCard(card);
-        }
-    }
-
-    private void playRevealAnimation(final CardView cardToShow, final CardView currentCard,
-            final Runnable oldCardDissapearedAction) {
-
-        if (currentCard == cardToShow) {
-            return;
-        }
-
-        if (currentCard != null) {
-            playAlphaAnimation(currentCard,
-                    0,    // Target alpha
-                    400,  // Duration
-                    new DecelerateInterpolator(0.5f),
-                    oldCardDissapearedAction);
-        }
-
-        cardToShow.addOnLayoutChangeListener(new OnLayoutChangeListener() {
-            @Override
-            public void onLayoutChange(View v, int left, int top, int right, int bottom,
-                    int oldLeft, int oldTop, int oldRight, int oldBottom) {
-                cardToShow.removeOnLayoutChangeListener(this);  // Just need it once.
-
-                createRevealAnimator(cardToShow, new DecelerateInterpolator(1f), true)
-                        .start();
-            }
-        });
-        cardToShow.onPlayRevealAnimation();
-    }
-
-    private void playAlphaAnimation(final CardView card, float targetAlpha, long duration,
-            Interpolator interpolator, final Runnable endAction) {
-        Animation animation = new AlphaAnimation(card.getAlpha(), targetAlpha);
-        animation.setDuration(duration * DebugUtil.ANIMATION_FACTOR);
-        animation.setInterpolator(interpolator);
-
-        animation.setAnimationListener(new AnimationListener() {
-            @Override
-            public void onAnimationStart(Animation animation) { }
-
-            @Override
-            public void onAnimationEnd(Animation animation) {
-                // For some reason, cancelled animation hasEnded() == true here.
-                // Check for start time instead.
-                if (endAction != null && animation.getStartTime() != Long.MIN_VALUE) {
-                    endAction.run();
-                }
-            }
-
-            @Override
-            public void onAnimationRepeat(Animation animation) { }
-        });
-        card.setAnimation(animation);
-        animation.start();
-    }
-
-    private static boolean isAnimationCancelled(Animation animation) {
-        return (animation.getStartTime() == Long.MIN_VALUE) || (!animation.hasEnded());
-    }
-
-    private void playFadeOutAndSlideOutAnimation(final CardView card) {
-        Animation animation = new TranslateAnimation(0, card.getWidth(), 0, 0) {
-            private final float mFromAlpha = card.getAlpha();
-            private final float mToAlpha = 0;
-
-            @Override
-            protected void applyTransformation(float interpolatedTime, Transformation t) {
-                super.applyTransformation(interpolatedTime, t);
-
-                final float alpha = mFromAlpha;
-                t.setAlpha(alpha + ((mToAlpha - alpha) * interpolatedTime));
-            }
-        };
-        animation.setDuration(600 * DebugUtil.ANIMATION_FACTOR);
-        animation.setAnimationListener(new AnimationListener() {
-            @Override
-            public void onAnimationStart(Animation animation) { }
-
-            @Override
-            public void onAnimationEnd(Animation animation) {
-                if (DebugUtil.DEBUG) {
-                    Log.d(TAG, "playFadeOutAndSlideOutAnimation, onAnimationEnd " + animation
-                            + ", startTime: " + animation.getStartTime());
-                }
-                if (!isAnimationCancelled(animation)) {
-                    new RemoveOrHideCard(ClusterView.this, card)
-                            .run();
-                }
-                // Reset X position.
-                card.setTranslationX(0);
-            }
-
-            @Override
-            public void onAnimationRepeat(Animation animation) { }
-        });
-        card.setAnimation(animation);
-        animation.start();
-    }
-
-    /** Hides given card and reveals underlying card */
-    private void playUnrevealAnimation(final CardView card, final Runnable unrevealCompleteAction) {
-        if (DebugUtil.DEBUG) {
-            Log.d(TAG, "playUnrevealAnimation, card: " + card);
-        }
-
-        final Animator anim = createRevealAnimator(card,
-                new AccelerateInterpolator(2f), false /* hide */);
-
-        anim.addListener(new AnimatorListenerAdapter() {
-            private boolean cancelled = false;
-
-            @Override
-            public void onAnimationCancel(Animator animation) {
-                if (DebugUtil.DEBUG) {
-                    Log.d(TAG, "onAnimationCancel, animation: " + animation);
-                }
-                cancelled = true;
-            }
-
-            @Override
-            public void onAnimationEnd(Animator animation) {
-                if (cancelled) {
-                    return;
-                }
-
-                if (DebugUtil.DEBUG) {
-                    Log.d(TAG, "onAnimationEnd, animation: " + animation);
-                }
-                unrevealCompleteAction.run();
-            }
-        });
-
-        anim.start();
-        card.onPlayUnrevealAnimation();
-    }
-
-    private Animator createRevealAnimator(CardView card, Interpolator interpolator, boolean show) {
-        int cardWidth = (int) getResources().getDimension(R.dimen.card_width);
-        int radius = (int) (cardWidth * 1.2f);
-        int centerY = (int) (getResources().getDimension(R.dimen.card_height) / 2);
-
-        Animator anim = ViewAnimationUtils.createCircularReveal(card, radius, centerY,
-                show ? 0 : radius /* start radius */,
-                show ? radius : 0 /* end radius */);
-
-        anim.setInterpolator(interpolator);
-        anim.setDuration(600 * DebugUtil.ANIMATION_FACTOR);
-        return anim;
-    }
-
-    public <E> E getCardOrNull(Class<E> clazz) {
-        return mCardPanel.getChildOrNull(clazz);
-    }
-
-    public <E> E getVisibleCardOrNull(Class<E> clazz) {
-        return mCardPanel.getVisibleChildOrNull(clazz);
-    }
-
-    private CallCard getCallCard() {
-        return getCardOrNull(CallCard.class);
-    }
-
-    private void dumpCardsToLog() {
-        if (DebugUtil.DEBUG) {
-            Log.d(TAG, "Cards in layout: " + mCardPanel.getChildCount() + ", cards in queue: "
-                    + mQueue.size());
-            for (int i = 0; i < mCardPanel.getChildCount(); i++) {
-                Log.d(TAG, "child: " + mCardPanel.getChildAt(i));
-            }
-        }
-    }
-}
diff --git a/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/DebugUtil.java b/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/DebugUtil.java
deleted file mode 100644
index c42fe14..0000000
--- a/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/DebugUtil.java
+++ /dev/null
@@ -1,33 +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.cluster.sample;
-
-/**
- * Utility functions / constants that make sense for debugging.
- */
-public final class DebugUtil {
-    /** The default factor is 1, increasing this number results in slowing down animation */
-    public static final long ANIMATION_FACTOR = 1;
-
-    public static final String TAG = "CLUSTER";
-
-    public static final boolean DEBUG = true;
-
-    public static String getTag(Class clazz) {
-        return TAG + "." + clazz.getSimpleName();
-    }
-}
diff --git a/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/InstrumentClusterController.java b/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/InstrumentClusterController.java
deleted file mode 100644
index fbfa8de..0000000
--- a/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/InstrumentClusterController.java
+++ /dev/null
@@ -1,594 +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.cluster.sample;
-
-import static com.android.car.cluster.sample.DebugUtil.DEBUG;
-
-import android.annotation.Nullable;
-import android.app.Presentation;
-import android.car.cluster.renderer.NavigationRenderer;
-import android.car.navigation.CarNavigationInstrumentCluster;
-import android.car.navigation.CarNavigationStatusManager;
-import android.content.ComponentName;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.ServiceConnection;
-import android.content.res.Resources;
-import android.graphics.Bitmap;
-import android.graphics.Color;
-import android.hardware.display.DisplayManager;
-import android.media.MediaDescription;
-import android.media.MediaMetadata;
-import android.media.session.PlaybackState;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.IBinder;
-import android.os.Looper;
-import android.os.SystemClock;
-import android.os.UserHandle;
-import android.provider.Settings;
-import android.telecom.Call;
-import android.telecom.GatewayInfo;
-import android.text.TextUtils;
-import android.util.Log;
-import android.util.SparseArray;
-import android.view.Display;
-
-import com.android.car.cluster.sample.MediaStateMonitor.MediaStateListener;
-import com.android.car.cluster.sample.cards.MediaCard;
-import com.android.car.cluster.sample.cards.NavCard;
-
-import java.text.DecimalFormatSymbols;
-import java.text.NumberFormat;
-import java.util.Locale;
-import java.util.Objects;
-import java.util.Timer;
-import java.util.TimerTask;
-
-/**
- * This class is responsible for subscribing to system events (such as call status, media status,
- * etc.) and updating accordingly UI component {@link ClusterView}.
- */
-/*package*/ class InstrumentClusterController {
-
-    private final static String TAG = DebugUtil.getTag(InstrumentClusterController.class);
-
-    private final Context mContext;
-    private final NavigationRenderer mNavigationRenderer;
-
-    private ClusterView mClusterView;
-    private MediaStateMonitor mMediaStateMonitor;
-    private MediaStateListenerImpl mMediaStateListener;
-    private ClusterInCallService mInCallService;
-    private MessagingNotificationHandler mNotificationHandler;
-    private StatusBarNotificationListener mNotificationListener;
-    private RetriableServiceBinder mInCallServiceRetriableBinder;
-    private RetriableServiceBinder mNotificationServiceRetriableBinder;
-
-    InstrumentClusterController(Context context) {
-        mContext = context;
-        mNavigationRenderer = new NavigationRendererImpl(this);
-
-        init();
-    }
-
-    private void init() {
-        grantNotificationListenerPermissionsIfNecessary(mContext);
-
-        final Display display = getInstrumentClusterDisplay(mContext);
-        if (DEBUG) {
-            Log.d(TAG, "Instrument cluster display: " + display);
-        }
-        if (display == null) {
-            return;
-        }
-
-        mClusterView = new ClusterView(mContext);
-        Presentation presentation = new InstrumentClusterPresentation(mContext, display);
-        presentation.setContentView(mClusterView);
-
-        // To handle incoming messages
-        mNotificationHandler = new MessagingNotificationHandler(mClusterView);
-
-        mMediaStateListener = new MediaStateListenerImpl(this);
-        mMediaStateMonitor = new MediaStateMonitor(mContext, mMediaStateListener);
-
-        mInCallServiceRetriableBinder = new RetriableServiceBinder(
-                new Handler(Looper.getMainLooper()),
-                mContext,
-                ClusterInCallService.class,
-                ClusterInCallService.ACTION_LOCAL_BINDING,
-                mInCallServiceConnection);
-        mInCallServiceRetriableBinder.attemptToBind();
-
-        mNotificationServiceRetriableBinder = new RetriableServiceBinder(
-                new Handler(Looper.getMainLooper()),
-                mContext,
-                StatusBarNotificationListener.class,
-                StatusBarNotificationListener.ACTION_LOCAL_BINDING,
-                mNotificationListenerConnection);
-        mNotificationServiceRetriableBinder.attemptToBind();
-
-        // Show default card - weather
-        mClusterView.enqueueCard(mClusterView.createWeatherCard());
-
-        presentation.show();
-    }
-
-    NavigationRenderer getNavigationRenderer() {
-        return mNavigationRenderer;
-    }
-
-    private final ServiceConnection mInCallServiceConnection = new ServiceConnection() {
-        @Override
-        public void onServiceConnected(ComponentName name, IBinder binder) {
-            if (DEBUG) {
-                Log.d(TAG, "onServiceConnected, name: " + name + ", binder: " + binder);
-            }
-
-            mInCallService = ((ClusterInCallService.LocalBinder) binder).getService();
-            mInCallService.registerListener(mCallServiceListener);
-
-            // The InCallServiceImpl could be bound when we already have some active calls, let's
-            // notify UI about these calls.
-            for (Call call : mInCallService.getCalls()) {
-                mCallServiceListener.onStateChanged(call, call.getState());
-            }
-            mInCallServiceRetriableBinder = null;
-        }
-
-        @Override
-        public void onServiceDisconnected(ComponentName name) {
-            if (DEBUG) {
-                Log.d(TAG, "onServiceDisconnected, name: " + name);
-            }
-        }
-    };
-
-    private final ServiceConnection mNotificationListenerConnection = new ServiceConnection() {
-        @Override
-        public void onServiceConnected(ComponentName name, IBinder binder) {
-            if (DEBUG) {
-                Log.d(TAG, "onServiceConnected, name: " + name + ", binder: " + binder);
-            }
-
-            mNotificationListener = ((StatusBarNotificationListener.LocalBinder) binder)
-                    .getService();
-            mNotificationListener.setHandler(mNotificationHandler);
-
-            mNotificationServiceRetriableBinder = null;
-        }
-
-        @Override
-        public void onServiceDisconnected(ComponentName name) {
-            if (DEBUG) {
-                Log.d(TAG, "onServiceDisconnected, name: "+ name);
-            }
-        }
-    };
-
-    private final Call.Callback mCallServiceListener = new Call.Callback() {
-        @Override
-        public void onStateChanged(Call call, int state) {
-            if (DEBUG) {
-                Log.d(TAG, "onCallStateChanged, call: " + call + ", state: " + state);
-            }
-
-            runOnMain(() -> InstrumentClusterController.this.onCallStateChanged(call, state));
-        }
-    };
-
-    private String extractPhoneNumber(Call call) {
-        String number = "";
-        Call.Details details = call.getDetails();
-        if (details != null) {
-            GatewayInfo gatewayInfo = details.getGatewayInfo();
-
-            if (gatewayInfo != null) {
-                number = gatewayInfo.getOriginalAddress().getSchemeSpecificPart();
-            } else if (details.getHandle() != null) {
-                number = details.getHandle().getSchemeSpecificPart();
-            }
-        } else {
-            number = mContext.getResources().getString(R.string.unknown);
-        }
-
-        return number;
-    }
-
-    private void onCallStateChanged(Call call, int state) {
-        if (DEBUG) {
-            Log.d(TAG, "onCallStateChanged, call: " + call + ", state: " + state);
-        }
-
-        switch (state) {
-            case Call.STATE_ACTIVE: {
-                Call.Details details = call.getDetails();
-                if (details != null) {
-                    long duration = System.currentTimeMillis() - details.getConnectTimeMillis();
-                    mClusterView.handleCallConnected(SystemClock.elapsedRealtime() - duration);
-                }
-            } break;
-            case Call.STATE_CONNECTING: {
-
-            } break;
-            case Call.STATE_DISCONNECTING: {
-                mClusterView.handleCallDisconnected();
-            } break;
-            case Call.STATE_DIALING: {
-                String phoneNumber = extractPhoneNumber(call);
-                String displayName = TelecomUtils.getDisplayName(mContext, phoneNumber);
-                Bitmap image = TelecomUtils
-                        .getContactPhotoFromNumber(mContext.getContentResolver(), phoneNumber);
-                mClusterView.handleDialingCall(image, displayName);
-            } break;
-            case Call.STATE_DISCONNECTED: {
-                mClusterView.handleCallDisconnected();
-            } break;
-            case Call.STATE_HOLDING:
-                break;
-            case Call.STATE_NEW:
-                break;
-            case Call.STATE_RINGING: {
-                String phoneNumber = extractPhoneNumber(call);
-                String displayName = TelecomUtils.getDisplayName(mContext, phoneNumber);
-                Bitmap image = TelecomUtils
-                        .getContactPhotoFromNumber(mContext.getContentResolver(), phoneNumber);
-                if (image != null) {
-                    if (DEBUG) {
-                        Log.d(TAG, "Incoming call, contact image size: " + image.getWidth()
-                                + "x" + image.getHeight());
-                    }
-                }
-                mClusterView.handleIncomingCall(image, displayName);
-            } break;
-            default:
-                Log.w(TAG, "Unexpected call state: " + state + ", call : " + call);
-        }
-    }
-
-    private static void grantNotificationListenerPermissionsIfNecessary(Context context) {
-        ComponentName componentName = new ComponentName(context,
-                StatusBarNotificationListener.class);
-        String componentFlatten = componentName.flattenToString();
-
-        ContentResolver resolver = context.getContentResolver();
-        String grantedComponents = Settings.Secure.getString(resolver,
-                Settings.Secure.ENABLED_NOTIFICATION_LISTENERS);
-
-        if (grantedComponents != null) {
-            String[] allowed = grantedComponents.split(":");
-            for (String s : allowed) {
-                if (s.equals(componentFlatten)) {
-                    if (DEBUG) {
-                        Log.d(TAG, "Notification listener permission granted.");
-                    }
-                    return;  // Permission already granted.
-                }
-            }
-        }
-
-        if (DEBUG) {
-            Log.d(TAG, "Granting notification listener permission.");
-        }
-        Settings.Secure.putString(resolver,
-                Settings.Secure.ENABLED_NOTIFICATION_LISTENERS,
-                grantedComponents + ":" + componentFlatten);
-
-    }
-
-    /* package */ void onDestroy() {
-        if (mMediaStateMonitor != null) {
-            mMediaStateMonitor.release();
-            mMediaStateMonitor = null;
-        }
-        if (mMediaStateListener != null) {
-            mMediaStateListener.release();
-            mMediaStateListener = null;
-        }
-        if (mInCallService != null) {
-            mContext.unbindService(mInCallServiceConnection);
-            mInCallService = null;
-        }
-        if (mNotificationListener != null) {
-            mContext.unbindService(mNotificationListenerConnection);
-            mNotificationListener = null;
-        }
-        if (mInCallServiceRetriableBinder != null) {
-            mInCallServiceRetriableBinder.release();
-            mInCallServiceRetriableBinder = null;
-        }
-        if (mNotificationServiceRetriableBinder != null) {
-            mNotificationServiceRetriableBinder.release();
-            mNotificationServiceRetriableBinder = null;
-        }
-    }
-
-    private static Display getInstrumentClusterDisplay(Context context) {
-        DisplayManager displayManager = context.getSystemService(DisplayManager.class);
-        Display[] displays = displayManager.getDisplays();
-
-        if (DEBUG) {
-            Log.d(TAG, "There are currently " + displays.length + " displays connected.");
-            for (Display display : displays) {
-                Log.d(TAG, "  " + display);
-            }
-        }
-
-        if (displays.length > 1) {
-            // TODO: Put this into settings?
-            return displays[displays.length - 1];
-        }
-        return null;
-    }
-
-    private static void runOnMain(Runnable runnable) {
-        new Handler(Looper.getMainLooper()).post(runnable);
-    }
-
-    private static class MediaStateListenerImpl implements MediaStateListener {
-        private final Timer mTimer = new Timer("ClusterMediaProgress");
-        private final ClusterView mClusterView;
-
-        private MediaData mCurrentMedia;
-        private MediaAppInfo mMediaAppInfo;
-        private MediaCard mCard;
-        private PlaybackState mPlaybackState;
-        private TimerTask mTimerTask;
-
-        MediaStateListenerImpl(InstrumentClusterController renderer) {
-            mClusterView = renderer.mClusterView;
-        }
-
-        void release() {
-            if (mTimerTask != null) {
-                mTimerTask.cancel();
-                mTimerTask = null;
-            }
-        }
-
-        @Override
-        public void onPlaybackStateChanged(final PlaybackState playbackState) {
-            if (DEBUG) {
-                Log.d(TAG, "onPlaybackStateChanged, playbackState: " + playbackState);
-            }
-
-            if (mTimerTask != null) {
-                mTimerTask.cancel();
-                mTimerTask = null;
-            }
-
-            if (playbackState != null) {
-                if ((playbackState.getState() == PlaybackState.STATE_PLAYING
-                            || playbackState.getState() == PlaybackState.STATE_BUFFERING)) {
-                    mPlaybackState = playbackState;
-
-                    if (mCurrentMedia != null) {
-                        showMediaCardIfNecessary(mCurrentMedia);
-
-                        if (mCurrentMedia.duration > 0) {
-                            startTrackProgressTimer();
-                        }
-                    }
-                } else if (playbackState.getState() == PlaybackState.STATE_STOPPED
-                        || playbackState.getState() == PlaybackState.STATE_ERROR
-                        || playbackState.getState() == PlaybackState.STATE_NONE) {
-                    hideMediaCard();
-                }
-            } else {
-                hideMediaCard();
-            }
-
-        }
-
-        private void startTrackProgressTimer() {
-            mTimerTask = new TimerTask() {
-                @Override
-                public void run() {
-                    runOnMain(() -> {
-                        if (mPlaybackState == null || mCard == null) {
-                            return;
-                        }
-                        long trackStarted = mPlaybackState.getLastPositionUpdateTime()
-                                - mPlaybackState.getPosition();
-                        long trackDuration = mCurrentMedia == null ? 0 : mCurrentMedia.duration;
-
-                        long currentTime = SystemClock.elapsedRealtime();
-                        long progressMs = (currentTime - trackStarted);
-                        if (trackDuration > 0) {
-                            mCard.setProgress((int)((progressMs * 100) / trackDuration));
-                        }
-                    });
-                }
-            };
-
-            mTimer.scheduleAtFixedRate(mTimerTask, 0, 1000);
-        }
-
-
-        @Override
-        public void onMetadataChanged(MediaMetadata metadata) {
-            if (DEBUG) {
-                Log.d(TAG, "onMetadataChanged: " + metadata);
-            }
-            MediaData data = MediaData.createFromMetadata(metadata);
-            if (data == null) {
-                hideMediaCard();
-            }
-            mCurrentMedia = data;
-        }
-
-        private void hideMediaCard() {
-            if (DEBUG) {
-                Log.d(TAG, "hideMediaCard");
-            }
-
-            if (mCard != null) {
-                mClusterView.removeCard(mCard);
-                mCard = null;
-            }
-
-            // Remove all existing media cards if any.
-            MediaCard mediaCard;
-            do {
-                mediaCard = mClusterView.getCardOrNull(MediaCard.class);
-                if (mediaCard != null) {
-                    mClusterView.removeCard(mediaCard);
-                }
-            } while (mediaCard != null);
-        }
-
-        private void showMediaCardIfNecessary(MediaData data) {
-            if (!needToCreateMediaCard(data)) {
-                return;
-            }
-
-            int accentColor = mMediaAppInfo == null
-                    ? Color.GRAY : mMediaAppInfo.getMediaClientAccentColor();
-
-            mCard = mClusterView.createMediaCard(
-                    data.albumCover, data.title, data.subtitle, accentColor);
-            if (data.duration <= 0) {
-                mCard.setProgress(100); // unknown position
-            } else {
-                mCard.setProgress(0);
-            }
-            mClusterView.enqueueCard(mCard);
-        }
-
-        private boolean needToCreateMediaCard(MediaData data) {
-            return (mCard == null)
-                    || !Objects.equals(mCard.getTitle(), data.title)
-                    || !Objects.equals(mCard.getSubtitle(), data.subtitle);
-        }
-
-        @Override
-        public void onMediaAppChanged(MediaAppInfo mediaAppInfo) {
-            mMediaAppInfo = mediaAppInfo;
-        }
-
-        private static class MediaData {
-            final Bitmap albumCover;
-            final String subtitle;
-            final String title;
-            final long duration;
-
-            private MediaData(MediaMetadata metadata) {
-                MediaDescription mediaDescription = metadata.getDescription();
-                title = charSequenceToString(mediaDescription.getTitle());
-                subtitle = charSequenceToString(mediaDescription.getSubtitle());
-                albumCover = mediaDescription.getIconBitmap();
-                duration = metadata.getLong(MediaMetadata.METADATA_KEY_DURATION);
-            }
-
-            static MediaData createFromMetadata(MediaMetadata metadata) {
-                return  metadata == null ? null : new MediaData(metadata);
-            }
-
-            private static String charSequenceToString(@Nullable CharSequence cs) {
-                return cs == null ? null : String.valueOf(cs);
-            }
-
-            @Override
-            public String toString() {
-                return "MediaData{" +
-                        "albumCover=" + albumCover +
-                        ", subtitle='" + subtitle + '\'' +
-                        ", title='" + title + '\'' +
-                        ", duration=" + duration +
-                        '}';
-            }
-        }
-    }
-
-    private static class NavigationRendererImpl extends NavigationRenderer {
-
-        private final InstrumentClusterController mController;
-
-        private ClusterView mClusterView;
-        private Resources mResources;
-
-        private NavCard mNavCard;
-
-        NavigationRendererImpl(InstrumentClusterController controller) {
-            mController = controller;
-        }
-
-        @Override
-        public CarNavigationInstrumentCluster getNavigationProperties() {
-            if (DEBUG) {
-                Log.d(TAG, "getNavigationProperties");
-            }
-            return CarNavigationInstrumentCluster.createCustomImageCluster(
-                    1000, /* 1 Hz*/
-                    64,   /* image width */
-                    64,   /* image height */
-                    32);  /* color depth */
-        }
-
-        @Override
-        public void onEvent(int eventType, Bundle bundle) {
-            if (DEBUG) {
-                Log.d(TAG, "onEvent");
-            }
-            // Implement this.
-        }
-    }
-
-    /**
-     * Services might not be ready for binding. This class will retry binding after short interval
-     * if previous binding failed.
-     */
-    private static class RetriableServiceBinder {
-        private static final long RETRY_INTERVAL_MS = 500;
-        private static final long MAX_RETRY = 30;
-
-        private Handler mHandler;
-        private final Context mContext;
-        private final Intent mIntent;
-        private final ServiceConnection mConnection;
-
-        private long mAttemptsLeft = MAX_RETRY;
-
-        private final Runnable mBindRunnable = () -> attemptToBind();
-
-        RetriableServiceBinder(Handler handler, Context context, Class<?> cls, String action,
-                ServiceConnection connection) {
-            mHandler = handler;
-            mContext = context;
-            mIntent = new Intent(mContext, cls);
-            mIntent.setAction(action);
-            mConnection = connection;
-        }
-
-        void release() {
-            mHandler.removeCallbacks(mBindRunnable);
-        }
-
-        void attemptToBind() {
-            boolean bound = mContext.bindServiceAsUser(mIntent,
-                    mConnection, Context.BIND_AUTO_CREATE, UserHandle.CURRENT_OR_SELF);
-
-            if (!bound && --mAttemptsLeft > 0) {
-                mHandler.postDelayed(mBindRunnable, RETRY_INTERVAL_MS);
-            } else if (!bound) {
-                Log.e(TAG, "Gave up to bind to a service: " + mIntent.getComponent() + " after "
-                        + MAX_RETRY + " retries.");
-            }
-        }
-    }
-}
diff --git a/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/InstrumentClusterPresentation.java b/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/InstrumentClusterPresentation.java
deleted file mode 100644
index 3a3068e..0000000
--- a/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/InstrumentClusterPresentation.java
+++ /dev/null
@@ -1,32 +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.cluster.sample;
-
-import android.app.Presentation;
-import android.content.Context;
-import android.view.Display;
-import android.view.WindowManager;
-
-/**
- * Presentation class.
- */
-public class InstrumentClusterPresentation extends Presentation {
-    public InstrumentClusterPresentation(Context outerContext, Display display) {
-        super(outerContext, display);
-        // To allow presentation from the service.
-        getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
-    }
-}
diff --git a/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/InstrumentClusterRenderingServiceImpl.java b/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/InstrumentClusterRenderingServiceImpl.java
deleted file mode 100644
index 066072e..0000000
--- a/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/InstrumentClusterRenderingServiceImpl.java
+++ /dev/null
@@ -1,57 +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.cluster.sample;
-
-import android.car.cluster.renderer.InstrumentClusterRenderingService;
-import android.car.cluster.renderer.NavigationRenderer;
-import android.view.KeyEvent;
-
-/**
- * Service for {@link InstrumentClusterController}. This is entry-point of the instrument cluster
- * renderer. This service will be bound from Car Service.
- */
-public class InstrumentClusterRenderingServiceImpl extends InstrumentClusterRenderingService {
-
-    private InstrumentClusterController mController;
-
-    @Override
-    public void onCreate() {
-        super.onCreate();
-
-        mController = new InstrumentClusterController(this /* context */);
-    }
-
-    @Override
-    public void onDestroy() {
-        super.onDestroy();
-
-        if (mController != null) {
-            mController.onDestroy();
-            mController = null;
-        }
-    }
-
-    @Override
-    public NavigationRenderer getNavigationRenderer() {
-        return mController.getNavigationRenderer();
-    }
-
-    @Override
-    public void onKeyEvent(KeyEvent keyEvent) {
-        // No need to handle key events in this implementation.
-    }
-}
diff --git a/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/ManeuverPanel.java b/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/ManeuverPanel.java
deleted file mode 100644
index 835b9ed..0000000
--- a/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/ManeuverPanel.java
+++ /dev/null
@@ -1,57 +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.cluster.sample;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import android.widget.FrameLayout;
-import android.widget.TextView;
-
-import com.android.car.cluster.sample.cards.NavCard;
-
-/**
- * Contains text information about next maneuver. This panel is used in {@link NavCard}.
- */
-public class ManeuverPanel extends FrameLayout {
-
-    private TextView mDistance;
-    private TextView mDistanceUnits;
-    private TextView mStreet;
-
-    public ManeuverPanel(Context context) {
-        this(context, null);
-    }
-
-    public ManeuverPanel(Context context, AttributeSet attrs) {
-        super(context, attrs);
-
-        inflate(context, R.layout.nav_card_maneuver_description, this);
-
-        mDistance = (TextView) findViewById(R.id.nav_distance);
-        mDistanceUnits = (TextView) findViewById(R.id.nav_distance_units);
-        mStreet = (TextView) findViewById(R.id.nav_street);
-    }
-
-    public void setDistanceToNextManeuver(String distance, String units) {
-        mDistance.setText(distance);
-        mDistanceUnits.setText(units);
-    }
-
-    public void setStreet(CharSequence street) {
-        mStreet.setText(street);
-    }
-}
diff --git a/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/MediaAppInfo.java b/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/MediaAppInfo.java
deleted file mode 100644
index 3f1e004..0000000
--- a/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/MediaAppInfo.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 com.android.car.cluster.sample;
-
-import android.content.Context;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageManager;
-import android.content.res.Resources;
-import android.content.res.TypedArray;
-import android.util.Log;
-
-/**
- * An immutable class which hold the the information about the currently connected media app.
- */
-public class MediaAppInfo {
-    private static final String TAG = DebugUtil.getTag(MediaAppInfo.class);
-
-    private int mAccentColor;
-
-    public MediaAppInfo(Context context, String packageName) {
-        try {
-            PackageManager packageManager = context.getPackageManager();
-            ApplicationInfo appInfo = packageManager.getApplicationInfo(packageName,
-                    PackageManager.GET_META_DATA);
-
-            fetchAppColors(packageName, appInfo.theme, context);
-        } catch (PackageManager.NameNotFoundException e) {
-            Log.e(TAG, "Got a component that doesn't exist (" + packageName + ")");
-        }
-    }
-
-    public int getMediaClientAccentColor() {
-        return mAccentColor;
-    }
-
-    private void fetchAppColors(String packageName, int appTheme, Context context) {
-        TypedArray ta = null;
-        try {
-            Context packageContext = context.createPackageContext(packageName, 0);
-            packageContext.setTheme(appTheme);
-            Resources.Theme theme = packageContext.getTheme();
-            ta = theme.obtainStyledAttributes(new int[]{ android.R.attr.colorAccent });
-            mAccentColor = ta.getColor(1,
-                    context.getResources().getColor(android.R.color.holo_green_light));
-        } catch (PackageManager.NameNotFoundException e) {
-            Log.e(TAG, "Unable to update media client package attributes.", e);
-        } finally {
-            if (ta != null) {
-                ta.recycle();
-            }
-        }
-    }
-}
\ No newline at end of file
diff --git a/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/MediaStateMonitor.java b/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/MediaStateMonitor.java
deleted file mode 100644
index 2b68d07..0000000
--- a/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/MediaStateMonitor.java
+++ /dev/null
@@ -1,143 +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.cluster.sample;
-
-import static com.android.car.cluster.sample.DebugUtil.DEBUG;
-
-import android.content.Context;
-import android.media.MediaMetadata;
-import android.media.session.MediaController;
-import android.media.session.MediaSessionManager;
-import android.media.session.MediaSessionManager.OnActiveSessionsChangedListener;
-import android.media.session.PlaybackState;
-import android.util.Log;
-
-import java.lang.ref.WeakReference;
-import java.util.List;
-
-/**
- * Reports current media status to instrument cluster renderer through {@link MediaStateListener}
- */
-public class MediaStateMonitor {
-
-    private final static String TAG = DebugUtil.getTag(MediaStateMonitor.class);
-
-    private final Context mContext;
-    private final MediaListener mMediaListener;
-    private MediaController mPrimaryMediaController;
-    private OnActiveSessionsChangedListener mActiveSessionsChangedListener;
-    private MediaSessionManager mMediaSessionManager;
-    private MediaStateListener mListener;
-
-    public MediaStateMonitor(Context context, MediaStateListener listener) {
-        mListener = listener;
-        mContext = context;
-        mMediaListener = new MediaListener(this);
-        mActiveSessionsChangedListener = controllers -> onActiveSessionsChanged(controllers);
-        mMediaSessionManager = mContext.getSystemService(MediaSessionManager.class);
-        mMediaSessionManager.addOnActiveSessionsChangedListener(
-                mActiveSessionsChangedListener, null);
-
-        onActiveSessionsChanged(mMediaSessionManager.getActiveSessions(null));
-    }
-
-    private void onActiveSessionsChanged(List<MediaController> controllers) {
-        if (DEBUG) {
-            Log.d(TAG, "onActiveSessionsChanged, controllers found:  " + controllers.size());
-        }
-        MediaController newPrimaryController = null;
-        if (!controllers.isEmpty()) {
-            newPrimaryController = controllers.get(0);
-            if (mPrimaryMediaController == newPrimaryController) {
-                // Primary media controller has not been changed.
-                return;
-            }
-        }
-
-        releasePrimaryMediaController();
-
-        if (newPrimaryController != null) {
-            mPrimaryMediaController = newPrimaryController;
-            mPrimaryMediaController.registerCallback(mMediaListener);
-            mListener.onMediaAppChanged(
-                    new MediaAppInfo(mContext, mPrimaryMediaController.getPackageName()));
-        }
-        updateRendererMediaStatusIfAvailable();
-    }
-
-    public void release() {
-        releasePrimaryMediaController();
-        if (mActiveSessionsChangedListener != null) {
-            mMediaSessionManager.removeOnActiveSessionsChangedListener(
-                    mActiveSessionsChangedListener);
-            mActiveSessionsChangedListener = null;
-        }
-        mMediaSessionManager = null;
-    }
-
-    private void releasePrimaryMediaController() {
-        if (mPrimaryMediaController != null) {
-            mPrimaryMediaController.unregisterCallback(mMediaListener);
-            mPrimaryMediaController = null;
-        }
-    }
-
-    private void updateRendererMediaStatusIfAvailable() {
-        mListener.onMetadataChanged(
-                mPrimaryMediaController == null ? null : mPrimaryMediaController.getMetadata());
-        mListener.onPlaybackStateChanged(
-                mPrimaryMediaController == null
-                ? null : mPrimaryMediaController.getPlaybackState());
-    }
-
-    private void onPlaybackStateChanged(PlaybackState state) {
-        mListener.onPlaybackStateChanged(state);
-    }
-
-    private void onMetadataChanged(MediaMetadata metadata) {
-        mListener.onMetadataChanged(metadata);
-    }
-
-    public interface MediaStateListener {
-        void onPlaybackStateChanged(PlaybackState playbackState);
-        void onMetadataChanged(MediaMetadata metadata);
-        void onMediaAppChanged(MediaAppInfo mediaAppPackage);
-    }
-
-    private static class MediaListener extends MediaController.Callback {
-        private final WeakReference<MediaStateMonitor> mServiceRef;
-
-        MediaListener(MediaStateMonitor service) {
-            mServiceRef = new WeakReference<>(service);
-        }
-
-        @Override
-        public void onPlaybackStateChanged(PlaybackState state) {
-            MediaStateMonitor service = mServiceRef.get();
-            if (service != null) {
-                service.onPlaybackStateChanged(state);
-            }
-        }
-
-        @Override
-        public void onMetadataChanged(MediaMetadata metadata) {
-            MediaStateMonitor service = mServiceRef.get();
-            if (service != null) {
-                service.onMetadataChanged(metadata);
-            }
-        }
-    }
-}
diff --git a/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/MessagingConverter.java b/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/MessagingConverter.java
deleted file mode 100644
index eddeec7..0000000
--- a/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/MessagingConverter.java
+++ /dev/null
@@ -1,106 +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.cluster.sample;
-
-import android.app.Notification;
-import android.graphics.Bitmap;
-import android.service.notification.StatusBarNotification;
-import android.text.TextUtils;
-import android.util.Log;
-
-import androidx.core.app.NotificationCompat.CarExtender;
-import androidx.core.app.NotificationCompat.CarExtender.UnreadConversation;
-
-/**
- * Convert a {@link CarExtender} notification into a {@link MessageContactDetails}
- */
-public class MessagingConverter {
-    private static final String TAG = DebugUtil.getTag(MessagingConverter.class);
-
-    public static boolean canConvert(StatusBarNotification sbn) {
-        Notification notification = sbn.getNotification();
-        if (notification == null) {
-            if (DebugUtil.DEBUG) {
-                Log.d(TAG, "Notification is empty.");
-            }
-            return false;
-        }
-        CarExtender ce = new CarExtender(sbn.getNotification());
-        if (ce.getUnreadConversation() == null) {
-            if (DebugUtil.DEBUG) {
-                Log.d(TAG, "Notification with no messaging component.");
-            }
-            return false;
-        }
-
-        CarExtender.UnreadConversation uc = ce.getUnreadConversation();
-        String[] messages = uc.getMessages();
-        if (messages == null || messages.length == 0) {
-            Log.w(TAG, "Car message notification with no messages.");
-            return false;
-        }
-
-        if (TextUtils.isEmpty(uc.getParticipant())) {
-            Log.w(TAG, "Car message notification with no participant.");
-            return false;
-        }
-
-        if (uc.getReplyPendingIntent() == null) {
-            Log.w(TAG, "Car message notification with no reply intent.");
-            return false;
-        }
-
-        for (String m : messages) {
-            if (m == null) {
-                Log.w(TAG, "Car message with null text.");
-                return false;
-            }
-        }
-        return true;
-    }
-
-    public static MessageContactDetails convert(StatusBarNotification sbn) {
-        CarExtender ce = new CarExtender(sbn.getNotification());
-        UnreadConversation uc = ce.getUnreadConversation();
-
-        Bitmap largeIcon = ce.getLargeIcon();
-        if (largeIcon == null) {
-            largeIcon = sbn.getNotification().largeIcon;
-        }
-        String name = uc.getParticipant();
-
-        return new MessageContactDetails(largeIcon, name);
-    }
-
-    public static class MessageContactDetails {
-        private final Bitmap mContactImage;
-        private final String mContactName;
-
-        private MessageContactDetails(Bitmap contactImage, String contactName) {
-            mContactImage = contactImage;
-            mContactName = contactName;
-        }
-
-        public Bitmap getContactImage() {
-            return mContactImage;
-        }
-
-        public String getContactName() {
-            return mContactName;
-        }
-    }
-}
diff --git a/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/MessagingNotificationHandler.java b/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/MessagingNotificationHandler.java
deleted file mode 100644
index e88ee46..0000000
--- a/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/MessagingNotificationHandler.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 com.android.car.cluster.sample;
-
-import static com.android.car.cluster.sample.DebugUtil.DEBUG;
-
-import android.app.Notification;
-import android.os.Handler;
-import android.os.Message;
-import android.service.notification.StatusBarNotification;
-import android.util.Log;
-
-import com.android.car.cluster.sample.MessagingConverter.MessageContactDetails;
-
-/**
- * Handles messaging {@link StatusBarNotification}.
- */
-class MessagingNotificationHandler extends Handler {
-    private static final String TAG = DebugUtil.getTag(MessagingNotificationHandler.class);
-
-    private final ClusterView mClusterView;
-
-    MessagingNotificationHandler(ClusterView cluster) {
-        mClusterView = cluster;
-    }
-
-    @Override
-    public void handleMessage(Message msg) {
-        if (DEBUG) {
-            Log.d(TAG, "NotificationHandler, handleMessage: " + msg);
-        }
-        if (msg.obj instanceof StatusBarNotification) {
-            StatusBarNotification sbn = (StatusBarNotification) msg.obj;
-            Notification notification = sbn.getNotification();
-            if (notification != null) {
-                if (DEBUG) {
-                    Log.d(TAG, "NotificationHandler, notification extras: "
-                            + notification.extras.toString());
-                }
-                if (MessagingConverter.canConvert(sbn)) {
-                    MessageContactDetails data = MessagingConverter.convert(sbn);
-                    mClusterView.handleHangoutMessage(
-                            data.getContactImage(), data.getContactName());
-                } else {
-                    Log.w(TAG, "Can't convert message: " + sbn);
-                }
-            }
-        } else {
-            Log.w(TAG, "Unexpected message with object: " + msg.obj);
-        }
-    }
-}
\ No newline at end of file
diff --git a/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/StatusBarNotificationListener.java b/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/StatusBarNotificationListener.java
deleted file mode 100644
index 8758766..0000000
--- a/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/StatusBarNotificationListener.java
+++ /dev/null
@@ -1,65 +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.cluster.sample;
-
-import android.content.Intent;
-import android.os.Binder;
-import android.os.Handler;
-import android.os.IBinder;
-import android.os.Message;
-import android.service.notification.NotificationListenerService;
-import android.service.notification.StatusBarNotification;
-import android.util.Log;
-
-/**
- * Listens to status bar notifications and passes it to the listener.
- */
-public class StatusBarNotificationListener extends NotificationListenerService {
-
-    private static final String TAG = DebugUtil.getTag(StatusBarNotificationListener.class);
-
-    static final String ACTION_LOCAL_BINDING = "local_binding";
-
-    private Handler mHandler;
-
-    @Override
-    public void onNotificationPosted(StatusBarNotification sbn) {
-        if (MessagingConverter.canConvert(sbn) && mHandler != null) {
-            Message msg = Message.obtain(mHandler);
-            msg.obj = sbn;
-            mHandler.sendMessage(msg);
-        }
-    }
-
-    @Override
-    public IBinder onBind(Intent intent) {
-        Log.d(TAG, "onBind, intent:" + intent);
-
-        return ACTION_LOCAL_BINDING.equals(intent.getAction())
-                ? new LocalBinder() : super.onBind(intent);
-    }
-
-    public void setHandler(Handler handler) {
-        mHandler = handler;
-    }
-
-    public class LocalBinder extends Binder {
-        public StatusBarNotificationListener getService() {
-            return StatusBarNotificationListener.this;
-        }
-    }
-}
diff --git a/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/TelecomUtils.java b/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/TelecomUtils.java
deleted file mode 100644
index dfe7cb7..0000000
--- a/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/TelecomUtils.java
+++ /dev/null
@@ -1,295 +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.cluster.sample;
-
-/**
- * Utility class to retrieve contact information.
- */
-import android.annotation.Nullable;
-import android.annotation.WorkerThread;
-import android.content.ContentResolver;
-import android.content.ContentUris;
-import android.content.Context;
-import android.database.Cursor;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.graphics.BitmapFactory.Options;
-import android.graphics.Rect;
-import android.net.Uri;
-import android.provider.ContactsContract;
-import android.telephony.PhoneNumberUtils;
-import android.telephony.TelephonyManager;
-import android.text.TextUtils;
-import android.util.Log;
-import android.util.LruCache;
-
-import java.io.InputStream;
-import java.util.HashMap;
-import java.util.Locale;
-
-public class TelecomUtils {
-
-    private final static String TAG = DebugUtil.getTag(TelecomUtils.class);
-
-    private static final String[] CONTACT_ID_PROJECTION = new String[] {
-            ContactsContract.PhoneLookup.DISPLAY_NAME,
-            ContactsContract.PhoneLookup.TYPE,
-            ContactsContract.PhoneLookup.LABEL,
-            ContactsContract.PhoneLookup._ID
-    };
-
-    private static LruCache<String, Bitmap> sContactPhotoNumberCache;
-    private static LruCache<Long, Bitmap> sContactPhotoIdCache;
-    private static HashMap<String, Integer> sContactIdCache;
-    private static HashMap<String, String> sFormattedNumberCache;
-    private static HashMap<String, String> sDisplayNameCache;
-    private static HashMap<String, String> sContactNameCache;
-    private static String sVoicemailNumber;
-    private static TelephonyManager sTelephonyManager;
-
-    /**
-     * Fetch contact photo by number from local cache.
-     *
-     * @param number
-     * @return Contact photo if it's in the cache, otherwise null.
-     */
-    @Nullable
-    public static Bitmap getCachedContactPhotoFromNumber(String number) {
-        if (number == null) {
-            return null;
-        }
-
-        if (sContactPhotoNumberCache == null) {
-            sContactPhotoNumberCache = new LruCache<String, Bitmap>(4194304 /** 4 mb **/) {
-                @Override
-                protected int sizeOf(String key, Bitmap value) {
-                    return value.getByteCount();
-                }
-            };
-        } else if (sContactPhotoNumberCache.get(number) != null) {
-            return sContactPhotoNumberCache.get(number);
-        }
-
-        return null;
-    }
-
-    @WorkerThread
-    public static Bitmap getContactPhotoFromNumber(ContentResolver contentResolver, String number) {
-        if (number == null) {
-            return null;
-        }
-
-        Bitmap photo = getCachedContactPhotoFromNumber(number);
-        if (photo != null) {
-            return photo;
-        }
-
-        int id = getContactIdFromNumber(contentResolver, number);
-        if (id == 0) {
-            return null;
-        }
-        photo = getContactPhotoFromId(contentResolver, id);
-        if (photo != null) {
-            sContactPhotoNumberCache.put(number, photo);
-        }
-        return photo;
-    }
-
-    /**
-     * Return the contact id for the given contact id
-     * @param id the contact id to get the photo for
-     * @return the contact photo if it is found, null otherwise.
-     */
-    public static Bitmap getContactPhotoFromId(ContentResolver contentResolver, long id) {
-        if (sContactPhotoIdCache == null) {
-            sContactPhotoIdCache = new LruCache<Long, Bitmap>(4194304 /** 4 mb **/) {
-                @Override
-                protected int sizeOf(Long key, Bitmap value) {
-                    return value.getByteCount();
-                }
-            };
-        } else if (sContactPhotoIdCache.get(id) != null) {
-            return sContactPhotoIdCache.get(id);
-        }
-
-        Uri photoUri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, id);
-        InputStream photoDataStream = ContactsContract.Contacts.openContactPhotoInputStream(
-                contentResolver, photoUri, true);
-
-        Options options = new Options();
-        options.inPreferQualityOverSpeed = true;
-        // Scaling will be handled by later. We shouldn't scale multiple times to avoid
-        // quality lost due to multiple potential scaling up and down.
-        options.inScaled = false;
-
-        Rect nullPadding = null;
-        Bitmap photo = BitmapFactory.decodeStream(photoDataStream, nullPadding, options);
-        if (photo != null) {
-            photo.setDensity(Bitmap.DENSITY_NONE);
-            sContactPhotoIdCache.put(id, photo);
-        }
-        return photo;
-    }
-
-    /**
-     * Return the contact id for the given phone number.
-     * @param number Caller phone number
-     * @return the contact id if it is found, 0 otherwise.
-     */
-    public static int getContactIdFromNumber(ContentResolver cr, String number) {
-        if (number == null || number.isEmpty()) {
-            return 0;
-        }
-        if (sContactIdCache == null) {
-            sContactIdCache = new HashMap<>();
-        } else if (sContactIdCache.containsKey(number)) {
-            return sContactIdCache.get(number);
-        }
-
-
-        Uri uri = Uri.withAppendedPath(
-                ContactsContract.PhoneLookup.CONTENT_FILTER_URI,
-                Uri.encode(number));
-        Cursor cursor = cr.query(uri, CONTACT_ID_PROJECTION, null, null, null);
-
-        try {
-            if (cursor != null && cursor.moveToFirst()) {
-                int id = cursor.getInt(cursor.getColumnIndex(ContactsContract.PhoneLookup._ID));
-                sContactIdCache.put(number, id);
-                return id;
-            }
-        }
-        finally {
-            if (cursor != null) {
-                cursor.close();
-            }
-        }
-        return 0;
-    }
-
-    public static String getVoicemailNumber(Context context) {
-        if (sVoicemailNumber == null) {
-            sVoicemailNumber = getTelephonyManager(context).getVoiceMailNumber();
-        }
-        return sVoicemailNumber;
-    }
-
-    public static TelephonyManager getTelephonyManager(Context context) {
-        if (sTelephonyManager == null) {
-            sTelephonyManager =
-                    (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
-        }
-        return sTelephonyManager;
-    }
-
-    public static String getFormattedNumber(Context context, String number) {
-        Log.d(TAG, "getFormattedNumber: " + number);
-        if (number == null) {
-            return "";
-        }
-
-        if (sFormattedNumberCache == null) {
-            sFormattedNumberCache = new HashMap<>();
-        } else {
-            if (sFormattedNumberCache.containsKey(number)) {
-                return sFormattedNumberCache.get(number);
-            }
-        }
-
-        String countryIso = getTelephonyManager(context).getSimCountryIso().toUpperCase(Locale.US);
-        if (countryIso.length() != 2) {
-            countryIso = Locale.getDefault().getCountry();
-            if (countryIso == null || countryIso.length() != 2) {
-                countryIso = "US";
-            }
-        }
-        Log.d(TAG, "PhoneNumberUtils.formatNumberToE16, number: "
-                + number + ", country: " + countryIso);
-        String e164 = PhoneNumberUtils.formatNumberToE164(number, countryIso);
-        String formattedNumber = PhoneNumberUtils.formatNumber(number, e164, countryIso);
-        formattedNumber = TextUtils.isEmpty(formattedNumber) ? number : formattedNumber;
-        sFormattedNumberCache.put(number, formattedNumber);
-        Log.d(TAG, "getFormattedNumber, result: " + formattedNumber);
-        return formattedNumber;
-    }
-
-    public static String getDisplayName(Context context, String number) {
-        return getDisplayName(context, number, null);
-    }
-
-    private static String getDisplayName(Context context, String number, Uri gatewayOriginalAddress) {
-        Log.d(TAG, "getDisplayName: " + number
-                + ", gatewayOriginalAddress: " + gatewayOriginalAddress);
-        if (sDisplayNameCache == null) {
-            sDisplayNameCache = new HashMap<>();
-        } else {
-            if (sDisplayNameCache.containsKey(number)) {
-                return sDisplayNameCache.get(number);
-            }
-        }
-
-        if (TextUtils.isEmpty(number)) {
-            return context.getString(R.string.unknown);
-        }
-        ContentResolver cr = context.getContentResolver();
-        String name;
-        if (number.equals(getVoicemailNumber(context))) {
-            name = context.getResources().getString(R.string.voicemail);
-        } else {
-            name = getContactNameFromNumber(cr, number);
-        }
-
-        if (name == null) {
-            name = getFormattedNumber(context, number);
-        }
-        if (name == null && gatewayOriginalAddress != null) {
-            name = gatewayOriginalAddress.getSchemeSpecificPart();
-        }
-        if (name == null) {
-            name = context.getString(R.string.unknown);
-        }
-        sDisplayNameCache.put(number, name);
-        return name;
-    }
-
-    private static String getContactNameFromNumber(ContentResolver cr, String number) {
-        if (sContactNameCache == null) {
-            sContactNameCache = new HashMap<>();
-        } else if (sContactNameCache.containsKey(number)) {
-            return sContactNameCache.get(number);
-        }
-
-        Uri uri = Uri.withAppendedPath(
-                ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number));
-
-        Cursor cursor = null;
-        String name = null;
-        try {
-            cursor = cr.query(uri,
-                    new String[] {ContactsContract.PhoneLookup.DISPLAY_NAME}, null, null, null);
-            if (cursor != null && cursor.moveToFirst()) {
-                name = cursor.getString(0);
-                sContactNameCache.put(number, name);
-            }
-        } finally {
-            if (cursor != null) {
-                cursor.close();
-            }
-        }
-        return name;
-    }
-}
diff --git a/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/cards/CallCard.java b/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/cards/CallCard.java
deleted file mode 100644
index 4ca58e6..0000000
--- a/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/cards/CallCard.java
+++ /dev/null
@@ -1,208 +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.cluster.sample.cards;
-
-import android.animation.TimeInterpolator;
-import android.content.Context;
-import android.graphics.BitmapFactory;
-import android.util.Log;
-import android.view.ViewTreeObserver;
-import android.view.ViewTreeObserver.OnGlobalLayoutListener;
-import android.view.animation.AccelerateDecelerateInterpolator;
-import android.widget.Chronometer;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-
-import com.android.car.cluster.sample.DebugUtil;
-import com.android.car.cluster.sample.R;
-
-/**
- * Card responsible to display current call status.
- */
-public class CallCard extends CardView {
-
-    private final static String TAG = DebugUtil.getTag(CallCard.class);
-
-    private LinearLayout mPhonePanel;
-    private Chronometer mCallDuration;
-    private TextView mContactName;
-    private TextView mCallStatusTextView;
-    private LinearLayout mCallDurationPanel;
-
-    private int mIncomingCallTextHeight;
-    private int mCallDurationTextHeight;
-
-    public int getCallStatus() {
-        return mCallStatus;
-    }
-
-    public @interface CallStatus {
-        int INCOMING_OR_DIALING = 1;
-        int ACTIVE = 2;
-        int DISCONNECTED = 4;
-    }
-
-    @CallStatus
-    private int mCallStatus;
-
-    public CallCard(Context context, PriorityChangedListener listener) {
-        super(context, CardType.PHONE_CALL, listener);
-    }
-
-    @Override
-    protected void init() {
-        if (DebugUtil.DEBUG) {
-            Log.d(TAG, "init");
-        }
-        mCallStatus = CallStatus.INCOMING_OR_DIALING;
-        mPriority = PRIORITY_CALL_INCOMING;
-
-        inflate(R.layout.call_card);
-
-        mPhonePanel = viewById(R.id.phone_text_panel);
-        mCallStatusTextView = viewById(R.id.call_status);
-        mCallDuration = viewById(R.id.call_duration);
-        mContactName = viewById(R.id.contact_name);
-        mCallDurationPanel = viewById(R.id.call_duration_panel);
-        mDetailsPanel = mPhonePanel;
-
-        mLeftIconSwitcher.setVisibility(GONE);
-        mCallDurationPanel.setVisibility(INVISIBLE);
-
-        setRightIcon(
-                BitmapFactory.decodeResource(getResources(), R.drawable.phone), true);
-
-        final ViewTreeObserver observer = mPhonePanel.getViewTreeObserver();
-        // Make sure to get dimensions after layout has been created.
-        observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
-            @Override
-            public void onGlobalLayout() {
-                mPhonePanel.getViewTreeObserver().removeOnGlobalLayoutListener(this);
-                mIncomingCallTextHeight = mCallStatusTextView.getHeight();
-                mCallDurationTextHeight = mCallDuration.getHeight();
-
-                // Call duration is hidden when call is not answered, adjust panel Y pos.
-                mPhonePanel.setTranslationY(mCallDurationTextHeight / 2);
-            }
-        });
-    }
-
-    public void setContactName(String contactName) {
-        mContactName.setText(contactName);
-    }
-
-    public void setStatusLabel(String status) {
-        mCallStatusTextView.setText(status);
-    }
-
-    public void animateCallConnected(long connectedTimestamp) {
-        if (DebugUtil.DEBUG) {
-            Log.d(TAG, "animateCallConnected, current status: " + mCallStatus);
-        }
-        if (mCallStatus == CallStatus.INCOMING_OR_DIALING) {
-            mCallStatus = CallStatus.ACTIVE;
-
-            // Decrease priority after call is answered.
-            runDelayed(3000, new Runnable() {
-                @Override
-                public void run() {
-                    setPriority(PRIORITY_CALL_ACTIVE);
-                }
-            });
-
-            final long duration = 500 * DebugUtil.ANIMATION_FACTOR;
-
-            TimeInterpolator interpolator =
-                    new AccelerateDecelerateInterpolator(getContext(), null);
-
-            mCallDuration.setBase(connectedTimestamp);
-            mCallDuration.start();
-
-            mBackgroundImage.animate()
-                    .alpha(0f)
-                    .setDuration(duration);
-
-            mLeftIconSwitcher.setTranslationX(mLeftPadding);
-            mLeftIconSwitcher.setVisibility(VISIBLE);
-            mRightIconSwitcher.animate()
-                    .translationX(mLeftPadding + mIconsOverlap)
-                    .setInterpolator(interpolator)
-                    .setDuration(duration);
-            setRightIcon(
-                    BitmapFactory.decodeResource(getResources(), R.drawable.phone_active), true);
-            mDetailsPanel.animate()
-                    .translationX(
-                            mLeftPadding + mIconsOverlap + mIconSize + mLeftPadding)
-                    .setInterpolator(interpolator)
-                    .setDuration(duration);
-
-            mCallStatusTextView.animate()
-                    .alpha(0f)
-                    .setDuration(duration);
-
-            mCallDurationPanel.setAlpha(0);
-            mCallDurationPanel.setVisibility(VISIBLE);
-            mCallDurationPanel.animate()
-                    .setDuration(duration)
-                    .alpha(1);
-
-            mPhonePanel.animate()
-                    .translationYBy(-(mIncomingCallTextHeight + mCallDurationTextHeight) / 2)
-                    .setDuration(duration);
-        }
-    }
-
-    public void animateCallDisconnected() {
-        if (DebugUtil.DEBUG) {
-            Log.d(TAG, "animateCallConnected, current status: " + mCallStatus);
-        }
-        if (mCallStatus == CallStatus.ACTIVE) {
-            mCallStatus = CallStatus.DISCONNECTED;
-
-            runDelayed(2000, new Runnable() {
-                @Override
-                public void run() {
-                    setPriority(PRIORITY_GARBAGE);
-                }
-            });
-
-            mCallDuration.stop();
-            final int duration = 500;
-
-            TimeInterpolator interpolator =
-                    new AccelerateDecelerateInterpolator(getContext(), null);
-
-            setRightIcon(
-                    BitmapFactory.decodeResource(getResources(), R.drawable.phone), true);
-            mRightIconSwitcher.animate()
-                    .translationX(mLeftPadding)
-                    .setInterpolator(interpolator)
-                    .setDuration(duration * DebugUtil.ANIMATION_FACTOR)
-                    .withEndAction(new Runnable() {
-                        @Override
-                        public void run() {
-                            mLeftIconSwitcher.setVisibility(GONE);
-                        }
-                    });
-            mDetailsPanel.animate()
-                    .translationX(mLeftPadding + mIconSize + mLeftPadding)
-                    .setInterpolator(interpolator)
-                    .setDuration(duration * DebugUtil.ANIMATION_FACTOR);
-        }
-    }
-
-}
diff --git a/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/cards/CardView.java b/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/cards/CardView.java
deleted file mode 100644
index 06c9fcc..0000000
--- a/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/cards/CardView.java
+++ /dev/null
@@ -1,376 +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.cluster.sample.cards;
-
-import android.content.Context;
-import android.graphics.Bitmap;
-import android.graphics.Bitmap.Config;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.Paint;
-import android.graphics.Paint.Style;
-import android.graphics.PorterDuff.Mode;
-import android.graphics.PorterDuffXfermode;
-import android.os.Handler;
-import android.os.Looper;
-import android.os.SystemClock;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.view.ViewGroup;
-import android.view.animation.DecelerateInterpolator;
-import android.widget.FrameLayout;
-import android.widget.ImageView;
-import android.widget.ImageView.ScaleType;
-import android.widget.ViewSwitcher;
-
-import com.android.car.cluster.sample.DebugUtil;
-import com.android.car.cluster.sample.R;
-
-/**
- * View that responsible for displaying cards in instrument cluster (including media, phone and
- * maps).
- */
-public class CardView extends FrameLayout implements Comparable<CardView> {
-
-    private final static String TAG = DebugUtil.getTag(CardView.class);
-
-    protected final static long SHOW_ANIMATION_DURATION = 1000 * DebugUtil.ANIMATION_FACTOR;
-
-    protected ImageView mBackgroundImage;
-    protected ViewGroup mDetailsPanel;
-    protected ViewSwitcher mLeftIconSwitcher;
-    protected ViewSwitcher mRightIconSwitcher;
-
-    private Bitmap mBitmap = Bitmap.createBitmap(1, 1, Config.ARGB_8888);
-
-    protected long mLastUpdated = SystemClock.elapsedRealtime();
-
-    private Canvas mCanvas = new Canvas();
-    private final Paint mBackgroundCirclePaint;
-
-    private final static Handler mHandler = new Handler(Looper.getMainLooper());
-
-    protected final int mCardWidth;
-    protected final int mCardHeight;
-    protected final int mCurveRadius;
-    protected final int mTextPanelWidth;
-    protected final float mLeftPadding;
-    protected final float mIconSize;
-    protected final float mIconsOverlap;
-
-    protected int mPriority = 9;
-
-    protected final static int PRIORITY_GARBAGE = 10;
-
-    protected final static int PRIORITY_CALL_INCOMING = 3;
-    protected final static int PRIORITY_CALL_ACTIVE = 5;
-    protected final static int PRIORITY_MEDIA_NOTIFICATION = 3;
-    protected final static int PRIORITY_MEDIA_ACTIVE = 6;
-    protected final static int PRIORITY_WEATHER_CARD = 9;
-    protected final static int PRIORITY_NAVIGATION_ACTIVE = 3;
-    protected final static int PRIORITY_HANGOUT_NOTIFICATION = 3;
-
-    @CardType
-    private int mCardType;
-    private final PriorityChangedListener mPriorityChangedListener;
-
-    public @interface CardType {
-        int WEATHER = 1;
-        int MEDIA = 2;
-        int PHONE_CALL = 3;
-        int NAV = 4;
-        int HANGOUT = 5;
-    }
-
-    public CardView(Context context, @CardType int cardType, PriorityChangedListener listener) {
-        this(context, null, cardType, listener);
-    }
-
-    public CardView(Context context, AttributeSet attrs, @CardType int cardType,
-            PriorityChangedListener listener) {
-        super(context, attrs);
-        mPriorityChangedListener = listener;
-        if (DebugUtil.DEBUG) {
-            Log.d(TAG, "ctor");
-        }
-        mCardType = cardType;
-
-        setWillNotDraw(false);  // This will trigger onDraw method.
-
-        mBackgroundCirclePaint = createBackgroundCirclePaint();
-        mCardWidth = (int)getResources().getDimension(R.dimen.card_width);
-        mCardHeight = (int) getResources().getDimension(R.dimen.card_height);
-        mTextPanelWidth = (int)getResources().getDimension(R.dimen.card_message_panel_width);
-        mLeftPadding = getResources().getDimension(R.dimen.card_content_left_padding);
-        mIconSize = getResources().getDimension(R.dimen.card_icon_size);
-        mIconsOverlap = mIconSize - mLeftPadding;
-        mCurveRadius = (int)(mCardWidth * 0.643f);
-
-        inflate(getContext(), R.layout.card_view, this);
-
-        if (this.isInEditMode()) {
-            return;
-        }
-
-        mLeftIconSwitcher = viewById(R.id.left_icon_switcher);
-        mRightIconSwitcher = viewById(R.id.right_icon_switcher);
-        mBackgroundImage = viewById(R.id.image_background);
-
-        init();
-    }
-
-    protected void inflate(int layoutId) {
-        inflate(getContext(), layoutId, (ViewGroup) getChildAt(0));
-    }
-
-    protected void init() {
-    }
-
-    @CardType
-    public int getCardType() {
-        return mCardType;
-    }
-
-    public void setLeftIcon(Bitmap bitmap) {
-        setLeftIcon(bitmap, false /* animated */);
-    }
-
-    public void setLeftIcon(Bitmap bitmap, boolean animated) {
-        if (DebugUtil.DEBUG) {
-            Log.d(TAG, "setLeftIcon, bitmap: " + bitmap);
-        }
-        switchImageViewBitmpa(bitmap, mLeftIconSwitcher, animated);
-    }
-
-
-    public void setRightIcon(Bitmap bitmap) {
-        setRightIcon(bitmap, false /* animated */);
-    }
-
-    /**
-     * @param bitmap if null, the image won't be displayed and message panel will be placed
-     * accordingly.
-     */
-    public void setRightIcon(Bitmap bitmap, boolean animated) {
-        if (DebugUtil.DEBUG) {
-            Log.d(TAG, "setRightIcon, bitmap: " + bitmap);
-        }
-        if (bitmap == null && mRightIconSwitcher.getVisibility() == VISIBLE) {
-            mRightIconSwitcher.setVisibility(GONE);
-        } else if (bitmap != null && mRightIconSwitcher.getVisibility() == GONE) {
-            mRightIconSwitcher.setVisibility(VISIBLE);
-        }
-
-        switchImageViewBitmpa(bitmap, mRightIconSwitcher, animated);
-    }
-
-    private void switchImageViewBitmpa(Bitmap bitmap, ViewSwitcher switcher, boolean animated) {
-        ImageView icon = (ImageView) (animated
-                ? switcher.getNextView() : switcher.getCurrentView());
-
-        icon.setBackground(null);
-        icon.setImageBitmap(bitmap);
-
-        if (animated) {
-            switcher.showNext();
-        }
-    }
-
-    /** Called by {@code ClusterView} when card should go away using unreveal animation */
-    public void onPlayUnrevealAnimation() {
-        if (DebugUtil.DEBUG) {
-            Log.d(TAG, "onPlayUnrevealAnimation");
-        }
-    }
-
-    public void onPlayRevealAnimation() {
-        if (DebugUtil.DEBUG) {
-            Log.d(TAG, "onPlayRevealAnimation");
-        }
-
-        if (mLeftIconSwitcher.getVisibility() == VISIBLE) {
-            mLeftIconSwitcher.setTranslationX(mCardWidth / 2);
-            mLeftIconSwitcher.animate()
-                    .translationX(getLeftIconTargetX())
-                    .setDuration(SHOW_ANIMATION_DURATION)
-                    .setInterpolator(getDecelerateInterpolator());
-        }
-
-        if (mRightIconSwitcher.getVisibility() == VISIBLE) {
-            mRightIconSwitcher.setTranslationX( mCardWidth - mTextPanelWidth / 2 - mIconSize);
-            mRightIconSwitcher.animate()
-                    .translationX(getRightIconTargetX())
-                    .setDuration(SHOW_ANIMATION_DURATION)
-                    .setInterpolator(getDecelerateInterpolator());
-        }
-
-        showDetailsPanelAnimation(getDetailsPanelTargetX());
-    }
-
-    protected float getLeftIconTargetX() {
-        return mLeftIconSwitcher.getVisibility() == VISIBLE ? mLeftPadding : 0;
-    }
-
-    protected float getRightIconTargetX() {
-        if (mRightIconSwitcher.getVisibility() != VISIBLE) {
-            return 0;
-        }
-        float x = mLeftPadding;
-        if (mLeftIconSwitcher.getVisibility() == VISIBLE) {
-            x += mIconsOverlap;
-        }
-        return  x;
-    }
-
-    protected float getDetailsPanelTargetX() {
-        return Math.max(getLeftIconTargetX(), getRightIconTargetX()) + mIconSize + mLeftPadding;
-    }
-
-    protected void showDetailsPanelAnimation(float textX) {
-        if (mDetailsPanel != null) {
-            mDetailsPanel.setTranslationX(mCardWidth - mTextPanelWidth / 2);
-            mDetailsPanel.animate()
-                    .translationX(textX)
-                    .setDuration(SHOW_ANIMATION_DURATION)
-                    .setInterpolator(getDecelerateInterpolator());
-        }
-    }
-
-    protected DecelerateInterpolator getDecelerateInterpolator() {
-        return new DecelerateInterpolator(2f);
-    }
-
-    public void setBackground(Bitmap bmpPicture, int backgroundColor) {
-        Bitmap bmpBackground = Bitmap.createBitmap(
-                mCardWidth,
-                (int)getResources().getDimension(R.dimen.card_height),
-                Config.ARGB_8888);
-        Canvas canvas = new Canvas(bmpBackground);
-        //clear previous drawings
-        canvas.drawColor(Color.TRANSPARENT, Mode.CLEAR);
-
-        Paint p = new Paint();
-        p.setColor(backgroundColor);
-        p.setAntiAlias(true);
-        p.setStyle(Style.FILL);
-        // Draw curved background.
-        canvas.drawCircle(mCurveRadius, (int)getResources().getDimension(
-                R.dimen.card_height) / 2,
-                mCurveRadius, p);
-
-        // Draw image respecting curved background.
-        p.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
-        float x = canvas.getWidth() - bmpPicture.getWidth();
-        float y = canvas.getHeight() - bmpPicture.getHeight();
-        if (y < 0) {
-            y = y / 2; // Center image if it is not fitting.
-        }
-        canvas.drawBitmap(bmpPicture, x, y, p);
-
-        mBackgroundImage.setScaleType(ScaleType.CENTER_CROP);
-        mBackgroundImage.setImageBitmap(bmpBackground);
-        if (mBackgroundImage.getVisibility() != VISIBLE) {
-            mBackgroundImage.setVisibility(VISIBLE);
-        }
-    }
-
-    public void setBackgroundColor(int color) {
-        mBackgroundCirclePaint.setColor(color);
-    }
-
-    private Paint createBackgroundCirclePaint() {
-        Paint p = new Paint();
-        p.setAntiAlias(true);
-        p.setXfermode(new PorterDuffXfermode(Mode.ADD));
-        p.setStyle(Style.FILL);
-        p.setColor(getResources().getColor(R.color.cluster_active_area_background, null));
-        return p;
-    }
-
-    @Override
-    protected void onDraw(Canvas canvas) {
-        super.onDraw(canvas);
-
-        if(mBitmap.isRecycled() || mBitmap.getWidth() != canvas.getWidth()
-                || mBitmap.getHeight() != canvas.getHeight()) {
-            Log.d(TAG, "creating bitmap...");
-            mBitmap.recycle();
-            mBitmap = Bitmap.createBitmap(canvas.getWidth(), canvas.getHeight(), Config.ARGB_8888);
-            mCanvas.setBitmap(mBitmap);
-        }
-
-        //clear previous drawings
-        mCanvas.drawColor(Color.TRANSPARENT, Mode.CLEAR);
-
-        mCanvas.drawCircle(mCurveRadius, getHeight() / 2, mCurveRadius, mBackgroundCirclePaint);
-
-        canvas.drawBitmap(mBitmap, 0, 0, null);
-    }
-
-    public int getIconSize() {
-        return (int)mIconSize;
-    }
-
-    public static void runDelayed(long delay, final Runnable task) {
-        mHandler.postDelayed(task, delay);
-    }
-
-    public void setPriority(int priority) {
-        mPriority = priority;
-        mPriorityChangedListener.onPriorityChanged(this, priority);
-    }
-
-    /**
-     * Should return number from 0 to 9. 0 - is most important, 9 is less important.
-     */
-    public int getPriority() {
-        return mPriority;
-    }
-
-    public boolean isGarbage() {
-        return getPriority() == PRIORITY_GARBAGE;
-    }
-
-    public void removeGracefully() {
-        setPriority(PRIORITY_GARBAGE);
-    }
-
-    @Override
-    public int compareTo(CardView another) {
-        int res = this.getPriority() - another.getPriority();
-        if (res == 0) {
-            // If objects have the same priorities, check the last time they were updated.
-            res = this.mLastUpdated > another.mLastUpdated ? -1 : 1;
-            if (DebugUtil.DEBUG) {
-                Log.d(TAG, "Found card with the same priority: " + this + " and " + another + ","
-                        + "this.mLastUpdated: " + mLastUpdated
-                        + ", another.mLastUpdated:" + another.mLastUpdated + ", res: " + res);
-
-            }
-        }
-        return res;
-    }
-
-    @SuppressWarnings("unchecked")
-    protected <E> E viewById(int id) {
-        return (E) findViewById(id);
-    }
-
-    public interface PriorityChangedListener {
-        void onPriorityChanged(CardView cardView, int newPriority);
-    }
-}
diff --git a/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/cards/MediaCard.java b/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/cards/MediaCard.java
deleted file mode 100644
index a20dffe..0000000
--- a/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/cards/MediaCard.java
+++ /dev/null
@@ -1,144 +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.cluster.sample.cards;
-
-import android.animation.TimeInterpolator;
-import android.content.Context;
-import android.content.res.ColorStateList;
-import android.graphics.PorterDuff;
-import android.view.animation.AccelerateDecelerateInterpolator;
-import android.widget.LinearLayout;
-import android.widget.ProgressBar;
-import android.widget.TextView;
-
-import com.android.car.cluster.sample.DebugUtil;
-import com.android.car.cluster.sample.R;
-
-/**
- * Card responsible to display media content.
- */
-public class MediaCard extends CardView {
-
-    private LinearLayout mMediaPanel;
-    private ProgressBar mProgressBar;
-    private TextView mTitle;
-    private TextView mSubtitle;
-
-    public MediaCard(Context context, PriorityChangedListener listener) {
-        super(context, CardType.MEDIA, listener);
-    }
-
-    @Override
-    protected void init() {
-        inflate(R.layout.media_card);
-
-        mPriority = PRIORITY_MEDIA_NOTIFICATION;
-
-        mMediaPanel = viewById(R.id.message_panel);
-        mProgressBar = viewById(R.id.progress_bar);
-        mTitle = viewById(R.id.media_title);
-        mSubtitle = viewById(R.id.media_subtitle);
-
-        mDetailsPanel = mMediaPanel;
-        mLeftIconSwitcher.setVisibility(GONE);
-    }
-
-    @Override
-    public void onPlayRevealAnimation() {
-        super.onPlayRevealAnimation();
-
-        // Decrease priority once notification animation is complete.
-        runDelayed(3000, new Runnable() {
-            @Override
-            public void run() {
-                setPriority(PRIORITY_MEDIA_ACTIVE);
-            }
-        });
-
-        if (mBackgroundImage.getVisibility() != GONE) {
-            runDelayed(SHOW_ANIMATION_DURATION + 3000, new Runnable() {
-                @Override
-                public void run() {
-                    animateBackgroundFadeOut();
-                }
-            });
-        }
-    }
-
-    private void animateBackgroundFadeOut() {
-        TimeInterpolator interpolator =
-                new AccelerateDecelerateInterpolator(getContext(), null);
-
-        long duration = 500 * DebugUtil.ANIMATION_FACTOR;
-
-        mBackgroundImage.animate()
-                .alpha(0f)
-                .setDuration(duration);
-
-        mLeftIconSwitcher.setTranslationX(mLeftPadding);
-        mLeftIconSwitcher.setVisibility(VISIBLE);
-        mRightIconSwitcher.animate()
-                .translationX(mLeftPadding + mIconsOverlap)
-                .setInterpolator(interpolator)
-                .setDuration(duration);
-
-        mDetailsPanel.animate()
-                .translationX(
-                        mLeftPadding + mIconsOverlap + mIconSize + mLeftPadding)
-                .setInterpolator(interpolator)
-                .setDuration(duration);
-
-    }
-
-    public void setProgressColor(int color) {
-        mProgressBar.getIndeterminateDrawable().setColorFilter(color, PorterDuff.Mode.SRC_IN);
-        mProgressBar.setProgressTintList(ColorStateList.valueOf(color));
-    }
-
-    public void setProgress(int progress) {
-        if (progress == -1) {
-            mProgressBar.setIndeterminate(true);
-            return;
-        } else {
-            mProgressBar.setIndeterminate(false);
-        }
-
-        if (progress > 100) {
-            progress = 100;
-        }
-        if (progress < 0) {
-            progress = 0;
-        }
-        mProgressBar.setProgress(progress);
-    }
-
-    public void setTitle(String album) {
-        mTitle.setText(album);
-    }
-
-    public void setSubtitle(String track) {
-        mSubtitle.setText(track);
-    }
-
-    public String getTitle() {
-        return mTitle.getText() == null ? null : String.valueOf(mTitle.getText());
-    }
-
-    public String getSubtitle() {
-        return mSubtitle.getText() == null ? null : String.valueOf(mSubtitle.getText());
-    }
-}
diff --git a/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/cards/MessageCard.java b/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/cards/MessageCard.java
deleted file mode 100644
index 7a878da..0000000
--- a/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/cards/MessageCard.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 com.android.car.cluster.sample.cards;
-
-import android.content.Context;
-import android.graphics.BitmapFactory;
-import android.util.AttributeSet;
-import android.widget.TextView;
-
-import com.android.car.cluster.sample.R;
-
-/**
- * Card that represents hangout notification.
- */
-public class MessageCard extends CardView {
-
-    private TextView mContactName;
-
-    public MessageCard(Context context, PriorityChangedListener listener) {
-        this(context, null, CardType.HANGOUT, listener);
-    }
-
-    public MessageCard(Context context, AttributeSet attrs, @CardType int cardType,
-            PriorityChangedListener listener) {
-        super(context, attrs, cardType, listener);
-    }
-
-    @Override
-    protected void init() {
-        super.init();
-
-        inflate(R.layout.hangout_layout);
-
-        mDetailsPanel = viewById(R.id.msg_text_panel);
-        mContactName = viewById(R.id.msg_card_contact_name);
-        setRightIcon(BitmapFactory.decodeResource(getResources(), R.drawable.hangouts_icon));
-
-        mPriority = PRIORITY_HANGOUT_NOTIFICATION;
-
-        // Remove this notification in 5 seconds.
-        runDelayed(5000, new Runnable() {
-            @Override
-            public void run() {
-                removeGracefully();
-            }
-        });
-    }
-
-    public void setContactName(String contactName) {
-        mContactName.setText(contactName);
-    }
-}
diff --git a/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/cards/NavCard.java b/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/cards/NavCard.java
deleted file mode 100644
index 0253184..0000000
--- a/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/cards/NavCard.java
+++ /dev/null
@@ -1,84 +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.cluster.sample.cards;
-
-import android.content.Context;
-import android.graphics.Bitmap;
-import android.util.AttributeSet;
-import android.view.View;
-import android.widget.ViewSwitcher;
-import android.widget.ViewSwitcher.ViewFactory;
-
-import com.android.car.cluster.sample.ManeuverPanel;
-import com.android.car.cluster.sample.R;
-
-/**
- * Card responsible for showing navigation.
- */
-public class NavCard extends CardView {
-
-    private ViewSwitcher mDirectionsSwitcher;
-
-    public NavCard(Context context, PriorityChangedListener listener) {
-        this(context, null, CardType.NAV, listener);
-    }
-
-    public NavCard(Context context, AttributeSet attrs, @CardType int cardType,
-            PriorityChangedListener listener) {
-        super(context, attrs, cardType, listener);
-
-    }
-
-    @Override
-    protected void init() {
-        inflate(R.layout.nav_card);
-
-        mPriority = PRIORITY_NAVIGATION_ACTIVE;
-
-        mDirectionsSwitcher = viewById(R.id.nav_directions_switcher);
-        mDetailsPanel = mDirectionsSwitcher;
-
-        mDirectionsSwitcher.setFactory(new ViewFactory() {
-            @Override
-            public View makeView() {
-                return new ManeuverPanel(getContext());
-            }
-        });
-
-        setRightIcon(null);  // To hide it.
-    }
-
-    public void setDistanceToNextManeuver(String distance, String units) {
-        ManeuverPanel maneuver = (ManeuverPanel) mDirectionsSwitcher.getCurrentView();
-        maneuver.setDistanceToNextManeuver(distance, units);
-    }
-
-    public void setStreet(CharSequence street) {
-        ManeuverPanel maneuver = (ManeuverPanel) mDirectionsSwitcher.getNextView();
-        maneuver.setStreet(street);
-        mDirectionsSwitcher.showNext();
-    }
-
-    public void setManeuverImage(Bitmap maneuverImage) {
-        setLeftIcon(maneuverImage, true /* animated */);
-    }
-
-    @Override
-    public void onPlayRevealAnimation() {
-        super.onPlayRevealAnimation();
-    }
-}
diff --git a/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/cards/WeatherCard.java b/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/cards/WeatherCard.java
deleted file mode 100644
index 8ab6b24..0000000
--- a/tests/InstrumentClusterRendererSample/src/com/android/car/cluster/sample/cards/WeatherCard.java
+++ /dev/null
@@ -1,85 +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.cluster.sample.cards;
-
-import android.content.Context;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.view.animation.DecelerateInterpolator;
-import android.widget.ImageView;
-
-import com.android.car.cluster.sample.DebugUtil;
-import com.android.car.cluster.sample.R;
-
-/**
- * Sample card responsible for displaying weather content.
- */
-public class WeatherCard extends CardView {
-
-    private ImageView mFarCloudImage;
-    private ImageView mNearCloudImage;
-
-    public WeatherCard(Context context, PriorityChangedListener listener) {
-        super(context, CardType.WEATHER, listener);
-    }
-
-    @Override
-    protected void init() {
-        inflate(R.layout.weather_card);
-
-        mPriority = PRIORITY_WEATHER_CARD;
-        mFarCloudImage = viewById(R.id.weather_far_cloud);
-        mNearCloudImage = viewById(R.id.weather_near_cloud);
-
-        mDetailsPanel = viewById(R.id.weather_panel);;
-        Bitmap theSun = BitmapFactory.decodeResource(getResources(), R.drawable.sun_154);
-        setLeftIcon(theSun);
-        mLeftIconSwitcher.setVisibility(VISIBLE);
-        ((ImageView)mRightIconSwitcher.getCurrentView()).setImageDrawable(
-                getResources().getDrawable(R.drawable.cloud_154_shadow, null));
-        mRightIconSwitcher.setVisibility(VISIBLE);
-    }
-
-    @Override
-    public void onPlayRevealAnimation() {
-        super.onPlayRevealAnimation();
-        long duration = SHOW_ANIMATION_DURATION * DebugUtil.ANIMATION_FACTOR;
-
-        mNearCloudImage.setTranslationX(400);
-        mNearCloudImage.animate()
-                .translationX(0)
-                .setDuration(duration)
-                .setInterpolator(new DecelerateInterpolator(2f));
-
-        // Far cloud needs to travel less in screen coordinates so it will make it slower.
-        mFarCloudImage.setTranslationX(100);
-        mFarCloudImage.animate()
-                .translationX(0)
-                .setDuration(duration)
-                .setInterpolator(new DecelerateInterpolator(2f));
-    }
-
-    @Override
-    protected float getRightIconTargetX() {
-        return super.getRightIconTargetX() - 22;
-    }
-
-    @Override
-    protected float getDetailsPanelTargetX() {
-        return super.getDetailsPanelTargetX() - 70;
-    }
-}
diff --git a/car-cluster-logging-renderer/res/values-af/strings.xml b/tests/MultiDisplayTestHelloActivity/res/values-as/strings.xml
similarity index 62%
copy from car-cluster-logging-renderer/res/values-af/strings.xml
copy to tests/MultiDisplayTestHelloActivity/res/values-as/strings.xml
index daa61a3..f4490dc 100644
--- a/car-cluster-logging-renderer/res/values-af/strings.xml
+++ b/tests/MultiDisplayTestHelloActivity/res/values-as/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!--  Copyright (C) 2016 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.
      You may obtain a copy of the License at
 
-       http://www.apache.org/licenses/LICENSE-2.0
+          http://www.apache.org/licenses/LICENSE-2.0
 
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
@@ -16,5 +16,7 @@
 
 <resources 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>
+    <string name="hello_activity_text_text" msgid="8189259382863353832">"নমস্কাৰ, পৃথিৱী!"</string>
+    <string name="app_name_default" msgid="110846623663619763">"MDTHelloDefault"</string>
+    <string name="app_name_always" msgid="6684579479829101738">"MDTHelloAlways"</string>
 </resources>
diff --git a/car-cluster-logging-renderer/res/values-af/strings.xml b/tests/MultiDisplayTestHelloActivity/res/values-bn/strings.xml
similarity index 62%
copy from car-cluster-logging-renderer/res/values-af/strings.xml
copy to tests/MultiDisplayTestHelloActivity/res/values-bn/strings.xml
index daa61a3..a27bebe 100644
--- a/car-cluster-logging-renderer/res/values-af/strings.xml
+++ b/tests/MultiDisplayTestHelloActivity/res/values-bn/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!--  Copyright (C) 2016 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.
      You may obtain a copy of the License at
 
-       http://www.apache.org/licenses/LICENSE-2.0
+          http://www.apache.org/licenses/LICENSE-2.0
 
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
@@ -16,5 +16,7 @@
 
 <resources 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>
+    <string name="hello_activity_text_text" msgid="8189259382863353832">"হ্যালো, ওয়ার্ল্ড!"</string>
+    <string name="app_name_default" msgid="110846623663619763">"MDTHelloDefault"</string>
+    <string name="app_name_always" msgid="6684579479829101738">"MDTHelloAlways"</string>
 </resources>
diff --git a/car-cluster-logging-renderer/res/values-af/strings.xml b/tests/MultiDisplayTestHelloActivity/res/values-eu/strings.xml
similarity index 64%
copy from car-cluster-logging-renderer/res/values-af/strings.xml
copy to tests/MultiDisplayTestHelloActivity/res/values-eu/strings.xml
index daa61a3..ff1a717 100644
--- a/car-cluster-logging-renderer/res/values-af/strings.xml
+++ b/tests/MultiDisplayTestHelloActivity/res/values-eu/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!--  Copyright (C) 2016 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.
      You may obtain a copy of the License at
 
-       http://www.apache.org/licenses/LICENSE-2.0
+          http://www.apache.org/licenses/LICENSE-2.0
 
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
@@ -16,5 +16,7 @@
 
 <resources 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>
+    <string name="hello_activity_text_text" msgid="8189259382863353832">"Kaixo!"</string>
+    <string name="app_name_default" msgid="110846623663619763">"MDTHelloDefault"</string>
+    <string name="app_name_always" msgid="6684579479829101738">"MDTHelloAlways"</string>
 </resources>
diff --git a/car-cluster-logging-renderer/res/values-af/strings.xml b/tests/MultiDisplayTestHelloActivity/res/values-gu/strings.xml
similarity index 62%
copy from car-cluster-logging-renderer/res/values-af/strings.xml
copy to tests/MultiDisplayTestHelloActivity/res/values-gu/strings.xml
index daa61a3..ad17840 100644
--- a/car-cluster-logging-renderer/res/values-af/strings.xml
+++ b/tests/MultiDisplayTestHelloActivity/res/values-gu/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!--  Copyright (C) 2016 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.
      You may obtain a copy of the License at
 
-       http://www.apache.org/licenses/LICENSE-2.0
+          http://www.apache.org/licenses/LICENSE-2.0
 
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
@@ -16,5 +16,7 @@
 
 <resources 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>
+    <string name="hello_activity_text_text" msgid="8189259382863353832">"વિશ્વને નમસ્કાર!"</string>
+    <string name="app_name_default" msgid="110846623663619763">"MDTHelloDefault"</string>
+    <string name="app_name_always" msgid="6684579479829101738">"MDTHelloAlways"</string>
 </resources>
diff --git a/car-cluster-logging-renderer/res/values-af/strings.xml b/tests/MultiDisplayTestHelloActivity/res/values-hi/strings.xml
similarity index 62%
copy from car-cluster-logging-renderer/res/values-af/strings.xml
copy to tests/MultiDisplayTestHelloActivity/res/values-hi/strings.xml
index daa61a3..5e6e732 100644
--- a/car-cluster-logging-renderer/res/values-af/strings.xml
+++ b/tests/MultiDisplayTestHelloActivity/res/values-hi/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!--  Copyright (C) 2016 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.
      You may obtain a copy of the License at
 
-       http://www.apache.org/licenses/LICENSE-2.0
+          http://www.apache.org/licenses/LICENSE-2.0
 
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
@@ -16,5 +16,7 @@
 
 <resources 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>
+    <string name="hello_activity_text_text" msgid="8189259382863353832">"सभी को नमस्कार!"</string>
+    <string name="app_name_default" msgid="110846623663619763">"MDTHelloDefault"</string>
+    <string name="app_name_always" msgid="6684579479829101738">"MDTHelloAlways"</string>
 </resources>
diff --git a/car-cluster-logging-renderer/res/values-af/strings.xml b/tests/MultiDisplayTestHelloActivity/res/values-iw/strings.xml
similarity index 64%
rename from car-cluster-logging-renderer/res/values-af/strings.xml
rename to tests/MultiDisplayTestHelloActivity/res/values-iw/strings.xml
index daa61a3..d5c90ec 100644
--- a/car-cluster-logging-renderer/res/values-af/strings.xml
+++ b/tests/MultiDisplayTestHelloActivity/res/values-iw/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!--  Copyright (C) 2016 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.
      You may obtain a copy of the License at
 
-       http://www.apache.org/licenses/LICENSE-2.0
+          http://www.apache.org/licenses/LICENSE-2.0
 
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
@@ -16,5 +16,7 @@
 
 <resources 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>
+    <string name="hello_activity_text_text" msgid="8189259382863353832">"Hello world!‎"</string>
+    <string name="app_name_default" msgid="110846623663619763">"MDTHelloDefault"</string>
+    <string name="app_name_always" msgid="6684579479829101738">"MDTHelloAlways"</string>
 </resources>
diff --git a/car-cluster-logging-renderer/res/values-af/strings.xml b/tests/MultiDisplayTestHelloActivity/res/values-ka/strings.xml
similarity index 62%
copy from car-cluster-logging-renderer/res/values-af/strings.xml
copy to tests/MultiDisplayTestHelloActivity/res/values-ka/strings.xml
index daa61a3..fb1ff2f 100644
--- a/car-cluster-logging-renderer/res/values-af/strings.xml
+++ b/tests/MultiDisplayTestHelloActivity/res/values-ka/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!--  Copyright (C) 2016 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.
      You may obtain a copy of the License at
 
-       http://www.apache.org/licenses/LICENSE-2.0
+          http://www.apache.org/licenses/LICENSE-2.0
 
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
@@ -16,5 +16,7 @@
 
 <resources 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>
+    <string name="hello_activity_text_text" msgid="8189259382863353832">"გამარჯობა, სამყაროვ!"</string>
+    <string name="app_name_default" msgid="110846623663619763">"MDTHelloDefault"</string>
+    <string name="app_name_always" msgid="6684579479829101738">"MDTHelloAlways"</string>
 </resources>
diff --git a/car-cluster-logging-renderer/res/values-af/strings.xml b/tests/MultiDisplayTestHelloActivity/res/values-kk/strings.xml
similarity index 63%
copy from car-cluster-logging-renderer/res/values-af/strings.xml
copy to tests/MultiDisplayTestHelloActivity/res/values-kk/strings.xml
index daa61a3..71dc98e 100644
--- a/car-cluster-logging-renderer/res/values-af/strings.xml
+++ b/tests/MultiDisplayTestHelloActivity/res/values-kk/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!--  Copyright (C) 2016 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.
      You may obtain a copy of the License at
 
-       http://www.apache.org/licenses/LICENSE-2.0
+          http://www.apache.org/licenses/LICENSE-2.0
 
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
@@ -16,5 +16,7 @@
 
 <resources 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>
+    <string name="hello_activity_text_text" msgid="8189259382863353832">"Бәріне сәлем!"</string>
+    <string name="app_name_default" msgid="110846623663619763">"MDTHelloDefault"</string>
+    <string name="app_name_always" msgid="6684579479829101738">"MDTHelloAlways"</string>
 </resources>
diff --git a/car-cluster-logging-renderer/res/values-af/strings.xml b/tests/MultiDisplayTestHelloActivity/res/values-kn/strings.xml
similarity index 62%
copy from car-cluster-logging-renderer/res/values-af/strings.xml
copy to tests/MultiDisplayTestHelloActivity/res/values-kn/strings.xml
index daa61a3..283e7ac 100644
--- a/car-cluster-logging-renderer/res/values-af/strings.xml
+++ b/tests/MultiDisplayTestHelloActivity/res/values-kn/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!--  Copyright (C) 2016 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.
      You may obtain a copy of the License at
 
-       http://www.apache.org/licenses/LICENSE-2.0
+          http://www.apache.org/licenses/LICENSE-2.0
 
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
@@ -16,5 +16,7 @@
 
 <resources 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>
+    <string name="hello_activity_text_text" msgid="8189259382863353832">"ಈ ಜಗತ್ತಿಗೆ, ನಮಸ್ಕಾರ!"</string>
+    <string name="app_name_default" msgid="110846623663619763">"MDTHelloDefault"</string>
+    <string name="app_name_always" msgid="6684579479829101738">"MDTHelloAlways"</string>
 </resources>
diff --git a/car-cluster-logging-renderer/res/values-af/strings.xml b/tests/MultiDisplayTestHelloActivity/res/values-ml/strings.xml
similarity index 63%
copy from car-cluster-logging-renderer/res/values-af/strings.xml
copy to tests/MultiDisplayTestHelloActivity/res/values-ml/strings.xml
index daa61a3..353fd0d 100644
--- a/car-cluster-logging-renderer/res/values-af/strings.xml
+++ b/tests/MultiDisplayTestHelloActivity/res/values-ml/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!--  Copyright (C) 2016 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.
      You may obtain a copy of the License at
 
-       http://www.apache.org/licenses/LICENSE-2.0
+          http://www.apache.org/licenses/LICENSE-2.0
 
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
@@ -16,5 +16,7 @@
 
 <resources 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>
+    <string name="hello_activity_text_text" msgid="8189259382863353832">"ഹലോ, വേൾഡ്!"</string>
+    <string name="app_name_default" msgid="110846623663619763">"MDTHelloDefault"</string>
+    <string name="app_name_always" msgid="6684579479829101738">"MDTHelloAlways"</string>
 </resources>
diff --git a/car-cluster-logging-renderer/res/values-af/strings.xml b/tests/MultiDisplayTestHelloActivity/res/values-mr/strings.xml
similarity index 63%
copy from car-cluster-logging-renderer/res/values-af/strings.xml
copy to tests/MultiDisplayTestHelloActivity/res/values-mr/strings.xml
index daa61a3..b143ba3 100644
--- a/car-cluster-logging-renderer/res/values-af/strings.xml
+++ b/tests/MultiDisplayTestHelloActivity/res/values-mr/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!--  Copyright (C) 2016 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.
      You may obtain a copy of the License at
 
-       http://www.apache.org/licenses/LICENSE-2.0
+          http://www.apache.org/licenses/LICENSE-2.0
 
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
@@ -16,5 +16,7 @@
 
 <resources 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>
+    <string name="hello_activity_text_text" msgid="8189259382863353832">"हॅलो, दुनिया!"</string>
+    <string name="app_name_default" msgid="110846623663619763">"MDTHelloDefault"</string>
+    <string name="app_name_always" msgid="6684579479829101738">"MDTHelloAlways"</string>
 </resources>
diff --git a/car-cluster-logging-renderer/res/values-af/strings.xml b/tests/MultiDisplayTestHelloActivity/res/values-ne/strings.xml
similarity index 62%
copy from car-cluster-logging-renderer/res/values-af/strings.xml
copy to tests/MultiDisplayTestHelloActivity/res/values-ne/strings.xml
index daa61a3..6ab57f4 100644
--- a/car-cluster-logging-renderer/res/values-af/strings.xml
+++ b/tests/MultiDisplayTestHelloActivity/res/values-ne/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!--  Copyright (C) 2016 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.
      You may obtain a copy of the License at
 
-       http://www.apache.org/licenses/LICENSE-2.0
+          http://www.apache.org/licenses/LICENSE-2.0
 
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
@@ -16,5 +16,7 @@
 
 <resources 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>
+    <string name="hello_activity_text_text" msgid="8189259382863353832">"संसारलाई नमस्कार!"</string>
+    <string name="app_name_default" msgid="110846623663619763">"MDTHelloDefault"</string>
+    <string name="app_name_always" msgid="6684579479829101738">"MDTHelloAlways"</string>
 </resources>
diff --git a/car-cluster-logging-renderer/res/values-af/strings.xml b/tests/MultiDisplayTestHelloActivity/res/values-or/strings.xml
similarity index 63%
copy from car-cluster-logging-renderer/res/values-af/strings.xml
copy to tests/MultiDisplayTestHelloActivity/res/values-or/strings.xml
index daa61a3..9a18aae 100644
--- a/car-cluster-logging-renderer/res/values-af/strings.xml
+++ b/tests/MultiDisplayTestHelloActivity/res/values-or/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!--  Copyright (C) 2016 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.
      You may obtain a copy of the License at
 
-       http://www.apache.org/licenses/LICENSE-2.0
+          http://www.apache.org/licenses/LICENSE-2.0
 
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
@@ -16,5 +16,7 @@
 
 <resources 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>
+    <string name="hello_activity_text_text" msgid="8189259382863353832">"ହେଲୋ ଦୁନିଆ!"</string>
+    <string name="app_name_default" msgid="110846623663619763">"MDTHelloDefault"</string>
+    <string name="app_name_always" msgid="6684579479829101738">"MDTHelloAlways"</string>
 </resources>
diff --git a/car-cluster-logging-renderer/res/values-af/strings.xml b/tests/MultiDisplayTestHelloActivity/res/values-ta/strings.xml
similarity index 61%
copy from car-cluster-logging-renderer/res/values-af/strings.xml
copy to tests/MultiDisplayTestHelloActivity/res/values-ta/strings.xml
index daa61a3..6faf2cd 100644
--- a/car-cluster-logging-renderer/res/values-af/strings.xml
+++ b/tests/MultiDisplayTestHelloActivity/res/values-ta/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!--  Copyright (C) 2016 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.
      You may obtain a copy of the License at
 
-       http://www.apache.org/licenses/LICENSE-2.0
+          http://www.apache.org/licenses/LICENSE-2.0
 
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
@@ -16,5 +16,7 @@
 
 <resources 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>
+    <string name="hello_activity_text_text" msgid="8189259382863353832">"உலகத்தினருக்கு வணக்கம்!"</string>
+    <string name="app_name_default" msgid="110846623663619763">"MDTHelloDefault"</string>
+    <string name="app_name_always" msgid="6684579479829101738">"MDTHelloAlways"</string>
 </resources>
diff --git a/car-cluster-logging-renderer/res/values-af/strings.xml b/tests/MultiDisplayTestHelloActivity/res/values-te/strings.xml
similarity index 63%
copy from car-cluster-logging-renderer/res/values-af/strings.xml
copy to tests/MultiDisplayTestHelloActivity/res/values-te/strings.xml
index daa61a3..0ed1751 100644
--- a/car-cluster-logging-renderer/res/values-af/strings.xml
+++ b/tests/MultiDisplayTestHelloActivity/res/values-te/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!--  Copyright (C) 2016 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.
      You may obtain a copy of the License at
 
-       http://www.apache.org/licenses/LICENSE-2.0
+          http://www.apache.org/licenses/LICENSE-2.0
 
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
@@ -16,5 +16,7 @@
 
 <resources 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>
+    <string name="hello_activity_text_text" msgid="8189259382863353832">"హలో ప్రపంచం!"</string>
+    <string name="app_name_default" msgid="110846623663619763">"MDTHelloDefault"</string>
+    <string name="app_name_always" msgid="6684579479829101738">"MDTHelloAlways"</string>
 </resources>
diff --git a/car-cluster-logging-renderer/res/values-af/strings.xml b/tests/MultiDisplayTestHelloActivity/res/values-ur/strings.xml
similarity index 63%
copy from car-cluster-logging-renderer/res/values-af/strings.xml
copy to tests/MultiDisplayTestHelloActivity/res/values-ur/strings.xml
index daa61a3..ffb21af 100644
--- a/car-cluster-logging-renderer/res/values-af/strings.xml
+++ b/tests/MultiDisplayTestHelloActivity/res/values-ur/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!--  Copyright (C) 2016 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.
      You may obtain a copy of the License at
 
-       http://www.apache.org/licenses/LICENSE-2.0
+          http://www.apache.org/licenses/LICENSE-2.0
 
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
@@ -16,5 +16,7 @@
 
 <resources 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>
+    <string name="hello_activity_text_text" msgid="8189259382863353832">"ہیلو، دنیا والو!"</string>
+    <string name="app_name_default" msgid="110846623663619763">"MDTHelloDefault"</string>
+    <string name="app_name_always" msgid="6684579479829101738">"MDTHelloAlways"</string>
 </resources>
diff --git a/car-cluster-logging-renderer/res/values-af/strings.xml b/tests/MultiDisplayTestHelloActivity/res/values-uz/strings.xml
similarity index 64%
copy from car-cluster-logging-renderer/res/values-af/strings.xml
copy to tests/MultiDisplayTestHelloActivity/res/values-uz/strings.xml
index daa61a3..f44363a 100644
--- a/car-cluster-logging-renderer/res/values-af/strings.xml
+++ b/tests/MultiDisplayTestHelloActivity/res/values-uz/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!--  Copyright (C) 2016 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.
      You may obtain a copy of the License at
 
-       http://www.apache.org/licenses/LICENSE-2.0
+          http://www.apache.org/licenses/LICENSE-2.0
 
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
@@ -16,5 +16,7 @@
 
 <resources 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>
+    <string name="hello_activity_text_text" msgid="8189259382863353832">"Salom, dunyo!"</string>
+    <string name="app_name_default" msgid="110846623663619763">"MDTHelloDefault"</string>
+    <string name="app_name_always" msgid="6684579479829101738">"MDTHelloAlways"</string>
 </resources>
diff --git a/car-cluster-logging-renderer/res/values-af/strings.xml b/tests/MultiDisplayTestHelloActivity/res/values-zh-rCN/strings.xml
similarity index 64%
copy from car-cluster-logging-renderer/res/values-af/strings.xml
copy to tests/MultiDisplayTestHelloActivity/res/values-zh-rCN/strings.xml
index daa61a3..da391de 100644
--- a/car-cluster-logging-renderer/res/values-af/strings.xml
+++ b/tests/MultiDisplayTestHelloActivity/res/values-zh-rCN/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!--  Copyright (C) 2016 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.
      You may obtain a copy of the License at
 
-       http://www.apache.org/licenses/LICENSE-2.0
+          http://www.apache.org/licenses/LICENSE-2.0
 
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
@@ -16,5 +16,7 @@
 
 <resources 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>
+    <string name="hello_activity_text_text" msgid="8189259382863353832">"Hello, World!"</string>
+    <string name="app_name_default" msgid="110846623663619763">"MDTHelloDefault"</string>
+    <string name="app_name_always" msgid="6684579479829101738">"MDTHelloAlways"</string>
 </resources>
diff --git a/tests/carservice_test/src/com/android/car/MockedVmsTestBase.java b/tests/carservice_test/src/com/android/car/MockedVmsTestBase.java
index 4c26e11..7214f8b 100644
--- a/tests/carservice_test/src/com/android/car/MockedVmsTestBase.java
+++ b/tests/carservice_test/src/com/android/car/MockedVmsTestBase.java
@@ -16,6 +16,7 @@
 package com.android.car;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
 
 import android.car.Car;
 import android.car.VehicleAreaType;
@@ -30,7 +31,9 @@
 import android.hardware.automotive.vehicle.V2_0.VehiclePropertyAccess;
 import android.hardware.automotive.vehicle.V2_0.VehiclePropertyChangeMode;
 import android.hardware.automotive.vehicle.V2_0.VmsAvailabilityStateIntegerValuesIndex;
+import android.hardware.automotive.vehicle.V2_0.VmsBaseMessageIntegerValuesIndex;
 import android.hardware.automotive.vehicle.V2_0.VmsMessageType;
+import android.hardware.automotive.vehicle.V2_0.VmsStartSessionMessageIntegerValuesIndex;
 import android.os.UserHandle;
 import android.util.Log;
 import android.util.Pair;
@@ -38,6 +41,8 @@
 import com.android.car.vehiclehal.VehiclePropValueBuilder;
 import com.android.car.vehiclehal.test.MockedVehicleHal;
 
+import org.junit.Before;
+
 import java.util.List;
 import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.CountDownLatch;
@@ -73,10 +78,8 @@
                 .addAreaConfig(VehicleAreaType.VEHICLE_AREA_TYPE_GLOBAL, 0, 0);
     }
 
-    @Override
-    public void setUp() throws Exception {
-        super.setUp();
-
+    @Before
+    public void setUpVms() throws Exception {
         // Trigger VmsClientManager to bind to the MockPublisherClient
         getContext().sendBroadcastAsUser(new Intent(Intent.ACTION_USER_UNLOCKED), UserHandle.ALL);
 
@@ -86,8 +89,23 @@
         mVmsSubscriberManager.setVmsSubscriberClientCallback(Executors.newSingleThreadExecutor(),
                 mSubscriberClient);
 
-        // Validate layer availability sent to HAL
+        // Validate session handshake
         List<Integer> v = mHalClient.receiveMessage().value.int32Values;
+        assertEquals(VmsMessageType.START_SESSION,
+                (int) v.get(VmsBaseMessageIntegerValuesIndex.MESSAGE_TYPE));
+        int coreId = v.get(VmsStartSessionMessageIntegerValuesIndex.SERVICE_ID);
+        assertTrue(coreId > 0);
+        assertEquals(-1, (int) v.get(VmsStartSessionMessageIntegerValuesIndex.CLIENT_ID));
+
+        // Send handshake acknowledgement
+        mHalClient.sendMessage(
+                VmsMessageType.START_SESSION,
+                coreId,
+                12345 // Client ID
+        );
+
+        // Validate layer availability sent to HAL
+        v = mHalClient.receiveMessage().value.int32Values;
         assertEquals(VmsMessageType.AVAILABILITY_CHANGE,
                 (int) v.get(VmsAvailabilityStateIntegerValuesIndex.MESSAGE_TYPE));
         assertEquals(0,
@@ -107,16 +125,12 @@
         return mVmsSubscriberManager;
     }
 
-    Pair<VmsLayer, byte[]> receiveDataMessage() throws InterruptedException {
-        return receiveWithTimeout(mSubscriberClient.mMessages);
-    }
-
-    VmsAvailableLayers receiveLayerAvailability() throws InterruptedException {
-        return receiveWithTimeout(mSubscriberClient.mAvailableLayers);
-    }
-
-    MockPublisherClient getMockPublisherClient() throws InterruptedException {
-        sPublisherIsReady.await(2L, TimeUnit.SECONDS);
+    MockPublisherClient getMockPublisherClient() {
+        try {
+            sPublisherIsReady.await(2L, TimeUnit.SECONDS);
+        } catch (InterruptedException e) {
+            throw new RuntimeException(e);
+        }
         return sPublisherClient;
     }
 
@@ -145,7 +159,7 @@
             mSubscriptionState.add(subscriptionState);
         }
 
-        VmsSubscriptionState receiveSubscriptionState() throws InterruptedException {
+        VmsSubscriptionState receiveSubscriptionState() {
             return receiveWithTimeout(mSubscriptionState);
         }
     }
@@ -166,11 +180,11 @@
             mAvailableLayers.add(availableLayers);
         }
 
-        Pair<VmsLayer, byte[]> receiveMessage() throws InterruptedException {
+        Pair<VmsLayer, byte[]> receiveMessage() {
             return receiveWithTimeout(mMessages);
         }
 
-        VmsAvailableLayers receiveLayerAvailability() throws InterruptedException {
+        VmsAvailableLayers receiveLayerAvailability() {
             return receiveWithTimeout(mAvailableLayers);
         }
     }
@@ -201,12 +215,16 @@
                             .build());
         }
 
-        VehiclePropValue receiveMessage() throws InterruptedException {
+        VehiclePropValue receiveMessage() {
             return receiveWithTimeout(mMessages);
         }
     }
 
-    private static <T> T receiveWithTimeout(BlockingQueue<T> queue) throws InterruptedException {
-        return queue.poll(2L, TimeUnit.SECONDS);
+    private static <T> T receiveWithTimeout(BlockingQueue<T> queue) {
+        try {
+            return queue.poll(2L, TimeUnit.SECONDS);
+        } catch (InterruptedException e) {
+            throw new RuntimeException(e);
+        }
     }
 }
diff --git a/tests/carservice_test/src/com/android/car/VmsPublisherSubscriberTest.java b/tests/carservice_test/src/com/android/car/VmsPublisherSubscriberTest.java
index 82b89ec..87cf1b8 100644
--- a/tests/carservice_test/src/com/android/car/VmsPublisherSubscriberTest.java
+++ b/tests/carservice_test/src/com/android/car/VmsPublisherSubscriberTest.java
@@ -18,107 +18,582 @@
 
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
 
 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.car.vms.VmsSubscriberManager;
+import android.car.vms.VmsSubscriptionState;
 import android.util.Pair;
 
 import androidx.test.filters.MediumTest;
 
+import org.junit.Before;
 import org.junit.Test;
 
-import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashSet;
-import java.util.List;
 import java.util.Set;
+import java.util.function.Supplier;
+import java.util.function.ToIntFunction;
 
 @MediumTest
 public class VmsPublisherSubscriberTest extends MockedVmsTestBase {
-    private static final int LAYER_ID = 88;
-    private static final int LAYER_VERSION = 19;
-    private static final int LAYER_SUBTYPE = 55;
-    private static final String TAG = "VmsPubSubTest";
+    private static final VmsLayer SUBSCRIPTION_LAYER = new VmsLayer(1, 1, 1);
+    private static final VmsLayer SUBSCRIPTION_LAYER_OTHER = new VmsLayer(2, 1, 1);
 
-    // The expected publisher ID is 0 since it the expected assigned ID from the VMS core.
-    public static final int EXPECTED_PUBLISHER_ID = 0;
-    public static final VmsLayer LAYER = new VmsLayer(LAYER_ID, LAYER_SUBTYPE, LAYER_VERSION);
-    public static final VmsAssociatedLayer ASSOCIATED_LAYER =
-            new VmsAssociatedLayer(LAYER, new HashSet<>(Arrays.asList(EXPECTED_PUBLISHER_ID)));
-    public static final byte[] PAYLOAD = new byte[]{2, 3, 5, 7, 11, 13, 17};
+    private static final byte[] PAYLOAD = {0xa, 0xb};
+    private static final byte[] PAYLOAD_OTHER = {0xb, 0xc};
 
-    private static final List<VmsAssociatedLayer> AVAILABLE_ASSOCIATED_LAYERS =
-            new ArrayList<>(Arrays.asList(ASSOCIATED_LAYER));
-    private static final VmsAvailableLayers AVAILABLE_LAYERS_WITH_SEQ =
-            new VmsAvailableLayers(
-                    new HashSet(AVAILABLE_ASSOCIATED_LAYERS), 1);
+    private static final byte[] PUBLISHER_INFO = {0x0};
+    private static final byte[] PUBLISHER_INFO_OTHER = {0x1};
 
+    private static final int UNKNOWN_PUBLISHER = 99999;
 
-    private static final int SUBSCRIBED_LAYER_ID = 89;
-    public static final VmsLayer SUBSCRIBED_LAYER =
-            new VmsLayer(SUBSCRIBED_LAYER_ID, LAYER_SUBTYPE, LAYER_VERSION);
-    public static final VmsAssociatedLayer ASSOCIATED_SUBSCRIBED_LAYER =
-            new VmsAssociatedLayer(SUBSCRIBED_LAYER,
-                    new HashSet<>(Arrays.asList(EXPECTED_PUBLISHER_ID)));
-    private static final List<VmsAssociatedLayer>
-            AVAILABLE_ASSOCIATED_LAYERS_WITH_SUBSCRIBED_LAYER =
-            new ArrayList<>(Arrays.asList(ASSOCIATED_LAYER, ASSOCIATED_SUBSCRIBED_LAYER));
-    private static final VmsAvailableLayers AVAILABLE_LAYERS_WITH_SUBSCRIBED_LAYER_WITH_SEQ =
-            new VmsAvailableLayers(
-                    new HashSet(AVAILABLE_ASSOCIATED_LAYERS_WITH_SUBSCRIBED_LAYER), 1);
+    private MockPublisherClient mPublisher;
+    private VmsSubscriberManager mSubscriber;
+    private MockSubscriberClient mSubscriberClient;
 
-    /*
-     * This test method subscribes to a layer and triggers
-     * VmsPublisherClientMockService.onVmsSubscriptionChange. In turn, the mock service will publish
-     * a message, which is validated in this test.
-     */
-    @Test
-    public void testPublisherToSubscriber() throws Exception {
-        getSubscriberManager().subscribe(LAYER);
-
-        int publisherId = getMockPublisherClient().getPublisherId(PAYLOAD);
-        getMockPublisherClient().publish(LAYER, publisherId, PAYLOAD);
-
-        Pair<VmsLayer, byte[]> dataMessage = receiveDataMessage();
-        assertEquals(LAYER, dataMessage.first);
-        assertArrayEquals(PAYLOAD, dataMessage.second);
+    @Before
+    public void setUpClients() {
+        mPublisher = getMockPublisherClient();
+        mSubscriber = getSubscriberManager();
+        mSubscriberClient = getMockSubscriberClient();
     }
 
-    /**
-     * The Mock service will get a publisher ID by sending its information when it will get
-     * ServiceReady as well as on SubscriptionChange. Since clients are not notified when
-     * publishers are assigned IDs, this test waits until the availability is changed which
-     * indicates
-     * that the Mock service has gotten its ServiceReady and publisherId.
-     */
     @Test
-    public void testPublisherInfo() throws Exception {
-        int publisherId = getMockPublisherClient().getPublisherId(PAYLOAD);
-        byte[] info = getSubscriberManager().getPublisherInfo(publisherId);
-        assertArrayEquals(PAYLOAD, info);
+    public void testPublisherInfo_Unregistered() {
+        assertEquals(0, mSubscriber.getPublisherInfo(UNKNOWN_PUBLISHER).length);
     }
 
-    /*
-     * The Mock service offers all the subscribed layers as available layers.
-     * In this test the client subscribes to a layer and verifies that it gets the
-     * notification that it is available.
-     */
     @Test
-    public void testAvailabilityWithSubscription() throws Exception {
-        int publisherId = getMockPublisherClient().getPublisherId(PAYLOAD);
-        getMockPublisherClient().setLayersOffering(new VmsLayersOffering(
-                new HashSet<>(Arrays.asList(
-                        new VmsLayerDependency(LAYER),
-                        new VmsLayerDependency(SUBSCRIBED_LAYER))),
+    public void testPublisherInfo_Registered() {
+        int publisherId = mPublisher.getPublisherId(PUBLISHER_INFO);
+        assertArrayEquals(PUBLISHER_INFO, mSubscriber.getPublisherInfo(publisherId));
+    }
+
+    @Test
+    public void testPublisherId_AlreadyRegistered() {
+        int publisherId = mPublisher.getPublisherId(PUBLISHER_INFO);
+        int publisherId2 = mPublisher.getPublisherId(PUBLISHER_INFO);
+        assertEquals(publisherId, publisherId2);
+    }
+
+    @Test
+    public void testPublisherId_MultiplePublishers() {
+        int publisherId = mPublisher.getPublisherId(PUBLISHER_INFO);
+        int publisherId2 = mPublisher.getPublisherId(PUBLISHER_INFO_OTHER);
+        assertNotEquals(publisherId, publisherId2);
+        assertArrayEquals(PUBLISHER_INFO, mSubscriber.getPublisherInfo(publisherId));
+        assertArrayEquals(PUBLISHER_INFO_OTHER, mSubscriber.getPublisherInfo(publisherId2));
+    }
+
+    @Test
+    public void testLayerAvailability_Default() {
+        VmsAvailableLayers availableLayers = mSubscriber.getAvailableLayers();
+        assertEquals(Collections.emptySet(), availableLayers.getAssociatedLayers());
+        assertEquals(0, availableLayers.getSequence());
+    }
+
+    @Test
+    public void testLayerAvailability() {
+        int publisherId = mPublisher.getPublisherId(PUBLISHER_INFO);
+        mPublisher.setLayersOffering(new VmsLayersOffering(Collections.singleton(
+                new VmsLayerDependency(SUBSCRIPTION_LAYER, Collections.emptySet())), publisherId));
+
+        assertLayerAvailability(1,
+                new VmsAssociatedLayer(SUBSCRIPTION_LAYER, Collections.singleton(publisherId)));
+    }
+
+    @Test
+    public void testLayerAvailability_Overwrite() {
+        int publisherId = mPublisher.getPublisherId(PUBLISHER_INFO);
+        mPublisher.setLayersOffering(new VmsLayersOffering(Collections.singleton(
+                new VmsLayerDependency(SUBSCRIPTION_LAYER, Collections.emptySet())), publisherId));
+        mPublisher.setLayersOffering(new VmsLayersOffering(Collections.singleton(
+                new VmsLayerDependency(SUBSCRIPTION_LAYER_OTHER, Collections.emptySet())),
                 publisherId));
 
-        Set<VmsAssociatedLayer> associatedLayers =
-                AVAILABLE_LAYERS_WITH_SUBSCRIBED_LAYER_WITH_SEQ.getAssociatedLayers();
-        assertEquals(associatedLayers, receiveLayerAvailability().getAssociatedLayers());
-        assertEquals(associatedLayers,
-                getSubscriberManager().getAvailableLayers().getAssociatedLayers());
+        assertLayerAvailability(2,
+                new VmsAssociatedLayer(SUBSCRIPTION_LAYER_OTHER,
+                        Collections.singleton(publisherId)));
+    }
+
+    @Test
+    public void testLayerAvailability_MultiplePublishers_SameLayer() {
+        int publisherId = mPublisher.getPublisherId(PUBLISHER_INFO);
+        int publisherId2 = mPublisher.getPublisherId(PUBLISHER_INFO_OTHER);
+        mPublisher.setLayersOffering(new VmsLayersOffering(Collections.singleton(
+                new VmsLayerDependency(SUBSCRIPTION_LAYER, Collections.emptySet())), publisherId));
+        mPublisher.setLayersOffering(new VmsLayersOffering(Collections.singleton(
+                new VmsLayerDependency(SUBSCRIPTION_LAYER, Collections.emptySet())), publisherId2));
+
+        assertLayerAvailability(2,
+                new VmsAssociatedLayer(SUBSCRIPTION_LAYER,
+                        new HashSet<>(Arrays.asList(publisherId, publisherId2))));
+    }
+
+    @Test
+    public void testLayerAvailability_MultiplePublishers_MultipleLayers() {
+        int publisherId = mPublisher.getPublisherId(PUBLISHER_INFO);
+        int publisherId2 = mPublisher.getPublisherId(PUBLISHER_INFO_OTHER);
+        mPublisher.setLayersOffering(new VmsLayersOffering(Collections.singleton(
+                new VmsLayerDependency(SUBSCRIPTION_LAYER, Collections.emptySet())), publisherId));
+        mPublisher.setLayersOffering(new VmsLayersOffering(Collections.singleton(
+                new VmsLayerDependency(SUBSCRIPTION_LAYER_OTHER, Collections.emptySet())),
+                publisherId2));
+
+        assertLayerAvailability(2,
+                new VmsAssociatedLayer(SUBSCRIPTION_LAYER, Collections.singleton(publisherId)),
+                new VmsAssociatedLayer(SUBSCRIPTION_LAYER_OTHER,
+                        Collections.singleton(publisherId2)));
+    }
+
+    @Test
+    public void testLayerAvailability_MultiplePublishers_Remove() {
+        int publisherId = mPublisher.getPublisherId(PUBLISHER_INFO);
+        int publisherId2 = mPublisher.getPublisherId(PUBLISHER_INFO_OTHER);
+        mPublisher.setLayersOffering(new VmsLayersOffering(Collections.singleton(
+                new VmsLayerDependency(SUBSCRIPTION_LAYER, Collections.emptySet())), publisherId));
+        mPublisher.setLayersOffering(new VmsLayersOffering(Collections.singleton(
+                new VmsLayerDependency(SUBSCRIPTION_LAYER, Collections.emptySet())), publisherId2));
+
+        mPublisher.setLayersOffering(new VmsLayersOffering(Collections.emptySet(), publisherId2));
+
+        assertLayerAvailability(3,
+                new VmsAssociatedLayer(SUBSCRIPTION_LAYER, Collections.singleton(publisherId)));
+    }
+
+    @Test
+    public void testLayerAvailability_MultiplePublishers_Overwrite() {
+        int publisherId = mPublisher.getPublisherId(PUBLISHER_INFO);
+        int publisherId2 = mPublisher.getPublisherId(PUBLISHER_INFO_OTHER);
+        mPublisher.setLayersOffering(new VmsLayersOffering(Collections.singleton(
+                new VmsLayerDependency(SUBSCRIPTION_LAYER, Collections.emptySet())), publisherId));
+        mPublisher.setLayersOffering(new VmsLayersOffering(Collections.singleton(
+                new VmsLayerDependency(SUBSCRIPTION_LAYER, Collections.emptySet())), publisherId2));
+
+        mPublisher.setLayersOffering(new VmsLayersOffering(Collections.singleton(
+                new VmsLayerDependency(SUBSCRIPTION_LAYER_OTHER, Collections.emptySet())),
+                publisherId2));
+
+        assertLayerAvailability(3,
+                new VmsAssociatedLayer(SUBSCRIPTION_LAYER, Collections.singleton(publisherId)),
+                new VmsAssociatedLayer(SUBSCRIPTION_LAYER_OTHER,
+                        Collections.singleton(publisherId2)));
+    }
+
+    @Test
+    public void testStartMonitoring() {
+        mSubscriber.startMonitoring();
+        assertNull(mPublisher.receiveSubscriptionState());
+
+        int publisherId = mPublisher.getPublisherId(PUBLISHER_INFO);
+        mPublisher.publish(SUBSCRIPTION_LAYER, publisherId, PAYLOAD);
+        assertDataMessage(SUBSCRIPTION_LAYER, PAYLOAD);
+    }
+
+    @Test
+    public void testStartMonitoring_AfterPublish() {
+        int publisherId = mPublisher.getPublisherId(PUBLISHER_INFO);
+        mPublisher.publish(SUBSCRIPTION_LAYER, publisherId, PAYLOAD);
+
+        mSubscriber.startMonitoring();
+        assertNull(mSubscriberClient.receiveMessage());
+    }
+
+    @Test
+    public void testStartMonitoring_MultipleLayers() {
+        mSubscriber.startMonitoring();
+
+        int publisherId = mPublisher.getPublisherId(PUBLISHER_INFO);
+        mPublisher.publish(SUBSCRIPTION_LAYER, publisherId, PAYLOAD);
+        assertDataMessage(SUBSCRIPTION_LAYER, PAYLOAD);
+
+        mPublisher.publish(SUBSCRIPTION_LAYER_OTHER, publisherId, PAYLOAD_OTHER);
+        assertDataMessage(SUBSCRIPTION_LAYER_OTHER, PAYLOAD_OTHER);
+    }
+
+    @Test
+    public void testStartMonitoring_MultiplePublishers() {
+        mSubscriber.startMonitoring();
+
+        int publisherId = mPublisher.getPublisherId(PUBLISHER_INFO);
+        mPublisher.publish(SUBSCRIPTION_LAYER, publisherId, PAYLOAD);
+        assertDataMessage(SUBSCRIPTION_LAYER, PAYLOAD);
+
+        int publisherId2 = mPublisher.getPublisherId(PUBLISHER_INFO_OTHER);
+        mPublisher.publish(SUBSCRIPTION_LAYER, publisherId2, PAYLOAD_OTHER);
+        assertDataMessage(SUBSCRIPTION_LAYER, PAYLOAD_OTHER);
+    }
+
+    @Test
+    public void testStopMonitoring() {
+        mSubscriber.startMonitoring();
+        mSubscriber.stopMonitoring();
+        assertNull(mPublisher.receiveSubscriptionState());
+
+        int publisherId = mPublisher.getPublisherId(PUBLISHER_INFO);
+        mPublisher.publish(SUBSCRIPTION_LAYER, publisherId, PAYLOAD);
+        assertNull(mSubscriberClient.receiveMessage());
+    }
+
+    @Test
+    public void testSubscribe() {
+        mSubscriber.subscribe(SUBSCRIPTION_LAYER);
+        assertSubscriptionState(1, SUBSCRIPTION_LAYER);
+
+        int publisherId = mPublisher.getPublisherId(PUBLISHER_INFO);
+        mPublisher.publish(SUBSCRIPTION_LAYER, publisherId, PAYLOAD);
+        assertDataMessage(SUBSCRIPTION_LAYER, PAYLOAD);
+    }
+
+    @Test
+    public void testSubscribe_AfterPublish() {
+        int publisherId = mPublisher.getPublisherId(PUBLISHER_INFO);
+
+        mPublisher.publish(SUBSCRIPTION_LAYER, publisherId, PAYLOAD);
+        mSubscriber.subscribe(SUBSCRIPTION_LAYER);
+
+        assertSubscriptionState(1, SUBSCRIPTION_LAYER);
+        assertNull(mSubscriberClient.receiveMessage());
+    }
+
+    @Test
+    public void testSubscribe_MultipleLayers() {
+        mSubscriber.subscribe(SUBSCRIPTION_LAYER);
+        mSubscriber.subscribe(SUBSCRIPTION_LAYER_OTHER);
+        assertSubscriptionState(2, SUBSCRIPTION_LAYER, SUBSCRIPTION_LAYER_OTHER);
+
+        int publisherId = mPublisher.getPublisherId(PUBLISHER_INFO);
+        mPublisher.publish(SUBSCRIPTION_LAYER, publisherId, PAYLOAD);
+        assertDataMessage(SUBSCRIPTION_LAYER, PAYLOAD);
+
+        mPublisher.publish(SUBSCRIPTION_LAYER_OTHER, publisherId, PAYLOAD_OTHER);
+        assertDataMessage(SUBSCRIPTION_LAYER_OTHER, PAYLOAD_OTHER);
+    }
+
+    @Test
+    public void testSubscribe_MultiplePublishers() {
+        mSubscriber.subscribe(SUBSCRIPTION_LAYER);
+        assertSubscriptionState(1, SUBSCRIPTION_LAYER);
+
+        int publisherId = mPublisher.getPublisherId(PUBLISHER_INFO);
+        mPublisher.publish(SUBSCRIPTION_LAYER, publisherId, PAYLOAD);
+        assertDataMessage(SUBSCRIPTION_LAYER, PAYLOAD);
+
+        int publisherId2 = mPublisher.getPublisherId(PUBLISHER_INFO_OTHER);
+        mPublisher.publish(SUBSCRIPTION_LAYER, publisherId2, PAYLOAD_OTHER);
+        assertDataMessage(SUBSCRIPTION_LAYER, PAYLOAD_OTHER);
+    }
+
+    @Test
+    public void testSubscribe_MultipleLayers_MultiplePublishers() {
+        mSubscriber.subscribe(SUBSCRIPTION_LAYER);
+        mSubscriber.subscribe(SUBSCRIPTION_LAYER_OTHER);
+        assertSubscriptionState(2, SUBSCRIPTION_LAYER, SUBSCRIPTION_LAYER_OTHER);
+
+        int publisherId = mPublisher.getPublisherId(PUBLISHER_INFO);
+        mPublisher.publish(SUBSCRIPTION_LAYER, publisherId, PAYLOAD);
+        assertDataMessage(SUBSCRIPTION_LAYER, PAYLOAD);
+
+        int publisherId2 = mPublisher.getPublisherId(PUBLISHER_INFO_OTHER);
+        mPublisher.publish(SUBSCRIPTION_LAYER_OTHER, publisherId2, PAYLOAD_OTHER);
+        assertDataMessage(SUBSCRIPTION_LAYER_OTHER, PAYLOAD_OTHER);
+    }
+
+    @Test
+    public void testSubscribe_ClearCallback() {
+        mSubscriber.subscribe(SUBSCRIPTION_LAYER);
+        mSubscriber.clearVmsSubscriberClientCallback();
+
+        int publisherId = mPublisher.getPublisherId(PUBLISHER_INFO);
+        mPublisher.publish(SUBSCRIPTION_LAYER, publisherId, PAYLOAD);
+        assertNull(mSubscriberClient.receiveMessage());
+    }
+
+    @Test(expected = IllegalStateException.class)
+    public void testSubscribe_NoCallback() {
+        mSubscriber.clearVmsSubscriberClientCallback();
+        mSubscriber.subscribe(SUBSCRIPTION_LAYER);
+    }
+
+    @Test
+    public void testUnsubscribe() {
+        mSubscriber.subscribe(SUBSCRIPTION_LAYER);
+        mSubscriber.unsubscribe(SUBSCRIPTION_LAYER);
+        assertSubscriptionState(2, Collections.emptySet(), Collections.emptySet());
+
+        int publisherId = mPublisher.getPublisherId(PUBLISHER_INFO);
+        mPublisher.publish(SUBSCRIPTION_LAYER, publisherId, PAYLOAD);
+        assertNull(mSubscriberClient.receiveMessage());
+    }
+
+    @Test
+    public void testUnsubscribe_MultipleLayers() {
+        mSubscriber.subscribe(SUBSCRIPTION_LAYER);
+        mSubscriber.subscribe(SUBSCRIPTION_LAYER_OTHER);
+        mSubscriber.unsubscribe(SUBSCRIPTION_LAYER);
+        assertSubscriptionState(3, SUBSCRIPTION_LAYER_OTHER);
+
+        int publisherId = mPublisher.getPublisherId(PUBLISHER_INFO);
+        mPublisher.publish(SUBSCRIPTION_LAYER, publisherId, PAYLOAD);
+        assertNull(mSubscriberClient.receiveMessage());
+
+        mPublisher.publish(SUBSCRIPTION_LAYER_OTHER, publisherId, PAYLOAD_OTHER);
+        assertDataMessage(SUBSCRIPTION_LAYER_OTHER, PAYLOAD_OTHER);
+    }
+
+    @Test
+    public void testUnsubscribe_MultiplePublishers() {
+        mSubscriber.subscribe(SUBSCRIPTION_LAYER);
+        mSubscriber.subscribe(SUBSCRIPTION_LAYER_OTHER);
+        mSubscriber.unsubscribe(SUBSCRIPTION_LAYER);
+        assertSubscriptionState(3, SUBSCRIPTION_LAYER_OTHER);
+
+        int publisherId = mPublisher.getPublisherId(PUBLISHER_INFO);
+        mPublisher.publish(SUBSCRIPTION_LAYER, publisherId, PAYLOAD);
+        assertNull(mSubscriberClient.receiveMessage());
+
+        int publisherId2 = mPublisher.getPublisherId(PUBLISHER_INFO_OTHER);
+        mPublisher.publish(SUBSCRIPTION_LAYER, publisherId2, PAYLOAD_OTHER);
+        assertNull(mSubscriberClient.receiveMessage());
+    }
+
+    @Test
+    public void testUnsubscribe_NotSubscribed() {
+        mSubscriber.unsubscribe(SUBSCRIPTION_LAYER);
+        assertNull(mPublisher.receiveSubscriptionState());
+
+        int publisherId = mPublisher.getPublisherId(PUBLISHER_INFO);
+        mPublisher.publish(SUBSCRIPTION_LAYER, publisherId, PAYLOAD);
+        assertNull(mSubscriberClient.receiveMessage());
+    }
+
+    @Test
+    public void testSubscribeToPublisher() {
+        int publisherId = mPublisher.getPublisherId(PUBLISHER_INFO);
+
+        mSubscriber.subscribe(SUBSCRIPTION_LAYER, publisherId);
+        assertSubscriptionState(1,
+                new VmsAssociatedLayer(SUBSCRIPTION_LAYER, Collections.singleton(publisherId)));
+
+        mPublisher.publish(SUBSCRIPTION_LAYER, publisherId, PAYLOAD);
+        assertDataMessage(SUBSCRIPTION_LAYER, PAYLOAD);
+    }
+
+    @Test
+    public void testSubscribeToPublisher_AfterPublish() {
+        int publisherId = mPublisher.getPublisherId(PUBLISHER_INFO);
+
+        mPublisher.publish(SUBSCRIPTION_LAYER, publisherId, PAYLOAD);
+        mSubscriber.subscribe(SUBSCRIPTION_LAYER, publisherId);
+
+        assertSubscriptionState(1,
+                new VmsAssociatedLayer(SUBSCRIPTION_LAYER, Collections.singleton(publisherId)));
+
+        assertNull(mSubscriberClient.receiveMessage());
+    }
+
+    @Test
+    public void testSubscribeToPublisher_MultipleLayers() {
+        int publisherId = mPublisher.getPublisherId(PUBLISHER_INFO);
+
+        mSubscriber.subscribe(SUBSCRIPTION_LAYER, publisherId);
+        mSubscriber.subscribe(SUBSCRIPTION_LAYER_OTHER, publisherId);
+
+        assertSubscriptionState(2,
+                new VmsAssociatedLayer(SUBSCRIPTION_LAYER, Collections.singleton(publisherId)),
+                new VmsAssociatedLayer(SUBSCRIPTION_LAYER_OTHER,
+                        Collections.singleton(publisherId)));
+
+        mPublisher.publish(SUBSCRIPTION_LAYER, publisherId, PAYLOAD);
+        assertDataMessage(SUBSCRIPTION_LAYER, PAYLOAD);
+
+        mPublisher.publish(SUBSCRIPTION_LAYER_OTHER, publisherId, PAYLOAD_OTHER);
+        assertDataMessage(SUBSCRIPTION_LAYER_OTHER, PAYLOAD_OTHER);
+    }
+
+    @Test
+    public void testSubscribeToPublisher_MultiplePublishers() {
+        int publisherId = mPublisher.getPublisherId(PUBLISHER_INFO);
+        int publisherId2 = mPublisher.getPublisherId(PUBLISHER_INFO_OTHER);
+
+        mSubscriber.subscribe(SUBSCRIPTION_LAYER, publisherId);
+        assertSubscriptionState(1,
+                new VmsAssociatedLayer(SUBSCRIPTION_LAYER, Collections.singleton(publisherId)));
+
+        mPublisher.publish(SUBSCRIPTION_LAYER, publisherId, PAYLOAD);
+        assertDataMessage(SUBSCRIPTION_LAYER, PAYLOAD);
+
+        mPublisher.publish(SUBSCRIPTION_LAYER, publisherId2, PAYLOAD_OTHER);
+        assertNull(mSubscriberClient.receiveMessage());
+    }
+
+    @Test
+    public void testSubscribeToPublisher_MultipleLayers_MultiplePublishers() {
+        int publisherId = mPublisher.getPublisherId(PUBLISHER_INFO);
+        int publisherId2 = mPublisher.getPublisherId(PUBLISHER_INFO_OTHER);
+
+        mSubscriber.subscribe(SUBSCRIPTION_LAYER, publisherId);
+        mSubscriber.subscribe(SUBSCRIPTION_LAYER_OTHER, publisherId2);
+        assertSubscriptionState(2,
+                new VmsAssociatedLayer(SUBSCRIPTION_LAYER, Collections.singleton(publisherId)),
+                new VmsAssociatedLayer(SUBSCRIPTION_LAYER_OTHER,
+                        Collections.singleton(publisherId2)));
+
+        mPublisher.publish(SUBSCRIPTION_LAYER, publisherId, PAYLOAD);
+        assertDataMessage(SUBSCRIPTION_LAYER, PAYLOAD);
+
+        mPublisher.publish(SUBSCRIPTION_LAYER_OTHER, publisherId2, PAYLOAD_OTHER);
+        assertDataMessage(SUBSCRIPTION_LAYER_OTHER, PAYLOAD_OTHER);
+    }
+
+    @Test
+    public void testSubscribeToPublisher_UnknownPublisher() {
+        mSubscriber.subscribe(SUBSCRIPTION_LAYER, UNKNOWN_PUBLISHER);
+
+        assertSubscriptionState(1,
+                new VmsAssociatedLayer(SUBSCRIPTION_LAYER,
+                        Collections.singleton(UNKNOWN_PUBLISHER)));
+    }
+
+    @Test
+    public void testSubscribeToPublisher_ClearCallback() {
+        int publisherId = mPublisher.getPublisherId(PUBLISHER_INFO);
+
+        mSubscriber.subscribe(SUBSCRIPTION_LAYER, publisherId);
+        mSubscriber.clearVmsSubscriberClientCallback();
+
+        mPublisher.publish(SUBSCRIPTION_LAYER, publisherId, PAYLOAD);
+        assertNull(mSubscriberClient.receiveMessage());
+    }
+
+    @Test(expected = IllegalStateException.class)
+    public void testSubscribeToPublisher_NoCallback() {
+        int publisherId = mPublisher.getPublisherId(PUBLISHER_INFO);
+
+        mSubscriber.clearVmsSubscriberClientCallback();
+        mSubscriber.subscribe(SUBSCRIPTION_LAYER, publisherId);
+    }
+
+    @Test
+    public void testUnsubscribeToPublisher() {
+        int publisherId = mPublisher.getPublisherId(PUBLISHER_INFO);
+
+        mSubscriber.subscribe(SUBSCRIPTION_LAYER, publisherId);
+        mSubscriber.unsubscribe(SUBSCRIPTION_LAYER, publisherId);
+        assertSubscriptionState(2, Collections.emptySet(), Collections.emptySet());
+
+        mPublisher.publish(SUBSCRIPTION_LAYER, publisherId, PAYLOAD);
+        assertNull(mSubscriberClient.receiveMessage());
+    }
+
+    @Test
+    public void testUnsubscribeToPublisher_MultipleLayers() {
+        int publisherId = mPublisher.getPublisherId(PUBLISHER_INFO);
+
+        mSubscriber.subscribe(SUBSCRIPTION_LAYER, publisherId);
+        mSubscriber.subscribe(SUBSCRIPTION_LAYER_OTHER, publisherId);
+        mSubscriber.unsubscribe(SUBSCRIPTION_LAYER, publisherId);
+        assertSubscriptionState(3,
+                new VmsAssociatedLayer(SUBSCRIPTION_LAYER_OTHER,
+                        Collections.singleton(publisherId)));
+
+        mPublisher.publish(SUBSCRIPTION_LAYER, publisherId, PAYLOAD);
+        assertNull(mSubscriberClient.receiveMessage());
+
+        mPublisher.publish(SUBSCRIPTION_LAYER_OTHER, publisherId, PAYLOAD_OTHER);
+        assertDataMessage(SUBSCRIPTION_LAYER_OTHER, PAYLOAD_OTHER);
+    }
+
+    @Test
+    public void testUnsubscribeToPublisher_MultiplePublishers() {
+        int publisherId = mPublisher.getPublisherId(PUBLISHER_INFO);
+        int publisherId2 = mPublisher.getPublisherId(PUBLISHER_INFO_OTHER);
+
+        mSubscriber.subscribe(SUBSCRIPTION_LAYER, publisherId);
+        mSubscriber.subscribe(SUBSCRIPTION_LAYER, publisherId2);
+        mSubscriber.unsubscribe(SUBSCRIPTION_LAYER, publisherId);
+        assertSubscriptionState(3,
+                new VmsAssociatedLayer(SUBSCRIPTION_LAYER, Collections.singleton(publisherId2)));
+
+        mPublisher.publish(SUBSCRIPTION_LAYER, publisherId, PAYLOAD);
+        assertNull(mSubscriberClient.receiveMessage());
+
+        mPublisher.publish(SUBSCRIPTION_LAYER, publisherId2, PAYLOAD_OTHER);
+        assertDataMessage(SUBSCRIPTION_LAYER, PAYLOAD_OTHER);
+    }
+
+    @Test
+    public void testUnsubscribeToPublisher_NotSubscribed() {
+        int publisherId = mPublisher.getPublisherId(PUBLISHER_INFO);
+
+        mSubscriber.unsubscribe(SUBSCRIPTION_LAYER, publisherId);
+        assertNull(mPublisher.receiveSubscriptionState());
+
+        mPublisher.publish(SUBSCRIPTION_LAYER, publisherId, PAYLOAD);
+        assertNull(mSubscriberClient.receiveMessage());
+    }
+
+    @Test
+    public void testUnsubscribeToPublisher_UnknownPublisher() {
+        mSubscriber.unsubscribe(SUBSCRIPTION_LAYER, UNKNOWN_PUBLISHER);
+        assertNull(mPublisher.receiveSubscriptionState());
+    }
+
+    private void assertLayerAvailability(int sequenceNumber,
+            VmsAssociatedLayer... associatedLayers) {
+        VmsAvailableLayers availableLayers = receiveWithSequence(
+                getMockSubscriberClient()::receiveLayerAvailability,
+                VmsAvailableLayers::getSequence,
+                sequenceNumber);
+        assertEquals(availableLayers, mSubscriber.getAvailableLayers());
+        assertEquals(new HashSet<>(Arrays.asList(associatedLayers)),
+                availableLayers.getAssociatedLayers());
+    }
+
+    private void assertSubscriptionState(int sequenceNumber, VmsLayer... layers) {
+        assertSubscriptionState(sequenceNumber, new HashSet<>(Arrays.asList(layers)),
+                Collections.emptySet());
+    }
+
+    private void assertSubscriptionState(int sequenceNumber,
+            VmsAssociatedLayer... associatedLayers) {
+        assertSubscriptionState(sequenceNumber, Collections.emptySet(),
+                new HashSet<>(Arrays.asList(associatedLayers)));
+    }
+
+    private void assertSubscriptionState(int sequenceNumber, Set<VmsLayer> layers,
+            Set<VmsAssociatedLayer> associatedLayers) {
+        VmsSubscriptionState subscriptionState = receiveWithSequence(
+                mPublisher::receiveSubscriptionState,
+                VmsSubscriptionState::getSequenceNumber,
+                sequenceNumber);
+        assertEquals(layers, subscriptionState.getLayers());
+        assertEquals(associatedLayers, subscriptionState.getAssociatedLayers());
+    }
+
+    private static <T> T receiveWithSequence(Supplier<T> supplierFunction,
+            ToIntFunction<T> sequenceNumberFn, int sequenceNumber) {
+        T obj = null;
+        for (int seq = 1; seq <= sequenceNumber; seq++) {
+            obj = supplierFunction.get();
+            assertNotNull(obj);
+            assertEquals(seq, sequenceNumberFn.applyAsInt(obj));
+        }
+        return obj;
+    }
+
+    private void assertDataMessage(VmsLayer layer, byte[] payload) {
+        Pair<VmsLayer, byte[]> message = mSubscriberClient.receiveMessage();
+        assertEquals(layer, message.first);
+        assertArrayEquals(payload, message.second);
     }
 }
diff --git a/tests/carservice_unit_test/Android.mk b/tests/carservice_unit_test/Android.mk
index b15dd41..6b715fc 100644
--- a/tests/carservice_unit_test/Android.mk
+++ b/tests/carservice_unit_test/Android.mk
@@ -53,9 +53,12 @@
     car-service-lib-for-test \
     com.android.car.test.utils \
     junit \
-    mockito-target-minus-junit4 \
+    mockito-target-inline-minus-junit4 \
     frameworks-base-testutils \
     truth-prebuilt
 
+# mockito-target-inline dependency
+LOCAL_JNI_SHARED_LIBRARIES := \
+    libdexmakerjvmtiagent \
 
 include $(BUILD_PACKAGE)
diff --git a/tests/carservice_unit_test/AndroidManifest.xml b/tests/carservice_unit_test/AndroidManifest.xml
index 74f6aa1..e5e31bf 100644
--- a/tests/carservice_unit_test/AndroidManifest.xml
+++ b/tests/carservice_unit_test/AndroidManifest.xml
@@ -22,7 +22,8 @@
             android:targetPackage="com.android.car.carservice_unittest"
             android:label="Unit Tests for Car APIs"/>
 
-    <application android:label="CarServiceUnitTest">
+    <application android:label="CarServiceUnitTest"
+            android:debuggable="true">
         <uses-library android:name="android.test.runner" />
     </application>
 </manifest>
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
index 32f8e1d..5cce922 100644
--- a/tests/carservice_unit_test/src/com/android/car/hal/InputHalServiceTest.java
+++ b/tests/carservice_unit_test/src/com/android/car/hal/InputHalServiceTest.java
@@ -181,6 +181,28 @@
         assertThat(event.getRepeatCount()).isEqualTo(0);
     }
 
+    /**
+     * Test for handling rotary knob event.
+     */
+    @Test
+    public void handlesRepeatedKeyWithIndents() {
+        subscribeListener();
+        KeyEvent event = dispatchSingleEventWithIndents(KeyEvent.KEYCODE_VOLUME_UP, 5);
+        assertThat(event.getAction()).isEqualTo(KeyEvent.ACTION_DOWN);
+        assertThat(event.getKeyCode()).isEqualTo(KeyEvent.KEYCODE_VOLUME_UP);
+        assertThat(event.getEventTime()).isEqualTo(0L);
+        assertThat(event.getDownTime()).isEqualTo(0L);
+        assertThat(event.getRepeatCount()).isEqualTo(4);
+
+        when(mUptimeSupplier.getAsLong()).thenReturn(5L);
+        event = dispatchSingleEventWithIndents(KeyEvent.KEYCODE_VOLUME_UP, 5);
+        assertThat(event.getAction()).isEqualTo(KeyEvent.ACTION_DOWN);
+        assertThat(event.getKeyCode()).isEqualTo(KeyEvent.KEYCODE_VOLUME_UP);
+        assertThat(event.getEventTime()).isEqualTo(5L);
+        assertThat(event.getDownTime()).isEqualTo(5L);
+        assertThat(event.getRepeatCount()).isEqualTo(9);
+    }
+
     @Test
     public void handlesKeyUp_withoutKeyDown() {
         subscribeListener();
@@ -237,4 +259,25 @@
         reset(mInputListener);
         return captor.getValue();
     }
-}
+
+    private VehiclePropValue makeKeyPropValueWithIndents(int code, int indents) {
+        VehiclePropValue v = new VehiclePropValue();
+        v.prop = VehicleProperty.HW_KEY_INPUT;
+        // Only Key.down can have indents.
+        v.value.int32Values.add(VehicleHwKeyInputAction.ACTION_DOWN);
+        v.value.int32Values.add(code);
+        v.value.int32Values.add(DISPLAY);
+        v.value.int32Values.add(indents);
+        return v;
+    }
+
+    private KeyEvent dispatchSingleEventWithIndents(int code, int indents) {
+        ArgumentCaptor<KeyEvent> captor = ArgumentCaptor.forClass(KeyEvent.class);
+        reset(mInputListener);
+        mInputHalService.handleHalEvents(
+                ImmutableList.of(makeKeyPropValueWithIndents(code, indents)));
+        verify(mInputListener).onKeyEvent(captor.capture(), eq(DISPLAY));
+        reset(mInputListener);
+        return captor.getValue();
+    }
+}
\ No newline at end of file
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
index baaab26..f42c52a 100644
--- a/tests/carservice_unit_test/src/com/android/car/hal/VmsHalServiceTest.java
+++ b/tests/carservice_unit_test/src/com/android/car/hal/VmsHalServiceTest.java
@@ -37,14 +37,13 @@
 import android.os.Binder;
 import android.os.IBinder;
 
-import androidx.test.runner.AndroidJUnit4;
-
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
-import org.junit.runner.RunWith;
 import org.mockito.ArgumentCaptor;
+import org.mockito.InOrder;
 import org.mockito.Mock;
+import org.mockito.Mockito;
 import org.mockito.junit.MockitoJUnit;
 import org.mockito.junit.MockitoRule;
 
@@ -54,8 +53,8 @@
 import java.util.List;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
+import java.util.function.Consumer;
 
-@RunWith(AndroidJUnit4.class)
 public class VmsHalServiceTest {
     private static final int LAYER_TYPE = 1;
     private static final int LAYER_SUBTYPE = 2;
@@ -64,6 +63,8 @@
     private static final int PUBLISHER_ID = 12345;
     private static final byte[] PAYLOAD = new byte[]{1, 2, 3, 4};
     private static final List<Byte> PAYLOAD_AS_LIST = Arrays.asList(new Byte[]{1, 2, 3, 4});
+    private static final int CORE_ID = 54321;
+    private static final int CLIENT_ID = 98765;
 
     @Rule
     public MockitoRule mockito = MockitoJUnit.rule();
@@ -73,6 +74,12 @@
     private IVmsPublisherService mPublisherService;
     @Mock
     private IVmsSubscriberService mSubscriberService;
+    @Mock
+    private Consumer<IBinder> mPublisherOnHalConnected;
+    @Mock
+    private Runnable mPublisherOnHalDisconnected;
+    @Mock
+    private Consumer<IVmsSubscriberClient> mSubscriberOnHalDisconnected;
 
     private IBinder mToken;
     private VmsHalService mHalService;
@@ -81,12 +88,10 @@
 
     @Before
     public void setUp() throws Exception {
-        mHalService = new VmsHalService(mVehicleHal);
-        mHalService.setVmsSubscriberService(mSubscriberService);
-
-        mToken = new Binder();
-        mPublisherClient = IVmsPublisherClient.Stub.asInterface(mHalService.getPublisherClient());
-        mPublisherClient.setVmsPublisherService(mToken, mPublisherService);
+        mHalService = new VmsHalService(mVehicleHal, () -> (long) CORE_ID);
+        mHalService.setPublisherConnectionCallbacks(
+                mPublisherOnHalConnected, mPublisherOnHalDisconnected);
+        mHalService.setVmsSubscriberService(mSubscriberService, mSubscriberOnHalDisconnected);
 
         VehiclePropConfig propConfig = new VehiclePropConfig();
         propConfig.prop = VehicleProperty.VEHICLE_MAP_SERVICE;
@@ -97,16 +102,68 @@
         mHalService.init();
         waitForHandlerCompletion();
 
+        // Verify START_SESSION message was sent
+        InOrder initOrder =
+                Mockito.inOrder(mPublisherOnHalConnected, mSubscriberService, mVehicleHal);
+        initOrder.verify(mVehicleHal).subscribeProperty(mHalService,
+                VehicleProperty.VEHICLE_MAP_SERVICE);
+        initOrder.verify(mVehicleHal).set(createHalMessage(
+                VmsMessageType.START_SESSION, // Message type
+                CORE_ID,                      // Core ID
+                -1));                          // Client ID (unknown)
+
+        // Verify no more interections until handshake received
+        initOrder.verifyNoMoreInteractions();
+
+        // Send START_SESSION response from client
+        sendHalMessage(createHalMessage(
+                VmsMessageType.START_SESSION,  // Message type
+                0,                             // Core ID (unknown)
+                CLIENT_ID                      // Client ID
+        ));
+        waitForHandlerCompletion();
+
+        // Verify client is marked as connected
+        ArgumentCaptor<IBinder> publisherCaptor = ArgumentCaptor.forClass(IBinder.class);
+        initOrder.verify(mPublisherOnHalConnected).accept(publisherCaptor.capture());
+        mPublisherClient = IVmsPublisherClient.Stub.asInterface(publisherCaptor.getValue());
+
+        mToken = new Binder();
+        mPublisherClient.setVmsPublisherService(mToken, mPublisherService);
+
         ArgumentCaptor<IVmsSubscriberClient> subscriberCaptor = ArgumentCaptor.forClass(
                 IVmsSubscriberClient.class);
-        verify(mSubscriberService).addVmsSubscriberToNotifications(subscriberCaptor.capture());
+        initOrder.verify(mSubscriberService).addVmsSubscriberToNotifications(
+                subscriberCaptor.capture());
         mSubscriberClient = subscriberCaptor.getValue();
-        reset(mSubscriberService);
-        verify(mVehicleHal).set(createHalMessage(
+
+        initOrder.verify(mSubscriberService).getAvailableLayers();
+        initOrder.verify(mVehicleHal).set(createHalMessage(
                 VmsMessageType.AVAILABILITY_CHANGE, // Message type
                 0,                                  // Sequence number
                 0));                                // # of associated layers
-        reset(mVehicleHal);
+
+        initOrder.verifyNoMoreInteractions();
+        reset(mPublisherOnHalConnected, mSubscriberService, mVehicleHal);
+    }
+
+    @Test
+    public void testCoreId_IntegerOverflow() throws Exception {
+        mHalService = new VmsHalService(mVehicleHal, () -> (long) Integer.MAX_VALUE + CORE_ID);
+
+        VehiclePropConfig propConfig = new VehiclePropConfig();
+        propConfig.prop = VehicleProperty.VEHICLE_MAP_SERVICE;
+        mHalService.takeSupportedProperties(Collections.singleton(propConfig));
+
+        when(mSubscriberService.getAvailableLayers()).thenReturn(
+                new VmsAvailableLayers(Collections.emptySet(), 0));
+        mHalService.init();
+        waitForHandlerCompletion();
+
+        verify(mVehicleHal).set(createHalMessage(
+                VmsMessageType.START_SESSION, // Message type
+                CORE_ID,                      // Core ID
+                -1));                          // Client ID (unknown)
     }
 
     @Test
@@ -506,6 +563,40 @@
     }
 
     /**
+     * START_SESSION message format:
+     * <ul>
+     * <li>Message type
+     * <li>Core ID
+     * <li>Client ID
+     * </ul>
+     */
+    @Test
+    public void testHandleStartSessionEvent() throws Exception {
+        when(mSubscriberService.getAvailableLayers()).thenReturn(
+                new VmsAvailableLayers(Collections.emptySet(), 5));
+
+        VehiclePropValue request = createHalMessage(
+                VmsMessageType.START_SESSION,  // Message type
+                0,                             // Core ID (unknown)
+                CLIENT_ID                      // Client ID
+        );
+
+        VehiclePropValue response = createHalMessage(
+                VmsMessageType.START_SESSION,  // Message type
+                CORE_ID,                               // Core ID
+                CLIENT_ID                              // Client ID
+        );
+
+        sendHalMessage(request);
+        InOrder inOrder = Mockito.inOrder(mVehicleHal);
+        inOrder.verify(mVehicleHal).set(response);
+        inOrder.verify(mVehicleHal).set(createHalMessage(
+                VmsMessageType.AVAILABILITY_CHANGE, // Message type
+                5,                                  // Sequence number
+                0));                                // # of associated layers
+    }
+
+    /**
      * AVAILABILITY_CHANGE message format:
      * <ul>
      * <li>Message type
@@ -865,9 +956,7 @@
 
     private void waitForHandlerCompletion() throws Exception {
         final CountDownLatch latch = new CountDownLatch(1);
-        mHalService.getHandler().post(() -> {
-            latch.countDown();
-        });
+        mHalService.getHandler().post(latch::countDown);
         latch.await(5, TimeUnit.SECONDS);
     }
 }
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
index 6519f0c..772abc7 100644
--- a/tests/carservice_unit_test/src/com/android/car/vms/VmsClientManagerTest.java
+++ b/tests/carservice_unit_test/src/com/android/car/vms/VmsClientManagerTest.java
@@ -60,6 +60,8 @@
 import org.mockito.junit.MockitoJUnit;
 import org.mockito.junit.MockitoRule;
 
+import java.util.function.Consumer;
+
 @SmallTest
 public class VmsClientManagerTest {
     private static final String HAL_CLIENT_NAME = "VmsHalClient";
@@ -84,7 +86,8 @@
 
     @Mock
     private VmsHalService mHal;
-    private IBinder mHalClient;
+    private Consumer<IBinder> mHalClientConnected;
+    private Runnable mHalClientDisconnected;
 
     @Mock
     private VmsClientManager.ConnectionListener mConnectionListener;
@@ -115,13 +118,18 @@
         mUserId = 10;
         when(mUserManager.getCurrentForegroundUserId()).thenAnswer((invocation) -> mUserId);
 
-        mHalClient = new Binder();
-        when(mHal.getPublisherClient()).thenReturn(mHalClient);
-
         mClientManager = new VmsClientManager(mContext, mUserService, mUserManager, mHal);
         mClientManager.registerConnectionListener(mConnectionListener);
-        verify(mConnectionListener).onClientConnected(HAL_CLIENT_NAME, mHalClient);
-        reset(mConnectionListener);
+
+        @SuppressWarnings("unchecked")
+        ArgumentCaptor<Consumer<IBinder>> onClientConnectedCaptor =
+                ArgumentCaptor.forClass(Consumer.class);
+        ArgumentCaptor<Runnable> onClientDisconnectedCaptor =
+                ArgumentCaptor.forClass(Runnable.class);
+        verify(mHal).setPublisherConnectionCallbacks(
+                onClientConnectedCaptor.capture(), onClientDisconnectedCaptor.capture());
+        mHalClientConnected = onClientConnectedCaptor.getValue();
+        mHalClientDisconnected = onClientDisconnectedCaptor.getValue();
     }
 
     @After
@@ -130,6 +138,7 @@
         verify(mContext, atLeast(0)).getResources();
         verify(mContext, atLeast(0)).getPackageManager();
         verifyNoMoreInteractions(mContext);
+        verifyNoMoreInteractions(mHal);
     }
 
     @Test
@@ -162,18 +171,28 @@
         VmsClientManager.ConnectionListener listener =
                 Mockito.mock(VmsClientManager.ConnectionListener.class);
         mClientManager.registerConnectionListener(listener);
-        verify(listener).onClientConnected(HAL_CLIENT_NAME, mHalClient);
+    }
+
+    @Test
+    public void testRegisterConnectionListener_AfterHalClientConnected() {
+        IBinder halClient = bindHalClient();
+
+        VmsClientManager.ConnectionListener listener =
+                Mockito.mock(VmsClientManager.ConnectionListener.class);
+        mClientManager.registerConnectionListener(listener);
+        verify(listener).onClientConnected(HAL_CLIENT_NAME, halClient);
     }
 
     @Test
     public void testRegisterConnectionListener_AfterClientsConnected() {
+        IBinder halClient = bindHalClient();
         IBinder systemBinder = bindSystemClient();
         IBinder userBinder = bindUserClient();
 
         VmsClientManager.ConnectionListener listener =
                 Mockito.mock(VmsClientManager.ConnectionListener.class);
         mClientManager.registerConnectionListener(listener);
-        verify(listener).onClientConnected(HAL_CLIENT_NAME, mHalClient);
+        verify(listener).onClientConnected(HAL_CLIENT_NAME, halClient);
         verify(listener).onClientConnected(eq(SYSTEM_CLIENT_NAME), eq(systemBinder));
         verify(listener).onClientConnected(eq(USER_CLIENT_NAME), eq(userBinder));
     }
@@ -334,6 +353,18 @@
     }
 
     @Test
+    public void testHalClientConnected() {
+        IBinder binder = bindHalClient();
+        verify(mConnectionListener).onClientConnected(eq(HAL_CLIENT_NAME), eq(binder));
+    }
+
+    private IBinder bindHalClient() {
+        IBinder binder = new Binder();
+        mHalClientConnected.accept(binder);
+        return binder;
+    }
+
+    @Test
     public void testOnSystemServiceConnected() {
         IBinder binder = bindSystemClient();
         verify(mConnectionListener).onClientConnected(eq(SYSTEM_CLIENT_NAME), eq(binder));
@@ -368,6 +399,14 @@
     }
 
     @Test
+    public void testOnHalClientDisconnected() throws Exception {
+        bindHalClient();
+        mHalClientDisconnected.run();
+
+        verify(mConnectionListener).onClientDisconnected(eq(HAL_CLIENT_NAME));
+    }
+
+    @Test
     public void testOnSystemServiceDisconnected() throws Exception {
         notifySystemUserUnlocked();
         verifySystemBind(1);
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 a46cf37..0745945 100644
--- a/user/car-user-lib/src/android/car/userlib/CarUserManagerHelper.java
+++ b/user/car-user-lib/src/android/car/userlib/CarUserManagerHelper.java
@@ -60,7 +60,7 @@
  *
  * @hide
  */
-public class CarUserManagerHelper {
+public final class CarUserManagerHelper {
     private static final String TAG = "CarUserManagerHelper";
 
     private static final int BOOT_USER_NOT_FOUND = -1;