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