diff --git a/app/build.gradle b/app/build.gradle
index 925d48f..bf3bf79 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -54,6 +54,10 @@ android {
buildConfigField "boolean", "IS_ALLOWED_FILTERING_BY_PREFIX", "true"
}
}
+ compileOptions {
+ sourceCompatibility = 1.8
+ targetCompatibility = 1.8
+ }
}
protobuf {
@@ -80,7 +84,7 @@ protobuf {
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.android.support:appcompat-v7:28.0.0'
- implementation 'com.android.support.constraint:constraint-layout:1.1.0'
+ implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'com.android.support:design:28.0.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
diff --git a/app/src/androidTest/java/com/espressif/espressif/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/espressif/espressif/ExampleInstrumentedTest.java
index 14a0fab..f75c6b0 100644
--- a/app/src/androidTest/java/com/espressif/espressif/ExampleInstrumentedTest.java
+++ b/app/src/androidTest/java/com/espressif/espressif/ExampleInstrumentedTest.java
@@ -20,7 +20,7 @@
import org.junit.Test;
import org.junit.runner.RunWith;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
/**
* Instrumented test, which will execute on an Android device.
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index e709724..5c92c96 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -8,6 +8,7 @@
+
diff --git a/app/src/main/java/com/espressif/provision/security/Security1.java b/app/src/main/java/com/espressif/provision/security/Security1.java
index addfdef..aa4503f 100644
--- a/app/src/main/java/com/espressif/provision/security/Security1.java
+++ b/app/src/main/java/com/espressif/provision/security/Security1.java
@@ -160,15 +160,9 @@ private void processStep0Response(byte[] hexData) throws RuntimeException {
this.cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec);
this.clientVerify = this.encrypt(devicePublicKey);
- } catch (InvalidProtocolBufferException e) {
- Log.e(TAG, e.getMessage());
- } catch (InvalidKeyException e) {
+ } catch (InvalidProtocolBufferException | InvalidKeyException | NoSuchAlgorithmException e) {
Log.e(TAG, e.getMessage());
- } catch (NoSuchAlgorithmException e) {
- Log.e(TAG, e.getMessage());
- } catch (NoSuchPaddingException e) {
- e.printStackTrace();
- } catch (InvalidAlgorithmParameterException e) {
+ } catch (NoSuchPaddingException | InvalidAlgorithmParameterException e) {
e.printStackTrace();
}
}
diff --git a/app/src/main/java/com/espressif/ui/activities/EspMainActivity.java b/app/src/main/java/com/espressif/ui/activities/EspMainActivity.java
index 4120171..e4aeb07 100644
--- a/app/src/main/java/com/espressif/ui/activities/EspMainActivity.java
+++ b/app/src/main/java/com/espressif/ui/activities/EspMainActivity.java
@@ -13,11 +13,13 @@
// limitations under the License.
package com.espressif.ui.activities;
+import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
+import android.content.pm.PackageManager;
import android.location.LocationManager;
import android.os.Build;
import android.os.Bundle;
@@ -26,7 +28,6 @@
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
-import android.text.TextUtils;
import android.util.Log;
import android.view.HapticFeedbackConstants;
import android.view.Menu;
@@ -123,6 +124,12 @@ protected void onResume() {
if (BuildConfig.FLAVOR_transport.equals("ble") && BLEProvisionLanding.isBleWorkDone) {
BLEProvisionLanding.bleTransport.disconnect();
}
+
+ if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ if (checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
+ requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, 87);
+ }
+ }
}
@Override
diff --git a/app/src/main/java/com/espressif/ui/activities/ProvisionActivity.java b/app/src/main/java/com/espressif/ui/activities/ProvisionActivity.java
index 86856b0..01f7364 100644
--- a/app/src/main/java/com/espressif/ui/activities/ProvisionActivity.java
+++ b/app/src/main/java/com/espressif/ui/activities/ProvisionActivity.java
@@ -13,8 +13,13 @@
// limitations under the License.
package com.espressif.ui.activities;
+import android.content.BroadcastReceiver;
+import android.content.Context;
import android.content.Intent;
+import android.content.IntentFilter;
import android.graphics.Color;
+import android.net.wifi.ScanResult;
+import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.os.Vibrator;
import android.support.v7.app.AppCompatActivity;
@@ -25,6 +30,7 @@
import android.util.Log;
import android.view.HapticFeedbackConstants;
import android.view.View;
+import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
@@ -40,6 +46,10 @@
import com.espressif.provision.session.Session;
import com.espressif.provision.transport.SoftAPTransport;
import com.espressif.provision.transport.Transport;
+import com.espressif.ui.adapters.AutoSuggestAdapter;
+
+import java.util.ArrayList;
+import java.util.List;
import espressif.Constants;
import espressif.WifiConstants;
@@ -49,7 +59,7 @@ public class ProvisionActivity extends AppCompatActivity {
private static final String TAG = "Espressif::" + ProvisionActivity.class.getSimpleName();
private TextView ssid;
- private EditText ssidInput;
+ private AutoCompleteTextView ssidInput;
private EditText passwordInput;
private Button btnProvision;
private ProgressBar progressBar;
@@ -58,6 +68,11 @@ public class ProvisionActivity extends AppCompatActivity {
private String ssidValue, passphraseValue = "";
private String pop, baseUrl, transportVersion, securityVersion;
+ private AutoSuggestAdapter autoSuggestAdapter;
+
+ private WifiManager wifiManager;
+ private WifiReceiver wifiReceiver;
+
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -67,6 +82,14 @@ protected void onCreate(Bundle savedInstanceState) {
toolbar.setTitle(R.string.title_activity_provision);
setSupportActionBar(toolbar);
+ // TODO: Add check for wifi enabled
+
+ wifiReceiver = new WifiReceiver();
+ wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
+ registerReceiver(wifiReceiver,
+ new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
+ wifiManager.startScan();
+
Intent intent = getIntent();
final String wifiSSID = intent.getStringExtra(Provision.PROVISIONING_WIFI_SSID);
wifiSecurityType = intent.getIntExtra(AppConstants.KEY_WIFI_SECURITY_TYPE, AppConstants.WIFI_OPEN);
@@ -76,6 +99,10 @@ protected void onCreate(Bundle savedInstanceState) {
securityVersion = intent.getStringExtra(Provision.CONFIG_SECURITY_KEY);
ssid = findViewById(R.id.ssid_text);
+
+ autoSuggestAdapter = new AutoSuggestAdapter(this,
+ android.R.layout.simple_dropdown_item_1line);
+
ssidInput = findViewById(R.id.ssid_input);
passwordInput = findViewById(R.id.password_input);
btnProvision = findViewById(R.id.btn_provision);
@@ -111,6 +138,9 @@ protected void onCreate(Bundle savedInstanceState) {
btnProvision.setAlpha(0.5f);
btnProvision.setTextColor(Color.WHITE);
+ ssidInput.setThreshold(2);
+ ssidInput.setAdapter(autoSuggestAdapter);
+
ssidInput.addTextChangedListener(new TextWatcher() {
@Override
@@ -390,4 +420,30 @@ private void goToSuccessPage(String statusText) {
goToSuccessPage.putExtras(getIntent());
startActivity(goToSuccessPage);
}
+
+ public class WifiReceiver extends BroadcastReceiver {
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+
+ Log.d(TAG,"wifi receiver");
+
+
+ if(intent.getAction().equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION))
+ {
+ List scanResults = wifiManager.getScanResults();
+
+ ArrayList ssidList = new ArrayList<>();
+
+ for (ScanResult scanResult : scanResults) {
+ if (scanResult.frequency > 2400 && scanResult.frequency < 2500){
+ ssidList.add(scanResult.SSID);
+ }
+ }
+
+ autoSuggestAdapter.setListData(ssidList);
+ autoSuggestAdapter.notifyDataSetChanged();
+ }
+ }
+ }
}
diff --git a/app/src/main/java/com/espressif/ui/adapters/AutoSuggestAdapter.java b/app/src/main/java/com/espressif/ui/adapters/AutoSuggestAdapter.java
new file mode 100644
index 0000000..a82867c
--- /dev/null
+++ b/app/src/main/java/com/espressif/ui/adapters/AutoSuggestAdapter.java
@@ -0,0 +1,62 @@
+package com.espressif.ui.adapters;
+
+import android.content.Context;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.widget.ArrayAdapter;
+import android.widget.Filter;
+import android.widget.Filterable;
+
+import java.util.ArrayList;
+import java.util.List;
+
+
+public class AutoSuggestAdapter extends ArrayAdapter implements Filterable {
+ private List listData;
+
+ public AutoSuggestAdapter(@NonNull Context context, int resource) {
+ super(context, resource);
+ listData = new ArrayList<>();
+ }
+
+ public void setListData(List list) {
+ listData.clear();
+ listData.addAll(list);
+ }
+
+ @Override
+ public int getCount() {
+ return listData.size();
+ }
+
+ @Nullable
+ @Override
+ public String getItem(int position) {
+ return listData.get(position);
+ }
+
+ @NonNull
+ @Override
+ public Filter getFilter() {
+ Filter dataFilter = new Filter() {
+ @Override
+ protected FilterResults performFiltering(CharSequence constraint) {
+ FilterResults filterResults = new FilterResults();
+ if (constraint != null) {
+ filterResults.values = listData;
+ filterResults.count = listData.size();
+ }
+ return filterResults;
+ }
+ @Override
+ protected void publishResults(CharSequence constraint, FilterResults results) {
+ if (results != null && (results.count > 0)) {
+ notifyDataSetChanged();
+ } else {
+ notifyDataSetInvalidated();
+ }
+ }
+ };
+ return dataFilter;
+ }
+}
diff --git a/app/src/main/java/com/espressif/ui/adapters/WiFiListAdapter.java b/app/src/main/java/com/espressif/ui/adapters/WiFiListAdapter.java
index 3585fce..390ad23 100644
--- a/app/src/main/java/com/espressif/ui/adapters/WiFiListAdapter.java
+++ b/app/src/main/java/com/espressif/ui/adapters/WiFiListAdapter.java
@@ -9,8 +9,8 @@
import android.widget.ImageView;
import android.widget.TextView;
-import com.espressif.provision.R;
import com.espressif.AppConstants;
+import com.espressif.provision.R;
import com.espressif.ui.models.WiFiAccessPoint;
import java.util.ArrayList;
diff --git a/app/src/main/res/layout/content_provision.xml b/app/src/main/res/layout/content_provision.xml
index 589c086..3ab6567 100644
--- a/app/src/main/res/layout/content_provision.xml
+++ b/app/src/main/res/layout/content_provision.xml
@@ -46,7 +46,7 @@
android:layout_marginEnd="20dp"
android:layout_marginBottom="30dp">
-