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;
import android.Manifest;
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.View;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.app.ActivityCompat;
import android.view.KeyEvent;
import android.view.View;
import com.kabouzeid.appthemehelper.ThemeStore;
import com.dkanada.gramophone.util.NavigationUtil;
import com.dkanada.gramophone.R;
import com.google.android.material.snackbar.Snackbar;
public abstract class AbsBaseActivity extends AbsThemeActivity {
public static final int PERMISSION_REQUEST = 100;
private 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();
}
@ -49,12 +41,8 @@ public abstract class AbsBaseActivity extends AbsThemeActivity {
@Override
protected void onResume() {
super.onResume();
final boolean hasPermissions = hasPermissions();
if (hasPermissions != hadPermissions) {
hadPermissions = hasPermissions;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
super.recreate();
}
if (hasPermissions() != hadPermissions) {
super.recreate();
}
}
@ -66,12 +54,8 @@ public abstract class AbsBaseActivity extends AbsThemeActivity {
return getWindow().getDecorView();
}
protected void setPermissionDeniedMessage(String message) {
permissionDeniedMessage = message;
}
private String getPermissionDeniedMessage() {
return permissionDeniedMessage == null ? getString(R.string.permissions_denied) : permissionDeniedMessage;
protected String getPermissionDeniedMessage() {
return getString(R.string.permissions_denied);
}
protected void requestPermissions() {
@ -99,31 +83,21 @@ public abstract class AbsBaseActivity extends AbsThemeActivity {
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();
Snackbar.make(getSnackBarContainer(), getPermissionDeniedMessage(), Snackbar.LENGTH_SHORT)
.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();
Snackbar.make(getSnackBarContainer(), getPermissionDeniedMessage(), Snackbar.LENGTH_SHORT)
.setAction(R.string.action_settings, view -> NavigationUtil.openSettings(this))
.setActionTextColor(ThemeStore.accentColor(this))
.show();
}
return;
}
}
hadPermissions = true;
super.recreate();
}
}

View file

@ -11,7 +11,6 @@ import android.os.Bundle;
import android.os.IBinder;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.dkanada.gramophone.R;
import com.dkanada.gramophone.helper.MusicPlayerRemote;
@ -44,8 +43,6 @@ public abstract class AbsMusicServiceActivity extends AbsBaseActivity implements
AbsMusicServiceActivity.this.onServiceDisconnected();
}
});
setPermissionDeniedMessage(getString(R.string.permission_external_storage_denied));
}
@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
protected String[] getPermissionsToRequest() {
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.Intent;
import android.net.Uri;
import android.provider.Settings;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@ -31,6 +32,15 @@ public class NavigationUtil {
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) {
final Intent intent = new Intent(context, LoginActivity.class);