open-keychain/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/KeyChoiceSpinnerAdapter.java
2018-07-04 19:39:28 +02:00

147 lines
4.4 KiB
Java

package org.sufficientlysecure.keychain.ui.widget;
import android.content.Context;
import android.support.annotation.StringRes;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.model.SubKey.UnifiedKeyInfo;
import org.sufficientlysecure.keychain.ui.util.KeyInfoFormatter;
import java.util.Arrays;
import java.util.List;
class KeyChoiceSpinnerAdapter extends BaseAdapter {
private final LayoutInflater layoutInflater;
private final KeyInfoFormatter keyInfoFormatter;
private Integer noneItemString;
private List<UnifiedKeyInfo> data;
KeyChoiceSpinnerAdapter(Context context) {
super();
layoutInflater = LayoutInflater.from(context);
keyInfoFormatter = new KeyInfoFormatter(context);
}
public void setData(List<UnifiedKeyInfo> data) {
this.data = data;
notifyDataSetChanged();
}
public void setNoneItemString(@StringRes Integer noneItemString) {
this.noneItemString = noneItemString;
notifyDataSetChanged();
}
public boolean hasNoneItem() {
return noneItemString != null;
}
@Override
public int getCount() {
return (data != null ? data.size() : 0) + (noneItemString != null ? 1 : 0);
}
public boolean isSingleEntry() {
return data != null && data.size() == 1;
}
@Override
public UnifiedKeyInfo getItem(int position) {
if (noneItemString != null) {
if (position == 0) {
return null;
}
position -= 1;
}
return data.get(position);
}
@Override
public long getItemId(int position) {
if (noneItemString != null) {
if (position == 0) {
return 0;
}
position -= 1;
}
return data != null ? data.get(position).master_key_id() : 0;
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public int getItemViewType(int position) {
if (noneItemString != null && position == 0) {
return 1;
} else {
return super.getItemViewType(position);
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (noneItemString != null) {
if (position == 0) {
if (convertView != null && convertView.getTag() == null) {
return convertView;
} else {
View view = layoutInflater.inflate(R.layout.keyspinner_item_none, parent, false);
view.<TextView>findViewById(R.id.keyspinner_key_name).setText(noneItemString);
return view;
}
}
}
View view;
KeyChoiceViewHolder viewHolder;
if (convertView == null || !(convertView.getTag() instanceof KeyChoiceViewHolder)) {
view = layoutInflater.inflate(R.layout.key_list_item, parent, false);
viewHolder = new KeyChoiceViewHolder(view);
view.setTag(viewHolder);
} else {
view = convertView;
viewHolder = ((KeyChoiceViewHolder) view.getTag());
}
UnifiedKeyInfo keyInfo = getItem(position);
viewHolder.bind(keyInfo, isEnabled(position));
return view;
}
public class KeyChoiceViewHolder {
private TextView mMainUserId;
private TextView mMainUserIdRest;
private TextView mCreationDate;
private ImageView mStatus;
KeyChoiceViewHolder(View view) {
mMainUserId = view.findViewById(R.id.key_list_item_name);
mMainUserIdRest = view.findViewById(R.id.key_list_item_email);
mStatus = view.findViewById(R.id.key_list_item_status_icon);
mCreationDate = view.findViewById(R.id.key_list_item_creation);
}
public void bind(UnifiedKeyInfo keyInfo, boolean enabled) {
keyInfoFormatter.setKeyInfo(keyInfo);
keyInfoFormatter.formatUserId(mMainUserId, mMainUserIdRest);
keyInfoFormatter.formatCreationDate(mCreationDate);
keyInfoFormatter.formatStatusIcon(mStatus);
keyInfoFormatter.greyInvalidKeys(Arrays.asList(mMainUserId, mMainUserIdRest, mCreationDate));
}
}
}