Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 76aa52f9 authored by Evan Laird's avatar Evan Laird Committed by Android (Google) Code Review
Browse files

Merge "Move some logic to MobileState"

parents c708ea70 ad2ac7ee
Loading
Loading
Loading
Loading
+91 −19
Original line number Diff line number Diff line
@@ -15,6 +15,8 @@
 */
package com.android.settingslib;

import com.android.settingslib.mobile.TelephonyIcons;

import java.text.SimpleDateFormat;
import java.util.Objects;

@@ -40,9 +42,17 @@ public class SignalIcon {
        // For logging.
        public final String name;

        public IconGroup(String name, int[][] sbIcons, int[][] qsIcons, int[] contentDesc,
                int sbNullState, int qsNullState, int sbDiscState, int qsDiscState,
                int discContentDesc) {
        public IconGroup(
                String name,
                int[][] sbIcons,
                int[][] qsIcons,
                int[] contentDesc,
                int sbNullState,
                int qsNullState,
                int sbDiscState,
                int qsDiscState,
                int discContentDesc
        ) {
            this.name = name;
            this.sbIcons = sbIcons;
            this.qsIcons = qsIcons;
@@ -131,6 +141,19 @@ public class SignalIcon {
                    && other.activityOut == activityOut
                    && other.rssi == rssi;
        }

        @Override
        public int hashCode() {
            return Objects.hash(
                    connected,
                    enabled,
                    level,
                    inetCondition,
                    iconGroup,
                    activityIn,
                    activityOut,
                    rssi);
        }
    }

    /**
@@ -140,11 +163,28 @@ public class SignalIcon {
        public final int dataContentDescription; // mContentDescriptionDataType
        public final int dataType;

        public MobileIconGroup(String name, int[][] sbIcons, int[][] qsIcons, int[] contentDesc,
                int sbNullState, int qsNullState, int sbDiscState, int qsDiscState,
                int discContentDesc, int dataContentDesc, int dataType) {
            super(name, sbIcons, qsIcons, contentDesc, sbNullState, qsNullState, sbDiscState,
                qsDiscState, discContentDesc);
        public MobileIconGroup(
                String name,
                int[][] sbIcons,
                int[][] qsIcons,
                int[] contentDesc,
                int sbNullState,
                int qsNullState,
                int sbDiscState,
                int qsDiscState,
                int discContentDesc,
                int dataContentDesc,
                int dataType
        ) {
            super(name,
                    sbIcons,
                    qsIcons,
                    contentDesc,
                    sbNullState,
                    qsNullState,
                    sbDiscState,
                    qsDiscState,
                    discContentDesc);
            this.dataContentDescription = dataContentDesc;
            this.dataType = dataType;
        }
@@ -183,6 +223,22 @@ public class SignalIcon {
            defaultDataOff = state.defaultDataOff;
        }

        /** @return true if this state is disabled or not default data */
        public boolean isDataDisabledOrNotDefault() {
            return (iconGroup == TelephonyIcons.DATA_DISABLED
                    || (iconGroup == TelephonyIcons.NOT_DEFAULT_DATA)) && userSetup;
        }

        /** @return if this state is considered to have inbound activity */
        public boolean hasActivityIn() {
            return dataConnected && !carrierNetworkChangeMode && activityIn;
        }

        /** @return if this state is considered to have outbound activity */
        public boolean hasActivityOut() {
            return dataConnected && !carrierNetworkChangeMode && activityOut;
        }

        @Override
        protected void toString(StringBuilder builder) {
            super.toString(builder);
@@ -216,5 +272,21 @@ public class SignalIcon {
                    && ((MobileState) o).roaming == roaming
                    && ((MobileState) o).defaultDataOff == defaultDataOff;
        }

        @Override
        public int hashCode() {
            return Objects.hash(super.hashCode(),
                    networkName,
                    networkNameData,
                    dataSim,
                    dataConnected,
                    isEmergency,
                    airplaneMode,
                    carrierNetworkChangeMode,
                    userSetup,
                    isDefault,
                    roaming,
                    defaultDataOff);
        }
    }
}
+133 −0
Original line number Diff line number Diff line
/*
 * 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.settingslib;

import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertTrue;

import com.android.settingslib.mobile.TelephonyIcons;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;

@RunWith(RobolectricTestRunner.class)
public class MobileStateTest {

    private SignalIcon.MobileState mState = new SignalIcon.MobileState();

    @Before
    public void setUp() {
    }

    @Test
    public void testIsDataDisabledOrNotDefault_dataDisabled() {
        mState.iconGroup = TelephonyIcons.DATA_DISABLED;
        mState.userSetup = true;

        assertTrue(mState.isDataDisabledOrNotDefault());
    }

    @Test
    public void testIsDataDisabledOrNotDefault_notDefaultData() {
        mState.iconGroup = TelephonyIcons.NOT_DEFAULT_DATA;
        mState.userSetup = true;

        assertTrue(mState.isDataDisabledOrNotDefault());
    }

    @Test
    public void testIsDataDisabledOrNotDefault_notDisabled() {
        mState.iconGroup = TelephonyIcons.G;
        mState.userSetup = true;

        assertFalse(mState.isDataDisabledOrNotDefault());
    }

    @Test
    public void testHasActivityIn_noData_noActivity() {
        mState.dataConnected = false;
        mState.carrierNetworkChangeMode = false;
        mState.activityIn = false;

        assertFalse(mState.hasActivityIn());
    }

    @Test
    public void testHasActivityIn_noData_activityIn() {
        mState.dataConnected = false;
        mState.carrierNetworkChangeMode = false;
        mState.activityIn = true;

        assertFalse(mState.hasActivityIn());
    }

    @Test
    public void testHasActivityIn_dataConnected_activityIn() {
        mState.dataConnected = true;
        mState.carrierNetworkChangeMode = false;
        mState.activityIn = true;

        assertTrue(mState.hasActivityIn());
    }

    @Test
    public void testHasActivityIn_carrierNetworkChange() {
        mState.dataConnected = true;
        mState.carrierNetworkChangeMode = true;
        mState.activityIn = true;

        assertFalse(mState.hasActivityIn());
    }

    @Test
    public void testHasActivityOut_noData_noActivity() {
        mState.dataConnected = false;
        mState.carrierNetworkChangeMode = false;
        mState.activityOut = false;

        assertFalse(mState.hasActivityOut());
    }

    @Test
    public void testHasActivityOut_noData_activityOut() {
        mState.dataConnected = false;
        mState.carrierNetworkChangeMode = false;
        mState.activityOut = true;

        assertFalse(mState.hasActivityOut());
    }

    @Test
    public void testHasActivityOut_dataConnected_activityOut() {
        mState.dataConnected = true;
        mState.carrierNetworkChangeMode = false;
        mState.activityOut = true;

        assertTrue(mState.hasActivityOut());
    }

    @Test
    public void testHasActivityOut_carrierNetworkChange() {
        mState.dataConnected = true;
        mState.carrierNetworkChangeMode = true;
        mState.activityOut = true;

        assertFalse(mState.hasActivityOut());
    }
}
+28 −25
Original line number Diff line number Diff line
@@ -91,8 +91,7 @@ public class MobileSignalController extends SignalController<MobileState, Mobile
    private int mImsType = IMS_TYPE_WWAN;
    // Save entire info for logging, we only use the id.
    final SubscriptionInfo mSubscriptionInfo;
    // @VisibleForDemoMode
    Map<String, MobileIconGroup> mNetworkToIconLookup;
    private Map<String, MobileIconGroup> mNetworkToIconLookup;

    // Since some pieces of the phone state are interdependent we store it locally,
    // this could potentially become part of MobileState for simplification/complication
@@ -385,9 +384,8 @@ public class MobileSignalController extends SignalController<MobileState, Mobile
        if (mCurrentState.inetCondition == 0) {
            dataContentDescription = mContext.getString(R.string.data_connection_no_internet);
        }
        final boolean dataDisabled = (mCurrentState.iconGroup == TelephonyIcons.DATA_DISABLED
                || (mCurrentState.iconGroup == TelephonyIcons.NOT_DEFAULT_DATA))
                && mCurrentState.userSetup;

        final boolean dataDisabled = mCurrentState.isDataDisabledOrNotDefault();

        if (mProviderModelBehavior) {
            // Show icon in QS when we are connected or data is disabled.
@@ -404,12 +402,7 @@ public class MobileSignalController extends SignalController<MobileState, Mobile
                        && !mCurrentState.isEmergency, getQsCurrentIconId(), contentDescription);
                description = mCurrentState.isEmergency ? null : mCurrentState.networkName;
            }
            boolean activityIn = mCurrentState.dataConnected
                    && !mCurrentState.carrierNetworkChangeMode
                    && mCurrentState.activityIn;
            boolean activityOut = mCurrentState.dataConnected
                    && !mCurrentState.carrierNetworkChangeMode
                    && mCurrentState.activityOut;

            showDataIcon &= mCurrentState.dataSim && mCurrentState.isDefault;
            boolean showTriangle = showDataIcon && !mCurrentState.airplaneMode;
            int typeIcon = (showDataIcon || mConfig.alwaysShowDataRatIcon) ? icons.dataType : 0;
@@ -417,10 +410,18 @@ public class MobileSignalController extends SignalController<MobileState, Mobile
            IconState statusIcon = new IconState(showDataIcon && !mCurrentState.airplaneMode,
                    getCurrentIconId(), contentDescription);
            MobileDataIndicators mobileDataIndicators = new MobileDataIndicators(
                    statusIcon, qsIcon, typeIcon, qsTypeIcon,
                    activityIn, activityOut, dataContentDescription, dataContentDescriptionHtml,
                    description, mSubscriptionInfo.getSubscriptionId(),
                    mCurrentState.roaming, showTriangle);
                    statusIcon,
                    qsIcon,
                    typeIcon,
                    qsTypeIcon,
                    mCurrentState.hasActivityIn(),
                    mCurrentState.hasActivityOut(),
                    dataContentDescription,
                    dataContentDescriptionHtml,
                    description,
                    mSubscriptionInfo.getSubscriptionId(),
                    mCurrentState.roaming,
                    showTriangle);
            callback.setMobileDataIndicators(mobileDataIndicators);
        } else {
            boolean showDataIcon = mCurrentState.dataConnected || dataDisabled;
@@ -452,20 +453,22 @@ public class MobileSignalController extends SignalController<MobileState, Mobile
                }
            }

            boolean activityIn = mCurrentState.dataConnected
                    && !mCurrentState.carrierNetworkChangeMode
                    && mCurrentState.activityIn;
            boolean activityOut = mCurrentState.dataConnected
                    && !mCurrentState.carrierNetworkChangeMode
                    && mCurrentState.activityOut;
            showDataIcon &= mCurrentState.isDefault || dataDisabled;
            int typeIcon = (showDataIcon || mConfig.alwaysShowDataRatIcon) ? icons.dataType : 0;
            boolean showTriangle = mCurrentState.enabled && !mCurrentState.airplaneMode;
            MobileDataIndicators mobileDataIndicators = new MobileDataIndicators(
                    statusIcon, qsIcon, typeIcon, qsTypeIcon,
                    activityIn, activityOut, dataContentDescription, dataContentDescriptionHtml,
                    description, mSubscriptionInfo.getSubscriptionId(),
                    mCurrentState.roaming, showTriangle);
                    statusIcon,
                    qsIcon,
                    typeIcon,
                    qsTypeIcon,
                    mCurrentState.hasActivityIn(),
                    mCurrentState.hasActivityOut(),
                    dataContentDescription,
                    dataContentDescriptionHtml,
                    description,
                    mSubscriptionInfo.getSubscriptionId(),
                    mCurrentState.roaming,
                    showTriangle);
            callback.setMobileDataIndicators(mobileDataIndicators);
        }
    }