mini-cards/app/src/main/java/com/codigoparallevar/minicards/CardPreviewArrayAdapter.java

158 lines
6.5 KiB
Java

package com.codigoparallevar.minicards;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v7.app.AlertDialog;
import android.support.v7.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 java.io.IOException;
class CardPreviewArrayAdapter extends ArrayAdapter<PreviewCard> {
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];
row.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(CardActivity.INTENT);
i.putExtra(CardActivity.CARD_PATH_KEY, card.getPath());
CardPreviewArrayAdapter.this.getContext().startActivity(i);
}
});
final ImageView settingsButton = (ImageView) row.findViewById(R.id.card_preview_settings_button);
settingsButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openSettingsMenu(card);
}
});
CardView cardView = (CardView) row.findViewById(R.id.card_preview_card);
TextView nameView = (TextView) row.findViewById(R.id.card_preview_name);
cardView.setBackgroundColor(card.getColor());
nameView.setText(card.getName());
nameView.setTextColor(0xFFFFFF ^ card.getColor());
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 = (EditText) 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 = (TextView) 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();
}
}