Skip to content

Commit

Permalink
Merge branch 'task/android_gradle_update' into 'master'
Browse files Browse the repository at this point in the history
Added support for Android 12 & 13.

See merge request idf/esp-idf-provisioning-android!60
  • Loading branch information
adwait-esp committed Jan 12, 2023
2 parents 798842c + b81827f commit aec721f
Show file tree
Hide file tree
Showing 13 changed files with 365 additions and 163 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ To get this app please clone this repository using the below command:
```
And add a dependency code to your app module's `build.gradle` file.
```
implementation 'com.github.espressif:esp-idf-provisioning-android:lib-2.1.1'
implementation 'com.github.espressif:esp-idf-provisioning-android:lib-2.1.2'
```

## Using Provisioning Library
Expand Down
22 changes: 9 additions & 13 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,14 @@ def getGitHash = { ->

android {

compileSdkVersion 30
compileSdkVersion 33

defaultConfig {
applicationId "com.espressif.wifi_provisioning"
minSdkVersion 23
targetSdkVersion 30
versionCode 17
versionName "2.1.1 - ${getGitHash()}"
targetSdkVersion 33
versionCode 18
versionName "2.1.2 - ${getGitHash()}"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}

Expand Down Expand Up @@ -47,11 +47,7 @@ android {
buildConfigField "boolean", "isFilteringByPrefixAllowed", "true"
}
}

compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
namespace 'com.espressif.wifi_provisioning'
}

dependencies {
Expand All @@ -61,15 +57,15 @@ dependencies {
implementation 'com.google.android.material:material:1.1.0'
implementation 'androidx.preference:preference:1.1.1'

implementation 'com.google.protobuf:protobuf-javalite:3.14.0'
implementation 'com.google.protobuf:protobuf-javalite:3.18.0'
implementation 'com.google.crypto.tink:tink-android:1.6.1'
implementation project(path: ':provisioning')

implementation 'org.greenrobot:eventbus:3.2.0'
implementation 'com.github.yuriy-budiyev:code-scanner:2.1.0'
implementation 'com.github.yuriy-budiyev:code-scanner:2.1.2'
implementation 'com.github.firdausmaulan:AVLoadingIndicatorView:2.3.0'

testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
androidTestImplementation 'androidx.test.ext:junit:1.1.4'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.0'
}
20 changes: 15 additions & 5 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,19 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.espressif.wifi_provisioning">
<manifest xmlns:android="http://schemas.android.com/apk/res/android">

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />

<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />

<!-- Request legacy Bluetooth permissions on older devices. -->
<uses-permission
android:name="android.permission.BLUETOOTH"
android:maxSdkVersion="30" />
<uses-permission
android:name="android.permission.BLUETOOTH_ADMIN"
android:maxSdkVersion="30" />

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
Expand All @@ -26,7 +35,8 @@
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar">
android:theme="@style/AppTheme.NoActionBar"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

Expand Down
171 changes: 126 additions & 45 deletions app/src/main/java/com/espressif/ui/activities/AddDeviceActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,14 +31,15 @@
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.cardview.widget.CardView;
import androidx.core.app.ActivityCompat;

import com.budiyev.android.codescanner.CodeScanner;
Expand All @@ -50,6 +51,7 @@
import com.espressif.provisioning.ESPProvisionManager;
import com.espressif.provisioning.listeners.QRCodeScanListener;
import com.espressif.wifi_provisioning.R;
import com.google.android.material.card.MaterialCardView;
import com.wang.avi.AVLoadingIndicatorView;

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

private TextView tvTitle, tvBack, tvCancel;
private CardView btnAddManually;
private TextView txtAddManuallyBtn;
private SharedPreferences sharedPreferences;

private AVLoadingIndicatorView loader;
private Intent intent;
private ESPDevice espDevice;
private ESPProvisionManager provisionManager;

// private CameraSourcePreview cameraPreview;
private CodeScanner codeScanner;
private MaterialCardView btnAddManually, btnGetPermission;
private TextView txtAddManuallyBtn;
private LinearLayout layoutQrCode, layoutPermissionErr;
private TextView tvPermissionErr;
private ImageView ivPermissionErr;
private AVLoadingIndicatorView loader;

private boolean isQrCodeDataReceived = false;
private Intent intent;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
Expand Down Expand Up @@ -165,16 +172,42 @@ public void onBackPressed() {
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
Log.e(TAG, "onRequestPermissionsResult , requestCode : " + requestCode);

if (requestCode == REQUEST_CAMERA_PERMISSION && grantResults.length > 0) {
if (grantResults[0] == PackageManager.PERMISSION_DENIED) {
findViewById(R.id.scanner_view).setVisibility(View.GONE);
layoutQrCode.setVisibility(View.GONE);
layoutPermissionErr.setVisibility(View.VISIBLE);
tvPermissionErr.setText(R.string.error_camera_permission);
ivPermissionErr.setImageResource(R.drawable.ic_no_camera_permission);
} else {
layoutQrCode.setVisibility(View.VISIBLE);
layoutPermissionErr.setVisibility(View.GONE);
openCamera();
}
} else if (requestCode == REQUEST_ACCESS_FINE_LOCATION && grantResults.length > 0) {

Log.d(TAG, "onRequestPermissionsResult , requestCode : " + requestCode);

if (requestCode == REQUEST_CAMERA_PERMISSION) {

initialiseDetectorsAndSources();

} else if (requestCode == REQUEST_ACCESS_FINE_LOCATION) {
boolean permissionGranted = true;
for (int grantResult : grantResults) {
if (grantResult == PackageManager.PERMISSION_DENIED) {
Log.e(TAG, "User has denied permission");
permissionGranted = false;
}
}

initialiseDetectorsAndSources();
if (!permissionGranted) {
findViewById(R.id.scanner_view).setVisibility(View.GONE);
layoutQrCode.setVisibility(View.GONE);
layoutPermissionErr.setVisibility(View.VISIBLE);
tvPermissionErr.setText(R.string.error_location_permission);
ivPermissionErr.setImageResource(R.drawable.ic_no_location_permission);
} else {
findViewById(R.id.scanner_view).setVisibility(View.VISIBLE);
layoutQrCode.setVisibility(View.VISIBLE);
layoutPermissionErr.setVisibility(View.GONE);
scanQrCode();
}
}
}

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

if (!bleAdapter.isEnabled()) {
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
if (ActivityCompat.checkSelfPermission(AddDeviceActivity.this, Manifest.permission.BLUETOOTH_CONNECT) == PackageManager.PERMISSION_GRANTED) {
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
} else {
Log.e(TAG, "BLUETOOTH_CONNECT permission is not granted.");
return;
}
} else {
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
}

} else {
startProvisioningFlow();
}
Expand All @@ -267,6 +310,37 @@ public void onClick(View v) {
}
};

private View.OnClickListener btnGetPermissionClickListener = new View.OnClickListener() {

@Override
public void onClick(View v) {
if (ActivityCompat.checkSelfPermission(AddDeviceActivity.this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {

ActivityCompat.requestPermissions(AddDeviceActivity.this, new
String[]{Manifest.permission.CAMERA}, REQUEST_CAMERA_PERMISSION);

} else {

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {

if (ActivityCompat.checkSelfPermission(AddDeviceActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
|| ActivityCompat.checkSelfPermission(AddDeviceActivity.this, Manifest.permission.BLUETOOTH_SCAN) != PackageManager.PERMISSION_GRANTED
|| ActivityCompat.checkSelfPermission(AddDeviceActivity.this, Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED) {

ActivityCompat.requestPermissions(AddDeviceActivity.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.BLUETOOTH_SCAN,
Manifest.permission.BLUETOOTH_CONNECT}, REQUEST_ACCESS_FINE_LOCATION);
}
} else {
if (ActivityCompat.checkSelfPermission(AddDeviceActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(AddDeviceActivity.this, new
String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_ACCESS_FINE_LOCATION);
}
}
}
}
};

private void initViews() {

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

// cameraPreview = findViewById(R.id.preview);
btnAddManually = findViewById(R.id.btn_add_device_manually);
txtAddManuallyBtn = findViewById(R.id.text_btn);
loader = findViewById(R.id.loader);
layoutQrCode = findViewById(R.id.layout_qr_code_txt);
layoutPermissionErr = findViewById(R.id.layout_permission_error);
tvPermissionErr = findViewById(R.id.tv_permission_error);
ivPermissionErr = findViewById(R.id.iv_permission_error);

btnAddManually = findViewById(R.id.btn_add_device_manually);
txtAddManuallyBtn = btnAddManually.findViewById(R.id.text_btn);
txtAddManuallyBtn.setText(R.string.btn_no_qr_code);
btnAddManually.setOnClickListener(btnAddManuallyClickListener);

initialiseDetectorsAndSources();
}

private void initialiseDetectorsAndSources() {
btnGetPermission = findViewById(R.id.btn_get_permission);
TextView btnPermissionText = btnGetPermission.findViewById(R.id.text_btn);
btnPermissionText.setText(R.string.btn_get_permission);
btnGetPermission.setOnClickListener(btnGetPermissionClickListener);

if (ActivityCompat.checkSelfPermission(AddDeviceActivity.this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED
&& ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
&& ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {

provisionManager.scanQRCode(codeScanner, qrCodeScanListener);
// cameraPreview.setVisibility(View.VISIBLE);
findViewById(R.id.scanner_view).setVisibility(View.VISIBLE);

if (codeScanner != null) {
codeScanner.startPreview();
}
if (ActivityCompat.checkSelfPermission(AddDeviceActivity.this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
openCamera();
} else {
Log.e(TAG, "All permissions are not granted.");
askForPermissions();
ActivityCompat.requestPermissions(AddDeviceActivity.this, new
String[]{Manifest.permission.CAMERA}, REQUEST_CAMERA_PERMISSION);
}
}

private void askForPermissions() {

if (ActivityCompat.checkSelfPermission(AddDeviceActivity.this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {

ActivityCompat.requestPermissions(AddDeviceActivity.this, new String[]{Manifest.permission.CAMERA}, REQUEST_CAMERA_PERMISSION);
private void openCamera() {
findViewById(R.id.scanner_view).setVisibility(View.VISIBLE);
if (codeScanner != null) {
codeScanner.startPreview();
}
scanQrCode();
}

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

ActivityCompat.requestPermissions(AddDeviceActivity.this, new
String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_ACCESS_FINE_LOCATION);
} else if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

ActivityCompat.requestPermissions(AddDeviceActivity.this, new
String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, REQUEST_ACCESS_FINE_LOCATION);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
if (ActivityCompat.checkSelfPermission(AddDeviceActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
&& ActivityCompat.checkSelfPermission(AddDeviceActivity.this, Manifest.permission.BLUETOOTH_SCAN) == PackageManager.PERMISSION_GRANTED
&& ActivityCompat.checkSelfPermission(AddDeviceActivity.this, Manifest.permission.BLUETOOTH_CONNECT) == PackageManager.PERMISSION_GRANTED) {
provisionManager.scanQRCode(codeScanner, qrCodeScanListener);
} else {
ActivityCompat.requestPermissions(AddDeviceActivity.this, new
String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.BLUETOOTH_SCAN, Manifest.permission.BLUETOOTH_CONNECT}, REQUEST_ACCESS_FINE_LOCATION);
}
} else {
if (ActivityCompat.checkSelfPermission(AddDeviceActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
provisionManager.scanQRCode(codeScanner, qrCodeScanListener);
} else {
ActivityCompat.requestPermissions(AddDeviceActivity.this, new
String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_ACCESS_FINE_LOCATION);
}
}
}

Expand Down
Loading

0 comments on commit aec721f

Please sign in to comment.