Merge "Expand integration testing of VMS services." 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 c9eae62..1cfd7de 100644
--- a/FrameworkPackageStubs/AndroidManifest.xml
+++ b/FrameworkPackageStubs/AndroidManifest.xml
@@ -9,6 +9,17 @@
<application android:label="@string/app_name"
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen">
+ <!-- Dialer stubs -->
+ <activity android:name=".Stubs$DialerStub"
+ android:label="@string/stub_name"
+ android:excludeFromRecents="true">
+ <intent-filter android:priority="-1">
+ <action android:name="android.intent.action.DIAL" />
+ <category android:name="android.intent.category.DEFAULT" />
+ <data android:scheme="voicemail"/>
+ </intent-filter>
+ </activity>
+
<!-- Music / media stubs. -->
<activity android:name=".Stubs$MediaStub"
android:label="@string/stub_name"
@@ -68,5 +79,56 @@
</intent-filter>
</activity>
+ <!-- CDD Core Application Intents Stubs -->
+ <!-- Desk Clock -->
+ <activity android:name=".Stubs$DeskClockStub"
+ android:label="@string/stub_name"
+ android:excludeFromRecents="true">
+ <intent-filter android:priority="-1">
+ <action android:name="android.intent.action.SET_ALARM" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+ <intent-filter android:priority="-1">
+ <action android:name="android.intent.action.SET_TIMER" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+ <intent-filter android:priority="-1">
+ <action android:name="android.intent.action.SHOW_ALARMS" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+ <intent-filter android:priority="-1">
+ <action android:name="android.intent.action.DISMISS_ALARM" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+ <intent-filter android:priority="-1">
+ <action android:name="android.intent.action.SHOW_TIMERS" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+ <intent-filter android:priority="-1">
+ <action android:name="android.intent.action.SNOOZE_ALARM" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+ </activity>
+
+ <!-- Calendar -->
+ <activity android:name=".Stubs$CalendarStub"
+ android:label="@string/stub_name"
+ android:excludeFromRecents="true">
+ <intent-filter android:priority="-1">
+ <action android:name="android.intent.action.EDIT" />
+ <category android:name="android.intent.category.DEFAULT" />
+ <data android:mimeType="vnd.android.cursor.item/event" />
+ </intent-filter>
+ </activity>
+
+ <!-- Browser -->
+ <activity android:name=".Stubs$BrowserStub"
+ android:label="@string/stub_name"
+ android:excludeFromRecents="true">
+ <intent-filter android:priority="-1">
+ <action android:name="android.intent.action.WEB_SEARCH" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+ </activity>
</application>
</manifest>
diff --git a/FrameworkPackageStubs/src/com/android/car/frameworkpackagestubs/Stubs.java b/FrameworkPackageStubs/src/com/android/car/frameworkpackagestubs/Stubs.java
index 5ebcabd..056912a 100644
--- a/FrameworkPackageStubs/src/com/android/car/frameworkpackagestubs/Stubs.java
+++ b/FrameworkPackageStubs/src/com/android/car/frameworkpackagestubs/Stubs.java
@@ -64,6 +64,26 @@
}
/**
+ * Stub activity for Browser events.
+ */
+ public static class BrowserStub extends BaseActivity { }
+
+ /**
+ * Stub activity for Calendar events.
+ */
+ public static class CalendarStub extends BaseActivity { }
+
+ /**
+ * Stub activity for Desk Clock events.
+ */
+ public static class DeskClockStub extends BaseActivity { }
+
+ /**
+ * Stub activity for Dialer events.
+ */
+ public static class DialerStub extends BaseActivity { }
+
+ /**
* Stub activity for media events.
*/
public static class MediaStub extends BaseActivity { }
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/VehiclePropertyIds.java b/car-lib/src/android/car/VehiclePropertyIds.java
index 14642fe..c335e58 100644
--- a/car-lib/src/android/car/VehiclePropertyIds.java
+++ b/car-lib/src/android/car/VehiclePropertyIds.java
@@ -28,55 +28,68 @@
public static final int INVALID = 0;
/**
* VIN of vehicle
+ * Requires permission: {@link Car#PERMISSION_IDENTIFICATION}.
*/
public static final int INFO_VIN = 286261504;
/**
* Manufacturer of vehicle
+ * Requires permission: {@link Car#PERMISSION_CAR_INFO}.
*/
public static final int INFO_MAKE = 286261505;
/**
* Model of vehicle
+ * Requires permission: {@link Car#PERMISSION_CAR_INFO}.
*/
public static final int INFO_MODEL = 286261506;
/**
* Model year of vehicle.
+ * Requires permission: {@link Car#PERMISSION_CAR_INFO}.
*/
public static final int INFO_MODEL_YEAR = 289407235;
/**
* Fuel capacity of the vehicle in milliliters
+ * Requires permission: {@link Car#PERMISSION_CAR_INFO}.
*/
public static final int INFO_FUEL_CAPACITY = 291504388;
/**
* List of fuels the vehicle may use
+ * Requires permission: {@link Car#PERMISSION_CAR_INFO}.
*/
public static final int INFO_FUEL_TYPE = 289472773;
/**
* Battery capacity of the vehicle, if EV or hybrid. This is the nominal
* battery capacity when the vehicle is new.
+ * Requires permission: {@link Car#PERMISSION_CAR_INFO}.
*/
public static final int INFO_EV_BATTERY_CAPACITY = 291504390;
/**
* List of connectors this EV may use
+ * Requires permission: {@link Car#PERMISSION_CAR_INFO}.
*/
public static final int INFO_EV_CONNECTOR_TYPE = 289472775;
/**
* Fuel door location
+ * Requires permission: {@link Car#PERMISSION_CAR_INFO}.
*/
public static final int INFO_FUEL_DOOR_LOCATION = 289407240;
/**
* EV port location
+ * Requires permission: {@link Car#PERMISSION_CAR_INFO}.
*/
public static final int INFO_EV_PORT_LOCATION = 289407241;
/**
* Driver's seat location
+ * Requires permission: {@link Car#PERMISSION_CAR_INFO}.
*/
public static final int INFO_DRIVER_SEAT = 356516106;
/**
* Current odometer value of the vehicle
+ * Requires permission: {@link Car#PERMISSION_MILEAGE}.
*/
public static final int PERF_ODOMETER = 291504644;
/**
* Speed of the vehicle
+ * Requires permission: {@link Car#PERMISSION_SPEED}.
*/
public static final int PERF_VEHICLE_SPEED = 291504647;
/**
@@ -84,60 +97,74 @@
*
* Some cars display a slightly slower speed than the actual speed. This is
* usually displayed on the speedometer.
+ * Requires permission: {@link Car#PERMISSION_SPEED}.
*/
public static final int PERF_VEHICLE_SPEED_DISPLAY = 291504648;
/**
* Steering angle of the vehicle
*
* Angle is in degrees. Left is negative.
+ * Requires permission: {@link Car#PERMISSION_READ_STEERING_STATE}.
*/
public static final int PERF_STEERING_ANGLE = 291504649;
/**
* Temperature of engine coolant
+ * Requires permission: {@link Car#PERMISSION_CAR_ENGINE_DETAILED}.
*/
public static final int ENGINE_COOLANT_TEMP = 291504897;
/**
* Engine oil level
+ * Requires permission: {@link Car#PERMISSION_CAR_ENGINE_DETAILED}.
*/
public static final int ENGINE_OIL_LEVEL = 289407747;
/**
* Temperature of engine oil
+ * Requires permission: {@link Car#PERMISSION_CAR_ENGINE_DETAILED}.
*/
public static final int ENGINE_OIL_TEMP = 291504900;
/**
* Engine rpm
+ * Requires permission: {@link Car#PERMISSION_CAR_ENGINE_DETAILED}.
*/
public static final int ENGINE_RPM = 291504901;
/**
* Reports wheel ticks
+ * Requires permission: {@link Car#PERMISSION_SPEED}.
*/
public static final int WHEEL_TICK = 290521862;
/**
* Fuel remaining in the the vehicle, in milliliters
+ * Requires permission: {@link Car#PERMISSION_ENERGY}.
*/
public static final int FUEL_LEVEL = 291504903;
/**
* Fuel door open
+ * Requires permission: {@link Car#PERMISSION_ENERGY_PORTS}.
*/
public static final int FUEL_DOOR_OPEN = 287310600;
/**
* EV battery level in WH, if EV or hybrid
+ * Requires permission: {@link Car#PERMISSION_ENERGY}.
*/
public static final int EV_BATTERY_LEVEL = 291504905;
/**
* EV charge port open
+ * Requires permission: {@link Car#PERMISSION_ENERGY_PORTS}.
*/
public static final int EV_CHARGE_PORT_OPEN = 287310602;
/**
* EV charge port connected
+ * Requires permission: {@link Car#PERMISSION_ENERGY_PORTS}.
*/
public static final int EV_CHARGE_PORT_CONNECTED = 287310603;
/**
* EV instantaneous charge rate in milliwatts
+ * Requires permission: {@link Car#PERMISSION_ENERGY}.
*/
public static final int EV_BATTERY_INSTANTANEOUS_CHARGE_RATE = 291504908;
/**
* Range remaining
+ * Requires permission: {@link Car#PERMISSION_ENERGY}.
*/
public static final int RANGE_REMAINING = 291504904;
/**
@@ -145,12 +172,14 @@
*
* min/max value indicates tire pressure sensor range. Each tire will have a separate min/max
* value denoted by its areaConfig.areaId.
+ * Requires permission: {@link Car#PERMISSION_TIRES}.
*/
public static final int TIRE_PRESSURE = 392168201;
/**
* Currently selected gear
*
* This is the gear selected by the user.
+ * Requires permission: {@link Car#PERMISSION_POWERTRAIN}.
*/
public static final int GEAR_SELECTION = 289408000;
/**
@@ -158,103 +187,127 @@
* match the current gear. For example, if the selected gear is GEAR_DRIVE,
* the current gear will be one of GEAR_1, GEAR_2 etc, which reflects
* the actual gear the transmission is currently running in.
+ * Requires permission: {@link Car#PERMISSION_POWERTRAIN}.
*/
public static final int CURRENT_GEAR = 289408001;
/**
* Parking brake state.
+ * Requires permission: {@link Car#PERMISSION_POWERTRAIN}.
*/
public static final int PARKING_BRAKE_ON = 287310850;
/**
* Auto-apply parking brake.
+ * Requires permission: {@link Car#PERMISSION_POWERTRAIN}.
*/
public static final int PARKING_BRAKE_AUTO_APPLY = 287310851;
/**
* Warning for fuel low level.
+ * Requires permission: {@link Car#PERMISSION_ENERGY}.
*/
public static final int FUEL_LEVEL_LOW = 287310853;
/**
* Night mode
+ * Requires permission: {@link Car#PERMISSION_EXTERIOR_ENVIRONMENT}.
*/
public static final int NIGHT_MODE = 287310855;
/**
* State of the vehicles turn signals
+ * Requires permission: {@link Car#PERMISSION_EXTERIOR_LIGHTS}.
*/
public static final int TURN_SIGNAL_STATE = 289408008;
/**
* Represents ignition state
+ * Requires permission: {@link Car#PERMISSION_POWERTRAIN}.
*/
public static final int IGNITION_STATE = 289408009;
/**
* ABS is active
+ * Requires permission: {@link Car#PERMISSION_CAR_DYNAMICS_STATE}.
*/
public static final int ABS_ACTIVE = 287310858;
/**
* Traction Control is active
+ * Requires permission: {@link Car#PERMISSION_CAR_DYNAMICS_STATE}.
*/
public static final int TRACTION_CONTROL_ACTIVE = 287310859;
/**
* Fan speed setting
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_CLIMATE}.
*/
public static final int HVAC_FAN_SPEED = 356517120;
/**
* Fan direction setting
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_CLIMATE}.
*/
public static final int HVAC_FAN_DIRECTION = 356517121;
/**
* HVAC current temperature.
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_CLIMATE}.
*/
public static final int HVAC_TEMPERATURE_CURRENT = 358614274;
/**
* HVAC, target temperature set.
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_CLIMATE}.
*/
public static final int HVAC_TEMPERATURE_SET = 358614275;
/**
* On/off defrost for designated window
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_CLIMATE}.
*/
public static final int HVAC_DEFROSTER = 320865540;
/**
* On/off AC for designated areaId
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_CLIMATE}.
*/
public static final int HVAC_AC_ON = 354419973;
/**
* On/off max AC
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_CLIMATE}.
*/
public static final int HVAC_MAX_AC_ON = 354419974;
/**
* On/off max defrost
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_CLIMATE}.
*/
public static final int HVAC_MAX_DEFROST_ON = 354419975;
/**
* Recirculation on/off
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_CLIMATE}.
*/
public static final int HVAC_RECIRC_ON = 354419976;
/**
* Enable temperature coupling between areas.
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_CLIMATE}.
*/
public static final int HVAC_DUAL_ON = 354419977;
/**
* On/off automatic mode
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_CLIMATE}.
*/
public static final int HVAC_AUTO_ON = 354419978;
/**
* Seat heating/cooling
- *
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_CLIMATE}.
*/
public static final int HVAC_SEAT_TEMPERATURE = 356517131;
/**
* Side Mirror Heat
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_CLIMATE}.
*/
public static final int HVAC_SIDE_MIRROR_HEAT = 339739916;
/**
* Steering Wheel Heating/Cooling
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_CLIMATE}.
*/
public static final int HVAC_STEERING_WHEEL_HEAT = 289408269;
/**
* Temperature units for display
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_CLIMATE}.
*/
public static final int HVAC_TEMPERATURE_DISPLAY_UNITS = 289408270;
/**
* Actual fan speed
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_CLIMATE}.
*/
public static final int HVAC_ACTUAL_FAN_SPEED_RPM = 356517135;
/**
@@ -264,47 +317,64 @@
* properties that control individual HVAC features/subsystems to AVAILABLE
* state (unless any/all of them are UNAVAILABLE on their own individual
* merits).
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_CLIMATE}.
*/
public static final int HVAC_POWER_ON = 354419984;
/**
* Fan Positions Available
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_CLIMATE}.
*/
public static final int HVAC_FAN_DIRECTION_AVAILABLE = 356582673;
/**
* Automatic recirculation on/off
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_CLIMATE}.
*/
public static final int HVAC_AUTO_RECIRC_ON = 354419986;
/**
* Seat ventilation
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_CLIMATE}.
*/
public static final int HVAC_SEAT_VENTILATION = 356517139;
/**
* Distance units for display
+ * Requires permission {@link Car#PERMISSION_READ_DISPLAY_UNITS} to read the property.
+ * Requires permission {@link Car#PERMISSION_CONTROL_DISPLAY_UNITS} to write the property.
*/
public static final int DISTANCE_DISPLAY_UNITS = 289408512;
/**
* Fuel volume units for display
+ * Requires permission {@link Car#PERMISSION_READ_DISPLAY_UNITS} to read the property.
+ * Requires permission {@link Car#PERMISSION_CONTROL_DISPLAY_UNITS} to write the property.
*/
public static final int FUEL_VOLUME_DISPLAY_UNITS = 289408513;
/**
* Tire pressure units for display
+ * Requires permission {@link Car#PERMISSION_READ_DISPLAY_UNITS} to read the property.
+ * Requires permission {@link Car#PERMISSION_CONTROL_DISPLAY_UNITS} to write the property.
*/
public static final int TIRE_PRESSURE_DISPLAY_UNITS = 289408514;
/**
* EV battery units for display
+ * Requires permission {@link Car#PERMISSION_READ_DISPLAY_UNITS} to read the property.
+ * Requires permission {@link Car#PERMISSION_CONTROL_DISPLAY_UNITS} to write the property.
*/
public static final int EV_BATTERY_DISPLAY_UNITS = 289408515;
/**
* Speed Units for display
+ * Requires permission {@link Car#PERMISSION_READ_DISPLAY_UNITS} to read the property.
+ * Requires permission {@link Car#PERMISSION_CONTROL_DISPLAY_UNITS} to write the property.
* @hide
*/
public static final int VEHICLE_SPEED_DISPLAY_UNITS = 289408516;
/**
* Fuel consumption units for display
+ * Requires permission {@link Car#PERMISSION_READ_DISPLAY_UNITS} to read the property.
+ * Requires permission {@link Car#PERMISSION_CONTROL_DISPLAY_UNITS} to write the property.
*/
public static final int FUEL_CONSUMPTION_UNITS_DISTANCE_OVER_VOLUME = 287311364;
/**
* Outside temperature
+ * Requires permission: {@link Car#PERMISSION_EXTERIOR_ENVIRONMENT}.
*/
public static final int ENV_OUTSIDE_TEMPERATURE = 291505923;
/**
@@ -312,6 +382,7 @@
*
* It is assumed that AP's power state is controller by separate power
* controller.
+ * Requires permission: {@link Car#PERMISSION_CAR_POWER}.
*/
public static final int AP_POWER_STATE_REQ = 289475072;
/**
@@ -319,6 +390,7 @@
*
* It is assumed that AP's power state is controller by separate power
* controller.
+ * Requires permission: {@link Car#PERMISSION_CAR_POWER}.
*/
public static final int AP_POWER_STATE_REPORT = 289475073;
/**
@@ -327,12 +399,14 @@
* off. For example, even if user presses power on button after automatic
* power on with door unlock, bootup reason must stay with
* VehicleApPowerBootupReason#USER_UNLOCK.
+ * Requires permission: {@link Car#PERMISSION_CAR_POWER}.
*/
public static final int AP_POWER_BOOTUP_REASON = 289409538;
/**
* Property to represent brightness of the display. Some cars have single
* control for the brightness of all displays and this property is to share
* change in that control.
+ * Requires permission: {@link Car#PERMISSION_CAR_POWER}.
*/
public static final int DISPLAY_BRIGHTNESS = 289409539;
/**
@@ -344,38 +418,47 @@
*
* This is an integer in case a door may be set to a particular position.
* Max value indicates fully open, min value (0) indicates fully closed.
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_DOORS}.
*/
public static final int DOOR_POS = 373295872;
/**
* Door move
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_DOORS}.
*/
public static final int DOOR_MOVE = 373295873;
/**
* Door lock
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_DOORS}.
*/
public static final int DOOR_LOCK = 371198722;
/**
* Mirror Z Position
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_MIRRORS}.
*/
public static final int MIRROR_Z_POS = 339741504;
/**
* Mirror Z Move
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_MIRRORS}.
*/
public static final int MIRROR_Z_MOVE = 339741505;
/**
* Mirror Y Position
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_MIRRORS}.
*/
public static final int MIRROR_Y_POS = 339741506;
/**
* Mirror Y Move
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_MIRRORS}.
*/
public static final int MIRROR_Y_MOVE = 339741507;
/**
* Mirror Lock
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_MIRRORS}.
*/
public static final int MIRROR_LOCK = 287312708;
/**
* Mirror Fold
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_MIRRORS}.
*/
public static final int MIRROR_FOLD = 287312709;
/**
@@ -384,6 +467,7 @@
* This parameter selects the memory preset to use to select the seat
* position. The minValue is always 0, and the maxValue determines the
* number of seat positions available.
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_SEATS}.
*/
public static final int SEAT_MEMORY_SELECT = 356518784;
/**
@@ -392,136 +476,169 @@
* This setting allows the user to save the current seat position settings
* into the selected preset slot. The maxValue for each seat position
* must match the maxValue for SEAT_MEMORY_SELECT.
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_SEATS}.
*/
public static final int SEAT_MEMORY_SET = 356518785;
/**
* Seatbelt buckled
*
* True indicates belt is buckled.
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_SEATS}.
*/
public static final int SEAT_BELT_BUCKLED = 354421634;
/**
* Seatbelt height position
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_SEATS}.
*/
public static final int SEAT_BELT_HEIGHT_POS = 356518787;
/**
* Seatbelt height move
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_SEATS}.
*/
public static final int SEAT_BELT_HEIGHT_MOVE = 356518788;
/**
* Seat fore/aft position
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_SEATS}.
*/
public static final int SEAT_FORE_AFT_POS = 356518789;
/**
* Seat fore/aft move
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_SEATS}.
*/
public static final int SEAT_FORE_AFT_MOVE = 356518790;
/**
* Seat backrest angle 1 position
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_SEATS}.
*/
public static final int SEAT_BACKREST_ANGLE_1_POS = 356518791;
/**
* Seat backrest angle 1 move
*
* Moves the backrest forward or recline.
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_SEATS}.
*/
public static final int SEAT_BACKREST_ANGLE_1_MOVE = 356518792;
/**
* Seat backrest angle 2 position
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_SEATS}.
*/
public static final int SEAT_BACKREST_ANGLE_2_POS = 356518793;
/**
* Seat backrest angle 2 move
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_SEATS}.
*/
public static final int SEAT_BACKREST_ANGLE_2_MOVE = 356518794;
/**
* Seat height position
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_SEATS}.
*/
public static final int SEAT_HEIGHT_POS = 356518795;
/**
* Seat height move
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_SEATS}.
*/
public static final int SEAT_HEIGHT_MOVE = 356518796;
/**
* Seat depth position
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_SEATS}.
*/
public static final int SEAT_DEPTH_POS = 356518797;
/**
* Seat depth move
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_SEATS}.
*/
public static final int SEAT_DEPTH_MOVE = 356518798;
/**
* Seat tilt position
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_SEATS}.
*/
public static final int SEAT_TILT_POS = 356518799;
/**
* Seat tilt move
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_SEATS}.
*/
public static final int SEAT_TILT_MOVE = 356518800;
/**
* Lumber fore/aft position
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_SEATS}.
*/
public static final int SEAT_LUMBAR_FORE_AFT_POS = 356518801;
/**
* Lumbar fore/aft move
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_SEATS}.
*/
public static final int SEAT_LUMBAR_FORE_AFT_MOVE = 356518802;
/**
* Lumbar side support position
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_SEATS}.
*/
public static final int SEAT_LUMBAR_SIDE_SUPPORT_POS = 356518803;
/**
* Lumbar side support move
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_SEATS}.
*/
public static final int SEAT_LUMBAR_SIDE_SUPPORT_MOVE = 356518804;
/**
* Headrest height position
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_SEATS}.
*/
public static final int SEAT_HEADREST_HEIGHT_POS = 289409941;
/**
* Headrest height move
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_SEATS}.
*/
public static final int SEAT_HEADREST_HEIGHT_MOVE = 356518806;
/**
* Headrest angle position
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_SEATS}.
*/
public static final int SEAT_HEADREST_ANGLE_POS = 356518807;
/**
* Headrest angle move
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_SEATS}.
*/
public static final int SEAT_HEADREST_ANGLE_MOVE = 356518808;
/**
* Headrest fore/aft position
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_SEATS}.
*/
public static final int SEAT_HEADREST_FORE_AFT_POS = 356518809;
/**
* Headrest fore/aft move
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_SEATS}.
*/
public static final int SEAT_HEADREST_FORE_AFT_MOVE = 356518810;
/**
* Seat Occupancy
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_SEATS}.
*/
public static final int SEAT_OCCUPANCY = 356518832;
/**
* Window Position
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_WINDOWS}.
*/
public static final int WINDOW_POS = 322964416;
/**
* Window Move
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_WINDOWS}.
*/
public static final int WINDOW_MOVE = 322964417;
/**
* Window Lock
+ * Requires permission: {@link Car#PERMISSION_CONTROL_CAR_WINDOWS}.
*/
public static final int WINDOW_LOCK = 320867268;
/**
* Vehicle Maps Service (VMS) message
+ * Requires one of permissions in {@link Car#PERMISSION_VMS_PUBLISHER},
+ * {@link Car#PERMISSION_VMS_SUBSCRIBER}.
*/
public static final int VEHICLE_MAP_SERVICE = 299895808;
/**
* OBD2 Live Sensor Data
*
* Reports a snapshot of the current (live) values of the OBD2 sensors available.
+ * Requires permission: {@link Car#PERMISSION_CAR_DIAGNOSTIC_READ_ALL}.
*/
public static final int OBD2_LIVE_FRAME = 299896064;
/**
@@ -529,10 +646,12 @@
*
* Reports a snapshot of the value of the OBD2 sensors available at the time that a fault
* occurred and was detected.
+ * Requires permission: {@link Car#PERMISSION_CAR_DIAGNOSTIC_READ_ALL}.
*/
public static final int OBD2_FREEZE_FRAME = 299896065;
/**
* OBD2 Freeze Frame Information
+ * Requires permission: {@link Car#PERMISSION_CAR_DIAGNOSTIC_READ_ALL}.
*/
public static final int OBD2_FREEZE_FRAME_INFO = 299896066;
/**
@@ -540,54 +659,67 @@
*
* This property allows deletion of any of the freeze frames stored in
* vehicle memory, as described by OBD2_FREEZE_FRAME_INFO.
+ * Requires permission: {@link Car#PERMISSION_CAR_DIAGNOSTIC_CLEAR}.
*/
public static final int OBD2_FREEZE_FRAME_CLEAR = 299896067;
/**
* Headlights State
+ * Requires permission: {@link Car#PERMISSION_EXTERIOR_LIGHTS}.
*/
public static final int HEADLIGHTS_STATE = 289410560;
/**
* High beam lights state
+ * Requires permission: {@link Car#PERMISSION_EXTERIOR_LIGHTS}.
*/
public static final int HIGH_BEAM_LIGHTS_STATE = 289410561;
/**
* Fog light state
+ * Requires permission: {@link Car#PERMISSION_EXTERIOR_LIGHTS}.
*/
public static final int FOG_LIGHTS_STATE = 289410562;
/**
* Hazard light status
+ * Requires permission: {@link Car#PERMISSION_EXTERIOR_LIGHTS}.
*/
public static final int HAZARD_LIGHTS_STATE = 289410563;
/**
* Headlight switch
+ * Requires permission: {@link Car#PERMISSION_CONTROL_EXTERIOR_LIGHTS}.
*/
public static final int HEADLIGHTS_SWITCH = 289410576;
/**
* High beam light switch
+ * Requires permission: {@link Car#PERMISSION_CONTROL_EXTERIOR_LIGHTS}.
*/
public static final int HIGH_BEAM_LIGHTS_SWITCH = 289410577;
/**
* Fog light switch
+ * Requires permission: {@link Car#PERMISSION_CONTROL_EXTERIOR_LIGHTS}.
*/
public static final int FOG_LIGHTS_SWITCH = 289410578;
/**
* Hazard light switch
+ * Requires permission: {@link Car#PERMISSION_CONTROL_EXTERIOR_LIGHTS}.
*/
public static final int HAZARD_LIGHTS_SWITCH = 289410579;
/**
* Cabin lights
+ * Requires permission: {@link Car#PERMISSION_READ_INTERIOR_LIGHTS}.
*/
public static final int CABIN_LIGHTS_STATE = 289410817;
/**
* Cabin lights switch
+ * Requires permission: {@link Car#PERMISSION_CONTROL_INTERIOR_LIGHTS}.
*/
public static final int CABIN_LIGHTS_SWITCH = 289410818;
/**
* Reading lights
+ * Requires permission: {@link Car#PERMISSION_READ_INTERIOR_LIGHTS}.
*/
public static final int READING_LIGHTS_STATE = 356519683;
/**
* Reading lights switch
+ * Requires permission: {@link Car#PERMISSION_CONTROL_INTERIOR_LIGHTS}.
*/
public static final int READING_LIGHTS_SWITCH = 356519684;
diff --git a/car-lib/src/android/car/content/pm/AppBlockingPackageInfo.java b/car-lib/src/android/car/content/pm/AppBlockingPackageInfo.java
index 3c1a356..02610ab 100644
--- a/car-lib/src/android/car/content/pm/AppBlockingPackageInfo.java
+++ b/car-lib/src/android/car/content/pm/AppBlockingPackageInfo.java
@@ -45,7 +45,7 @@
@IntDef(flag = true,
value = {FLAG_SYSTEM_APP, FLAG_WHOLE_ACTIVITY})
@Retention(RetentionPolicy.SOURCE)
- public @interface ConstrcutorFlags {}
+ public @interface ConstructorFlags {}
/**
* flags to give additional information on the package.
@@ -82,7 +82,7 @@
public AppBlockingPackageInfo(String packageName, int minRevisionCode, int maxRevisionCode,
- @ConstrcutorFlags int flags, @Nullable Signature[] signatures,
+ @ConstructorFlags int flags, @Nullable Signature[] signatures,
@Nullable String[] activities) {
if (packageName == null) {
throw new IllegalArgumentException("packageName cannot be null");
@@ -156,8 +156,6 @@
return false;
}
-
-
@Override
public int hashCode() {
final int prime = 31;
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/overlay/frameworks/base/core/res/res/values/config.xml b/car_product/overlay/frameworks/base/core/res/res/values/config.xml
index 1d90073..904542d 100644
--- a/car_product/overlay/frameworks/base/core/res/res/values/config.xml
+++ b/car_product/overlay/frameworks/base/core/res/res/values/config.xml
@@ -79,4 +79,6 @@
<!-- Whether the system enables per-display focus. If the system has the input method for each
display, this value should be true. -->
<bool name="config_perDisplayFocusEnabled">true</bool>
+
+ <string name="config_dataUsageSummaryComponent">com.android.car.settings/com.android.car.settings.datausage.DataWarningAndLimitActivity</string>
</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values/dimens.xml b/car_product/overlay/frameworks/base/core/res/res/values/dimens.xml
index c005792..c1ab046 100644
--- a/car_product/overlay/frameworks/base/core/res/res/values/dimens.xml
+++ b/car_product/overlay/frameworks/base/core/res/res/values/dimens.xml
@@ -118,4 +118,20 @@
<!-- Make the dots in lock pattern thicker in Car -->
<dimen name="lock_pattern_dot_size">20dp</dimen>
+
+ <!-- Autofill save dialog padding -->
+ <dimen name="autofill_save_outer_top_margin">@*android:dimen/car_padding_2</dimen>
+ <dimen name="autofill_save_outer_top_padding">@*android:dimen/car_padding_2</dimen>
+ <dimen name="autofill_elevation">@*android:dimen/car_padding_2</dimen>
+ <dimen name="autofill_save_inner_padding">@*android:dimen/car_padding_2</dimen>
+ <dimen name="autofill_save_icon_size">@*android:dimen/car_primary_icon_size</dimen>
+ <dimen name="autofill_save_title_start_padding">@*android:dimen/car_padding_4</dimen>
+ <dimen name="autofill_save_scroll_view_top_margin">@*android:dimen/car_padding_4</dimen>
+ <dimen name="autofill_save_button_bar_padding">@*android:dimen/car_keyline_1</dimen>
+
+ <!-- Floating toolbar dimensions -->
+ <dimen name="floating_toolbar_menu_button_side_padding">@*android:dimen/car_padding_2</dimen>
+ <dimen name="floating_toolbar_menu_image_width">@*android:dimen/car_primary_icon_size</dimen>
+ <dimen name="floating_toolbar_menu_image_button_vertical_padding">@*android:dimen/car_padding_2</dimen>
+ <dimen name="floating_toolbar_text_size">@*android:dimen/car_body1_size</dimen>
</resources>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values/styles_device_default.xml b/car_product/overlay/frameworks/base/core/res/res/values/styles_device_default.xml
index ea83ad3..37139d3 100644
--- a/car_product/overlay/frameworks/base/core/res/res/values/styles_device_default.xml
+++ b/car_product/overlay/frameworks/base/core/res/res/values/styles_device_default.xml
@@ -48,6 +48,10 @@
<item name="android:textSize">@*android:dimen/car_body4_size</item>
</style>
+ <style name="TextAppearance.DeviceDefault.Subhead" parent="android:TextAppearance.Material.Subhead">
+ <item name="android:textSize">@*android:dimen/car_body1_size</item>
+ </style>
+
<style name="TextAppearance.DeviceDefault.Widget.Button.Borderless.Colored"
parent="android:TextAppearance.DeviceDefault.Widget.Button">
<item name="android:textColor">@*android:color/car_borderless_button_text_color</item>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values/themes_device_defaults.xml b/car_product/overlay/frameworks/base/core/res/res/values/themes_device_defaults.xml
index fed7495..c36e925 100644
--- a/car_product/overlay/frameworks/base/core/res/res/values/themes_device_defaults.xml
+++ b/car_product/overlay/frameworks/base/core/res/res/values/themes_device_defaults.xml
@@ -245,4 +245,40 @@
<item name="android:windowNoTitle">true</item>
</style>
+
+ <!-- DeviceDefault theme for panel windows. This removes all extraneous window decorations, so
+ you basically have an empty rectangle in which to place your content. It makes the window
+ floating, with a transparent background, and turns off dimming behind the window.
+ Used for Autofill screens.-->
+ <style name="Theme.DeviceDefault.Panel" parent="android:Theme.Material.Panel">
+ <!-- Color palette -->
+ <item name="android:colorPrimary">@*android:color/primary_device_default_light</item>
+ <item name="android:colorPrimaryDark">@*android:color/primary_device_default_dark</item>
+ <item name="android:colorAccent">@*android:color/accent_device_default_light</item>
+ <item name="android:colorError">@*android:color/error_color_device_default_light</item>
+
+ <!-- Dialog attributes -->
+ <item name="android:dialogCornerRadius">@*android:dimen/config_dialogCornerRadius</item>
+ <item name="android:alertDialogTheme">@*android:style/Theme.DeviceDefault.Dialog.Alert</item>
+
+ <!-- Text styles -->
+ <item name="android:textAppearanceButton">@*android:style/TextAppearance.DeviceDefault.Widget.Button</item>
+
+ <!-- Button styles -->
+ <item name="android:buttonCornerRadius">@*android:dimen/config_buttonCornerRadius</item>
+ <item name="android:buttonBarButtonStyle">@*android:style/Widget.DeviceDefault.Button.ButtonBar.AlertDialog</item>
+
+ <!-- Progress bar attributes -->
+ <item name="*android:colorProgressBackgroundNormal">@*android:color/config_progress_background_tint</item>
+ <item name="*android:progressBarCornerRadius">@*android:dimen/config_progressBarCornerRadius</item>
+
+ <!-- Toolbar attributes -->
+ <item name="android:toolbarStyle">@*android:style/Widget.DeviceDefault.Toolbar</item>
+
+ <!-- Hide action bar -->
+ <item name="android:windowActionBar">false</item>
+ <item name="android:windowNoTitle">true</item>
+ </style>
+
+ <style name="Theme.DeviceDefault.Light.Panel" parent="android:Theme.DeviceDefault.Panel"/>
</resources>
diff --git a/car_product/sepolicy/private/carservice_app.te b/car_product/sepolicy/private/carservice_app.te
index 3c72a79..d8ed7db 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 };
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/proto/BLEHandshake.proto b/service/proto/BLEHandshake.proto
deleted file mode 100644
index 26f5783..0000000
--- a/service/proto/BLEHandshake.proto
+++ /dev/null
@@ -1,14 +0,0 @@
-syntax = "proto3";
-
-package com.android.car.trust.BLEHandshake;
-
-option java_package = "com.android.car.trust";
-option java_outer_classname = "BLEHandshake";
-
-message VersionExchange {
- // Required.
- int32 minSupportedVersion = 1;
-
- // Required.
- int32 maxSupportedVersion = 2;
-}
\ No newline at end of file
diff --git a/service/proto/BLEStream.proto b/service/proto/BLEStream.proto
deleted file mode 100644
index fe10cbd..0000000
--- a/service/proto/BLEStream.proto
+++ /dev/null
@@ -1,43 +0,0 @@
-syntax = "proto3";
-
-package com.android.car.trust.BLEStream;
-
-option java_package = "com.android.car.trust";
-option java_outer_classname = "BLEStream";
-
-// A message across a BLE channel.
-message BLEMessage {
- // The current version of the protocol.
- int32 version = 1;
-
- enum OperationType {
- // The contents of the payload are unknown.
- UNKNOWN = 0;
-
- // The payload contains handshake messages needed to set up encryption.
- ENCRYPTION_HANDSHAKE = 1;
-
- // The message is an acknowledgment of a previously received message. The
- // payload for this type should be empty.
- ACK = 2;
-
- // The payload contains a client-specific message.
- CLIENT_MESSAGE = 3;
- }
-
- // The operation that this message represents.
- OperationType operation = 2;
-
- // A 1-based packet number. The first message will have a value of "1" rather
- // than "0".
- fixed32 packet_number = 3;
-
- // The total number of packets in the message stream.
- fixed32 total_packets = 4;
-
- // Whether the payload field is encrypted.
- bool is_payload_encrypted = 5;
-
- // The bytes that represent the message content for this packet.
- bytes payload = 6;
-}
diff --git a/service/proto/ble_message.proto b/service/proto/ble_message.proto
new file mode 100644
index 0000000..c1610d7
--- /dev/null
+++ b/service/proto/ble_message.proto
@@ -0,0 +1,30 @@
+syntax = "proto3";
+
+package aae.blemessagestream;
+
+import "packages/services/Car/service/proto/operation_type.proto";
+
+option java_package = "com.android.car.BLEStreamProtos";
+option java_outer_classname = "BLEMessageProto";
+
+// A message across a BLE channel.
+message BLEMessage {
+ // The current version of the protocol.
+ int32 version = 1;
+
+ // The operation that this message represents.
+ OperationType operation = 2;
+
+ // A 1-based packet number. The first message will have a value of "1" rather
+ // than "0".
+ fixed32 packet_number = 3;
+
+ // The total number of packets in the message stream.
+ fixed32 total_packets = 4;
+
+ // Whether the payload field is encrypted.
+ bool is_payload_encrypted = 5;
+
+ // The bytes that represent the message content for this packet.
+ bytes payload = 6;
+}
diff --git a/service/proto/ble_version_exchange.proto b/service/proto/ble_version_exchange.proto
new file mode 100644
index 0000000..e6c47f1
--- /dev/null
+++ b/service/proto/ble_version_exchange.proto
@@ -0,0 +1,14 @@
+syntax = "proto3";
+
+package aae.blemessagestream;
+
+option java_package = "com.android.car.BLEStreamProtos";
+option java_outer_classname = "VersionExchangeProto";
+
+message BLEVersionExchange {
+ // Required.
+ int32 minSupportedVersion = 1;
+
+ // Required.
+ int32 maxSupportedVersion = 2;
+}
diff --git a/service/proto/jarjar-rules.txt b/service/proto/jarjar-rules.txt
index c06c995..d27aecb 100644
--- a/service/proto/jarjar-rules.txt
+++ b/service/proto/jarjar-rules.txt
@@ -1 +1 @@
-rule com.google.protobuf.** com.android.car.trust.protobuf.@1
\ No newline at end of file
+rule com.google.protobuf.** com.android.car.protobuf.@1
diff --git a/service/proto/operation_type.proto b/service/proto/operation_type.proto
new file mode 100644
index 0000000..cce9f70
--- /dev/null
+++ b/service/proto/operation_type.proto
@@ -0,0 +1,28 @@
+syntax = "proto3";
+
+package aae.blemessagestream;
+
+option java_package = "com.android.car.BLEStreamProtos";
+option java_outer_classname = "BLEOperationProto";
+
+// The different message types that indicate the content of the payload.
+//
+// Ensure that these values are positive to reduce incurring too many bytes
+// to encode.
+enum OperationType {
+ // The contents of the payload are unknown.
+ //
+ // Note, this enum name is prefixed. See
+ // go/proto-best-practices-checkers#enum-default-value-name-conflict
+ OPERATION_TYPE_UNKNOWN = 0;
+
+ // The payload contains handshake messages needed to set up encryption.
+ ENCRYPTION_HANDSHAKE = 2;
+
+ // The message is an acknowledgment of a previously received message. The
+ // payload for this type should be empty.
+ ACK = 3;
+
+ // The payload contains a client-specific message.
+ CLIENT_MESSAGE = 4;
+}
diff --git a/service/proto/phone_auth.proto b/service/proto/phone_auth.proto
new file mode 100644
index 0000000..4465a55
--- /dev/null
+++ b/service/proto/phone_auth.proto
@@ -0,0 +1,15 @@
+syntax = "proto3";
+
+package aae.trustagent;
+
+option java_package = "com.android.car.trust";
+option java_outer_classname = "PhoneAuthProto";
+
+message PhoneCredentials {
+ // Required field representing the escrow token that needs to be sent for authenticating the user
+ fixed64 escrow_token = 1;
+
+ // Required field representing the handle associated with the escrow token that needs to be sent
+ // for authenticating the user
+ fixed64 handle = 2;
+}
\ No newline at end of file
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.\nTo 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 886e3ba..9d90a7c 100644
--- a/service/res/values/config.xml
+++ b/service/res/values/config.xml
@@ -38,23 +38,24 @@
connection process. Disable this default to implement your own policy. -->
<bool name="useDefaultBluetoothConnectionPolicy">true</bool>
- <string name="inputService">android.car.input.service/.DefaultInputService</string>
+ <string name="inputService" translatable="false">android.car.input.service/.DefaultInputService</string>
- <string name="instrumentClusterRendererService">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. -->
<bool name="enableActivityBlockingForSafety">true</bool>
<!-- Activity to be presented when un-safe activity is launched. Take a look at the javadoc of the
default implementation. -->
- <string name="activityBlockingActivity">com.android.car/com.android.car.pm.ActivityBlockingActivity</string>
+ <string name="activityBlockingActivity" translatable="false">com.android.car/com.android.car.pm.ActivityBlockingActivity</string>
<!-- Comma separated list of activities that need to be exempted from getting
blocked in a UX restricted state.
Format of each entry is either to specify package name to whitelist the whole package or
use format of "packagename/activity_classname" for tagging each activities.
For general guidelines to design distraction optimized apps, please refer
to Android Auto Driver Distraction Guidelines. -->
- <string name="activityWhitelist"></string>
+ <string name="activityWhitelist" translatable="false"></string>
<!-- Comma separated list of activities that need to be exempted from getting
blocked in a UX restricted state.
Format of each entry is either to specify package name to whitelist the whole package or
@@ -62,16 +63,16 @@
The current implementations expects the following system packages/activities to be
whitelisted. For general guidelines to design distraction optimized apps, please refer
to Android Auto Driver Distraction Guidelines. -->
- <string name="systemActivityWhitelist">com.android.systemui,com.google.android.permissioncontroller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity</string>
+ <string name="systemActivityWhitelist" translatable="false">com.android.systemui,com.google.android.permissioncontroller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity</string>
<!-- Comma separated list of activities that will be blocked during restricted state.
Format of each entry is either to specify package name to whitelist the whole package
or use format of "packagename/activity_classname" for tagging each activities.-->
- <string name="activityBlacklist"></string>
+ <string name="activityBlacklist" translatable="false"></string>
<!-- List of play store package names that are allowed sources of app installation-->
- <string-array translateble="false" name="allowedAppInstallSources">
+ <string-array translatable="false" name="allowedAppInstallSources">
</string-array>
<!-- Default home activity -->
- <string name="defaultHomeActivity"><!--com.your.package/com.your.package.Activity--></string>
+ <string name="defaultHomeActivity" translatable="false"><!--com.your.package/com.your.package.Activity--></string>
<!-- The com.android.car.vms.VmsClientManager will bind to this list of clients running as system user -->
<string-array translatable="false" name="vmsPublisherSystemClients">
</string-array>
@@ -95,7 +96,7 @@
no activity shall be launched, or must be in the format of a flattened ComponentName and
reference a valid activity. It is strongly recommended that the chosen activity be
protected with the android.car.permission.STORAGE_MONITORING permission. -->
- <string name="activityHandlerForFlashWearChanges">com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity</string>
+ <string name="activityHandlerForFlashWearChanges" translatable="false">com.google.android.car.defaultstoragemonitoringcompanionapp/.MainActivity</string>
<!-- How often (in seconds) CarService will update I/O metrics from the kernel. -->
<integer name="ioStatsRefreshRateSeconds">60</integer>
@@ -128,7 +129,7 @@
must be registered in its containing app's AndroidManifest.xml and it is
strongly recommended that it be protected with the
android.car.permission.STORAGE_MONITORING permission. -->
- <string name="intentReceiverForUnacceptableIoMetrics">com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver</string>
+ <string name="intentReceiverForUnacceptableIoMetrics" translatable="false">com.google.android.car.defaultstoragemonitoringcompanionapp/.ExcessiveIoIntentReceiver</string>
<!-- The Model ID to advertise Bluetooth Fast Pair connections with. Must be overlayed with
device specific model id. -->
diff --git a/service/res/values/strings.xml b/service/res/values/strings.xml
index acc7a58..c5216c3 100644
--- a/service/res/values/strings.xml
+++ b/service/res/values/strings.xml
@@ -120,8 +120,8 @@
<string name="exit_button_message">To start over with safe app features, select <xliff:g id="exit_button" example="Back">%s</xliff:g>.</string>
<!-- Blocking activity: Text for button that restarts the current blocked application. [CHAR LIMIT=15] -->
<string name="exit_button">Back</string>
- <!-- Blocking activity: Text for button that shows debug info for non-user build. [CHAR LIMIT=10] -->
- <string name="debug_button_text">Debug Info</string>
+ <!-- Blocking activity: Text for button that shows debug info in non-user build. -->
+ <string name="debug_button_text" translatable="false">Debug Info</string>
<!-- Permission text: apps can control diagnostic data [CHAR LIMIT=NONE] -->
<string name="car_permission_label_diag_read">read diagnostic data</string>
diff --git a/service/src/com/android/car/CarBugreportManagerService.java b/service/src/com/android/car/CarBugreportManagerService.java
index 25592e8..59a017f 100644
--- a/service/src/com/android/car/CarBugreportManagerService.java
+++ b/service/src/com/android/car/CarBugreportManagerService.java
@@ -63,6 +63,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;
/**
@@ -93,6 +98,107 @@
@Override
@RequiresPermission(android.Manifest.permission.DUMP)
+ public void requestZippedBugreport(ParcelFileDescriptor data, ParcelFileDescriptor progress,
+ ICarBugreportCallback callback) {
+ if (mHandler == null) {
+ // bugreport manager service is only available if the build is not a user build.
+ reportError(callback, CarBugreportManagerCallback.CAR_BUGREPORT_SERVICE_NOT_AVAILABLE);
+ return;
+ }
+
+ mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DUMP,
+ "requestBugreport");
+
+ 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) {
if (mHandler == null) {
// bugreport manager service is only available if the build is not a user build.
@@ -127,10 +233,6 @@
}
}
- @Override
- public void dump(PrintWriter writer) {
- }
-
private void dumpStateToFileWrapper(ParcelFileDescriptor pfd, ICarBugreportCallback callback) {
dumpStateToFile(pfd, callback);
synchronized (mLock) {
@@ -138,6 +240,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 +262,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 +291,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 +302,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..10d5d91 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;
@@ -85,6 +87,10 @@
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 +134,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);
@@ -463,7 +473,11 @@
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.
+ mActiveUserMediaController.registerCallback(mMediaControllerCallback, mHandler);
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/CarUxRestrictionsManagerService.java b/service/src/com/android/car/CarUxRestrictionsManagerService.java
index a9c4fbf..0c87ac4 100644
--- a/service/src/com/android/car/CarUxRestrictionsManagerService.java
+++ b/service/src/com/android/car/CarUxRestrictionsManagerService.java
@@ -304,7 +304,7 @@
* Registers a {@link ICarUxRestrictionsChangeListener} to be notified for changes to the UX
* restrictions.
*
- * @param listener Listener to register
+ * @param listener Listener to register
* @param displayId UX restrictions on this display will be notified.
*/
@Override
@@ -377,9 +377,15 @@
* @param displayId UX restrictions on this display will be returned.
*/
@Override
- @Nullable
public synchronized CarUxRestrictions getCurrentUxRestrictions(int displayId) {
- return mCurrentUxRestrictions.get(getPhysicalPort(displayId));
+ CarUxRestrictions restrictions = mCurrentUxRestrictions.get(getPhysicalPort(displayId));
+ if (restrictions == null) {
+ Log.e(TAG, String.format(
+ "Restrictions are null for displayId:%d. Returning full restrictions.",
+ displayId));
+ restrictions = createFullyRestrictedRestrictions();
+ }
+ return restrictions;
}
/**
@@ -421,7 +427,6 @@
*
* @param mode See values in {@link CarUxRestrictionsManager.UxRestrictionMode}.
* @return {@code true} if mode was successfully changed; {@code false} otherwise.
- *
* @see CarUxRestrictionsConfiguration.DrivingStateRestrictions
* @see CarUxRestrictionsConfiguration.Builder
*/
@@ -742,7 +747,10 @@
logd("dispatching to clients");
for (UxRestrictionsClient client : mUxRClients) {
- byte clientDisplayPort = getPhysicalPort(client.mDisplayId);
+ Byte clientDisplayPort = getPhysicalPort(client.mDisplayId);
+ if (clientDisplayPort == null) {
+ clientDisplayPort = mDefaultDisplayPhysicalPort;
+ }
if (displayToDispatch.contains(clientDisplayPort)) {
client.dispatchEventToClients(newUxRestrictions.get(clientDisplayPort));
}
@@ -849,12 +857,17 @@
}
}
- private byte getPhysicalPort(int displayId) {
+ /**
+ * Returns the physical port byte id for the display or {@code null} if {@link
+ * DisplayManager#getDisplay(int)} is not aware of the provided id.
+ */
+ @Nullable
+ private Byte getPhysicalPort(int displayId) {
if (!mPortLookup.containsKey(displayId)) {
Display display = mDisplayManager.getDisplay(displayId);
if (display == null) {
Log.w(TAG, "Could not retrieve display for id: " + displayId);
- return mDefaultDisplayPhysicalPort;
+ return null;
}
byte port = getPhysicalPort(display);
mPortLookup.put(displayId, port);
@@ -887,6 +900,13 @@
.build();
}
+ private CarUxRestrictions createFullyRestrictedRestrictions() {
+ return new CarUxRestrictions.Builder(
+ /*reqOpt= */ true,
+ CarUxRestrictions.UX_RESTRICTIONS_FULLY_RESTRICTED,
+ SystemClock.elapsedRealtimeNanos()).build();
+ }
+
CarUxRestrictionsConfiguration createDefaultConfig(byte port) {
return new CarUxRestrictionsConfiguration.Builder()
.setPhysicalPort(port)
diff --git a/service/src/com/android/car/ICarImpl.java b/service/src/com/android/car/ICarImpl.java
index 3956f35..2f90d3d 100644
--- a/service/src/com/android/car/ICarImpl.java
+++ b/service/src/com/android/car/ICarImpl.java
@@ -508,6 +508,7 @@
private static final String COMMAND_GARAGE_MODE = "garage-mode";
private static final String COMMAND_GET_DO_ACTIVITIES = "get-do-activities";
private static final String COMMAND_GET_CARPROPERTYCONFIG = "get-carpropertyconfig";
+ private static final String COMMAND_GET_PROPERTY_VALUE = "get-property-value";
private static final String COMMAND_PROJECTION_UI_MODE = "projection-ui-mode";
private static final String COMMAND_RESUME = "resume";
private static final String COMMAND_SUSPEND = "suspend";
@@ -539,6 +540,9 @@
pw.println("\t Get Distraction Optimized activities in given package.");
pw.println("\tget-carpropertyconfig [propertyId]");
pw.println("\t Get a CarPropertyConfig by Id in Hex or list all CarPropertyConfigs");
+ pw.println("\tget-property-value [propertyId] [areaId]");
+ pw.println("\t Get a vehicle property value by property id in Hex and areaId");
+ pw.println("\t or list all property values for all areaId");
pw.println("\tsuspend");
pw.println("\t Suspend the system to Deep Sleep.");
pw.println("\tresume");
@@ -618,6 +622,11 @@
String propertyId = args.length < 2 ? "" : args[1];
mHal.dumpPropertyConfigs(writer, propertyId);
break;
+ case COMMAND_GET_PROPERTY_VALUE:
+ String propId = args.length < 2 ? "" : args[1];
+ String areaId = args.length < 3 ? "" : args[2];
+ mHal.dumpPropertyValueByCommend(writer, propId, areaId);
+ break;
case COMMAND_PROJECTION_UI_MODE:
if (args.length != 2) {
writer.println("Incorrect number of arguments");
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 45c2903..714459e 100644
--- a/service/src/com/android/car/audio/CarAudioFocus.java
+++ b/service/src/com/android/car/audio/CarAudioFocus.java
@@ -43,9 +43,9 @@
// Values for the internal interaction matrix we use to make focus decisions
- private static final int INTERACTION_REJECT = 0; // Focus not granted
- private static final int INTERACTION_EXCLUSIVE = 1; // Focus granted, others loose focus
- private static final int INTERACTION_CONCURRENT = 2; // Focus granted, others keep focus
+ static final int INTERACTION_REJECT = 0; // Focus not granted
+ 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
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/hal/VehicleHal.java b/service/src/com/android/car/hal/VehicleHal.java
index 286ca79..d7faa2b 100644
--- a/service/src/com/android/car/hal/VehicleHal.java
+++ b/service/src/com/android/car/hal/VehicleHal.java
@@ -485,6 +485,58 @@
}
/**
+ * Dumps vehicle property values.
+ * @param writer
+ * @param propId property id, dump all properties' value if it is empty string.
+ * @param areaId areaId of the property, dump the property for all areaIds in the config
+ * if it is empty string.
+ */
+ public void dumpPropertyValueByCommend(PrintWriter writer, String propId, String areaId) {
+ if (propId.equals("")) {
+ writer.println("**All property values**");
+ for (VehiclePropConfig config : mAllProperties.values()) {
+ dumpPropertyValueByConfig(writer, config);
+ }
+ } else if (areaId.equals("")) {
+ VehiclePropConfig config = mAllProperties.get(Integer.parseInt(propId, 16));
+ dumpPropertyValueByConfig(writer, config);
+ } else {
+ int id = Integer.parseInt(propId, 16);
+ int area = Integer.parseInt(areaId);
+ try {
+ VehiclePropValue value = get(id, area);
+ writer.println(dumpVehiclePropValue(value));
+ } catch (Exception e) {
+ writer.println("Can not get property value for propertyId: 0x"
+ + propId + ", areaId: " + area);
+ }
+ }
+ }
+
+ private void dumpPropertyValueByConfig(PrintWriter writer, VehiclePropConfig config) {
+ if (config.areaConfigs.isEmpty()) {
+ try {
+ VehiclePropValue value = get(config.prop);
+ writer.println(dumpVehiclePropValue(value));
+ } catch (Exception e) {
+ writer.println("Can not get property value for propertyId: 0x"
+ + toHexString(config.prop) + ", areaId: 0");
+ }
+ } else {
+ for (VehicleAreaConfig areaConfig : config.areaConfigs) {
+ int area = areaConfig.areaId;
+ try {
+ VehiclePropValue value = get(config.prop, area);
+ writer.println(dumpVehiclePropValue(value));
+ } catch (Exception e) {
+ writer.println("Can not get property value for propertyId: 0x"
+ + toHexString(config.prop) + ", areaId: " + area);
+ }
+ }
+ }
+ }
+
+ /**
* Dump VHAL property configs.
*
* @param writer
@@ -513,7 +565,7 @@
}
/** Use VehiclePropertyConfig to construct string for dumping */
- private String dumpPropertyConfigsHelp(VehiclePropConfig config) {
+ private static String dumpPropertyConfigsHelp(VehiclePropConfig config) {
StringBuilder builder = new StringBuilder()
.append("Property:0x").append(toHexString(config.prop))
.append(",Property name:").append(VehicleProperty.toString(config.prop))
@@ -640,6 +692,7 @@
StringBuilder sb = new StringBuilder()
.append("Property:0x").append(toHexString(value.prop))
+ .append(",status: ").append(value.status)
.append(",timestamp:").append(value.timestamp)
.append(",zone:0x").append(toHexString(value.areaId))
.append(",floatValues: ").append(Arrays.toString(value.value.floatValues.toArray()))
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/pm/CarAppMetadataReader.java b/service/src/com/android/car/pm/CarAppMetadataReader.java
index 7c1e115..648fded 100644
--- a/service/src/com/android/car/pm/CarAppMetadataReader.java
+++ b/service/src/com/android/car/pm/CarAppMetadataReader.java
@@ -51,18 +51,19 @@
* @return Array of DO activity names in the given package
*/
@Nullable
- public static String[] findDistractionOptimizedActivities(Context context, String packageName)
- throws NameNotFoundException {
+ public static String[] findDistractionOptimizedActivitiesAsUser(Context context,
+ String packageName, int userId) throws NameNotFoundException {
final PackageManager pm = context.getPackageManager();
// Check if any of the activities in the package are DO by checking all the
// <activity> elements.
PackageInfo pkgInfo =
- pm.getPackageInfo(
+ pm.getPackageInfoAsUser(
packageName, PackageManager.GET_ACTIVITIES
| PackageManager.GET_META_DATA
| PackageManager.MATCH_DIRECT_BOOT_AWARE
- | PackageManager.MATCH_DIRECT_BOOT_UNAWARE);
+ | PackageManager.MATCH_DIRECT_BOOT_UNAWARE,
+ userId);
if (pkgInfo == null) {
return null;
}
diff --git a/service/src/com/android/car/pm/CarPackageManagerService.java b/service/src/com/android/car/pm/CarPackageManagerService.java
index 08e13e1..7615d28 100644
--- a/service/src/com/android/car/pm/CarPackageManagerService.java
+++ b/service/src/com/android/car/pm/CarPackageManagerService.java
@@ -18,6 +18,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.app.ActivityManager;
import android.app.ActivityManager.StackInfo;
import android.car.Car;
import android.car.content.pm.AppBlockingPackageInfo;
@@ -48,7 +49,7 @@
import android.os.Looper;
import android.os.Message;
import android.os.Process;
-import android.text.TextUtils;
+import android.os.UserHandle;
import android.text.format.DateFormat;
import android.util.ArraySet;
import android.util.Log;
@@ -87,6 +88,7 @@
private final Context mContext;
private final SystemActivityMonitoringService mSystemActivityMonitoringService;
private final PackageManager mPackageManager;
+ private final ActivityManager mActivityManager;
private final HandlerThread mHandlerThread;
private final PackageHandler mHandler;
@@ -110,8 +112,6 @@
private HashMap<String, AppBlockingPackageInfoWrapper> mActivityWhitelistMap = new HashMap<>();
// The list corresponding to the one configured in <activityBlacklist>
@GuardedBy("this")
- private HashMap<String, AppBlockingPackageInfoWrapper> mActivityBlacklistMap = new HashMap<>();
- @GuardedBy("this")
private LinkedList<AppBlockingPolicyProxy> mProxies;
@GuardedBy("this")
@@ -179,6 +179,7 @@
mCarUxRestrictionsService = uxRestrictionsService;
mSystemActivityMonitoringService = systemActivityMonitoringService;
mPackageManager = mContext.getPackageManager();
+ mActivityManager = mContext.getSystemService(ActivityManager.class);
mUxRestrictionsListener = new UxRestrictionsListener(uxRestrictionsService);
mHandlerThread = new HandlerThread(CarLog.TAG_PACKAGE);
mHandlerThread.start();
@@ -318,8 +319,7 @@
return wrapper.info;
}
}
- AppBlockingPackageInfoWrapper wrapper = mActivityBlacklistMap.get(packageName);
- return (wrapper != null) ? wrapper.info : null;
+ return null;
}
@GuardedBy("this")
@@ -374,7 +374,6 @@
}
mHasParsedPackages = false;
mActivityWhitelistMap.clear();
- mActivityBlacklistMap.clear();
mClientPolicies.clear();
if (mProxies != null) {
for (AppBlockingPolicyProxy proxy : mProxies) {
@@ -382,7 +381,7 @@
}
mProxies.clear();
}
- wakeupClientsWaitingForPolicySetitngLocked();
+ wakeupClientsWaitingForPolicySettingLocked();
}
mContext.unregisterReceiver(mPackageParsingEventReceiver);
mContext.unregisterReceiver(mUserSwitchedEventReceiver);
@@ -401,7 +400,8 @@
pkgParseIntent.addAction(action);
}
pkgParseIntent.addDataScheme("package");
- mContext.registerReceiver(mPackageParsingEventReceiver, pkgParseIntent);
+ mContext.registerReceiverAsUser(mPackageParsingEventReceiver, UserHandle.ALL,
+ pkgParseIntent, null, null);
try {
// TODO(128456985): register listener for each display in order to
// properly launch blocking screens.
@@ -418,8 +418,8 @@
}
private void doParseInstalledPackages() {
- generateActivityWhitelistMap();
- generateActivityBlacklistMap();
+ int userId = mActivityManager.getCurrentUser();
+ generateActivityWhitelistMap(userId);
synchronized (this) {
mHasParsedPackages = true;
}
@@ -432,7 +432,7 @@
}
@GuardedBy("this")
- private void wakeupClientsWaitingForPolicySetitngLocked() {
+ private void wakeupClientsWaitingForPolicySettingLocked() {
for (CarAppBlockingPolicy waitingPolicy : mWaitingPolicies) {
synchronized (waitingPolicy) {
waitingPolicy.notifyAll();
@@ -443,7 +443,7 @@
private void doSetPolicy() {
synchronized (this) {
- wakeupClientsWaitingForPolicySetitngLocked();
+ wakeupClientsWaitingForPolicySettingLocked();
}
blockTopActivitiesIfNecessary();
}
@@ -559,12 +559,36 @@
* Generate a map of whitelisted packages and activities of the form {pkgName, Whitelisted
* activities}. The whitelist information can come from a configuration XML resource or from
* the apps marking their activities as distraction optimized.
+ *
+ * @param userId Generate whitelist based on packages installed for this user.
*/
- private void generateActivityWhitelistMap() {
- HashMap<String, AppBlockingPackageInfoWrapper> activityWhitelist = new HashMap<>();
-
+ private void generateActivityWhitelistMap(int userId) {
// Get the apps/activities that are whitelisted in the configuration XML resources.
- HashMap<String, Set<String>> configWhitelist = new HashMap<>();
+ Map<String, Set<String>> configWhitelist = generateConfigWhitelist();
+ Map<String, Set<String>> configBlacklist = generateConfigBlacklist();
+
+ Map<String, AppBlockingPackageInfoWrapper> activityWhitelist =
+ generateActivityWhitelistAsUser(UserHandle.USER_SYSTEM,
+ configWhitelist, configBlacklist);
+ // Also parse packages for current user.
+ if (userId != UserHandle.USER_SYSTEM) {
+ Map<String, AppBlockingPackageInfoWrapper> userWhitelistedPackages =
+ generateActivityWhitelistAsUser(userId, configWhitelist, configBlacklist);
+ for (String packageName : userWhitelistedPackages.keySet()) {
+ if (activityWhitelist.containsKey(packageName)) {
+ continue;
+ }
+ activityWhitelist.put(packageName, userWhitelistedPackages.get(packageName));
+ }
+ }
+ synchronized (this) {
+ mActivityWhitelistMap.clear();
+ mActivityWhitelistMap.putAll(activityWhitelist);
+ }
+ }
+
+ private Map<String, Set<String>> generateConfigWhitelist() {
+ Map<String, Set<String>> configWhitelist = new HashMap<>();
mConfiguredWhitelist = mContext.getString(R.string.activityWhitelist);
if (mConfiguredWhitelist == null) {
if (DBG_POLICY_CHECK) {
@@ -572,6 +596,7 @@
}
}
parseConfigList(mConfiguredWhitelist, configWhitelist);
+
mConfiguredSystemWhitelist = mContext.getString(R.string.systemActivityWhitelist);
if (mConfiguredSystemWhitelist == null) {
if (DBG_POLICY_CHECK) {
@@ -588,11 +613,43 @@
configWhitelist.put(mActivityBlockingActivity.getPackageName(), defaultActivity);
}
- List<PackageInfo> packages = mPackageManager.getInstalledPackages(
+ return configWhitelist;
+ }
+
+ private Map<String, Set<String>> generateConfigBlacklist() {
+ Map<String, Set<String>> configBlacklist = new HashMap<>();
+ mConfiguredBlacklist = mContext.getString(R.string.activityBlacklist);
+ if (mConfiguredBlacklist == null) {
+ if (DBG_POLICY_CHECK) {
+ Log.d(CarLog.TAG_PACKAGE, "Null blacklist in config");
+ }
+ }
+ parseConfigList(mConfiguredBlacklist, configBlacklist);
+
+ return configBlacklist;
+ }
+
+ /**
+ * Generates whitelisted activities based on packages installed for system user and current
+ * user (if different). Factors affecting whitelist:
+ * - whitelist from resource config;
+ * - activity declared as Distraction Optimized (D.O.) in manifest;
+ * - blacklist from resource config - package/activity blacklisted will not exist
+ * in returned whitelist.
+ *
+ * @param userId Parse packages installed for user.
+ * @param configWhitelist Whitelist from config.
+ * @param configBlacklist Blacklist from config.
+ */
+ private Map<String, AppBlockingPackageInfoWrapper> generateActivityWhitelistAsUser(int userId,
+ Map<String, Set<String>> configWhitelist, Map<String, Set<String>> configBlacklist) {
+ HashMap<String, AppBlockingPackageInfoWrapper> activityWhitelist = new HashMap<>();
+
+ List<PackageInfo> packages = mPackageManager.getInstalledPackagesAsUser(
PackageManager.GET_SIGNATURES | PackageManager.GET_ACTIVITIES
| PackageManager.MATCH_DIRECT_BOOT_AWARE
- | PackageManager.MATCH_DIRECT_BOOT_UNAWARE);
-
+ | PackageManager.MATCH_DIRECT_BOOT_UNAWARE,
+ userId);
for (PackageInfo info : packages) {
if (info.applicationInfo == null) {
continue;
@@ -606,8 +663,8 @@
flags = AppBlockingPackageInfo.FLAG_SYSTEM_APP;
}
- /* 1. Check if all or some of this app is in the <activityWhitelist>
- in config.xml */
+ /* 1. Check if all or some of this app is in the <activityWhitelist> or
+ <systemActivityWhitelist> in config.xml */
Set<String> configActivitiesForPackage = configWhitelist.get(info.packageName);
if (configActivitiesForPackage != null) {
if (DBG_POLICY_CHECK) {
@@ -662,8 +719,9 @@
}
try {
- String[] doActivities = CarAppMetadataReader.findDistractionOptimizedActivities(
- mContext, info.packageName);
+ String[] doActivities =
+ CarAppMetadataReader.findDistractionOptimizedActivitiesAsUser(
+ mContext, info.packageName, userId);
if (doActivities != null) {
// Some of the activities in this app are Distraction Optimized.
if (DBG_POLICY_CHECK) {
@@ -685,6 +743,17 @@
continue;
}
+ /* 3. Check if parsed activity is in <activityBlacklist> in config.xml. Anything
+ in blacklist should not be whitelisted, either as D.O. or by config. */
+ if (configBlacklist.containsKey(info.packageName)) {
+ Set<String> configBlacklistActivities = configBlacklist.get(info.packageName);
+ if (configBlacklistActivities.isEmpty()) {
+ // Whole package should be blacklisted.
+ continue;
+ }
+ activities.removeAll(configBlacklistActivities);
+ }
+
Signature[] signatures;
signatures = info.signatures;
AppBlockingPackageInfo appBlockingInfo = new AppBlockingPackageInfo(
@@ -694,10 +763,7 @@
appBlockingInfo, true);
activityWhitelist.put(info.packageName, wrapper);
}
- synchronized (this) {
- mActivityWhitelistMap.clear();
- mActivityWhitelistMap.putAll(activityWhitelist);
- }
+ return activityWhitelist;
}
private boolean isDebugBuild() {
@@ -705,74 +771,6 @@
}
/**
- * Generate a map of blacklisted packages and activities of the form {pkgName, Blacklisted
- * activities}. The blacklist information comes from a configuration XML resource.
- */
- private void generateActivityBlacklistMap() {
- HashMap<String, AppBlockingPackageInfoWrapper> activityBlacklist = new HashMap<>();
-
- // Parse blacklisted activities.
- Map<String, Set<String>> configBlacklist = new HashMap<>();
- mConfiguredBlacklist = mContext.getString(R.string.activityBlacklist);
- if (mConfiguredBlacklist == null) {
- if (DBG_POLICY_CHECK) {
- Log.d(CarLog.TAG_PACKAGE, "Null blacklist in config");
- }
- }
- parseConfigList(mConfiguredBlacklist, configBlacklist);
-
- for (String pkg : configBlacklist.keySet()) {
- if (TextUtils.isEmpty(pkg)) {
- // This means there is nothing to blacklist
- Log.d(CarLog.TAG_PACKAGE, "Empty string in blacklist pkg");
- continue;
- }
- int flags = 0;
- PackageInfo pkgInfo;
- Set<String> activities = new ArraySet<>();
- try {
- pkgInfo = mPackageManager.getPackageInfo(
- pkg, PackageManager.GET_ACTIVITIES
- | PackageManager.GET_SIGNING_CERTIFICATES
- | PackageManager.MATCH_DIRECT_BOOT_AWARE
- | PackageManager.MATCH_DIRECT_BOOT_UNAWARE);
- } catch (NameNotFoundException e) {
- Log.e(CarLog.TAG_PACKAGE, pkg + " not found to blacklist ", e);
- continue;
- }
-
- if (pkgInfo.applicationInfo.isSystemApp()
- || pkgInfo.applicationInfo.isUpdatedSystemApp()) {
- flags |= AppBlockingPackageInfo.FLAG_SYSTEM_APP;
- }
- Set<String> configActivities = configBlacklist.get(pkg);
- if (configActivities.size() == 0) {
- // whole package
- flags |= AppBlockingPackageInfo.FLAG_WHOLE_ACTIVITY;
- List<String> activitiesInPackage = getActivitiesInPackage(pkgInfo);
- if (activitiesInPackage != null && !activitiesInPackage.isEmpty()) {
- activities.addAll(activitiesInPackage);
- }
- } else {
- activities.addAll(configActivities);
- }
-
- if (activities.isEmpty()) {
- continue;
- }
- AppBlockingPackageInfo appBlockingInfo = new AppBlockingPackageInfo(pkg, 0, 0, flags,
- pkgInfo.signatures, activities.toArray(new String[activities.size()]));
- AppBlockingPackageInfoWrapper wrapper = new AppBlockingPackageInfoWrapper(
- appBlockingInfo, true);
- activityBlacklist.put(pkg, wrapper);
- }
- synchronized (this) {
- mActivityBlacklistMap.clear();
- mActivityBlacklistMap.putAll(activityBlacklist);
- }
- }
-
- /**
* Parses the given resource and updates the input map of packages and activities.
*
* Key is package name and value is list of activities. Empty set implies whole package is
@@ -917,10 +915,6 @@
for (AppBlockingPackageInfoWrapper wrapper : mActivityWhitelistMap.values()) {
sb.append(wrapper.toString() + "\n");
}
- sb.append("**System Black list**\n");
- for (AppBlockingPackageInfoWrapper wrapper : mActivityBlacklistMap.values()) {
- sb.append(wrapper.toString() + "\n");
- }
}
sb.append("**Client Policies**\n");
for (Entry<String, ClientPolicy> entry : mClientPolicies.entrySet()) {
@@ -943,6 +937,9 @@
sb.append("**Whitelist string in resource**\n");
sb.append(mConfiguredWhitelist + "\n");
+ sb.append("**System whitelist string in resource**\n");
+ sb.append(mConfiguredSystemWhitelist + "\n");
+
sb.append("**Blacklist string in resource**\n");
sb.append(mConfiguredBlacklist + "\n");
@@ -1091,7 +1088,8 @@
@Nullable
public String[] getDistractionOptimizedActivities(String pkgName) {
try {
- return CarAppMetadataReader.findDistractionOptimizedActivities(mContext, pkgName);
+ return CarAppMetadataReader.findDistractionOptimizedActivitiesAsUser(mContext, pkgName,
+ mActivityManager.getCurrentUser());
} catch (NameNotFoundException e) {
return null;
}
@@ -1154,6 +1152,9 @@
}
private void requestParsingInstalledPkgs(long delayMs) {
+ // Parse packages for current user.
+ removeMessages(MSG_PARSE_PKG);
+
Message msg = obtainMessage(MSG_PARSE_PKG);
if (delayMs == 0) {
sendMessage(msg);
@@ -1169,7 +1170,6 @@
doHandleInit();
break;
case MSG_PARSE_PKG:
- removeMessages(MSG_PARSE_PKG);
doParseInstalledPackages();
break;
case MSG_SET_POLICY:
diff --git a/service/src/com/android/car/storagemonitoring/SysfsLifetimeWriteInfoProvider.java b/service/src/com/android/car/storagemonitoring/SysfsLifetimeWriteInfoProvider.java
index 50cc57c..6ba3163 100644
--- a/service/src/com/android/car/storagemonitoring/SysfsLifetimeWriteInfoProvider.java
+++ b/service/src/com/android/car/storagemonitoring/SysfsLifetimeWriteInfoProvider.java
@@ -19,7 +19,9 @@
import android.annotation.Nullable;
import android.car.storagemonitoring.LifetimeWriteInfo;
import android.util.Log;
+
import com.android.internal.annotations.VisibleForTesting;
+
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
@@ -100,7 +102,12 @@
for (String fstype : KNOWN_FILESYSTEMS) {
File fspath = new File(mWriteInfosPath, fstype);
if (!fspath.exists() || !fspath.isDirectory()) continue;
- Arrays.stream(fspath.listFiles(File::isDirectory))
+ File[] files = fspath.listFiles(File::isDirectory);
+ if (files == null) {
+ Log.e(TAG, "there are no directories at location " + fspath.getAbsolutePath());
+ continue;
+ }
+ Arrays.stream(files)
.map(this::tryParse)
.filter(Objects::nonNull)
.forEach(writeInfos::add);
diff --git a/service/src/com/android/car/trust/BLEMessagePayloadStream.java b/service/src/com/android/car/trust/BLEMessagePayloadStream.java
index 1f1fdb1..75345b8 100644
--- a/service/src/com/android/car/trust/BLEMessagePayloadStream.java
+++ b/service/src/com/android/car/trust/BLEMessagePayloadStream.java
@@ -19,7 +19,7 @@
import android.annotation.NonNull;
import android.util.Log;
-import com.android.car.trust.BLEStream.BLEMessage;
+import com.android.car.BLEStreamProtos.BLEMessageProto.BLEMessage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
diff --git a/service/src/com/android/car/trust/BLEMessageV1Factory.java b/service/src/com/android/car/trust/BLEMessageV1Factory.java
index c0b11d4..42acafd 100644
--- a/service/src/com/android/car/trust/BLEMessageV1Factory.java
+++ b/service/src/com/android/car/trust/BLEMessageV1Factory.java
@@ -18,9 +18,9 @@
import android.util.Log;
-import com.android.car.trust.BLEStream.BLEMessage;
-import com.android.car.trust.BLEStream.BLEMessage.OperationType;
-import com.android.car.trust.protobuf.ByteString;
+import com.android.car.BLEStreamProtos.BLEMessageProto.BLEMessage;
+import com.android.car.BLEStreamProtos.BLEOperationProto.OperationType;
+import com.android.car.protobuf.ByteString;
import java.util.ArrayList;
import java.util.Arrays;
diff --git a/service/src/com/android/car/trust/BleManager.java b/service/src/com/android/car/trust/BleManager.java
index 61e1be6..fd319d6 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) {
diff --git a/service/src/com/android/car/trust/CarTrustAgentBleManager.java b/service/src/com/android/car/trust/CarTrustAgentBleManager.java
index c47f527..f42c1e4 100644
--- a/service/src/com/android/car/trust/CarTrustAgentBleManager.java
+++ b/service/src/com/android/car/trust/CarTrustAgentBleManager.java
@@ -30,11 +30,11 @@
import androidx.annotation.Nullable;
+import com.android.car.BLEStreamProtos.BLEMessageProto.BLEMessage;
+import com.android.car.BLEStreamProtos.BLEOperationProto.OperationType;
import com.android.car.CarLocalServices;
import com.android.car.R;
import com.android.car.Utils;
-import com.android.car.trust.BLEStream.BLEMessage;
-import com.android.car.trust.BLEStream.BLEMessage.OperationType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -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 39ec796..812cb63 100644
--- a/service/src/com/android/car/trust/CarTrustAgentEnrollmentService.java
+++ b/service/src/com/android/car/trust/CarTrustAgentEnrollmentService.java
@@ -40,9 +40,9 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import com.android.car.BLEStreamProtos.BLEOperationProto.OperationType;
import com.android.car.R;
import com.android.car.Utils;
-import com.android.car.trust.BLEStream.BLEMessage.OperationType;
import com.android.internal.annotations.GuardedBy;
import java.io.PrintWriter;
@@ -457,6 +457,7 @@
Log.e(TAG, "onAdvertiseSuccess dispatch failed", e);
}
}
+ mCarTrustAgentBleManager.stopEnrollmentAdvertising();
}
void onRemoteDeviceDisconnected(BluetoothDevice device) {
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/AndroidManifest.xml b/tests/CarDeveloperOptions/AndroidManifest.xml
index 9e46603..f434e1f 100644
--- a/tests/CarDeveloperOptions/AndroidManifest.xml
+++ b/tests/CarDeveloperOptions/AndroidManifest.xml
@@ -179,6 +179,23 @@
<activity android:name=".development.AppPicker"
android:label="@string/select_application"
android:theme="@android:style/Theme.DeviceDefault.Light.Dialog" />
- <!-- This is the longest AndroidManifest.xml ever. -->
+
+ <!-- For CtsVerifier use. -->
+ <activity
+ android:name="Settings$TrustedCredentialsSettingsActivity"
+ android:label="@string/trusted_credentials"
+ android:icon="@drawable/ic_settings_security"
+ android:parentActivityName="Settings">
+ <intent-filter android:priority="1">
+ <action android:name="com.android.settings.TRUSTED_CREDENTIALS" />
+ <action android:name="com.android.settings.TRUSTED_CREDENTIALS_USER" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+ <meta-data android:name="com.android.car.developeroptions.FRAGMENT_CLASS"
+ android:value="com.android.car.developeroptions.TrustedCredentialsSettings" />
+ <meta-data android:name="com.android.car.developeroptions.PRIMARY_PROFILE_CONTROLLED"
+ android:value="true" />
+ </activity>
+
</application>
</manifest>
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/core/gateway/SettingsGateway.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/core/gateway/SettingsGateway.java
index d92eaed..4e95b75 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/core/gateway/SettingsGateway.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/core/gateway/SettingsGateway.java
@@ -16,6 +16,7 @@
package com.android.car.developeroptions.core.gateway;
+import com.android.car.developeroptions.TrustedCredentialsSettings;
import com.android.car.developeroptions.development.DevelopmentSettingsDashboardFragment;
public class SettingsGateway {
@@ -26,6 +27,7 @@
*/
public static final String[] ENTRY_FRAGMENTS = {
DevelopmentSettingsDashboardFragment.class.getName(),
+ TrustedCredentialsSettings.class.getName()
};
public static final String[] SETTINGS_FOR_RESTRICTED = {
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/connectivity_fragment.xml b/tests/EmbeddedKitchenSinkApp/res/layout/connectivity_fragment.xml
index dc2d01a..9c48f66 100644
--- a/tests/EmbeddedKitchenSinkApp/res/layout/connectivity_fragment.xml
+++ b/tests/EmbeddedKitchenSinkApp/res/layout/connectivity_fragment.xml
@@ -179,4 +179,35 @@
</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"/>
+ </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/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/connectivity/ConnectivityFragment.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/connectivity/ConnectivityFragment.java
index 31b83cc..6ffa265 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,41 @@
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());
+
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);
+ }
+
@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/CarUxRestrictionsManagerServiceTest.java b/tests/carservice_test/src/com/android/car/CarUxRestrictionsManagerServiceTest.java
index ee08226..aadb6f9 100644
--- a/tests/carservice_test/src/com/android/car/CarUxRestrictionsManagerServiceTest.java
+++ b/tests/carservice_test/src/com/android/car/CarUxRestrictionsManagerServiceTest.java
@@ -28,12 +28,14 @@
import static org.mockito.Mockito.when;
import android.car.drivingstate.CarDrivingStateEvent;
+import android.car.drivingstate.CarUxRestrictions;
import android.car.drivingstate.CarUxRestrictionsConfiguration;
import android.car.drivingstate.CarUxRestrictionsConfiguration.Builder;
import android.car.hardware.CarPropertyValue;
import android.content.Context;
import android.content.res.Resources;
import android.hardware.automotive.vehicle.V2_0.VehicleProperty;
+import android.os.SystemClock;
import android.util.JsonReader;
import android.util.JsonWriter;
@@ -206,6 +208,18 @@
createEmptyConfig((byte) 0), createEmptyConfig((byte) 0)));
}
+ @Test
+ public void testGetCurrentUxRestrictions_UnknownDisplayId_ReturnsFullRestrictions()
+ throws Exception {
+ mService.init();
+ CarUxRestrictions restrictions = mService.getCurrentUxRestrictions(/* displayId= */ 10);
+ CarUxRestrictions expected = new CarUxRestrictions.Builder(
+ /*reqOpt= */ true,
+ CarUxRestrictions.UX_RESTRICTIONS_FULLY_RESTRICTED,
+ SystemClock.elapsedRealtimeNanos()).build();
+ assertTrue(restrictions.toString(), expected.isSameRestrictions(restrictions));
+ }
+
private CarUxRestrictionsConfiguration createEmptyConfig() {
return createEmptyConfig(null);
}
diff --git a/tests/carservice_test/src/com/android/car/MockedVmsTestBase.java b/tests/carservice_test/src/com/android/car/MockedVmsTestBase.java
index c4a8fbf..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;
@@ -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,
diff --git a/tests/carservice_test/src/com/android/car/audio/AudioFocusTest.java b/tests/carservice_test/src/com/android/car/audio/AudioFocusTest.java
new file mode 100644
index 0000000..ff4c517
--- /dev/null
+++ b/tests/carservice_test/src/com/android/car/audio/AudioFocusTest.java
@@ -0,0 +1,488 @@
+/*
+ * 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.audio;
+
+import static org.junit.Assert.assertEquals;
+
+import android.media.AudioAttributes;
+import android.media.AudioFocusRequest;
+import android.media.AudioManager;
+
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+public class AudioFocusTest {
+
+ private static final String TAG = "AudioFocusTest";
+
+ private static final int TEST_TIMING_TOLERANCE_MS = 100;
+
+ // ContextNumber.INVALID
+ private static final AudioAttributes ATTR_VIRTUAL_SOURCE = new AudioAttributes.Builder()
+ .setUsage(AudioAttributes.USAGE_VIRTUAL_SOURCE)
+ .setContentType(AudioAttributes.USAGE_VIRTUAL_SOURCE)
+ .build();
+ // ContextNumber.MUSIC
+ private static final AudioAttributes ATTR_MEDIA = new AudioAttributes.Builder()
+ .setUsage(AudioAttributes.USAGE_MEDIA)
+ .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
+ .build();
+ // ContextNumber.NAVIGATION
+ private static final AudioAttributes ATTR_DRIVE_DIR = new AudioAttributes.Builder()
+ .setUsage(AudioAttributes.USAGE_ASSISTANCE_NAVIGATION_GUIDANCE)
+ .setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
+ .build();
+ // ContextNumber.VOICE_COMMAND
+ private static final AudioAttributes ATTR_A11Y = new AudioAttributes.Builder()
+ .setUsage(AudioAttributes.USAGE_ASSISTANCE_ACCESSIBILITY)
+ .setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
+ .build();
+ // ContextNumber.CALL_RING
+ private static final AudioAttributes ATTR_RINGTONE = new AudioAttributes.Builder()
+ .setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE)
+ .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
+ .build();
+ // ContextNumber.CALL
+ private static final AudioAttributes ATTR_VOICE_COM = new AudioAttributes.Builder()
+ .setUsage(AudioAttributes.USAGE_VOICE_COMMUNICATION)
+ .setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
+ .build();
+ // ContextNumber.ALARM
+ private static final AudioAttributes ATTR_ALARM = new AudioAttributes.Builder()
+ .setUsage(AudioAttributes.USAGE_ALARM)
+ .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
+ .build();
+ // ContextNumber.NOTIFICATION
+ private static final AudioAttributes ATTR_NOTIFICATION = new AudioAttributes.Builder()
+ .setUsage(AudioAttributes.USAGE_NOTIFICATION)
+ .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
+ .build();
+ // ContextNumber.SYSTEM_SOUND
+ private static final AudioAttributes ATTR_A11Y_NOTIFICATION = new AudioAttributes.Builder()
+ .setUsage(AudioAttributes.USAGE_ASSISTANCE_SONIFICATION)
+ .setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
+ .build();
+
+ private AudioManager mAudioManager;
+
+ @Before
+ public void setUp() {
+ mAudioManager = new AudioManager(ApplicationProvider.getApplicationContext());
+ }
+
+ @Test
+ public void individualAttributeFocusRequest_focusRequestGranted() throws Exception {
+ // Make sure each usage is able to request and release audio focus individually
+ requestAndLoseFocusForAttribute(ATTR_VIRTUAL_SOURCE);
+ requestAndLoseFocusForAttribute(ATTR_MEDIA);
+ requestAndLoseFocusForAttribute(ATTR_DRIVE_DIR);
+ requestAndLoseFocusForAttribute(ATTR_A11Y);
+ requestAndLoseFocusForAttribute(ATTR_RINGTONE);
+ requestAndLoseFocusForAttribute(ATTR_VOICE_COM);
+ requestAndLoseFocusForAttribute(ATTR_ALARM);
+ requestAndLoseFocusForAttribute(ATTR_NOTIFICATION);
+ requestAndLoseFocusForAttribute(ATTR_A11Y_NOTIFICATION);
+ }
+
+ @Test
+ public void exclusiveInteractionsForFocusGain_requestGrantedAndFocusLossSent()
+ throws Exception {
+ // For each interaction the focus request is granted and on the second request
+ // focus lost is dispatched to the first focus listener
+
+ // Test Exclusive interactions with audio focus gain request without pause
+ // instead of ducking
+ testExclusiveInteractions(AudioManager.AUDIOFOCUS_GAIN, false);
+ // Test Exclusive interactions with audio focus gain request with pause instead of ducking
+ testExclusiveInteractions(AudioManager.AUDIOFOCUS_GAIN, true);
+ }
+
+ @Test
+ public void exclusiveInteractionsTransient_requestGrantedAndFocusLossSent()
+ throws Exception {
+ // For each interaction the focus request is granted and on the second request
+ // focus lost transient is dispatched to the first focus listener
+
+ // Test Exclusive interactions with audio focus gain transient request
+ // without pause instead of ducking
+ testExclusiveInteractions(AudioManager.AUDIOFOCUS_GAIN_TRANSIENT, false);
+ // Test Exclusive interactions with audio focus gain transient request
+ // with pause instead of ducking
+ testExclusiveInteractions(AudioManager.AUDIOFOCUS_GAIN_TRANSIENT, true);
+ }
+
+ @Test
+ public void exclusiveInteractionsTransientMayDuck_requestGrantedAndFocusLossSent()
+ throws Exception {
+ // For each interaction the focus request is granted and on the second request
+ // focus lost transient is dispatched to the first focus listener
+
+ // Test exclusive interactions with audio focus transient may duck focus request
+ // without pause instead of ducking
+ testExclusiveInteractions(AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK,
+ false);
+ // Test exclusive interactions with audio focus transient may duck focus request
+ // with pause instead of ducking
+ testExclusiveInteractions(AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK,
+ true);
+ }
+
+ @Test
+ public void rejectedInteractions_focusRequestRejected() throws Exception {
+ // Test different paired interaction between different usages
+ // for each interaction pair the first focus request will be granted but the second
+ // will be rejected
+ int interaction = CarAudioFocus.INTERACTION_REJECT;
+ int gain = AudioManager.AUDIOFOCUS_GAIN;
+ testInteraction(ATTR_VIRTUAL_SOURCE, ATTR_VIRTUAL_SOURCE, interaction, gain, false);
+ testInteraction(ATTR_VIRTUAL_SOURCE, ATTR_MEDIA, interaction, gain, false);
+ testInteraction(ATTR_VIRTUAL_SOURCE, ATTR_DRIVE_DIR, interaction, gain, false);
+ testInteraction(ATTR_VIRTUAL_SOURCE, ATTR_A11Y, interaction, gain, false);
+ testInteraction(ATTR_VIRTUAL_SOURCE, ATTR_RINGTONE, interaction, gain, false);
+ testInteraction(ATTR_VIRTUAL_SOURCE, ATTR_VOICE_COM, interaction, gain, false);
+ testInteraction(ATTR_VIRTUAL_SOURCE, ATTR_ALARM, interaction, gain, false);
+ testInteraction(ATTR_VIRTUAL_SOURCE, ATTR_NOTIFICATION, interaction, gain, false);
+ testInteraction(ATTR_VIRTUAL_SOURCE, ATTR_A11Y_NOTIFICATION, interaction, gain, false);
+
+ testInteraction(ATTR_MEDIA, ATTR_VIRTUAL_SOURCE, interaction, gain, false);
+
+ testInteraction(ATTR_DRIVE_DIR, ATTR_VIRTUAL_SOURCE, interaction, gain, false);
+
+ testInteraction(ATTR_A11Y, ATTR_VIRTUAL_SOURCE, interaction, gain, false);
+ testInteraction(ATTR_A11Y, ATTR_DRIVE_DIR, interaction, gain, false);
+ testInteraction(ATTR_A11Y, ATTR_NOTIFICATION, interaction, gain, false);
+ testInteraction(ATTR_A11Y, ATTR_A11Y_NOTIFICATION, interaction, gain, false);
+
+ testInteraction(ATTR_RINGTONE, ATTR_VIRTUAL_SOURCE, interaction, gain, false);
+ testInteraction(ATTR_RINGTONE, ATTR_MEDIA, interaction, gain, false);
+ testInteraction(ATTR_RINGTONE, ATTR_ALARM, interaction, gain, false);
+ testInteraction(ATTR_RINGTONE, ATTR_NOTIFICATION, interaction, gain, false);
+
+ testInteraction(ATTR_VOICE_COM, ATTR_VIRTUAL_SOURCE, interaction, gain, false);
+ testInteraction(ATTR_VOICE_COM, ATTR_MEDIA, interaction, gain, false);
+ testInteraction(ATTR_VOICE_COM, ATTR_A11Y, interaction, gain, false);
+
+ testInteraction(ATTR_ALARM, ATTR_VIRTUAL_SOURCE, interaction, gain, false);
+
+ testInteraction(ATTR_NOTIFICATION, ATTR_VIRTUAL_SOURCE, interaction, gain, false);
+
+ testInteraction(ATTR_A11Y_NOTIFICATION, ATTR_VIRTUAL_SOURCE, interaction, gain, false);
+ }
+
+ @Test
+ public void concurrentInteractionsFocusGain_requestGrantedAndFocusLossSent() throws Exception {
+ // Test concurrent interactions i.e. interactions that can
+ // potentially gain focus at the same time.
+ // For this test permanent focus gain is requested by two usages.
+ // The focus request will be granted for both and on the second focus request focus
+ // lost will dispatched to the first focus listener listener.
+ testConcurrentInteractions(AudioManager.AUDIOFOCUS_GAIN, false);
+ }
+
+ @Test
+ public void concurrentInteractionsTransientGain_requestGrantedAndFocusLossTransientSent()
+ throws Exception {
+ // Test concurrent interactions i.e. interactions that can
+ // potentially gain focus at the same time.
+ // For this test permanent focus gain is requested by first usage and focus gain transient
+ // is requested by second usage.
+ // The focus request will be granted for both and on the second focus request focus
+ // lost transient will dispatched to the first focus listener listener.
+ testConcurrentInteractions(AudioManager.AUDIOFOCUS_GAIN_TRANSIENT, false);
+ // Repeat the test this time with pause for ducking on first listener
+ testConcurrentInteractions(AudioManager.AUDIOFOCUS_GAIN_TRANSIENT, true);
+ }
+
+ @Test
+ public void concurrentInteractionsTransientGainMayDuck_requestGrantedAndNoFocusLossSent()
+ throws Exception {
+ // Test concurrent interactions i.e. interactions that can
+ // potentially gain focus at the same time.
+ // For this test permanent focus gain is requested by first usage and focus gain transient
+ // may duck is requested by second usage.
+ // The focus request will be granted for both but no focus lost is sent to the first focus
+ // listener, as each usage actually has shared focus and should play at the same time.
+ testConcurrentInteractions(AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK, false);
+ // Test the same behaviour but this time with pause for ducking on the first focus listener
+ testConcurrentInteractions(AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK, true);
+ }
+
+ private void testConcurrentInteractions(int gain, boolean pauseForDucking)
+ throws Exception {
+ // Test paired concurrent interactions i.e. interactions that can
+ // potentially gain focus at the same time.
+ int interaction = CarAudioFocus.INTERACTION_CONCURRENT;
+ testInteraction(ATTR_MEDIA, ATTR_DRIVE_DIR, interaction, gain, pauseForDucking);
+ testInteraction(ATTR_MEDIA, ATTR_NOTIFICATION, interaction, gain, pauseForDucking);
+ testInteraction(ATTR_MEDIA, ATTR_A11Y_NOTIFICATION, interaction, gain, pauseForDucking);
+
+ testInteraction(ATTR_DRIVE_DIR, ATTR_MEDIA, interaction, gain, pauseForDucking);
+ testInteraction(ATTR_DRIVE_DIR, ATTR_DRIVE_DIR, interaction, gain, pauseForDucking);
+ testInteraction(ATTR_DRIVE_DIR, ATTR_RINGTONE, interaction, gain, pauseForDucking);
+ testInteraction(ATTR_DRIVE_DIR, ATTR_ALARM, interaction, gain, pauseForDucking);
+ testInteraction(ATTR_DRIVE_DIR, ATTR_NOTIFICATION, interaction, gain, pauseForDucking);
+ testInteraction(ATTR_DRIVE_DIR, ATTR_A11Y_NOTIFICATION, interaction, gain, pauseForDucking);
+
+ testInteraction(ATTR_A11Y, ATTR_MEDIA, interaction, gain, pauseForDucking);
+ testInteraction(ATTR_A11Y, ATTR_A11Y, interaction, gain, pauseForDucking);
+
+ testInteraction(ATTR_RINGTONE, ATTR_DRIVE_DIR, interaction, gain, pauseForDucking);
+ testInteraction(ATTR_RINGTONE, ATTR_A11Y, interaction, gain, pauseForDucking);
+ testInteraction(ATTR_RINGTONE, ATTR_RINGTONE, interaction, gain, pauseForDucking);
+ testInteraction(ATTR_RINGTONE, ATTR_VOICE_COM, interaction, gain, pauseForDucking);
+
+ testInteraction(ATTR_VOICE_COM, ATTR_DRIVE_DIR, interaction, gain, pauseForDucking);
+ testInteraction(ATTR_VOICE_COM, ATTR_RINGTONE, interaction, gain, pauseForDucking);
+ testInteraction(ATTR_VOICE_COM, ATTR_VOICE_COM, interaction, gain, pauseForDucking);
+ testInteraction(ATTR_VOICE_COM, ATTR_ALARM, interaction, gain, pauseForDucking);
+ testInteraction(ATTR_VOICE_COM, ATTR_NOTIFICATION, interaction, gain, pauseForDucking);
+
+ testInteraction(ATTR_ALARM, ATTR_MEDIA, interaction, gain, pauseForDucking);
+ testInteraction(ATTR_ALARM, ATTR_DRIVE_DIR, interaction, gain, pauseForDucking);
+ testInteraction(ATTR_ALARM, ATTR_ALARM, interaction, gain, pauseForDucking);
+ testInteraction(ATTR_ALARM, ATTR_NOTIFICATION, interaction, gain, pauseForDucking);
+ testInteraction(ATTR_ALARM, ATTR_A11Y_NOTIFICATION, interaction, gain, pauseForDucking);
+
+ testInteraction(ATTR_NOTIFICATION, ATTR_MEDIA, interaction, gain, pauseForDucking);
+ testInteraction(ATTR_NOTIFICATION, ATTR_DRIVE_DIR, interaction, gain, pauseForDucking);
+ testInteraction(ATTR_NOTIFICATION, ATTR_ALARM, interaction, gain, pauseForDucking);
+ testInteraction(ATTR_NOTIFICATION, ATTR_NOTIFICATION, interaction, gain, pauseForDucking);
+ testInteraction(ATTR_NOTIFICATION, ATTR_A11Y_NOTIFICATION, interaction, gain,
+ pauseForDucking);
+
+
+ testInteraction(ATTR_A11Y_NOTIFICATION, ATTR_MEDIA, interaction, gain, pauseForDucking);
+ testInteraction(ATTR_A11Y_NOTIFICATION, ATTR_DRIVE_DIR, interaction, gain, pauseForDucking);
+ testInteraction(ATTR_A11Y_NOTIFICATION, ATTR_ALARM, interaction, gain, pauseForDucking);
+ testInteraction(ATTR_A11Y_NOTIFICATION, ATTR_NOTIFICATION, interaction, gain,
+ pauseForDucking);
+ testInteraction(ATTR_A11Y_NOTIFICATION, ATTR_A11Y_NOTIFICATION, interaction, gain,
+ pauseForDucking);
+ }
+
+ private void testExclusiveInteractions(int gain, boolean pauseForDucking)
+ throws Exception {
+
+ // Test exclusive interaction, interaction where each usage will not share focus with other
+ // another usage. As a result once focus is gained any current focus listener
+ // in this interaction will lose focus.
+ int interaction = CarAudioFocus.INTERACTION_EXCLUSIVE;
+ testInteraction(ATTR_MEDIA, ATTR_MEDIA, interaction, gain, pauseForDucking);
+ testInteraction(ATTR_MEDIA, ATTR_A11Y, interaction, gain, pauseForDucking);
+ testInteraction(ATTR_MEDIA, ATTR_RINGTONE, interaction, gain, pauseForDucking);
+ testInteraction(ATTR_MEDIA, ATTR_VOICE_COM, interaction, gain, pauseForDucking);
+ testInteraction(ATTR_MEDIA, ATTR_ALARM, interaction, gain, pauseForDucking);
+
+ testInteraction(ATTR_DRIVE_DIR, ATTR_A11Y, interaction, gain, pauseForDucking);
+ testInteraction(ATTR_DRIVE_DIR, ATTR_VOICE_COM, interaction, gain, pauseForDucking);
+
+ testInteraction(ATTR_A11Y, ATTR_RINGTONE, interaction, gain, pauseForDucking);
+ testInteraction(ATTR_A11Y, ATTR_VOICE_COM, interaction, gain, pauseForDucking);
+
+ testInteraction(ATTR_ALARM, ATTR_A11Y, interaction, gain, pauseForDucking);
+ testInteraction(ATTR_ALARM, ATTR_RINGTONE, interaction, gain, pauseForDucking);
+ testInteraction(ATTR_ALARM, ATTR_VOICE_COM, interaction, gain, pauseForDucking);
+
+ testInteraction(ATTR_NOTIFICATION, ATTR_A11Y, interaction, gain, pauseForDucking);
+ testInteraction(ATTR_NOTIFICATION, ATTR_RINGTONE, interaction, gain, pauseForDucking);
+ testInteraction(ATTR_NOTIFICATION, ATTR_VOICE_COM, interaction, gain, pauseForDucking);
+
+ testInteraction(ATTR_A11Y_NOTIFICATION, ATTR_A11Y, interaction, gain, pauseForDucking);
+ testInteraction(ATTR_A11Y_NOTIFICATION, ATTR_RINGTONE, interaction, gain, pauseForDucking);
+ testInteraction(ATTR_A11Y_NOTIFICATION, ATTR_VOICE_COM, interaction, gain, pauseForDucking);
+ }
+
+
+ /**
+ * Test paired usage interactions with gainType and pause instead ducking
+ * @param attributes1 Attributes of the first usage (first focus requester) in the interaction
+ * @param attributes2 Attributes of the second usage (second focus requester) in the interaction
+ * @param interaction type of interaction {@link CarAudioFocus.INTERACTION_REJECT},
+ * {@link CarAudioFocus.INTERACTION_EXCLUSIVE}, {@link CarAudioFocus.INTERACTION_CONCURRENT}
+ * @param gainType Type of gain {@link AudioManager.AUDIOFOCUS_GAIN} ,
+ * {@link CarAudioFocus.AUDIOFOCUS_GAIN_TRANSIENT},
+ * {@link CarAudioFocus.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK}
+ * @param pauseForDucking flag to indicate if the first focus listener should pause
+ * instead of ducking
+ * @throws Exception
+ */
+ private void testInteraction(AudioAttributes attributes1,
+ AudioAttributes attributes2,
+ int interaction,
+ int gainType,
+ boolean pauseForDucking) throws Exception {
+
+ final FocusChangeListener focusChangeListener1 = new FocusChangeListener();
+ final AudioFocusRequest audioFocusRequest1 = new AudioFocusRequest
+ .Builder(AudioManager.AUDIOFOCUS_GAIN)
+ .setAudioAttributes(attributes1)
+ .setOnAudioFocusChangeListener(focusChangeListener1)
+ .setForceDucking(false)
+ .setWillPauseWhenDucked(pauseForDucking)
+ .build();
+
+ final FocusChangeListener focusChangeListener2 = new FocusChangeListener();
+ final AudioFocusRequest audioFocusRequest2 = new AudioFocusRequest
+ .Builder(gainType)
+ .setAudioAttributes(attributes2)
+ .setOnAudioFocusChangeListener(focusChangeListener2)
+ .setForceDucking(false)
+ .build();
+
+ int expectedLoss = 0;
+
+ // Each focus gain type will return a different focus lost type
+ switch (gainType) {
+ case AudioManager.AUDIOFOCUS_GAIN:
+ expectedLoss = AudioManager.AUDIOFOCUS_LOSS;
+ break;
+ case AudioManager.AUDIOFOCUS_GAIN_TRANSIENT:
+ expectedLoss = AudioManager.AUDIOFOCUS_LOSS_TRANSIENT;
+ break;
+ case AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK:
+ expectedLoss = AudioManager.AUDIOFOCUS_LOSS_TRANSIENT;
+ // Note loss or gain will not be sent as both can live concurrently
+ if (interaction == CarAudioFocus.INTERACTION_CONCURRENT && !pauseForDucking) {
+ expectedLoss = AudioManager.AUDIOFOCUS_NONE;
+ }
+ break;
+ }
+
+ int secondRequestResultsExpected = AudioManager.AUDIOFOCUS_REQUEST_GRANTED;
+
+ if (interaction == CarAudioFocus.INTERACTION_REJECT) {
+ secondRequestResultsExpected = AudioManager.AUDIOFOCUS_REQUEST_FAILED;
+ }
+
+ int requestResult = mAudioManager.requestAudioFocus(audioFocusRequest1);
+ String message = "Focus gain request failed for 1st "
+ + AudioAttributes.usageToString(attributes1.getUsage());
+ assertEquals(message, AudioManager.AUDIOFOCUS_REQUEST_GRANTED, requestResult);
+
+
+ requestResult = mAudioManager.requestAudioFocus(audioFocusRequest2);
+ message = "Focus gain request failed for 2nd "
+ + AudioAttributes.usageToString(attributes2.getUsage());
+ assertEquals(message, secondRequestResultsExpected, requestResult);
+
+ // If the results is rejected for second one we only have to clean up first
+ // as the second focus request is rejected
+ if (interaction == CarAudioFocus.INTERACTION_REJECT) {
+ requestResult = mAudioManager.abandonAudioFocusRequest(audioFocusRequest1);
+ message = "Focus loss request failed for 1st "
+ + AudioAttributes.usageToString(attributes1.getUsage());
+ assertEquals(message, AudioManager.AUDIOFOCUS_REQUEST_GRANTED, requestResult);
+ }
+
+ // If exclusive we expect to lose focus on 1st one
+ // unless we have a concurrent interaction
+ if (interaction == CarAudioFocus.INTERACTION_EXCLUSIVE
+ || interaction == CarAudioFocus.INTERACTION_CONCURRENT) {
+ Thread.sleep(TEST_TIMING_TOLERANCE_MS);
+ message = "Focus change was not dispatched for 1st "
+ + AudioAttributes.usageToString(ATTR_MEDIA.getUsage());
+ assertEquals(message, expectedLoss,
+ focusChangeListener1.getFocusChangeAndReset());
+
+ requestResult = mAudioManager.abandonAudioFocusRequest(audioFocusRequest2);
+ message = "Focus loss request failed for 2nd "
+ + AudioAttributes.usageToString(ATTR_MEDIA.getUsage());
+ assertEquals(message, AudioManager.AUDIOFOCUS_REQUEST_GRANTED, requestResult);
+
+ // If the loss was transient then we should have received back on 1st
+ if ((gainType == AudioManager.AUDIOFOCUS_GAIN_TRANSIENT
+ || gainType == AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK)) {
+
+ // Since ducking and concurrent can exist together
+ // this needs to be skipped as the focus lost is not sent
+ if (!(interaction == CarAudioFocus.INTERACTION_CONCURRENT
+ && gainType == AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK)) {
+ Thread.sleep(TEST_TIMING_TOLERANCE_MS);
+ message = "Focus change was not dispatched for 1st "
+ + AudioAttributes.usageToString(ATTR_MEDIA.getUsage());
+ assertEquals(message, AudioManager.AUDIOFOCUS_GAIN,
+ focusChangeListener1.getFocusChangeAndReset());
+ }
+ // For concurrent focus interactions still needs to be released
+ message = "Focus loss request failed for 1st "
+ + AudioAttributes.usageToString(attributes1.getUsage());
+ requestResult = mAudioManager.abandonAudioFocusRequest(audioFocusRequest1);
+ assertEquals(message, AudioManager.AUDIOFOCUS_REQUEST_GRANTED,
+ requestResult);
+ }
+ }
+ }
+
+ /**
+ * Verifies usage can request audio focus and release it
+ * @param attribute usage attribute to request focus
+ * @throws Exception
+ */
+ private void requestAndLoseFocusForAttribute(AudioAttributes attribute) throws Exception {
+ final FocusChangeListener focusChangeListener = new FocusChangeListener();
+ final AudioFocusRequest audioFocusRequest = new AudioFocusRequest
+ .Builder(AudioManager.AUDIOFOCUS_GAIN)
+ .setAudioAttributes(attribute)
+ .setOnAudioFocusChangeListener(focusChangeListener)
+ .setForceDucking(false)
+ .build();
+
+
+ int requestResult = mAudioManager.requestAudioFocus(audioFocusRequest);
+ String message = "Focus gain request failed for "
+ + AudioAttributes.usageToString(attribute.getUsage());
+ assertEquals(message, AudioManager.AUDIOFOCUS_REQUEST_GRANTED, requestResult);
+
+ Thread.sleep(TEST_TIMING_TOLERANCE_MS);
+ // Verify no focus changed dispatched
+ message = "Focus change was dispatched for "
+ + AudioAttributes.usageToString(attribute.getUsage());
+ assertEquals(message, AudioManager.AUDIOFOCUS_NONE,
+ focusChangeListener.getFocusChangeAndReset());
+
+ requestResult = mAudioManager.abandonAudioFocusRequest(audioFocusRequest);
+ message = "Focus loss request failed for "
+ + AudioAttributes.usageToString(attribute.getUsage());
+ assertEquals(message, AudioManager.AUDIOFOCUS_REQUEST_GRANTED, requestResult);
+ }
+
+ private static class FocusChangeListener implements AudioManager.OnAudioFocusChangeListener {
+ private final Object mLock = new Object();
+ private int mFocusChange = AudioManager.AUDIOFOCUS_NONE;
+
+ int getFocusChangeAndReset() {
+ final int change;
+ synchronized (mLock) {
+ change = mFocusChange;
+ mFocusChange = AudioManager.AUDIOFOCUS_NONE;
+ }
+ return change;
+ }
+
+ @Override
+ public void onAudioFocusChange(int focusChange) {
+ synchronized (mLock) {
+ mFocusChange = focusChange;
+ }
+ }
+ }
+}
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;