[Settings] Refactor AirplaneModeEnabler with test
Support auto testing
Bug: 147029746
Test: manual
Test: make RunSettingsRoboTests -j ROBOTEST_FILTER=AirplaneModeEnablerTest
Change-Id: Ib39ab1881484f65bc5a3834b2828c6ba98198cca
diff --git a/src/com/android/settings/AirplaneModeEnabler.java b/src/com/android/settings/AirplaneModeEnabler.java
index f1d36f2..a843a04 100644
--- a/src/com/android/settings/AirplaneModeEnabler.java
+++ b/src/com/android/settings/AirplaneModeEnabler.java
@@ -26,6 +26,8 @@
import android.telephony.TelephonyManager;
import android.util.Log;
+import androidx.annotation.VisibleForTesting;
+
import com.android.settings.network.GlobalSettingsChangeListener;
import com.android.settings.network.ProxySubscriptionManager;
import com.android.settings.overlay.FeatureFactory;
@@ -57,8 +59,8 @@
}
private TelephonyManager mTelephonyManager;
- private ProxySubscriptionManager mProxySubscriptionMgr;
- private PhoneStateListener mPhoneStateListener;
+ @VisibleForTesting
+ PhoneStateListener mPhoneStateListener;
private GlobalSettingsChangeListener mAirplaneModeObserver;
@@ -70,7 +72,6 @@
mOnAirplaneModeChangedListener = listener;
mTelephonyManager = context.getSystemService(TelephonyManager.class);
- mProxySubscriptionMgr = ProxySubscriptionManager.getInstance(context);
mPhoneStateListener = new PhoneStateListener() {
@Override
@@ -143,7 +144,7 @@
return true;
}
final List<SubscriptionInfo> subInfoList =
- mProxySubscriptionMgr.getActiveSubscriptionsInfo();
+ ProxySubscriptionManager.getInstance(mContext).getActiveSubscriptionsInfo();
if (subInfoList == null) {
return false;
}
diff --git a/tests/robotests/src/com/android/settings/AirplaneModeEnablerTest.java b/tests/robotests/src/com/android/settings/AirplaneModeEnablerTest.java
new file mode 100644
index 0000000..24abac9
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/AirplaneModeEnablerTest.java
@@ -0,0 +1,70 @@
+/*
+ * 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;
+
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+
+import android.content.Context;
+import android.telephony.TelephonyManager;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.shadows.ShadowSettings;
+
+
+@RunWith(AndroidJUnit4.class)
+public final class AirplaneModeEnablerTest {
+
+ private Context mContext;
+
+ @Mock
+ private AirplaneModeChangedListener mAirplaneModeChangedListener;
+ private AirplaneModeEnabler mAirplaneModeEnabler;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+
+ mContext = RuntimeEnvironment.application.getBaseContext();
+ mAirplaneModeEnabler = new AirplaneModeEnabler(mContext,
+ mAirplaneModeChangedListener);
+ }
+
+ @Test
+ public void onRadioPowerStateChanged_beenInvoke_invokeOnAirplaneModeChanged() {
+ mAirplaneModeEnabler.resume();
+
+ ShadowSettings.setAirplaneMode(true);
+
+ mAirplaneModeEnabler.mPhoneStateListener.onRadioPowerStateChanged(
+ TelephonyManager.RADIO_POWER_OFF);
+
+ verify(mAirplaneModeChangedListener, times(1)).onAirplaneModeChanged(true);
+ }
+
+ private class AirplaneModeChangedListener
+ implements AirplaneModeEnabler.OnAirplaneModeChangedListener {
+ public void onAirplaneModeChanged(boolean isAirplaneModeOn) {}
+ }
+}