Refactor - Moved dialog folder to the same level as fragment and activity folder

This commit is contained in:
CappielloAntonio 2021-09-14 14:27:39 +02:00
parent 710d61e379
commit dc11bec48c
16 changed files with 18 additions and 24 deletions

View file

@ -0,0 +1,61 @@
package com.cappielloantonio.play.ui.dialog;
import android.app.AlertDialog;
import android.app.Dialog;
import android.os.Bundle;
import android.view.LayoutInflater;
import androidx.annotation.NonNull;
import androidx.fragment.app.DialogFragment;
import com.cappielloantonio.play.R;
import com.cappielloantonio.play.databinding.DialogConnectionAlertBinding;
import com.cappielloantonio.play.util.PreferenceUtil;
import java.util.Objects;
public class ConnectionAlertDialog extends DialogFragment {
private static final String TAG = "ServerUnreachableDialog";
private DialogConnectionAlertBinding bind;
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
bind = DialogConnectionAlertBinding.inflate(LayoutInflater.from(requireContext()));
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.AppTheme_AlertDialog);
builder.setView(bind.getRoot())
.setTitle(R.string.connection_alert_dialog_title)
.setPositiveButton(R.string.connection_alert_dialog_positive_button, (dialog, id) -> dialog.cancel())
.setNeutralButton(R.string.connection_alert_dialog_neutral_button, (dialog, id) -> { })
.setNegativeButton(R.string.connection_alert_dialog_negative_button, (dialog, id) -> dialog.cancel());
return builder.create();
}
@Override
public void onStart() {
super.onStart();
setButtonAction();
}
@Override
public void onDestroyView() {
super.onDestroyView();
bind = null;
}
private void setButtonAction() {
((AlertDialog) Objects.requireNonNull(getDialog())).getButton(AlertDialog.BUTTON_NEUTRAL).setTextColor(getResources().getColor(R.color.colorAccent, null));
((AlertDialog) Objects.requireNonNull(getDialog())).getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(getResources().getColor(R.color.colorAccent, null));
((AlertDialog) Objects.requireNonNull(getDialog())).getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(getResources().getColor(R.color.colorAccent, null));
((AlertDialog) Objects.requireNonNull(getDialog())).getButton(AlertDialog.BUTTON_NEUTRAL).setOnClickListener(v -> {
PreferenceUtil.getInstance(requireContext()).setDataSavingMode(true);
Objects.requireNonNull(getDialog()).dismiss();
});
}
}

View file

@ -0,0 +1,101 @@
package com.cappielloantonio.play.ui.dialog;
import android.app.AlertDialog;
import android.app.Dialog;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.fragment.app.DialogFragment;
import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.cappielloantonio.play.R;
import com.cappielloantonio.play.adapter.PlaylistHorizontalAdapter;
import com.cappielloantonio.play.databinding.DialogPlaylistChooserBinding;
import com.cappielloantonio.play.viewmodel.PlaylistChooserViewModel;
import java.util.Objects;
public class PlaylistChooserDialog extends DialogFragment {
private static final String TAG = "ServerSignupDialog";
private DialogPlaylistChooserBinding bind;
private PlaylistChooserViewModel playlistChooserViewModel;
private PlaylistHorizontalAdapter playlistHorizontalAdapter;
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
bind = DialogPlaylistChooserBinding.inflate(LayoutInflater.from(requireContext()));
playlistChooserViewModel = new ViewModelProvider(requireActivity()).get(PlaylistChooserViewModel.class);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.AppTheme_AlertDialog);
builder.setView(bind.getRoot())
.setTitle(R.string.playlist_chooser_dialog_title)
.setNeutralButton(R.string.playlist_chooser_dialog_neutral_button, (dialog, id) -> {
})
.setNegativeButton(R.string.playlist_chooser_dialog_negative_button, (dialog, id) -> dialog.cancel());
return builder.create();
}
@Override
public void onDestroyView() {
super.onDestroyView();
bind = null;
}
@Override
public void onStart() {
super.onStart();
initPlaylistView();
setSongInfo();
setButtonAction();
}
private void setSongInfo() {
playlistChooserViewModel.setSongToAdd(requireArguments().getParcelable("song_object"));
}
private void setButtonAction() {
((AlertDialog) Objects.requireNonNull(getDialog())).getButton(AlertDialog.BUTTON_NEUTRAL).setTextColor(getResources().getColor(R.color.colorAccent, null));
((AlertDialog) Objects.requireNonNull(getDialog())).getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(getResources().getColor(R.color.colorAccent, null));
((AlertDialog) Objects.requireNonNull(getDialog())).getButton(AlertDialog.BUTTON_NEUTRAL).setOnClickListener(v -> {
Bundle bundle = new Bundle();
bundle.putParcelable("song_object", playlistChooserViewModel.getSongToAdd());
PlaylistEditorDialog dialog = new PlaylistEditorDialog();
dialog.setArguments(bundle);
dialog.show(requireActivity().getSupportFragmentManager(), null);
Objects.requireNonNull(getDialog()).dismiss();
});
}
private void initPlaylistView() {
bind.playlistDialogRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
bind.playlistDialogRecyclerView.setHasFixedSize(true);
playlistHorizontalAdapter = new PlaylistHorizontalAdapter(requireContext(), playlistChooserViewModel, this);
bind.playlistDialogRecyclerView.setAdapter(playlistHorizontalAdapter);
playlistChooserViewModel.getPlaylistList().observe(requireActivity(), playlists -> {
if (playlists != null) {
if (playlists.size() > 0) {
if (bind != null) bind.noPlaylistsCreatedTextView.setVisibility(View.GONE);
if (bind != null) bind.playlistDialogRecyclerView.setVisibility(View.VISIBLE);
playlistHorizontalAdapter.setItems(playlists);
} else {
if (bind != null) bind.noPlaylistsCreatedTextView.setVisibility(View.VISIBLE);
if (bind != null) bind.playlistDialogRecyclerView.setVisibility(View.GONE);
}
}
});
}
}

