Fixed and improved visual external storage permission related stuff.
This commit is contained in:
parent
f63a4fb298
commit
293600ba0d
5 changed files with 49 additions and 41 deletions
|
|
@ -379,7 +379,7 @@ public class MusicPlayerRemote {
|
|||
}
|
||||
}
|
||||
|
||||
public static boolean isServiceAvailable() {
|
||||
public static boolean isServiceConnected() {
|
||||
return musicService != null;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -66,25 +66,25 @@ import hugo.weaving.DebugLog;
|
|||
public class MusicService extends Service implements SharedPreferences.OnSharedPreferenceChangeListener, Playback.PlaybackCallbacks {
|
||||
public static final String TAG = MusicService.class.getSimpleName();
|
||||
|
||||
public static final String PHONOGRAPH_PACKAGE_NAME = "com.kabouzeid.gramophone";
|
||||
public static final String PHONOGRAPH_PACKAGE_NAME = "com.kabouzeid.gramophone" + ".temp_sticky_intent_fix"; // TODO remove ".temp_sticky_intent_fix" in a future update.
|
||||
public static final String MUSIC_PACKAGE_NAME = "com.android.music";
|
||||
|
||||
public static final String ACTION_TOGGLE_PAUSE = "com.kabouzeid.gramophone.togglepause";
|
||||
public static final String ACTION_PLAY = "com.kabouzeid.gramophone.play";
|
||||
public static final String ACTION_PAUSE = "com.kabouzeid.gramophone.pause";
|
||||
public static final String ACTION_STOP = "com.kabouzeid.gramophone.stop";
|
||||
public static final String ACTION_SKIP = "com.kabouzeid.gramophone.skip";
|
||||
public static final String ACTION_REWIND = "com.kabouzeid.gramophone.rewind";
|
||||
public static final String ACTION_QUIT = "com.kabouzeid.gramophone.quitservice";
|
||||
public static final String ACTION_TOGGLE_PAUSE = PHONOGRAPH_PACKAGE_NAME + ".togglepause";
|
||||
public static final String ACTION_PLAY = PHONOGRAPH_PACKAGE_NAME + ".play";
|
||||
public static final String ACTION_PAUSE = PHONOGRAPH_PACKAGE_NAME + ".pause";
|
||||
public static final String ACTION_STOP = PHONOGRAPH_PACKAGE_NAME + ".stop";
|
||||
public static final String ACTION_SKIP = PHONOGRAPH_PACKAGE_NAME + ".skip";
|
||||
public static final String ACTION_REWIND = PHONOGRAPH_PACKAGE_NAME + ".rewind";
|
||||
public static final String ACTION_QUIT = PHONOGRAPH_PACKAGE_NAME + ".quitservice";
|
||||
|
||||
// do not change these three strings as it will break support with other apps (e.g. last.fm scrobbling)
|
||||
public static final String META_CHANGED = "com.kabouzeid.gramophone.metachanged";
|
||||
public static final String QUEUE_CHANGED = "com.kabouzeid.gramophone.queuechanged";
|
||||
public static final String PLAY_STATE_CHANGED = "com.kabouzeid.gramophone.playstatechanged";
|
||||
public static final String META_CHANGED = PHONOGRAPH_PACKAGE_NAME + ".metachanged";
|
||||
public static final String QUEUE_CHANGED = PHONOGRAPH_PACKAGE_NAME + ".queuechanged";
|
||||
public static final String PLAY_STATE_CHANGED = PHONOGRAPH_PACKAGE_NAME + ".playstatechanged";
|
||||
|
||||
public static final String REPEAT_MODE_CHANGED = "com.kabouzeid.gramophone.repeatmodechanged";
|
||||
public static final String SHUFFLE_MODE_CHANGED = "com.kabouzeid.gramophone.shufflemodechanged";
|
||||
public static final String MEDIA_STORE_CHANGED = "com.kabouzeid.gramophone.mediastorechanged";
|
||||
public static final String REPEAT_MODE_CHANGED = PHONOGRAPH_PACKAGE_NAME + ".repeatmodechanged";
|
||||
public static final String SHUFFLE_MODE_CHANGED = PHONOGRAPH_PACKAGE_NAME + ".shufflemodechanged";
|
||||
public static final String MEDIA_STORE_CHANGED = PHONOGRAPH_PACKAGE_NAME + ".mediastorechanged";
|
||||
|
||||
public static final String SAVED_POSITION = "POSITION";
|
||||
public static final String SAVED_POSITION_IN_TRACK = "POSITION_IN_TRACK";
|
||||
|
|
|
|||
|
|
@ -24,10 +24,7 @@ import com.kabouzeid.gramophone.R;
|
|||
public abstract class AbsBaseActivity extends AbsThemeActivity {
|
||||
public static final int PERMISSION_REQUEST = 100;
|
||||
|
||||
private boolean areViewsEnabled;
|
||||
private boolean recreating;
|
||||
|
||||
private boolean createdWithPermissionsGranted;
|
||||
private boolean hadPermissions;
|
||||
private String[] permissions;
|
||||
private String permissionDeniedMessage;
|
||||
|
||||
|
|
@ -37,7 +34,7 @@ public abstract class AbsBaseActivity extends AbsThemeActivity {
|
|||
setVolumeControlStream(AudioManager.STREAM_MUSIC);
|
||||
|
||||
permissions = getPermissionsToRequest();
|
||||
createdWithPermissionsGranted = hasPermissions();
|
||||
hadPermissions = hasPermissions();
|
||||
|
||||
setPermissionDeniedMessage(null);
|
||||
}
|
||||
|
|
@ -53,24 +50,17 @@ public abstract class AbsBaseActivity extends AbsThemeActivity {
|
|||
@Override
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
|
||||
if (hasPermissions() != createdWithPermissionsGranted) {
|
||||
final boolean hasPermissions = hasPermissions();
|
||||
if (hasPermissions != hadPermissions) {
|
||||
hadPermissions = hasPermissions;
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
onPermissionsChanged();
|
||||
onHasPermissionsChanged(hasPermissions);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected void onPermissionsChanged() {
|
||||
postRecreate();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postRecreate() {
|
||||
if (!recreating) {
|
||||
recreating = true;
|
||||
super.postRecreate();
|
||||
}
|
||||
protected void onHasPermissionsChanged(boolean hasPermissions) {
|
||||
// implemented by sub classes
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -91,12 +81,16 @@ public abstract class AbsBaseActivity extends AbsThemeActivity {
|
|||
return null;
|
||||
}
|
||||
|
||||
protected View getSnackBarContainer() {
|
||||
return getWindow().getDecorView();
|
||||
}
|
||||
|
||||
protected void setPermissionDeniedMessage(String message) {
|
||||
if (message == null) {
|
||||
permissionDeniedMessage = getString(R.string.permissions_denied);
|
||||
} else {
|
||||
permissionDeniedMessage = message;
|
||||
}
|
||||
|
||||
private String getPermissionDeniedMessage() {
|
||||
return permissionDeniedMessage == null ? getString(R.string.permissions_denied) : permissionDeniedMessage;
|
||||
}
|
||||
|
||||
protected void requestPermissions() {
|
||||
|
|
@ -124,7 +118,7 @@ public abstract class AbsBaseActivity extends AbsThemeActivity {
|
|||
if (grantResult != PackageManager.PERMISSION_GRANTED) {
|
||||
if (ActivityCompat.shouldShowRequestPermissionRationale(AbsBaseActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
|
||||
//User has deny from permission dialog
|
||||
Snackbar.make(getWindow().getDecorView(), permissionDeniedMessage,
|
||||
Snackbar.make(getSnackBarContainer(), getPermissionDeniedMessage(),
|
||||
Snackbar.LENGTH_INDEFINITE)
|
||||
.setAction(R.string.action_grant, new View.OnClickListener() {
|
||||
@Override
|
||||
|
|
@ -136,7 +130,7 @@ public abstract class AbsBaseActivity extends AbsThemeActivity {
|
|||
.show();
|
||||
} else {
|
||||
// User has deny permission and checked never show permission dialog so you can redirect to Application settings page
|
||||
Snackbar.make(getWindow().getDecorView(), permissionDeniedMessage,
|
||||
Snackbar.make(getSnackBarContainer(), getPermissionDeniedMessage(),
|
||||
Snackbar.LENGTH_INDEFINITE)
|
||||
.setAction(R.string.action_settings, new View.OnClickListener() {
|
||||
@Override
|
||||
|
|
@ -154,7 +148,8 @@ public abstract class AbsBaseActivity extends AbsThemeActivity {
|
|||
return;
|
||||
}
|
||||
}
|
||||
onPermissionsChanged();
|
||||
hadPermissions = true;
|
||||
onHasPermissionsChanged(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -208,6 +208,14 @@ public abstract class AbsMusicServiceActivity extends AbsBaseActivity implements
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onHasPermissionsChanged(boolean hasPermissions) {
|
||||
super.onHasPermissionsChanged(hasPermissions);
|
||||
Intent intent = new Intent(MusicService.MEDIA_STORE_CHANGED);
|
||||
intent.putExtra("from_permissions_changed", true); // just in case we need to know this at some point
|
||||
sendBroadcast(intent);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
protected String[] getPermissionsToRequest() {
|
||||
|
|
|
|||
|
|
@ -220,6 +220,11 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected View getSnackBarContainer() {
|
||||
return findViewById(R.id.content_container);
|
||||
}
|
||||
|
||||
public SlidingUpPanelLayout getSlidingUpPanelLayout() {
|
||||
return slidingUpPanelLayout;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue