Home | History | Annotate | Download | only in statusbar
      1 /*
      2  * Copyright (C) 2011 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 
     17 package com.android.systemui.statusbar;
     18 
     19 import android.content.Context;
     20 import android.util.AttributeSet;
     21 import android.util.Slog;
     22 import android.view.View;
     23 import android.view.ViewGroup;
     24 import android.widget.ImageView;
     25 import android.widget.LinearLayout;
     26 import android.widget.TextView;
     27 
     28 import com.android.systemui.statusbar.policy.NetworkController;
     29 
     30 import com.android.systemui.R;
     31 
     32 // Intimately tied to the design of res/layout/signal_cluster_view.xml
     33 public class SignalClusterView
     34         extends LinearLayout
     35         implements NetworkController.SignalCluster {
     36 
     37     static final boolean DEBUG = false;
     38     static final String TAG = "SignalClusterView";
     39 
     40     NetworkController mNC;
     41 
     42     private boolean mWifiVisible = false;
     43     private int mWifiStrengthId = 0, mWifiActivityId = 0;
     44     private boolean mMobileVisible = false;
     45     private int mMobileStrengthId = 0, mMobileActivityId = 0, mMobileTypeId = 0;
     46     private boolean mIsAirplaneMode = false;
     47     private String mWifiDescription, mMobileDescription, mMobileTypeDescription;
     48 
     49     ViewGroup mWifiGroup, mMobileGroup;
     50     ImageView mWifi, mMobile, mWifiActivity, mMobileActivity, mMobileType;
     51     View mSpacer;
     52 
     53     public SignalClusterView(Context context) {
     54         this(context, null);
     55     }
     56 
     57     public SignalClusterView(Context context, AttributeSet attrs) {
     58         this(context, attrs, 0);
     59     }
     60 
     61     public SignalClusterView(Context context, AttributeSet attrs, int defStyle) {
     62         super(context, attrs, defStyle);
     63     }
     64 
     65     public void setNetworkController(NetworkController nc) {
     66         if (DEBUG) Slog.d(TAG, "NetworkController=" + nc);
     67         mNC = nc;
     68     }
     69 
     70     @Override
     71     protected void onAttachedToWindow() {
     72         super.onAttachedToWindow();
     73 
     74         mWifiGroup      = (ViewGroup) findViewById(R.id.wifi_combo);
     75         mWifi           = (ImageView) findViewById(R.id.wifi_signal);
     76         mWifiActivity   = (ImageView) findViewById(R.id.wifi_inout);
     77         mMobileGroup    = (ViewGroup) findViewById(R.id.mobile_combo);
     78         mMobile         = (ImageView) findViewById(R.id.mobile_signal);
     79         mMobileActivity = (ImageView) findViewById(R.id.mobile_inout);
     80         mMobileType     = (ImageView) findViewById(R.id.mobile_type);
     81         mSpacer         =             findViewById(R.id.spacer);
     82 
     83         apply();
     84     }
     85 
     86     @Override
     87     protected void onDetachedFromWindow() {
     88         mWifiGroup      = null;
     89         mWifi           = null;
     90         mWifiActivity   = null;
     91         mMobileGroup    = null;
     92         mMobile         = null;
     93         mMobileActivity = null;
     94         mMobileType     = null;
     95 
     96         super.onDetachedFromWindow();
     97     }
     98 
     99     public void setWifiIndicators(boolean visible, int strengthIcon, int activityIcon,
    100             String contentDescription) {
    101         mWifiVisible = visible;
    102         mWifiStrengthId = strengthIcon;
    103         mWifiActivityId = activityIcon;
    104         mWifiDescription = contentDescription;
    105 
    106         apply();
    107     }
    108 
    109     public void setMobileDataIndicators(boolean visible, int strengthIcon, int activityIcon,
    110             int typeIcon, String contentDescription, String typeContentDescription) {
    111         mMobileVisible = visible;
    112         mMobileStrengthId = strengthIcon;
    113         mMobileActivityId = activityIcon;
    114         mMobileTypeId = typeIcon;
    115         mMobileDescription = contentDescription;
    116         mMobileTypeDescription = typeContentDescription;
    117 
    118         apply();
    119     }
    120 
    121     public void setIsAirplaneMode(boolean is) {
    122         mIsAirplaneMode = is;
    123     }
    124 
    125     // Run after each indicator change.
    126     private void apply() {
    127         if (mWifiGroup == null) return;
    128 
    129         if (mWifiVisible) {
    130             mWifiGroup.setVisibility(View.VISIBLE);
    131             mWifi.setImageResource(mWifiStrengthId);
    132             mWifiActivity.setImageResource(mWifiActivityId);
    133             mWifiGroup.setContentDescription(mWifiDescription);
    134         } else {
    135             mWifiGroup.setVisibility(View.GONE);
    136         }
    137 
    138         if (DEBUG) Slog.d(TAG,
    139                 String.format("wifi: %s sig=%d act=%d",
    140                     (mWifiVisible ? "VISIBLE" : "GONE"),
    141                     mWifiStrengthId, mWifiActivityId));
    142 
    143         if (mMobileVisible) {
    144             mMobileGroup.setVisibility(View.VISIBLE);
    145             mMobile.setImageResource(mMobileStrengthId);
    146             mMobileActivity.setImageResource(mMobileActivityId);
    147             mMobileType.setImageResource(mMobileTypeId);
    148             mMobileGroup.setContentDescription(mMobileTypeDescription + " " + mMobileDescription);
    149         } else {
    150             mMobileGroup.setVisibility(View.GONE);
    151         }
    152 
    153         if (mMobileVisible && mWifiVisible && mIsAirplaneMode) {
    154             mSpacer.setVisibility(View.INVISIBLE);
    155         } else {
    156             mSpacer.setVisibility(View.GONE);
    157         }
    158 
    159         if (DEBUG) Slog.d(TAG,
    160                 String.format("mobile: %s sig=%d act=%d typ=%d",
    161                     (mMobileVisible ? "VISIBLE" : "GONE"),
    162                     mMobileStrengthId, mMobileActivityId, mMobileTypeId));
    163 
    164         mMobileType.setVisibility(
    165                 !mWifiVisible ? View.VISIBLE : View.GONE);
    166     }
    167 }
    168 
    169