View file

@ -0,0 +1,166 @@
package com.cappielloantonio.play.ui.dialog;
import android.app.AlertDialog;
import android.app.Dialog;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.LayoutInflater;
import androidx.annotation.NonNull;
import androidx.fragment.app.DialogFragment;
import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.cappielloantonio.play.R;
import com.cappielloantonio.play.adapter.PlaylistDialogSongHorizontalAdapter;
import com.cappielloantonio.play.databinding.DialogPlaylistEditorBinding;
import com.cappielloantonio.play.util.MusicUtil;
import com.cappielloantonio.play.viewmodel.PlaylistEditorViewModel;
import java.util.Collections;
import java.util.Objects;
public class PlaylistEditorDialog extends DialogFragment {
private static final String TAG = "ServerSignupDialog";
private DialogPlaylistEditorBinding bind;
private PlaylistEditorViewModel playlistEditorViewModel;
private String playlistName;
private PlaylistDialogSongHorizontalAdapter playlistDialogSongHorizontalAdapter;
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
bind = DialogPlaylistEditorBinding.inflate(LayoutInflater.from(requireContext()));
playlistEditorViewModel = new ViewModelProvider(requireActivity()).get(PlaylistEditorViewModel.class);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.AppTheme_AlertDialog);
builder.setView(bind.getRoot())
.setTitle(R.string.playlist_editor_dialog_title)
.setPositiveButton(R.string.playlist_editor_dialog_positive_button, (dialog, id) -> {
})
.setNeutralButton(R.string.playlist_editor_dialog_neutral_button, (dialog, id) -> dialog.cancel())
.setNegativeButton(R.string.playlist_editor_dialog_negative_button, (dialog, id) -> dialog.cancel());
return builder.create();
}
@Override
public void onStart() {
super.onStart();
setParameterInfo();
setButtonAction();
initSongsView();
}
@Override
public void onDestroyView() {
super.onDestroyView();
bind = null;
}
private void setParameterInfo() {
if (requireArguments().getParcelable("song_object") != null) {
playlistEditorViewModel.setSongToAdd(requireArguments().getParcelable("song_object"));
playlistEditorViewModel.setPlaylistToEdit(null);
} else if (requireArguments().getParcelable("playlist_object") != null) {
playlistEditorViewModel.setSongToAdd(null);
playlistEditorViewModel.setPlaylistToEdit(requireArguments().getParcelable("playlist_object"));
if (playlistEditorViewModel.getPlaylistToEdit() != null) {
bind.playlistNameTextView.setText(MusicUtil.getReadableString(playlistEditorViewModel.getPlaylistToEdit().getName()));
}
}
}
private void setButtonAction() {
((AlertDialog) Objects.requireNonNull(getDialog())).getButton(AlertDialog.BUTTON_NEUTRAL).setTextColor(getResources().getColor(R.color.colorAccent, null));
((AlertDialog) Objects.requireNonNull(getDialog())).getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(getResources().getColor(R.color.colorAccent, null));
((AlertDialog) Objects.requireNonNull(getDialog())).getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(getResources().getColor(R.color.colorAccent, null));
((AlertDialog) Objects.requireNonNull(getDialog())).getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(v -> {
if (validateInput()) {
if (playlistEditorViewModel.getSongToAdd() != null) {
playlistEditorViewModel.createPlaylist(playlistName);
} else if (playlistEditorViewModel.getPlaylistToEdit() != null) {
playlistEditorViewModel.updatePlaylist(playlistName);
}
Objects.requireNonNull(getDialog()).dismiss();
}
});
((AlertDialog) Objects.requireNonNull(getDialog())).getButton(AlertDialog.BUTTON_NEUTRAL).setOnClickListener(v -> {
playlistEditorViewModel.deletePlaylist();
Objects.requireNonNull(getDialog()).dismiss();
});
}
private void initSongsView() {
bind.playlistSongRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
bind.playlistSongRecyclerView.setHasFixedSize(true);
playlistDialogSongHorizontalAdapter = new PlaylistDialogSongHorizontalAdapter(requireContext());
bind.playlistSongRecyclerView.setAdapter(playlistDialogSongHorizontalAdapter);
playlistEditorViewModel.getPlaylistSongLiveList().observe(requireActivity(), songs -> playlistDialogSongHorizontalAdapter.setItems(songs));
new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(ItemTouchHelper.UP | ItemTouchHelper.DOWN, ItemTouchHelper.LEFT) {
int originalPosition = -1;
int fromPosition = -1;
int toPosition = -1;
@Override
public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
if (originalPosition == -1)
originalPosition = viewHolder.getBindingAdapterPosition();
fromPosition = viewHolder.getBindingAdapterPosition();
toPosition = target.getBindingAdapterPosition();
Collections.swap(playlistDialogSongHorizontalAdapter.getItems(), fromPosition, toPosition);
Objects.requireNonNull(recyclerView.getAdapter()).notifyItemMoved(fromPosition, toPosition);
return false;
}
@Override
public void clearView(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {
super.clearView(recyclerView, viewHolder);
/*
* Qui vado a riscivere tutta la table Queue, quando teoricamente potrei solo swappare l'ordine degli elementi interessati
* Nel caso la coda contenesse parecchi brani, potrebbero verificarsi rallentamenti pesanti
*/
playlistEditorViewModel.orderPlaylistSongLiveListAfterSwap(playlistDialogSongHorizontalAdapter.getItems());
originalPosition = -1;
fromPosition = -1;
toPosition = -1;
}
@Override
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
playlistEditorViewModel.removeFromPlaylistSongLiveList(viewHolder.getBindingAdapterPosition());
Objects.requireNonNull(bind.playlistSongRecyclerView.getAdapter()).notifyItemRemoved(viewHolder.getBindingAdapterPosition());
}
}
).attachToRecyclerView(bind.playlistSongRecyclerView);
}
private boolean validateInput() {
playlistName = Objects.requireNonNull(bind.playlistNameTextView.getText()).toString().trim();
if (TextUtils.isEmpty(playlistName)) {
bind.playlistNameTextView.setError(getString(R.string.error_required));
return false;
}
return true;
}
}

