diff --git a/res/values/strings.xml b/res/values/strings.xml index 951f2e1016e..f9a16b1f2fa 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -5258,10 +5258,18 @@ Tap items on your screen to hear them read aloud Caption preferences + + About caption preferences + + Learn more about caption preferences Magnification Magnification shortcut + + About magnification + + Learn more about magnification Magnification type @@ -5412,6 +5420,12 @@ Accessibility button Accessibility button & gesture + + About accessibility button + + About accessibility button & gesture + + Learn more about accessibility button & gesture Using the accessibility button. The gesture isn\u2019t available with 3-button navigation. @@ -5473,6 +5487,10 @@ 2 minutes Time to take action (Accessibility timeout) + + About time to take action (Accessibility timeout) + + Learn more about time to take action (Accessibility timeout) Time to take action @@ -5499,6 +5517,10 @@ Autoclick (dwell timing) + + About autoclick (dwell timing) + + Learn more about autoclick (dwell timing) Autoclick works with a connected mouse. You can set the mouse cursor to click automatically when the cursor stops moving for a certain amount of time. @@ -5539,6 +5561,14 @@ Use color correction Color correction shortcut + + About color correction + + Learn more about color correction + + About color inversion + + Learn more about color inversion Show captions @@ -5620,6 +5650,8 @@ Make screen extra dim Extra dim shortcut + + About extra dim Dim screen beyond your phone\u2019s minimum brightness diff --git a/src/com/android/settings/accessibility/AccessibilityButtonFooterPreferenceController.java b/src/com/android/settings/accessibility/AccessibilityButtonFooterPreferenceController.java index de90374c393..044c9d7ba00 100644 --- a/src/com/android/settings/accessibility/AccessibilityButtonFooterPreferenceController.java +++ b/src/com/android/settings/accessibility/AccessibilityButtonFooterPreferenceController.java @@ -33,8 +33,14 @@ public class AccessibilityButtonFooterPreferenceController extends } @Override - protected String getLabelName() { - return mContext.getString(R.string.accessibility_button_title); + protected String getLearnMoreContentDescription() { + return mContext.getString( + R.string.accessibility_button_gesture_footer_learn_more_content_description); + } + + @Override + protected String getIntroductionTitle() { + return mContext.getString(R.string.accessibility_button_about_title); } @Override diff --git a/src/com/android/settings/accessibility/AccessibilityControlTimeoutFooterPreferenceController.java b/src/com/android/settings/accessibility/AccessibilityControlTimeoutFooterPreferenceController.java index 0e65ac5b827..498b767a6dd 100644 --- a/src/com/android/settings/accessibility/AccessibilityControlTimeoutFooterPreferenceController.java +++ b/src/com/android/settings/accessibility/AccessibilityControlTimeoutFooterPreferenceController.java @@ -31,8 +31,14 @@ public class AccessibilityControlTimeoutFooterPreferenceController extends } @Override - protected String getLabelName() { - return mContext.getString(R.string.accessibility_setting_item_control_timeout_title); + protected String getLearnMoreContentDescription() { + return mContext.getString( + R.string.accessibility_control_timeout_footer_learn_more_content_description); + } + + @Override + protected String getIntroductionTitle() { + return mContext.getString(R.string.accessibility_control_timeout_about_title); } @Override diff --git a/src/com/android/settings/accessibility/AccessibilityFooterPreferenceController.java b/src/com/android/settings/accessibility/AccessibilityFooterPreferenceController.java index e3422e43fbd..08e5906105e 100644 --- a/src/com/android/settings/accessibility/AccessibilityFooterPreferenceController.java +++ b/src/com/android/settings/accessibility/AccessibilityFooterPreferenceController.java @@ -21,14 +21,18 @@ import android.content.Intent; import androidx.preference.PreferenceScreen; -import com.android.settings.R; import com.android.settings.core.BasePreferenceController; import com.android.settingslib.HelpUtils; /** - * Base class for accessibility preference footer. + * Preference controller that controls the help link and customizes the preference title in {@link + * AccessibilityFooterPreference}. */ -public abstract class AccessibilityFooterPreferenceController extends BasePreferenceController { +public class AccessibilityFooterPreferenceController extends BasePreferenceController { + + private int mHelpResource; + private String mLearnMoreContentDescription; + private String mIntroductionTitle; public AccessibilityFooterPreferenceController(Context context, String key) { super(context, key); @@ -49,23 +53,55 @@ public abstract class AccessibilityFooterPreferenceController extends BasePrefer } /** - * Override this if showing a help item in the footer bar, by returning the resource id. + * Setups a help item in the {@link AccessibilityFooterPreference} with specific content + * description. + */ + public void setupHelpLink(int helpResource, String learnMoreContentDescription) { + mHelpResource = helpResource; + mLearnMoreContentDescription = learnMoreContentDescription; + } + + /** + * Overrides this if showing a help item in the {@link AccessibilityFooterPreference}, by + * returning the resource id. * * @return the resource id for the help url */ protected int getHelpResource() { - return 0; + return mHelpResource; } - /** Returns the accessibility feature name. */ - protected abstract String getLabelName(); + /** + * Overrides this if showing a help item in the {@link AccessibilityFooterPreference} with + * specific content description. + * + * @return the content description for the help url + */ + protected String getLearnMoreContentDescription() { + return mLearnMoreContentDescription; + } + + /** + * Sets the announcement the specific features introduction in the {@link + * AccessibilityFooterPreference}. + */ + public void setIntroductionTitle(String introductionTitle) { + mIntroductionTitle = introductionTitle; + } + + /** + * Overrides this if announcement the specific features introduction in the {@link + * AccessibilityFooterPreference}. + * + * @return the extended content description for specific features introduction + */ + protected String getIntroductionTitle() { + return mIntroductionTitle; + } private void updateFooterPreferences(AccessibilityFooterPreference footerPreference) { final StringBuffer sb = new StringBuffer(); - sb.append(mContext.getString( - R.string.accessibility_introduction_title, getLabelName())) - .append("\n\n") - .append(footerPreference.getTitle()); + sb.append(getIntroductionTitle()).append("\n\n").append(footerPreference.getTitle()); footerPreference.setContentDescription(sb); if (getHelpResource() != 0) { @@ -75,10 +111,10 @@ public abstract class AccessibilityFooterPreferenceController extends BasePrefer mContext.getClass().getName()); view.startActivityForResult(helpIntent, 0); }); - - final String learnMoreContentDescription = mContext.getString( - R.string.footer_learn_more_content_description, getLabelName()); - footerPreference.setLearnMoreContentDescription(learnMoreContentDescription); + footerPreference.setLearnMoreContentDescription(getLearnMoreContentDescription()); + footerPreference.setLinkEnabled(true); + } else { + footerPreference.setLinkEnabled(false); } } } diff --git a/src/com/android/settings/accessibility/CaptionFooterPreferenceController.java b/src/com/android/settings/accessibility/CaptionFooterPreferenceController.java index 4e50b899d61..495d3951bac 100644 --- a/src/com/android/settings/accessibility/CaptionFooterPreferenceController.java +++ b/src/com/android/settings/accessibility/CaptionFooterPreferenceController.java @@ -30,12 +30,18 @@ public class CaptionFooterPreferenceController extends AccessibilityFooterPrefer } @Override - protected String getLabelName() { - return mContext.getString(R.string.accessibility_captioning_title); + protected String getLearnMoreContentDescription() { + return mContext.getString( + R.string.accessibility_captioning_footer_learn_more_content_description); } @Override - protected int getHelpResource() { + protected String getIntroductionTitle() { + return mContext.getString(R.string.accessibility_captioning_about_title); + } + + @Override + protected int getHelpResource() { return R.string.help_url_caption; } } diff --git a/src/com/android/settings/accessibility/ToggleAutoclickFooterPreferenceController.java b/src/com/android/settings/accessibility/ToggleAutoclickFooterPreferenceController.java index 053fa9dc18e..962ffece229 100644 --- a/src/com/android/settings/accessibility/ToggleAutoclickFooterPreferenceController.java +++ b/src/com/android/settings/accessibility/ToggleAutoclickFooterPreferenceController.java @@ -31,8 +31,14 @@ public class ToggleAutoclickFooterPreferenceController extends } @Override - protected String getLabelName() { - return mContext.getString(R.string.accessibility_autoclick_preference_title); + protected String getLearnMoreContentDescription() { + return mContext.getString( + R.string.accessibility_autoclick_footer_learn_more_content_description); + } + + @Override + protected String getIntroductionTitle() { + return mContext.getString(R.string.accessibility_autoclick_about_title); } @Override diff --git a/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragment.java index e06078558b7..419514f4ed4 100644 --- a/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragment.java @@ -38,8 +38,7 @@ import java.util.ArrayList; import java.util.List; /** Settings page for color inversion. */ -public class ToggleColorInversionPreferenceFragment extends - ToggleFeaturePreferenceFragment { +public class ToggleColorInversionPreferenceFragment extends ToggleFeaturePreferenceFragment { private static final String ENABLED = Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED; private final Handler mHandler = new Handler(); @@ -95,7 +94,20 @@ public class ToggleColorInversionPreferenceFragment extends updateSwitchBarToggleSwitch(); } }; - return super.onCreateView(inflater, container, savedInstanceState); + + final View view = super.onCreateView(inflater, container, savedInstanceState); + updateFooterPreference(); + return view; + } + + private void updateFooterPreference() { + final String title = getPrefContext().getString( + R.string.accessibility_color_inversion_about_title); + final String learnMoreContentDescription = getPrefContext().getString( + R.string.accessibility_color_inversion_footer_learn_more_content_description); + mFooterPreferenceController.setIntroductionTitle(title); + mFooterPreferenceController.setupHelpLink(getHelpResource(), learnMoreContentDescription); + mFooterPreferenceController.displayPreference(getPreferenceScreen()); } @Override diff --git a/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java index 7cf57b9ab77..c9449d24109 100644 --- a/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java @@ -92,12 +92,20 @@ public final class ToggleDaltonizerPreferenceFragment extends ToggleFeaturePrefe updateSwitchBarToggleSwitch(); } }; - return super.onCreateView(inflater, container, savedInstanceState); + + final View view = super.onCreateView(inflater, container, savedInstanceState); + updateFooterPreference(); + return view; } - @Override - public void onViewCreated(View view, Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); + private void updateFooterPreference() { + final String title = getPrefContext() + .getString(R.string.accessibility_daltonizer_about_title); + final String learnMoreContentDescription = getPrefContext() + .getString(R.string.accessibility_daltonizer_footer_learn_more_content_description); + mFooterPreferenceController.setIntroductionTitle(title); + mFooterPreferenceController.setupHelpLink(getHelpResource(), learnMoreContentDescription); + mFooterPreferenceController.displayPreference(getPreferenceScreen()); } /** Customizes the order by preference key. */ diff --git a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java index 1c807eb463f..7cefcedff28 100644 --- a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java @@ -57,7 +57,6 @@ import com.android.settings.accessibility.AccessibilityUtil.UserShortcutType; import com.android.settings.utils.LocaleUtils; import com.android.settings.widget.SettingsMainSwitchBar; import com.android.settings.widget.SettingsMainSwitchPreference; -import com.android.settingslib.HelpUtils; import com.android.settingslib.accessibility.AccessibilityUtils; import com.android.settingslib.widget.IllustrationPreference; import com.android.settingslib.widget.OnMainSwitchChangeListener; @@ -78,6 +77,7 @@ public abstract class ToggleFeaturePreferenceFragment extends SettingsPreference protected SettingsMainSwitchPreference mToggleServiceSwitchPreference; protected ShortcutPreference mShortcutPreference; protected Preference mSettingsPreference; + protected AccessibilityFooterPreferenceController mFooterPreferenceController; protected String mPreferenceKey; protected CharSequence mSettingsTitle; @@ -469,33 +469,19 @@ public abstract class ToggleFeaturePreferenceFragment extends SettingsPreference final PreferenceScreen screen = getPreferenceScreen(); final CharSequence htmlDescription = Html.fromHtml(mHtmlDescription.toString(), Html.FROM_HTML_MODE_COMPACT, mImageGetter, /* tagHandler= */ null); - final String iconContentDescription = - getString(R.string.accessibility_introduction_title, mPackageName); final AccessibilityFooterPreference htmlFooterPreference = new AccessibilityFooterPreference(screen.getContext()); htmlFooterPreference.setKey(KEY_HTML_DESCRIPTION_PREFERENCE); htmlFooterPreference.setSummary(htmlDescription); - htmlFooterPreference.setContentDescription( - generateFooterContentDescription(htmlDescription)); - - // Only framework tools support help link - if (getHelpResource() != 0) { - htmlFooterPreference.setLearnMoreAction(view -> { - final Intent helpIntent = HelpUtils.getHelpIntent( - getContext(), getContext().getString(getHelpResource()), - getContext().getClass().getName()); - view.startActivityForResult(helpIntent, 0); - }); - - final String learnMoreContentDescription = getPrefContext().getString( - R.string.footer_learn_more_content_description, mPackageName); - htmlFooterPreference.setLearnMoreContentDescription(learnMoreContentDescription); - htmlFooterPreference.setLinkEnabled(true); - } else { - htmlFooterPreference.setLinkEnabled(false); - } screen.addPreference(htmlFooterPreference); + + // TODO(b/171272809): Migrate to DashboardFragment. + final String title = getString(R.string.accessibility_introduction_title, mPackageName); + mFooterPreferenceController = new AccessibilityFooterPreferenceController( + screen.getContext(), htmlFooterPreference.getKey()); + mFooterPreferenceController.setIntroductionTitle(title); + mFooterPreferenceController.displayPreference(screen); } private void initFooterPreference() { @@ -518,41 +504,22 @@ public abstract class ToggleFeaturePreferenceFragment extends SettingsPreference * * @param screen The preference screen to add the footer preference * @param summary The summary of the preference summary. - * @param iconContentDescription The content description of icon in the footer. + * @param introductionTitle The title of introduction in the footer. */ @VisibleForTesting void createFooterPreference(PreferenceScreen screen, CharSequence summary, - String iconContentDescription) { + String introductionTitle) { final AccessibilityFooterPreference footerPreference = new AccessibilityFooterPreference(screen.getContext()); footerPreference.setSummary(summary); - footerPreference.setContentDescription( - generateFooterContentDescription(summary)); - - // Only framework tools support help link - if (getHelpResource() != 0) { - footerPreference.setLearnMoreAction(view -> { - final Intent helpIntent = HelpUtils.getHelpIntent( - getContext(), getContext().getString(getHelpResource()), - getContext().getClass().getName()); - view.startActivityForResult(helpIntent, 0); - }); - - final String learnMoreContentDescription = getPrefContext().getString( - R.string.footer_learn_more_content_description, mPackageName); - footerPreference.setLearnMoreContentDescription(learnMoreContentDescription); - } screen.addPreference(footerPreference); + + mFooterPreferenceController = new AccessibilityFooterPreferenceController( + screen.getContext(), footerPreference.getKey()); + mFooterPreferenceController.setIntroductionTitle(introductionTitle); + mFooterPreferenceController.displayPreference(screen); } - private CharSequence generateFooterContentDescription(CharSequence footerContent) { - final StringBuffer sb = new StringBuffer(); - sb.append(getPrefContext().getString( - R.string.accessibility_introduction_title, mPackageName)) - .append("\n\n") - .append(footerContent); - return sb; - } @VisibleForTesting void setupEditShortcutDialog(Dialog dialog) { final View dialogSoftwareView = dialog.findViewById(R.id.software_shortcut); diff --git a/src/com/android/settings/accessibility/ToggleReduceBrightColorsPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleReduceBrightColorsPreferenceFragment.java index 6fd2e1d81d0..81bd45a0541 100644 --- a/src/com/android/settings/accessibility/ToggleReduceBrightColorsPreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleReduceBrightColorsPreferenceFragment.java @@ -86,6 +86,7 @@ public class ToggleReduceBrightColorsPreferenceFragment extends ToggleFeaturePre // Parent sets the title when creating the view, so set it after calling super mToggleServiceSwitchPreference.setTitle(R.string.reduce_bright_colors_switch_title); updateGeneralCategoryOrder(); + updateFooterPreference(); return view; } @@ -101,6 +102,12 @@ public class ToggleReduceBrightColorsPreferenceFragment extends ToggleFeaturePre generalCategory.addPreference(persist); } + private void updateFooterPreference() { + final String title = getPrefContext().getString(R.string.reduce_bright_colors_about_title); + mFooterPreferenceController.setIntroductionTitle(title); + mFooterPreferenceController.displayPreference(getPreferenceScreen()); + } + @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); @@ -135,7 +142,6 @@ public class ToggleReduceBrightColorsPreferenceFragment extends ToggleFeaturePre return R.xml.reduce_bright_colors_settings; } - @Override protected void onPreferenceToggled(String preferenceKey, boolean enabled) { AccessibilityStatsLogUtils.logAccessibilityServiceEnabled(mComponentName, enabled); diff --git a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java index 6b02f04154c..4f25430e8d2 100644 --- a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java @@ -95,7 +95,20 @@ public class ToggleScreenMagnificationPreferenceFragment extends removeDialog(DialogEnums.EDIT_SHORTCUT); mShortcutPreference.setSummary(getShortcutTypeSummary(getPrefContext())); }; - return super.onCreateView(inflater, container, savedInstanceState); + + final View view = super.onCreateView(inflater, container, savedInstanceState); + updateFooterPreference(); + return view; + } + + private void updateFooterPreference() { + final String title = getPrefContext().getString( + R.string.accessibility_screen_magnification_about_title); + final String learnMoreContentDescription = getPrefContext().getString( + R.string.accessibility_screen_magnification_footer_learn_more_content_description); + mFooterPreferenceController.setIntroductionTitle(title); + mFooterPreferenceController.setupHelpLink(getHelpResource(), learnMoreContentDescription); + mFooterPreferenceController.displayPreference(getPreferenceScreen()); } @Override diff --git a/src/com/android/settings/applications/AppStateNotificationBridge.java b/src/com/android/settings/applications/AppStateNotificationBridge.java index c8bb5f9a667..3bcf94f3445 100644 --- a/src/com/android/settings/applications/AppStateNotificationBridge.java +++ b/src/com/android/settings/applications/AppStateNotificationBridge.java @@ -24,8 +24,10 @@ import android.os.UserManager; import android.text.format.DateUtils; import android.util.ArrayMap; import android.util.Log; +import android.util.Slog; import android.view.View; import android.view.ViewGroup; +import android.widget.CompoundButton; import android.widget.Switch; import com.android.settings.R; @@ -222,26 +224,18 @@ public class AppStateNotificationBridge extends AppStateBaseBridge { return userId + "|" + pkg; } - public View.OnClickListener getSwitchOnClickListener(final AppEntry entry) { - if (entry != null) { - return v -> { - ViewGroup view = (ViewGroup) v; - Switch toggle = view.findViewById(R.id.switchWidget); - if (toggle != null) { - if (!toggle.isEnabled()) { - return; - } - toggle.toggle(); - mBackend.setNotificationsEnabledForPackage( - entry.info.packageName, entry.info.uid, toggle.isChecked()); - NotificationsSentState stats = getNotificationsSentState(entry); - if (stats != null) { - stats.blocked = !toggle.isChecked(); - } - } - }; + public CompoundButton.OnCheckedChangeListener getSwitchOnCheckedListener(final AppEntry entry) { + if (entry == null) { + return null; } - return null; + return (buttonView, isChecked) -> { + mBackend.setNotificationsEnabledForPackage( + entry.info.packageName, entry.info.uid, isChecked); + NotificationsSentState stats = getNotificationsSentState(entry); + if (stats != null) { + stats.blocked = !isChecked; + } + }; } public static final AppFilter FILTER_APP_NOTIFICATION_RECENCY = new AppFilter() { diff --git a/src/com/android/settings/applications/manageapplications/ApplicationViewHolder.java b/src/com/android/settings/applications/manageapplications/ApplicationViewHolder.java index 9ef66010070..ef5b029a9d0 100644 --- a/src/com/android/settings/applications/manageapplications/ApplicationViewHolder.java +++ b/src/com/android/settings/applications/manageapplications/ApplicationViewHolder.java @@ -155,13 +155,13 @@ public class ApplicationViewHolder extends RecyclerView.ViewHolder { } } - void updateSwitch(View.OnClickListener listener, boolean enabled, boolean checked) { + void updateSwitch(Switch.OnCheckedChangeListener listener, boolean enabled, boolean checked) { if (mSwitch != null && mWidgetContainer != null) { - mWidgetContainer.setOnClickListener(listener); mWidgetContainer.setFocusable(false); mWidgetContainer.setClickable(false); mSwitch.setFocusable(true); mSwitch.setClickable(true); + mSwitch.setOnCheckedChangeListener(listener); mSwitch.setChecked(checked); mSwitch.setEnabled(enabled); } diff --git a/src/com/android/settings/applications/manageapplications/ManageApplications.java b/src/com/android/settings/applications/manageapplications/ManageApplications.java index 43e929b8054..edd4088a27f 100644 --- a/src/com/android/settings/applications/manageapplications/ManageApplications.java +++ b/src/com/android/settings/applications/manageapplications/ManageApplications.java @@ -1505,7 +1505,7 @@ public class ManageApplications extends InstrumentedFragment switch (mManageApplications.mListType) { case LIST_TYPE_NOTIFICATION: holder.updateSwitch(((AppStateNotificationBridge) mExtraInfoBridge) - .getSwitchOnClickListener(entry), + .getSwitchOnCheckedListener(entry), AppStateNotificationBridge.enableSwitch(entry), AppStateNotificationBridge.checkSwitch(entry)); if (entry.extraInfo != null diff --git a/src/com/android/settings/network/ProviderModelSliceHelper.java b/src/com/android/settings/network/ProviderModelSliceHelper.java index 6ecaae50aea..32a475a7d00 100644 --- a/src/com/android/settings/network/ProviderModelSliceHelper.java +++ b/src/com/android/settings/network/ProviderModelSliceHelper.java @@ -24,6 +24,8 @@ import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.net.Uri; +import android.telephony.AccessNetworkConstants; +import android.telephony.NetworkRegistrationInfo; import android.telephony.ServiceState; import android.telephony.SignalStrength; import android.telephony.SubscriptionInfo; @@ -106,7 +108,12 @@ public class ProviderModelSliceHelper { * @return whether the ServiceState's data state is in-service. */ public boolean isDataStateInService() { - return mTelephonyManager.getDataState() == mTelephonyManager.DATA_CONNECTED; + final ServiceState serviceState = mTelephonyManager.getServiceState(); + NetworkRegistrationInfo regInfo = + (serviceState == null) ? null : serviceState.getNetworkRegistrationInfo( + NetworkRegistrationInfo.DOMAIN_PS, + AccessNetworkConstants.TRANSPORT_TYPE_WWAN); + return (regInfo == null) ? false : regInfo.isRegistered(); } /** diff --git a/src/com/android/settings/network/SubscriptionsPreferenceController.java b/src/com/android/settings/network/SubscriptionsPreferenceController.java index 7c0fc29736a..8e9e946820c 100644 --- a/src/com/android/settings/network/SubscriptionsPreferenceController.java +++ b/src/com/android/settings/network/SubscriptionsPreferenceController.java @@ -31,6 +31,8 @@ import android.graphics.drawable.Drawable; import android.net.wifi.WifiManager; import android.os.UserManager; import android.provider.Settings; +import android.telephony.AccessNetworkConstants; +import android.telephony.NetworkRegistrationInfo; import android.telephony.ServiceState; import android.telephony.SignalStrength; import android.telephony.SubscriptionInfo; @@ -274,9 +276,16 @@ public class SubscriptionsPreferenceController extends AbstractPreferenceControl if (!tmForSubId.isDataEnabled()) { return mContext.getString(R.string.mobile_data_off_summary); } + final ServiceState serviceState = tmForSubId.getServiceState(); + final NetworkRegistrationInfo regInfo = (serviceState == null) + ? null + : serviceState.getNetworkRegistrationInfo( + NetworkRegistrationInfo.DOMAIN_PS, + AccessNetworkConstants.TRANSPORT_TYPE_WWAN); - final boolean isDataInService = tmForSubId.getDataState() - == TelephonyManager.DATA_CONNECTED; + final boolean isDataInService = (regInfo == null) + ? false + : regInfo.isRegistered(); final boolean isCarrierNetworkActive = (mWifiPickerTrackerHelper != null) && mWifiPickerTrackerHelper.isCarrierNetworkActive(); @@ -311,9 +320,16 @@ public class SubscriptionsPreferenceController extends AbstractPreferenceControl return icon; } - final boolean isDataInService = tmForSubId.getDataState() - == TelephonyManager.DATA_CONNECTED; final ServiceState serviceState = tmForSubId.getServiceState(); + final NetworkRegistrationInfo regInfo = (serviceState == null) + ? null + : serviceState.getNetworkRegistrationInfo( + NetworkRegistrationInfo.DOMAIN_PS, + AccessNetworkConstants.TRANSPORT_TYPE_WWAN); + + final boolean isDataInService = (regInfo == null) + ? false + : regInfo.isRegistered(); final boolean isVoiceInService = (serviceState == null) ? false : (serviceState.getState() == ServiceState.STATE_IN_SERVICE); diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilityFooterPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilityFooterPreferenceControllerTest.java new file mode 100644 index 00000000000..d6c8d996a16 --- /dev/null +++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilityFooterPreferenceControllerTest.java @@ -0,0 +1,124 @@ +/* + * Copyright (C) 2021 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.accessibility; + +import static com.google.common.truth.Truth.assertThat; + +import static org.mockito.Mockito.when; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.TextView; + +import androidx.preference.PreferenceScreen; +import androidx.preference.PreferenceViewHolder; +import androidx.test.core.app.ApplicationProvider; + +import com.android.settings.R; + +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.Spy; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; +import org.robolectric.RobolectricTestRunner; + +/** + * Tests for {@link AccessibilityFooterPreferenceController}. + */ +@RunWith(RobolectricTestRunner.class) +public class AccessibilityFooterPreferenceControllerTest { + + private static final String TEST_KEY = "test_pref_key"; + private static final String TEST_TITLE = "test_title"; + private static final String TEST_INTRODUCTION_TITLE = "test_introduction_title"; + private static final String TEST_CONTENT_DESCRIPTION = "test_content_description"; + private static final int TEST_HELP_ID = 12345; + + @Rule + public final MockitoRule mockito = MockitoJUnit.rule(); + + @Spy + private final Context mContext = ApplicationProvider.getApplicationContext(); + @Mock + private PreferenceScreen mScreen; + private AccessibilityFooterPreferenceController mController; + private AccessibilityFooterPreference mPreference; + private PreferenceViewHolder mPreferenceViewHolder; + + @Before + public void setUp() { + mController = new AccessibilityFooterPreferenceController(mContext, TEST_KEY); + mPreference = new AccessibilityFooterPreference(mContext); + mPreference.setKey(TEST_KEY); + mPreference.setTitle(TEST_TITLE); + + final LayoutInflater inflater = LayoutInflater.from(mContext); + final View view = inflater.inflate(R.layout.preference_footer, null); + mPreferenceViewHolder = PreferenceViewHolder.createInstanceForTests(view); + mPreference.onBindViewHolder(mPreferenceViewHolder); + + when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference); + } + + @Test + public void setIntroductionTitle_setCorrectIntroductionTitle() { + mController.setIntroductionTitle(TEST_INTRODUCTION_TITLE); + + assertThat(mController.getIntroductionTitle()).isEqualTo(TEST_INTRODUCTION_TITLE); + } + + @Test + public void onBindViewHolder_setIntroductionTitle_setCorrectIntroductionTitle() { + mController.setIntroductionTitle(TEST_INTRODUCTION_TITLE); + mController.displayPreference(mScreen); + + mPreference.onBindViewHolder(mPreferenceViewHolder); + + final TextView summaryView = (TextView) mPreferenceViewHolder + .findViewById(android.R.id.title); + assertThat(summaryView.getContentDescription().toString()) + .contains(TEST_INTRODUCTION_TITLE); + } + + @Test + public void setupHelpLink_setCorrectHelpLinkAndContentDescription() { + mController.setupHelpLink(TEST_HELP_ID, TEST_CONTENT_DESCRIPTION); + + assertThat(mController.getHelpResource()).isEqualTo(TEST_HELP_ID); + assertThat(mController.getLearnMoreContentDescription()) + .isEqualTo(TEST_CONTENT_DESCRIPTION); + } + + @Test + public void onBindViewHolder_setupHelpLink_setCorrectHelpLinkAndContentDescription() { + mController.setupHelpLink(TEST_HELP_ID, TEST_CONTENT_DESCRIPTION); + mController.displayPreference(mScreen); + + mPreference.onBindViewHolder(mPreferenceViewHolder); + + final TextView learnMoreView = (TextView) mPreferenceViewHolder + .findViewById(com.android.settingslib.R.id.settingslib_learn_more); + assertThat(learnMoreView.getContentDescription().toString()) + .contains(TEST_CONTENT_DESCRIPTION); + assertThat(mPreference.isLinkEnabled()).isTrue(); + } +} diff --git a/tests/robotests/src/com/android/settings/applications/AppStateNotificationBridgeTest.java b/tests/robotests/src/com/android/settings/applications/AppStateNotificationBridgeTest.java index e59361e0981..21a2947e547 100644 --- a/tests/robotests/src/com/android/settings/applications/AppStateNotificationBridgeTest.java +++ b/tests/robotests/src/com/android/settings/applications/AppStateNotificationBridgeTest.java @@ -53,6 +53,7 @@ import android.os.RemoteException; import android.os.UserHandle; import android.os.UserManager; import android.view.ViewGroup; +import android.widget.CompoundButton; import android.widget.Switch; import com.android.settings.R; @@ -550,12 +551,10 @@ public class AppStateNotificationBridgeTest { } @Test - public void testSwitchOnClickListener() { - ViewGroup parent = mock(ViewGroup.class); + public void testSwitchOnChangeListener() { Switch toggle = mock(Switch.class); when(toggle.isChecked()).thenReturn(true); when(toggle.isEnabled()).thenReturn(true); - when(parent.findViewById(anyInt())).thenReturn(toggle); AppEntry entry = mock(AppEntry.class); entry.info = new ApplicationInfo(); @@ -563,10 +562,9 @@ public class AppStateNotificationBridgeTest { entry.info.uid = 1356; entry.extraInfo = new NotificationsSentState(); - ViewGroup.OnClickListener listener = mBridge.getSwitchOnClickListener(entry); - listener.onClick(parent); + CompoundButton.OnCheckedChangeListener listener = mBridge.getSwitchOnCheckedListener(entry); + listener.onCheckedChanged(toggle, true); - verify(toggle).toggle(); verify(mBackend).setNotificationsEnabledForPackage( entry.info.packageName, entry.info.uid, true); assertThat(((NotificationsSentState) entry.extraInfo).blocked).isFalse(); diff --git a/tests/robotests/src/com/android/settings/applications/manageapplications/ApplicationViewHolderTest.java b/tests/robotests/src/com/android/settings/applications/manageapplications/ApplicationViewHolderTest.java index 0e7d1bd71c4..be01a8acb02 100644 --- a/tests/robotests/src/com/android/settings/applications/manageapplications/ApplicationViewHolderTest.java +++ b/tests/robotests/src/com/android/settings/applications/manageapplications/ApplicationViewHolderTest.java @@ -35,6 +35,8 @@ import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; +import java.util.concurrent.CountDownLatch; + @RunWith(RobolectricTestRunner.class) public class ApplicationViewHolderTest { @@ -123,13 +125,16 @@ public class ApplicationViewHolderTest { @Test public void updateSwitch() { + final CountDownLatch latch = new CountDownLatch(1); mView = ApplicationViewHolder.newView(new FrameLayout(mContext), true); mHolder = new ApplicationViewHolder(mView); - mHolder.updateSwitch(v -> { - } /* listener */, true, true); + mHolder.updateSwitch((buttonView, isChecked) -> latch.countDown(), true, true); assertThat(mHolder.mSwitch.isChecked()).isTrue(); assertThat(mHolder.mSwitch.isEnabled()).isTrue(); - assertThat(mHolder.mWidgetContainer.hasOnClickListeners()).isTrue(); + assertThat(mHolder.mSwitch.isFocusable()).isTrue(); + assertThat(mHolder.mSwitch.isClickable()).isTrue(); + mHolder.mSwitch.callOnClick(); + assertThat(latch.getCount()).isEqualTo(0); } } diff --git a/tests/unit/src/com/android/settings/network/ProviderModelSliceHelperTest.java b/tests/unit/src/com/android/settings/network/ProviderModelSliceHelperTest.java index bfb3d0c510b..7d4323051c3 100644 --- a/tests/unit/src/com/android/settings/network/ProviderModelSliceHelperTest.java +++ b/tests/unit/src/com/android/settings/network/ProviderModelSliceHelperTest.java @@ -35,7 +35,9 @@ import android.net.NetworkCapabilities; import android.net.Uri; import android.net.wifi.WifiManager; import android.os.PersistableBundle; +import android.telephony.AccessNetworkConstants; import android.telephony.CarrierConfigManager; +import android.telephony.NetworkRegistrationInfo; import android.telephony.ServiceState; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; @@ -169,7 +171,7 @@ public class ProviderModelSliceHelperTest { CharSequence expectedSubtitle = Html.fromHtml("5G", Html.FROM_HTML_MODE_LEGACY); String networkType = "5G"; mockConnections(true, ServiceState.STATE_IN_SERVICE, expectDisplayName, - mTelephonyManager.DATA_CONNECTED, true); + true, true); addNetworkTransportType(NetworkCapabilities.TRANSPORT_WIFI); ListBuilder.RowBuilder testRowBuild = mProviderModelSliceHelper.createCarrierRow( @@ -189,7 +191,7 @@ public class ProviderModelSliceHelperTest { "preference_summary_default_combination", connectedText, networkType), Html.FROM_HTML_MODE_LEGACY); mockConnections(true, ServiceState.STATE_IN_SERVICE, expectDisplayName, - mTelephonyManager.DATA_CONNECTED, true); + true, true); addNetworkTransportType(NetworkCapabilities.TRANSPORT_CELLULAR); ListBuilder.RowBuilder testRowBuild = mProviderModelSliceHelper.createCarrierRow( @@ -208,7 +210,7 @@ public class ProviderModelSliceHelperTest { String networkType = ""; mockConnections(true, ServiceState.STATE_OUT_OF_SERVICE, expectDisplayName, - mTelephonyManager.DATA_DISCONNECTED, false); + false, false); addNetworkTransportType(NetworkCapabilities.TRANSPORT_CELLULAR); ListBuilder.RowBuilder testRowBuild = mProviderModelSliceHelper.createCarrierRow( @@ -221,7 +223,7 @@ public class ProviderModelSliceHelperTest { @Test public void getMobileDrawable_noCarrierData_getMobileDrawable() throws Throwable { mockConnections(false, ServiceState.STATE_OUT_OF_SERVICE, "", - mTelephonyManager.DATA_DISCONNECTED, true); + false, true); when(mConnectivityManager.getActiveNetwork()).thenReturn(null); Drawable expectDrawable = mock(Drawable.class); @@ -232,7 +234,7 @@ public class ProviderModelSliceHelperTest { @Test public void getMobileDrawable_hasCarrierDataAndDataIsOnCellular_getMobileDrawable() throws Throwable { - mockConnections(true, ServiceState.STATE_IN_SERVICE, "", mTelephonyManager.DATA_CONNECTED, + mockConnections(true, ServiceState.STATE_IN_SERVICE, "", true, true); addNetworkTransportType(NetworkCapabilities.TRANSPORT_CELLULAR); Drawable drawable = mock(Drawable.class); @@ -246,7 +248,7 @@ public class ProviderModelSliceHelperTest { @Test public void getMobileDrawable_hasCarrierDataAndDataIsOnWifi_getMobileDrawable() throws Throwable { - mockConnections(true, ServiceState.STATE_IN_SERVICE, "", mTelephonyManager.DATA_CONNECTED, + mockConnections(true, ServiceState.STATE_IN_SERVICE, "", true, true); Drawable drawable = mock(Drawable.class); addNetworkTransportType(NetworkCapabilities.TRANSPORT_WIFI); @@ -263,12 +265,22 @@ public class ProviderModelSliceHelperTest { } private void mockConnections(boolean isDataEnabled, int serviceState, String expectDisplayName, - int getDataState, boolean isWifiEnabled) { + boolean dataRegState, boolean isWifiEnabled) { when(mTelephonyManager.isDataEnabled()).thenReturn(isDataEnabled); when(mWifiManager.isWifiEnabled()).thenReturn(isWifiEnabled); - when(mTelephonyManager.getDataState()).thenReturn(getDataState); when(mServiceState.getState()).thenReturn(serviceState); + + NetworkRegistrationInfo regInfo = new NetworkRegistrationInfo.Builder() + .setDomain(NetworkRegistrationInfo.DOMAIN_PS) + .setTransportType(AccessNetworkConstants.TRANSPORT_TYPE_WWAN) + .setRegistrationState(dataRegState ? NetworkRegistrationInfo.REGISTRATION_STATE_HOME + : NetworkRegistrationInfo.REGISTRATION_STATE_NOT_REGISTERED_SEARCHING) + .setAccessNetworkTechnology(TelephonyManager.NETWORK_TYPE_LTE) + .build(); + when(mServiceState.getNetworkRegistrationInfo(NetworkRegistrationInfo.DOMAIN_PS, + AccessNetworkConstants.TRANSPORT_TYPE_WWAN)).thenReturn(regInfo); + when(mDefaultDataSubscriptionInfo.getDisplayName()).thenReturn(expectDisplayName); } diff --git a/tests/unit/src/com/android/settings/network/SubscriptionsPreferenceControllerTest.java b/tests/unit/src/com/android/settings/network/SubscriptionsPreferenceControllerTest.java index a955020e7cd..cb78d19714c 100644 --- a/tests/unit/src/com/android/settings/network/SubscriptionsPreferenceControllerTest.java +++ b/tests/unit/src/com/android/settings/network/SubscriptionsPreferenceControllerTest.java @@ -42,6 +42,8 @@ import android.net.NetworkCapabilities; import android.os.Looper; import android.os.UserManager; import android.provider.Settings; +import android.telephony.AccessNetworkConstants; +import android.telephony.NetworkRegistrationInfo; import android.telephony.ServiceState; import android.telephony.SignalStrength; import android.telephony.SubscriptionInfo; @@ -430,7 +432,7 @@ public class SubscriptionsPreferenceControllerTest { doReturn(true).when(sInjector).isProviderModelEnabled(mContext); doReturn(sub.get(0)).when(mSubscriptionManager).getDefaultDataSubscriptionInfo(); setupGetIconConditions(sub.get(0).getSubscriptionId(), true, true, - TelephonyManager.DATA_CONNECTED, ServiceState.STATE_IN_SERVICE); + true, ServiceState.STATE_IN_SERVICE); doReturn(mock(MobileMappings.Config.class)).when(sInjector).getConfig(mContext); doReturn(networkType) .when(sInjector).getNetworkType(any(), any(), any(), anyInt(), eq(false)); @@ -451,7 +453,7 @@ public class SubscriptionsPreferenceControllerTest { doReturn(true).when(sInjector).isProviderModelEnabled(mContext); doReturn(sub.get(0)).when(mSubscriptionManager).getDefaultDataSubscriptionInfo(); setupGetIconConditions(sub.get(0).getSubscriptionId(), false, true, - TelephonyManager.DATA_CONNECTED, ServiceState.STATE_IN_SERVICE); + true, ServiceState.STATE_IN_SERVICE); doReturn(mock(MobileMappings.Config.class)).when(sInjector).getConfig(mContext); doReturn(networkType) .when(sInjector).getNetworkType(any(), any(), any(), anyInt(), eq(true)); @@ -476,7 +478,7 @@ public class SubscriptionsPreferenceControllerTest { doReturn(true).when(sInjector).isProviderModelEnabled(mContext); doReturn(sub.get(0)).when(mSubscriptionManager).getDefaultDataSubscriptionInfo(); setupGetIconConditions(sub.get(0).getSubscriptionId(), false, false, - TelephonyManager.DATA_CONNECTED, ServiceState.STATE_IN_SERVICE); + true, ServiceState.STATE_IN_SERVICE); doReturn(networkType) .when(sInjector).getNetworkType(any(), any(), any(), anyInt(), eq(false)); @@ -496,7 +498,7 @@ public class SubscriptionsPreferenceControllerTest { doReturn(true).when(sInjector).isProviderModelEnabled(mContext); doReturn(sub.get(0)).when(mSubscriptionManager).getDefaultDataSubscriptionInfo(); setupGetIconConditions(sub.get(0).getSubscriptionId(), false, true, - TelephonyManager.DATA_CONNECTED, ServiceState.STATE_IN_SERVICE); + true, ServiceState.STATE_IN_SERVICE); doReturn(networkType) .when(sInjector).getNetworkType(any(), any(), any(), anyInt(), eq(false)); when(mTelephonyManager.isDataEnabled()).thenReturn(true); @@ -532,7 +534,7 @@ public class SubscriptionsPreferenceControllerTest { doReturn(true).when(sInjector).isProviderModelEnabled(mContext); doReturn(sub.get(0)).when(mSubscriptionManager).getDefaultDataSubscriptionInfo(); setupGetIconConditions(sub.get(0).getSubscriptionId(), true, true, - TelephonyManager.DATA_CONNECTED, ServiceState.STATE_IN_SERVICE); + true, ServiceState.STATE_IN_SERVICE); doReturn(mock(MobileMappings.Config.class)).when(sInjector).getConfig(mContext); doReturn(networkType) .when(sInjector).getNetworkType(any(), any(), any(), anyInt(), eq(false)); @@ -558,7 +560,7 @@ public class SubscriptionsPreferenceControllerTest { doReturn(true).when(sInjector).isProviderModelEnabled(mContext); doReturn(sub.get(0)).when(mSubscriptionManager).getDefaultDataSubscriptionInfo(); setupGetIconConditions(sub.get(0).getSubscriptionId(), false, true, - TelephonyManager.DATA_CONNECTED, ServiceState.STATE_IN_SERVICE); + true, ServiceState.STATE_IN_SERVICE); doReturn(mock(MobileMappings.Config.class)).when(sInjector).getConfig(mContext); doReturn(networkType) .when(sInjector).getNetworkType(any(), any(), any(), anyInt(), eq(false)); @@ -585,7 +587,7 @@ public class SubscriptionsPreferenceControllerTest { doReturn(true).when(sInjector).isProviderModelEnabled(mContext); doReturn(sub.get(0)).when(mSubscriptionManager).getDefaultDataSubscriptionInfo(); setupGetIconConditions(sub.get(0).getSubscriptionId(), false, true, - TelephonyManager.DATA_DISCONNECTED, ServiceState.STATE_OUT_OF_SERVICE); + false, ServiceState.STATE_OUT_OF_SERVICE); doReturn(mock(MobileMappings.Config.class)).when(sInjector).getConfig(mContext); doReturn(networkType) .when(sInjector).getNetworkType(any(), any(), any(), anyInt(), eq(false)); @@ -665,7 +667,7 @@ public class SubscriptionsPreferenceControllerTest { Drawable icon = mock(Drawable.class); doReturn(icon).when(sInjector).getIcon(any(), anyInt(), anyInt(), eq(false)); setupGetIconConditions(sub.get(0).getSubscriptionId(), true, true, - TelephonyManager.DATA_CONNECTED, ServiceState.STATE_IN_SERVICE); + true, ServiceState.STATE_IN_SERVICE); mController.onResume(); mController.displayPreference(mPreferenceScreen); @@ -683,7 +685,7 @@ public class SubscriptionsPreferenceControllerTest { Drawable icon = mock(Drawable.class); doReturn(icon).when(sInjector).getIcon(any(), anyInt(), anyInt(), eq(false)); setupGetIconConditions(subId, false, true, - TelephonyManager.DATA_CONNECTED, ServiceState.STATE_IN_SERVICE); + true, ServiceState.STATE_IN_SERVICE); mController.onResume(); mController.displayPreference(mPreferenceScreen); Drawable actualIcon = mPreferenceCategory.getPreference(0).getIcon(); @@ -702,12 +704,22 @@ public class SubscriptionsPreferenceControllerTest { doReturn(icon).when(sInjector).getIcon(any(), anyInt(), anyInt(), eq(false)); setupGetIconConditions(subId, false, false, - TelephonyManager.DATA_DISCONNECTED, ServiceState.STATE_IN_SERVICE); + false, ServiceState.STATE_IN_SERVICE); mController.onResume(); mController.displayPreference(mPreferenceScreen); Drawable actualIcon = mPreferenceCategory.getPreference(0).getIcon(); - doReturn(TelephonyManager.DATA_CONNECTED).when(mTelephonyManagerForSub).getDataState(); + ServiceState ss = mock(ServiceState.class); + NetworkRegistrationInfo regInfo = new NetworkRegistrationInfo.Builder() + .setDomain(NetworkRegistrationInfo.DOMAIN_PS) + .setTransportType(AccessNetworkConstants.TRANSPORT_TYPE_WWAN) + .setRegistrationState(NetworkRegistrationInfo.REGISTRATION_STATE_HOME) + .setAccessNetworkTechnology(TelephonyManager.NETWORK_TYPE_LTE) + .build(); + doReturn(ss).when(mTelephonyManagerForSub).getServiceState(); + doReturn(regInfo).when(ss).getNetworkRegistrationInfo( + NetworkRegistrationInfo.DOMAIN_PS, + AccessNetworkConstants.TRANSPORT_TYPE_WWAN); assertThat(icon).isEqualTo(actualIcon); } @@ -733,14 +745,23 @@ public class SubscriptionsPreferenceControllerTest { } private void setupGetIconConditions(int subId, boolean isActiveCellularNetwork, - boolean isDataEnable, int dataState, int servicestate) { + boolean isDataEnable, boolean dataState, int servicestate) { doReturn(mTelephonyManagerForSub).when(mTelephonyManager).createForSubscriptionId(subId); doReturn(isActiveCellularNetwork).when(sInjector).isActiveCellularNetwork(mContext); doReturn(isDataEnable).when(mTelephonyManagerForSub).isDataEnabled(); - doReturn(dataState).when(mTelephonyManagerForSub).getDataState(); ServiceState ss = mock(ServiceState.class); + NetworkRegistrationInfo regInfo = new NetworkRegistrationInfo.Builder() + .setDomain(NetworkRegistrationInfo.DOMAIN_PS) + .setTransportType(AccessNetworkConstants.TRANSPORT_TYPE_WWAN) + .setRegistrationState(dataState ? NetworkRegistrationInfo.REGISTRATION_STATE_HOME + : NetworkRegistrationInfo.REGISTRATION_STATE_NOT_REGISTERED_SEARCHING) + .setAccessNetworkTechnology(TelephonyManager.NETWORK_TYPE_LTE) + .build(); doReturn(ss).when(mTelephonyManagerForSub).getServiceState(); doReturn(servicestate).when(ss).getState(); + doReturn(regInfo).when(ss).getNetworkRegistrationInfo( + NetworkRegistrationInfo.DOMAIN_PS, + AccessNetworkConstants.TRANSPORT_TYPE_WWAN); } private List setupMockSubscriptions(int count) {