Merge "Fix the background color of the homepage." into sc-dev
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 1ee3882..75b2645 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -12562,6 +12562,8 @@
     <string name="to_switch_networks_disconnect_ethernet">To switch networks, disconnect ethernet</string>
     <!-- Summary for cannot switch networks to Wi-Fi nor mobile data networks while connected to an ethernet network. [CHAR LIMIT=60] -->
     <string name="cannot_switch_networks_while_connected">Cannot switch networks while connected</string>
+    <!-- Title for airplane mode network panel. [CHAR LIMIT=60] -->
+    <string name="airplane_mode_network_panel_title">Airplane mode networks</string>
 
     <!-- Summary text separator for preferences including a short description
          (eg. "Connected / 5G"). [CHAR LIMIT=50] -->
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index bb20c4c..d22a381 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -238,12 +238,10 @@
             getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS);
             final MaterialSharedAxis enterTransition = new MaterialSharedAxis(
                     MaterialSharedAxis.X, /* forward */true);
-            enterTransition.addTarget(R.id.content_parent);
             getWindow().setEnterTransition(enterTransition);
 
             final MaterialSharedAxis returnTransition = new MaterialSharedAxis(
                     MaterialSharedAxis.X, /* forward */false);
-            returnTransition.addTarget(R.id.content_parent);
             getWindow().setReturnTransition(returnTransition);
         }
 
diff --git a/src/com/android/settings/core/SettingsBaseActivity.java b/src/com/android/settings/core/SettingsBaseActivity.java
index 4704702..85484af 100644
--- a/src/com/android/settings/core/SettingsBaseActivity.java
+++ b/src/com/android/settings/core/SettingsBaseActivity.java
@@ -32,11 +32,13 @@
 import android.util.FeatureFlagUtils;
 import android.util.Log;
 import android.view.LayoutInflater;
+import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.Window;
 import android.widget.Toolbar;
 
+import androidx.annotation.NonNull;
 import androidx.fragment.app.FragmentActivity;
 
 import com.android.settings.R;
@@ -168,6 +170,17 @@
     }
 
     @Override