View file

@ -0,0 +1,79 @@
package com.cappielloantonio.play.ui.dialog;
import android.app.AlertDialog;
import android.app.Dialog;
import android.os.Bundle;
import android.view.LayoutInflater;
import androidx.annotation.NonNull;
import androidx.fragment.app.DialogFragment;
import androidx.lifecycle.ViewModelProvider;
import com.cappielloantonio.play.R;
import com.cappielloantonio.play.databinding.DialogRatingBinding;
import com.cappielloantonio.play.viewmodel.RatingViewModel;
import java.util.Objects;
public class RatingDialog extends DialogFragment {
private static final String TAG = "ServerSignupDialog";
private DialogRatingBinding bind;
private RatingViewModel ratingViewModel;
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
bind = DialogRatingBinding.inflate(LayoutInflater.from(requireContext()));
ratingViewModel = new ViewModelProvider(requireActivity()).get(RatingViewModel.class);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.AppTheme_AlertDialog);
builder.setView(bind.getRoot())
.setTitle(R.string.rating_dialog_title)
.setNegativeButton(R.string.rating_dialog_negative_button, (dialog, id) -> dialog.cancel())
.setPositiveButton(R.string.rating_dialog_positive_button, (dialog, id) -> ratingViewModel.rate((int) bind.ratingBar.getRating()));
return builder.create();
}
@Override
public void onStart() {
super.onStart();
setElementInfo();
setButtonColor();
setRating();
}
@Override
public void onDestroyView() {
super.onDestroyView();
bind = null;
}
private void setElementInfo() {
if (requireArguments().getParcelable("song_object") != null) {
ratingViewModel.setSong(requireArguments().getParcelable("song_object"));
} else if (requireArguments().getParcelable("album_object") != null) {
ratingViewModel.setAlbum(requireArguments().getParcelable("album_object"));
} else if (requireArguments().getParcelable("artist_object") != null) {
ratingViewModel.setArtist(requireArguments().getParcelable("artist_object"));
}
}
private void setButtonColor() {
((AlertDialog) Objects.requireNonNull(getDialog())).getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(getResources().getColor(R.color.colorAccent, null));
((AlertDialog) Objects.requireNonNull(getDialog())).getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(getResources().getColor(R.color.colorAccent, null));
}
private void setRating() {
if (ratingViewModel.getSong() != null) {
ratingViewModel.getLiveSong().observe(requireActivity(), song -> bind.ratingBar.setRating(song.getRating()));
} else if (ratingViewModel.getAlbum() != null) {
ratingViewModel.getLiveAlbum().observe(requireActivity(), album -> bind.ratingBar.setRating(/*album.getRating()*/ 0));
} else if (ratingViewModel.getArtist() != null) {
ratingViewModel.getLiveArtist().observe(requireActivity(), artist -> bind.ratingBar.setRating(/*artist.getRating()*/ 0));
}
}
}

