All Downloads are FREE. Search and download functionalities are using the official Maven repository.

src.com.android.settingslib.SignalIcon Maven / Gradle / Ivy

/*
 * Copyright (C) 2020 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 java.text.SimpleDateFormat;
import java.util.Objects;

/**
 * Icons and states for SysUI and Settings.
 */
public class SignalIcon {

    /**
     * Holds icons for a given state. Arrays are generally indexed as inet
     * state (full connectivity or not) first, and second dimension as
     * signal strength.
     */
    public static class IconGroup {
        public final int[][] sbIcons;
        public final int[][] qsIcons;
        public final int[] contentDesc;
        public final int sbNullState;
        public final int qsNullState;
        public final int sbDiscState;
        public final int qsDiscState;
        public final int discContentDesc;
        // 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) {
            this.name = name;
            this.sbIcons = sbIcons;
            this.qsIcons = qsIcons;
            this.contentDesc = contentDesc;
            this.sbNullState = sbNullState;
            this.qsNullState = qsNullState;
            this.sbDiscState = sbDiscState;
            this.qsDiscState = qsDiscState;
            this.discContentDesc = discContentDesc;
        }

        @Override
        public String toString() {
            return "IconGroup(" + name + ")";
        }
    }

    /**
     * Holds states for SysUI.
     */
    public static class State {
        // No locale as it's only used for logging purposes
        private static SimpleDateFormat sSDF = new SimpleDateFormat("MM-dd HH:mm:ss.SSS");
        public boolean connected;
        public boolean enabled;
        public boolean activityIn;
        public boolean activityOut;
        public int level;
        public IconGroup iconGroup;
        public int inetCondition;
        public int rssi; // Only for logging.

        // Not used for comparison, just used for logging.
        public long time;

        /**
         * Generates a copy of the source state.
         */
        public void copyFrom(State state) {
            connected = state.connected;
            enabled = state.enabled;
            level = state.level;
            iconGroup = state.iconGroup;
            inetCondition = state.inetCondition;
            activityIn = state.activityIn;
            activityOut = state.activityOut;
            rssi = state.rssi;
            time = state.time;
        }

        @Override
        public String toString() {
            if (time != 0) {
                StringBuilder builder = new StringBuilder();
                toString(builder);
                return builder.toString();
            } else {
                return "Empty " + getClass().getSimpleName();
            }
        }

        protected void toString(StringBuilder builder) {
            builder.append("connected=").append(connected).append(',')
                .append("enabled=").append(enabled).append(',')
                .append("level=").append(level).append(',')
                .append("inetCondition=").append(inetCondition).append(',')
                .append("iconGroup=").append(iconGroup).append(',')
                .append("activityIn=").append(activityIn).append(',')
                .append("activityOut=").append(activityOut).append(',')
                .append("rssi=").append(rssi).append(',')
                .append("lastModified=").append(sSDF.format(time));
        }

        @Override
        public boolean equals(Object o) {
            if (!o.getClass().equals(getClass())) {
                return false;
            }
            State other = (State) o;
            return other.connected == connected
                    && other.enabled == enabled
                    && other.level == level
                    && other.inetCondition == inetCondition
                    && other.iconGroup == iconGroup
                    && other.activityIn == activityIn
                    && other.activityOut == activityOut
                    && other.rssi == rssi;
        }
    }

    /**
     * Holds icons for a given MobileState.
     */
    public static class MobileIconGroup extends IconGroup {
        public final int dataContentDescription; // mContentDescriptionDataType
        public final int dataType;
        public final boolean isWide;
        public final int qsDataType;

        public MobileIconGroup(String name, int[][] sbIcons, int[][] qsIcons, int[] contentDesc,
                int sbNullState, int qsNullState, int sbDiscState, int qsDiscState,
                int discContentDesc, int dataContentDesc, int dataType, boolean isWide) {
            super(name, sbIcons, qsIcons, contentDesc, sbNullState, qsNullState, sbDiscState,
                qsDiscState, discContentDesc);
            this.dataContentDescription = dataContentDesc;
            this.dataType = dataType;
            this.isWide = isWide;
            this.qsDataType = dataType; // TODO: remove this field
        }
    }

    /**
     * Holds mobile states for SysUI.
     */
    public static class MobileState extends State {
        public String networkName;
        public String networkNameData;
        public boolean dataSim;
        public boolean dataConnected;
        public boolean isEmergency;
        public boolean airplaneMode;
        public boolean carrierNetworkChangeMode;
        public boolean isDefault;
        public boolean userSetup;
        public boolean roaming;
        public boolean defaultDataOff;  // Tracks the on/off state of the defaultDataSubscription

        @Override
        public void copyFrom(State s) {
            super.copyFrom(s);
            MobileState state = (MobileState) s;
            dataSim = state.dataSim;
            networkName = state.networkName;
            networkNameData = state.networkNameData;
            dataConnected = state.dataConnected;
            isDefault = state.isDefault;
            isEmergency = state.isEmergency;
            airplaneMode = state.airplaneMode;
            carrierNetworkChangeMode = state.carrierNetworkChangeMode;
            userSetup = state.userSetup;
            roaming = state.roaming;
            defaultDataOff = state.defaultDataOff;
        }

        @Override
        protected void toString(StringBuilder builder) {
            super.toString(builder);
            builder.append(',');
            builder.append("dataSim=").append(dataSim).append(',');
            builder.append("networkName=").append(networkName).append(',');
            builder.append("networkNameData=").append(networkNameData).append(',');
            builder.append("dataConnected=").append(dataConnected).append(',');
            builder.append("roaming=").append(roaming).append(',');
            builder.append("isDefault=").append(isDefault).append(',');
            builder.append("isEmergency=").append(isEmergency).append(',');
            builder.append("airplaneMode=").append(airplaneMode).append(',');
            builder.append("carrierNetworkChangeMode=").append(carrierNetworkChangeMode)
                    .append(',');
            builder.append("userSetup=").append(userSetup).append(',');
            builder.append("defaultDataOff=").append(defaultDataOff);
        }

        @Override
        public boolean equals(Object o) {
            return super.equals(o)
                && Objects.equals(((MobileState) o).networkName, networkName)
                && Objects.equals(((MobileState) o).networkNameData, networkNameData)
                && ((MobileState) o).dataSim == dataSim
                && ((MobileState) o).dataConnected == dataConnected
                && ((MobileState) o).isEmergency == isEmergency
                && ((MobileState) o).airplaneMode == airplaneMode
                && ((MobileState) o).carrierNetworkChangeMode == carrierNetworkChangeMode
                && ((MobileState) o).userSetup == userSetup
                && ((MobileState) o).isDefault == isDefault
                && ((MobileState) o).roaming == roaming
                && ((MobileState) o).defaultDataOff == defaultDataOff;
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy