Fix crash when changing preferences from the phone activity am: 4895c46357
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Car/tests/+/12700474
Change-Id: I41ee24f2b16b22fce688ba8e238ac4cff8335f7a
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.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 @@
private BrowserRoot mRoot;
+ public TmaBrowser() {
+ super();
+ }
+
@Override
public void onCreate() {
super.onCreate();
@@ -91,14 +97,9 @@
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 @@
@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/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 @@
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);
+ }
+ }
}
diff --git a/build.gradle b/build.gradle
index 8ea89fa..5493299 100644
--- a/build.gradle
+++ b/build.gradle
@@ -22,7 +22,7 @@
jcenter()
}
dependencies {
- classpath 'com.android.tools.build:gradle:4.0.0'
+ classpath 'com.android.tools.build:gradle:4.0.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files