package com.paulds.simpleftp.presentation.model; import android.app.Activity; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.databinding.BaseObservable; import android.databinding.Bindable; import android.databinding.ObservableArrayList; import android.databinding.ObservableBoolean; import android.databinding.ObservableField; import android.os.Bundle; import android.support.v7.app.AlertDialog; import android.view.View; import com.paulds.simpleftp.BR; import com.paulds.simpleftp.R; import com.paulds.simpleftp.data.entities.FtpServer; import com.paulds.simpleftp.presentation.AndroidApplication; import com.paulds.simpleftp.presentation.activities.EditServerActivity; import com.paulds.simpleftp.presentation.activities.ListServerActivity; import com.paulds.simpleftp.presentation.binders.ItemBinder; import java.util.List; /** * Model for displaying a list of servers. * * @author Paul-DS */ public class ListServerViewModel extends BaseObservable { /** * The activity context. */ private Activity context; /** * The list of servers displayed. */ @Bindable public ObservableArrayList<FtpServerViewModel> servers; /** * The selected server. */ public ObservableField<FtpServerViewModel> selectedServer; /** * Value indicating whether the selected server is visible. */ public ObservableBoolean selectedServerVisible; /** * Default constructor. * @param context The context of the current activity. */ public ListServerViewModel(Activity context) { this.context = context; this.servers = new ObservableArrayList<FtpServerViewModel>(); this.selectedServer = new ObservableField<FtpServerViewModel>(); this.selectedServerVisible = new ObservableBoolean(); } /** * Gets the item binder used to display files. * @return The item binder used to display files. */ public ItemBinder<FtpServerViewModel> itemViewBinder() { return new ItemBinder<FtpServerViewModel>(BR.server, R.layout.row_ftp_server); } /** * Refresh the data source of the server list view. */ public void updateList() { this.servers.clear(); List<FtpServer> serverEntities = AndroidApplication.getRepository().getServerRepository().getServers(); if(servers != null) { for (FtpServer server : serverEntities) { FtpServerViewModel viewModel = new FtpServerViewModel(this); viewModel.setId(server.getId()); viewModel.setName(server.getName()); viewModel.setHost(server.getHost()); viewModel.setPort(server.getPort()); viewModel.setIsAnonymous(server.isAnonymous()); viewModel.setLogin(server.getLogin()); this.servers.add(viewModel); } } } /** * Back to the previous activity. * @param view The current view */ public void back(View view) { this.context.finish(); } /** * Called when a server is selected. * @param model The view model corresponding to the selected server. */ public void consultServer(FtpServerViewModel model) { selectedServer.set(model); selectedServerVisible.set(true); } /** * Close the consult window. * @param view The current view. */ public void closeServer(View view) { selectedServerVisible.set(false); } /** * Delete the selected server. * @param view The current view. */ public void deleteServer(View view) { if(selectedServer.get() != null) { AlertDialog.Builder builder = new AlertDialog.Builder(this.context); builder.setMessage(R.string.dialog_delete_server_message); builder.setPositiveButton(R.string.dialog_delete_server_positive_button, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { AndroidApplication.getRepository().getServerRepository().deleteServer(selectedServer.get().getId()); selectedServerVisible.set(false); updateList(); } }); builder.setNegativeButton(R.string.dialog_delete_server_negative_button, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); AlertDialog dialog = builder.create(); dialog.show(); } } /** * Edit a FTP server. * @param view The current view. */ public void editServer(View view) { if(selectedServer.get() != null) { Intent intent = new Intent(context, EditServerActivity.class); Bundle bundle = new Bundle(); bundle.putInt("serverId", selectedServer.get().getId()); intent.putExtras(bundle); context.startActivityForResult(intent, ListServerActivity.KEY_EDIT_SERVER); } } /** * Add a new FTP server. * @param view The current view. */ public void addServer(View view) { Intent intent = new Intent(context, EditServerActivity.class); context.startActivity(intent); } }