Skip to content

Commit aec721f

Browse files
committed
Merge branch 'task/android_gradle_update' into 'master'
Added support for Android 12 & 13. See merge request idf/esp-idf-provisioning-android!60
2 parents 798842c + b81827f commit aec721f

13 files changed

+365
-163
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -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.1'
51+
implementation 'com.github.espressif:esp-idf-provisioning-android:lib-2.1.2'
5252
```
5353

5454
## Using Provisioning Library

app/build.gradle

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

1212
android {
1313

14-
compileSdkVersion 30
14+
compileSdkVersion 33
1515

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

@@ -47,11 +47,7 @@ android {
4747
buildConfigField "boolean", "isFilteringByPrefixAllowed", "true"
4848
}
4949
}
50-
51-
compileOptions {
52-
sourceCompatibility JavaVersion.VERSION_1_8
53-
targetCompatibility JavaVersion.VERSION_1_8
54-
}
50+
namespace 'com.espressif.wifi_provisioning'
5551
}
5652

5753
dependencies {
@@ -61,15 +57,15 @@ dependencies {
6157
implementation 'com.google.android.material:material:1.1.0'
6258
implementation 'androidx.preference:preference:1.1.1'
6359

64-
implementation 'com.google.protobuf:protobuf-javalite:3.14.0'
60+
implementation 'com.google.protobuf:protobuf-javalite:3.18.0'
6561
implementation 'com.google.crypto.tink:tink-android:1.6.1'
6662
implementation project(path: ':provisioning')
6763

6864
implementation 'org.greenrobot:eventbus:3.2.0'
69-
implementation 'com.github.yuriy-budiyev:code-scanner:2.1.0'
65+
implementation 'com.github.yuriy-budiyev:code-scanner:2.1.2'
7066
implementation 'com.github.firdausmaulan:AVLoadingIndicatorView:2.3.0'
7167

7268
testImplementation 'junit:junit:4.13.2'
73-
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
74-
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
69+
androidTestImplementation 'androidx.test.ext:junit:1.1.4'
70+
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.0'
7571
}

app/src/main/AndroidManifest.xml

+15-5
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,28 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3-
package="com.espressif.wifi_provisioning">
2+
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
43

54
<uses-permission android:name="android.permission.CAMERA" />
65
<uses-permission android:name="android.permission.INTERNET" />
76
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
8-
<uses-permission android:name="android.permission.BLUETOOTH" />
9-
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
107
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
118
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
129
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
1310
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
1411
<uses-permission android:name="android.permission.VIBRATE" />
1512
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
1613

14+
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
15+
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
16+
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
17+
18+
<!-- Request legacy Bluetooth permissions on older devices. -->
19+
<uses-permission
20+
android:name="android.permission.BLUETOOTH"
21+
android:maxSdkVersion="30" />
22+
<uses-permission
23+
android:name="android.permission.BLUETOOTH_ADMIN"
24+
android:maxSdkVersion="30" />
25+
1726
<application
1827
android:allowBackup="true"
1928
android:icon="@mipmap/ic_launcher"
@@ -26,7 +35,8 @@
2635
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
2736
android:label="@string/app_name"
2837
android:screenOrientation="portrait"
29-
android:theme="@style/AppTheme.NoActionBar">
38+
android:theme="@style/AppTheme.NoActionBar"
39+
android:exported="true">
3040
<intent-filter>
3141
<action android:name="android.intent.action.MAIN" />
3242

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

+126-45
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,15 @@
3131
import android.text.TextUtils;
3232
import android.util.Log;
3333
import android.view.View;
34+
import android.widget.ImageView;
35+
import android.widget.LinearLayout;
3436
import android.widget.TextView;
3537
import android.widget.Toast;
3638

3739
import androidx.annotation.NonNull;
3840
import androidx.annotation.Nullable;
3941
import androidx.appcompat.app.AlertDialog;
4042
import androidx.appcompat.app.AppCompatActivity;
41-
import androidx.cardview.widget.CardView;
4243
import androidx.core.app.ActivityCompat;
4344

4445
import com.budiyev.android.codescanner.CodeScanner;
@@ -50,6 +51,7 @@
5051
import com.espressif.provisioning.ESPProvisionManager;
5152
import com.espressif.provisioning.listeners.QRCodeScanListener;
5253
import com.espressif.wifi_provisioning.R;
54+
import com.google.android.material.card.MaterialCardView;
5355
import com.wang.avi.AVLoadingIndicatorView;
5456

5557
import org.greenrobot.eventbus.EventBus;
@@ -69,17 +71,22 @@ public class AddDeviceActivity extends AppCompatActivity {
6971
private static final int REQUEST_ENABLE_BT = 3;
7072

7173
private TextView tvTitle, tvBack, tvCancel;
72-
private CardView btnAddManually;
73-
private TextView txtAddManuallyBtn;
7474
private SharedPreferences sharedPreferences;
7575

76-
private AVLoadingIndicatorView loader;
77-
private Intent intent;
7876
private ESPDevice espDevice;
7977
private ESPProvisionManager provisionManager;
78+
8079
// private CameraSourcePreview cameraPreview;
8180
private CodeScanner codeScanner;
81+
private MaterialCardView btnAddManually, btnGetPermission;
82+
private TextView txtAddManuallyBtn;
83+
private LinearLayout layoutQrCode, layoutPermissionErr;
84+
private TextView tvPermissionErr;
85+
private ImageView ivPermissionErr;
86+
private AVLoadingIndicatorView loader;
87+
8288
private boolean isQrCodeDataReceived = false;
89+
private Intent intent;
8390

8491
@Override
8592
protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -165,16 +172,42 @@ public void onBackPressed() {
165172
@Override
166173
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
167174
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
175+
Log.e(TAG, "onRequestPermissionsResult , requestCode : " + requestCode);
176+
177+
if (requestCode == REQUEST_CAMERA_PERMISSION && grantResults.length > 0) {
178+
if (grantResults[0] == PackageManager.PERMISSION_DENIED) {
179+
findViewById(R.id.scanner_view).setVisibility(View.GONE);
180+
layoutQrCode.setVisibility(View.GONE);
181+
layoutPermissionErr.setVisibility(View.VISIBLE);
182+
tvPermissionErr.setText(R.string.error_camera_permission);
183+
ivPermissionErr.setImageResource(R.drawable.ic_no_camera_permission);
184+
} else {
185+
layoutQrCode.setVisibility(View.VISIBLE);
186+
layoutPermissionErr.setVisibility(View.GONE);
187+
openCamera();
188+
}
189+
} else if (requestCode == REQUEST_ACCESS_FINE_LOCATION && grantResults.length > 0) {
168190

169-
Log.d(TAG, "onRequestPermissionsResult , requestCode : " + requestCode);
170-
171-
if (requestCode == REQUEST_CAMERA_PERMISSION) {
172-
173-
initialiseDetectorsAndSources();
174-
175-
} else if (requestCode == REQUEST_ACCESS_FINE_LOCATION) {
191+
boolean permissionGranted = true;
192+
for (int grantResult : grantResults) {
193+
if (grantResult == PackageManager.PERMISSION_DENIED) {
194+
Log.e(TAG, "User has denied permission");
195+
permissionGranted = false;
196+
}
197+
}
176198

177-
initialiseDetectorsAndSources();
199+
if (!permissionGranted) {
200+
findViewById(R.id.scanner_view).setVisibility(View.GONE);
201+
layoutQrCode.setVisibility(View.GONE);
202+
layoutPermissionErr.setVisibility(View.VISIBLE);
203+
tvPermissionErr.setText(R.string.error_location_permission);
204+
ivPermissionErr.setImageResource(R.drawable.ic_no_location_permission);
205+
} else {
206+
findViewById(R.id.scanner_view).setVisibility(View.VISIBLE);
207+
layoutQrCode.setVisibility(View.VISIBLE);
208+
layoutPermissionErr.setVisibility(View.GONE);
209+
scanQrCode();
210+
}
178211
}
179212
}
180213

@@ -244,7 +277,17 @@ public void onClick(View v) {
244277

245278
if (!bleAdapter.isEnabled()) {
246279
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
247-
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
280+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
281+
if (ActivityCompat.checkSelfPermission(AddDeviceActivity.this, Manifest.permission.BLUETOOTH_CONNECT) == PackageManager.PERMISSION_GRANTED) {
282+
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
283+
} else {
284+
Log.e(TAG, "BLUETOOTH_CONNECT permission is not granted.");
285+
return;
286+
}
287+
} else {
288+
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
289+
}
290+
248291
} else {
249292
startProvisioningFlow();
250293
}
@@ -267,6 +310,37 @@ public void onClick(View v) {
267310
}
268311
};
269312

313+
private View.OnClickListener btnGetPermissionClickListener = new View.OnClickListener() {
314+
315+
@Override
316+
public void onClick(View v) {
317+
if (ActivityCompat.checkSelfPermission(AddDeviceActivity.this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
318+
319+
ActivityCompat.requestPermissions(AddDeviceActivity.this, new
320+
String[]{Manifest.permission.CAMERA}, REQUEST_CAMERA_PERMISSION);
321+
322+
} else {
323+
324+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
325+
326+
if (ActivityCompat.checkSelfPermission(AddDeviceActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
327+
|| ActivityCompat.checkSelfPermission(AddDeviceActivity.this, Manifest.permission.BLUETOOTH_SCAN) != PackageManager.PERMISSION_GRANTED
328+
|| ActivityCompat.checkSelfPermission(AddDeviceActivity.this, Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED) {
329+
330+
ActivityCompat.requestPermissions(AddDeviceActivity.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION,
331+
Manifest.permission.BLUETOOTH_SCAN,
332+
Manifest.permission.BLUETOOTH_CONNECT}, REQUEST_ACCESS_FINE_LOCATION);
333+
}
334+
} else {
335+
if (ActivityCompat.checkSelfPermission(AddDeviceActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
336+
ActivityCompat.requestPermissions(AddDeviceActivity.this, new
337+
String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_ACCESS_FINE_LOCATION);
338+
}
339+
}
340+
}
341+
}
342+
};
343+
270344
private void initViews() {
271345

272346
tvTitle = findViewById(R.id.main_toolbar_title);
@@ -282,49 +356,56 @@ private void initViews() {
282356
codeScanner = new CodeScanner(this, scannerView);
283357

284358
// cameraPreview = findViewById(R.id.preview);
285-
btnAddManually = findViewById(R.id.btn_add_device_manually);
286-
txtAddManuallyBtn = findViewById(R.id.text_btn);
287359
loader = findViewById(R.id.loader);
360+
layoutQrCode = findViewById(R.id.layout_qr_code_txt);
361+
layoutPermissionErr = findViewById(R.id.layout_permission_error);
362+
tvPermissionErr = findViewById(R.id.tv_permission_error);
363+
ivPermissionErr = findViewById(R.id.iv_permission_error);
288364

365+
btnAddManually = findViewById(R.id.btn_add_device_manually);
366+
txtAddManuallyBtn = btnAddManually.findViewById(R.id.text_btn);
289367
txtAddManuallyBtn.setText(R.string.btn_no_qr_code);
290368
btnAddManually.setOnClickListener(btnAddManuallyClickListener);
291369

292-
initialiseDetectorsAndSources();
293-
}
294-
295-
private void initialiseDetectorsAndSources() {
370+
btnGetPermission = findViewById(R.id.btn_get_permission);
371+
TextView btnPermissionText = btnGetPermission.findViewById(R.id.text_btn);
372+
btnPermissionText.setText(R.string.btn_get_permission);
373+
btnGetPermission.setOnClickListener(btnGetPermissionClickListener);
296374

297-
if (ActivityCompat.checkSelfPermission(AddDeviceActivity.this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED
298-
&& ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
299-
&& ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
300-
301-
provisionManager.scanQRCode(codeScanner, qrCodeScanListener);
302-
// cameraPreview.setVisibility(View.VISIBLE);
303-
findViewById(R.id.scanner_view).setVisibility(View.VISIBLE);
304-
305-
if (codeScanner != null) {
306-
codeScanner.startPreview();
307-
}
375+
if (ActivityCompat.checkSelfPermission(AddDeviceActivity.this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
376+
openCamera();
308377
} else {
309-
Log.e(TAG, "All permissions are not granted.");
310-
askForPermissions();
378+
ActivityCompat.requestPermissions(AddDeviceActivity.this, new
379+
String[]{Manifest.permission.CAMERA}, REQUEST_CAMERA_PERMISSION);
311380
}
312381
}
313382

314-
private void askForPermissions() {
315-
316-
if (ActivityCompat.checkSelfPermission(AddDeviceActivity.this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
317-
318-
ActivityCompat.requestPermissions(AddDeviceActivity.this, new String[]{Manifest.permission.CAMERA}, REQUEST_CAMERA_PERMISSION);
383+
private void openCamera() {
384+
findViewById(R.id.scanner_view).setVisibility(View.VISIBLE);
385+
if (codeScanner != null) {
386+
codeScanner.startPreview();
387+
}
388+
scanQrCode();
389+
}
319390

320-
} else if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
391+
private void scanQrCode() {
321392

322-
ActivityCompat.requestPermissions(AddDeviceActivity.this, new
323-
String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_ACCESS_FINE_LOCATION);
324-
} else if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
325-
326-
ActivityCompat.requestPermissions(AddDeviceActivity.this, new
327-
String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, REQUEST_ACCESS_FINE_LOCATION);
393+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
394+
if (ActivityCompat.checkSelfPermission(AddDeviceActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
395+
&& ActivityCompat.checkSelfPermission(AddDeviceActivity.this, Manifest.permission.BLUETOOTH_SCAN) == PackageManager.PERMISSION_GRANTED
396+
&& ActivityCompat.checkSelfPermission(AddDeviceActivity.this, Manifest.permission.BLUETOOTH_CONNECT) == PackageManager.PERMISSION_GRANTED) {
397+
provisionManager.scanQRCode(codeScanner, qrCodeScanListener);
398+
} else {
399+
ActivityCompat.requestPermissions(AddDeviceActivity.this, new
400+
String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.BLUETOOTH_SCAN, Manifest.permission.BLUETOOTH_CONNECT}, REQUEST_ACCESS_FINE_LOCATION);
401+
}
402+
} else {
403+
if (ActivityCompat.checkSelfPermission(AddDeviceActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
404+
provisionManager.scanQRCode(codeScanner, qrCodeScanListener);
405+
} else {
406+
ActivityCompat.requestPermissions(AddDeviceActivity.this, new
407+
String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_ACCESS_FINE_LOCATION);
408+
}
328409
}
329410
}
330411

0 commit comments

Comments
 (0)