diff options
Diffstat (limited to 'TestMediaApp/src/com/android/car/media')
3 files changed, 53 insertions, 26 deletions
diff --git a/TestMediaApp/src/com/android/car/media/testmediaapp/TmaBrowser.java b/TestMediaApp/src/com/android/car/media/testmediaapp/TmaBrowser.java index 3c3eeb6..61b3a31 100644 --- a/TestMediaApp/src/com/android/car/media/testmediaapp/TmaBrowser.java +++ b/TestMediaApp/src/com/android/car/media/testmediaapp/TmaBrowser.java @@ -33,7 +33,9 @@ import androidx.annotation.Nullable; import androidx.media.MediaBrowserServiceCompat; import com.android.car.media.testmediaapp.loader.TmaLoader; +import com.android.car.media.testmediaapp.prefs.TmaEnumPrefs; 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.TmaReplyDelay; import com.android.car.media.testmediaapp.prefs.TmaPrefs; @@ -72,6 +74,10 @@ public class TmaBrowser extends MediaBrowserServiceCompat { private BrowserRoot mRoot; + public TmaBrowser() { + super(); + } + @Override public void onCreate() { super.onCreate(); @@ -91,14 +97,9 @@ public class TmaBrowser extends MediaBrowserServiceCompat { mediaSessionExtras.putString(BROWSE_SERVICE_FOR_SESSION_KEY, TmaBrowser.class.getName()); mSession.setExtras(mediaSessionExtras); - mPrefs.mAccountType.registerChangeListener( - (oldValue, newValue) -> onAccountChanged(newValue)); - - mPrefs.mRootNodeType.registerChangeListener( - (oldValue, newValue) -> invalidateRoot()); - - mPrefs.mRootReplyDelay.registerChangeListener( - (oldValue, newValue) -> invalidateRoot()); + mPrefs.mAccountType.registerChangeListener(mOnAccountChanged); + mPrefs.mRootNodeType.registerChangeListener(mOnRootNodeTypeChanged); + mPrefs.mRootReplyDelay.registerChangeListener(mOnReplyDelayChanged); Bundle browserRootExtras = new Bundle(); browserRootExtras.putBoolean(SEARCH_SUPPORTED, true); @@ -109,23 +110,33 @@ public class TmaBrowser extends MediaBrowserServiceCompat { @Override public void onDestroy() { + mPrefs.mAccountType.unregisterChangeListener(mOnAccountChanged); + mPrefs.mRootNodeType.unregisterChangeListener(mOnRootNodeTypeChanged); + mPrefs.mRootReplyDelay.unregisterChangeListener(mOnReplyDelayChanged); mSession.release(); mHandler = null; mPrefs = null; super.onDestroy(); } - private void onAccountChanged(TmaAccountType accountType) { - if (PLAYBACK_STATE_UPDATE_FIRST.equals(mPrefs.mLoginEventOrder.getValue())) { - updatePlaybackState(accountType); - invalidateRoot(); - } else { - invalidateRoot(); - (new Handler()).postDelayed(() -> { - updatePlaybackState(accountType); - }, 3000); - } - } + private final TmaPrefs.PrefValueChangedListener<TmaAccountType> mOnAccountChanged = + (oldValue, newValue) -> { + if (PLAYBACK_STATE_UPDATE_FIRST.equals(mPrefs.mLoginEventOrder.getValue())) { + updatePlaybackState(newValue); + invalidateRoot(); + } else { + invalidateRoot(); + (new Handler()).postDelayed(() -> { + updatePlaybackState(newValue); + }, 3000); + } + }; + + private final TmaPrefs.PrefValueChangedListener<TmaBrowseNodeType> mOnRootNodeTypeChanged = + (oldValue, newValue) -> invalidateRoot(); + + private final TmaPrefs.PrefValueChangedListener<TmaReplyDelay> mOnReplyDelayChanged = + (oldValue, newValue) -> invalidateRoot(); private void updatePlaybackState(TmaAccountType accountType) { if (accountType == TmaAccountType.NONE) { diff --git a/TestMediaApp/src/com/android/car/media/testmediaapp/phone/TmaLauncherActivity.java b/TestMediaApp/src/com/android/car/media/testmediaapp/phone/TmaLauncherActivity.java index 84f481f..014e81e 100644 --- a/TestMediaApp/src/com/android/car/media/testmediaapp/phone/TmaLauncherActivity.java +++ b/TestMediaApp/src/com/android/car/media/testmediaapp/phone/TmaLauncherActivity.java @@ -52,13 +52,21 @@ public class TmaLauncherActivity extends AppCompatActivity { // Get the token for the MediaSession MediaSessionCompat.Token token = mediaBrowser.getSessionToken(); - // Create a MediaControllerCompat - MediaControllerCompat controller = - new MediaControllerCompat(TmaLauncherActivity.this, token); - - // Save the controller - MediaControllerCompat.setMediaController( - TmaLauncherActivity.this, controller); + try { + // Create a MediaControllerCompat + MediaControllerCompat controller = + new MediaControllerCompat(TmaLauncherActivity.this, token); + // Save the controller + MediaControllerCompat.setMediaController( + TmaLauncherActivity.this, controller); + } catch (Exception ex) { + // ToDo: b/166328624 Workaround for an Android Studio Build error: + // unreported exception RemoteException + // Whereas as an Android Soong Build error: + // RemoteException is never thrown + Log.e(TAG, "Failed to create MediaControllerCompat", ex); + return; + } } }; diff --git a/TestMediaApp/src/com/android/car/media/testmediaapp/prefs/TmaPrefs.java b/TestMediaApp/src/com/android/car/media/testmediaapp/prefs/TmaPrefs.java index 8e9d89f..dd08cd2 100644 --- a/TestMediaApp/src/com/android/car/media/testmediaapp/prefs/TmaPrefs.java +++ b/TestMediaApp/src/com/android/car/media/testmediaapp/prefs/TmaPrefs.java @@ -110,6 +110,14 @@ public class TmaPrefs { mSharedPrefs.registerOnSharedPreferenceChangeListener(listenerWrapper); mListeners.put(listener, listenerWrapper); } + + public void unregisterChangeListener(PrefValueChangedListener<T> listener) { + OnSharedPreferenceChangeListener listenerWrapper = mListeners.get(listener); + if (listenerWrapper != null) { + mSharedPrefs.unregisterOnSharedPreferenceChangeListener(listenerWrapper); + mListeners.remove(listener); + } + } } |