Skip to content

Commit 3fd0ab9

Browse files
author
JW
committed
Merge branch 'fix-ble-scan'
2 parents 4bb8e28 + a4ef455 commit 3fd0ab9

13 files changed

+113
-20
lines changed

app/build.gradle

+4-7
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,25 @@
11
apply plugin: 'com.android.application'
22

33
android {
4-
compileSdkVersion 27
5-
buildToolsVersion '28.0.3'
4+
compileSdkVersion 31
65

76
defaultConfig {
87
applicationId "cc.calliope.mini"
98
minSdkVersion 18
10-
targetSdkVersion 27
11-
versionCode 8
12-
versionName "1.0.2"
9+
targetSdkVersion 30
10+
versionCode 11
11+
versionName "1.1.1"
1312
resConfigs "de", "en"
1413
vectorDrawables.useSupportLibrary = true
1514
}
1615

1716
buildTypes {
1817
debug {
1918
minifyEnabled false
20-
useProguard true
2119
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
2220
}
2321
release {
2422
minifyEnabled true
25-
useProguard true
2623
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
2724
}
2825
}

app/debug/app-debug.apk

-497 Bytes
Binary file not shown.

app/debug/output-metadata.json

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
"version": 3,
3+
"artifactType": {
4+
"type": "APK",
5+
"kind": "Directory"
6+
},
7+
"applicationId": "cc.calliope.mini",
8+
"variantName": "debug",
9+
"elements": [
10+
{
11+
"type": "SINGLE",
12+
"filters": [],
13+
"attributes": [],
14+
"versionCode": 11,
15+
"versionName": "1.1.1",
16+
"outputFile": "app-debug.apk"
17+
}
18+
],
19+
"elementType": "File"
20+
}

app/debug/output.json

-1
This file was deleted.

app/release/app-release.aab

1.45 MB
Binary file not shown.

app/release/app-release.apk

-80.6 KB
Binary file not shown.

app/release/output-metadata.json

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
"version": 3,
3+
"artifactType": {
4+
"type": "APK",
5+
"kind": "Directory"
6+
},
7+
"applicationId": "cc.calliope.mini",
8+
"variantName": "release",
9+
"elements": [
10+
{
11+
"type": "SINGLE",
12+
"filters": [],
13+
"attributes": [],
14+
"versionCode": 11,
15+
"versionName": "1.1.1",
16+
"outputFile": "app-release.apk"
17+
}
18+
],
19+
"elementType": "File"
20+
}

app/src/main/AndroidManifest.xml

+23-1
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,31 @@
3131
xmlns:tools="http://schemas.android.com/tools"
3232
package="cc.calliope.mini">
3333

34+
35+
<!-- Request legacy Bluetooth permissions on older devices. -->
36+
<!-- <uses-permission android:name="android.permission.BLUETOOTH"-->
37+
<!-- android:maxSdkVersion="30" />-->
38+
<!-- <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"-->
39+
<!-- android:maxSdkVersion="30" />-->
40+
41+
<!-- Needed only if your app looks for Bluetooth devices.
42+
If your app doesn't use Bluetooth scan results to derive physical
43+
location information, you can strongly assert that your app
44+
doesn't derive physical location. -->
45+
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
46+
47+
<!-- Needed only if your app communicates with already-paired Bluetooth
48+
devices. -->
49+
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
50+
51+
<!-- Needed only if your app uses Bluetooth scan results to derive physical location. -->
52+
<!-- <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"-->
53+
<!-- android:maxSdkVersion="32" />-->
3454
<uses-permission android:name="android.permission.BLUETOOTH" />
3555
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
36-
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
56+
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
57+
58+
3759
<uses-permission android:name="android.permission.INTERNET" />
3860

3961
<uses-feature

app/src/main/java/cc/calliope/mini/ScannerActivity.java

+31-5
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import android.content.Intent;
3737
import android.graphics.drawable.AnimationDrawable;
3838
import android.net.Uri;
39+
import android.os.Build;
3940
import android.os.Bundle;
4041
import android.provider.Settings;
4142
import android.support.annotation.NonNull;
@@ -61,7 +62,10 @@
6162
import cc.calliope.mini.viewmodels.ScannerViewModel;
6263

