• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2020 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.android.settingslib;
17 
18 import java.text.SimpleDateFormat;
19 import java.util.Objects;
20 
21 /**
22  * Icons and states for SysUI and Settings.
23  */
24 public class SignalIcon {
25 
26     /**
27      * Holds icons for a given state. Arrays are generally indexed as inet
28      * state (full connectivity or not) first, and second dimension as
29      * signal strength.
30      */
31     public static class IconGroup {
32         public final int[][] sbIcons;
33         public final int[][] qsIcons;
34         public final int[] contentDesc;
35         public final int sbNullState;
36         public final int qsNullState;
37         public final int sbDiscState;
38         public final int qsDiscState;
39         public final int discContentDesc;
40         // For logging.
41         public final String name;
42 
IconGroup(String name, int[][] sbIcons, int[][] qsIcons, int[] contentDesc, int sbNullState, int qsNullState, int sbDiscState, int qsDiscState, int discContentDesc)43         public IconGroup(String name, int[][] sbIcons, int[][] qsIcons, int[] contentDesc,
44                 int sbNullState, int qsNullState, int sbDiscState, int qsDiscState,
45                 int discContentDesc) {
46             this.name = name;
47             this.sbIcons = sbIcons;
48             this.qsIcons = qsIcons;
49             this.contentDesc = contentDesc;
50             this.sbNullState = sbNullState;
51             this.qsNullState = qsNullState;
52             this.sbDiscState = sbDiscState;
53             this.qsDiscState = qsDiscState;
54             this.discContentDesc = discContentDesc;
55         }
56 
57         @Override
toString()58         public String toString() {
59             return "IconGroup(" + name + ")";
60         }
61     }
62 
63     /**
64      * Holds states for SysUI.
65      */
66     public static class State {
67         // No locale as it's only used for logging purposes
68         private static SimpleDateFormat sSDF = new SimpleDateFormat("MM-dd HH:mm:ss.SSS");
69         public boolean connected;
70         public boolean enabled;
71         public boolean activityIn;
72         public boolean activityOut;
73         public int level;
74         public IconGroup iconGroup;
75         public int inetCondition;
76         public int rssi; // Only for logging.
77 
78         // Not used for comparison, just used for logging.
79         public long time;
80 
81         /**
82          * Generates a copy of the source state.
83          */
copyFrom(State state)84         public void copyFrom(State state) {
85             connected = state.connected;
86             enabled = state.enabled;
87             level = state.level;
88             iconGroup = state.iconGroup;
89             inetCondition = state.inetCondition;
90             activityIn = state.activityIn;
91             activityOut = state.activityOut;
92             rssi = state.rssi;
93             time = state.time;
94         }
95 
96         @Override
toString()97         public String toString() {
98             if (time != 0) {
99                 StringBuilder builder = new StringBuilder();
100                 toString(builder);
101                 return builder.toString();
102             } else {
103                 return "Empty " + getClass().getSimpleName();
104             }
105         }
106 
toString(StringBuilder builder)107         protected void toString(StringBuilder builder) {
108             builder.append("connected=").append(connected).append(',')
109                 .append("enabled=").append(enabled).append(',')
110                 .append("level=").append(level).append(',')
111                 .append("inetCondition=").append(inetCondition).append(',')
112                 .append("iconGroup=").append(iconGroup).append(',')
113                 .append("activityIn=").append(activityIn).append(',')
114                 .append("activityOut=").append(activityOut).append(',')
115                 .append("rssi=").append(rssi).append(',')
116                 .append("lastModified=").append(sSDF.format(time));
117         }
118 
119         @Override
equals(Object o)120         public boolean equals(Object o) {
121             if (!o.getClass().equals(getClass())) {
122                 return false;
123             }
124             State other = (State) o;
125             return other.connected == connected
126                     && other.enabled == enabled
127                     && other.level == level
128                     && other.inetCondition == inetCondition
129                     && other.iconGroup == iconGroup
130                     && other.activityIn == activityIn
131                     && other.activityOut == activityOut
132                     && other.rssi == rssi;
133         }
134     }
135 
136     /**
137      * Holds icons for a given MobileState.
138      */
139     public static class MobileIconGroup extends IconGroup {
140         public final int dataContentDescription; // mContentDescriptionDataType
141         public final int dataType;
142         public final boolean isWide;
143         public final int qsDataType;
144 
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)145         public MobileIconGroup(String name, int[][] sbIcons, int[][] qsIcons, int[] contentDesc,
146                 int sbNullState, int qsNullState, int sbDiscState, int qsDiscState,
147                 int discContentDesc, int dataContentDesc, int dataType, boolean isWide) {
148             super(name, sbIcons, qsIcons, contentDesc, sbNullState, qsNullState, sbDiscState,
149                 qsDiscState, discContentDesc);
150             this.dataContentDescription = dataContentDesc;
151             this.dataType = dataType;
152             this.isWide = isWide;
153             this.qsDataType = dataType; // TODO: remove this field
154         }
155     }
156 
157     /**
158      * Holds mobile states for SysUI.
159      */
160     public static class MobileState extends State {
161         public String networkName;
162         public String networkNameData;
163         public boolean dataSim;
164         public boolean dataConnected;
165         public boolean isEmergency;
166         public boolean airplaneMode;
167         public boolean carrierNetworkChangeMode;
168         public boolean isDefault;
169         public boolean userSetup;
170         public boolean roaming;
171         public boolean defaultDataOff;  // Tracks the on/off state of the defaultDataSubscription
172 
173         @Override
copyFrom(State s)174         public void copyFrom(State s) {
175             super.copyFrom(s);
176             MobileState state = (MobileState) s;
177             dataSim = state.dataSim;
178             networkName = state.networkName;
179             networkNameData = state.networkNameData;
180             dataConnected = state.dataConnected;
181             isDefault = state.isDefault;
182             isEmergency = state.isEmergency;
183             airplaneMode = state.airplaneMode;
184             carrierNetworkChangeMode = state.carrierNetworkChangeMode;
185             userSetup = state.userSetup;
186             roaming = state.roaming;
187             defaultDataOff = state.defaultDataOff;
188         }
189 
190         @Override
toString(StringBuilder builder)191         protected void toString(StringBuilder builder) {
192             super.toString(builder);
193             builder.append(',');
194             builder.append("dataSim=").append(dataSim).append(',');
195             builder.append("networkName=").append(networkName).append(',');
196             builder.append("networkNameData=").append(networkNameData).append(',');
197             builder.append("dataConnected=").append(dataConnected).append(',');
198             builder.append("roaming=").append(roaming).append(',');
199             builder.append("isDefault=").append(isDefault).append(',');
200             builder.append("isEmergency=").append(isEmergency).append(',');
201             builder.append("airplaneMode=").append(airplaneMode).append(',');
202             builder.append("carrierNetworkChangeMode=").append(carrierNetworkChangeMode)
203                     .append(',');
204             builder.append("userSetup=").append(userSetup).append(',');
205             builder.append("defaultDataOff=").append(defaultDataOff);
206         }
207 
208         @Override
equals(Object o)209         public boolean equals(Object o) {
210             return super.equals(o)
211                 && Objects.equals(((MobileState) o).networkName, networkName)
212                 && Objects.equals(((MobileState) o).networkNameData, networkNameData)
213                 && ((MobileState) o).dataSim == dataSim
214                 && ((MobileState) o).dataConnected == dataConnected
215                 && ((MobileState) o).isEmergency == isEmergency
216                 && ((MobileState) o).airplaneMode == airplaneMode
217                 && ((MobileState) o).carrierNetworkChangeMode == carrierNetworkChangeMode
218                 && ((MobileState) o).userSetup == userSetup
219                 && ((MobileState) o).isDefault == isDefault
220                 && ((MobileState) o).roaming == roaming
221                 && ((MobileState) o).defaultDataOff == defaultDataOff;
222         }
223     }
224 }
225