SignalClusterView.java revision 5ccff81a642844138b144ad2cc339eba188812a0
12e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson/*
22e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson * Copyright (C) 2011 The Android Open Source Project
32e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson *
42e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson * Licensed under the Apache License, Version 2.0 (the "License");
52e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson * you may not use this file except in compliance with the License.
62e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson * You may obtain a copy of the License at
72e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson *
82e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson *      http://www.apache.org/licenses/LICENSE-2.0
92e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson *
102e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson * Unless required by applicable law or agreed to in writing, software
112e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson * distributed under the License is distributed on an "AS IS" BASIS,
122e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson * See the License for the specific language governing permissions and
142e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson * limitations under the License.
152e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson */
162e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson
172e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertsonpackage com.android.systemui.statusbar;
182e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson
192e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertsonimport android.content.Context;
202e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertsonimport android.util.AttributeSet;
2128f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandlerimport android.util.Slog;
222e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertsonimport android.view.View;
232e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertsonimport android.view.ViewGroup;
242e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertsonimport android.widget.ImageView;
252e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertsonimport android.widget.LinearLayout;
262e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertsonimport android.widget.TextView;
272e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson
282e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertsonimport com.android.systemui.statusbar.policy.NetworkController;
292e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson
302e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertsonimport com.android.systemui.R;
312e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson
325ccff81a642844138b144ad2cc339eba188812a0Daniel Sandler// Intimately tied to the design of res/layout/signal_cluster_view.xml
332e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertsonpublic class SignalClusterView
342e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson        extends LinearLayout
352e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson        implements NetworkController.SignalCluster {
362e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson
3728f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler    static final boolean DEBUG = false;
3828f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler    static final String TAG = "SignalClusterView";
3928f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler
402e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson    NetworkController mNC;
412e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson
4228f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler    private boolean mWifiVisible = false;
4328f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler    private int mWifiStrengthId = 0, mWifiActivityId = 0;
4428f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler    private boolean mMobileVisible = false;
4528f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler    private int mMobileStrengthId = 0, mMobileActivityId = 0, mMobileTypeId = 0;
465ccff81a642844138b144ad2cc339eba188812a0Daniel Sandler    private boolean mIsAirplaneMode = false;
4728f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler
482e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson    ViewGroup mWifiGroup, mMobileGroup;
492e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson    ImageView mWifi, mMobile, mWifiActivity, mMobileActivity, mMobileType;
505ccff81a642844138b144ad2cc339eba188812a0Daniel Sandler    View mSpacer;
512e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson
522e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson    public SignalClusterView(Context context) {
532e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson        this(context, null);
542e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson    }
552e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson
562e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson    public SignalClusterView(Context context, AttributeSet attrs) {
572e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson        this(context, attrs, 0);
582e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson    }
592e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson
602e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson    public SignalClusterView(Context context, AttributeSet attrs, int defStyle) {
612e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson        super(context, attrs, defStyle);
622e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson    }
632e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson
642e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson    public void setNetworkController(NetworkController nc) {
6528f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler        if (DEBUG) Slog.d(TAG, "NetworkController=" + nc);
662e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson        mNC = nc;
672e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson    }
682e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson
692e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson    @Override
702e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson    protected void onAttachedToWindow() {
712e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson        super.onAttachedToWindow();
722e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson
732e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson        mWifiGroup      = (ViewGroup) findViewById(R.id.wifi_combo);
742e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson        mWifi           = (ImageView) findViewById(R.id.wifi_signal);
752e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson        mWifiActivity   = (ImageView) findViewById(R.id.wifi_inout);
762e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson        mMobileGroup    = (ViewGroup) findViewById(R.id.mobile_combo);
772e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson        mMobile         = (ImageView) findViewById(R.id.mobile_signal);
782e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson        mMobileActivity = (ImageView) findViewById(R.id.mobile_inout);
792e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson        mMobileType     = (ImageView) findViewById(R.id.mobile_type);
805ccff81a642844138b144ad2cc339eba188812a0Daniel Sandler        mSpacer         =             findViewById(R.id.spacer);
8128f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler
8228f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler        apply();
832e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson    }
842e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson
852e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson    @Override
862e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson    protected void onDetachedFromWindow() {
8728f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler        mWifiGroup      = null;
8828f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler        mWifi           = null;
8928f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler        mWifiActivity   = null;
9028f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler        mMobileGroup    = null;
9128f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler        mMobile         = null;
9228f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler        mMobileActivity = null;
9328f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler        mMobileType     = null;
9428f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler
952e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson        super.onDetachedFromWindow();
962e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson    }
972e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson
982e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson    public void setWifiIndicators(boolean visible, int strengthIcon, int activityIcon) {
9928f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler        mWifiVisible = visible;
10028f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler        mWifiStrengthId = strengthIcon;
10128f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler        mWifiActivityId = activityIcon;
10228f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler
10328f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler        apply();
10428f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler    }
10528f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler
10628f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler    public void setMobileDataIndicators(boolean visible, int strengthIcon, int activityIcon,
10728f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler            int typeIcon) {
10828f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler        mMobileVisible = visible;
10928f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler        mMobileStrengthId = strengthIcon;
11028f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler        mMobileActivityId = activityIcon;
11128f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler        mMobileTypeId = typeIcon;
11228f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler
11328f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler        apply();
11428f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler    }
11528f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler
1165ccff81a642844138b144ad2cc339eba188812a0Daniel Sandler    public void setIsAirplaneMode(boolean is) {
1175ccff81a642844138b144ad2cc339eba188812a0Daniel Sandler        mIsAirplaneMode = is;
1185ccff81a642844138b144ad2cc339eba188812a0Daniel Sandler    }
1195ccff81a642844138b144ad2cc339eba188812a0Daniel Sandler
12028f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler    // Run after each indicator change.
12128f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler    private void apply() {
1222e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson        if (mWifiGroup == null) return;
1232e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson
12428f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler        if (mWifiVisible) {
1252e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson            mWifiGroup.setVisibility(View.VISIBLE);
12628f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler            mWifi.setImageResource(mWifiStrengthId);
12728f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler            mWifiActivity.setImageResource(mWifiActivityId);
1282e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson        } else {
1292e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson            mWifiGroup.setVisibility(View.GONE);
1302e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson        }
1312e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson
13228f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler        if (DEBUG) Slog.d(TAG,
13328f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler                String.format("wifi: %s sig=%d act=%d",
13428f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler                    (mWifiVisible ? "VISIBLE" : "GONE"),
13528f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler                    mWifiStrengthId, mWifiActivityId));
1362e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson
13728f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler        if (mMobileVisible) {
1382e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson            mMobileGroup.setVisibility(View.VISIBLE);
13928f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler            mMobile.setImageResource(mMobileStrengthId);
14028f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler            mMobileActivity.setImageResource(mMobileActivityId);
14128f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler            mMobileType.setImageResource(mMobileTypeId);
1422e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson        } else {
1432e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson            mMobileGroup.setVisibility(View.GONE);
1442e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson        }
14528f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler
1465ccff81a642844138b144ad2cc339eba188812a0Daniel Sandler        if (mMobileVisible && mWifiVisible && mIsAirplaneMode) {
1475ccff81a642844138b144ad2cc339eba188812a0Daniel Sandler            mSpacer.setVisibility(View.INVISIBLE);
1485ccff81a642844138b144ad2cc339eba188812a0Daniel Sandler        } else {
1495ccff81a642844138b144ad2cc339eba188812a0Daniel Sandler            mSpacer.setVisibility(View.GONE);
1505ccff81a642844138b144ad2cc339eba188812a0Daniel Sandler        }
1515ccff81a642844138b144ad2cc339eba188812a0Daniel Sandler
15228f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler        if (DEBUG) Slog.d(TAG,
15328f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler                String.format("mobile: %s sig=%d act=%d typ=%d",
15428f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler                    (mMobileVisible ? "VISIBLE" : "GONE"),
15528f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler                    mMobileStrengthId, mMobileActivityId, mMobileTypeId));
15628f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler
15728f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler        mMobileType.setVisibility(
15828f89d40ee7bab93cf7b783f92dbb18bdc43e473Daniel Sandler                !mWifiVisible ? View.VISIBLE : View.GONE);
1592e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson    }
1602e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson}
1612e347429dfcd03b0827c7506ba6305ab0d1f4951Christian Robertson
162