Loading res/values/strings.xml +4 −0 Original line number Diff line number Diff line Loading @@ -6994,6 +6994,10 @@ <string name="preferred_network_type_title">Preferred network type</string> <!-- Preferred network type summary. [CHAR LIMIT=100] --> <string name="preferred_network_type_summary">LTE (recommended)</string> <!-- Title of multimedia messaging service settings. [CHAR LIMIT=50] --> <string name="mms_message_title">MMS messages</string> <!-- Summary of multimedia messaging service settings. [CHAR LIMIT=100] --> <string name="mms_message_summary">Send & receive when mobile data is off</string> <!-- Work SIM title. [CHAR LIMIT=50] --> <string name="work_sim_title">Work SIM</string> res/xml/mobile_network_settings_v2.xml +6 −0 Original line number Diff line number Diff line Loading @@ -73,6 +73,12 @@ android:title="@string/billing_cycle" settings:controller="com.android.settings.datausage.BillingCyclePreferenceController" /> <SwitchPreference android:key="mms_message" android:title="@string/mms_message_title" android:summary="@string/mms_message_summary" settings:controller="com.android.settings.network.telephony.MmsMessagePreferenceController" /> <SwitchPreference android:key="enhanced_4g_lte" android:title="@string/enhanced_4g_lte_mode_title" Loading src/com/android/settings/network/MobileDataContentObserver.java 0 → 100644 +72 −0 Original line number Diff line number Diff line /* * Copyright (C) 2019 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.android.settings.network; import android.content.Context; import android.database.ContentObserver; import android.net.Uri; import android.os.Handler; import android.provider.Settings; import android.telephony.TelephonyManager; /** * {@link ContentObserver} to listen to update of mobile data change */ public class MobileDataContentObserver extends ContentObserver { private OnMobileDataChangedListener mListener; public MobileDataContentObserver(Handler handler) { super(handler); } public static Uri getObservableUri(int subId) { Uri uri = Settings.Global.getUriFor(Settings.Global.MOBILE_DATA); if (TelephonyManager.getDefault().getSimCount() != 1) { uri = Settings.Global.getUriFor(Settings.Global.MOBILE_DATA + subId); } return uri; } public void setOnMobileDataChangedListener(OnMobileDataChangedListener lsn) { mListener = lsn; } @Override public void onChange(boolean selfChange) { super.onChange(selfChange); if (mListener != null) { mListener.onMobileDataChanged(); } } public void register(Context context, int subId) { final Uri uri = getObservableUri(subId); context.getContentResolver().registerContentObserver(uri, false, this); } public void unRegister(Context context) { context.getContentResolver().unregisterContentObserver(this); } /** * Listener for update of mobile data(ON vs OFF) */ public interface OnMobileDataChangedListener { void onMobileDataChanged(); } } src/com/android/settings/network/telephony/MmsMessagePreferenceController.java 0 → 100644 +106 −0 Original line number Diff line number Diff line /* * Copyright (C) 2019 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.android.settings.network.telephony; import android.content.Context; import android.os.Handler; import android.os.Looper; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.telephony.data.ApnSetting; import android.util.Log; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; import androidx.preference.SwitchPreference; import com.android.settings.network.MobileDataContentObserver; import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.events.OnStart; import com.android.settingslib.core.lifecycle.events.OnStop; /** * Preference controller for "Mobile data" */ public class MmsMessagePreferenceController extends TelephonyTogglePreferenceController implements LifecycleObserver, OnStart, OnStop { private TelephonyManager mTelephonyManager; private SubscriptionManager mSubscriptionManager; private MobileDataContentObserver mMobileDataContentObserver; private SwitchPreference mPreference; public MmsMessagePreferenceController(Context context, String key) { super(context, key); mSubscriptionManager = context.getSystemService(SubscriptionManager.class); mMobileDataContentObserver = new MobileDataContentObserver( new Handler(Looper.getMainLooper())); mMobileDataContentObserver.setOnMobileDataChangedListener(()->updateState(mPreference)); } @Override public int getAvailabilityStatus(int subId) { final TelephonyManager telephonyManager = TelephonyManager .from(mContext).createForSubscriptionId(subId); return (subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID && !telephonyManager.isDataEnabled() && telephonyManager.isApnMetered(ApnSetting.TYPE_MMS)) ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; } @Override public void onStart() { if (mSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) { mMobileDataContentObserver.register(mContext, mSubId); } } @Override public void onStop() { if (mSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) { mMobileDataContentObserver.unRegister(mContext); } } @Override public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); mPreference = screen.findPreference(getPreferenceKey()); } @Override public void updateState(Preference preference) { super.updateState(preference); preference.setVisible(isAvailable()); ((SwitchPreference) preference).setChecked(isChecked()); } public void init(int subId) { mSubId = subId; mTelephonyManager = TelephonyManager.from(mContext).createForSubscriptionId(mSubId); } @Override public boolean setChecked(boolean isChecked) { return mSubscriptionManager.setAlwaysAllowMmsData(mSubId, isChecked); } @Override public boolean isChecked() { return mTelephonyManager.isDataEnabledForApn(ApnSetting.TYPE_MMS); } } src/com/android/settings/network/telephony/MobileDataPreferenceController.java +4 −36 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.text.TextUtils; import com.android.settings.network.MobileDataContentObserver; import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.events.OnStart; import com.android.settingslib.core.lifecycle.events.OnStop; Loading @@ -48,7 +49,7 @@ public class MobileDataPreferenceController extends TelephonyTogglePreferenceCon private SwitchPreference mPreference; private TelephonyManager mTelephonyManager; private SubscriptionManager mSubscriptionManager; private DataContentObserver mDataContentObserver; private MobileDataContentObserver mDataContentObserver; private FragmentManager mFragmentManager; @VisibleForTesting int mDialogType; Loading @@ -58,7 +59,8 @@ public class MobileDataPreferenceController extends TelephonyTogglePreferenceCon public MobileDataPreferenceController(Context context, String key) { super(context, key); mSubscriptionManager = context.getSystemService(SubscriptionManager.class); mDataContentObserver = new DataContentObserver(new Handler(Looper.getMainLooper())); mDataContentObserver = new MobileDataContentObserver(new Handler(Looper.getMainLooper())); mDataContentObserver.setOnMobileDataChangedListener(()-> updateState(mPreference)); } @Override Loading Loading @@ -129,14 +131,6 @@ public class MobileDataPreferenceController extends TelephonyTogglePreferenceCon return info != null && info.isOpportunistic(); } public static Uri getObservableUri(int subId) { Uri uri = Settings.Global.getUriFor(Settings.Global.MOBILE_DATA); if (TelephonyManager.getDefault().getSimCount() != 1) { uri = Settings.Global.getUriFor(Settings.Global.MOBILE_DATA + subId); } return uri; } public void init(FragmentManager fragmentManager, int subId) { mFragmentManager = fragmentManager; mSubId = subId; Loading Loading @@ -170,30 +164,4 @@ public class MobileDataPreferenceController extends TelephonyTogglePreferenceCon mSubId); dialogFragment.show(mFragmentManager, DIALOG_TAG); } /** * Listener that listens mobile data state change. */ public class DataContentObserver extends ContentObserver { public DataContentObserver(Handler handler) { super(handler); } @Override public void onChange(boolean selfChange) { super.onChange(selfChange); updateState(mPreference); } public void register(Context context, int subId) { final Uri uri = getObservableUri(subId); context.getContentResolver().registerContentObserver(uri, false, this); } public void unRegister(Context context) { context.getContentResolver().unregisterContentObserver(this); } } } Loading
res/values/strings.xml +4 −0 Original line number Diff line number Diff line Loading @@ -6994,6 +6994,10 @@ <string name="preferred_network_type_title">Preferred network type</string> <!-- Preferred network type summary. [CHAR LIMIT=100] --> <string name="preferred_network_type_summary">LTE (recommended)</string> <!-- Title of multimedia messaging service settings. [CHAR LIMIT=50] --> <string name="mms_message_title">MMS messages</string> <!-- Summary of multimedia messaging service settings. [CHAR LIMIT=100] --> <string name="mms_message_summary">Send & receive when mobile data is off</string> <!-- Work SIM title. [CHAR LIMIT=50] --> <string name="work_sim_title">Work SIM</string>
res/xml/mobile_network_settings_v2.xml +6 −0 Original line number Diff line number Diff line Loading @@ -73,6 +73,12 @@ android:title="@string/billing_cycle" settings:controller="com.android.settings.datausage.BillingCyclePreferenceController" /> <SwitchPreference android:key="mms_message" android:title="@string/mms_message_title" android:summary="@string/mms_message_summary" settings:controller="com.android.settings.network.telephony.MmsMessagePreferenceController" /> <SwitchPreference android:key="enhanced_4g_lte" android:title="@string/enhanced_4g_lte_mode_title" Loading
src/com/android/settings/network/MobileDataContentObserver.java 0 → 100644 +72 −0 Original line number Diff line number Diff line /* * Copyright (C) 2019 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.android.settings.network; import android.content.Context; import android.database.ContentObserver; import android.net.Uri; import android.os.Handler; import android.provider.Settings; import android.telephony.TelephonyManager; /** * {@link ContentObserver} to listen to update of mobile data change */ public class MobileDataContentObserver extends ContentObserver { private OnMobileDataChangedListener mListener; public MobileDataContentObserver(Handler handler) { super(handler); } public static Uri getObservableUri(int subId) { Uri uri = Settings.Global.getUriFor(Settings.Global.MOBILE_DATA); if (TelephonyManager.getDefault().getSimCount() != 1) { uri = Settings.Global.getUriFor(Settings.Global.MOBILE_DATA + subId); } return uri; } public void setOnMobileDataChangedListener(OnMobileDataChangedListener lsn) { mListener = lsn; } @Override public void onChange(boolean selfChange) { super.onChange(selfChange); if (mListener != null) { mListener.onMobileDataChanged(); } } public void register(Context context, int subId) { final Uri uri = getObservableUri(subId); context.getContentResolver().registerContentObserver(uri, false, this); } public void unRegister(Context context) { context.getContentResolver().unregisterContentObserver(this); } /** * Listener for update of mobile data(ON vs OFF) */ public interface OnMobileDataChangedListener { void onMobileDataChanged(); } }
src/com/android/settings/network/telephony/MmsMessagePreferenceController.java 0 → 100644 +106 −0 Original line number Diff line number Diff line /* * Copyright (C) 2019 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.android.settings.network.telephony; import android.content.Context; import android.os.Handler; import android.os.Looper; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.telephony.data.ApnSetting; import android.util.Log; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; import androidx.preference.SwitchPreference; import com.android.settings.network.MobileDataContentObserver; import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.events.OnStart; import com.android.settingslib.core.lifecycle.events.OnStop; /** * Preference controller for "Mobile data" */ public class MmsMessagePreferenceController extends TelephonyTogglePreferenceController implements LifecycleObserver, OnStart, OnStop { private TelephonyManager mTelephonyManager; private SubscriptionManager mSubscriptionManager; private MobileDataContentObserver mMobileDataContentObserver; private SwitchPreference mPreference; public MmsMessagePreferenceController(Context context, String key) { super(context, key); mSubscriptionManager = context.getSystemService(SubscriptionManager.class); mMobileDataContentObserver = new MobileDataContentObserver( new Handler(Looper.getMainLooper())); mMobileDataContentObserver.setOnMobileDataChangedListener(()->updateState(mPreference)); } @Override public int getAvailabilityStatus(int subId) { final TelephonyManager telephonyManager = TelephonyManager .from(mContext).createForSubscriptionId(subId); return (subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID && !telephonyManager.isDataEnabled() && telephonyManager.isApnMetered(ApnSetting.TYPE_MMS)) ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; } @Override public void onStart() { if (mSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) { mMobileDataContentObserver.register(mContext, mSubId); } } @Override public void onStop() { if (mSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) { mMobileDataContentObserver.unRegister(mContext); } } @Override public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); mPreference = screen.findPreference(getPreferenceKey()); } @Override public void updateState(Preference preference) { super.updateState(preference); preference.setVisible(isAvailable()); ((SwitchPreference) preference).setChecked(isChecked()); } public void init(int subId) { mSubId = subId; mTelephonyManager = TelephonyManager.from(mContext).createForSubscriptionId(mSubId); } @Override public boolean setChecked(boolean isChecked) { return mSubscriptionManager.setAlwaysAllowMmsData(mSubId, isChecked); } @Override public boolean isChecked() { return mTelephonyManager.isDataEnabledForApn(ApnSetting.TYPE_MMS); } }
src/com/android/settings/network/telephony/MobileDataPreferenceController.java +4 −36 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.text.TextUtils; import com.android.settings.network.MobileDataContentObserver; import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.events.OnStart; import com.android.settingslib.core.lifecycle.events.OnStop; Loading @@ -48,7 +49,7 @@ public class MobileDataPreferenceController extends TelephonyTogglePreferenceCon private SwitchPreference mPreference; private TelephonyManager mTelephonyManager; private SubscriptionManager mSubscriptionManager; private DataContentObserver mDataContentObserver; private MobileDataContentObserver mDataContentObserver; private FragmentManager mFragmentManager; @VisibleForTesting int mDialogType; Loading @@ -58,7 +59,8 @@ public class MobileDataPreferenceController extends TelephonyTogglePreferenceCon public MobileDataPreferenceController(Context context, String key) { super(context, key); mSubscriptionManager = context.getSystemService(SubscriptionManager.class); mDataContentObserver = new DataContentObserver(new Handler(Looper.getMainLooper())); mDataContentObserver = new MobileDataContentObserver(new Handler(Looper.getMainLooper())); mDataContentObserver.setOnMobileDataChangedListener(()-> updateState(mPreference)); } @Override Loading Loading @@ -129,14 +131,6 @@ public class MobileDataPreferenceController extends TelephonyTogglePreferenceCon return info != null && info.isOpportunistic(); } public static Uri getObservableUri(int subId) { Uri uri = Settings.Global.getUriFor(Settings.Global.MOBILE_DATA); if (TelephonyManager.getDefault().getSimCount() != 1) { uri = Settings.Global.getUriFor(Settings.Global.MOBILE_DATA + subId); } return uri; } public void init(FragmentManager fragmentManager, int subId) { mFragmentManager = fragmentManager; mSubId = subId; Loading Loading @@ -170,30 +164,4 @@ public class MobileDataPreferenceController extends TelephonyTogglePreferenceCon mSubId); dialogFragment.show(mFragmentManager, DIALOG_TAG); } /** * Listener that listens mobile data state change. */ public class DataContentObserver extends ContentObserver { public DataContentObserver(Handler handler) { super(handler); } @Override public void onChange(boolean selfChange) { super.onChange(selfChange); updateState(mPreference); } public void register(Context context, int subId) { final Uri uri = getObservableUri(subId); context.getContentResolver().registerContentObserver(uri, false, this); } public void unRegister(Context context) { context.getContentResolver().unregisterContentObserver(this); } } }