Merge "Added transient players to auto KS." into sc-dev
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/audio/AudioTestFragment.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/audio/AudioTestFragment.java
index 9f847e7..5ce906a 100644
--- a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/audio/AudioTestFragment.java
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/audio/AudioTestFragment.java
@@ -641,9 +641,11 @@
         mViewPager = view.findViewById(R.id.zones_player_view_pager);
         mAudioPlayerZoneAdapter = new CarAudioZoneTabAdapter(getChildFragmentManager());
         mViewPager.setAdapter(mAudioPlayerZoneAdapter);
-        mAudioPlayerZoneAdapter
-                .addFragment(new AudioSystemPlayerFragment(mCarAudioManager, mAudioManager),
-                        "System Players");
+        mAudioPlayerZoneAdapter.addFragment(
+                new AudioSystemPlayerFragment(mCarAudioManager, mAudioManager),
+                "System Players");
+        mAudioPlayerZoneAdapter.addFragment(new AudioTransientPlayersFragment(),
+                "Transient Sound Players");
         mAudioPlayerZoneAdapter.notifyDataSetChanged();
         mPlayerTabLayout.setupWithViewPager(mViewPager);
     }
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/audio/AudioTransientPlayersFragment.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/audio/AudioTransientPlayersFragment.java
new file mode 100644
index 0000000..2cd68ad
--- /dev/null
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/audio/AudioTransientPlayersFragment.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.audio;
+
+import static android.media.AudioAttributes.USAGE_ALARM;
+import static android.media.AudioAttributes.USAGE_ASSISTANCE_NAVIGATION_GUIDANCE;
+import static android.media.AudioAttributes.USAGE_ASSISTANT;
+import static android.media.AudioAttributes.USAGE_NOTIFICATION;
+import static android.media.AudioAttributes.USAGE_NOTIFICATION_RINGTONE;
+import static android.media.AudioAttributes.USAGE_VOICE_COMMUNICATION;
+
+import static com.google.android.car.kitchensink.R.raw.one2six;
+import static com.google.android.car.kitchensink.R.raw.turnright;
+
+import android.media.AudioAttributes;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.fragment.app.Fragment;
+
+import com.android.internal.widget.LinearLayoutManager;
+import com.android.internal.widget.RecyclerView;
+
+import com.google.android.car.kitchensink.R;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public final class AudioTransientPlayersFragment extends Fragment {
+
+    private static final List<Integer> TRANSIENT_SOUND_USAGES = new ArrayList<>(Arrays.asList(
+            USAGE_ASSISTANCE_NAVIGATION_GUIDANCE, USAGE_ASSISTANT, USAGE_NOTIFICATION_RINGTONE,
+            USAGE_VOICE_COMMUNICATION, USAGE_ALARM, USAGE_NOTIFICATION));
+
+    private final List<AudioPlayer> mSystemPlayers =
+            new ArrayList<>(TRANSIENT_SOUND_USAGES.size());
+
+    private RecyclerView mRecyclerView;
+    private PlayerAdapter mSystemPlayerAdapter;
+
+    AudioTransientPlayersFragment() {
+    }
+    @Override
+    public View onCreateView(LayoutInflater inflater, ViewGroup container,
+            Bundle savedInstanceState) {
+        View view = inflater.inflate(R.layout.audio_player_tab, container, false);
+        initPlayers();
+
+        mRecyclerView = view.findViewById(R.id.players_view);
+
+        mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
+
+        mSystemPlayerAdapter = new PlayerAdapter(mSystemPlayers);
+        mRecyclerView.setAdapter(mSystemPlayerAdapter);
+        mRecyclerView.scrollToPosition(0);
+
+        return view;
+    }
+
+    @Override
+    public void onDestroyView() {
+        super.onDestroyView();
+        for (int index = 0; index < mSystemPlayers.size(); index++) {
+            mSystemPlayers.get(index).stop();
+        }
+        mSystemPlayers.clear();
+    }
+
+    private void initPlayers() {
+        for (int index = 0; index < TRANSIENT_SOUND_USAGES.size(); index++) {
+            int usage = TRANSIENT_SOUND_USAGES.get(index);
+            mSystemPlayers.add(getCarSoundsPlayer(usage));
+        }
+    }
+
+    private AudioPlayer getCarSoundsPlayer(int usage) {
+        AudioAttributes attributes = new AudioAttributes.Builder().setUsage(usage).build();
+        return new AudioPlayer(getContext(), getPlayerResource(usage), attributes);
+    }
+
+    private int getPlayerResource(int usage) {
+        if (usage == USAGE_ASSISTANCE_NAVIGATION_GUIDANCE) {
+            return turnright;
+        }
+        return one2six;
+    }
+}
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/audio/PlayerAdapter.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/audio/PlayerAdapter.java
index 9c2cd63..e61cf55 100644
--- a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/audio/PlayerAdapter.java
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/audio/PlayerAdapter.java
@@ -16,7 +16,7 @@
 
 package com.google.android.car.kitchensink.audio;
 
-import static android.media.AudioManager.AUDIOFOCUS_GAIN_TRANSIENT;
+import static android.media.AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK;
 
 import static com.google.android.car.kitchensink.audio.AudioPlayer.PLAYER_STATE_COMPLETED;
 import static com.google.android.car.kitchensink.audio.AudioPlayer.PLAYER_STATE_DELAYED;
@@ -75,7 +75,7 @@
         }
 
         private void startPlayer() {
-            mPlayer.start(true, true, AUDIOFOCUS_GAIN_TRANSIENT, state -> {
+            mPlayer.start(true, true, AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK, state -> {
                 handleStateChange(state);
             });
         }