Skip to content
This repository was archived by the owner on Feb 17, 2022. It is now read-only.

Commit 0e4b71b

Browse files
authored
Merge pull request #26 from opendatakit/development
Development
2 parents a16b22c + d70d4c1 commit 0e4b71b

File tree

3 files changed

+63
-0
lines changed

3 files changed

+63
-0
lines changed

sensorsframework_app/src/main/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
66
<uses-permission android:name="android.permission.BLUETOOTH" />
77
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
8+
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
89

910
<!-- this is defined in org.opendatakit.services -->
1011
<uses-permission android:name="org.opendatakit.database.RUN_DATABASE" />

sensorsframework_app/src/main/java/org/opendatakit/sensors/ui/activity/AddSensorActivity.java

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,22 @@
1515
*/
1616
package org.opendatakit.sensors.ui.activity;
1717

18+
import android.Manifest;
1819
import android.app.Activity;
20+
import android.content.DialogInterface;
1921
import android.content.Intent;
22+
import android.content.pm.PackageManager;
2023
import android.os.Bundle;
24+
import android.support.annotation.NonNull;
25+
import android.support.v4.app.ActivityCompat;
2126
import android.util.Log;
2227
import android.view.View;
28+
import android.widget.Toast;
2329
import org.opendatakit.sensors.Constants;
2430
import org.opendatakit.sensors.R;
2531
import org.opendatakit.sensors.SensorsSingleton;
2632
import org.opendatakit.sensors.ServiceConstants;
33+
import org.opendatakit.utilities.RuntimePermissionUtils;
2734

2835
/**
2936
@@ -33,6 +40,15 @@ public class AddSensorActivity extends Activity {
3340

3441
private static final String LOGTAG = AddSensorActivity.class.getSimpleName();
3542

43+
protected static final String[] REQUIRED_PERMISSIONS = new String[] {
44+
Manifest.permission.BLUETOOTH_ADMIN,
45+
Manifest.permission.BLUETOOTH,
46+
Manifest.permission.WRITE_EXTERNAL_STORAGE,
47+
Manifest.permission.ACCESS_COARSE_LOCATION
48+
};
49+
50+
protected static final int PERMISSION_REQ_CODE = 5;
51+
3652
private static final int RESULT_OK_BT = 1;
3753
private static final int RESULT_OK_USB = 2;
3854

@@ -41,6 +57,14 @@ public class AddSensorActivity extends Activity {
4157
@Override public void onCreate(Bundle savedInstanceState) {
4258
super.onCreate(savedInstanceState);
4359

60+
if (!RuntimePermissionUtils.checkSelfAllPermission(this, REQUIRED_PERMISSIONS)) {
61+
ActivityCompat.requestPermissions(
62+
this,
63+
REQUIRED_PERMISSIONS,
64+
PERMISSION_REQ_CODE
65+
);
66+
}
67+
4468
Intent intent = getIntent();
4569
String tmpAppName = intent.getStringExtra(ServiceConstants.APP_NAME_KEY);
4670
if (tmpAppName == null) {
@@ -92,4 +116,39 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) {
92116
}
93117
}
94118

119+
@Override
120+
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
121+
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
122+
123+
if (requestCode != PERMISSION_REQ_CODE) {
124+
return;
125+
}
126+
127+
boolean granted = true;
128+
if (grantResults.length > 0) {
129+
for (int i = 0; i < grantResults.length; i++) {
130+
if (grantResults[0] != PackageManager.PERMISSION_GRANTED) {
131+
granted = false;
132+
}
133+
}
134+
135+
if (granted)
136+
return;
137+
138+
if (RuntimePermissionUtils.shouldShowAnyPermissionRationale(this, permissions)) {
139+
RuntimePermissionUtils.createPermissionRationaleDialog(this, requestCode, permissions).setMessage(R.string.write_external_storage_rationale)
140+
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
141+
@Override public void onClick(DialogInterface dialog, int which) {
142+
dialog.cancel();
143+
setResult(Activity.RESULT_CANCELED);
144+
finish();
145+
}
146+
}).show();
147+
} else {
148+
Toast.makeText(this, R.string.write_external_perm_denied, Toast.LENGTH_LONG).show();
149+
setResult(Activity.RESULT_CANCELED);
150+
finish();
151+
}
152+
}
153+
}
95154
}

sensorsframework_app/src/main/res/values/strings.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,7 @@
2020
<string name="single_click_no_action">Single Click: No Action</string>
2121
<string name="not_a_sensor">NOT A SENSOR</string>
2222
<string name="select_sensor_type">Select Sensor Type</string>
23+
<string name="write_external_storage_rationale">ODK Sensors Framework needs to access external
24+
storage to store resources and interact with other ODK apps</string>
25+
<string name="write_external_perm_denied">ODK Sensors Framework cannot function without write access to external storage</string>
2326
</resources>

0 commit comments

Comments
 (0)