package com.codigoparallevar.minicards; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import androidx.annotation.NonNull; import androidx.appcompat.app.AlertDialog; import androidx.cardview.widget.CardView; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.EditText; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import com.google.android.material.floatingactionbutton.FloatingActionButton; import java.io.IOException; class CardPreviewArrayAdapter extends ArrayAdapter { private final PreviewCard[] cards; private final ReloadableAppCompatActivity activity; public CardPreviewArrayAdapter(@NonNull ReloadableAppCompatActivity activity, PreviewCard[] cards) { super(activity, R.layout.card_preview); this.activity = activity; this.cards = cards; } @Override public int getCount() { return this.cards.length; } @Override public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); final View row = inflater.inflate(R.layout.card_preview, parent, false); final PreviewCard card = this.cards[position]; TextView nameView = row.findViewById(R.id.card_preview_name); final CardView cardView = row.findViewById(R.id.card_preview_card); final FloatingActionButton settingsButton = row.findViewById(R.id.card_preview_settings_button); cardView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { CardActivity.openCard(getContext(), card, CardActivity.DEVELOPER_VISUALIZATION_MODE); } }); settingsButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { openSettingsMenu(card); } }); nameView.setText(card.getName()); return row; } private void openSettingsMenu(final PreviewCard card) { AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); final View openCardOptions = (LayoutInflater.from(getContext()) .inflate(R.layout.card_settings_dialog, null)); final EditText cardNameEditText = openCardOptions.findViewById(R.id.card_setting_name_edit_text); cardNameEditText.setText(card.getName()); builder.setTitle("Card settings") .setView(openCardOptions) .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }) .setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { try { CardFile cardFile = CardFile.load(card.getPath(), new StubPartGrid()); cardFile.rename(getContext(), cardNameEditText.getText().toString()); CardPreviewArrayAdapter.this.activity.reload(); } catch (ErrorLoadingCardException e) { Log.e("Minicards CardSettings", "Error loading card "+ e, e); Toast.makeText(getContext(), "Error loading card " + e, Toast.LENGTH_LONG).show(); return; } catch (IOException e) { Log.e("Minicards CardSettings", "Error creating card "+ e, e); Toast.makeText(getContext(), "Error creating card " + e, Toast.LENGTH_LONG).show(); return; } } }); final Dialog dialog = builder.create(); final TextView deleteCardLink = openCardOptions.findViewById(R.id.card_setting_delete_card); deleteCardLink.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); checkDeleteCard(card); } }); dialog.show(); } private void checkDeleteCard(final PreviewCard card) { AlertDialog.Builder builder = new AlertDialog.Builder(getContext()) .setTitle("Delete card " + card.getName()) .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }) .setPositiveButton("Delete", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { try { CardFile cardFile = CardFile.load(card.getPath(), new StubPartGrid()); cardFile.delete(); CardPreviewArrayAdapter.this.activity.reload(); } catch (ErrorLoadingCardException e) { Log.e("Minicards CardSettings", "Error loading card "+ e, e); Toast.makeText(getContext(), "Error loading card " + e, Toast.LENGTH_LONG).show(); return; } catch (IOException e) { Log.e("Minicards CardSettings", "Error loading card "+ e, e); Toast.makeText(getContext(), "Error loading card " + e, Toast.LENGTH_LONG).show(); return; } } }); final Dialog dialog = builder.create(); dialog.show(); } }