package com.basic.security.fragment;
|
|
import android.graphics.Color;
|
import android.text.TextUtils;
|
import android.view.LayoutInflater;
|
import android.view.View;
|
import android.view.ViewGroup;
|
import android.widget.BaseAdapter;
|
import android.widget.EditText;
|
import android.widget.ImageView;
|
import android.widget.TextView;
|
|
import com.basic.security.base.BaseApplication;
|
import com.basic.security.model.ModelAdapter;
|
import com.basic.security.model.Org;
|
import com.basic.security.model.OrgUI;
|
import com.basic.security.utils.ActivityUtil;
|
import com.basic.security.utils.KeyboardUtil;
|
import com.basic.security.widget.ConfirmDialog;
|
|
import java.util.HashSet;
|
import java.util.Set;
|
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.Executors;
|
|
public class TreeAdapter extends BaseAdapter {
|
static ExecutorService executorService = Executors.newSingleThreadExecutor();
|
public TreeNodeList treeNodeList = new TreeNodeList();
|
public Set<ViewHolder> viewHolderSet = new HashSet<>();
|
public int position = 0;
|
public boolean isDialog = false;
|
public boolean smallFont = false;
|
public ModelAdapter selectedOrg;
|
public OrgSelectedListener orgSelectedListener;
|
long findTreeNodeListLastTime = 0;
|
|
public TreeAdapter() {
|
}
|
|
public TreeAdapter(boolean isDialog) {
|
this.isDialog = isDialog;
|
this.smallFont = smallFont;
|
}
|
|
public TreeAdapter(boolean isDialog, boolean smallFont) {
|
this.isDialog = isDialog;
|
this.smallFont = smallFont;
|
}
|
|
public Object getItem(int position) {
|
return treeNodeList.getItem(position);
|
}
|
|
public long getItemId(int position) {
|
return position;
|
}
|
|
public int getCount() {
|
return treeNodeList.getCount();
|
}
|
|
public void findTreeNodeList(boolean clearSelectedState) {
|
if (System.currentTimeMillis() - findTreeNodeListLastTime > 15 * 1000) {
|
BaseApplication.getApplication().activity.fragment_org
|
.findTreeNodeList(this, clearSelectedState, isDialog);
|
findTreeNodeListLastTime = System.currentTimeMillis();
|
}
|
}
|
|
public View getView(int position, View convertView, ViewGroup parent) {
|
TreeAdapter.ViewHolder holder;
|
if (convertView == null) {
|
if (smallFont) {
|
convertView = LayoutInflater.from(BaseApplication.getApplication()).inflate(com.basic.security.utils.ResolutionAdaptation.adapter_treeview_small(), null);
|
} else {
|
convertView = LayoutInflater.from(BaseApplication.getApplication()).inflate(com.basic.security.utils.ResolutionAdaptation.adapter_treeview(), null);
|
}
|
holder = new TreeAdapter.ViewHolder(convertView);
|
convertView.setTag(holder);
|
viewHolderSet.add(holder);
|
} else {
|
holder = (TreeAdapter.ViewHolder) convertView.getTag();
|
}
|
this.position = position;
|
holder.updateData(position);
|
return convertView;
|
}
|
|
public void clearUI() {
|
for (ViewHolder viewHolder : viewHolderSet) {
|
viewHolder.nameText.setTextColor(Color.WHITE);
|
}
|
treeNodeList.clearUI();
|
}
|
|
public void setUI(String initOrgId) {
|
if (!TextUtils.isEmpty(initOrgId)) {
|
for (ViewHolder viewHolder : viewHolderSet) {
|
if (initOrgId.equals(viewHolder.treeNode.getString(Org.id))) {
|
viewHolder.nameText.setTextColor(Color.YELLOW);
|
} else {
|
viewHolder.nameText.setTextColor(Color.WHITE);
|
}
|
}
|
}
|
treeNodeList.setUI(initOrgId);
|
}
|
|
public void setOrgSelectedListener(OrgSelectedListener orgSelectedListener) {
|
this.orgSelectedListener = orgSelectedListener;
|
}
|
|
public interface OrgSelectedListener {
|
void orgSelected(ModelAdapter org);
|
}
|
|
public class ViewHolder {
|
public TextView nameText, padding;
|
public EditText nameInput;
|
public ModelAdapter treeNode;
|
public ImageView nameInputConfirm, expand, collapse, edit, add, delete;
|
public View nameInputParent;
|
ConfirmDialog confirmDialog;
|
|
public ViewHolder(View convertView) {
|
collapse = convertView.findViewById(com.basic.security.utils.RUtils.R_id_collapse);
|
expand = convertView.findViewById(com.basic.security.utils.RUtils.R_id_expand);
|
nameText = convertView.findViewById(com.basic.security.utils.RUtils.R_id_text);
|
padding = convertView.findViewById(com.basic.security.utils.RUtils.R_id_padding);
|
nameInput = convertView.findViewById(com.basic.security.utils.RUtils.R_id_org_name);
|
nameInputConfirm = convertView.findViewById(com.basic.security.utils.RUtils.R_id_name_input_confirm);
|
nameInputParent = convertView.findViewById(com.basic.security.utils.RUtils.R_id_name_input_parent);
|
edit = convertView.findViewById(com.basic.security.utils.RUtils.R_id_edit);
|
add = convertView.findViewById(com.basic.security.utils.RUtils.R_id_add);
|
delete = convertView.findViewById(com.basic.security.utils.RUtils.R_id_delete);
|
nameInputConfirm.setOnClickListener((View v) -> {
|
KeyboardUtil.hideSoftKeyboard();
|
BaseApplication.getApplication().activity.fragment_org.updateOrgName(treeNode.getId(), nameInput.getText().toString());
|
});
|
if (!isDialog) {
|
BaseApplication.getApplication().activity.setupUIs(expand, collapse, nameText, add, delete);
|
}
|
viewHolderSet.add(this);
|
}
|
|
public void updateData(int position) {
|
treeNode = (ModelAdapter) getItem(position);
|
expand.setOnClickListener((View v) -> {
|
executorService.execute(() -> {
|
try {
|
treeNodeList.collapse(treeNode);
|
ActivityUtil.mainActivity().runOnUiThread(() -> TreeAdapter.this.notifyDataSetChanged());
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
});
|
});
|
collapse.setOnClickListener((View v) -> {
|
executorService.execute(() -> {
|
try {
|
treeNodeList.expand(treeNode);
|
ActivityUtil.mainActivity().runOnUiThread(() -> TreeAdapter.this.notifyDataSetChanged());
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
});
|
});
|
nameText.setOnClickListener((View v) -> {
|
selectedOrg = treeNode;
|
if (!isDialog) {
|
treeNodeList.editTrue(position);
|
}
|
if (isDialog && orgSelectedListener != null) {
|
treeNode.setString(OrgUI.full_name, treeNode.getString(Org.name));
|
orgSelectedListener.orgSelected(treeNode);
|
}
|
if (isDialog) {
|
treeNodeList.setUISelected(position, OrgUI.name_selected);
|
}
|
TreeAdapter.this.notifyDataSetChanged();
|
});
|
edit.setOnClickListener((View v) -> {
|
treeNodeList.setUIFalse(position, Org.name);
|
treeNodeList.setUITrue(position, Org.nameInput);
|
TreeAdapter.this.notifyDataSetChanged();
|
});
|
add.setOnClickListener((View v) -> {
|
BaseApplication.getApplication().activity.fragment_org.addChildOrg(treeNode);
|
});
|
delete.setOnClickListener((View v) -> {
|
confirmDialog = new ConfirmDialog(BaseApplication.getApplication().activity, "确认是否删除", "确认删除", "取消");
|
confirmDialog.show();
|
confirmDialog.setClickListener(new ConfirmDialog.ClickListenerInterface() {
|
public void doConfirm() {
|
BaseApplication.getApplication().activity.fragment_org.deleteOrgById(treeNode.getId());
|
confirmDialog.dismiss();
|
}
|
|
public void doCancel() {
|
confirmDialog.dismiss();
|
}
|
});
|
});
|
padding.setText(treeNode.getString(Org.padding));
|
expand.setVisibility(View.GONE);
|
collapse.setVisibility(View.GONE);
|
nameText.setText(treeNode.getString(Org.name));
|
if (isDialog) {
|
if (treeNodeList.getUIBool(position, OrgUI.name_selected)) {
|
nameText.setTextColor(Color.YELLOW);
|
} else {
|
nameText.setTextColor(Color.WHITE);
|
}
|
}
|
nameInput.setText(nameText.getText());
|
if (!treeNode.getBool(Org.leaf)) {
|
if (treeNode.getBool(Org.expand)) {
|
expand.setVisibility(View.VISIBLE);
|
} else {
|
collapse.setVisibility(View.VISIBLE);
|
}
|
}
|
nameText.setVisibility(treeNodeList.getUIBool(position, OrgUI.name) ? View.VISIBLE : View.GONE);
|
nameInput.setVisibility(treeNodeList.getUIBool(position, OrgUI.nameInput) ? View.VISIBLE : View.GONE);
|
edit.setVisibility(treeNodeList.getUIBool(position, OrgUI.edit) ? View.VISIBLE : View.GONE);
|
int level = Integer.parseInt(treeNode.getString(Org.level));
|
add.setVisibility(treeNodeList.getUIBool(position, OrgUI.add) ? View.VISIBLE : View.GONE);
|
if (level > 2) {
|
add.setVisibility(View.GONE);
|
}
|
delete.setVisibility(treeNodeList.getUIBool(position, OrgUI.delete) && !"0".equals(treeNode.getString(Org.pid)) ? View.VISIBLE : View.GONE);
|
nameInputConfirm.setVisibility(treeNodeList.getUIBool(position, OrgUI.nameInput) ? View.VISIBLE : View.GONE);
|
nameInputParent.setVisibility(treeNodeList.getUIBool(position, OrgUI.nameInput) ? View.VISIBLE : View.GONE);
|
}
|
}
|
}
|