huangcm
2025-04-11 48566d1cda2d109a94496c806286f47b8984166d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
/*
 * Copyright (C) 2017 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.systemui.statusbar.phone;
 
import android.annotation.Nullable;
import android.content.Context;
import android.graphics.drawable.Icon;
import android.os.UserHandle;
 
import com.android.internal.statusbar.StatusBarIcon;
import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.MobileIconState;
import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.WifiIconState;
 
/**
 * Wraps {@link com.android.internal.statusbar.StatusBarIcon} so we can still have a uniform list
 */
public class StatusBarIconHolder {
    public static final int TYPE_ICON = 0;
    public static final int TYPE_WIFI = 1;
    public static final int TYPE_MOBILE = 2;
 
    private StatusBarIcon mIcon;
    private WifiIconState mWifiState;
    private MobileIconState mMobileState;
    private int mType = TYPE_ICON;
    private int mTag = 0;
    private boolean mVisible = true;
 
    public static StatusBarIconHolder fromIcon(StatusBarIcon icon) {
        StatusBarIconHolder wrapper = new StatusBarIconHolder();
        wrapper.mIcon = icon;
 
        return wrapper;
    }
 
    public static StatusBarIconHolder fromResId(Context context, int resId,
            CharSequence contentDescription) {
        StatusBarIconHolder holder = new StatusBarIconHolder();
        holder.mIcon = new StatusBarIcon(UserHandle.SYSTEM, context.getPackageName(),
                Icon.createWithResource( context, resId), 0, 0, contentDescription);
        return holder;
    }
 
    public static StatusBarIconHolder fromWifiIconState(WifiIconState state) {
        StatusBarIconHolder holder = new StatusBarIconHolder();
        holder.mWifiState = state;
        holder.mType = TYPE_WIFI;
        return holder;
    }
 
    public static StatusBarIconHolder fromMobileIconState(MobileIconState state) {
        StatusBarIconHolder holder = new StatusBarIconHolder();
        holder.mMobileState = state;
        holder.mType = TYPE_MOBILE;
        holder.mTag = state.subId;
        return holder;
    }
 
    public int getType() {
        return mType;
    }
 
    @Nullable
    public StatusBarIcon getIcon() {
        return mIcon;
    }
 
    @Nullable
    public WifiIconState getWifiState() {
        return mWifiState;
    }
 
    public void setWifiState(WifiIconState state) {
        mWifiState = state;
    }
 
    @Nullable
    public MobileIconState getMobileState() {
        return mMobileState;
    }
 
    public void setMobileState(MobileIconState state) {
        mMobileState = state;
    }
 
    public boolean isVisible() {
        switch (mType) {
            case TYPE_ICON:
                return mIcon.visible;
            case TYPE_WIFI:
                return mWifiState.visible;
            case TYPE_MOBILE:
                return mMobileState.visible;
 
            default: return true;
        }
    }
 
    public void setVisible(boolean visible) {
        if (isVisible() == visible) {
            return;
        }
 
        switch (mType) {
            case TYPE_ICON:
                mIcon.visible = visible;
                break;
 
            case TYPE_WIFI:
                mWifiState.visible = visible;
                break;
 
            case TYPE_MOBILE:
                mMobileState.visible = visible;
                break;
        }
    }
 
    public int getTag() {
        return mTag;
    }
}