diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2018-04-29 02:04:28 +0200 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2018-04-29 07:53:56 +0200 |
commit | 622f41f11f92005e2dd3791fd13b0ace294958d5 (patch) | |
tree | 7e811b6b9940881c36be757dbe3f4bd3223e0535 /app/src/main/java/com/wireguard/android/activity | |
parent | f4e462fabd366873cf0f1d6927469d6bac3bec0d (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.java | 50 |
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); |