Skip to content

Commit d7b295e

Browse files
committed
Merge branch 'feature/thread_device_provisioning_support' into 'master'
Feature: Thread Provisioning See merge request idf/esp-idf-provisioning-android!69
2 parents 4103281 + 6a2d30c commit d7b295e

26 files changed

+1799
-373
lines changed

README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ To get this app please clone this repository using the below command:
3333

3434
## Requirements
3535

36-
- Supports Android 6.0 (API level 23) and above.
36+
- Supports Android 8.0 (API level 26) and above.
3737

3838
## How to include
3939

@@ -48,7 +48,7 @@ To get this app please clone this repository using the below command:
4848
```
4949
And add a dependency code to your app module's `build.gradle` file.
5050
```
51-
implementation 'com.github.espressif:esp-idf-provisioning-android:lib-2.1.4'
51+
implementation 'com.github.espressif:esp-idf-provisioning-android:lib-2.2.0'
5252
```
5353

5454
## Using Provisioning Library

app/build.gradle

+7-5
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,14 @@ def getGitHash = { ->
1111

1212
android {
1313

14-
compileSdkVersion 33
14+
compileSdkVersion 34
1515

1616
defaultConfig {
1717
applicationId "com.espressif.wifi_provisioning"
18-
minSdkVersion 23
19-
targetSdkVersion 33
20-
versionCode 19
21-
versionName "2.1.4 - ${getGitHash()}"
18+
minSdkVersion 26
19+
targetSdkVersion 34
20+
versionCode 20
21+
versionName "2.2.0 - ${getGitHash()}"
2222
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
2323
}
2424

@@ -65,6 +65,8 @@ dependencies {
6565
implementation 'com.github.yuriy-budiyev:code-scanner:2.1.2'
6666
implementation 'com.github.firdausmaulan:AVLoadingIndicatorView:2.3.0'
6767

68+
implementation 'com.google.android.gms:play-services-threadnetwork:16.0.1'
69+
6870
testImplementation 'junit:junit:4.13.2'
6971
androidTestImplementation 'androidx.test.ext:junit:1.1.4'
7072
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.0'

app/src/androidTest/java/com/espressif/espressif/ExampleInstrumentedTest.java

+6-5
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,16 @@
1313
// limitations under the License.
1414
package com.espressif.espressif;
1515

16+
import static org.junit.Assert.assertEquals;
17+
1618
import android.content.Context;
17-
import android.support.test.InstrumentationRegistry;
18-
import android.support.test.runner.AndroidJUnit4;
19+
20+
import androidx.test.ext.junit.runners.AndroidJUnit4;
21+
import androidx.test.platform.app.InstrumentationRegistry;
1922

2023
import org.junit.Test;
2124
import org.junit.runner.RunWith;
2225

23-
import static org.junit.Assert.*;
24-
2526
/**
2627
* Instrumented test, which will execute on an Android device.
2728
*
@@ -32,7 +33,7 @@ public class ExampleInstrumentedTest {
3233
@Test
3334
public void useAppContext() throws Exception {
3435
// Context of the app under test.
35-
Context appContext = InstrumentationRegistry.getTargetContext();
36+
Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
3637

3738
assertEquals("com.espressif.espressif", appContext.getPackageName());
3839
}

app/src/main/AndroidManifest.xml

+5
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,11 @@
7777
android:label="@string/title_activity_wifi_scan_list"
7878
android:screenOrientation="portrait"
7979
android:theme="@style/AppTheme.NoActionBar" />
80+
<activity
81+
android:name="com.espressif.ui.activities.ThreadConfigActivity"
82+
android:label="@string/title_activity_wifi_scan_list"
83+
android:screenOrientation="portrait"
84+
android:theme="@style/AppTheme.NoActionBar" />
8085
<activity
8186
android:name="com.espressif.ui.activities.ProofOfPossessionActivity"
8287
android:label="@string/title_activity_pop"

app/src/main/java/com/espressif/AppConstants.java

+10-2
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,10 @@ public class AppConstants {
2727
public static final String KEY_WIFI_PASSWORD = "password";
2828
public static final String KEY_DEVICE_TYPES = "device_types";
2929
public static final String KEY_SECURITY_TYPE = "security_type";
30-
public static final String KEY_USER_NAME = "sec2_username";
30+
public static final String KEY_USER_NAME_WIFI = "sec2_username_wifi";
31+
public static final String KEY_USER_NAME_THREAD = "sec2_username_thread";
32+
public static final String KEY_THREAD_DATASET = "thread_dataset";
33+
public static final String KEY_THREAD_SCAN_AVAILABLE = "thread_scan_available";
3134

3235
public static final String ESP_PREFERENCES = "Esp_Preferences";
3336

@@ -40,5 +43,10 @@ public class AppConstants {
4043
public static final int SEC_TYPE_1 = 1;
4144
public static final int SEC_TYPE_2 = 2;
4245
public static final int SEC_TYPE_DEFAULT = SEC_TYPE_2;
43-
public static final String DEFAULT_USER_NAME = "wifiprov";
46+
public static final String DEFAULT_USER_NAME_WIFI = "wifiprov";
47+
public static final String DEFAULT_USER_NAME_THREAD = "threadprov";
48+
49+
public static final String CAPABILITY_WIFI_SCAN = "wifi_scan";
50+
public static final String CAPABILITY_THREAD_SCAN = "thread_scan";
51+
public static final String CAPABILITY_THREAD_PROV = "thread_prov";
4452
}

app/src/main/java/com/espressif/ui/activities/AddDeviceActivity.java

+24-5
Original file line numberDiff line numberDiff line change
@@ -229,10 +229,6 @@ public void onEvent(DeviceConnectionEvent event) {
229229

230230
case ESPConstants.EVENT_DEVICE_CONNECTED:
231231

232-
if (TextUtils.isEmpty(provisionManager.getEspDevice().getUserName())) {
233-
String userName = sharedPreferences.getString(AppConstants.KEY_USER_NAME, AppConstants.DEFAULT_USER_NAME);
234-
provisionManager.getEspDevice().setUserName(userName);
235-
}
236232
Log.d(TAG, "Device Connected Event Received");
237233
setSecurityTypeFromVersionInfo();
238234
break;
@@ -540,6 +536,14 @@ private void goToWiFiScanActivity() {
540536
startActivity(wifiListIntent);
541537
}
542538

539+
private void goToThreadScanActivity(boolean scanCapAvailable) {
540+
541+
finish();
542+
Intent threadConfigIntent = new Intent(getApplicationContext(), ThreadConfigActivity.class);
543+
threadConfigIntent.putExtra(AppConstants.KEY_THREAD_SCAN_AVAILABLE, scanCapAvailable);
544+
startActivity(threadConfigIntent);
545+
}
546+
543547
private void goToWiFiConfigActivity() {
544548

545549
finish();
@@ -724,6 +728,17 @@ private void setSecurityTypeFromVersionInfo() {
724728
default:
725729
securityType = AppConstants.SEC_TYPE_2;
726730
provisionManager.getEspDevice().setSecurityType(ESPConstants.SecurityType.SECURITY_2);
731+
ArrayList<String> deviceCaps = provisionManager.getEspDevice().getDeviceCapabilities();
732+
733+
if (deviceCaps != null && deviceCaps.size() > 0
734+
&& (deviceCaps.contains(AppConstants.CAPABILITY_THREAD_SCAN) || deviceCaps.contains(AppConstants.CAPABILITY_THREAD_PROV))
735+
) {
736+
String userName = sharedPreferences.getString(AppConstants.KEY_USER_NAME_THREAD, AppConstants.DEFAULT_USER_NAME_THREAD);
737+
provisionManager.getEspDevice().setUserName(userName);
738+
} else if (TextUtils.isEmpty(provisionManager.getEspDevice().getUserName())) {
739+
String userName = sharedPreferences.getString(AppConstants.KEY_USER_NAME_WIFI, AppConstants.DEFAULT_USER_NAME_WIFI);
740+
provisionManager.getEspDevice().setUserName(userName);
741+
}
727742
break;
728743
}
729744
} else {
@@ -754,8 +769,12 @@ private void setSecurityTypeFromVersionInfo() {
754769

755770
private void processDeviceCapabilities() {
756771
ArrayList<String> deviceCaps = espDevice.getDeviceCapabilities();
757-
if (deviceCaps.contains("wifi_scan")) {
772+
if (deviceCaps.contains(AppConstants.CAPABILITY_WIFI_SCAN)) {
758773
goToWiFiScanActivity();
774+
} else if (deviceCaps.contains(AppConstants.CAPABILITY_THREAD_SCAN)) {
775+
goToThreadScanActivity(true);
776+
} else if (deviceCaps.contains(AppConstants.CAPABILITY_THREAD_PROV)) {
777+
goToThreadScanActivity(false);
759778
} else {
760779
goToWiFiConfigActivity();
761780
}

app/src/main/java/com/espressif/ui/activities/BLEProvisionLanding.java

+21-9
Original file line numberDiff line numberDiff line change
@@ -325,16 +325,19 @@ private void requestLocationAndBtPermission() {
325325
private void processDeviceCapabilities() {
326326
ArrayList<String> deviceCaps = provisionManager.getEspDevice().getDeviceCapabilities();
327327

328-
if (deviceCaps != null && !deviceCaps.contains("no_pop") && securityType != AppConstants.SEC_TYPE_0) {
329-
330-
goToPopActivity();
331-
332-
} else if (deviceCaps.contains("wifi_scan")) {
333-
334-
goToWifiScanListActivity();
335-
328+
if (deviceCaps != null) {
329+
if (!deviceCaps.contains("no_pop") && securityType != AppConstants.SEC_TYPE_0) {
330+
goToPopActivity();
331+
} else if (deviceCaps.contains(AppConstants.CAPABILITY_WIFI_SCAN)) {
332+
goToWifiScanListActivity();
333+
} else if (deviceCaps.contains(AppConstants.CAPABILITY_THREAD_SCAN)) {
334+
goToThreadScanActivity(true);
335+
} else if (deviceCaps.contains(AppConstants.CAPABILITY_THREAD_PROV)) {
336+
goToThreadScanActivity(false);
337+
} else {
338+
goToWiFiConfigActivity();
339+
}
336340
} else {
337-
338341
goToWiFiConfigActivity();
339342
}
340343
}
@@ -568,6 +571,15 @@ private void goToWifiScanListActivity() {
568571
startActivity(wifiListIntent);
569572
}
570573

574+
private void goToThreadScanActivity(boolean scanCapAvailable) {
575+
576+
finish();
577+
Intent threadConfigIntent = new Intent(getApplicationContext(), ThreadConfigActivity.class);
578+
threadConfigIntent.putExtra(AppConstants.KEY_DEVICE_NAME, deviceList.get(position).getName());
579+
threadConfigIntent.putExtra(AppConstants.KEY_THREAD_SCAN_AVAILABLE, scanCapAvailable);
580+
startActivity(threadConfigIntent);
581+
}
582+
571583
private void goToWiFiConfigActivity() {
572584

573585
finish();

app/src/main/java/com/espressif/ui/activities/ManualProvBaseActivity.java

+11-2
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@
3131
import org.json.JSONException;
3232
import org.json.JSONObject;
3333

34+
import java.util.ArrayList;
35+
3436
public class ManualProvBaseActivity extends AppCompatActivity {
3537

3638
private static final String TAG = ManualProvBaseActivity.class.getSimpleName();
@@ -92,8 +94,15 @@ void setSecurityTypeFromVersionInfo() {
9294
default:
9395
securityType = AppConstants.SEC_TYPE_2;
9496
provisionManager.getEspDevice().setSecurityType(ESPConstants.SecurityType.SECURITY_2);
95-
if (TextUtils.isEmpty(provisionManager.getEspDevice().getUserName())) {
96-
String userName = sharedPreferences.getString(AppConstants.KEY_USER_NAME, AppConstants.DEFAULT_USER_NAME);
97+
ArrayList<String> deviceCaps = provisionManager.getEspDevice().getDeviceCapabilities();
98+
99+
if (deviceCaps != null && deviceCaps.size() > 0
100+
&& (deviceCaps.contains(AppConstants.CAPABILITY_THREAD_SCAN) || deviceCaps.contains(AppConstants.CAPABILITY_THREAD_PROV))
101+
) {
102+
String userName = sharedPreferences.getString(AppConstants.KEY_USER_NAME_THREAD, AppConstants.DEFAULT_USER_NAME_THREAD);
103+
provisionManager.getEspDevice().setUserName(userName);
104+
} else if (TextUtils.isEmpty(provisionManager.getEspDevice().getUserName())) {
105+
String userName = sharedPreferences.getString(AppConstants.KEY_USER_NAME_WIFI, AppConstants.DEFAULT_USER_NAME_WIFI);
97106
provisionManager.getEspDevice().setUserName(userName);
98107
}
99108
break;

app/src/main/java/com/espressif/ui/activities/ProofOfPossessionActivity.java

+15-1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import androidx.appcompat.app.AppCompatActivity;
2929
import androidx.cardview.widget.CardView;
3030

31+
import com.espressif.AppConstants;
3132
import com.espressif.provisioning.DeviceConnectionEvent;
3233
import com.espressif.provisioning.ESPConstants;
3334
import com.espressif.provisioning.ESPProvisionManager;
@@ -131,8 +132,12 @@ public void run() {
131132
btnNext.setAlpha(1f);
132133
progressBar.setVisibility(View.GONE);
133134
ArrayList<String> deviceCaps = provisionManager.getEspDevice().getDeviceCapabilities();
134-
if (deviceCaps.contains("wifi_scan")) {
135+
if (deviceCaps.contains(AppConstants.CAPABILITY_WIFI_SCAN)) {
135136
goToWiFiScanListActivity();
137+
} else if (deviceCaps.contains(AppConstants.CAPABILITY_THREAD_SCAN)) {
138+
goToThreadScanActivity(true);
139+
} else if (deviceCaps.contains(AppConstants.CAPABILITY_THREAD_PROV)) {
140+
goToThreadScanActivity(false);
136141
} else {
137142
goToWiFiConfigActivity();
138143
}
@@ -197,6 +202,15 @@ private void goToWiFiScanListActivity() {
197202
finish();
198203
}
199204

205+
private void goToThreadScanActivity(boolean scanCapAvailable) {
206+
207+
Intent threadConfigIntent = new Intent(getApplicationContext(), ThreadConfigActivity.class);
208+
threadConfigIntent.putExtras(getIntent());
209+
threadConfigIntent.putExtra(AppConstants.KEY_THREAD_SCAN_AVAILABLE, scanCapAvailable);
210+
startActivity(threadConfigIntent);
211+
finish();
212+
}
213+
200214
private void goToWiFiConfigActivity() {
201215

202216
Intent wifiConfigIntent = new Intent(getApplicationContext(), WiFiConfigActivity.class);

0 commit comments

Comments
 (0)