1e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird/*
2e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird * Copyright (C) 2018 The Android Open Source Project
3e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird *
4e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird * Licensed under the Apache License, Version 2.0 (the "License");
5e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird * you may not use this file except in compliance with the License.
6e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird * You may obtain a copy of the License at
7e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird *
8e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird *      http://www.apache.org/licenses/LICENSE-2.0
9e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird *
10e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird * Unless required by applicable law or agreed to in writing, software
11e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird * distributed under the License is distributed on an "AS IS" BASIS,
12e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird * See the License for the specific language governing permissions and
14e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird * limitations under the License.
15e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird */
16e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird
17e1d13c9884e6f4579b1265400b61a36207748dc3Evan Lairdpackage com.android.systemui.statusbar;
18e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird
1997ae20c5d841a244369dba5decaa3ab994cdad33Evan Lairdimport static com.android.systemui.statusbar.StatusBarIconView.STATE_DOT;
2097ae20c5d841a244369dba5decaa3ab994cdad33Evan Lairdimport static com.android.systemui.statusbar.StatusBarIconView.STATE_HIDDEN;
2197ae20c5d841a244369dba5decaa3ab994cdad33Evan Lairdimport static com.android.systemui.statusbar.StatusBarIconView.STATE_ICON;
22e1d13c9884e6f4579b1265400b61a36207748dc3Evan Lairdimport static com.android.systemui.statusbar.policy.DarkIconDispatcher.getTint;
23dbeefe3315d718f022b3b499311064a3fb015425Evan Lairdimport static com.android.systemui.statusbar.policy.DarkIconDispatcher.isInArea;
24e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird
25e1d13c9884e6f4579b1265400b61a36207748dc3Evan Lairdimport android.content.Context;
26e1d13c9884e6f4579b1265400b61a36207748dc3Evan Lairdimport android.content.res.ColorStateList;
27e1d13c9884e6f4579b1265400b61a36207748dc3Evan Lairdimport android.graphics.Color;
28e1d13c9884e6f4579b1265400b61a36207748dc3Evan Lairdimport android.graphics.Rect;
29e1d13c9884e6f4579b1265400b61a36207748dc3Evan Lairdimport android.util.AttributeSet;
3097ae20c5d841a244369dba5decaa3ab994cdad33Evan Lairdimport android.util.Log;
3197ae20c5d841a244369dba5decaa3ab994cdad33Evan Lairdimport android.view.Gravity;
32e1d13c9884e6f4579b1265400b61a36207748dc3Evan Lairdimport android.view.LayoutInflater;
33e1d13c9884e6f4579b1265400b61a36207748dc3Evan Lairdimport android.view.View;
3497ae20c5d841a244369dba5decaa3ab994cdad33Evan Lairdimport android.widget.FrameLayout;
35e1d13c9884e6f4579b1265400b61a36207748dc3Evan Lairdimport android.widget.ImageView;
36e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird
3797ae20c5d841a244369dba5decaa3ab994cdad33Evan Lairdimport android.widget.LinearLayout;
38e1d13c9884e6f4579b1265400b61a36207748dc3Evan Lairdimport com.android.internal.annotations.VisibleForTesting;
39e1d13c9884e6f4579b1265400b61a36207748dc3Evan Lairdimport com.android.keyguard.AlphaOptimizedLinearLayout;
40e1d13c9884e6f4579b1265400b61a36207748dc3Evan Lairdimport com.android.settingslib.graph.SignalDrawable;
41e1d13c9884e6f4579b1265400b61a36207748dc3Evan Lairdimport com.android.systemui.R;
42e1d13c9884e6f4579b1265400b61a36207748dc3Evan Lairdimport com.android.systemui.statusbar.phone.StatusBarSignalPolicy.MobileIconState;
43e1d13c9884e6f4579b1265400b61a36207748dc3Evan Lairdimport com.android.systemui.statusbar.policy.DarkIconDispatcher.DarkReceiver;
44e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird
4597ae20c5d841a244369dba5decaa3ab994cdad33Evan Lairdpublic class StatusBarMobileView extends FrameLayout implements DarkReceiver,
46e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        StatusIconDisplayable {
47e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird    private static final String TAG = "StatusBarMobileView";
48e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird
4997ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird    /// Used to show etc dots
5097ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird    private StatusBarIconView mDotView;
5197ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird    /// The main icon view
5297ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird    private LinearLayout mMobileGroup;
53e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird    private String mSlot;
54e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird    private MobileIconState mState;
55e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird    private SignalDrawable mMobileDrawable;
56e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird    private View mInoutContainer;
57e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird    private ImageView mIn;
58e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird    private ImageView mOut;
59e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird    private ImageView mMobile, mMobileType, mMobileRoaming;
60e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird    private View mMobileRoamingSpace;
6197ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird    private int mVisibleState = -1;
62e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird
6397ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird    public static StatusBarMobileView fromContext(Context context, String slot) {
64e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        LayoutInflater inflater = LayoutInflater.from(context);
6597ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird        StatusBarMobileView v = (StatusBarMobileView)
66e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird                inflater.inflate(R.layout.status_bar_mobile_signal_group, null);
6797ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird
6897ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird        v.setSlot(slot);
6997ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird        v.init();
7097ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird        v.setVisibleState(STATE_ICON);
7197ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird        return v;
72e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird    }
73e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird
74e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird    public StatusBarMobileView(Context context) {
75e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        super(context);
76e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird    }
77e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird
78e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird    public StatusBarMobileView(Context context, AttributeSet attrs) {
79e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        super(context, attrs);
80e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird    }
81e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird
82e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird    public StatusBarMobileView(Context context, AttributeSet attrs, int defStyleAttr) {
83e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        super(context, attrs, defStyleAttr);
84e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird    }
85e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird
86e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird    public StatusBarMobileView(Context context, AttributeSet attrs, int defStyleAttr,
87e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird            int defStyleRes) {
88e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        super(context, attrs, defStyleAttr, defStyleRes);
89e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird    }
90e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird
91c1397271750a76f57edad0c85218f320d5c83a92Evan Laird    @Override
92c1397271750a76f57edad0c85218f320d5c83a92Evan Laird    public void getDrawingRect(Rect outRect) {
93c1397271750a76f57edad0c85218f320d5c83a92Evan Laird        super.getDrawingRect(outRect);
94c1397271750a76f57edad0c85218f320d5c83a92Evan Laird        float translationX = getTranslationX();
95c1397271750a76f57edad0c85218f320d5c83a92Evan Laird        float translationY = getTranslationY();
96c1397271750a76f57edad0c85218f320d5c83a92Evan Laird        outRect.left += translationX;
97c1397271750a76f57edad0c85218f320d5c83a92Evan Laird        outRect.right += translationX;
98c1397271750a76f57edad0c85218f320d5c83a92Evan Laird        outRect.top += translationY;
99c1397271750a76f57edad0c85218f320d5c83a92Evan Laird        outRect.bottom += translationY;
100c1397271750a76f57edad0c85218f320d5c83a92Evan Laird    }
101c1397271750a76f57edad0c85218f320d5c83a92Evan Laird
102e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird    private void init() {
10397ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird        mMobileGroup = findViewById(R.id.mobile_group);
104e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        mMobile = findViewById(R.id.mobile_signal);
105e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        mMobileType = findViewById(R.id.mobile_type);
106e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        mMobileRoaming = findViewById(R.id.mobile_roaming);
107e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        mMobileRoamingSpace = findViewById(R.id.mobile_roaming_space);
108e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        mIn = findViewById(R.id.mobile_in);
109e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        mOut = findViewById(R.id.mobile_out);
110e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        mInoutContainer = findViewById(R.id.inout_container);
111e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird
112e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        mMobileDrawable = new SignalDrawable(getContext());
113e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        mMobile.setImageDrawable(mMobileDrawable);
11497ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird
11597ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird        initDotView();
11697ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird    }
11797ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird
11897ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird    private void initDotView() {
11997ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird        mDotView = new StatusBarIconView(mContext, mSlot, null);
12097ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird        mDotView.setVisibleState(STATE_DOT);
12197ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird
12297ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird        int width = mContext.getResources().getDimensionPixelSize(R.dimen.status_bar_icon_size);
12397ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird        LayoutParams lp = new LayoutParams(width, width);
12497ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird        lp.gravity = Gravity.CENTER_VERTICAL | Gravity.START;
12597ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird        addView(mDotView, lp);
126e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird    }
127e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird
128e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird    public void applyMobileState(MobileIconState state) {
129e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        if (state == null) {
130e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird            setVisibility(View.GONE);
131e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird            mState = null;
132e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird            return;
133e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        }
134e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird
135e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        if (mState == null) {
13656fb9f8aa52d14006c2638a216c113c35b801e66Evan Laird            mState = state.copy();
137e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird            initViewState();
138e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird            return;
139e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        }
140e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird
141e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        if (!mState.equals(state)) {
14256fb9f8aa52d14006c2638a216c113c35b801e66Evan Laird            updateState(state.copy());
143e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        }
144e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird    }
145e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird
146e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird    private void initViewState() {
147e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        setContentDescription(mState.contentDescription);
148e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        if (!mState.visible) {
14997ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird            mMobileGroup.setVisibility(View.GONE);
150e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        } else {
15197ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird            mMobileGroup.setVisibility(View.VISIBLE);
152e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        }
153e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        mMobileDrawable.setLevel(mState.strengthId);
154e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        if (mState.typeId > 0) {
155e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird            mMobileType.setContentDescription(mState.typeContentDescription);
156e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird            mMobileType.setImageResource(mState.typeId);
157e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird            mMobileType.setVisibility(View.VISIBLE);
158e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        } else {
159e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird            mMobileType.setVisibility(View.GONE);
160e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        }
161e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird
162e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        mMobileRoaming.setVisibility(mState.roaming ? View.VISIBLE : View.GONE);
163e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        mMobileRoamingSpace.setVisibility(mState.roaming ? View.VISIBLE : View.GONE);
164e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        mIn.setVisibility(mState.activityIn ? View.VISIBLE : View.GONE);
165e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        mOut.setVisibility(mState.activityIn ? View.VISIBLE : View.GONE);
166e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        mInoutContainer.setVisibility((mState.activityIn || mState.activityOut)
167e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird                ? View.VISIBLE : View.GONE);
168e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird    }
169e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird
170e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird    private void updateState(MobileIconState state) {
171e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        setContentDescription(state.contentDescription);
172e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        if (mState.visible != state.visible) {
17397ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird            mMobileGroup.setVisibility(state.visible ? View.VISIBLE : View.GONE);
174e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        }
175e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        if (mState.strengthId != state.strengthId) {
176e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird            mMobileDrawable.setLevel(state.strengthId);
177e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        }
1786dedbe6a4de6a0fe2045f60d90da5e1a41d3156fEvan Laird        if (mState.typeId != state.typeId) {
1796dedbe6a4de6a0fe2045f60d90da5e1a41d3156fEvan Laird            if (state.typeId != 0) {
1806dedbe6a4de6a0fe2045f60d90da5e1a41d3156fEvan Laird                mMobileType.setContentDescription(state.typeContentDescription);
1816dedbe6a4de6a0fe2045f60d90da5e1a41d3156fEvan Laird                mMobileType.setImageResource(state.typeId);
1826dedbe6a4de6a0fe2045f60d90da5e1a41d3156fEvan Laird                mMobileType.setVisibility(View.VISIBLE);
1836dedbe6a4de6a0fe2045f60d90da5e1a41d3156fEvan Laird            } else {
1846dedbe6a4de6a0fe2045f60d90da5e1a41d3156fEvan Laird                mMobileType.setVisibility(View.GONE);
1856dedbe6a4de6a0fe2045f60d90da5e1a41d3156fEvan Laird            }
186e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        }
187e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird
188e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        mMobileRoaming.setVisibility(state.roaming ? View.VISIBLE : View.GONE);
189e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        mMobileRoamingSpace.setVisibility(state.roaming ? View.VISIBLE : View.GONE);
190e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        mIn.setVisibility(state.activityIn ? View.VISIBLE : View.GONE);
191e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        mOut.setVisibility(state.activityIn ? View.VISIBLE : View.GONE);
192e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        mInoutContainer.setVisibility((state.activityIn || state.activityOut)
193e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird                ? View.VISIBLE : View.GONE);
194e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird
195e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        mState = state;
196e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird    }
197e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird
198e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird    @Override
199e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird    public void onDarkChanged(Rect area, float darkIntensity, int tint) {
200dbeefe3315d718f022b3b499311064a3fb015425Evan Laird        if (!isInArea(area, this)) {
201dbeefe3315d718f022b3b499311064a3fb015425Evan Laird            return;
202dbeefe3315d718f022b3b499311064a3fb015425Evan Laird        }
203e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        mMobileDrawable.setDarkIntensity(darkIntensity);
204e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        ColorStateList color = ColorStateList.valueOf(getTint(area, this, tint));
205e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        mIn.setImageTintList(color);
206e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        mOut.setImageTintList(color);
207e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        mMobileType.setImageTintList(color);
208e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        mMobileRoaming.setImageTintList(color);
20997ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird        mDotView.setDecorColor(tint);
21097ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird        mDotView.setIconColor(tint, false);
211e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird    }
212e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird
213e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird    @Override
214e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird    public String getSlot() {
215e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        return mSlot;
216e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird    }
217e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird
218e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird    public void setSlot(String slot) {
219e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        mSlot = slot;
220e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird    }
221e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird
222e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird    @Override
223e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird    public void setStaticDrawableColor(int color) {
224e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        ColorStateList list = ColorStateList.valueOf(color);
225e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        float intensity = color == Color.WHITE ? 0 : 1;
226e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        mMobileDrawable.setDarkIntensity(intensity);
227e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird
228e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        mIn.setImageTintList(list);
229e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        mOut.setImageTintList(list);
230e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        mMobileType.setImageTintList(list);
231e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        mMobileRoaming.setImageTintList(list);
23297ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird        mDotView.setDecorColor(color);
233e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird    }
234e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird
235e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird    @Override
23620b87bf0ae8c880a76d0de859b3665b7d4f2e144Evan Laird    public void setDecorColor(int color) {
23797ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird        mDotView.setDecorColor(color);
23820b87bf0ae8c880a76d0de859b3665b7d4f2e144Evan Laird    }
23920b87bf0ae8c880a76d0de859b3665b7d4f2e144Evan Laird
24020b87bf0ae8c880a76d0de859b3665b7d4f2e144Evan Laird    @Override
241e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird    public boolean isIconVisible() {
242e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        return mState.visible;
243e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird    }
244e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird
24520b87bf0ae8c880a76d0de859b3665b7d4f2e144Evan Laird    @Override
24620b87bf0ae8c880a76d0de859b3665b7d4f2e144Evan Laird    public void setVisibleState(int state) {
24797ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird        if (state == mVisibleState) {
24897ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird            return;
24997ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird        }
25097ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird
25197ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird        mVisibleState = state;
25297ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird        switch (state) {
25397ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird            case STATE_ICON:
25497ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird                mMobileGroup.setVisibility(View.VISIBLE);
25597ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird                mDotView.setVisibility(View.GONE);
25697ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird                break;
25797ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird            case STATE_DOT:
25897ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird                mMobileGroup.setVisibility(View.INVISIBLE);
25997ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird                mDotView.setVisibility(View.VISIBLE);
26097ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird                break;
26197ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird            case STATE_HIDDEN:
26297ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird            default:
26378047782344dc2f75ec4fca7b884946065d2aadfEvan Laird                mMobileGroup.setVisibility(View.INVISIBLE);
26478047782344dc2f75ec4fca7b884946065d2aadfEvan Laird                mDotView.setVisibility(View.INVISIBLE);
26597ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird                break;
26697ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird        }
26720b87bf0ae8c880a76d0de859b3665b7d4f2e144Evan Laird    }
26820b87bf0ae8c880a76d0de859b3665b7d4f2e144Evan Laird
269150701d41f6e766b07265798c4dd9b5fc78e02ccEvan Laird    @Override
270150701d41f6e766b07265798c4dd9b5fc78e02ccEvan Laird    public int getVisibleState() {
27197ae20c5d841a244369dba5decaa3ab994cdad33Evan Laird        return mVisibleState;
272150701d41f6e766b07265798c4dd9b5fc78e02ccEvan Laird    }
273150701d41f6e766b07265798c4dd9b5fc78e02ccEvan Laird
274e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird    @VisibleForTesting
275e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird    public MobileIconState getState() {
276e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        return mState;
277e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird    }
278e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird
279e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird    @Override
280e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird    public String toString() {
281e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird        return "StatusBarMobileView(slot=" + mSlot + " state=" + mState + ")";
282e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird    }
283e1d13c9884e6f4579b1265400b61a36207748dc3Evan Laird}
284