|
|
@ -25,7 +25,6 @@ import android.graphics.BitmapFactory; |
|
|
|
import android.graphics.Color; |
|
|
|
import android.graphics.Color; |
|
|
|
import android.graphics.PorterDuff; |
|
|
|
import android.graphics.PorterDuff; |
|
|
|
import android.graphics.drawable.Drawable; |
|
|
|
import android.graphics.drawable.Drawable; |
|
|
|
import android.os.Build; |
|
|
|
|
|
|
|
import android.os.Bundle; |
|
|
|
import android.os.Bundle; |
|
|
|
import android.preference.PreferenceManager; |
|
|
|
import android.preference.PreferenceManager; |
|
|
|
import android.util.Log; |
|
|
|
import android.util.Log; |
|
|
@ -48,6 +47,7 @@ import java.util.List; |
|
|
|
|
|
|
|
|
|
|
|
import javax.inject.Inject; |
|
|
|
import javax.inject.Inject; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import androidx.annotation.NonNull; |
|
|
|
import androidx.annotation.Nullable; |
|
|
|
import androidx.annotation.Nullable; |
|
|
|
import androidx.annotation.StringRes; |
|
|
|
import androidx.annotation.StringRes; |
|
|
|
import androidx.appcompat.app.AlertDialog; |
|
|
|
import androidx.appcompat.app.AlertDialog; |
|
|
@ -65,7 +65,6 @@ public abstract class BaseActivity extends AppCompatActivity implements Injectab |
|
|
|
@Inject |
|
|
|
@Inject |
|
|
|
public AccountManager accountManager; |
|
|
|
public AccountManager accountManager; |
|
|
|
|
|
|
|
|
|
|
|
protected static final int BUILD_VERSION_ANY = -1; |
|
|
|
|
|
|
|
private static final int REQUESTER_NONE = Integer.MAX_VALUE; |
|
|
|
private static final int REQUESTER_NONE = Integer.MAX_VALUE; |
|
|
|
private HashMap<Integer, PermissionRequester> requesters; |
|
|
|
private HashMap<Integer, PermissionRequester> requesters; |
|
|
|
|
|
|
|
|
|
|
@ -227,42 +226,41 @@ public abstract class BaseActivity extends AppCompatActivity implements Injectab |
|
|
|
adapter.addAll(accounts); |
|
|
|
adapter.addAll(accounts); |
|
|
|
|
|
|
|
|
|
|
|
new AlertDialog.Builder(this) |
|
|
|
new AlertDialog.Builder(this) |
|
|
|
.setTitle(dialogTitle) |
|
|
|
.setTitle(dialogTitle) |
|
|
|
.setAdapter(adapter, (dialogInterface, index) -> listener.onAccountSelected(accounts.get(index))) |
|
|
|
.setAdapter(adapter, (dialogInterface, index) -> listener.onAccountSelected(accounts.get(index))) |
|
|
|
.show(); |
|
|
|
.show(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { |
|
|
|
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { |
|
|
|
if (requesters.containsKey(requestCode)) { |
|
|
|
if (requesters.containsKey(requestCode)) { |
|
|
|
PermissionRequester requester = requesters.remove(requestCode); |
|
|
|
PermissionRequester requester = requesters.remove(requestCode); |
|
|
|
requester.onRequestPermissionsResult(permissions, grantResults); |
|
|
|
requester.onRequestPermissionsResult(permissions, grantResults); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public void requestPermissions(String[] permissions, int minimumBuildVersion, PermissionRequester requester) { |
|
|
|
public void requestPermissions(String[] permissions, PermissionRequester requester) { |
|
|
|
if (minimumBuildVersion == BUILD_VERSION_ANY || Build.VERSION.SDK_INT >= minimumBuildVersion) { |
|
|
|
ArrayList<String> permissionsToRequest = new ArrayList<>(); |
|
|
|
ArrayList<String> permissionsToRequest = new ArrayList<>(); |
|
|
|
for(String permission: permissions) { |
|
|
|
for(String permission: permissions) { |
|
|
|
if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) { |
|
|
|
if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) { |
|
|
|
permissionsToRequest.add(permission); |
|
|
|
permissionsToRequest.add(permission); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (permissionsToRequest.isEmpty()) { |
|
|
|
|
|
|
|
int[] permissionsAlreadyGranted = new int[permissions.length]; |
|
|
|
|
|
|
|
for (int i = 0; i < permissionsAlreadyGranted.length; ++i) |
|
|
|
|
|
|
|
permissionsAlreadyGranted[i] = PackageManager.PERMISSION_GRANTED; |
|
|
|
|
|
|
|
requester.onRequestPermissionsResult(permissions, permissionsAlreadyGranted); |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (permissionsToRequest.isEmpty()) { |
|
|
|
|
|
|
|
int[] permissionsAlreadyGranted = new int[permissions.length]; |
|
|
|
|
|
|
|
for (int i = 0; i < permissionsAlreadyGranted.length; ++i) |
|
|
|
|
|
|
|
permissionsAlreadyGranted[i] = PackageManager.PERMISSION_GRANTED; |
|
|
|
|
|
|
|
requester.onRequestPermissionsResult(permissions, permissionsAlreadyGranted); |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
int newKey = requester == null ? REQUESTER_NONE : requesters.size(); |
|
|
|
int newKey = requester == null ? REQUESTER_NONE : requesters.size(); |
|
|
|
if (newKey != REQUESTER_NONE) { |
|
|
|
if (newKey != REQUESTER_NONE) { |
|
|
|
requesters.put(newKey, requester); |
|
|
|
requesters.put(newKey, requester); |
|
|
|
} |
|
|
|
|
|
|
|
String[] permissionsCopy = new String[permissionsToRequest.size()]; |
|
|
|
|
|
|
|
permissionsToRequest.toArray(permissionsCopy); |
|
|
|
|
|
|
|
ActivityCompat.requestPermissions(this, permissionsCopy, newKey); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
String[] permissionsCopy = new String[permissionsToRequest.size()]; |
|
|
|
|
|
|
|
permissionsToRequest.toArray(permissionsCopy); |
|
|
|
|
|
|
|
ActivityCompat.requestPermissions(this, permissionsCopy, newKey); |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|