+    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
+        final int id = item.getItemId();
+        if (id == android.R.id.home) {
+            // Make the up button behave the same as the back button.
+            onBackPressed();
+            return true;
+        }
+        return super.onOptionsItemSelected(item);
+    }
+
+    @Override
     public void setTitle(CharSequence title) {
         if (mCollapsingToolbarLayout != null) {
             mCollapsingToolbarLayout.setTitle(title);
diff --git a/src/com/android/settings/emergency/EmergencyGestureEntrypointPreferenceController.java b/src/com/android/settings/emergency/EmergencyGestureEntrypointPreferenceController.java
index fa0b032..43ff215 100644
--- a/src/com/android/settings/emergency/EmergencyGestureEntrypointPreferenceController.java
+++ b/src/com/android/settings/emergency/EmergencyGestureEntrypointPreferenceController.java
@@ -62,7 +62,7 @@
     @Override
     public void updateState(Preference preference) {
         super.updateState(preference);
-        final boolean canHandleClicks = !mUseCustomIntent || mIntent != null;
+        final boolean canHandleClicks = canHandleClicks();
         if (preference != null) {
             preference.setEnabled(canHandleClicks);
         }
@@ -86,6 +86,9 @@
         if (!isConfigEnabled) {
             return UNSUPPORTED_ON_DEVICE;
         }
+        if (!canHandleClicks()) {
+            return UNSUPPORTED_ON_DEVICE;
+        }
         return AVAILABLE;
     }
 
@@ -117,6 +120,13 @@
         return mUseCustomIntent;
     }
 
+    /**
+     * Whether or not this setting can react to user click
+     */
+    private boolean canHandleClicks() {
+        return !mUseCustomIntent || mIntent != null;
+    }
+
     private boolean canResolveIntent(Intent intent) {
         final ResolveInfo resolveActivity = mContext.getPackageManager()
                 .resolveActivity(intent, 0);
diff --git a/src/com/android/settings/network/InternetUpdater.java b/src/com/android/settings/network/InternetUpdater.java
index 1eafb60..d415b10 100644
--- a/src/com/android/settings/network/InternetUpdater.java
+++ b/src/com/android/settings/network/InternetUpdater.java
@@ -149,16 +149,15 @@
 
     public InternetUpdater(Context context, Lifecycle lifecycle,
             OnInternetTypeChangedListener listener) {
-        if (lifecycle == null) {
-            throw new IllegalArgumentException("Lifecycle must be set");
-        }
         mContext = context;
         mAirplaneModeEnabler = new AirplaneModeEnabler(mContext, this);
         mConnectivityManager = mContext.getSystemService(ConnectivityManager.class);
         mWifiManager = mContext.getSystemService(WifiManager.class);
         mWifiStateFilter = new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION);
         mOnInternetTypeChangedListener = listener;
-        lifecycle.addObserver(this);
+        if (lifecycle != null) {
+            lifecycle.addObserver(this);
+        }
     }
 
     /** @OnLifecycleEvent(ON_RESUME) */
diff --git a/src/com/android/settings/network/telephony/NetworkProviderWorker.java b/src/com/android/settings/network/telephony/NetworkProviderWorker.java
index e2e0264..50c56cf 100644
--- a/src/com/android/settings/network/telephony/NetworkProviderWorker.java
+++ b/src/com/android/settings/network/telephony/NetworkProviderWorker.java
@@ -43,8 +43,6 @@
 import com.android.settingslib.mobile.MobileMappings.Config;
 
 import java.util.Collections;
-import java.util.concurrent.Executor;
-
 
 /**
  * BackgroundWorker for Provider Model slice.
@@ -63,6 +61,7 @@
     private DataConnectivityListener mConnectivityListener;
     private int mDefaultDataSubid = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
     private final Context mContext;
+    final Handler mHandler;
     @VisibleForTesting
     final PhoneStateListener mPhoneStateListener;
     private TelephonyManager mTelephonyManager;
@@ -76,15 +75,15 @@
     public NetworkProviderWorker(Context context, Uri uri) {
         super(context, uri);
         // Mobile data worker
-        final Handler handler = new Handler(Looper.getMainLooper());
-        mMobileDataObserver = new DataContentObserver(handler, this);
+        mHandler = new Handler(Looper.getMainLooper());
+        mMobileDataObserver = new DataContentObserver(mHandler, this);
 
         mContext = context;
         mDefaultDataSubid = getDefaultDataSubscriptionId();
 
         mTelephonyManager = mContext.getSystemService(
                 TelephonyManager.class).createForSubscriptionId(mDefaultDataSubid);
-        mPhoneStateListener = new NetworkProviderPhoneStateListener(handler::post);
+        mPhoneStateListener = new NetworkProviderPhoneStateListener();
         mSubscriptionsListener = new SubscriptionsChangeListener(context, this);
         mDataEnabledListener = new MobileDataEnabledListener(context, this);
         mConnectivityListener = new DataConnectivityListener(context, this);
@@ -102,9 +101,7 @@
         mDataEnabledListener.start(mDefaultDataSubid);
         mConnectivityListener.start();
         mSignalStrengthListener.resume();
-        mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_SERVICE_STATE
-                | PhoneStateListener.LISTEN_DISPLAY_INFO_CHANGED);
-
+        mTelephonyManager.registerPhoneStateListener(mHandler::post, mPhoneStateListener);
         super.onSlicePinned();
     }
 
@@ -115,7 +112,7 @@
         mDataEnabledListener.stop();
         mConnectivityListener.stop();
         mSignalStrengthListener.pause();
-        mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
+        mTelephonyManager.unregisterPhoneStateListener(mPhoneStateListener);
         super.onSliceUnpinned();
     }
 
@@ -145,13 +142,12 @@
             return;
         }
         if (SubscriptionManager.isUsableSubscriptionId(defaultDataSubId)) {
-            mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
+            mTelephonyManager.unregisterPhoneStateListener(mPhoneStateListener);
             mMobileDataObserver.unregister(mContext);
 
             mSignalStrengthListener.updateSubscriptionIds(Collections.singleton(defaultDataSubId));
             mTelephonyManager = mTelephonyManager.createForSubscriptionId(defaultDataSubId);
-            mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_SERVICE_STATE
-                    | PhoneStateListener.LISTEN_DISPLAY_INFO_CHANGED);
+            mTelephonyManager.registerPhoneStateListener(mHandler::post, mPhoneStateListener);
             mMobileDataObserver.register(mContext, mDefaultDataSubid);
             mConfig = getConfig(mContext);
         } else {
@@ -221,11 +217,10 @@
         }
     }
 
-    class NetworkProviderPhoneStateListener extends PhoneStateListener {
-        NetworkProviderPhoneStateListener(Executor executor) {
-            super(executor);
-        }
-
+    class NetworkProviderPhoneStateListener extends PhoneStateListener implements
+            PhoneStateListener.DataConnectionStateChangedListener,
+            PhoneStateListener.DisplayInfoChangedListener,
+            PhoneStateListener.ServiceStateChangedListener {
         @Override
         public void onServiceStateChanged(ServiceState state) {
             Log.d(TAG, "onServiceStateChanged voiceState=" + state.getState()
@@ -239,6 +234,13 @@
             mTelephonyDisplayInfo = telephonyDisplayInfo;
             updateSlice();
         }
+
+        @Override
+        public void onDataConnectionStateChanged(int state, int networkType) {
+            Log.d(TAG,
+                    "onDataConnectionStateChanged: networkType=" + networkType + " state=" + state);
+            updateSlice();
+        }
     }
 
     @VisibleForTesting
diff --git a/src/com/android/settings/panel/InternetConnectivityPanel.java b/src/com/android/settings/panel/InternetConnectivityPanel.java
index 64a4699..7bafe97 100644
--- a/src/com/android/settings/panel/InternetConnectivityPanel.java
+++ b/src/com/android/settings/panel/InternetConnectivityPanel.java
@@ -16,6 +16,10 @@
 
 package com.android.settings.panel;
 
+import static androidx.lifecycle.Lifecycle.Event.ON_PAUSE;
+import static androidx.lifecycle.Lifecycle.Event.ON_RESUME;
+
+import static com.android.settings.network.InternetUpdater.INTERNET_APM_NETWORKS;
 import static com.android.settings.network.NetworkProviderSettings.ACTION_NETWORK_PROVIDER_SETTINGS;
 
 import android.app.settings.SettingsEnums;
@@ -24,9 +28,14 @@
 import android.net.Uri;
 import android.provider.Settings;
 
+import androidx.annotation.VisibleForTesting;
+import androidx.lifecycle.LifecycleObserver;
+import androidx.lifecycle.OnLifecycleEvent;
+
 import com.android.settings.R;
 import com.android.settings.Utils;
 import com.android.settings.network.AirplaneModePreferenceController;
+import com.android.settings.network.InternetUpdater;
 import com.android.settings.slices.CustomSliceRegistry;
 
 import java.util.ArrayList;
@@ -35,9 +44,15 @@
 /**
  * Represents the Internet Connectivity Panel.
  */
-public class InternetConnectivityPanel implements PanelContent {
+public class InternetConnectivityPanel implements PanelContent, LifecycleObserver,
+        InternetUpdater.OnInternetTypeChangedListener {
 
     private final Context mContext;
+    @VisibleForTesting
+    boolean mIsProviderModelEnabled;
+    private PanelContentCallback mCallback;
+    private InternetUpdater mInternetUpdater;
+    private @InternetUpdater.InternetType int mInternetType;
 
     public static InternetConnectivityPanel create(Context context) {
         return new InternetConnectivityPanel(context);
@@ -45,12 +60,37 @@
 
     private InternetConnectivityPanel(Context context) {
         mContext = context.getApplicationContext();
+        mIsProviderModelEnabled = Utils.isProviderModelEnabled(mContext);
+        mInternetUpdater = new InternetUpdater(context, null /* Lifecycle */, this);
+        mInternetType = mInternetUpdater.getInternetType();
+    }
+
+    /** @OnLifecycleEvent(ON_RESUME) */
+    @OnLifecycleEvent(ON_RESUME)
+    public void onResume() {
+        if (!mIsProviderModelEnabled) {
+            return;
+        }
+        mInternetUpdater.onResume();
+    }
+
+    /** @OnLifecycleEvent(ON_PAUSE) */
+    @OnLifecycleEvent(ON_PAUSE)
+    public void onPause() {
+        if (!mIsProviderModelEnabled) {
+            return;
+        }
+        mInternetUpdater.onPause();
     }
 
     @Override
     public CharSequence getTitle() {
-        return mContext.getText(Utils.isProviderModelEnabled(mContext)
-                ? R.string.provider_internet_settings : R.string.internet_connectivity_panel_title);
+        if (mIsProviderModelEnabled) {
+            return mContext.getText(mInternetType == INTERNET_APM_NETWORKS
+                    ? R.string.airplane_mode_network_panel_title
+                    : R.string.provider_internet_settings);
+        }
+        return mContext.getText(R.string.internet_connectivity_panel_title);
     }
 
     @Override
@@ -93,4 +133,30 @@
     public int getMetricsCategory() {
         return SettingsEnums.PANEL_INTERNET_CONNECTIVITY;
     }
+
+    @Override
+    public void registerCallback(PanelContentCallback callback) {
+        mCallback = callback;
+    }
+
+    /**
+     * Called when internet type is changed.
+     *
+     * @param internetType the internet type
+     */
+    public void onInternetTypeChanged(@InternetUpdater.InternetType int internetType) {
+        final boolean needRefresh = internetType != mInternetType
+                && (internetType == INTERNET_APM_NETWORKS
+                || mInternetType == INTERNET_APM_NETWORKS);
+        mInternetType = internetType;
+        if (needRefresh) {
+            refresh();
+        }
+    }
+
+    private void refresh() {
+        if (mCallback != null) {
+            mCallback.onTitleChanged();
+        }
+    }
 }
diff --git a/src/com/android/settings/panel/PanelContentCallback.java b/src/com/android/settings/panel/PanelContentCallback.java
index 63c2c55..f0e68a3 100644
--- a/src/com/android/settings/panel/PanelContentCallback.java
+++ b/src/com/android/settings/panel/PanelContentCallback.java
@@ -37,4 +37,9 @@
      * It will be called when panel requests to close itself.
      */
     void forceClose();
+
+    /**
+     * It will be called when panel requests to change the title.
+     */
+    void onTitleChanged();
 }
diff --git a/src/com/android/settings/panel/PanelFragment.java b/src/com/android/settings/panel/PanelFragment.java
index 8eec24f..503b34a 100644
--- a/src/com/android/settings/panel/PanelFragment.java
+++ b/src/com/android/settings/panel/PanelFragment.java
@@ -514,6 +514,13 @@
             getFragmentActivity().finish();
         }
 
+        @Override
+        public void onTitleChanged() {
+            ThreadUtils.postOnMainThread(() -> {
+                mTitleView.setText(mPanel.getTitle());
+            });
+        }
+
         @VisibleForTesting
         FragmentActivity getFragmentActivity() {
             return getActivity();
diff --git a/tests/robotests/src/com/android/settings/emergency/EmergencyGestureEntrypointPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/emergency/EmergencyGestureEntrypointPreferenceControllerTest.java
index 9169372..65fa187 100644
--- a/tests/robotests/src/com/android/settings/emergency/EmergencyGestureEntrypointPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/emergency/EmergencyGestureEntrypointPreferenceControllerTest.java
@@ -52,14 +52,13 @@
 
     private Context mContext;
     private ShadowPackageManager mPackageManager;
-    private EmergencyGestureEntrypointPreferenceController mController;
     private static final String PREF_KEY = "gesture_emergency_button";
 
     @Before
     public void setUp() {
         mContext = ApplicationProvider.getApplicationContext();
         mPackageManager = Shadows.shadowOf(mContext.getPackageManager());
-        mController = new EmergencyGestureEntrypointPreferenceController(mContext, PREF_KEY);
+
     }
 
     @After
@@ -69,24 +68,18 @@
 
     @Test
     public void constructor_hasCustomPackageConfig_shouldSetIntent() {
-        final ResolveInfo info = new ResolveInfo();
-        info.activityInfo = new ActivityInfo();
-        info.activityInfo.packageName = TEST_PKG_NAME;
-        info.activityInfo.name = TEST_CLASS_NAME;
-
-        mPackageManager.addResolveInfoForIntent(SETTING_INTENT, info);
-
         SettingsShadowResources.overrideResource(
                 R.bool.config_show_emergency_gesture_settings,
                 Boolean.TRUE);
-
         SettingsShadowResources.overrideResource(
                 R.string.emergency_gesture_settings_package,
                 TEST_PKG_NAME);
+        prepareCustomIntent();
 
-        mController = new EmergencyGestureEntrypointPreferenceController(mContext, PREF_KEY);
+        EmergencyGestureEntrypointPreferenceController controller =
+                new EmergencyGestureEntrypointPreferenceController(mContext, PREF_KEY);
 
-        assertThat(mController.mIntent).isNotNull();
+        assertThat(controller.mIntent).isNotNull();
     }
 
     @Test
@@ -94,8 +87,10 @@
         SettingsShadowResources.overrideResource(
                 R.bool.config_show_emergency_gesture_settings,
                 Boolean.TRUE);
+        EmergencyGestureEntrypointPreferenceController controller =
+                new EmergencyGestureEntrypointPreferenceController(mContext, PREF_KEY);
 
-        assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
+        assertThat(controller.getAvailabilityStatus()).isEqualTo(AVAILABLE);
     }
 
     @Test
@@ -103,7 +98,34 @@
         SettingsShadowResources.overrideResource(
                 R.bool.config_show_emergency_gesture_settings,
                 Boolean.FALSE);
+        EmergencyGestureEntrypointPreferenceController controller =
+                new EmergencyGestureEntrypointPreferenceController(mContext, PREF_KEY);
 
-        assertThat(mController.getAvailabilityStatus()).isEqualTo(UNSUPPORTED_ON_DEVICE);
+        assertThat(controller.getAvailabilityStatus()).isEqualTo(UNSUPPORTED_ON_DEVICE);
+    }
+
+    @Test
+    public void getAvailabilityStatus_noSuitableIntent_shouldReturnUnsupported() {
+        SettingsShadowResources.overrideResource(
+                R.bool.config_show_emergency_gesture_settings,
+                Boolean.TRUE);
+        // Provide override package name but don't provide resolvable intent
+        SettingsShadowResources.overrideResource(
+                R.string.emergency_gesture_settings_package,
+                TEST_PKG_NAME);
+
+        EmergencyGestureEntrypointPreferenceController controller =
+                new EmergencyGestureEntrypointPreferenceController(mContext, PREF_KEY);
+
+        assertThat(controller.getAvailabilityStatus()).isEqualTo(UNSUPPORTED_ON_DEVICE);
+    }
+
+    private void prepareCustomIntent() {
+        final ResolveInfo info = new ResolveInfo();
+        info.activityInfo = new ActivityInfo();
+        info.activityInfo.packageName = TEST_PKG_NAME;
+        info.activityInfo.name = TEST_CLASS_NAME;
+
+        mPackageManager.addResolveInfoForIntent(SETTING_INTENT, info);
     }
 }
