Updated permissions handling so it can target Android 14 (API 34) which is a requirement of Play Store
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:versionCode="146"
|
||||
android:versionName="4.2.11x2">
|
||||
android:versionCode="147"
|
||||
android:versionName="4.3.0a">
|
||||
<!-- android:allowBackup="false" -->
|
||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
|
||||
|
||||
@@ -12,6 +12,8 @@
|
||||
android:maxSdkVersion="30" />
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_HEALTH" />
|
||||
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION" />
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
@@ -80,6 +82,7 @@
|
||||
|
||||
<service
|
||||
android:name=".SdServer"
|
||||
android:foregroundServiceType="health"
|
||||
android:exported="false" />
|
||||
|
||||
<activity android:name=".LogManagerControlActivity" />
|
||||
|
||||
@@ -116,6 +116,15 @@ public class OsdUtil {
|
||||
};
|
||||
public String[] BT_PERMISSIONS;
|
||||
|
||||
public final String[] ACTIVITY_PERMISSIONS_API34 = {
|
||||
Manifest.permission.FOREGROUND_SERVICE_HEALTH,
|
||||
Manifest.permission.ACTIVITY_RECOGNITION
|
||||
};
|
||||
|
||||
public final String[] ACTIVITY_PERMISSIONS_OLD = {};
|
||||
public String[] ACTIVITY_PERMISSIONS;
|
||||
|
||||
|
||||
public OsdUtil(Context context, Handler handler) {
|
||||
mContext = context;
|
||||
mHandler = handler;
|
||||
@@ -780,6 +789,33 @@ public class OsdUtil {
|
||||
return allOk;
|
||||
}
|
||||
|
||||
public String[] getRequiredActivityPermissions() {
|
||||
// API 34 is Android 14 - see https://developer.android.com/develop/connectivity/bluetooth/bt-permissions
|
||||
if (Build.VERSION.SDK_INT >= 34) {
|
||||
Log.d(TAG, "getRequiredActivityPermissions() - using new Activity Permissions");
|
||||
ACTIVITY_PERMISSIONS = ACTIVITY_PERMISSIONS_API34;
|
||||
} else {
|
||||
Log.d(TAG, "getRequiredActivityPermissions() - using old Activity Permissions");
|
||||
ACTIVITY_PERMISSIONS = ACTIVITY_PERMISSIONS_OLD;
|
||||
}
|
||||
return (ACTIVITY_PERMISSIONS);
|
||||
}
|
||||
public boolean areActivityPermissionsOk() {
|
||||
String[] activityPermissions = getRequiredActivityPermissions();
|
||||
boolean allOk = true;
|
||||
Log.d(TAG, "areActivityPermissions OK()");
|
||||
for (int i = 0; i < activityPermissions.length; i++) {
|
||||
if (ContextCompat.checkSelfPermission(mContext, activityPermissions[i])
|
||||
!= PackageManager.PERMISSION_GRANTED) {
|
||||
Log.i(TAG, activityPermissions[i] + " Permission Not Granted");
|
||||
allOk = false;
|
||||
}
|
||||
}
|
||||
return allOk;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public double parseToDouble(String userInput) {
|
||||
/**
|
||||
* Parse a string to a double value, taking localisation into account.
|
||||
|
||||
@@ -88,8 +88,10 @@ public class StartupActivity extends AppCompatActivity {
|
||||
private boolean mLocationPermissions2Requested;
|
||||
private boolean mSmsPermissionsRequested;
|
||||
private boolean mPermissionsRequested;
|
||||
private boolean mActivityPermissionsRequested = false;
|
||||
private boolean mBindInProgress = false;
|
||||
|
||||
|
||||
public final String[] REQUIRED_PERMISSIONS = {
|
||||
//Manifest.permission.WRITE_EXTERNAL_STORAGE,
|
||||
Manifest.permission.WAKE_LOCK,
|
||||
@@ -328,14 +330,22 @@ public class StartupActivity extends AppCompatActivity {
|
||||
//pb.setProgressDrawable(getResources().getDrawable(R.drawable.start_server));
|
||||
requestBTPermissions();
|
||||
allOk = false;
|
||||
} else if (mBleDeviceAddr.equals("")) {
|
||||
Log.i(TAG,"BLE data source selected, but no device address specified - starting BLEScanActivity");
|
||||
} else if (mBleDeviceAddr.equals("")) {
|
||||
Log.i(TAG, "BLE data source selected, but no device address specified - starting BLEScanActivity");
|
||||
Intent i;
|
||||
i = new Intent(getApplicationContext(), BLEScanActivity.class);
|
||||
startActivity(i);
|
||||
finish();
|
||||
return;
|
||||
}
|
||||
} else if (!mUtil.areActivityPermissionsOk()) {
|
||||
Log.i(TAG, "Activity permissions NOT OK");
|
||||
tv.setText(getString(R.string.ActivityPermissionWarning));
|
||||
tv.setBackgroundColor(alarmColour);
|
||||
tv.setTextColor(alarmTextColour);
|
||||
requestActivityPermissions();
|
||||
allOk = false;
|
||||
|
||||
} else if (smsAlarmsActive && !areSMSPermissions1OK()) {
|
||||
Log.i(TAG, "SMS permissions NOT OK");
|
||||
tv.setText(getString(R.string.SmsPermissionWarning));
|
||||
@@ -699,6 +709,7 @@ public class StartupActivity extends AppCompatActivity {
|
||||
return allOk;
|
||||
}
|
||||
|
||||
|
||||
public boolean areSMSPermissions1OK() {
|
||||
boolean allOk = true;
|
||||
Log.v(TAG, "areSMSPermissions1 OK()");
|
||||
@@ -879,6 +890,33 @@ public class StartupActivity extends AppCompatActivity {
|
||||
}
|
||||
}
|
||||
|
||||
public void requestActivityPermissions() {
|
||||
if (mActivityPermissionsRequested) {
|
||||
Log.i(TAG, "requestActivityPermissions() - request already sent - not doing anything");
|
||||
} else {
|
||||
Log.i(TAG, "requestActivityPermissions() - requesting permissions");
|
||||
mActivityPermissionsRequested = true;
|
||||
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
|
||||
this);
|
||||
alertDialogBuilder
|
||||
.setTitle(R.string.activity_permissions_required)
|
||||
.setMessage(R.string.activity_permissions_rationale)
|
||||
.setCancelable(false)
|
||||
.setPositiveButton(getString(R.string.okBtnTxt), new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, int id) {
|
||||
dialog.cancel();
|
||||
Log.i(TAG, "requestActivityPermissions(): Launching ActivityCompat.requestPermissions()");
|
||||
ActivityCompat.requestPermissions(StartupActivity.this,
|
||||
mUtil.getRequiredActivityPermissions(),
|
||||
49);
|
||||
}
|
||||
})
|
||||
.create().show();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public void onRequestPermissionsResult(int requestCode,
|
||||
String permissions[], int[] grantResults) {
|
||||
|
||||
26
app/src/main/res/layout/activity_main_simple.xml
Normal file
26
app/src/main/res/layout/activity_main_simple.xml
Normal file
@@ -0,0 +1,26 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/versionTv"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/app_name" />
|
||||
|
||||
|
||||
<androidx.fragment.app.FragmentContainerView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/fragment_common_container_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
|
||||
<androidx.viewpager2.widget.ViewPager2
|
||||
android:id="@+id/fragment_pager"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
</LinearLayout>
|
||||
@@ -578,4 +578,7 @@
|
||||
<string name="restart_server">Restart Server</string>
|
||||
<string name="error_failed_to_create_local_event">ERROR: failed to create local event</string>
|
||||
<string name="error_failed_to_start_log_manager">ERROR: Failed to start Log Manager</string>
|
||||
<string name="ActivityPermissionWarning">Problem with Activity Detection Permissions</string>
|
||||
<string name="activity_permissions_required">Activity Detection Permission Required.</string>
|
||||
<string name="activity_permissions_rationale">Permission required to analyse your movements to detect seizure activity.</string>
|
||||
</resources>
|
||||
|
||||
@@ -57,7 +57,7 @@ public class SdAlgHrTest extends TestCase {
|
||||
mSdAlgHr.checkHr(60.);
|
||||
mSdAlgHr.checkHr(70.);
|
||||
mSdAlgHr.checkHr(80.);
|
||||
double hrAv = mSdAlgHr.getAverageHrVal();
|
||||
double hrAv = mSdAlgHr.getAverageHrAverage();
|
||||
assertEquals(hrAv, 70);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user