diff options
Diffstat (limited to 'Defogger/src/no/mork/android/defogger/MainActivity.java')
-rw-r--r-- | Defogger/src/no/mork/android/defogger/MainActivity.java | 72 |
1 files changed, 63 insertions, 9 deletions
diff --git a/Defogger/src/no/mork/android/defogger/MainActivity.java b/Defogger/src/no/mork/android/defogger/MainActivity.java index cf6d2a9..6b38102 100644 --- a/Defogger/src/no/mork/android/defogger/MainActivity.java +++ b/Defogger/src/no/mork/android/defogger/MainActivity.java @@ -17,10 +17,14 @@ import android.text.format.DateFormat; import android.util.Base64; import android.util.Log; import android.view.KeyEvent; +import android.view.LayoutInflater; import android.view.View; +import android.view.ViewGroup; import android.view.inputmethod.EditorInfo; +import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; +import android.widget.ListView; import android.widget.TextView; import android.widget.TextView.OnEditorActionListener; import java.nio.charset.StandardCharsets; @@ -177,11 +181,11 @@ public class MainActivity extends Activity { } // utilities - private Map<String,String> splitKV(String kv) + private Map<String,String> splitKV(String kv, String splitter) { Map<String,String> ret = new HashMap(); - for (String s : kv.split(";")) { + for (String s : kv.split(splitter)) { String[] foo = s.split("="); ret.put(foo[0], foo[1]); } @@ -247,7 +251,7 @@ public class MainActivity extends Activity { public void onCharacteristicRead (BluetoothGatt gatt, BluetoothGattCharacteristic c, int status) { int code = (int)(c.getUuid().getMostSignificantBits() >> 32); String val = c.getStringValue(0); - Map<String,String> kv = splitKV(val); + Map<String,String> kv = splitKV(val, ";"); Log.d(msg, c.getUuid().toString() + " returned " + val); @@ -272,10 +276,8 @@ public class MainActivity extends Activity { if (!kv.get("N").equals(kv.get("P"))) doWifiScan(gatt); else - for (String net : multimsg.split("&")) - Log.d(msg, net); + selectNetwork(multimsg.split("&")); break; - case 0xa101: // wificonfig displayWifiConfig(kv); break; @@ -302,7 +304,7 @@ public class MainActivity extends Activity { public void onCharacteristicWrite (BluetoothGatt gatt, BluetoothGattCharacteristic c, int status) { int code = (int)(c.getUuid().getMostSignificantBits() >> 32); String val = c.getStringValue(0); - Map<String,String> kv = splitKV(val); + Map<String,String> kv = splitKV(val, ";"); Log.d(msg, "Write to " + c.getUuid().toString() + " status=" + status + ", value is now: " + val); @@ -384,6 +386,57 @@ public class MainActivity extends Activity { }); } + private class NetAdapter extends ArrayAdapter<String> { + private int res; + + public NetAdapter(Context context, int resource, String[] networks) { + super(context, resource, networks); + res = resource; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + //L=I=aaaa7,M=0,C=4,S=4,E=2,P=100 + // Get the data item for this position + Map<String,String> net = splitKV(getItem(position).substring(2), ","); + + // Check if an existing view is being reused, otherwise inflate the view + if (convertView == null) { + convertView = LayoutInflater.from(getContext()).inflate(res, parent, false); + } + + // Lookup view for data population + TextView ssid = (TextView) convertView.findViewById(R.id.ssid); + TextView channel = (TextView) convertView.findViewById(R.id.channel); + TextView key_mgmt = (TextView) convertView.findViewById(R.id.key_mgmt); + TextView proto = (TextView) convertView.findViewById(R.id.proto); + TextView rssi = (TextView) convertView.findViewById(R.id.rssi); + + // Populate the data into the template view using the data object + ssid.setText(net.get("I")); + channel.setText(net.get("C")); + key_mgmt.setText(net.get("S")); + proto.setText(net.get("E")); + rssi.setText(net.get("P")); + + // Return the completed view to render on screen + return convertView; + } + } + + private void selectNetwork(String[] networks) { + Context ctx = this; + Log.d(msg, "displayWifiConfig()"); + runOnUiThread(new Runnable() { + @Override + public void run() { + ArrayAdapter<String> itemsAdapter = new NetAdapter(ctx, R.layout.netitem, networks); + ListView listView = (ListView) findViewById(R.id.networks); + listView.setAdapter(itemsAdapter); + } + }); + } + private void connectDevice(BluetoothDevice device) { Log.d(msg, "connectDevice() " + device.getAddress()); @@ -423,11 +476,12 @@ public class MainActivity extends Activity { if (locked) return; - /* collect current config when unlocking */ - doWifiScan(gatt); + /* collect current config after unlocking */ getWifiConfig(gatt); + getWifiLink(gatt); getIpConfig(gatt); getSysInfo(gatt); + doWifiScan(gatt); } private void notifications(BluetoothGatt gatt, boolean enable) { |