diff --git a/tests/unit/src/com/android/settings/network/telephony/NetworkProviderWorkerTest.java b/tests/unit/src/com/android/settings/network/telephony/NetworkProviderWorkerTest.java
index 1905e44..2ce9a51 100644
--- a/tests/unit/src/com/android/settings/network/telephony/NetworkProviderWorkerTest.java
+++ b/tests/unit/src/com/android/settings/network/telephony/NetworkProviderWorkerTest.java
@@ -229,6 +229,18 @@
     }
 
     @Test
+    @UiThreadTest
+    public void onDataConnectionStateChanged_notifyPhoneStateListener_callUpdateSlice() {
+        mMockNetworkProviderWorker.onSlicePinned();
+        mMockNetworkProviderWorker.receiveNotification(false);
+
+        mMockNetworkProviderWorker.mPhoneStateListener.onDataConnectionStateChanged(
+                TelephonyManager.DATA_DISCONNECTED, TelephonyManager.NETWORK_TYPE_LTE);
+
+        assertThat(mMockNetworkProviderWorker.hasNotification()).isTrue();
+    }
+
+    @Test
     public void onInternetTypeChanged_connectedFromWifiToEthernet_callUpdateSlice() {
         mMockNetworkProviderWorker.receiveNotification(false);
         mMockNetworkProviderWorker.onInternetTypeChanged(INTERNET_WIFI);
diff --git a/tests/unit/src/com/android/settings/panel/InternetConnectivityPanelTest.java b/tests/unit/src/com/android/settings/panel/InternetConnectivityPanelTest.java
new file mode 100644
index 0000000..e8f694b
--- /dev/null
+++ b/tests/unit/src/com/android/settings/panel/InternetConnectivityPanelTest.java
@@ -0,0 +1,95 @@
+/*
+ * 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.panel;
+
+import static com.android.settings.network.InternetUpdater.INTERNET_APM;
+import static com.android.settings.network.InternetUpdater.INTERNET_APM_NETWORKS;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.clearInvocations;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+
+import android.content.Context;
+
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import com.android.settings.testutils.ResourcesUtils;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+
+@RunWith(AndroidJUnit4.class)
+public class InternetConnectivityPanelTest {
+
+    public static final String TITLE_INTERNET = ResourcesUtils.getResourcesString(
+            ApplicationProvider.getApplicationContext(), "provider_internet_settings");
+    public static final String TITLE_APM_NETWORKS = ResourcesUtils.getResourcesString(
+            ApplicationProvider.getApplicationContext(), "airplane_mode_network_panel_title");
+
+    @Rule
+    public final MockitoRule mMocks = MockitoJUnit.rule();
+    @Mock
+    PanelContentCallback mPanelContentCallback;
+
+    private Context mContext;
+    private InternetConnectivityPanel mPanel;
+
+    @Before
+    public void setUp() {
+        mContext = spy(ApplicationProvider.getApplicationContext());
+
+        mPanel = InternetConnectivityPanel.create(mContext);
+        mPanel.registerCallback(mPanelContentCallback);
+        mPanel.mIsProviderModelEnabled = true;
+    }
+
+    @Test
+    public void getTitle_internetTypeChangedFromApmToApmNetworks_verifyTitleChanged() {
+        mPanel.onInternetTypeChanged(INTERNET_APM);
+
+        assertThat(mPanel.getTitle()).isEqualTo(TITLE_INTERNET);
+
+        clearInvocations(mPanelContentCallback);
+
+        mPanel.onInternetTypeChanged(INTERNET_APM_NETWORKS);
+
+        assertThat(mPanel.getTitle()).isEqualTo(TITLE_APM_NETWORKS);
+        verify(mPanelContentCallback).onTitleChanged();
+    }
+
+    @Test
+    public void getTitle_internetTypeChangedFromApmNetworksToApm_verifyTitleChanged() {
+        mPanel.onInternetTypeChanged(INTERNET_APM_NETWORKS);
+
+        assertThat(mPanel.getTitle()).isEqualTo(TITLE_APM_NETWORKS);
+
+        clearInvocations(mPanelContentCallback);
+
+        mPanel.onInternetTypeChanged(INTERNET_APM);
+
+        assertThat(mPanel.getTitle()).isEqualTo(TITLE_INTERNET);
+        verify(mPanelContentCallback).onTitleChanged();
+    }
+}