use dialogs instead of snackbars for permission errors
This commit is contained in:
parent
6540f58560
commit
f861d7c10e
3 changed files with 50 additions and 46 deletions
|
|
@ -1,32 +1,31 @@
|
|||
package com.dkanada.gramophone.activities.base;
|
||||
|
||||
import android.Manifest;
|
||||
import android.app.AlertDialog;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.app.ActivityCompat;
|
||||
|
||||
import com.kabouzeid.appthemehelper.ThemeStore;
|
||||
import com.dkanada.gramophone.util.NavigationUtil;
|
||||
import com.dkanada.gramophone.R;
|
||||
import com.google.android.material.snackbar.Snackbar;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public abstract class AbsBaseActivity extends AbsThemeActivity {
|
||||
private static final int PERMISSION_REQUEST = 100;
|
||||
|
||||
private boolean hadPermissions;
|
||||
private String[] permissions;
|
||||
private List<String> permissions;
|
||||
private boolean allowed;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
permissions = getPermissionsToRequest();
|
||||
hadPermissions = hasPermissions();
|
||||
allowed = hasPermissions();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -41,26 +40,22 @@ public abstract class AbsBaseActivity extends AbsThemeActivity {
|
|||
@Override
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
if (hasPermissions() != hadPermissions) {
|
||||
if (hasPermissions() != allowed) {
|
||||
super.recreate();
|
||||
}
|
||||
}
|
||||
|
||||
protected String[] getPermissionsToRequest() {
|
||||
protected List<String> getPermissionsToRequest() {
|
||||
return null;
|
||||
}
|
||||
|
||||
protected View getSnackBarContainer() {
|
||||
return getWindow().getDecorView();
|
||||
}
|
||||
|
||||
protected String getPermissionDeniedMessage() {
|
||||
return getString(R.string.permissions_denied);
|
||||
}
|
||||
|
||||
protected void requestPermissions() {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && permissions != null) {
|
||||
requestPermissions(permissions, PERMISSION_REQUEST);
|
||||
requestPermissions(permissions.toArray(new String[0]), PERMISSION_REQUEST);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -77,28 +72,32 @@ public abstract class AbsBaseActivity extends AbsThemeActivity {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
|
||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
||||
if (requestCode == PERMISSION_REQUEST) {
|
||||
for (int grantResult : grantResults) {
|
||||
if (grantResult != PackageManager.PERMISSION_GRANTED) {
|
||||
if (ActivityCompat.shouldShowRequestPermissionRationale(AbsBaseActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
|
||||
Snackbar.make(getSnackBarContainer(), getPermissionDeniedMessage(), Snackbar.LENGTH_SHORT)
|
||||
.setAction(R.string.action_grant, view -> requestPermissions())
|
||||
.setActionTextColor(ThemeStore.accentColor(this))
|
||||
.show();
|
||||
} else {
|
||||
Snackbar.make(getSnackBarContainer(), getPermissionDeniedMessage(), Snackbar.LENGTH_SHORT)
|
||||
.setAction(R.string.action_settings, view -> NavigationUtil.openSettings(this))
|
||||
.setActionTextColor(ThemeStore.accentColor(this))
|
||||
.show();
|
||||
}
|
||||
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] results) {
|
||||
super.onRequestPermissionsResult(requestCode, permissions, results);
|
||||
|
||||
if (requestCode != PERMISSION_REQUEST) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (int i = 0; i < permissions.length; i++) {
|
||||
String permission = permissions[i];
|
||||
int result = results[i];
|
||||
|
||||
if (result == PackageManager.PERMISSION_GRANTED) {
|
||||
continue;
|
||||
}
|
||||
|
||||
super.recreate();
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(this)
|
||||
.setMessage(getPermissionDeniedMessage())
|
||||
.setTitle(R.string.permissions_denied)
|
||||
.setNegativeButton(R.string.ignore, (dialog, which) -> { })
|
||||
.setPositiveButton(R.string.action_settings, (dialog, id) -> NavigationUtil.openSettings(this));
|
||||
|
||||
if (ActivityCompat.shouldShowRequestPermissionRationale(this, permission)) {
|
||||
builder.setPositiveButton(R.string.action_grant, (dialog, id) -> requestPermissions());
|
||||
}
|
||||
|
||||
builder.show();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -249,6 +249,7 @@ public abstract class AbsMusicPanelActivity extends AbsMusicServiceActivity impl
|
|||
@Override
|
||||
public void setLightStatusbar(boolean enabled) {
|
||||
lightStatusbar = enabled;
|
||||
|
||||
if (getPanelState() == SlidingUpPanelLayout.PanelState.COLLAPSED) {
|
||||
super.setLightStatusbar(enabled);
|
||||
}
|
||||
|
|
@ -257,8 +258,12 @@ public abstract class AbsMusicPanelActivity extends AbsMusicServiceActivity impl
|
|||
@Override
|
||||
public void setNavigationbarColor(int color) {
|
||||
this.navigationbarColor = color;
|
||||
|
||||
if (navigationBarColorAnimator != null) {
|
||||
navigationBarColorAnimator.cancel();
|
||||
}
|
||||
|
||||
if (getPanelState() == SlidingUpPanelLayout.PanelState.COLLAPSED) {
|
||||
if (navigationBarColorAnimator != null) navigationBarColorAnimator.cancel();
|
||||
super.setNavigationbarColor(color);
|
||||
}
|
||||
}
|
||||
|
|
@ -266,6 +271,7 @@ public abstract class AbsMusicPanelActivity extends AbsMusicServiceActivity impl
|
|||
private void animateNavigationBarColor(int color) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
if (navigationBarColorAnimator != null) navigationBarColorAnimator.cancel();
|
||||
|
||||
navigationBarColorAnimator = ValueAnimator
|
||||
.ofArgb(getWindow().getNavigationBarColor(), color)
|
||||
.setDuration(ViewUtil.PHONOGRAPH_ANIM_TIME);
|
||||
|
|
@ -279,19 +285,17 @@ public abstract class AbsMusicPanelActivity extends AbsMusicServiceActivity impl
|
|||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
if (navigationBarColorAnimator != null) navigationBarColorAnimator.cancel(); // just in case
|
||||
if (navigationBarColorAnimator != null) {
|
||||
navigationBarColorAnimator.cancel();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setTaskDescriptionColor(@ColorInt int color) {
|
||||
this.taskColor = color;
|
||||
|
||||
if (getPanelState() == null || getPanelState() == SlidingUpPanelLayout.PanelState.COLLAPSED) {
|
||||
super.setTaskDescriptionColor(color);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected View getSnackBarContainer() {
|
||||
return findViewById(R.id.content_container);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ import com.dkanada.gramophone.service.MusicService;
|
|||
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public abstract class AbsMusicServiceActivity extends AbsBaseActivity implements MusicServiceEventListener {
|
||||
|
|
@ -32,6 +33,7 @@ public abstract class AbsMusicServiceActivity extends AbsBaseActivity implements
|
|||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
serviceToken = MusicPlayerRemote.bindToService(this, new ServiceConnection() {
|
||||
@Override
|
||||
public void onServiceConnected(ComponentName name, IBinder service) {
|
||||
|
|
@ -151,7 +153,6 @@ public abstract class AbsMusicServiceActivity extends AbsBaseActivity implements
|
|||
}
|
||||
|
||||
private static final class MusicStateReceiver extends BroadcastReceiver {
|
||||
|
||||
private final WeakReference<AbsMusicServiceActivity> reference;
|
||||
|
||||
public MusicStateReceiver(final AbsMusicServiceActivity activity) {
|
||||
|
|
@ -190,7 +191,7 @@ public abstract class AbsMusicServiceActivity extends AbsBaseActivity implements
|
|||
}
|
||||
|
||||
@Override
|
||||
protected String[] getPermissionsToRequest() {
|
||||
return new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE};
|
||||
protected List<String> getPermissionsToRequest() {
|
||||
return Arrays.asList(Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue