diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2024-03-13 20:35:36 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2024-03-13 20:35:36 +0000 |
commit | 3e67dea8346af809fdfa24fc1aaeb50ebe8f65f0 (patch) | |
tree | 5733ccff81a4563fd16688885f54d0abbbd966cf | |
parent | 3550c64e53f527275e0be5edfd787927c6d95520 (diff) | |
parent | 04afe329deac6ce8bf2b0a8b23e793ff704f5f91 (diff) | |
download | tests-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.bp | 1 | ||||
-rw-r--r-- | RotaryPlayground/Android.bp | 1 | ||||
-rw-r--r-- | TestMediaApp/automotive/src/main/AndroidManifest.xml | 8 | ||||
-rw-r--r-- | TestMediaApp/common/res/layout/analytics_view.xml | 38 | ||||
-rw-r--r-- | TestMediaApp/common/res/values/strings.xml | 2 | ||||
-rw-r--r-- | TestMediaApp/common/src/com/android/car/media/testmediaapp/TmaBrowser.java | 52 | ||||
-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.java | 2 | ||||
-rw-r--r-- | TestMediaApp/common/src/com/android/car/media/testmediaapp/prefs/TmaEnumPrefs.java | 1 | ||||
-rw-r--r-- | TestMediaApp/common/src/com/android/car/media/testmediaapp/prefs/TmaPrefsFragment.java | 91 | ||||
-rw-r--r-- | TestMediaApp/mobile/src/main/AndroidManifest.xml | 7 |
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> |