Revised the gestures of the server adapter

This commit is contained in:
CappielloAntonio 2021-08-09 17:55:30 +02:00
parent 642c41f0c0
commit d88094b0cf
11 changed files with 195 additions and 21 deletions

View file

@ -20,7 +20,6 @@ import androidx.recyclerview.widget.RecyclerView;
import com.cappielloantonio.play.R;
import com.cappielloantonio.play.adapter.ServerAdapter;
import com.cappielloantonio.play.databinding.FragmentLoginBinding;
import com.cappielloantonio.play.service.MusicPlayerRemote;
import com.cappielloantonio.play.ui.activity.MainActivity;
import com.cappielloantonio.play.ui.fragment.dialog.ServerSignupDialog;
import com.cappielloantonio.play.viewmodel.LoginViewModel;
@ -36,6 +35,8 @@ public class LoginFragment extends Fragment {
private ServerAdapter serverAdapter;
private ItemTouchHelper itemTouchHelper;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@ -99,7 +100,7 @@ public class LoginFragment extends Fragment {
}
});
new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(ItemTouchHelper.UP | ItemTouchHelper.DOWN, ItemTouchHelper.LEFT) {
new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(ItemTouchHelper.UP | ItemTouchHelper.DOWN, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {
int originalPosition = -1;
int fromPosition = -1;
int toPosition = -1;
@ -118,10 +119,34 @@ public class LoginFragment extends Fragment {
return false;
}
@Override
public void clearView(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {
super.clearView(recyclerView, viewHolder);
loginViewModel.orderServer(serverAdapter.getItems());
originalPosition = -1;
fromPosition = -1;
toPosition = -1;
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
loginViewModel.deleteServer(serverAdapter.getItem(viewHolder.getBindingAdapterPosition()));
bind.serverListRecyclerView.getAdapter().notifyItemRemoved(viewHolder.getBindingAdapterPosition());
switch (direction) {
case ItemTouchHelper.LEFT:
loginViewModel.deleteServer(serverAdapter.getItem(viewHolder.getBindingAdapterPosition()));
break;
case ItemTouchHelper.RIGHT:
Bundle bundle = new Bundle();
bundle.putParcelable("server_object", serverAdapter.getItem(viewHolder.getBindingAdapterPosition()));
ServerSignupDialog dialog = new ServerSignupDialog();
dialog.setArguments(bundle);
dialog.show(activity.getSupportFragmentManager(), null);
bind.serverListRecyclerView.getAdapter().notifyDataSetChanged();
break;
}
}
}
).attachToRecyclerView(bind.serverListRecyclerView);

View file

@ -39,6 +39,7 @@ public class ServerSignupDialog extends DialogFragment {
private String username;
private String password;
private String server;
private boolean directAccess = false;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
@ -54,7 +55,8 @@ public class ServerSignupDialog extends DialogFragment {
builder.setView(bind.getRoot())
.setTitle("Add server")
.setPositiveButton("Enter", (dialog, id) -> { })
.setNeutralButton("Delete", (dialog, id) -> { })
.setPositiveButton("Save", (dialog, id) -> { })
.setNegativeButton("Cancel", (dialog, id) -> dialog.cancel());
return builder.create();
@ -63,6 +65,29 @@ public class ServerSignupDialog extends DialogFragment {
@Override
public void onStart() {
super.onStart();
setServerInfo();
setButtonAction();
}
private void setServerInfo() {
if (getArguments() != null) {
loginViewModel.setServerToEdit(getArguments().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);
}
} else {
loginViewModel.setServerToEdit(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));
@ -70,9 +95,14 @@ public class ServerSignupDialog extends DialogFragment {
if (validateInput()) {
saveServerPreference(server, username, password, null, null);
authenticate();
((AlertDialog) Objects.requireNonNull(getDialog())).dismiss();
Objects.requireNonNull(getDialog()).dismiss();
}
});
((AlertDialog) Objects.requireNonNull(getDialog())).getButton(AlertDialog.BUTTON_NEUTRAL).setOnClickListener(v -> {
loginViewModel.deleteServer(null);
Objects.requireNonNull(getDialog()).dismiss();
});
}
private boolean validateInput() {
@ -80,6 +110,7 @@ public class ServerSignupDialog extends DialogFragment {
username = bind.usernameTextView.getText().toString().trim();
password = bind.passwordTextView.getText().toString();
server = bind.serverTextView.getText().toString().trim();
directAccess = bind.directAccessCheckbox.isChecked();
if (TextUtils.isEmpty(serverName)) {
bind.serverNameTextView.setError("Required");
@ -110,7 +141,7 @@ public class ServerSignupDialog extends DialogFragment {
@Override
public void onSuccess(String token, String salt) {
saveServerPreference(null, null, null, token, salt);
enter();
if (directAccess) enter();
}
});
}
@ -125,7 +156,7 @@ public class ServerSignupDialog extends DialogFragment {
if (password != null) PreferenceUtil.getInstance(context).setPassword(password);
if (token != null && salt != null) {
String serverID = UUID.randomUUID().toString();
String serverID = loginViewModel.getServerToEdit() != null ? loginViewModel.getServerToEdit().getServerId() : UUID.randomUUID().toString();
PreferenceUtil.getInstance(context).setPassword(null);
PreferenceUtil.getInstance(context).setToken(token);