From 4f05555f4fd495d422aa7df4984c8c5caf752e32 Mon Sep 17 00:00:00 2001 From: Zoey Chen Date: Mon, 1 Feb 2021 16:51:04 +0800 Subject: [PATCH] [Provider Model] Add Learn more in the WFC footer UX deck: https://screenshot.googleplex.com/4DxGCxgEsujhEpy.png Implementation: https://screenshot.googleplex.com/5yZhQMQwwRZQkge.png Bug: 178898044 Test: make Change-Id: Icfde927e6781303b6016b0ec13201fd7052191d3 --- res/xml/network_provider_calls_sms.xml | 3 +- .../NetworkProviderCallsSmsFragment.java | 10 +++ ...ProviderWfcFooterPreferenceController.java | 77 +++++++++++++++++++ ...oviderWifiCallingPreferenceController.java | 1 - 4 files changed, 89 insertions(+), 2 deletions(-) create mode 100644 src/com/android/settings/network/telephony/NetworkProviderWfcFooterPreferenceController.java diff --git a/res/xml/network_provider_calls_sms.xml b/res/xml/network_provider_calls_sms.xml index a677d1b349a..0b390b5e1c6 100644 --- a/res/xml/network_provider_calls_sms.xml +++ b/res/xml/network_provider_calls_sms.xml @@ -56,6 +56,7 @@ android:key="provider_model_calls_sms_footer" android:title="@string/calls_sms_footnote" android:selectable="false" + settings:allowDividerAbove="true" settings:searchable="false" - /> + settings:controller="com.android.settings.network.telephony.NetworkProviderWfcFooterPreferenceController"/> diff --git a/src/com/android/settings/network/NetworkProviderCallsSmsFragment.java b/src/com/android/settings/network/NetworkProviderCallsSmsFragment.java index c6e17c5b580..a811978a94f 100644 --- a/src/com/android/settings/network/NetworkProviderCallsSmsFragment.java +++ b/src/com/android/settings/network/NetworkProviderCallsSmsFragment.java @@ -27,6 +27,7 @@ import com.android.settings.Utils; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.network.telephony.CallsDefaultSubscriptionController; import com.android.settings.network.telephony.NetworkProviderBackupCallingPreferenceController; +import com.android.settings.network.telephony.NetworkProviderWfcFooterPreferenceController; import com.android.settings.network.telephony.NetworkProviderWifiCallingPreferenceController; import com.android.settings.network.telephony.SmsDefaultSubscriptionController; import com.android.settings.search.BaseSearchIndexProvider; @@ -45,6 +46,9 @@ public class NetworkProviderCallsSmsFragment extends DashboardFragment { @VisibleForTesting static final String KEY_PREFERENCE_CATEGORY_BACKUP_CALLING = "provider_model_backup_calling_category"; + static final String KEY_PREFERENCE_CATEGORY_WFC_FOOTER = + "provider_model_calls_sms_footer"; + @VisibleForTesting static final String KEY_PREFERENCE_CALLS= "provider_model_calls_preference"; @VisibleForTesting @@ -70,6 +74,12 @@ public class NetworkProviderCallsSmsFragment extends DashboardFragment { backupCallingPrefCtrl.init(getSettingsLifecycle()); controllers.add(backupCallingPrefCtrl); + NetworkProviderWfcFooterPreferenceController wfcFooterPreferenceController = + new NetworkProviderWfcFooterPreferenceController(context, + KEY_PREFERENCE_CATEGORY_WFC_FOOTER); + wfcFooterPreferenceController.init(getSettingsLifecycle()); + controllers.add(wfcFooterPreferenceController); + return controllers; } diff --git a/src/com/android/settings/network/telephony/NetworkProviderWfcFooterPreferenceController.java b/src/com/android/settings/network/telephony/NetworkProviderWfcFooterPreferenceController.java new file mode 100644 index 00000000000..166094d267f --- /dev/null +++ b/src/com/android/settings/network/telephony/NetworkProviderWfcFooterPreferenceController.java @@ -0,0 +1,77 @@ +package com.android.settings.network.telephony; + +import android.content.Context; +import android.content.Intent; +import android.telephony.SubscriptionInfo; +import android.telephony.SubscriptionManager; + +import androidx.preference.Preference; + +import com.android.settings.R; +import com.android.settings.core.BasePreferenceController; +import com.android.settings.network.SubscriptionUtil; +import com.android.settings.utils.AnnotationSpan; +import com.android.settingslib.HelpUtils; +import com.android.settingslib.core.lifecycle.Lifecycle; +import com.android.settingslib.core.lifecycle.LifecycleObserver; + +import java.util.List; + +public class NetworkProviderWfcFooterPreferenceController extends BasePreferenceController + implements LifecycleObserver { + + /** + * Constructor. + */ + public NetworkProviderWfcFooterPreferenceController(Context context, String preferenceKey) { + super(context, preferenceKey); + } + + /** + * Initialize the binding with Lifecycle + * + * @param lifecycle Lifecycle of UI which owns this Preference + */ + public void init(Lifecycle lifecycle) { + lifecycle.addObserver(this); + } + + @Override + public void updateState(Preference preference) { + super.updateState(preference); + + if (preference != null) { + // This is necessary to ensure that setting the title to the spannable string returned + // by getFooterText will be accepted. Internally, setTitle does an equality check on + // the spannable string being set to the text already set on the preference. That + // equality check apparently only takes into account the raw text and not and spannables + // that are part of the text. So we clear the title before applying the spannable + // footer to ensure it is accepted. + preference.setTitle(""); + preference.setTitle(getFooterText()); + } + } + + private CharSequence getFooterText() { + final Intent helpIntent = HelpUtils.getHelpIntent(mContext, + mContext.getString(R.string.help_uri_wifi_calling), + mContext.getClass().getName()); + final AnnotationSpan.LinkInfo linkInfo = new AnnotationSpan.LinkInfo(mContext, + "url", helpIntent); + + return AnnotationSpan.linkify(mContext.getText(R.string.calls_sms_footnote), linkInfo); + } + + @Override + public int getAvailabilityStatus() { + final SubscriptionManager subscriptionManager = + mContext.getSystemService(SubscriptionManager.class); + final List subscriptions = SubscriptionUtil.getActiveSubscriptions( + subscriptionManager); + if (subscriptions.size() >= 1) { + return AVAILABLE; + } else { + return CONDITIONALLY_UNAVAILABLE; + } + } +} diff --git a/src/com/android/settings/network/telephony/NetworkProviderWifiCallingPreferenceController.java b/src/com/android/settings/network/telephony/NetworkProviderWifiCallingPreferenceController.java index f49a322e286..7a0ac1489cc 100644 --- a/src/com/android/settings/network/telephony/NetworkProviderWifiCallingPreferenceController.java +++ b/src/com/android/settings/network/telephony/NetworkProviderWifiCallingPreferenceController.java @@ -17,7 +17,6 @@ package com.android.settings.network.telephony; import android.content.Context; -import android.telephony.CarrierConfigManager; import androidx.annotation.VisibleForTesting; import androidx.preference.Preference;