Snap for 5495412 from 37db031aa1 to qt-release

Change-Id: I298131ee5c00a7297584741de3a6fb128e85d800
This commit is contained in:
android-build-team Robot
2019-04-23 03:03:08 +00:00
22 changed files with 385 additions and 87 deletions

View File

@@ -14,7 +14,6 @@
~ See the License for the specific language governing permissions and
~ limitations under the License
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
@@ -23,8 +22,13 @@
android:viewportHeight="24">
<path
android:pathData="M0 0h24v24H0V0z" />
android:pathData="M0,0h24v24H0V0z" />
<path
android:pathData="M0,0h24v24H0V0z" />
<path
android:fillColor="#000000"
android:pathData="M11 15h2v2h-2zm0-8h2v6h-2zm0.99-5C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z" />
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" />
<path
android:fillColor="#000000"
android:pathData="M 12 7.5 C 13.6568542495 7.5 15 8.84314575051 15 10.5 C 15 12.1568542495 13.6568542495 13.5 12 13.5 C 10.3431457505 13.5 9 12.1568542495 9 10.5 C 9 8.84314575051 10.3431457505 7.5 12 7.5 Z" />
</vector>

View File

@@ -45,14 +45,10 @@
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Space
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1"/>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:layout_height="wrap_content"
android:layout_marginVertical="48dp">
<com.google.android.setupdesign.view.IllustrationVideoView
android:id="@+id/illustration_normal"
@@ -71,18 +67,12 @@
</FrameLayout>
<Space
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1"/>
<!-- Contains the buttons and extra information text at the bottom -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_gravity="center_horizontal|bottom"
android:layout_marginTop="24dp">
android:layout_gravity="center_horizontal|bottom">
<FrameLayout
android:layout_width="match_parent"
@@ -110,7 +100,8 @@
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingStart="16dp"
android:paddingEnd="16dp">
android:paddingEnd="16dp"
android:layout_marginTop="24dp">
<ImageView
android:layout_width="wrap_content"

View File

@@ -2243,7 +2243,7 @@
<string name="wifi_carrier_content">Connect via <xliff:g id="name">%1$s</xliff:g></string>
<string name="wifi_scan_always_turnon_message">To improve location accuracy and for other purposes, <xliff:g id="app_name">%1$s</xliff:g> wants to turn on network scanning, even when Wi-Fi is off.\n\nAllow this for all apps that want to scan?</string>
<!-- Message to inform user, an unknown app want to enable network scanning. [CHAR LIMIT=200] -->
<!-- Message to inform user, an unknown app want to enable network scanning. [CHAR LIMIT=250] -->
<string name="wifi_scan_always_turn_on_message_unknown">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?</string>
<!-- Message informing the user how to turn off [CHAR LIMIT=200] -->
<string name="wifi_scan_always_turnoff_message">To turn this off, go to Advanced in the overflow menu.</string>
@@ -2308,12 +2308,12 @@
<item quantity="one">1 network</item>
<item quantity="other">%d networks</item>
</plurals>
<!-- Wi-Fi settings screen, Saved passpoint networks summary. This shows below the "Saved networks" item and indicates the number of passpoint networks a user has saved. [CHAR LIMIT=30] -->
<!-- Wi-Fi settings screen, Saved networks summary. This shows below the "Saved networks" item and indicates the number of passpoint networks a user has saved. [CHAR LIMIT=30] -->
<plurals name="wifi_saved_passpoint_access_points_summary">
<item quantity="one">1 subscription</item>
<item quantity="other">%d subscriptions</item>
</plurals>
<!-- Wi-Fi settings screen, Saved passpoint networks summary. This shows below the "Saved networks" item and indicates number of whole kinds networks, if there are both normal saved networks and saved passpoint networks. The number will be at least 2. [CHAR LIMIT=60] -->
<!-- Wi-Fi settings screen, Saved networks summary. This shows below the "Saved networks" item and indicates number of whole kinds networks, if there are both normal saved networks and saved passpoint networks. The number will be at least 2. [CHAR LIMIT=60] -->
<plurals name="wifi_saved_all_access_points_summary">
<item quantity="other">%d networks &amp; subscriptions</item>
</plurals>
@@ -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 &amp; receive when mobile data is off</string>
<!-- Work SIM title. [CHAR LIMIT=50] -->
<string name="work_sim_title">Work SIM</string>

View File

@@ -21,7 +21,6 @@
android:key="adaptive_sleep_detail"
android:title="@string/adaptive_sleep_title">
<!-- TODO(111939367): add correct animation -->
<com.android.settings.widget.VideoPreference
android:key="adaptive_sleep_video"
android:title="@string/summary_placeholder"

View File

@@ -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"

View File

@@ -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";
}

View File

@@ -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) {

View File

@@ -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<BluetoothDevice> getConnectableA2dpDevices() {
// Get A2dp devices on all states
// (STATE_DISCONNECTED, STATE_CONNECTING, STATE_CONNECTED, STATE_DISCONNECTING)
private List<BluetoothDevice> 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<BluetoothDevice> getConnectableHearingAidDevices() {
// Get hearing aid profile devices on all states
// (STATE_DISCONNECTED, STATE_CONNECTING, STATE_CONNECTED, STATE_DISCONNECTING)
private List<BluetoothDevice> 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() {

View File

@@ -0,0 +1,72 @@
/*
* 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();
}
}

View File

@@ -0,0 +1,106 @@
/*
* 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);
}
}

View File

@@ -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);
}
}
}

View File

@@ -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);
}

View File

@@ -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);

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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";

View File

@@ -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<SubscriptionInfo> mSubscriptions;
List<SubscriptionInfo> 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;

View File

@@ -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()) {

View File

@@ -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

View File

@@ -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();
}

View File

@@ -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

View File

@@ -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);
}
}