Fix binder leakage and activity leakage in MobileNetworkSettings.

There's a binder leakage in MobileDataPreference. Its contentObserver
was only unregistered in onPrepareForRemoval, which is not called when
the activity is destroyed. So adding dispose API to make sure it's
unregistered.

Bug: 80275945
Test: unittest and stress test
Change-Id: Iaa447b46474a2235487aac3c200bba45924e5121
diff --git a/src/com/android/phone/MobileDataPreference.java b/src/com/android/phone/MobileDataPreference.java
index 38d700e..8763b77 100644
--- a/src/com/android/phone/MobileDataPreference.java
+++ b/src/com/android/phone/MobileDataPreference.java
@@ -60,6 +60,11 @@
         super(context, attrs, com.android.internal.R.attr.switchPreferenceStyle);
     }
 
+    // Must be called to avoid binder leakage.
+    void dispose() {
+        mListener.setListener(false, mSubId, getContext());
+    }
+
     @Override
     protected void onRestoreInstanceState(Parcelable s) {
         CellDataState state = (CellDataState) s;