simplify base activity

This commit is contained in:
dkanada 2021-04-25 13:42:47 +09:00
commit 6540f58560
3 changed files with 32 additions and 46 deletions

View file

@ -1,46 +1,38 @@
package com.dkanada.gramophone.activities.base; package com.dkanada.gramophone.activities.base;
import android.Manifest; import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.media.AudioManager;
import android.net.Uri;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.provider.Settings; import android.view.View;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.core.app.ActivityCompat; import androidx.core.app.ActivityCompat;
import android.view.KeyEvent;
import android.view.View;
import com.kabouzeid.appthemehelper.ThemeStore; import com.kabouzeid.appthemehelper.ThemeStore;
import com.dkanada.gramophone.util.NavigationUtil;
import com.dkanada.gramophone.R; import com.dkanada.gramophone.R;
import com.google.android.material.snackbar.Snackbar; import com.google.android.material.snackbar.Snackbar;
public abstract class AbsBaseActivity extends AbsThemeActivity { public abstract class AbsBaseActivity extends AbsThemeActivity {
public static final int PERMISSION_REQUEST = 100; private static final int PERMISSION_REQUEST = 100;
private boolean hadPermissions; private boolean hadPermissions;
private String[] permissions; private String[] permissions;
private String permissionDeniedMessage;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setVolumeControlStream(AudioManager.STREAM_MUSIC);
permissions = getPermissionsToRequest(); permissions = getPermissionsToRequest();
hadPermissions = hasPermissions(); hadPermissions = hasPermissions();
setPermissionDeniedMessage(null);
} }
@Override @Override
protected void onPostCreate(@Nullable Bundle savedInstanceState) { protected void onPostCreate(@Nullable Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState); super.onPostCreate(savedInstanceState);
if (!hasPermissions()) { if (!hasPermissions()) {
requestPermissions(); requestPermissions();
} }
@ -49,12 +41,8 @@ public abstract class AbsBaseActivity extends AbsThemeActivity {
@Override @Override
protected void onResume() { protected void onResume() {
super.onResume(); super.onResume();
final boolean hasPermissions = hasPermissions(); if (hasPermissions() != hadPermissions) {
if (hasPermissions != hadPermissions) { super.recreate();
hadPermissions = hasPermissions;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
super.recreate();
}
} }
} }
@ -66,12 +54,8 @@ public abstract class AbsBaseActivity extends AbsThemeActivity {
return getWindow().getDecorView(); return getWindow().getDecorView();
} }
protected void setPermissionDeniedMessage(String message) { protected String getPermissionDeniedMessage() {
permissionDeniedMessage = message; return getString(R.string.permissions_denied);
}
private String getPermissionDeniedMessage() {
return permissionDeniedMessage == null ? getString(R.string.permissions_denied) : permissionDeniedMessage;
} }
protected void requestPermissions() { protected void requestPermissions() {
@ -99,31 +83,21 @@ public abstract class AbsBaseActivity extends AbsThemeActivity {
for (int grantResult : grantResults) { for (int grantResult : grantResults) {
if (grantResult != PackageManager.PERMISSION_GRANTED) { if (grantResult != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(AbsBaseActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { if (ActivityCompat.shouldShowRequestPermissionRationale(AbsBaseActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
// user has deny from permission dialog Snackbar.make(getSnackBarContainer(), getPermissionDeniedMessage(), Snackbar.LENGTH_SHORT)
Snackbar.make(getSnackBarContainer(), getPermissionDeniedMessage(), .setAction(R.string.action_grant, view -> requestPermissions())
Snackbar.LENGTH_INDEFINITE) .setActionTextColor(ThemeStore.accentColor(this))
.setAction(R.string.action_grant, view -> requestPermissions()) .show();
.setActionTextColor(ThemeStore.accentColor(this))
.show();
} else { } 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_SHORT)
Snackbar.make(getSnackBarContainer(), getPermissionDeniedMessage(), .setAction(R.string.action_settings, view -> NavigationUtil.openSettings(this))
Snackbar.LENGTH_INDEFINITE) .setActionTextColor(ThemeStore.accentColor(this))
.setAction(R.string.action_settings, view -> { .show();
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; return;
} }
} }
hadPermissions = true;
super.recreate(); super.recreate();
} }
} }

View file

@ -11,7 +11,6 @@ import android.os.Bundle;
import android.os.IBinder; import android.os.IBinder;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.dkanada.gramophone.R; import com.dkanada.gramophone.R;
import com.dkanada.gramophone.helper.MusicPlayerRemote; import com.dkanada.gramophone.helper.MusicPlayerRemote;
@ -44,8 +43,6 @@ public abstract class AbsMusicServiceActivity extends AbsBaseActivity implements
AbsMusicServiceActivity.this.onServiceDisconnected(); AbsMusicServiceActivity.this.onServiceDisconnected();
} }
}); });
setPermissionDeniedMessage(getString(R.string.permission_external_storage_denied));
} }
@Override @Override
@ -187,6 +184,11 @@ public abstract class AbsMusicServiceActivity extends AbsBaseActivity implements
} }
} }
@Override
protected String getPermissionDeniedMessage() {
return getString(R.string.permission_external_storage_denied);
}
@Override @Override
protected String[] getPermissionsToRequest() { protected String[] getPermissionsToRequest() {
return new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}; return new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE};

View file

@ -4,6 +4,7 @@ import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.net.Uri; import android.net.Uri;
import android.provider.Settings;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
@ -31,6 +32,15 @@ public class NavigationUtil {
context.startActivity(intent); context.startActivity(intent);
} }
public static void openSettings(@NonNull final Context context) {
Intent intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setData(Uri.fromParts("package", context.getPackageName(), null));
context.startActivity(intent);
}
public static void goToLogin(@NonNull final Context context) { public static void goToLogin(@NonNull final Context context) {
final Intent intent = new Intent(context, LoginActivity.class); final Intent intent = new Intent(context, LoginActivity.class);