package biz.bokhorst.xprivacy;
import java.util.ArrayList;
import java.util.Map;
import java.util.TreeMap;
import android.annotation.SuppressLint;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.CheckedTextView;
import android.widget.ImageView;
@SuppressLint("DefaultLocale")
public class WhitelistAdapter extends ArrayAdapter<String> {
private String mSelectedType;
private int mUid;
private Map<String, TreeMap<String, Boolean>> mMapWhitelists;
private LayoutInflater mInflater;
public WhitelistAdapter(Context context, int resource, int uid, Map<String, TreeMap<String, Boolean>> mapWhitelists) {
super(context, resource, new ArrayList<String>());
mUid = uid;
mMapWhitelists = mapWhitelists;
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public void setType(String selectedType) {
mSelectedType = selectedType;
this.clear();
if (mMapWhitelists.containsKey(selectedType))
this.addAll(mMapWhitelists.get(selectedType).keySet());
}
private class ViewHolder {
private View row;
public CheckedTextView ctvName;
public ImageView imgDelete;
public ViewHolder(View theRow, int thePosition) {
row = theRow;
ctvName = (CheckedTextView) row.findViewById(R.id.cbName);
imgDelete = (ImageView) row.findViewById(R.id.imgDelete);
}
}
@Override
@SuppressLint("InflateParams")
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.whitelistentry, null);
holder = new ViewHolder(convertView, position);
convertView.setTag(holder);
} else
holder = (ViewHolder) convertView.getTag();
// Set data
final String name = this.getItem(position);
holder.ctvName.setText(name);
holder.ctvName.setChecked(mMapWhitelists.get(mSelectedType).get(name));
final boolean wnomod = PrivacyManager.getSettingBool(mUid, PrivacyManager.cSettingWhitelistNoModify, false);
holder.ctvName.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
// Toggle white/black list entry
holder.ctvName.toggle();
boolean isChecked = holder.ctvName.isChecked();
mMapWhitelists.get(mSelectedType).put(name, isChecked);
PrivacyManager.setSetting(mUid, mSelectedType, name, Boolean.toString(isChecked));
if (!wnomod)
PrivacyManager.updateState(mUid);
}
});
holder.imgDelete.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
// Delete white/black list entry
WhitelistAdapter.this.remove(name);
mMapWhitelists.get(mSelectedType).remove(name);
PrivacyManager.setSetting(mUid, mSelectedType, name, null);
if (!wnomod)
PrivacyManager.updateState(mUid);
}
});
return convertView;
}
}