summaryrefslogtreecommitdiffhomepage
path: root/app/src/main/java/com/wireguard/android/activity
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2018-04-29 02:04:28 +0200
committerJason A. Donenfeld <Jason@zx2c4.com>2018-04-29 07:53:56 +0200
commit622f41f11f92005e2dd3791fd13b0ace294958d5 (patch)
tree7e811b6b9940881c36be757dbe3f4bd3223e0535 /app/src/main/java/com/wireguard/android/activity
parentf4e462fabd366873cf0f1d6927469d6bac3bec0d (diff)
Allow exporting to zip file
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'app/src/main/java/com/wireguard/android/activity')
-rw-r--r--app/src/main/java/com/wireguard/android/activity/SettingsActivity.java50
1 files changed, 50 insertions, 0 deletions
diff --git a/app/src/main/java/com/wireguard/android/activity/SettingsActivity.java b/app/src/main/java/com/wireguard/android/activity/SettingsActivity.java
index e3cd46b1..41761b32 100644
--- a/app/src/main/java/com/wireguard/android/activity/SettingsActivity.java
+++ b/app/src/main/java/com/wireguard/android/activity/SettingsActivity.java
@@ -1,6 +1,7 @@
package com.wireguard.android.activity;
import android.app.Activity;
+import android.content.pm.PackageManager;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceFragment;
@@ -9,11 +10,60 @@ import com.wireguard.android.Application;
import com.wireguard.android.R;
import com.wireguard.android.backend.WgQuickBackend;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+
/**
* Interface for changing application-global persistent settings.
*/
public class SettingsActivity extends Activity {
+ @FunctionalInterface
+ public interface PermissionRequestCallback {
+ void done(String[] permissions, int[] grantResults);
+ }
+
+ private HashMap<Integer, PermissionRequestCallback> permissionRequestCallbacks = new HashMap<>();
+ private int permissionRequestCounter = 0;
+
+ public synchronized void ensurePermissions(String[] permissions, PermissionRequestCallback cb) {
+ /* TODO(MSF): since when porting to AppCompat, you'll be replacing checkSelfPermission
+ * and requestPermission with AppCompat.checkSelfPermission and AppCompat.requestPermission,
+ * you can remove this SDK_INT block entirely here, and count on the compat lib to do
+ * the right thing. */
+ if (android.os.Build.VERSION.SDK_INT < 23) {
+ int[] granted = new int[permissions.length];
+ Arrays.fill(granted, PackageManager.PERMISSION_GRANTED);
+ cb.done(permissions, granted);
+ } else {
+ List<String> needPermissions = new ArrayList<>(permissions.length);
+ for (final String permission : permissions) {
+ if (getApplicationContext().checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED)
+ needPermissions.add(permission);
+ }
+ if (needPermissions.isEmpty()) {
+ int[] granted = new int[permissions.length];
+ Arrays.fill(granted, PackageManager.PERMISSION_GRANTED);
+ cb.done(permissions, granted);
+ return;
+ }
+ int idx = permissionRequestCounter++;
+ permissionRequestCallbacks.put(idx, cb);
+ requestPermissions(needPermissions.toArray(new String[needPermissions.size()]), idx);
+ }
+ }
+
+ @Override
+ public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
+ final PermissionRequestCallback f = permissionRequestCallbacks.get(requestCode);
+ if (f != null) {
+ permissionRequestCallbacks.remove(requestCode);
+ f.done(permissions, grantResults);
+ }
+ }
+
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);