diff options
author | Bjørn Mork <bjorn@mork.no> | 2019-06-04 13:14:54 +0200 |
---|---|---|
committer | Bjørn Mork <bjorn@mork.no> | 2019-06-04 13:14:54 +0200 |
commit | b072705f962f3d223fb7f8984e69a5289f7f1b3c (patch) | |
tree | 4820419bf1deeff79c8f131a6d5008db6e58eb2f | |
parent | d89b7c37ca5fc790f9ac02dfebb808fb16406ae3 (diff) |
fixing crash on null, which was the the activity was destroyed
Signed-off-by: Bjørn Mork <bjorn@mork.no>
-rw-r--r-- | Defogger/AndroidManifest.xml | 35 | ||||
-rw-r--r-- | Defogger/res/values/strings.xml | 3 | ||||
-rw-r--r-- | Defogger/src/no/mork/android/defogger/ConfigureNetworkActivity.java | 32 | ||||
-rw-r--r-- | Defogger/src/no/mork/android/defogger/IpCamActivity.java | 45 | ||||
-rw-r--r-- | Defogger/src/no/mork/android/defogger/MainActivity.java | 25 | ||||
-rw-r--r-- | Defogger/src/no/mork/android/defogger/Util.java | 10 |
6 files changed, 79 insertions, 71 deletions
diff --git a/Defogger/AndroidManifest.xml b/Defogger/AndroidManifest.xml index d977486..c5a53bd 100644 --- a/Defogger/AndroidManifest.xml +++ b/Defogger/AndroidManifest.xml @@ -17,22 +17,23 @@ <uses-feature android:name="android.hardware.bluetooth_le" android:required="true"/> <application android:label="Defogger"> - <activity android:name="no.mork.android.defogger.MainActivity"> - <intent-filter> - <category android:name="android.intent.category.LAUNCHER"/> - <action android:name="android.intent.action.MAIN"/> - </intent-filter> - </activity> - <activity - android:name="no.mork.android.defogger.ScannerActivity" - android:parentActivityName="no.mork.android.defogger.MainActivity" /> - <activity - android:name="no.mork.android.defogger.IpCamActivity" - android:parentActivityName="no.mork.android.defogger.MainActivity" - android:windowSoftInputMode="stateHidden|adjustResize" /> - <activity - android:name="no.mork.android.defogger.ConfigureNetworkActivity" - android:parentActivityName="no.mork.android.defogger.IpCamActivity" - android:windowSoftInputMode="stateHidden|adjustResize" /> + <activity + android:name=".MainActivity"> + <intent-filter> + <category android:name="android.intent.category.LAUNCHER"/> + <action android:name="android.intent.action.MAIN"/> + </intent-filter> + </activity> + <activity + android:name=".ScannerActivity" + android:parentActivityName=".MainActivity" /> + <activity + android:name=".IpCamActivity" + android:parentActivityName=".MainActivity" + android:windowSoftInputMode="stateHidden|adjustResize" /> + <activity + android:name=".ConfigureNetworkActivity" + android:parentActivityName=".IpCamActivity" + android:windowSoftInputMode="stateHidden|adjustResize" /> </application> </manifest> diff --git a/Defogger/res/values/strings.xml b/Defogger/res/values/strings.xml index 88502ab..27ee25e 100644 --- a/Defogger/res/values/strings.xml +++ b/Defogger/res/values/strings.xml @@ -17,6 +17,9 @@ <string name="unsignedfw">Enable unsigned firmware (permanent)</string> <string name="command">Run command</string> + <string name="qrtitle">Read D-Link Camera QR Code</string> + + <!-- Scanner --> <string name="bluetooth_client">Bluetooth Client</string> diff --git a/Defogger/src/no/mork/android/defogger/ConfigureNetworkActivity.java b/Defogger/src/no/mork/android/defogger/ConfigureNetworkActivity.java index 7613fa9..38a8fec 100644 --- a/Defogger/src/no/mork/android/defogger/ConfigureNetworkActivity.java +++ b/Defogger/src/no/mork/android/defogger/ConfigureNetworkActivity.java @@ -34,6 +34,7 @@ public class ConfigureNetworkActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { + Log.d(msg, "onCreate()"); super.onCreate(savedInstanceState); setContentView(R.layout.activity_configurenetwork); @@ -74,18 +75,15 @@ public class ConfigureNetworkActivity extends Activity { ListView listView = (ListView) findViewById(R.id.networks); listView.setAdapter(networklist); - intent.putExtra("netconf", ""); - setResult(RESULT_CANCELED, intent); } public void returnConfigResult(String config) { - Log.d(msg, "returnConfigResult()"); + Log.d(msg, "returnConfigResult(): " + config); Intent intent = new Intent(); if (config != null) { intent.putExtra("netconf", config); setResult(RESULT_OK, intent); } else { - intent.putExtra("netconf", ""); setResult(RESULT_CANCELED, intent); } finish(); @@ -98,21 +96,31 @@ public class ConfigureNetworkActivity extends Activity { if (selected == null) returnConfigResult(null); - Map<String,String> kv = Util.splitKV(selected, "."); + Log.d(msg, "selected is " + selected); + + Map<String,String> kv = Util.splitKV(selected, ","); EditText edit = (EditText) findViewById(R.id.password); String password = edit.getText().toString(); - String ret = null; - String ssid = kv.get("I"); // FIXME: allow entering SSID in edit field + + edit = (EditText) findViewById(R.id.ssid); + String ssid = kv.containsKey("I") ? kv.get("I") : edit.getText().toString(); + + /* returning empty ssid is not allowed */ + if (ssid == null || ssid.length() == 0) + returnConfigResult(null); + if (password == null) password = ""; - /* assume open network if password is empty? */ - if (password.length() == 0 && (!kv.get("S").equals("0") || !kv.get("E").equals("0"))) + /* set defaults, assuming open network if password is empty and ssid was not found */ + int S = kv.containsKey("S") ? Integer.parseInt(kv.get("S")) : password.length() > 0 ? 4 : 0; + int E = kv.containsKey("E") ? Integer.parseInt(kv.get("E")) : password.length() > 0 ? 2 : 0; + + /* password is required unless open network */ + if (password.length() == 0 && (S != 0 || E !=0)) returnConfigResult(null); else - ret = "M=0;I=" + ssid + ";S=" + kv.get("S") + ";E=" + kv.get("E") + ";K=" + password; - - returnConfigResult(ret); + returnConfigResult("M=0;I=" + ssid + ";S=" + S + ";E=" + E + ";K=" + password); } private class NetAdapter extends ArrayAdapter { diff --git a/Defogger/src/no/mork/android/defogger/IpCamActivity.java b/Defogger/src/no/mork/android/defogger/IpCamActivity.java index 3b0c774..1e2f251 100644 --- a/Defogger/src/no/mork/android/defogger/IpCamActivity.java +++ b/Defogger/src/no/mork/android/defogger/IpCamActivity.java @@ -69,6 +69,7 @@ public class IpCamActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { + Log.d(msg, "onCreate()"); super.onCreate(savedInstanceState); setContentView(R.layout.activity_ipcam); @@ -76,9 +77,11 @@ public class IpCamActivity extends Activity { Intent intent = getIntent(); pincode = intent.getStringExtra("pincode"); Bundle b = intent.getExtras(); - if (b != null) + if (b == null) // when can this happen? Answer: If we crashed and are restarted by the system.... + Log.e(msg, "Caller failed to provide us with a Bluetooth device - all actions will fail (pincode is " + pincode + ")"); + else device = b.getParcelable("btdevice"); - + EditText cmd = (EditText) findViewById(R.id.command); cmd.setOnEditorActionListener(new OnEditorActionListener() { @Override @@ -101,25 +104,6 @@ public class IpCamActivity extends Activity { } @Override - protected void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - Log.d(msg, "onSaveInstanceState()"); - outState.putParcelable("btdevice", device); - outState.putString("pincode", pincode); - } - - @Override - public void onRestoreInstanceState(Bundle savedInstanceState) { - // Always call the superclass so it can restore the view hierarchy - super.onRestoreInstanceState(savedInstanceState); - Log.d(msg, "onRestoreInstanceState()"); - - // Restore state members from saved instance - device = savedInstanceState.getParcelable("btdevice"); - pincode = savedInstanceState.getString("pincode"); - } - - @Override protected void onActivityResult(int req, int res, Intent intent) { super.onActivityResult(req, res, intent); Log.d(msg, "activity returned result"); @@ -214,6 +198,9 @@ public class IpCamActivity extends Activity { break; case 0xa103: // wifilink wifilink = kv.get("S").equals("1"); + // refresh IP config if link changed to up + if (wifilink) + readChar(0xa104); break; case 0xa104: // ipconfig displayIpConfig(kv); @@ -333,7 +320,7 @@ public class IpCamActivity extends Activity { } private void connectDevice(BluetoothDevice device) { - if (device == null) + if (device == null || connected) return; Log.d(msg, "connectDevice() " + device.getAddress()); @@ -366,15 +353,14 @@ public class IpCamActivity extends Activity { if (mGatt != null) mGatt.close(); - Log.d(msg, "disconnectDevice() " + device.getAddress() + " with reason: " + reason); - finish(); + Log.d(msg, "disconnectDevice() with reason: " + reason); + finish(); } private void getCurrentConfig() { View v = new View(this); getWifiLink(v); getWifiConfig(v); - getIpConfig(v); getSysInfo(v); doWifiScan(v); } @@ -484,10 +470,6 @@ public class IpCamActivity extends Activity { readChar(0xa103); } - public void getIpConfig(View view) { - readChar(0xa104); - } - public void getSysInfo(View view) { readChar(0xa200); } @@ -533,9 +515,10 @@ public class IpCamActivity extends Activity { return; } + Log.d(msg, "Would configure: " + netconf); /* OK, go */ - writeChar(0xa101, netconf); // configure wifi - writeChar(0xa102, "C=1"); // connect + // writeChar(0xa101, netconf); // configure wifi + // writeChar(0xa102, "C=1"); // connect /* refresh current settings for display */ getCurrentConfig(); diff --git a/Defogger/src/no/mork/android/defogger/MainActivity.java b/Defogger/src/no/mork/android/defogger/MainActivity.java index d90413a..0aa6379 100644 --- a/Defogger/src/no/mork/android/defogger/MainActivity.java +++ b/Defogger/src/no/mork/android/defogger/MainActivity.java @@ -31,6 +31,8 @@ public class MainActivity extends Activity { private static final int REQUEST_GET_DEVICE = 2; private BluetoothAdapter bluetoothAdapter; + private BluetoothDevice device; + private String pincode; @Override protected void onCreate(Bundle savedInstanceState) { @@ -49,6 +51,9 @@ public class MainActivity extends Activity { protected void onActivityResult(int requestCode, int resultCode, Intent dataIntent) { super.onActivityResult(requestCode, resultCode, dataIntent); + Log.d(msg, "onActivityResult() requestCode=" + requestCode); + Log.d(msg, "Intent is " + dataIntent); + switch (requestCode) { case IntentIntegrator.REQUEST_CODE: IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, dataIntent); @@ -68,19 +73,22 @@ public class MainActivity extends Activity { break; } - BluetoothDevice dev = dataIntent.getExtras().getParcelable("btdevice"); - if (dev == null) { + device = dataIntent.getExtras().getParcelable("btdevice"); + if (device == null) { + pincode = null; setStatus("No camera selected"); break; } String pincode = dataIntent.getStringExtra("pincode"); if (pincode == null || pincode.length() < 6) { + pincode = null; + device = null; setStatus("Bogus pincode"); break; } - startIpCamActivity(dev, pincode); + startIpCamActivity(); break; default: Log.d(msg, "unknown request???"); @@ -108,8 +116,9 @@ public class MainActivity extends Activity { } } - public void startIpCamActivity(BluetoothDevice device, String pincode) { + public void startIpCamActivity() { Intent intent = new Intent(this, IpCamActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); intent.putExtra("pincode", pincode); intent.putExtra("btdevice", device); startActivity(intent); @@ -122,7 +131,8 @@ public class MainActivity extends Activity { public void startQRReaderActivity(View view) { IntentIntegrator integrator = new IntentIntegrator(this); - integrator.initiateScan(); + integrator.setTitleByID(R.values.qrtitle); + integrator.initiateScan(IntentIntegrator.QR_CODE_TYPES); } private void handleQRScanResult(IntentResult res) { @@ -151,8 +161,9 @@ public class MainActivity extends Activity { Log.d(msg, "Got invalid MAC address from QR scan:" + mac.toString()); return; } - BluetoothDevice dev = bluetoothAdapter.getRemoteDevice(mac.toString()); - startIpCamActivity(dev, data[5]); + device = bluetoothAdapter.getRemoteDevice(mac.toString()); + pincode = data[5]; + startIpCamActivity(); } diff --git a/Defogger/src/no/mork/android/defogger/Util.java b/Defogger/src/no/mork/android/defogger/Util.java index 1492843..6bbfd99 100644 --- a/Defogger/src/no/mork/android/defogger/Util.java +++ b/Defogger/src/no/mork/android/defogger/Util.java @@ -21,11 +21,13 @@ public class Util { public static Map<String,String> splitKV(String kv, String splitter) { Map<String,String> ret = new HashMap(); + + if (kv != null) + for (String s : kv.split(splitter)) { + String[] foo = s.split("="); + ret.put(foo[0], foo[1]); + } - for (String s : kv.split(splitter)) { - String[] foo = s.split("="); - ret.put(foo[0], foo[1]); - } return ret; } |