mirror of
https://github.com/clangen/musikcube.git
synced 2025-03-14 04:18:36 +00:00
Enable "offline songs" for both streaming and remote, and have a prompt
if attempting to use it from remote mode. This should be more straight forward than having it disabled by default.
This commit is contained in:
parent
e6ddac0fee
commit
986ad74e4d
@ -1,12 +1,15 @@
|
||||
package io.casey.musikcube.remote;
|
||||
|
||||
import android.app.Dialog;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.support.design.widget.Snackbar;
|
||||
import android.support.v4.app.DialogFragment;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
@ -123,8 +126,6 @@ public class MainActivity extends WebSocketActivityBase {
|
||||
menu.findItem(R.id.action_remote_toggle).setIcon(
|
||||
streaming ? R.mipmap.ic_toolbar_streaming : R.mipmap.ic_toolbar_remote);
|
||||
|
||||
menu.findItem(R.id.action_offline_tracks).setEnabled(streaming);
|
||||
|
||||
return super.onPrepareOptionsMenu(menu);
|
||||
}
|
||||
|
||||
@ -145,11 +146,11 @@ public class MainActivity extends WebSocketActivityBase {
|
||||
|
||||
case R.id.action_playlists:
|
||||
startActivity(CategoryBrowseActivity.getStartIntent(
|
||||
this, Messages.Category.PLAYLISTS, CategoryBrowseActivity.DeepLink.TRACKS));
|
||||
this, Messages.Category.PLAYLISTS, CategoryBrowseActivity.DeepLink.TRACKS));
|
||||
return true;
|
||||
|
||||
case R.id.action_offline_tracks:
|
||||
startActivity(TrackListActivity.getOfflineStartIntent(this));
|
||||
onOfflineTracksSelected();
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -166,6 +167,23 @@ public class MainActivity extends WebSocketActivityBase {
|
||||
return this.playbackEvents;
|
||||
}
|
||||
|
||||
private void onOfflineTracksSelected() {
|
||||
if (isStreamingSelected()) {
|
||||
startActivity(TrackListActivity.getOfflineStartIntent(this));
|
||||
}
|
||||
else {
|
||||
final String tag = SwitchToOfflineTracksDialog.TAG;
|
||||
if (getSupportFragmentManager().findFragmentByTag(tag) == null) {
|
||||
SwitchToOfflineTracksDialog.newInstance().show(getSupportFragmentManager(), tag);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void onConfirmSwitchToOfflineTracks() {
|
||||
togglePlaybackService();
|
||||
onOfflineTracksSelected();
|
||||
}
|
||||
|
||||
private boolean isStreamingSelected() {
|
||||
return prefs.getBoolean(
|
||||
Prefs.Key.STREAMING_PLAYBACK,
|
||||
@ -438,9 +456,31 @@ public class MainActivity extends WebSocketActivityBase {
|
||||
public void onInvalidPassword() {
|
||||
final String tag = InvalidPasswordDialogFragment.TAG;
|
||||
if (getSupportFragmentManager().findFragmentByTag(tag) == null) {
|
||||
InvalidPasswordDialogFragment
|
||||
.newInstance().show(getSupportFragmentManager(), tag);
|
||||
InvalidPasswordDialogFragment.newInstance().show(getSupportFragmentManager(), tag);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
public static class SwitchToOfflineTracksDialog extends DialogFragment {
|
||||
public static final String TAG = "switch_to_offline_tracks_dialog";
|
||||
|
||||
public static SwitchToOfflineTracksDialog newInstance() {
|
||||
return new SwitchToOfflineTracksDialog();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||
final AlertDialog dlg = new AlertDialog.Builder(getActivity())
|
||||
.setTitle(R.string.main_switch_to_streaming_title)
|
||||
.setMessage(R.string.main_switch_to_streaming_message)
|
||||
.setNegativeButton(R.string.button_no, null)
|
||||
.setPositiveButton(R.string.button_yes, (dialog, which) -> {
|
||||
((MainActivity) getActivity()).onConfirmSwitchToOfflineTracks();
|
||||
})
|
||||
.create();
|
||||
|
||||
dlg.setCancelable(false);
|
||||
return dlg;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -32,8 +32,8 @@ abstract class PlayerWrapper {
|
||||
fun onStateChanged(mpw: PlayerWrapper, state: State)
|
||||
}
|
||||
|
||||
|
||||
private var listener: OnStateChangedListener? = null
|
||||
|
||||
var state = State.Stopped
|
||||
protected set(state) {
|
||||
if (this.state != state) {
|
||||
@ -149,9 +149,7 @@ abstract class PlayerWrapper {
|
||||
|
||||
fun newInstance(): PlayerWrapper {
|
||||
return if (TYPE == Type.ExoPlayer)
|
||||
ExoPlayerWrapper()
|
||||
else
|
||||
MediaPlayerWrapper()
|
||||
ExoPlayerWrapper() else MediaPlayerWrapper()
|
||||
}
|
||||
|
||||
fun addActivePlayer(player: PlayerWrapper) {
|
||||
|
@ -43,7 +43,7 @@ public class TrackListActivity extends WebSocketActivityBase implements Filterab
|
||||
|
||||
public static Intent getOfflineStartIntent(final Context context) {
|
||||
return getStartIntent(context, Messages.Category.OFFLINE, 0)
|
||||
.putExtra(Intent.EXTRA_TITLE, R.string.offline_tracks_title);
|
||||
.putExtra(EXTRA_TITLE_ID, R.string.offline_tracks_title);
|
||||
}
|
||||
|
||||
public static Intent getStartIntent(final Context context,
|
||||
@ -75,12 +75,13 @@ public class TrackListActivity extends WebSocketActivityBase implements Filterab
|
||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
categoryType = getIntent().getStringExtra(EXTRA_CATEGORY_TYPE);
|
||||
categoryId = getIntent().getLongExtra(EXTRA_SELECTED_ID, 0);
|
||||
final Intent intent = getIntent();
|
||||
categoryType = intent.getStringExtra(EXTRA_CATEGORY_TYPE);
|
||||
categoryId = intent.getLongExtra(EXTRA_SELECTED_ID, 0);
|
||||
final int titleId = intent.getIntExtra(EXTRA_TITLE_ID, R.string.songs_title);
|
||||
|
||||
setContentView(R.layout.recycler_view_activity);
|
||||
|
||||
final int titleId = getIntent().getIntExtra(Intent.EXTRA_TITLE, R.string.songs_title);
|
||||
Views.setTitle(this, titleId);
|
||||
Views.enableUpNavigation(this);
|
||||
|
||||
|
@ -35,6 +35,8 @@
|
||||
<string name="button_enable">enable</string>
|
||||
<string name="button_disable">disable</string>
|
||||
<string name="button_ok">ok</string>
|
||||
<string name="button_yes">yes</string>
|
||||
<string name="button_no">no</string>
|
||||
<string name="button_learn_more">learn more</string>
|
||||
<string name="invalid_password_dialog_title">invalid password</string>
|
||||
<string name="invalid_password_dialog_message">the server rejected your password.\n\nchange the password in the settings screen.</string>
|
||||
@ -58,6 +60,8 @@
|
||||
<string name="unknown_value"><unknown></string>
|
||||
<string name="snackbar_streaming_enabled">switched to streaming mode</string>
|
||||
<string name="snackbar_remote_enabled">switched to remote control mode</string>
|
||||
<string name="main_switch_to_streaming_title">switch to streaming mode?</string>
|
||||
<string name="main_switch_to_streaming_message">playing offline tracks requires you to switch from remote mode to streaming mode.\n\ndo you want to switch now?</string>
|
||||
<string name="settings_playback_mode">playback mode:</string>
|
||||
<string name="settings_transcoder_bitrate">streaming downsampler bitrate:</string>
|
||||
<string name="settings_cache_size">streaming disk cache size:</string>
|
||||
|
Loading…
x
Reference in New Issue
Block a user