2020-07-13 18:49:29 +02:00
|
|
|
package org.mercury_im.messenger.android.ui.openpgp;
|
2020-07-13 14:43:30 +02:00
|
|
|
|
|
|
|
import android.view.LayoutInflater;
|
|
|
|
import android.view.View;
|
|
|
|
import android.view.ViewGroup;
|
|
|
|
import android.widget.Switch;
|
|
|
|
import android.widget.TextView;
|
|
|
|
|
|
|
|
import androidx.annotation.NonNull;
|
|
|
|
import androidx.recyclerview.widget.RecyclerView;
|
|
|
|
|
|
|
|
import org.mercury_im.messenger.R;
|
2020-07-13 18:49:29 +02:00
|
|
|
import org.mercury_im.messenger.core.viewmodel.openpgp.FingerprintViewItem;
|
2020-07-13 14:43:30 +02:00
|
|
|
import org.pgpainless.key.OpenPgpV4Fingerprint;
|
|
|
|
|
|
|
|
import java.text.DateFormat;
|
|
|
|
import java.text.SimpleDateFormat;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
public class ToggleableFingerprintsAdapter extends RecyclerView.Adapter<ToggleableFingerprintsAdapter.ViewHolder> {
|
|
|
|
|
|
|
|
private final List<FingerprintViewItem> fingerprints = new ArrayList<>();
|
|
|
|
private final OnFingerprintItemToggleListener toggleListener;
|
|
|
|
|
|
|
|
private static final DateFormat dateFormat = SimpleDateFormat.getDateInstance();
|
|
|
|
|
|
|
|
public ToggleableFingerprintsAdapter(OnFingerprintItemToggleListener toggleListener) {
|
|
|
|
this.toggleListener = toggleListener;
|
|
|
|
}
|
|
|
|
|
|
|
|
public void setItems(List<FingerprintViewItem> fingerprints) {
|
|
|
|
synchronized (this.fingerprints) {
|
|
|
|
this.fingerprints.clear();
|
|
|
|
this.fingerprints.addAll(fingerprints);
|
|
|
|
this.notifyDataSetChanged();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@NonNull
|
|
|
|
@Override
|
|
|
|
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
|
|
|
View view = LayoutInflater.from(parent.getContext())
|
|
|
|
.inflate(R.layout.view_fingerprint_toggleable, parent, false);
|
|
|
|
return new ViewHolder(view);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
|
|
|
|
synchronized (fingerprints) {
|
|
|
|
FingerprintViewItem f = fingerprints.get(position);
|
|
|
|
|
|
|
|
final OpenPgpV4Fingerprint fingerprint = f.getFingerprint();
|
|
|
|
|
|
|
|
holder.fingerprint.setText(OpenPgpV4FingerprintFormatter.formatOpenPgpV4Fingerprint(fingerprint));
|
|
|
|
holder.fingerprintTimestamp.setText(dateFormat.format(f.getModificationDate()));
|
|
|
|
|
|
|
|
holder.trustSwitch.setChecked(f.isTrusted());
|
|
|
|
holder.trustSwitch.setOnCheckedChangeListener(
|
|
|
|
(buttonView, isChecked) -> toggleListener.onFingerprintToggled(fingerprint, isChecked));
|
|
|
|
holder.divider.setVisibility(position == fingerprints.size() - 1 ? View.GONE : View.VISIBLE);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public int getItemCount() {
|
|
|
|
return fingerprints.size();
|
|
|
|
}
|
|
|
|
|
|
|
|
public static class ViewHolder extends RecyclerView.ViewHolder {
|
|
|
|
|
|
|
|
private final Switch trustSwitch;
|
|
|
|
private final TextView fingerprintTimestamp;
|
|
|
|
private final TextView fingerprint;
|
|
|
|
private final View divider;
|
|
|
|
|
|
|
|
public ViewHolder(@NonNull View itemView) {
|
|
|
|
super(itemView);
|
|
|
|
this.fingerprint = itemView.findViewById(R.id.fingerprint);
|
|
|
|
this.trustSwitch = itemView.findViewById(R.id.fingerprint_toggle);
|
|
|
|
this.fingerprintTimestamp = itemView.findViewById(R.id.fingerprint_timestamp);
|
|
|
|
this.divider = itemView.findViewById(R.id.divider);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public interface OnFingerprintItemToggleListener {
|
|
|
|
|
|
|
|
void onFingerprintToggled(OpenPgpV4Fingerprint fingerprint, boolean checked);
|
|
|
|
}
|
|
|
|
}
|