blob: df3dd2effd2f79b4eb31e6557154f988197f62d8 [file] [log] [blame]
/*
* 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.network.telephony;
import static com.android.settings.testutils.CommonUtils.set_wifi_enabled;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.mock;
import android.app.Instrumentation;
import android.content.Context;
import android.content.Intent;
import android.net.wifi.WifiManager;
import android.telecom.TelecomManager;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.util.Log;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import androidx.lifecycle.LifecycleOwner;
import androidx.test.core.app.ActivityScenario;
import androidx.test.ext.junit.rules.ActivityScenarioRule;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;
import androidx.test.platform.app.InstrumentationRegistry;
import com.android.settings.Settings;
import com.android.settings.testutils.CommonUtils;
import com.android.settings.testutils.UiUtils;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.mobile.dataservice.MobileNetworkInfoEntity;
import com.android.settingslib.mobile.dataservice.SubscriptionInfoEntity;
import org.junit.After;
import org.junit.Assume;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import java.io.IOException;
import java.net.URL;
@RunWith(AndroidJUnit4.class)
@SmallTest
public class MobileDataPreferenceControllerComponentTest {
@Mock
private Lifecycle mLifecycle;
@Mock
private LifecycleOwner mLifecycleOwner;
public static final int TIMEOUT = 2000;
private static int sSubscriptionId = 2;
public final String TAG = this.getClass().getName();
private final Instrumentation mInstrumentation = InstrumentationRegistry.getInstrumentation();
private final WifiManager mWifiManager =
(WifiManager) mInstrumentation.getTargetContext().getSystemService(
Context.WIFI_SERVICE);
private final TelephonyManager mTelephonyManager =
(TelephonyManager) mInstrumentation.getTargetContext().getSystemService(
Context.TELEPHONY_SERVICE);
private final TelecomManager mTelecomManager =
(TelecomManager) mInstrumentation.getTargetContext().getSystemService(
Context.TELECOM_SERVICE);
@Rule
public ActivityScenarioRule<Settings.MobileNetworkActivity>
rule = new ActivityScenarioRule<>(
new Intent(android.provider.Settings.ACTION_DATA_ROAMING_SETTINGS)
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
private boolean mOriginDataEnabled;
private boolean mOriginWifiEnabled;
@Before
public void setUp() {
mOriginWifiEnabled = mWifiManager.isWifiEnabled();
// Disable wifi
set_wifi_enabled(false);
// Enable mobile data
mOriginDataEnabled = mTelephonyManager.isDataEnabled();
if (!mOriginDataEnabled) {
mTelephonyManager.enableDataConnectivity();
}
// Current sim card is not available for data network.
sSubscriptionId = SubscriptionManager.getDefaultDataSubscriptionId();
Assume.assumeTrue("Device cannot mobile network! Should ignore test.",
sSubscriptionId != SubscriptionManager.INVALID_SUBSCRIPTION_ID);
int simState = mTelephonyManager.getSimState();
Assume.assumeTrue("Sim card is not ready. Expect: " + TelephonyManager.SIM_STATE_READY
+ ", Actual: " + simState, simState == TelephonyManager.SIM_STATE_READY);
}
/**
* Tests the mobile network is disabled.
* Precondition:
* Disabled wifi, and enabled mobile network.
* Steps:
* 1. Launch mobile data page.
* 2. Turn off mobile data from switch.
* [Check]
* - Mobile data is turned off via TelephonyManager.
* - Open socket connection https://www.google.net and check the connection failed.
*/
@Test
public void test_disable_mobile_network() {
ActivityScenario scenario = rule.getScenario();
scenario.onActivity(activity -> {
try {
URL url = new URL("https://www.google.net");
MobileDataPreferenceController controller = new MobileDataPreferenceController(
mInstrumentation.getTargetContext(), "mobile_data", mLifecycle,
mLifecycleOwner, sSubscriptionId);
FragmentManager manager = ((FragmentActivity) activity).getSupportFragmentManager();
controller.init(manager, sSubscriptionId, mock(SubscriptionInfoEntity.class), mock(
MobileNetworkInfoEntity.class));
// Make sure mobile network can connect at first.
assertThat(UiUtils.waitUntilCondition(1000,
() -> CommonUtils.connectToURL(url))).isTrue();
Log.d(TAG, "Start to click ");
controller.setChecked(false);
Log.d(TAG, "Set Checked, wait for fully close.");
// Assert the configuration is set.
assertThat(UiUtils.waitUntilCondition(10000,
() -> !mTelephonyManager.isDataEnabled())).isTrue();
// Assert the network is not connectable.
assertThat(UiUtils.waitUntilCondition(1000,
() -> CommonUtils.connectToURL(url))).isFalse();
} catch (IOException e) {
}
});
}
@After
public void tearDown() {
// Restore wifi status wifi
set_wifi_enabled(mOriginWifiEnabled);
// Restore mobile data status
if (mOriginDataEnabled != mTelephonyManager.isDataEnabled()) {
if (mOriginDataEnabled) {
mTelephonyManager.enableDataConnectivity();
} else {
mTelephonyManager.disableDataConnectivity();
}
}
}
}