package com.basic.security.fragment; import android.os.Bundle; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; import android.widget.TextView; import com.basic.security.base.BaseApplication; import com.basic.security.base.BaseFragment; import com.basic.security.manager.ClusterSerfSyncManager; import com.basic.security.manager.ClusterSettingManager; import com.basic.security.model.ClusterSetting; import com.basic.security.model.ModelAdapter; import com.basic.security.utils.Constants; import com.basic.security.utils.ExceptionUtil; import com.basic.security.utils.ResolutionAdaptation; import com.basic.security.utils.ToastUtil; import com.google.gson.Gson; import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.Click; import org.androidannotations.annotations.EFragment; import org.androidannotations.annotations.TextChange; import org.androidannotations.annotations.UiThread; import org.androidannotations.annotations.ViewById; import java.util.ArrayList; import java.util.List; import java.util.Map; import androidSync.AndroidSync; @EFragment public class ClusterFragment extends BaseFragment { public List allViews = new ArrayList<>(); @ViewById Button cluster_search, cluster_save, cluster_join, cluster_exit; @ViewById EditText cluster_name, cluster_id, cluster_password, cluster_ip, node_id, node_name; @ViewById TextView node_id_label, node_name_label, cluster_id_label, cluster_name_label, cluster_password_label, cluster_ip_label; @ViewById ListView lv_device_list; @ViewById View cluster_tab_parent, create_cluster_tab, join_cluster_tab; private DeviceListAdapter deviceListAdapter; private List> deviceList = new ArrayList<>(); private boolean isCreateCluster = true; public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(ResolutionAdaptation.fragment_cluster1(), container, false); } @AfterViews public void afterViews() { lv_device_list.addHeaderView(View.inflate(getContext(), com.basic.security.utils.ResolutionAdaptation.cluster_setting_list_head(), null)); allViews.add(cluster_search); allViews.add(cluster_save); allViews.add(cluster_join); allViews.add(cluster_exit); allViews.add(node_id_label); allViews.add(node_name_label); allViews.add(cluster_id_label); allViews.add(cluster_name_label); allViews.add(cluster_password_label); allViews.add(cluster_ip_label); allViews.add(node_id); allViews.add(node_name); allViews.add(cluster_id); allViews.add(cluster_name); allViews.add(cluster_password); allViews.add(cluster_ip); hideAllViews(); cluster_tab_parent.setVisibility(View.GONE); } @UiThread public void queryDeviceListReturn() { if (deviceListAdapter == null) { deviceListAdapter = new DeviceListAdapter(); lv_device_list.setAdapter(deviceListAdapter); } deviceListAdapter.notifyDataSetChanged(); } public void hideAllViews() { for (View view : allViews) { view.setVisibility(View.GONE); } } @Click public void create_cluster_tab() { hideAllViews(); join_cluster_tab.setBackgroundResource(com.basic.security.utils.RUtils.R_drawable_bg_time_rule_add_no_checked); create_cluster_tab.setBackground(null); cluster_tab_parent.setVisibility(View.VISIBLE); cluster_name.setVisibility(View.VISIBLE); cluster_name_label.setVisibility(View.VISIBLE); cluster_password.setVisibility(View.VISIBLE); cluster_password_label.setVisibility(View.VISIBLE); cluster_id.setVisibility(View.VISIBLE); cluster_id_label.setVisibility(View.VISIBLE); cluster_save.setVisibility(View.VISIBLE); } @Click public void join_cluster_tab() { hideAllViews(); create_cluster_tab.setBackgroundResource(com.basic.security.utils.RUtils.R_drawable_bg_time_rule_add_no_checked); join_cluster_tab.setBackground(null); cluster_tab_parent.setVisibility(View.VISIBLE); cluster_ip.setVisibility(View.VISIBLE); cluster_ip_label.setVisibility(View.VISIBLE); cluster_password.setVisibility(View.VISIBLE); cluster_password_label.setVisibility(View.VISIBLE); cluster_search.setVisibility(View.VISIBLE); cluster_join.setVisibility(View.VISIBLE); cluster_id.setVisibility(View.VISIBLE); cluster_id_label.setVisibility(View.VISIBLE); } public void manage_cluster_tab() { hideAllViews(); cluster_tab_parent.setVisibility(View.GONE); cluster_name.setVisibility(View.VISIBLE); cluster_name_label.setVisibility(View.VISIBLE); cluster_id.setVisibility(View.VISIBLE); cluster_id_label.setVisibility(View.VISIBLE); cluster_password.setVisibility(View.VISIBLE); cluster_password_label.setVisibility(View.VISIBLE); cluster_save.setVisibility(View.VISIBLE); cluster_exit.setVisibility(View.VISIBLE); } @UiThread public void show() { super.show(); ModelAdapter cluster = ClusterSettingManager.getCluster(); cluster_name.setText(cluster.getString(ClusterSetting.cluster_name)); cluster_id.setText(cluster.getString(ClusterSetting.cluster_id)); String password = cluster.getString(ClusterSetting.password); if (!TextUtils.isEmpty(password)) { try { } catch (Exception e) { ExceptionUtil.printException(e); } } cluster_password.setText(password); cluster_ip.setText(cluster.getString(ClusterSetting.other_node_ip)); node_id.setText(cluster.getString(ClusterSetting.node_id)); node_name.setText(cluster.getString(ClusterSetting.node_name)); isCreateCluster = true; deviceListAdapter = new DeviceListAdapter(); lv_device_list.setAdapter(deviceListAdapter); if (Constants.FALSE.equals(cluster.getString(ClusterSetting.exit))) { manage_cluster_tab(); } else { create_cluster_tab(); } } @Click public void cluster_search() { BaseApplication.getApplication().executorService.execute(() -> { try { Gson gson = new Gson(); String clusterPassword = cluster_password.getText().toString(); //12-30 10:50:00.826 20808-20808/com.basic.security.yuyin.indoor I/System.out: ClusterFragment.cluster_search {"PAD97a1cfb8c50c":{"clusterID":"c4d03d5d-64c3-4941-bb53-152277a3271a","nodeID":"PAD97a1cfb8c50c","nodeAddress":"192.168.222.103:30190","isAlive":1}} String clusters = new String(AndroidSync.getClusters("bjbasic123" + clusterPassword)); String clusterId = ""; if (!"{}".equals(clusters) && clusters.contains("clusterID\":\"")) { int clusterIDIndex = clusters.indexOf("clusterID\":\""); if (clusterIDIndex > 0) { clusterId = clusters.substring(clusterIDIndex + "clusterID\":\"".length()); clusterId = clusters.substring(0, clusterId.indexOf("\"")); clusterId = clusterId.replace("\"", ""); } } if (clusterId.length() > 4) { ToastUtil.show("搜索集群成功"); } else { ToastUtil.show("没有搜索集群"); } System.out.println("ClusterFragment.cluster_search " + clusters); } catch (Exception e) { ExceptionUtil.printException(e); } }); } @Click public void cluster_save() { cluster_join(); } @Click public void cluster_join() { ModelAdapter cluster = ClusterSettingManager.cluster; String cluster_name = this.cluster_name.getText().toString().trim(); String cluster_id = this.cluster_id.getText().toString().trim(); String password = this.cluster_password.getText().toString().trim(); String cluster_ip = this.cluster_ip.getText().toString().trim(); String node_id = this.node_id.getText().toString().trim(); String node_name = this.node_name.getText().toString().trim(); if (TextUtils.isEmpty(node_id)) { ToastUtil.show("请输入节点ID"); return; } if (TextUtils.isEmpty(node_name)) { ToastUtil.show("请输入节点名称"); return; } if (TextUtils.isEmpty(cluster_name)) { ToastUtil.show("请输入集群名称"); return; } if (TextUtils.isEmpty(password)) { ToastUtil.show("请输入集群密码"); return; } try { } catch (Exception e) { ExceptionUtil.printException(e); } cluster.setString(ClusterSetting.cluster_name, cluster_name); cluster.setString(ClusterSetting.cluster_id, cluster_id); cluster.setString(ClusterSetting.password, password); cluster.setString(ClusterSetting.other_node_ip, cluster_ip); cluster.setString(ClusterSetting.exit, Constants.FALSE); ClusterSettingManager.saveCluster(cluster); ToastUtil.show("操作成功"); synchronized (ClusterSerfSyncManager.serfQueueLock) { ClusterSerfSyncManager.serfQueue.add("1"); ClusterSerfSyncManager.serfQueueLock.notify(); } isCreateCluster = false; manage_cluster_tab(); } @TextChange(com.basic.security.utils.RUtils.R_id_cluster_ip) public void cluster_ip(TextView tv, CharSequence text) { if (TextUtils.isEmpty(text)) { cluster_join.setText("创建集群"); } else { cluster_join.setText("加入集群"); } } @Click public void cluster_exit() { ClusterSettingManager.cluster.setTrue(ClusterSetting.exit); ClusterSettingManager.saveCluster(ClusterSettingManager.cluster); updateDeviceList(new ArrayList<>()); synchronized (ClusterSerfSyncManager.serfQueueLock) { ClusterSerfSyncManager.serfQueue.add("exit"); ClusterSerfSyncManager.serfQueueLock.notify(); } ToastUtil.show("退出集群成功"); create_cluster_tab(); } @UiThread public void updateDeviceList(List> availableNodes) { try { if (deviceList != null && deviceListAdapter != null) { if (availableNodes != null) { if (availableNodes.size() == 0 && deviceList.size() == 0) { return; } for (Map availableNode : availableNodes) { String nodeIp = availableNode.get("nodeAddress"); if (!TextUtils.isEmpty(nodeIp)) { nodeIp = nodeIp.replace(":30190", ""); } else { nodeIp = ""; } availableNode.put("device_id", availableNode.get("nodeID")); availableNode.put("node_ip", nodeIp); availableNode.put("father_node", ""); } deviceList = availableNodes; deviceListAdapter.notifyDataSetChanged(); } } } catch (Exception e) { ExceptionUtil.printException(e); } } private class DeviceListAdapter extends BaseAdapter { public int getCount() { return deviceList == null ? 0 : deviceList.size(); } public Object getItem(int position) { return deviceList.get(position); } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if (convertView == null) { viewHolder = new ViewHolder(); convertView = View.inflate(getContext(), com.basic.security.utils.ResolutionAdaptation.cluster_setting_list_item(), null); viewHolder.deviceID = convertView.findViewById(com.basic.security.utils.RUtils.R_id_tv_cluster_device_id); viewHolder.IP = convertView.findViewById(com.basic.security.utils.RUtils.R_id_tv_cluster_ip); viewHolder.fatherClusterName = convertView.findViewById(com.basic.security.utils.RUtils.R_id_tv_cluster_father_name); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } Map device = deviceList.get(position); viewHolder.deviceID.setText(device.get("device_id")); viewHolder.IP.setText(device.get("node_ip")); viewHolder.fatherClusterName.setText(device.get("father_node")); return convertView; } class ViewHolder { TextView deviceID; TextView IP; TextView fatherClusterName; } } }