aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2024-03-13 20:35:36 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2024-03-13 20:35:36 +0000
commit3e67dea8346af809fdfa24fc1aaeb50ebe8f65f0 (patch)
tree5733ccff81a4563fd16688885f54d0abbbd966cf
parent3550c64e53f527275e0be5edfd787927c6d95520 (diff)
parent04afe329deac6ce8bf2b0a8b23e793ff704f5f91 (diff)
downloadtests-mirror-car-apps-aosp-release.tar.gz
Snap for 11566466 from 04afe329deac6ce8bf2b0a8b23e793ff704f5f91 to car-apps-aosp-releaseub-automotive-master-20240314mirror-car-apps-aosp-release
Change-Id: I86cd5fe02fab26a2e1ababad53189f0f93b4ab6b
-rw-r--r--RotaryIME/Android.bp1
-rw-r--r--RotaryPlayground/Android.bp1
-rw-r--r--TestMediaApp/automotive/src/main/AndroidManifest.xml8
-rw-r--r--TestMediaApp/common/res/layout/analytics_view.xml38
-rw-r--r--TestMediaApp/common/res/values/strings.xml2
-rw-r--r--TestMediaApp/common/src/com/android/car/media/testmediaapp/TmaBrowser.java52
-rw-r--r--TestMediaApp/common/src/com/android/car/media/testmediaapp/analytics/AnalyticsHandler.java (renamed from TestMediaApp/common/src/com/android/car/media/testmediaapp/analytics/TmaAnalyticsBroadcastReceiver.java)93
-rw-r--r--TestMediaApp/common/src/com/android/car/media/testmediaapp/loader/TmaMetaDataKeys.java2
-rw-r--r--TestMediaApp/common/src/com/android/car/media/testmediaapp/prefs/TmaEnumPrefs.java1
-rw-r--r--TestMediaApp/common/src/com/android/car/media/testmediaapp/prefs/TmaPrefsFragment.java91
-rw-r--r--TestMediaApp/mobile/src/main/AndroidManifest.xml7
11 files changed, 69 insertions, 227 deletions
diff --git a/RotaryIME/Android.bp b/RotaryIME/Android.bp
index 6eac5b8..68c48c3 100644
--- a/RotaryIME/Android.bp
+++ b/RotaryIME/Android.bp
@@ -28,6 +28,7 @@ android_app {
resource_dirs: ["res"],
sdk_version: "system_current",
+ min_sdk_version: "28",
static_libs: [
"car-ui-lib",
diff --git a/RotaryPlayground/Android.bp b/RotaryPlayground/Android.bp
index eb181f3..9122405 100644
--- a/RotaryPlayground/Android.bp
+++ b/RotaryPlayground/Android.bp
@@ -28,6 +28,7 @@ android_app {
resource_dirs: ["res"],
sdk_version: "system_current",
+ min_sdk_version: "28",
static_libs: [
"car-ui-lib",
diff --git a/TestMediaApp/automotive/src/main/AndroidManifest.xml b/TestMediaApp/automotive/src/main/AndroidManifest.xml
index e0eb4ec..826beb3 100644
--- a/TestMediaApp/automotive/src/main/AndroidManifest.xml
+++ b/TestMediaApp/automotive/src/main/AndroidManifest.xml
@@ -121,14 +121,6 @@
</intent-filter>
</receiver>
- <receiver
- android:name="com.android.car.media.testmediaapp.analytics.TmaAnalyticsBroadcastReceiver"
- android:exported="true">
- <intent-filter>
- <action android:name="androidx.car.app.media.mediaextensions.analytics.action" />
- </intent-filter>
- </receiver>
-
</application>
</manifest>
diff --git a/TestMediaApp/common/res/layout/analytics_view.xml b/TestMediaApp/common/res/layout/analytics_view.xml
deleted file mode 100644
index 0f410a7..0000000
--- a/TestMediaApp/common/res/layout/analytics_view.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- ~ Copyright (C) 2023 The Android Open Source Project
- ~
- ~ Licensed under the Apache License, Version 2.0 (the "License");
- ~ you may not use this file except in compliance with the License.
- ~ You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing, software
- ~ distributed under the License is distributed on an "AS IS" BASIS,
- ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ~ See the License for the specific language governing permissions and
- ~ limitations under the License.
- -->
-
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:orientation="vertical"
- android:layout_width="match_parent"
- android:layout_height="300dp"
- android:layout_gravity="center_horizontal">
-
- <TextView
- android:id="@+id/analytics_header"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="Analytics Events:"
- android:layout_gravity="center_horizontal"/>
-
- <ListView
- android:id="@+id/analytics_list"
- android:layout_width="match_parent"
- android:layout_height="300dp"
- android:layout_gravity="center_horizontal"/>
-</LinearLayout> \ No newline at end of file
diff --git a/TestMediaApp/common/res/values/strings.xml b/TestMediaApp/common/res/values/strings.xml
index 21fa2d0..2641f3a 100644
--- a/TestMediaApp/common/res/values/strings.xml
+++ b/TestMediaApp/common/res/values/strings.xml
@@ -82,7 +82,7 @@
<string name="analytics_log_output" translatable="false">Analytics event: %1$s"</string>
<string name="analytics_prefs_output_title" translatable="false">Analytic events:</string>
<string name="analytics_prefs_output" translatable="false">
- %1$s : %2$s ver: %3$d sId: %4$d com: %5$s
+ %1$s : %2$s ver: %3$d com: %4$s
</string>
<string name="analytics_prefs_output_date_format" translatable="false">dd-MM-yyyy hh:mm:ss
</string>
diff --git a/TestMediaApp/common/src/com/android/car/media/testmediaapp/TmaBrowser.java b/TestMediaApp/common/src/com/android/car/media/testmediaapp/TmaBrowser.java
index 3faca47..d3283ab 100644
--- a/TestMediaApp/common/src/com/android/car/media/testmediaapp/TmaBrowser.java
+++ b/TestMediaApp/common/src/com/android/car/media/testmediaapp/TmaBrowser.java
@@ -33,7 +33,6 @@ import static com.android.car.media.testmediaapp.loader.TmaMetaDataKeys.BROWSE_C
import static com.android.car.media.testmediaapp.loader.TmaMetaDataKeys.BROWSE_CUSTOM_ACTIONS_MEDIA_ITEM_ID;
import static com.android.car.media.testmediaapp.loader.TmaMetaDataKeys.BROWSE_CUSTOM_ACTIONS_ROOT_LIST;
import static com.android.car.media.testmediaapp.prefs.TmaEnumPrefs.AnalyticsState.ANALYTICS_ON;
-import static com.android.car.media.testmediaapp.prefs.TmaEnumPrefs.AnalyticsState.LOG;
import static com.android.car.media.testmediaapp.prefs.TmaEnumPrefs.AnalyticsState.SHARE_GOOGLE;
import static com.android.car.media.testmediaapp.prefs.TmaEnumPrefs.AnalyticsState.SHARE_OEM;
import static com.android.car.media.testmediaapp.prefs.TmaEnumPrefs.TmaBrowseNodeType.LEAF_CHILDREN;
@@ -44,7 +43,6 @@ import android.app.PendingIntent;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
-import android.content.res.Resources;
import android.media.AudioManager;
import android.media.MediaDescription;
import android.media.browse.MediaBrowser;
@@ -59,13 +57,13 @@ import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.OptIn;
+import androidx.car.app.mediaextensions.analytics.client.AnalyticsParser;
import androidx.car.app.mediaextensions.analytics.client.RootHintsPopulator;
-import androidx.car.app.mediaextensions.analytics.event.AnalyticsEvent;
import androidx.media.MediaBrowserServiceCompat;
import androidx.media.session.MediaButtonReceiver;
import com.android.car.media.testmediaapp.TmaMediaItem.TmaBrowseAction;
-import com.android.car.media.testmediaapp.analytics.TmaAnalyticsBroadcastReceiver;
+import com.android.car.media.testmediaapp.analytics.AnalyticsHandler;
import com.android.car.media.testmediaapp.loader.TmaLoader;
import com.android.car.media.testmediaapp.prefs.TmaEnumPrefs.TmaAccountType;
import com.android.car.media.testmediaapp.prefs.TmaEnumPrefs.TmaAnalyticsState;
@@ -74,7 +72,6 @@ import com.android.car.media.testmediaapp.prefs.TmaEnumPrefs.TmaReplyDelay;
import com.android.car.media.testmediaapp.prefs.TmaPrefs;
import java.util.ArrayList;
-import java.util.Deque;
import java.util.List;
import java.util.Set;
import java.util.regex.Matcher;
@@ -109,6 +106,7 @@ public class TmaBrowser extends MediaBrowserServiceCompat {
private TmaLibrary mLibrary;
private TmaPlayer mPlayer;
private BrowserRoot mRoot;
+ private AnalyticsHandler mAnalyticsHandler;
public TmaBrowser() {
super();
@@ -119,6 +117,7 @@ public class TmaBrowser extends MediaBrowserServiceCompat {
super.onCreate();
mPrefs = TmaPrefs.getInstance(this);
mHandler = new Handler(getMainLooper());
+ mAnalyticsHandler = new AnalyticsHandler(getApplicationContext());
ComponentName mbrComponent = MediaButtonReceiver.getMediaButtonReceiverComponent(this);
Intent mediaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON);
@@ -146,9 +145,6 @@ public class TmaBrowser extends MediaBrowserServiceCompat {
mPrefs.mAnalyticsState.registerChangeListener(mOnAnalyticsChanged);
updateRootExtras();
-
- TmaAnalyticsBroadcastReceiver.analyticsEventLiveData.observeForever(
- this::handleAnalyticEvents);
}
private void updateRootExtras() {
@@ -160,13 +156,11 @@ public class TmaBrowser extends MediaBrowserServiceCompat {
browserRootExtras.putParcelable(FAVORITES_MEDIA_ITEM, getFavoritesMediaItem());
- RootHintsPopulator pope = new RootHintsPopulator(browserRootExtras);
Set<String> flags = mPrefs.mAnalyticsState.getValue().getFlags();
- pope.setAnalyticsOptIn(flags.contains(ANALYTICS_ON.getId()),
- new ComponentName(getApplicationContext(), TmaAnalyticsBroadcastReceiver.class));
- pope.setPlatformShare(flags.contains(SHARE_GOOGLE.getId()));
- pope.setOemShare(flags.contains(SHARE_OEM.getId()));
- pope.setSessionId(TmaAnalyticsBroadcastReceiver.SESSION_ID);
+ new RootHintsPopulator(browserRootExtras)
+ .setAnalyticsOptIn(flags.contains(ANALYTICS_ON.getId()))
+ .setSharePlatform(flags.contains(SHARE_GOOGLE.getId()))
+ .setShareOem(flags.contains(SHARE_OEM.getId()));
mRoot = new BrowserRoot(ROOT_PATH, browserRootExtras);
updatePlaybackState(mPrefs.mAccountType.getValue());
@@ -426,6 +420,14 @@ public class TmaBrowser extends MediaBrowserServiceCompat {
}
private void handleCustomAction(String action, Bundle extras, Result<Bundle> result) {
+ // Handle analytics.
+ if (AnalyticsParser.isAnalyticsAction(action)) {
+ AnalyticsParser.parseAnalyticsAction(action, extras, mAnalyticsHandler);
+ result.sendResult(null);
+ return;
+ }
+
+ // Handle non-analytics actions.
String mediaId = extras.getString(BROWSE_CUSTOM_ACTIONS_MEDIA_ITEM_ID);
TmaBrowseAction browseAction = getActionById(action);
TmaMediaItem node = mLibrary.getMediaItemById(mediaId);
@@ -525,26 +527,4 @@ public class TmaBrowser extends MediaBrowserServiceCompat {
.send();
}
}
-
- private boolean isAnalyticsEnabled() {
- if (mPrefs == null
- || mPrefs.mAnalyticsState == null
- || mPrefs.mAnalyticsState.getValue() == null) {
- return false;
- }
- return mPrefs.mAnalyticsState.getValue().getFlags().contains(ANALYTICS_ON.getId());
- }
-
- private boolean canLog() {
- return isAnalyticsEnabled() && mPrefs.mAnalyticsState.getValue().getFlags().contains(
- LOG.getId());
- }
-
- private void handleAnalyticEvents(Deque<AnalyticsEvent> analyticsQueue) {
- Resources res = getResources();
- AnalyticsEvent analyticsEvent = analyticsQueue.peekLast();
- if (canLog() && analyticsEvent != null) {
- Log.i(TAG, res.getString(R.string.analytics_log_output, analyticsEvent.toString()));
- }
- }
}
diff --git a/TestMediaApp/common/src/com/android/car/media/testmediaapp/analytics/TmaAnalyticsBroadcastReceiver.java b/TestMediaApp/common/src/com/android/car/media/testmediaapp/analytics/AnalyticsHandler.java
index 19c18b8..cce51f3 100644
--- a/TestMediaApp/common/src/com/android/car/media/testmediaapp/analytics/TmaAnalyticsBroadcastReceiver.java
+++ b/TestMediaApp/common/src/com/android/car/media/testmediaapp/analytics/AnalyticsHandler.java
@@ -17,14 +17,14 @@
package com.android.car.media.testmediaapp.analytics;
import static com.android.car.media.testmediaapp.prefs.TmaEnumPrefs.AnalyticsState.ANALYTICS_ON;
+import static com.android.car.media.testmediaapp.prefs.TmaEnumPrefs.AnalyticsState.LOG;
import android.content.Context;
-import android.content.Intent;
+import android.content.res.Resources;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.OptIn;
-import androidx.car.app.mediaextensions.analytics.client.AnalyticsBroadcastReceiver;
import androidx.car.app.mediaextensions.analytics.client.AnalyticsCallback;
import androidx.car.app.mediaextensions.analytics.event.AnalyticsEvent;
import androidx.car.app.mediaextensions.analytics.event.BrowseChangeEvent;
@@ -32,74 +32,56 @@ import androidx.car.app.mediaextensions.analytics.event.ErrorEvent;
import androidx.car.app.mediaextensions.analytics.event.MediaClickedEvent;
import androidx.car.app.mediaextensions.analytics.event.ViewChangeEvent;
import androidx.car.app.mediaextensions.analytics.event.VisibleItemsEvent;
-import androidx.lifecycle.MutableLiveData;
import com.android.car.media.testmediaapp.prefs.TmaPrefs;
-import java.util.ArrayDeque;
-import java.util.Deque;
+import com.android.car.media.testmediaapp.R;
@OptIn(markerClass = androidx.car.app.annotations2.ExperimentalCarApi.class)
-public class TmaAnalyticsBroadcastReceiver extends AnalyticsBroadcastReceiver {
+public class AnalyticsHandler implements AnalyticsCallback {
- public static final String TAG = TmaAnalyticsBroadcastReceiver.class.getSimpleName();
+ private static final String TAG = AnalyticsHandler.class.getSimpleName();
- public static final int SESSION_ID = 0;
+ private final TmaPrefs mPrefs;
+ private final Resources mResources;
- static AnalyticsCallback callback = new AnalyticsCallback() {
- @Override
- public void onBrowseNodeChangeEvent(@NonNull BrowseChangeEvent event) {
- handleEvent(event);
- }
-
- @Override
- public void onMediaClickedEvent(@NonNull MediaClickedEvent event) {
- handleEvent(event);
- }
-
- @Override
- public void onViewChangeEvent(@NonNull ViewChangeEvent event) {
- handleEvent(event);
- }
-
- @Override
- public void onVisibleItemsEvent(@NonNull VisibleItemsEvent event) {
- handleEvent(event);
- }
+ public AnalyticsHandler(Context context) {
+ mPrefs = TmaPrefs.getInstance(context);
+ mResources = context.getResources();
+ }
- @Override
- public void onErrorEvent(@NonNull ErrorEvent event) {
- handleEvent(event);
- }
- private void handleEvent(@NonNull AnalyticsEvent event) {
- Deque<AnalyticsEvent> queue = analyticsEventLiveData.getValue();
- if (!queue.offer(event)) {
- queue.poll();
- queue.offer(event);
- }
- analyticsEventLiveData.setValue(analyticsEventLiveData.getValue());
- }
- };
+ @Override
+ public void onBrowseNodeChangeEvent(@NonNull BrowseChangeEvent event) {
+ handleEvent(event);
+ }
- //Optionally bounded dequeue. Bounded to 20 here.
- public static final MutableLiveData<Deque<AnalyticsEvent>>
- analyticsEventLiveData = new MutableLiveData<>(new ArrayDeque<>(20));
+ @Override
+ public void onMediaClickedEvent(@NonNull MediaClickedEvent event) {
+ handleEvent(event);
+ }
- private TmaPrefs mPrefs;
+ @Override
+ public void onViewChangeEvent(@NonNull ViewChangeEvent event) {
+ handleEvent(event);
+ }
- public TmaAnalyticsBroadcastReceiver() {
- super(callback);
+ @Override
+ public void onVisibleItemsEvent(@NonNull VisibleItemsEvent event) {
+ handleEvent(event);
}
@Override
- public void onReceive(Context context, Intent intent) {
- super.onReceive(context, intent);
- mPrefs = TmaPrefs.getInstance(context);
+ public void onErrorEvent(@NonNull ErrorEvent event) {
+ handleEvent(event);
+ }
+ private void handleEvent(@NonNull AnalyticsEvent event) {
if (!isAnalyticsEnabled()) {
Log.e(TAG, "Analytics sent when not enabled!");
}
+
+ handleAnalyticEvent(event);
}
private boolean isAnalyticsEnabled() {
@@ -110,4 +92,15 @@ public class TmaAnalyticsBroadcastReceiver extends AnalyticsBroadcastReceiver {
}
return mPrefs.mAnalyticsState.getValue().getFlags().contains(ANALYTICS_ON.getId());
}
+
+ private boolean canLog() {
+ return isAnalyticsEnabled() && mPrefs.mAnalyticsState.getValue().getFlags().contains(
+ LOG.getId());
+ }
+
+ private void handleAnalyticEvent(AnalyticsEvent event) {
+ if (canLog() && event != null) {
+ Log.i(TAG, mResources.getString(R.string.analytics_log_output, event.toString()));
+ }
+ }
}
diff --git a/TestMediaApp/common/src/com/android/car/media/testmediaapp/loader/TmaMetaDataKeys.java b/TestMediaApp/common/src/com/android/car/media/testmediaapp/loader/TmaMetaDataKeys.java
index 4231671..3c1f7c9 100644
--- a/TestMediaApp/common/src/com/android/car/media/testmediaapp/loader/TmaMetaDataKeys.java
+++ b/TestMediaApp/common/src/com/android/car/media/testmediaapp/loader/TmaMetaDataKeys.java
@@ -41,8 +41,6 @@ public class TmaMetaDataKeys {
"androidx.media.utils.extras.KEY_CUSTOM_BROWSER_ACTION_LABEL";
public static final String BROWSE_CUSTOM_ACTIONS_ACTION_ICON =
"androidx.media.utils.extras.KEY_CUSTOM_BROWSER_ACTION_ICON_URI";
- public static final String BROWSE_CUSTOM_ACTIONS_ACTION_LIMIT =
- "androidx.media.MediaBrowserCompat.BROWSE_CUSTOM_ACTIONS_ACTION_LIMIT";
public static final String BROWSE_CUSTOM_ACTIONS_ACTION_EXTRAS =
"androidx.media.utils.extras.KEY_CUSTOM_BROWSER_ACTION_EXTRAS";
public static final String BROWSE_CUSTOM_ACTIONS_EXTRA_RESULT_BROWSE_NODE =
diff --git a/TestMediaApp/common/src/com/android/car/media/testmediaapp/prefs/TmaEnumPrefs.java b/TestMediaApp/common/src/com/android/car/media/testmediaapp/prefs/TmaEnumPrefs.java
index ff21efb..8b117c1 100644
--- a/TestMediaApp/common/src/com/android/car/media/testmediaapp/prefs/TmaEnumPrefs.java
+++ b/TestMediaApp/common/src/com/android/car/media/testmediaapp/prefs/TmaEnumPrefs.java
@@ -129,7 +129,6 @@ public class TmaEnumPrefs {
public enum AnalyticsState implements EnumPrefValue {
ANALYTICS_ON("Turn feature on", "on"),
LOG("Print events to Log", "log"),
- DISPLAY("Print events to Settings", "display"),
SHARE_GOOGLE("Share to Google", "google"),
SHARE_OEM("Share to OEM", "oem");
diff --git a/TestMediaApp/common/src/com/android/car/media/testmediaapp/prefs/TmaPrefsFragment.java b/TestMediaApp/common/src/com/android/car/media/testmediaapp/prefs/TmaPrefsFragment.java
index 5bd690c..97767b9 100644
--- a/TestMediaApp/common/src/com/android/car/media/testmediaapp/prefs/TmaPrefsFragment.java
+++ b/TestMediaApp/common/src/com/android/car/media/testmediaapp/prefs/TmaPrefsFragment.java
@@ -16,141 +16,64 @@
package com.android.car.media.testmediaapp.prefs;
-import static android.text.format.DateFormat.format;
-import static androidx.car.app.mediaextensions.analytics.event.AnalyticsEvent.EVENT_TYPE_BROWSE_NODE_CHANGED_EVENT;
-import static androidx.car.app.mediaextensions.analytics.event.AnalyticsEvent.EVENT_TYPE_ERROR_EVENT;
-import static androidx.car.app.mediaextensions.analytics.event.AnalyticsEvent.EVENT_TYPE_MEDIA_CLICKED_EVENT;
-import static androidx.car.app.mediaextensions.analytics.event.AnalyticsEvent.EVENT_TYPE_UNKNOWN_EVENT;
-import static androidx.car.app.mediaextensions.analytics.event.AnalyticsEvent.EVENT_TYPE_VIEW_CHANGE_EVENT;
-import static androidx.car.app.mediaextensions.analytics.event.AnalyticsEvent.EVENT_TYPE_VISIBLE_ITEMS_EVENT;
-import static com.android.car.media.testmediaapp.prefs.TmaEnumPrefs.AnalyticsState.ANALYTICS_ON;
-import static com.android.car.media.testmediaapp.prefs.TmaEnumPrefs.AnalyticsState.DISPLAY;
-
import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;
-import android.content.res.Resources;
import android.os.Bundle;
-import android.view.LayoutInflater;
import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ArrayAdapter;
-import android.widget.ListView;
-import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.OptIn;
-import androidx.car.app.mediaextensions.analytics.event.AnalyticsEvent;
import androidx.preference.DropDownPreference;
import androidx.preference.MultiSelectListPreference;
import androidx.preference.Preference;
import androidx.preference.PreferenceFragmentCompat;
import androidx.preference.PreferenceScreen;
-import com.android.car.media.testmediaapp.R;
-import com.android.car.media.testmediaapp.analytics.TmaAnalyticsBroadcastReceiver;
import com.android.car.media.testmediaapp.prefs.TmaEnumPrefs.TmaAccountType;
import com.android.car.media.testmediaapp.prefs.TmaEnumPrefs.TmaBrowseNodeType;
import com.android.car.media.testmediaapp.prefs.TmaEnumPrefs.TmaLoginEventOrder;
import com.android.car.media.testmediaapp.prefs.TmaEnumPrefs.TmaReplyDelay;
import com.android.car.media.testmediaapp.prefs.TmaPrefs.PrefEntry;
-import java.util.ArrayList;
import java.util.function.Consumer;
-import java.util.stream.Collectors;
@OptIn(markerClass = androidx.car.app.annotations2.ExperimentalCarApi.class)
public class TmaPrefsFragment extends PreferenceFragmentCompat {
- private TmaPrefs mPrefs;
- private Resources mRes;
-
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
Context context = getPreferenceManager().getContext();
- mPrefs = TmaPrefs.getInstance(context);
- mRes = getResources();
+ TmaPrefs prefs = TmaPrefs.getInstance(context);
PreferenceScreen screen = getPreferenceManager().createPreferenceScreen(context);
- screen.addPreference(createEnumPref(context, "Account Type", mPrefs.mAccountType,
+ screen.addPreference(createEnumPref(context, "Account Type", prefs.mAccountType,
TmaAccountType.values()));
- screen.addPreference(createEnumPref(context, "Root node type", mPrefs.mRootNodeType,
+ screen.addPreference(createEnumPref(context, "Root node type", prefs.mRootNodeType,
TmaBrowseNodeType.values()));
- screen.addPreference(createEnumPref(context, "Root reply delay", mPrefs.mRootReplyDelay,
+ screen.addPreference(createEnumPref(context, "Root reply delay", prefs.mRootReplyDelay,
TmaReplyDelay.values()));
screen.addPreference(createEnumPref(context, "Asset delay: random value in [v, 2v]",
- mPrefs.mAssetReplyDelay, TmaReplyDelay.values()));
- screen.addPreference(createEnumPref(context, "Login event order", mPrefs.mLoginEventOrder,
+ prefs.mAssetReplyDelay, TmaReplyDelay.values()));
+ screen.addPreference(createEnumPref(context, "Login event order", prefs.mLoginEventOrder,
TmaLoginEventOrder.values()));
screen.addPreference(createClickPref(context, "Request location perm",
this::requestPermissions));
screen.addPreference(createEnumPrefFlag(context, "Analytics Opt-in",
- mPrefs.mAnalyticsState, TmaEnumPrefs.AnalyticsState.class));
+ prefs.mAnalyticsState, TmaEnumPrefs.AnalyticsState.class));
setPreferenceScreen(screen);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
- if (canPrint()) {
- printAnalytics((ViewGroup) view);
- }
super.onViewCreated(view, savedInstanceState);
}
- private void printAnalytics(ViewGroup view) {
- View analyticsView =
- LayoutInflater.from(getContext()).inflate(R.layout.analytics_view, view);
- ((TextView) analyticsView.findViewById(R.id.analytics_header))
- .setText(R.string.analytics_prefs_output_title);
- ListView listView = analyticsView.findViewById(R.id.analytics_list);
- ArrayAdapter<String> arrayAdapter =
- new ArrayAdapter<>(getContext(), android.R.layout.simple_list_item_1);
- listView.setAdapter(arrayAdapter);
- TmaAnalyticsBroadcastReceiver.analyticsEventLiveData.observe(this,
- analyticsEvent -> {
- arrayAdapter.clear();
- arrayAdapter.addAll(
- analyticsEvent
- .stream()
- .map(event -> {
- if(event == null) return null;
- long ms = event.getTimestampMillis();
- return mRes.getString(R.string.analytics_prefs_output,
- format("dd-MM-yyyy hh:mm:ss", ms).toString(),
- getEventType(event),
- event.getAnalyticsVersion(),
- event.getSessionId(),
- event.getComponent());
- })
- .collect(Collectors.toCollection(ArrayList::new)));
- });
- }
-
- private String getEventType(AnalyticsEvent event) {
- switch (event.getEventType()) {
- case EVENT_TYPE_VISIBLE_ITEMS_EVENT: return "VISIBLE_ITEMS";
- case EVENT_TYPE_MEDIA_CLICKED_EVENT: return "MEDIA_CLICKED";
- case EVENT_TYPE_BROWSE_NODE_CHANGED_EVENT: return "BROWSE_NODE_CHANGED";
- case EVENT_TYPE_VIEW_CHANGE_EVENT: return "VIEW_CHANGE";
- case EVENT_TYPE_ERROR_EVENT: return "ERROR";
- case EVENT_TYPE_UNKNOWN_EVENT: return "UNKNOWN";
- default: return "UNEXPECTED!!";
- }
- }
-
- private boolean isOn() {
- return mPrefs.mAnalyticsState.getValue().getFlags().contains(ANALYTICS_ON.getId());
- }
-
- private boolean canPrint() {
- return isOn() && mPrefs.mAnalyticsState.getValue().getFlags().contains(DISPLAY.getId());
- }
-
private <T extends TmaEnumPrefs.EnumPrefValue> Preference createEnumPref(
Context context, String title, PrefEntry pref, T[] enumValues) {
DropDownPreference prefWidget = new DropDownPreference(context);
diff --git a/TestMediaApp/mobile/src/main/AndroidManifest.xml b/TestMediaApp/mobile/src/main/AndroidManifest.xml
index 56719d9..1002f1c 100644
--- a/TestMediaApp/mobile/src/main/AndroidManifest.xml
+++ b/TestMediaApp/mobile/src/main/AndroidManifest.xml
@@ -120,13 +120,6 @@
</intent-filter>
</receiver>
- <receiver android:name="com.android.car.media.testmediaapp.analytics.TmaAnalyticsBroadcastReceiver"
- android:exported="true">
- <intent-filter>
- <action android:name="androidx.car.app.media.mediaextensions.analytics.action" />
- </intent-filter>
- </receiver>
-
</application>
</manifest>