View file

@ -0,0 +1,181 @@
package com.cappielloantonio.play.ui.dialog;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.fragment.app.DialogFragment;
import androidx.lifecycle.ViewModelProvider;
import com.cappielloantonio.play.App;
import com.cappielloantonio.play.R;
import com.cappielloantonio.play.databinding.DialogServerSignupBinding;
import com.cappielloantonio.play.interfaces.SystemCallback;
import com.cappielloantonio.play.model.Server;
import com.cappielloantonio.play.repository.SystemRepository;
import com.cappielloantonio.play.ui.activity.MainActivity;
import com.cappielloantonio.play.util.PreferenceUtil;
import com.cappielloantonio.play.viewmodel.LoginViewModel;
import java.util.Objects;
import java.util.UUID;
public class ServerSignupDialog extends DialogFragment {
private static final String TAG = "ServerSignupDialog";
private DialogServerSignupBinding bind;
private MainActivity activity;
private Context context;
private LoginViewModel loginViewModel;
private SystemRepository systemRepository;
private String serverName;
private String username;
private String password;
private String server;
private boolean directAccess = false;
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
activity = (MainActivity) getActivity();
context = requireContext();
loginViewModel = new ViewModelProvider(requireActivity()).get(LoginViewModel.class);
systemRepository = new SystemRepository(App.getInstance());
bind = DialogServerSignupBinding.inflate(LayoutInflater.from(requireContext()));
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.AppTheme_AlertDialog);
builder.setView(bind.getRoot())
.setTitle(R.string.server_signup_dialog_title)
.setNeutralButton(R.string.server_signup_dialog_neutral_button, (dialog, id) -> {
})
.setPositiveButton(R.string.server_signup_dialog_positive_button, (dialog, id) -> {
})
.setNegativeButton(R.string.server_signup_dialog_negative_button, (dialog, id) -> dialog.cancel());
return builder.create();
}
@Override
public void onStart() {
super.onStart();
setServerInfo();
setButtonAction();
}
@Override
public void onDestroyView() {
super.onDestroyView();
bind = null;
}
private void setServerInfo() {
if (getArguments() != null) {
loginViewModel.setServerToEdit(requireArguments().getParcelable("server_object"));
if (loginViewModel.getServerToEdit() != null) {
bind.serverNameTextView.setText(loginViewModel.getServerToEdit().getServerName());
bind.usernameTextView.setText(loginViewModel.getServerToEdit().getUsername());
bind.passwordTextView.setText("");
bind.serverTextView.setText(loginViewModel.getServerToEdit().getAddress());
bind.directAccessCheckbox.setChecked(false);
}
}
}
private void setButtonAction() {
((AlertDialog) Objects.requireNonNull(getDialog())).getButton(AlertDialog.BUTTON_NEUTRAL).setTextColor(getResources().getColor(R.color.colorAccent, null));
((AlertDialog) Objects.requireNonNull(getDialog())).getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(getResources().getColor(R.color.colorAccent, null));
((AlertDialog) Objects.requireNonNull(getDialog())).getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(getResources().getColor(R.color.colorAccent, null));
((AlertDialog) Objects.requireNonNull(getDialog())).getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(v -> {
if (validateInput()) {
saveServerPreference(server, username, password, null, null);
authenticate();
Objects.requireNonNull(getDialog()).dismiss();
}
});
((AlertDialog) Objects.requireNonNull(getDialog())).getButton(AlertDialog.BUTTON_NEUTRAL).setOnClickListener(v -> {
loginViewModel.deleteServer(null);
Objects.requireNonNull(getDialog()).dismiss();
});
}
private boolean validateInput() {
serverName = Objects.requireNonNull(bind.serverNameTextView.getText()).toString().trim();
username = Objects.requireNonNull(bind.usernameTextView.getText()).toString().trim();
password = Objects.requireNonNull(bind.passwordTextView.getText()).toString();
server = Objects.requireNonNull(bind.serverTextView.getText()).toString().trim();
directAccess = bind.directAccessCheckbox.isChecked();
if (TextUtils.isEmpty(serverName)) {
bind.serverNameTextView.setError(getString(R.string.error_required));
return false;
}
if (TextUtils.isEmpty(username)) {
bind.usernameTextView.setError(getString(R.string.error_required));
return false;
}
if (TextUtils.isEmpty(server)) {
bind.serverTextView.setError(getString(R.string.error_required));
return false;
}
return true;
}
private void authenticate() {
systemRepository.checkUserCredential(new SystemCallback() {
@Override
public void onError(Exception exception) {
Log.e(TAG, exception.getMessage());
Toast.makeText(context, exception.getMessage(), Toast.LENGTH_LONG).show();
}
@Override
public void onSuccess(String token, String salt) {
saveServerPreference(null, null, null, token, salt);
if (directAccess) enter();
}
});
}
private void enter() {
activity.goFromLogin();
}
private void saveServerPreference(String server, String user, String password, String token, String salt) {
if (user != null) PreferenceUtil.getInstance(context).setUser(user);
if (server != null) PreferenceUtil.getInstance(context).setServer(server);
if (password != null) PreferenceUtil.getInstance(context).setPassword(password);
if (token != null && salt != null) {
String serverID = loginViewModel.getServerToEdit() != null ? loginViewModel.getServerToEdit().getServerId() : UUID.randomUUID().toString();
PreferenceUtil.getInstance(context).setPassword(null);
PreferenceUtil.getInstance(context).setToken(token);
PreferenceUtil.getInstance(context).setSalt(salt);
PreferenceUtil.getInstance(context).setServerId(serverID);
loginViewModel.addServer(new Server(serverID, this.serverName, this.username, this.server, token, salt, System.currentTimeMillis()));
return;
}
App.getSubsonicClientInstance(context, true);
}
}

