31
31
import android .text .TextUtils ;
32
32
import android .util .Log ;
33
33
import android .view .View ;
34
+ import android .widget .ImageView ;
35
+ import android .widget .LinearLayout ;
34
36
import android .widget .TextView ;
35
37
import android .widget .Toast ;
36
38
37
39
import androidx .annotation .NonNull ;
38
40
import androidx .annotation .Nullable ;
39
41
import androidx .appcompat .app .AlertDialog ;
40
42
import androidx .appcompat .app .AppCompatActivity ;
41
- import androidx .cardview .widget .CardView ;
42
43
import androidx .core .app .ActivityCompat ;
43
44
44
45
import com .budiyev .android .codescanner .CodeScanner ;
50
51
import com .espressif .provisioning .ESPProvisionManager ;
51
52
import com .espressif .provisioning .listeners .QRCodeScanListener ;
52
53
import com .espressif .wifi_provisioning .R ;
54
+ import com .google .android .material .card .MaterialCardView ;
53
55
import com .wang .avi .AVLoadingIndicatorView ;
54
56
55
57
import org .greenrobot .eventbus .EventBus ;
@@ -69,17 +71,22 @@ public class AddDeviceActivity extends AppCompatActivity {
69
71
private static final int REQUEST_ENABLE_BT = 3 ;
70
72
71
73
private TextView tvTitle , tvBack , tvCancel ;
72
- private CardView btnAddManually ;
73
- private TextView txtAddManuallyBtn ;
74
74
private SharedPreferences sharedPreferences ;
75
75
76
- private AVLoadingIndicatorView loader ;
77
- private Intent intent ;
78
76
private ESPDevice espDevice ;
79
77
private ESPProvisionManager provisionManager ;
78
+
80
79
// private CameraSourcePreview cameraPreview;
81
80
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
+
82
88
private boolean isQrCodeDataReceived = false ;
89
+ private Intent intent ;
83
90
84
91
@ Override
85
92
protected void onCreate (@ Nullable Bundle savedInstanceState ) {
@@ -165,16 +172,42 @@ public void onBackPressed() {
165
172
@ Override
166
173
public void onRequestPermissionsResult (int requestCode , @ NonNull String [] permissions , @ NonNull int [] grantResults ) {
167
174
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 ) {
168
190
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
+ }
176
198
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
+ }
178
211
}
179
212
}
180
213
@@ -244,7 +277,17 @@ public void onClick(View v) {
244
277
245
278
if (!bleAdapter .isEnabled ()) {
246
279
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
+
248
291
} else {
249
292
startProvisioningFlow ();
250
293
}
@@ -267,6 +310,37 @@ public void onClick(View v) {
267
310
}
268
311
};
269
312
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
+
270
344
private void initViews () {
271
345
272
346
tvTitle = findViewById (R .id .main_toolbar_title );
@@ -282,49 +356,56 @@ private void initViews() {
282
356
codeScanner = new CodeScanner (this , scannerView );
283
357
284
358
// cameraPreview = findViewById(R.id.preview);
285
- btnAddManually = findViewById (R .id .btn_add_device_manually );
286
- txtAddManuallyBtn = findViewById (R .id .text_btn );
287
359
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 );
288
364
365
+ btnAddManually = findViewById (R .id .btn_add_device_manually );
366
+ txtAddManuallyBtn = btnAddManually .findViewById (R .id .text_btn );
289
367
txtAddManuallyBtn .setText (R .string .btn_no_qr_code );
290
368
btnAddManually .setOnClickListener (btnAddManuallyClickListener );
291
369
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 );
296
374
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 ();
308
377
} 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 );
311
380
}
312
381
}
313
382
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
+ }
319
390
320
- } else if ( ActivityCompat . checkSelfPermission ( this , Manifest . permission . ACCESS_FINE_LOCATION ) != PackageManager . PERMISSION_GRANTED ) {
391
+ private void scanQrCode ( ) {
321
392
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
+ }
328
409
}
329
410
}
330
411
0 commit comments