6364
public class ScannerActivity extends AppCompatActivity implements DevicesAdapter.OnItemClickListener {
64-
private static final int REQUEST_ACCESS_COARSE_LOCATION = 1022; // random number
65+
private static final int REQUEST_ACCESS_FINE_LOCATION = 1022; // random number
66+
private static final int REQUEST_ACCESS_BLUETOOTH_SCAN = 1023; // random number
67+
68+
6569

6670
private ScannerViewModel mScannerViewModel;
6771
private AnimationDrawable pairAnimation;
@@ -152,13 +156,13 @@ public void onItemClick(final ExtendedBluetoothDevice device) {
152156
// } catch (Exception e) {
153157
// Log.e("PAIRING", e.getMessage());
154158
// }
155-
// }
159+
156160

157161
@Override
158162
public void onRequestPermissionsResult(final int requestCode, @NonNull final String[] permissions, @NonNull final int[] grantResults) {
159163
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
160164
switch (requestCode) {
161-
case REQUEST_ACCESS_COARSE_LOCATION:
165+
case REQUEST_ACCESS_FINE_LOCATION:
162166
mScannerViewModel.refresh();
163167
break;
164168
}
@@ -176,10 +180,27 @@ public void onEnableBluetoothClicked() {
176180
startActivity(enableIntent);
177181
}
178182

183+
private static final String[] BLE_PERMISSIONS = new String[]{
184+
Manifest.permission.ACCESS_COARSE_LOCATION,
185+
Manifest.permission.ACCESS_FINE_LOCATION
186+
};
187+
188+
private static final String[] ANDROID_12_BLE_PERMISSIONS = new String[]{
189+
Manifest.permission.BLUETOOTH_SCAN,
190+
Manifest.permission.BLUETOOTH_CONNECT,
191+
Manifest.permission.ACCESS_FINE_LOCATION
192+
};
193+
179194
@OnClick(R.id.action_grant_location_permission)
180195
public void onGrantLocationPermissionClicked() {
181196
Utils.markLocationPermissionRequested(this);
182-
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, REQUEST_ACCESS_COARSE_LOCATION);
197+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
198+
Log.i("PERMISSIONS", "12");
199+
ActivityCompat.requestPermissions(this, ANDROID_12_BLE_PERMISSIONS, REQUEST_ACCESS_BLUETOOTH_SCAN);
200+
} else {
201+
Log.i("PERMISSIONS", "LEGACY");
202+
ActivityCompat.requestPermissions(this, BLE_PERMISSIONS, REQUEST_ACCESS_FINE_LOCATION);
203+
}
183204
}
184205

185206
@OnClick(R.id.action_permission_settings)
@@ -193,8 +214,13 @@ public void onPermissionSettingsClicked() {
193214
* Start scanning for Bluetooth devices or displays a message based on the scanner state.
194215
*/
195216
private void startScan(final ScannerLiveData state) {
217+
Log.v("Scan Permission: ", Utils.isBluetoothScanPermissionsGranted(this)+"");
218+
Log.v("Location Permission: ", Utils.isLocationPermissionsGranted(this)+"");
219+
Log.v("Version", Build.VERSION.SDK_INT+"");
196220
// First, check the Location permission. This is required on Marshmallow onwards in order to scan for Bluetooth LE devices.
197-
if (Utils.isLocationPermissionsGranted(this)) {
221+
if (Utils.isLocationPermissionsGranted(this)
222+
&& (Build.VERSION.SDK_INT < Build.VERSION_CODES.S || Utils.isBluetoothScanPermissionsGranted(this))
223+
) {
198224
mNoLocationPermissionView.setVisibility(View.GONE);
199225

200226
// Bluetooth must be enabled

app/src/main/java/cc/calliope/mini/utils/Utils.java

+10
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,16 @@ public static boolean isLocationPermissionsGranted(final Context context) {
6464
return ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED;
6565
}
6666

67+
68+
/**
69+
* Checks for required permissions.
70+
*
71+
* @return true if permissions are already granted, false otherwise.
72+
*/
73+
public static boolean isBluetoothScanPermissionsGranted(final Context context) {
74+
return ContextCompat.checkSelfPermission(context, Manifest.permission.BLUETOOTH_SCAN) == PackageManager.PERMISSION_GRANTED;
75+
}
76+
6777
/**
6878
* Returns true if location permission has been requested at least twice and
6979
* user denied it, and checked 'Don't ask again'.

build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ buildscript {
66
google()
77
}
88
dependencies {
9-
classpath 'com.android.tools.build:gradle:3.3.1'
9+
classpath 'com.android.tools.build:gradle:7.1.2'
1010

1111
// NOTE: Do not place your application dependencies here; they belong
1212
// in the individual module build.gradle files

dfuLibrary/build.gradle

-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ apply plugin: 'com.android.library'
22

33
android {
44
compileSdkVersion 23
5-
buildToolsVersion '28.0.3'
65

76
defaultConfig {
87
minSdkVersion 18
+4-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
#Mon Feb 25 13:12:06 CET 2019
1+
#Wed Mar 16 01:19:30 CET 2022
22
distributionBase=GRADLE_USER_HOME
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-all.zip
34
distributionPath=wrapper/dists
4-
zipStoreBase=GRADLE_USER_HOME
55
zipStorePath=wrapper/dists
6-
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip
7-
distributionSha256Sum=36bf7ff499223d5139f005822130ccca784c91591b514677fd376eed966c907e
6+
zipStoreBase=GRADLE_USER_HOME
7+
distributionSha256Sum=a8da5b02437a60819cad23e10fc7e9cf32bcb57029d9cb277e26eeff76ce014b

0 commit comments

Comments
 (0)