View file

@ -0,0 +1,66 @@
package com.cappielloantonio.play.ui.dialog;
import android.app.AlertDialog;
import android.app.Dialog;
import android.os.Bundle;
import android.view.LayoutInflater;
import androidx.annotation.NonNull;
import androidx.fragment.app.DialogFragment;
import com.cappielloantonio.play.R;
import com.cappielloantonio.play.databinding.DialogServerUnreachableBinding;
import com.cappielloantonio.play.ui.activity.MainActivity;
import java.util.Objects;
public class ServerUnreachableDialog extends DialogFragment {
private static final String TAG = "ServerUnreachableDialog";
private DialogServerUnreachableBinding bind;
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
bind = DialogServerUnreachableBinding.inflate(LayoutInflater.from(requireContext()));
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.AppTheme_AlertDialog);
builder.setView(bind.getRoot())
.setTitle(R.string.server_unreachable_dialog_title)
.setPositiveButton(R.string.server_unreachable_dialog_positive_button, (dialog, id) -> dialog.cancel())
.setNeutralButton(R.string.server_unreachable_dialog_neutral_button, (dialog, id) -> { })
.setNegativeButton(R.string.server_unreachable_dialog_negative_button, (dialog, id) -> dialog.cancel());
return builder.create();
}
@Override
public void onStart() {
super.onStart();
setButtonAction();
}
@Override
public void onDestroyView() {
super.onDestroyView();
bind = null;
}
private void setButtonAction() {
((AlertDialog) Objects.requireNonNull(getDialog())).getButton(AlertDialog.BUTTON_NEUTRAL).setTextColor(getResources().getColor(R.color.colorAccent, null));
((AlertDialog) Objects.requireNonNull(getDialog())).getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(getResources().getColor(R.color.colorAccent, null));
((AlertDialog) Objects.requireNonNull(getDialog())).getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(getResources().getColor(R.color.colorAccent, null));
((AlertDialog) Objects.requireNonNull(getDialog())).getButton(AlertDialog.BUTTON_NEUTRAL).setOnClickListener(v -> {
MainActivity activity = (MainActivity) getActivity();
if (activity != null) {
activity.goToLogin();
}
Objects.requireNonNull(getDialog()).dismiss();
});
}
}

