package de.j4velin.wifiAutoOff; import android.content.Context; import android.graphics.Color; import android.net.ConnectivityManager; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.preference.Preference; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; public class StatusPreference extends Preference { private ImageView image; private TextView title; private TextView sub1; private TextView sub2; public StatusPreference(final Context context, final AttributeSet attrs) { super(context, attrs); } @Override protected View onCreateView(final ViewGroup parent) { super.onCreateView(parent); LayoutInflater li = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); View v = li.inflate(R.layout.statepreference, parent, false); image = (ImageView) v.findViewById(R.id.icon); title = (TextView) v.findViewById(R.id.title); sub1 = (TextView) v.findViewById(R.id.sub1); sub2 = (TextView) v.findViewById(R.id.sub2); update(); return v; } /** * Called to update the status preference */ void update() { WifiManager wm = (WifiManager) getContext().getSystemService(Context.WIFI_SERVICE); boolean connected = ((ConnectivityManager) getContext().getSystemService(Context.CONNECTIVITY_SERVICE)) .getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected(); if (title == null) return; if (wm.isWifiEnabled()) { if (!connected) { title.setText(R.string.no_connected); image.setColorFilter(Color.DKGRAY); sub1.setText(R.string.click_to_select_network); sub2.setVisibility(View.GONE); } else { WifiInfo wi = wm.getConnectionInfo(); title.setText(wi.getSSID()); image.setColorFilter(getContext().getResources().getColor(R.color.colorAccent)); updateSignal(); int ip = wi.getIpAddress(); sub2.setText(String.format("%d.%d.%d.%d", (ip & 0xff), (ip >> 8 & 0xff), (ip >> 16 & 0xff), (ip >> 24 & 0xff))); sub2.setVisibility(View.VISIBLE); } } else { title.setText(R.string.wifi_not_enabled); image.setColorFilter(Color.LTGRAY); sub1.setText(R.string.click_to_turn_on); sub2.setVisibility(View.GONE); } } /** * Called to update the WiFi signal text * * @return true, if connected to a WiFi network */ boolean updateSignal() { WifiManager wm = (WifiManager) getContext().getSystemService(Context.WIFI_SERVICE); boolean connected = ((ConnectivityManager) getContext().getSystemService(Context.CONNECTIVITY_SERVICE)) .getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnectedOrConnecting(); if (sub1 == null) return wm.isWifiEnabled() && connected; if (wm.isWifiEnabled() && connected) { WifiInfo wi = wm.getConnectionInfo(); try { sub1.setText(WifiManager.calculateSignalLevel(wi.getRssi(), 100) + "% - " + wi.getLinkSpeed() + " Mbps"); } catch (ArithmeticException e) { // might happen on Android 2.3 devices: https://code.google.com/p/android/issues/detail?id=2555 sub1.setText(wi.getLinkSpeed() + " Mbps"); } return true; } else { return false; } } }