160 lines
5.7 KiB
Java
160 lines
5.7 KiB
Java
package code.name.monkey.retromusic.ui.activities.base;
|
|
|
|
import android.Manifest;
|
|
import android.content.Context;
|
|
import android.content.Intent;
|
|
import android.content.pm.PackageManager;
|
|
import android.media.AudioManager;
|
|
import android.net.Uri;
|
|
import android.os.Build;
|
|
import android.os.Bundle;
|
|
import android.provider.Settings;
|
|
import android.view.KeyEvent;
|
|
import android.view.View;
|
|
import android.view.ViewGroup;
|
|
|
|
import com.google.android.material.snackbar.Snackbar;
|
|
|
|
import androidx.annotation.NonNull;
|
|
import androidx.annotation.Nullable;
|
|
import androidx.core.app.ActivityCompat;
|
|
import androidx.core.view.ViewCompat;
|
|
import code.name.monkey.appthemehelper.ThemeStore;
|
|
import code.name.monkey.retromusic.R;
|
|
import uk.co.chrisjenx.calligraphy.CalligraphyContextWrapper;
|
|
|
|
|
|
public abstract class AbsBaseActivity extends AbsThemeActivity {
|
|
|
|
public static final int PERMISSION_REQUEST = 100;
|
|
private boolean hadPermissions;
|
|
private String[] permissions;
|
|
private String permissionDeniedMessage;
|
|
|
|
|
|
@Override
|
|
protected void onCreate(Bundle savedInstanceState) {
|
|
super.onCreate(savedInstanceState);
|
|
setVolumeControlStream(AudioManager.STREAM_MUSIC);
|
|
|
|
permissions = getPermissionsToRequest();
|
|
hadPermissions = hasPermissions();
|
|
|
|
setPermissionDeniedMessage(null);
|
|
}
|
|
|
|
@Override
|
|
protected void onPostCreate(@Nullable Bundle savedInstanceState) {
|
|
super.onPostCreate(savedInstanceState);
|
|
if (!hasPermissions()) {
|
|
requestPermissions();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
protected void onResume() {
|
|
super.onResume();
|
|
final boolean hasPermissions = hasPermissions();
|
|
if (hasPermissions != hadPermissions) {
|
|
hadPermissions = hasPermissions;
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
|
onHasPermissionsChanged(hasPermissions);
|
|
}
|
|
}
|
|
}
|
|
|
|
protected void onHasPermissionsChanged(boolean hasPermissions) {
|
|
// implemented by sub classes
|
|
}
|
|
|
|
@Override
|
|
public boolean dispatchKeyEvent(@NonNull KeyEvent event) {
|
|
if (event.getKeyCode() == KeyEvent.KEYCODE_MENU && event.getAction() == KeyEvent.ACTION_UP) {
|
|
showOverflowMenu();
|
|
return true;
|
|
}
|
|
return super.dispatchKeyEvent(event);
|
|
}
|
|
|
|
protected void showOverflowMenu() {
|
|
|
|
}
|
|
|
|
/* @Override
|
|
protected void attachBaseContext(Context newBase) {
|
|
super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
|
|
}*/
|
|
|
|
@Nullable
|
|
protected String[] getPermissionsToRequest() {
|
|
return null;
|
|
}
|
|
|
|
protected View getSnackBarContainer() {
|
|
return getWindow().getDecorView();
|
|
}
|
|
|
|
private String getPermissionDeniedMessage() {
|
|
return permissionDeniedMessage == null ? getString(R.string.permissions_denied)
|
|
: permissionDeniedMessage;
|
|
}
|
|
|
|
protected void setPermissionDeniedMessage(String message) {
|
|
permissionDeniedMessage = message;
|
|
}
|
|
|
|
protected void requestPermissions() {
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && permissions != null) {
|
|
requestPermissions(permissions, PERMISSION_REQUEST);
|
|
}
|
|
}
|
|
|
|
protected boolean hasPermissions() {
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && permissions != null) {
|
|
for (String permission : permissions) {
|
|
if (checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) {
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
@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)) {
|
|
//User has deny from permission dialog
|
|
Snackbar.make(getSnackBarContainer(), getPermissionDeniedMessage(),
|
|
Snackbar.LENGTH_INDEFINITE)
|
|
.setAction(R.string.action_grant, view -> requestPermissions())
|
|
.setActionTextColor(ThemeStore.accentColor(this))
|
|
.show();
|
|
} else {
|
|
// User has deny permission and checked never show permission dialog so you can redirect to Application settings page
|
|
Snackbar.make(getSnackBarContainer(), getPermissionDeniedMessage(),
|
|
Snackbar.LENGTH_INDEFINITE)
|
|
.setAction(R.string.action_settings, view -> {
|
|
Intent intent = new Intent();
|
|
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
|
|
Uri uri = Uri.fromParts("package", AbsBaseActivity.this.getPackageName(), null);
|
|
intent.setData(uri);
|
|
startActivity(intent);
|
|
})
|
|
.setActionTextColor(ThemeStore.accentColor(this))
|
|
.show();
|
|
}
|
|
return;
|
|
}
|
|
}
|
|
hadPermissions = true;
|
|
onHasPermissionsChanged(true);
|
|
}
|
|
}
|
|
}
|