View file

@ -0,0 +1,75 @@
package com.cappielloantonio.play.ui.dialog;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import androidx.annotation.NonNull;
import androidx.fragment.app.DialogFragment;
import androidx.lifecycle.ViewModelProvider;
import com.cappielloantonio.play.R;
import com.cappielloantonio.play.databinding.DialogConnectionAlertBinding;
import com.cappielloantonio.play.util.DownloadUtil;
import com.cappielloantonio.play.util.PreferenceUtil;
import com.cappielloantonio.play.viewmodel.StarredSyncViewModel;
import java.util.Objects;
public class StarredSyncDialog extends DialogFragment {
private static final String TAG = "ServerUnreachableDialog";
private DialogConnectionAlertBinding bind;
private StarredSyncViewModel starredSyncViewModel;
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
bind = DialogConnectionAlertBinding.inflate(LayoutInflater.from(requireContext()));
starredSyncViewModel = new ViewModelProvider(requireActivity()).get(StarredSyncViewModel.class);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.AppTheme_AlertDialog);
builder.setView(bind.getRoot())
.setTitle(R.string.starred_sync_dialog_title)
.setPositiveButton(R.string.starred_sync_dialog_positive_button, (dialog, id) -> { })
.setNegativeButton(R.string.starred_sync_dialog_negative_button, (dialog, id) -> { });
return builder.create();
}
@Override
public void onStart() {
super.onStart();
setButtonAction(requireContext());
}
@Override
public void onDestroyView() {
super.onDestroyView();
bind = null;
}
private void setButtonAction(Context context) {
((AlertDialog) Objects.requireNonNull(getDialog())).getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(getResources().getColor(R.color.colorAccent, null));
((AlertDialog) Objects.requireNonNull(getDialog())).getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(getResources().getColor(R.color.colorAccent, null));
((AlertDialog) Objects.requireNonNull(getDialog())).getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(v -> {
starredSyncViewModel.getStarredTracks(requireActivity()).observe(requireActivity(), songs -> {
if (songs != null) {
DownloadUtil.getDownloadTracker(context).download(songs, null, null);
}
});
Objects.requireNonNull(getDialog()).dismiss();
});
((AlertDialog) Objects.requireNonNull(getDialog())).getButton(AlertDialog.BUTTON_NEGATIVE).setOnClickListener(v -> {
PreferenceUtil.getInstance(requireContext()).setStarredSyncEnabled(false);
Objects.requireNonNull(getDialog()).dismiss();
});
}
}