package com.basic.security.fragment; import android.content.Intent; import android.media.MediaPlayer; import android.text.TextUtils; import android.view.View; import android.widget.ArrayAdapter; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.Spinner; import android.widget.TextView; import android.widget.Toast; import com.basic.security.R; import com.basic.security.base.BaseFragment; import com.basic.security.fragment.helper.HomePlayAlarmSound; import com.basic.security.manager.SettingManager; import com.basic.security.model.Setting; import com.basic.security.utils.AudioPlayer; import com.basic.security.utils.Constants; import com.basic.security.utils.CrashHandler; import com.basic.security.utils.SocketClient; import com.basic.security.utils.ToastUtil; import com.basic.security.widget.CustomSpinner; import com.basic.security.widget.SuccessDialog; import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.Background; import org.androidannotations.annotations.Click; import org.androidannotations.annotations.EFragment; import org.androidannotations.annotations.UiThread; import org.androidannotations.annotations.ViewById; import java.util.Map; @EFragment(R.layout.fragment_setting) public class SettingFragment extends BaseFragment { @ViewById public EditText ip; @ViewById public EditText title; @ViewById public EditText port; @ViewById public Spinner second; @ViewById public CustomSpinner alarmAudio; @ViewById public Spinner keepTime; @ViewById public Spinner keepTimeType; @ViewById public EditText oldPassword; @ViewById public EditText newPassword; @ViewById public EditText newPassword2; private com.lztek.toolkit.Lztek mLztek; @ViewById public CheckBox switch_ethernet; @ViewById public RadioGroup ip_mode; @ViewById public RadioButton dhcp; @ViewById public RadioButton staticip; @ViewById public EditText ip_address; @ViewById public EditText net_mask; @ViewById public EditText gate_way; @ViewById public EditText dns_server; @ViewById public TextView error; public String[] secondArray = new String[]{"5", "10", "20", "30", "40", "50", "60"}; public static String[] alarmAudioArray = new String[]{"1", "2", "3", "4", "5"}; public static String[] keepTimeArray = new String[]{"1", "2", "3","4","5","6","7","8","9","10"}; public static String[] keepTimeTypeArray = new String[]{"周", "月"}; public MediaPlayer mp; boolean notSkipPlay = false; boolean saved = false; @Background public void show() { saved = false; initData(SettingManager.getIpStr(), SettingManager.getSecondStr(), SettingManager.getAlarmAudioStr(), SettingManager.getPortStr(), SettingManager.getKeepTime(), SettingManager.getKeepTimeType(), SettingManager.getAppTitle()); } @UiThread public void initData(String ipStr, String secondStr, String alarmAudioStr, String portStr, String keepTimeStr, String keepTimeTypeStr, String appTitle) { if (second != null) { second.setSelection(getSelectedIndex(secondArray, secondStr)); } if (alarmAudio != null) { notSkipPlay = false; alarmAudio.setSelection(getSelectedIndex(alarmAudioArray, alarmAudioStr)); } if (keepTime != null) { keepTime.setSelection(getSelectedIndex(keepTimeArray, keepTimeStr)); } if (keepTimeType != null) { keepTimeType.setSelection(getSelectedIndex(keepTimeTypeArray, keepTimeTypeStr)); } if (ipStr != null) { ip.setText(ipStr); } if (portStr != null) { port.setText(portStr); } if (appTitle != null) { title.setText(appTitle); } oldPassword.setText(""); newPassword.setText(""); newPassword2.setText(""); try { if (Constants.NativeLib) { refreshAddrInfo(mLztek.getEthEnable()); } } catch (Exception e){ e.printStackTrace(); } } public int getSelectedIndex(String[] array, String value) { int index = 0; for (int i = 0; i < array.length; i++) { String arrayValue = array[i]; if (arrayValue.equals(value)) { index = i; } } return index; } public static int getAudioRawIndex(String audioAlarmStr) { if (audioAlarmStr != null) { for (int i = 0; i < SettingFragment.alarmAudioArray.length; i++) { if (SettingFragment.alarmAudioArray[i].equals(audioAlarmStr)) { if (i == 0) { return R.raw.a1; } if (i == 1) { return R.raw.a2; } if (i == 2) { return R.raw.a3; } if (i == 3) { return R.raw.a4; } if (i == 4) { return R.raw.a5; } } } } return R.raw.a1; } @AfterViews public void afterViews() { try { second.setAdapter(new ArrayAdapter<>(getContext(), R.layout.spinner_item_small_text, secondArray)); second.setPopupBackgroundResource(R.drawable.round_border); keepTime.setAdapter(new ArrayAdapter<>(getContext(), R.layout.spinner_item_small_text, keepTimeArray)); keepTime.setPopupBackgroundResource(R.drawable.round_border); keepTimeType.setAdapter(new ArrayAdapter<>(getContext(), R.layout.spinner_item_small_text, keepTimeTypeArray)); keepTimeType.setPopupBackgroundResource(R.drawable.round_border); alarmAudio.setAdapter(new ArrayAdapter<>(getContext(), R.layout.spinner_item_small_text, alarmAudioArray)); alarmAudio.setPopupBackgroundResource(R.drawable.round_border); alarmAudio.selection = new CustomSpinner.Selection() { @Override public void selected(int position) { final int position1 = position; new Thread(){ @Override public void run() { if (notSkipPlay) { mp = AudioPlayer.play(mp, alarmAudioArray[position1], false); } if (!notSkipPlay) { notSkipPlay = true; } } }.start(); } }; } catch (Exception e) { e.printStackTrace(); } try { if (Constants.NativeLib) { String errorMsg = CrashHandler.getErrorContent(); System.out.println("errorMsg="+errorMsg); mLztek = com.lztek.toolkit.Lztek.create(mainActivity()); switch_ethernet.setText(switch_ethernet.getText() + " [" + mLztek.getEthMac().toUpperCase() + "]"); boolean ethEnalbe = mLztek.getEthEnable(); switch_ethernet.setChecked(ethEnalbe); switch_ethernet.setEnabled(ethEnalbe); //refreshAddrInfo(ethEnalbe); switch_ethernet.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { mLztek.setEthEnable(isChecked); refreshAddrInfo(isChecked); } }); ip_mode.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { if (group == ip_mode) { setAddrInput(staticip.isChecked()); } } }); ip_address.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if (!hasFocus) { String ip = ip_address.getText().toString().trim(); if (!ipCheck(ip)) { return; } if (net_mask.getText().toString().trim().length() == 0) { int type = Integer.parseInt(ip.substring(0, ip.indexOf('.'))); String mask = 1 <= type && type <= 126? "255.0.0.0" : (128 <= type && type <= 191? "255.255.0.0" : "255.255.255.0"); net_mask.setText(mask); } if (gate_way.getText().toString().trim().length() == 0) { gate_way.setText(ip.substring(0, ip.lastIndexOf('.')) + ".1"); } if (dns_server.getText().toString().trim().length() == 0) { dns_server.setText(ip.substring(0, ip.lastIndexOf('.')) + ".1"); } } } }); gate_way.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if (!hasFocus) { String gateway = gate_way.getText().toString().trim(); if (!ipCheck(gateway)) { return; } if (dns_server.getText().toString().trim().length() == 0) { dns_server.setText(gateway); } } } }); } } catch (Exception e) { e.printStackTrace(); } } private void refreshAddrInfo(boolean ethEnalbe) { if (ethEnalbe) { setRadioButton(true); com.lztek.toolkit.AddrInfo addrInfo = mLztek.getEthAddrInfo(); if (null != addrInfo) { boolean dhcpv = addrInfo.getIpMode() == com.lztek.toolkit.AddrInfo.DHCP; dhcp.setChecked(dhcpv); staticip.setChecked(!dhcpv); ip_address.setText(addrInfo.getIpAddress()); net_mask.setText(addrInfo.getNetmask()); gate_way.setText(addrInfo.getGateway()); dns_server.setText(addrInfo.getDns()); setAddrInput(!dhcpv); } else { setAddrInput(false); Toast.makeText(mainActivity(), "Cannot get ethernet info", Toast.LENGTH_LONG).show(); } } else { ip_address.setText(""); net_mask.setText(""); gate_way.setText(""); dns_server.setText(""); setRadioButton(false); setAddrInput(false); } setButton(ethEnalbe); } private void setRadioButton(boolean enable) { ip_mode.setEnabled(enable); dhcp.setEnabled(enable); staticip.setEnabled(enable); } private void setButton(boolean enable) { // mBtOk.setEnabled(enable); // mBtRefresh.setEnabled(enable); } private void setAddrInput(boolean enable) { ip_address.setEnabled(enable); net_mask.setEnabled(enable); gate_way.setEnabled(enable); dns_server.setEnabled(enable); ip_address.setFocusable(enable); net_mask.setFocusable(enable); gate_way.setFocusable(enable); dns_server.setFocusable(enable); ip_address.setFocusableInTouchMode(enable); net_mask.setFocusableInTouchMode(enable); gate_way.setFocusableInTouchMode(enable); dns_server.setFocusableInTouchMode(enable); } public static boolean ipCheck(String text) { if (text != null && !text.isEmpty()) { String regex = "^(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|[1-9])\\." + "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\." + "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\." + "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)$"; if (text.matches(regex)) { return true; } else { return false; } } return false; } private boolean validateDate() { String ip = ip_address.getText().toString(); if (ip.equals("") || !ipCheck(ip)) { ip_address.setFocusable(true); ip_address.requestFocus(); return false; } String net = net_mask.getText().toString(); if (net.equals("") || !ipCheck(net)) { net_mask.setFocusable(true); net_mask.requestFocus(); return false; } return true; } private void onBtnConfirm() { if (staticip.isChecked()) { if (!validateDate()) { return; } String ip = ip_address.getText().toString(); String mask = net_mask.getText().toString(); String gate = gate_way.getText().toString(); String dns = dns_server.getText().toString(); mLztek.setEthIpAddress(ip, mask, gate, dns); } else { mLztek.setEthDhcpMode(); } } long lastClick = System.currentTimeMillis(); @Click public void save() { String secondStr = second.getSelectedItem().toString(); String alarmAudioStr = alarmAudio.getSelectedItem().toString(); String keepTimeStr = keepTime.getSelectedItem().toString(); String keepTimeTypeStr = keepTimeType.getSelectedItem().toString(); String ipStr = ip.getText().toString().trim(); String portStr = port.getText().toString().trim(); String appTitle = title.getText().toString().trim(); String oldPasswordStr = oldPassword.getText().toString().trim(); String newPasswordStr = newPassword.getText().toString().trim(); String newPassword2Str = newPassword2.getText().toString().trim(); String password = SettingManager.oldPassword(); if (!TextUtils.isEmpty(newPasswordStr) || !TextUtils.isEmpty(newPassword2Str) ) { if (oldPasswordStr.length() == 0) { ToastUtil.show("密码不能为空"); return; } if(!password.equals(oldPasswordStr)) { ToastUtil.show("旧密码不正确"); return; } if(!newPasswordStr.equals(newPassword2Str)) { ToastUtil.show("两次输入的密码不一致"); return; } password = newPasswordStr; } if (ipStr.length() == 0) { ToastUtil.show("IP不能为空"); return; } if (portStr.length() == 0) { ToastUtil.show("端口不能为空"); return; } if (saved) { return; } saved = true; if (Constants.NativeLib) { boolean ethEnalbe = mLztek.getEthEnable(); if (ethEnalbe) { onBtnConfirm(); } } Map setting = SettingManager.findSetting(); setting.put(Setting.alarmAudio, alarmAudioStr); setting.put(Setting.ip, ipStr); setting.put(Setting.second, secondStr); setting.put(Setting.port, portStr); setting.put(Setting.appTitle, appTitle); setting.put(Setting.password, password); setting.put(Setting.keepTime, keepTimeStr); setting.put(Setting.keepTimeType, keepTimeTypeStr); if (SettingManager.saveSetting(setting)) { mainActivity().fragment_home.setRootUrl(); SuccessDialog successDialog = new SuccessDialog(mainActivity()); successDialog.show(); AudioPlayer.stopInNewThread(mp); mp = null; HomePlayAlarmSound.shouldRestartSound = true; SocketClient.needRestart = true; } // try { // if (Constants.NativeLib) { // refreshAddrInfo(mLztek.getEthEnable()); // } // } catch (Exception e){ // e.printStackTrace(); // } } @Click public void goto_home() { mainActivity().fragment_home.stopAllVideoPlays(null); AudioPlayer.stopInNewThread(mp); mp = null; mainActivity().goto_home(); } @Click public void exit() { android.os.Process.killProcess(android.os.Process.myPid()); System.exit(0); } @Click public void open_system_setting() { startActivityForResult(new Intent(android.provider.Settings.ACTION_SETTINGS), 0); } }