From 5d85dfb1234f5a3e9cfe14fc4d68ddf568a9603f Mon Sep 17 00:00:00 2001 From: Lei Yu Date: Thu, 18 Apr 2019 11:22:36 -0700 Subject: [PATCH 01/10] Add mms preference and controller Only visible when it is metered and mobile data off. Also refactor one mobile data observer so we can reuse it. Bug: 130222866 Test: RunSettingsRoboTests Change-Id: Id218f51da3c373fad98c1a39cfadd6b0e8c46a88 --- res/values/strings.xml | 4 + res/xml/mobile_network_settings_v2.xml | 6 + .../network/MobileDataContentObserver.java | 72 ++++++++++ .../MmsMessagePreferenceController.java | 106 +++++++++++++++ .../MobileDataPreferenceController.java | 40 +----- .../network/telephony/MobileDataSlice.java | 3 +- .../telephony/MobileNetworkSettings.java | 1 + .../MmsMessagePreferenceControllerTest.java | 123 ++++++++++++++++++ 8 files changed, 318 insertions(+), 37 deletions(-) create mode 100644 src/com/android/settings/network/MobileDataContentObserver.java create mode 100644 src/com/android/settings/network/telephony/MmsMessagePreferenceController.java create mode 100644 tests/robotests/src/com/android/settings/network/telephony/MmsMessagePreferenceControllerTest.java diff --git a/res/values/strings.xml b/res/values/strings.xml index d5b0ae6df61..e160f8ecf3e 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -6994,6 +6994,10 @@ Preferred network type LTE (recommended) + + MMS messages + + Send & receive when mobile data is off Work SIM diff --git a/res/xml/mobile_network_settings_v2.xml b/res/xml/mobile_network_settings_v2.xml index e7cc1dcd987..6682437bc74 100644 --- a/res/xml/mobile_network_settings_v2.xml +++ b/res/xml/mobile_network_settings_v2.xml @@ -73,6 +73,12 @@ android:title="@string/billing_cycle" settings:controller="com.android.settings.datausage.BillingCyclePreferenceController" /> + + 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); + } +} diff --git a/src/com/android/settings/network/telephony/MobileDataPreferenceController.java b/src/com/android/settings/network/telephony/MobileDataPreferenceController.java index de54879abc2..a0e50fcbd80 100644 --- a/src/com/android/settings/network/telephony/MobileDataPreferenceController.java +++ b/src/com/android/settings/network/telephony/MobileDataPreferenceController.java @@ -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; @@ -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; @@ -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 @@ -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; @@ -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); - } - } } diff --git a/src/com/android/settings/network/telephony/MobileDataSlice.java b/src/com/android/settings/network/telephony/MobileDataSlice.java index 28cb11e248e..bf9fc044617 100644 --- a/src/com/android/settings/network/telephony/MobileDataSlice.java +++ b/src/com/android/settings/network/telephony/MobileDataSlice.java @@ -39,6 +39,7 @@ import androidx.slice.builders.SliceAction; import com.android.settings.R; import com.android.settings.Utils; import com.android.settings.network.AirplaneModePreferenceController; +import com.android.settings.network.MobileDataContentObserver; import com.android.settings.slices.CustomSliceRegistry; import com.android.settings.slices.CustomSliceable; import com.android.settings.slices.SliceBackgroundWorker; @@ -267,7 +268,7 @@ public class MobileDataSlice implements CustomSliceable { } public void register(Context context, int subId) { - final Uri uri = MobileDataPreferenceController.getObservableUri(subId); + final Uri uri = MobileDataContentObserver.getObservableUri(subId); context.getContentResolver().registerContentObserver(uri, false, this); } diff --git a/src/com/android/settings/network/telephony/MobileNetworkSettings.java b/src/com/android/settings/network/telephony/MobileNetworkSettings.java index 35787927481..db99258a57b 100644 --- a/src/com/android/settings/network/telephony/MobileNetworkSettings.java +++ b/src/com/android/settings/network/telephony/MobileNetworkSettings.java @@ -136,6 +136,7 @@ public class MobileNetworkSettings extends RestrictedDashboardFragment { use(MobileNetworkSwitchController.class).init(getLifecycle(), mSubId); use(CarrierSettingsVersionPreferenceController.class).init(mSubId); use(BillingCyclePreferenceController.class).init(mSubId); + use(MmsMessagePreferenceController.class).init(mSubId); } use(MobileDataPreferenceController.class).init(getFragmentManager(), mSubId); use(RoamingPreferenceController.class).init(getFragmentManager(), mSubId); diff --git a/tests/robotests/src/com/android/settings/network/telephony/MmsMessagePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/telephony/MmsMessagePreferenceControllerTest.java new file mode 100644 index 00000000000..0263fe9fdcd --- /dev/null +++ b/tests/robotests/src/com/android/settings/network/telephony/MmsMessagePreferenceControllerTest.java @@ -0,0 +1,123 @@ +/* + * 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 static com.android.settings.core.BasePreferenceController.AVAILABLE; +import static com.android.settings.core.BasePreferenceController.CONDITIONALLY_UNAVAILABLE; + +import static com.google.common.truth.Truth.assertThat; + +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import android.content.Context; +import android.telephony.SubscriptionManager; +import android.telephony.TelephonyManager; +import android.telephony.data.ApnSetting; + +import androidx.preference.SwitchPreference; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.robolectric.RobolectricTestRunner; +import org.robolectric.RuntimeEnvironment; +import org.robolectric.annotation.Config; +import org.robolectric.shadows.ShadowSubscriptionManager; + +@RunWith(RobolectricTestRunner.class) +@Config(shadows = ShadowSubscriptionManager.class) +public class MmsMessagePreferenceControllerTest { + private static final int SUB_ID = 2; + + @Mock + private TelephonyManager mTelephonyManager; + @Mock + private SubscriptionManager mSubscriptionManager; + + private MmsMessagePreferenceController mController; + private SwitchPreference mPreference; + private Context mContext; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + + mContext = spy(RuntimeEnvironment.application); + when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager); + when(mContext.getSystemService(Context.TELEPHONY_SERVICE)).thenReturn(mTelephonyManager); + when(mContext.getSystemService(SubscriptionManager.class)).thenReturn(mSubscriptionManager); + when(mTelephonyManager.createForSubscriptionId(SUB_ID)).thenReturn(mTelephonyManager); + + mPreference = new SwitchPreference(mContext); + mController = new MmsMessagePreferenceController(mContext, "mms_message"); + ShadowSubscriptionManager.setDefaultDataSubscriptionId(SUB_ID); + mController.init(SUB_ID); + mPreference.setKey(mController.getPreferenceKey()); + } + + @Test + public void getAvailabilityStatus_invalidSubscription_returnUnavailable() { + mController.init(SubscriptionManager.INVALID_SUBSCRIPTION_ID); + + assertThat(mController.getAvailabilityStatus()).isEqualTo(CONDITIONALLY_UNAVAILABLE); + } + + @Test + public void getAvailabilityStatus_mobileDataOn_returnUnavailable() { + when(mTelephonyManager.isDataEnabled()).thenReturn(true); + + assertThat(mController.getAvailabilityStatus(SUB_ID)).isEqualTo(CONDITIONALLY_UNAVAILABLE); + } + + @Test + public void getAvailabilityStatus_meteredOff_returnUnavailable() { + when(mTelephonyManager.isApnMetered(ApnSetting.TYPE_MMS)).thenReturn(false); + + assertThat(mController.getAvailabilityStatus(SUB_ID)).isEqualTo(CONDITIONALLY_UNAVAILABLE); + } + + @Test + public void getAvailabilityStatus_mobileDataOffWithValidSubId_returnAvailable() { + mController.init(SUB_ID); + when(mTelephonyManager.isDataEnabled()).thenReturn(false); + when(mTelephonyManager.isApnMetered(ApnSetting.TYPE_MMS)).thenReturn(true); + + assertThat(mController.getAvailabilityStatus(SUB_ID)).isEqualTo(AVAILABLE); + } + + @Test + public void isChecked_returnDataFromTelephonyManager() { + when(mTelephonyManager.isDataEnabledForApn(ApnSetting.TYPE_MMS)).thenReturn(false); + assertThat(mController.isChecked()).isFalse(); + + when(mTelephonyManager.isDataEnabledForApn(ApnSetting.TYPE_MMS)).thenReturn(true); + assertThat(mController.isChecked()).isTrue(); + } + + @Test + public void setChecked_setDataIntoSubscriptionManager() { + mController.setChecked(true); + verify(mSubscriptionManager).setAlwaysAllowMmsData(SUB_ID, true); + + mController.setChecked(false); + verify(mSubscriptionManager).setAlwaysAllowMmsData(SUB_ID, false); + } +} From acb617855a809b8177720548f08966717d46028f Mon Sep 17 00:00:00 2001 From: Lei Yu Date: Fri, 19 Apr 2019 13:09:30 -0700 Subject: [PATCH 02/10] Remove feature flag for slice injection Since we already use SettingsUIDeviceConfig in this case, we can remove feature flag safely. Fixes: 121154979 Test: Manual Change-Id: Ibf71f1109fd506feba5a02bf6ecd804c6b7ee8d4 --- src/com/android/settings/core/FeatureFlags.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/com/android/settings/core/FeatureFlags.java b/src/com/android/settings/core/FeatureFlags.java index 9c008311080..fee9c42a82d 100644 --- a/src/com/android/settings/core/FeatureFlags.java +++ b/src/com/android/settings/core/FeatureFlags.java @@ -25,7 +25,6 @@ public class FeatureFlags { public static final String HEARING_AID_SETTINGS = "settings_bluetooth_hearing_aid"; public static final String MOBILE_NETWORK_V2 = "settings_mobile_network_v2"; public static final String NETWORK_INTERNET_V2 = "settings_network_and_internet_v2"; - public static final String SLICE_INJECTION = "settings_slice_injection"; public static final String WIFI_DETAILS_DATAUSAGE_HEADER = "settings_wifi_details_datausage_header"; } From 5c9db0cb5e60422a064b469413d0d3ed7b912150 Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Fri, 19 Apr 2019 13:50:16 -0700 Subject: [PATCH 03/10] Fix CodeInspectionTest Fixes: 130897640 Test: robo Change-Id: Ic2d952e4d76bb0a2be6eab7ddc999b56656132a6 --- .../android/settings/sim/CallsSimListDialogFragment.java | 6 ++++++ .../android/settings/sim/PreferredSimDialogFragment.java | 6 ++++++ src/com/android/settings/sim/SimDialogFragment.java | 5 +++-- src/com/android/settings/sim/SimListDialogFragment.java | 8 +++++++- .../settings/core/codeinspection/CodeInspectionTest.java | 4 +--- 5 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/com/android/settings/sim/CallsSimListDialogFragment.java b/src/com/android/settings/sim/CallsSimListDialogFragment.java index bb5a0035fdf..7d3de443821 100644 --- a/src/com/android/settings/sim/CallsSimListDialogFragment.java +++ b/src/com/android/settings/sim/CallsSimListDialogFragment.java @@ -16,6 +16,7 @@ package com.android.settings.sim; +import android.app.settings.SettingsEnums; import android.content.Context; import android.telecom.PhoneAccount; import android.telecom.PhoneAccountHandle; @@ -56,4 +57,9 @@ public class CallsSimListDialogFragment extends SimListDialogFragment { } return result; } + + @Override + public int getMetricsCategory() { + return SettingsEnums.DIALOG_CALL_SIM_LIST; + } } diff --git a/src/com/android/settings/sim/PreferredSimDialogFragment.java b/src/com/android/settings/sim/PreferredSimDialogFragment.java index 5b81e62e5d3..29f4c655340 100644 --- a/src/com/android/settings/sim/PreferredSimDialogFragment.java +++ b/src/com/android/settings/sim/PreferredSimDialogFragment.java @@ -18,6 +18,7 @@ package com.android.settings.sim; import android.app.Activity; import android.app.Dialog; +import android.app.settings.SettingsEnums; import android.content.DialogInterface; import android.os.Bundle; import android.telephony.SubscriptionInfo; @@ -98,4 +99,9 @@ public class PreferredSimDialogFragment extends SimDialogFragment implements protected SubscriptionManager getSubscriptionManager() { return getContext().getSystemService(SubscriptionManager.class); } + + @Override + public int getMetricsCategory() { + return SettingsEnums.DIALOG_PREFERRED_SIM_PICKER; + } } diff --git a/src/com/android/settings/sim/SimDialogFragment.java b/src/com/android/settings/sim/SimDialogFragment.java index 10815fd7679..de991ec14f8 100644 --- a/src/com/android/settings/sim/SimDialogFragment.java +++ b/src/com/android/settings/sim/SimDialogFragment.java @@ -20,10 +20,11 @@ import android.content.DialogInterface; import android.os.Bundle; import androidx.annotation.NonNull; -import androidx.fragment.app.DialogFragment; + +import com.android.settings.core.instrumentation.InstrumentedDialogFragment; /** Common functionality for showing a dialog in SimDialogActivity. */ -public abstract class SimDialogFragment extends DialogFragment { +public abstract class SimDialogFragment extends InstrumentedDialogFragment { private static final String TAG = "SimDialogFragment"; private static final String KEY_TITLE_ID = "title_id"; diff --git a/src/com/android/settings/sim/SimListDialogFragment.java b/src/com/android/settings/sim/SimListDialogFragment.java index f78c4e76e44..1802d65420b 100644 --- a/src/com/android/settings/sim/SimListDialogFragment.java +++ b/src/com/android/settings/sim/SimListDialogFragment.java @@ -17,6 +17,7 @@ package com.android.settings.sim; import android.app.Dialog; +import android.app.settings.SettingsEnums; import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; @@ -50,7 +51,7 @@ public class SimListDialogFragment extends SimDialogFragment implements protected SelectSubscriptionAdapter mAdapter; @VisibleForTesting - List mSubscriptions; + List mSubscriptions; public static SimListDialogFragment newInstance(int dialogType, int titleResId, boolean includeAskEveryTime) { @@ -122,6 +123,11 @@ public class SimListDialogFragment extends SimDialogFragment implements builder.setAdapter(mAdapter, this); } + @Override + public int getMetricsCategory() { + return SettingsEnums.DIALOG_SIM_LIST; + } + private static class SelectSubscriptionAdapter extends BaseAdapter { private Context mContext; private LayoutInflater mInflater; diff --git a/tests/robotests/src/com/android/settings/core/codeinspection/CodeInspectionTest.java b/tests/robotests/src/com/android/settings/core/codeinspection/CodeInspectionTest.java index 5fdadb48662..ccc8cbd0934 100644 --- a/tests/robotests/src/com/android/settings/core/codeinspection/CodeInspectionTest.java +++ b/tests/robotests/src/com/android/settings/core/codeinspection/CodeInspectionTest.java @@ -24,12 +24,11 @@ import com.android.settings.search.SearchIndexProviderCodeInspector; import com.android.settings.slices.SliceControllerInXmlCodeInspector; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; +import org.robolectric.RobolectricTestRunner; import java.util.List; -import org.robolectric.RobolectricTestRunner; /** * Test suite that scans all classes in app package, and performs different types of code inspection @@ -47,7 +46,6 @@ public class CodeInspectionTest { } @Test - @Ignore("b/130897640") public void runInstrumentableFragmentCodeInspection() { new InstrumentableFragmentCodeInspector(mClasses).run(); } From a79783ca2abd3698fa5644a6a4bfc94d9aa7017f Mon Sep 17 00:00:00 2001 From: cosmohsieh Date: Thu, 18 Apr 2019 10:58:45 +0800 Subject: [PATCH 04/10] Improve some comments of strings and codes 1) Correct improper function comment about forget menu 2) Extends char limit of wifi_scan_always_turn_on_message_unknown for translation. 3) Correct string comment on Saved networks summary Bug: 130628569 Test: make RunSettingsRoboTests -j32 ROBOTEST_FILTER=com.android.settings.wifi.WifiSettingsTest Change-Id: I0e60e4f205c794367dfffc032cb4334dac4d1cdd --- res/values/strings.xml | 6 +++--- src/com/android/settings/wifi/WifiSettings.java | 13 ++++++------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 61d952aa40d..b5ee3606ea9 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -2243,7 +2243,7 @@ Connect via %1$s To improve location accuracy and for other purposes, %1$s wants to turn on network scanning, even when Wi-Fi is off.\n\nAllow this for all apps that want to scan? - + To improve location accuracy and for other purposes, an unknown app wants to turn on network scanning, even when Wi\u2011Fi is off.\n\nAllow this for all apps that want to scan? To turn this off, go to Advanced in the overflow menu. @@ -2308,12 +2308,12 @@ 1 network %d networks - + 1 subscription %d subscriptions - + %d networks & subscriptions diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java index 56e4c30cea9..4d3f230db1e 100644 --- a/src/com/android/settings/wifi/WifiSettings.java +++ b/src/com/android/settings/wifi/WifiSettings.java @@ -469,13 +469,12 @@ public class WifiSettings extends RestrictedSettingsFragment return; } - // "forget" for normal saved network. And "disconnect" for ephemeral network because we - // could only disconnect it and put it in blacklists so it won't be used again. - if (mSelectedAccessPoint.isEphemeral()) { - menu.add(Menu.NONE, MENU_ID_FORGET, 0 /* order */, - R.string.wifi_disconnect_button_text); - } else if (mSelectedAccessPoint.isSaved()) { - menu.add(Menu.NONE, MENU_ID_FORGET, 0 /* order */, R.string.forget); + // "forget" for normal saved network. And "disconnect" for ephemeral network because it + // could only be disconnected and be put in blacklists so it won't be used again. + if (mSelectedAccessPoint.isSaved() || mSelectedAccessPoint.isEphemeral()) { + final int stringId = mSelectedAccessPoint.isEphemeral() ? + R.string.wifi_disconnect_button_text : R.string.forget; + menu.add(Menu.NONE, MENU_ID_FORGET, 0 /* order */, stringId); } if (mSelectedAccessPoint.isSaved() && !mSelectedAccessPoint.isActive()) { From 99ed023ca45aa07b809f861137a0edd1c9e91be0 Mon Sep 17 00:00:00 2001 From: Tim Peng Date: Mon, 22 Apr 2019 14:05:09 +0800 Subject: [PATCH 05/10] Remove "Play media to" when no connected device Bug: 130251782 Test: make -j42 RunSettingsRoboTests Change-Id: Id40199a67aef48b99f59cf6e04f93be2abe5e8fc --- .../media/MediaOutputIndicatorSlice.java | 20 +++++++++---------- .../media/MediaOutputIndicatorSliceTest.java | 10 +++++----- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/com/android/settings/media/MediaOutputIndicatorSlice.java b/src/com/android/settings/media/MediaOutputIndicatorSlice.java index 0023e3fb496..fe59d7531db 100644 --- a/src/com/android/settings/media/MediaOutputIndicatorSlice.java +++ b/src/com/android/settings/media/MediaOutputIndicatorSlice.java @@ -114,29 +114,29 @@ public class MediaOutputIndicatorSlice implements CustomSliceable { private boolean isVisible() { // To decide Slice's visibility. // return true if device is connected or previously connected, false for other cases. - return !CollectionUtils.isEmpty(getConnectableA2dpDevices()) - || !CollectionUtils.isEmpty(getConnectableHearingAidDevices()); + return !CollectionUtils.isEmpty(getConnectedA2dpDevices()) + || !CollectionUtils.isEmpty(getConnectedHearingAidDevices()); } - private List getConnectableA2dpDevices() { - // Get A2dp devices on all states - // (STATE_DISCONNECTED, STATE_CONNECTING, STATE_CONNECTED, STATE_DISCONNECTING) + private List getConnectedA2dpDevices() { + // Get A2dp devices on states + // (STATE_CONNECTING, STATE_CONNECTED, STATE_DISCONNECTING) final A2dpProfile a2dpProfile = mProfileManager.getA2dpProfile(); if (a2dpProfile == null) { return new ArrayList<>(); } - return a2dpProfile.getConnectableDevices(); + return a2dpProfile.getConnectedDevices(); } - private List getConnectableHearingAidDevices() { - // Get hearing aid profile devices on all states - // (STATE_DISCONNECTED, STATE_CONNECTING, STATE_CONNECTED, STATE_DISCONNECTING) + private List getConnectedHearingAidDevices() { + // Get hearing aid profile devices on states + // (STATE_CONNECTING, STATE_CONNECTED, STATE_DISCONNECTING) final HearingAidProfile hapProfile = mProfileManager.getHearingAidProfile(); if (hapProfile == null) { return new ArrayList<>(); } - return hapProfile.getConnectableDevices(); + return hapProfile.getConnectedDevices(); } private CharSequence findActiveDeviceName() { diff --git a/tests/robotests/src/com/android/settings/media/MediaOutputIndicatorSliceTest.java b/tests/robotests/src/com/android/settings/media/MediaOutputIndicatorSliceTest.java index b39f77ed732..1ba1dc924be 100644 --- a/tests/robotests/src/com/android/settings/media/MediaOutputIndicatorSliceTest.java +++ b/tests/robotests/src/com/android/settings/media/MediaOutputIndicatorSliceTest.java @@ -106,9 +106,9 @@ public class MediaOutputIndicatorSliceTest { } @Test - public void getSlice_noConnectableDevice_returnNull() { + public void getSlice_noConnectedDevice_returnNull() { mDevicesList.clear(); - when(mA2dpProfile.getConnectableDevices()).thenReturn(mDevicesList); + when(mA2dpProfile.getConnectedDevices()).thenReturn(mDevicesList); assertThat(mMediaOutputIndicatorSlice.getSlice()).isNull(); } @@ -116,7 +116,7 @@ public class MediaOutputIndicatorSliceTest { @Test public void getSlice_noActiveDevice_verifyDefaultName() { mDevicesList.add(mA2dpDevice); - when(mA2dpProfile.getConnectableDevices()).thenReturn(mDevicesList); + when(mA2dpProfile.getConnectedDevices()).thenReturn(mDevicesList); when(mA2dpProfile.getActiveDevice()).thenReturn(null); // Verify slice title and subtitle @@ -130,7 +130,7 @@ public class MediaOutputIndicatorSliceTest { @Test public void getSlice_A2dpDeviceActive_verifyName() { mDevicesList.add(mA2dpDevice); - when(mA2dpProfile.getConnectableDevices()).thenReturn(mDevicesList); + when(mA2dpProfile.getConnectedDevices()).thenReturn(mDevicesList); when(mA2dpProfile.getActiveDevice()).thenReturn(mA2dpDevice); final Slice mediaSlice = mMediaOutputIndicatorSlice.getSlice(); @@ -142,7 +142,7 @@ public class MediaOutputIndicatorSliceTest { @Test public void getSlice_HADeviceActive_verifyName() { mDevicesList.add(mHapDevice); - when(mHearingAidProfile.getConnectableDevices()).thenReturn(mDevicesList); + when(mHearingAidProfile.getConnectedDevices()).thenReturn(mDevicesList); when(mHearingAidProfile.getActiveDevices()).thenReturn(mDevicesList); // Verify slice title and subtitle From c5ae8a7bab6176f73e986a0c0dc6c6eff558c457 Mon Sep 17 00:00:00 2001 From: Kevin Chyn Date: Thu, 18 Apr 2019 16:34:37 -0700 Subject: [PATCH 06/10] Update introduction layout spacing Bug: 130740990 Test: builds Change-Id: I2c10d991097fcdb7eb0775f744b5b12af2597780 --- res/layout/face_enroll_introduction.xml | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/res/layout/face_enroll_introduction.xml b/res/layout/face_enroll_introduction.xml index 900f3781ce1..5107bd8b48d 100644 --- a/res/layout/face_enroll_introduction.xml +++ b/res/layout/face_enroll_introduction.xml @@ -45,14 +45,10 @@ android:layout_width="match_parent" android:layout_height="wrap_content" /> - - + android:layout_height="wrap_content" + android:layout_marginVertical="48dp"> - - + android:layout_gravity="center_horizontal|bottom"> + android:paddingEnd="16dp" + android:layout_marginTop="24dp"> Date: Mon, 22 Apr 2019 12:28:07 -0700 Subject: [PATCH 07/10] Partial revert Ib2396575bbc69a7cca5e9c90e113c76ff6db00b5 The previous change removed summary text for gesture settings too aggresively. We still need summary in main Settings app, just not in search. Fixes: 130652619 Test: manual Change-Id: I95ae3ca31b34a514f10993413527e987cf67d998 --- .../settings/gestures/GesturePreferenceController.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/com/android/settings/gestures/GesturePreferenceController.java b/src/com/android/settings/gestures/GesturePreferenceController.java index 97de95dcba6..d7b386ada81 100644 --- a/src/com/android/settings/gestures/GesturePreferenceController.java +++ b/src/com/android/settings/gestures/GesturePreferenceController.java @@ -23,6 +23,7 @@ import androidx.annotation.VisibleForTesting; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; +import com.android.settings.R; import com.android.settings.core.TogglePreferenceController; import com.android.settings.widget.VideoPreference; import com.android.settingslib.core.lifecycle.LifecycleObserver; @@ -63,6 +64,12 @@ public abstract class GesturePreferenceController extends TogglePreferenceContro } } + @Override + public CharSequence getSummary() { + return mContext.getText( + isChecked() ? R.string.gesture_setting_on : R.string.gesture_setting_off); + } + @Override public void onCreate(Bundle savedInstanceState) { if (savedInstanceState != null) { From 338883034fa4a21dff8dcac69c6e98fdd761391a Mon Sep 17 00:00:00 2001 From: Kevin Chyn Date: Mon, 22 Apr 2019 12:38:33 -0700 Subject: [PATCH 08/10] Update enrollment footer icon Fixes: 131094701 Test: Builds Change-Id: I9e1a75986ffeb35791271d55bf05a2daa9af5bad --- res/drawable/ic_face_enroll_introduction_detail.xml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/res/drawable/ic_face_enroll_introduction_detail.xml b/res/drawable/ic_face_enroll_introduction_detail.xml index 7159148f830..386f8c7e1e7 100644 --- a/res/drawable/ic_face_enroll_introduction_detail.xml +++ b/res/drawable/ic_face_enroll_introduction_detail.xml @@ -14,7 +14,6 @@ ~ See the License for the specific language governing permissions and ~ limitations under the License --> - + android:pathData="M0,0h24v24H0V0z" /> + + android:pathData="M12,2L3.82,5.64v5.45c0,5.05,3.49,9.76,8.18,10.91c4.69-1.15,8.18-5.86,8.18-10.91V5.64L12,2z M18.18,11.09 c0,1.55-0.41,3.05-1.1,4.38C15.77,14.5,13.4,14,12,14s-3.77,0.5-5.08,1.47c-0.69-1.33-1.1-2.83-1.1-4.38V6.94L12,4.19l6.18,2.75 V11.09z" /> + \ No newline at end of file From eaa5d1ffa360f548e4c9fe7339564b560431e147 Mon Sep 17 00:00:00 2001 From: Alex Salo Date: Mon, 22 Apr 2019 14:54:51 -0700 Subject: [PATCH 09/10] Remove todo comment Bug: 129352433 Test: not needed Change-Id: I7aa7840c0852c17ed05dba684fdd84cb7d5ad4ed --- res/xml/adaptive_sleep_detail.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/res/xml/adaptive_sleep_detail.xml b/res/xml/adaptive_sleep_detail.xml index cada2e846d9..2fa511bc247 100644 --- a/res/xml/adaptive_sleep_detail.xml +++ b/res/xml/adaptive_sleep_detail.xml @@ -21,7 +21,6 @@ android:key="adaptive_sleep_detail" android:title="@string/adaptive_sleep_title"> - Date: Mon, 22 Apr 2019 15:51:58 -0700 Subject: [PATCH 10/10] Test fix: Add MmsPreferenceController to whitelist Add it to grandfather_slice_controller_not_in_xml since right now it only exists in mobile_network_settings_v2.xml, not v1. This should be fixed automatically once we remove all old code. Bug: 130222866 Test: RunSettingsRoboTests Change-Id: Ib0bc976fd31818d7b39ca9f3e7427859fd7175ff --- tests/robotests/assets/grandfather_slice_controller_not_in_xml | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/robotests/assets/grandfather_slice_controller_not_in_xml b/tests/robotests/assets/grandfather_slice_controller_not_in_xml index d2274e65faf..4bc43391fdd 100644 --- a/tests/robotests/assets/grandfather_slice_controller_not_in_xml +++ b/tests/robotests/assets/grandfather_slice_controller_not_in_xml @@ -2,3 +2,4 @@ com.android.settings.testutils.FakeToggleController com.android.settings.testutils.FakeSliderController com.android.settings.core.TogglePreferenceControllerTest$FakeToggle com.android.settings.accessibility.AccessibilitySlicePreferenceController +com.android.settings.network.telephony.MmsMessagePreferenceController