package com.softwinner.launcher.ui;
import com.softwinner.launcher.R;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.wifi.WifiManager;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import java.util.ArrayList;
public class StatusbarRight extends LinearLayout{
private ArrayList<View> mViews = new ArrayList<View>();
private final int LEFT_BACKGROUND_ID = R.drawable.statusbar_l;
private final int MIDDLE_BACKGROUND_ID = R.drawable.statusbar_m;
private final int RIGHT_BACKGROUND_ID = R.drawable.statusbar_r;
private final int [] WIFI_SIGNAL_ID = {
R.drawable.wifi_signal_1,
R.drawable.wifi_signal_2,
R.drawable.wifi_signal_3,
R.drawable.wifi_signal_4,
R.drawable.wifi_signal_5,
};
private final int [] SETTINGS_ID = {
R.drawable.ssettings,
R.drawable.settings,
};
private final String WIFI_TAG = "wifi_icon";
private final String MID_VIEW_TAG = "_mid";
private LayoutInflater mInflater;
private ImageView mLeftView ;
private ImageView mWifiSignal;
private ImageView mSettings;
private int mLastWifiSignalLevel;
private boolean mIsWifiConnected;
public StatusbarRight(Context context, AttributeSet attrs) {
super(context, attrs);
mInflater = LayoutInflater.from(context);
mLeftView = new ImageView(context, attrs);
mLeftView.setImageResource(LEFT_BACKGROUND_ID);
View clock = mInflater.inflate(R.layout.digital_clock,null);
addViewForStatusbar(clock,null);
mSettings = new ImageView(context, attrs);
mSettings.setImageResource(SETTINGS_ID[0]);
//addViewForStatusbar(mSettings,null);
mWifiSignal = new ImageView(context,attrs);
mWifiSignal.setImageResource(WIFI_SIGNAL_ID[0]);
addViewForStatusbar(mWifiSignal,WIFI_TAG);
setTagViewVisible(WIFI_TAG,false);
setOrientation(HORIZONTAL);
}
private void addViewForLayout(){
detachAllViewsFromParent();
for(View childs:mViews){
addView(childs);
}
invalidate();
}
private View createMiddleView(){
ImageView v = new ImageView(mContext);
v.setImageResource(MIDDLE_BACKGROUND_ID);
return v;
}
public void addViewForStatusbar(View child,Object TAG){
if(mViews.contains(child)){
return;
}
if(mViews.size() == 0){
mViews.add(mLeftView);
}
if(mViews.size() == 1){
mViews.add(child);
child.setBackgroundResource(RIGHT_BACKGROUND_ID);
}else{
mViews.add(1, child);
child.setBackgroundResource(RIGHT_BACKGROUND_ID);
View v = createMiddleView();
if(TAG != null ){
child.setTag(TAG);
v.setTag(TAG + MID_VIEW_TAG);
}
mViews.add(2,v);
}
addViewForLayout();
}
public void setTagViewVisible(Object o , boolean isVisible){
View v = findViewWithTag(o);
View vm = findViewWithTag(o + MID_VIEW_TAG);
if(v==null || vm==null){
return;
}
if(!isVisible){
v.setVisibility(GONE);
vm.setVisibility(GONE);
}else{
v.setVisibility(VISIBLE);
vm.setVisibility(VISIBLE);
}
}
public void updateWifi(Intent intent){
final String action = intent.getAction();
Log.d("status","0");
if(action.equals(ConnectivityManager.CONNECTIVITY_ACTION) ||
action.equals(ConnectivityManager.INET_CONDITION_ACTION)){
NetworkInfo info = (NetworkInfo)(intent.getParcelableExtra(
ConnectivityManager.EXTRA_NETWORK_INFO));
Log.d("status","t"+info.getType());
switch(info.getType()){
case ConnectivityManager.TYPE_WIFI:
if (info.isConnected()) {
mIsWifiConnected = true;
int iconId;
if (mLastWifiSignalLevel == -1) {
iconId = WIFI_SIGNAL_ID[0];
} else {
iconId = WIFI_SIGNAL_ID[mLastWifiSignalLevel];
}
mWifiSignal.setImageResource(iconId);
// Show the icon since wi-fi is connected
Log.d("status","1");
setTagViewVisible(WIFI_TAG,true);
} else {
mLastWifiSignalLevel = -1;
mIsWifiConnected = false;
int iconId = WIFI_SIGNAL_ID[0];
Log.d("status","2");
mWifiSignal.setImageResource(iconId);
setTagViewVisible(WIFI_TAG,false);
}
break;
}
}
if (action.equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) {
final boolean enabled = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE,
WifiManager.WIFI_STATE_UNKNOWN) == WifiManager.WIFI_STATE_ENABLED;
if (!enabled) {
Log.d("status","3");
setTagViewVisible(WIFI_TAG,false);
}
} else if (action.equals(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION)) {
final boolean enabled = intent.getBooleanExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED,
false);
if (!enabled) {
Log.d("status","4");
setTagViewVisible(WIFI_TAG,false);
}
} else if (action.equals(WifiManager.RSSI_CHANGED_ACTION)) {
int iconId;
final int newRssi = intent.getIntExtra(WifiManager.EXTRA_NEW_RSSI, -200);
int newSignalLevel = WifiManager.calculateSignalLevel(newRssi,WIFI_SIGNAL_ID.length);
if (newSignalLevel != mLastWifiSignalLevel) {
mLastWifiSignalLevel = newSignalLevel;
if (mIsWifiConnected) {
iconId = WIFI_SIGNAL_ID[newSignalLevel];
}else{
iconId = WIFI_SIGNAL_ID[0];
}
Log.d("status","5");
mWifiSignal.setImageResource(iconId);
}
}
}
}