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:
casey langen 2017-06-14 20:43:57 -07:00
parent e6ddac0fee
commit 986ad74e4d
4 changed files with 57 additions and 14 deletions

View File

@ -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;
}
}
}

View File

@ -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) {

View File

@ -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);

View File

@ -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">&lt;unknown&gt;</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>