package com.videogo.ui.devicelist; import android.annotation.SuppressLint; import android.app.AlertDialog; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.graphics.drawable.AnimationDrawable; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.net.wifi.WifiManager.MulticastLock; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.text.InputFilter; import android.text.TextUtils; import android.text.method.PasswordTransformationMethod; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.WindowManager; import android.view.inputmethod.InputMethodManager; import android.widget.Button; import android.widget.CheckBox; import android.widget.EditText; import android.widget.ImageView; import android.widget.TextView; import com.videogo.EzvizApplication; import ezviz.ezopensdkcommon.common.RootActivity; import com.videogo.constant.Constant; import com.videogo.constant.IntentConsts; import com.videogo.device.DeviceInfoEx; import com.videogo.errorlayer.ErrorInfo; import com.videogo.exception.BaseException; import com.videogo.exception.ErrorCode; import com.videogo.openapi.EZConstants; import com.videogo.openapi.EZOpenSDKListener; import com.videogo.openapi.bean.EZProbeDeviceInfoResult; import com.videogo.ui.cameralist.EZCameraListActivity; import com.videogo.util.ConnectionDetector; import com.videogo.util.LocalInfo; import com.videogo.util.LogUtil; import com.videogo.util.Utils; import java.util.Timer; import java.util.TimerTask; import ezviz.ezopensdk.R; import ezviz.ezopensdkcommon.configwifi.AutoWifiNetConfigActivity; import static com.videogo.EzvizApplication.getOpenSDK; public class AutoWifiConnectingActivity extends RootActivity implements OnClickListener { public static final String SUPPORT_NET_WORK = "support_net_work"; public static final String FROM_PAGE = "from_page"; public static final int FROM_PAGE_SERIES_NUM_SEARCH_ACTIVITY = 1; private static final String TAG = "AutoWifiConnectingActivity"; private static final int MSG_ADD_CAMERA_SUCCESS = 10; private static final int MSG_ADD_CAMERA_FAIL = 12; private static final int STATUS_WIFI_CONNETCTING = 100; private static final int STATUS_REGISTING = 101; private static final int STATUS_ADDING_CAMERA = 102; private static final int STATUS_ADD_CAMERA_SUCCESS = 103; private final static int MSG_OPEN_CLOUD_STORYED_SUCCESS = 104; private final static int MSG_OPEN_CLOUD_STORYED_FAIL = 105; private static final int ERROR_WIFI_CONNECT = 1000; private static final int ERROR_REGIST = 1001; private static final int ERROR_ADD_CAMERA = 1002; private static final int MAX_TIME_STEP_ONE_WIFI = 60; private static final int MAX_TIME_STEP_TWO_REGIST = 60; private static final int MAX_TIME_STEP_THREE_ADD = 15; private static int ADD_CAMERA_TIMES = 3; // Return button private View btnBack; // title private TextView tvTitle; // Add the camera to the container private View addCameraContainer; // Wired connection of containers private View lineConnectContainer; // status private TextView tvStatus; // Retry button private View btnRetry; // Wired connection private Button btnLineConnect; // connection succeeded private View btnLineConnetOk; // Complete button private View btnFinish; // Cloud service is open private CheckBox ckbCloundService; // understand more private View tvMore; private String serialNo; private String wifiPassword = ""; private String wifiSSID = ""; private int errorStep = 0; private LocalInfo mLocalInfo; private MessageHandler mMsgHandler; String mVerifyCode = ""; private DeviceInfoEx mDeviceInfoEx; private ImageView imgAnimation; private AnimationDrawable animWaiting; private String maskIpAddress; private Timer overTimeTimer; private MulticastLock lock; EZOpenSDKListener.EZStartConfigWifiCallback mEZStartConfigWifiCallback = new EZOpenSDKListener.EZStartConfigWifiCallback() { @Override public void onStartConfigWifiCallback(String deviceSerial, final EZConstants.EZWifiConfigStatus status) { AutoWifiConnectingActivity.this.runOnUiThread(new Runnable() { @Override public void run() { if (status == EZConstants.EZWifiConfigStatus.DEVICE_WIFI_CONNECTING) { } else if (status == EZConstants.EZWifiConfigStatus.DEVICE_WIFI_CONNECTED) { if (isWifiConnected) { LogUtil.i(TAG, "defiveFindHandler: receiver WIFI while isWifiConnected is true"); return; } LogUtil.d(TAG, "Received WIFI on device connection " + serialNo); isWifiOkBonjourget = true; isWifiConnected = true; t2 = System.currentTimeMillis(); changeStatuss(STATUS_REGISTING); } else if (status == EZConstants.EZWifiConfigStatus.DEVICE_PLATFORM_REGISTED) { LogUtil.d(TAG, "Received PLAT information on device connection " + serialNo); if (isPlatConnected) { LogUtil.i(TAG, "defiveFindHandler: receiver PLAT while isPlatConnected is true"); return; } isPlatBonjourget = true; isPlatConnected = true; t3 = System.currentTimeMillis(); cancelOvertimeTimer(); changeStatuss(STATUS_ADDING_CAMERA); stopWifiConfigOnThread(); } } }); } }; private boolean isWifiConnected = false; private boolean isPlatConnected = false; private boolean isPlatBonjourget = false; private boolean isWifiOkBonjourget = false; private long t1 = 0; private long t2 = 0; private long t3 = 0; private long t4 = 0; private long t5 = 0; private View btnCancel; private View llyCloundService; // private WaitDialog mWaitDlg; private int fromPage; private boolean isSupportNetWork; private boolean isSupportWifi; private View tvDeviceWifiConfigTip; private String deviceType; // private long time; private long recordConfigStartTime = 0; private int searchErrorCode = 0; private View connectStateContainer; private View llyStatus1; private View llyStatus2; private View llyStatus3; private View helpTop; private View help; private View tvSuccess; // private UnbindDeviceTriggerHelper mTriggerHelper; private WifiInfo mWifiInfo; private String mac; private int speed; private int strength; // Whether to unzip the error if it is unbundled error is not reported private boolean isUnbindDeviceError = false; private EZProbeDeviceInfoResult mEZProbeDeviceInfo = null; // return 0 means success, camera info be saved in mEZProbeDeviceInfo // return other value means fail, result is the error code private int probeDeviceInfo(String deviceSerial) { mEZProbeDeviceInfo = getOpenSDK().probeDeviceInfo(serialNo,deviceType); if (mEZProbeDeviceInfo != null) { if (mEZProbeDeviceInfo.getBaseException() != null){ return mEZProbeDeviceInfo.getBaseException().getErrorCode(); } return 0; } return 1;//unknown error } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.auto_wifi_connecting); // 唤醒,常亮 getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); init(); findViews(); fromPage = getIntent().getIntExtra(FROM_PAGE, 0); initUI(); setListener(); if (fromPage == FROM_PAGE_SERIES_NUM_SEARCH_ACTIVITY) { // mDeviceInfoEx = DeviceManager.getInstance().getDeviceInfoExById(serialNo); changeStatuss(STATUS_ADD_CAMERA_SUCCESS); } else if (!isSupportWifi) { lineConnectClick(); btnBack.setVisibility(View.VISIBLE); btnCancel.setVisibility(View.GONE); } else { connectCamera(); } } private void init() { serialNo = getIntent().getStringExtra(SeriesNumSearchActivity.BUNDE_SERIANO); mVerifyCode = getIntent().getStringExtra(SeriesNumSearchActivity.BUNDE_VERYCODE); wifiPassword = getIntent().getStringExtra(AutoWifiNetConfigActivity.WIFI_PASSWORD); deviceType = getIntent().getStringExtra(AutoWifiNetConfigActivity.DEVICE_TYPE); wifiSSID = getIntent().getStringExtra(AutoWifiNetConfigActivity.WIFI_SSID); isSupportNetWork = getIntent().getBooleanExtra(SUPPORT_NET_WORK, true); // 支持声波或者SmartConfig,均判定为设备支持wifi isSupportWifi = getIntent().getBooleanExtra(IntentConsts.EXTRA_SUPPORT_SMART_CONFIG, true) || getIntent().getBooleanExtra(IntentConsts.EXTRA_SUPPORT_SOUND_WAVE, true); LogUtil.d(TAG, "serialNo = " + serialNo + ",mVerifyCode = " + mVerifyCode + ",wifiSSID = " + wifiSSID + ",isSupportNetWork " + isSupportNetWork + ",isSupportWifi " + isSupportWifi + ",isFromDeviceSetting = " + ",deviceType=" + deviceType); mMsgHandler = new MessageHandler(); mLocalInfo = LocalInfo.getInstance(); WifiManager mWifiManager = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE); // 取得WifiInfo对象 mWifiInfo = mWifiManager.getConnectionInfo(); // 路由器的mac地址 mac = (mWifiInfo == null) ? "NULL" : mWifiInfo.getBSSID(); if (mWifiInfo != null) { speed = mWifiInfo.getLinkSpeed(); strength = mWifiInfo.getRssi(); } } private void findViews() { btnBack = findViewById(R.id.btnBack); btnCancel = findViewById(R.id.cancel_btn); tvTitle = (TextView) findViewById(R.id.tvTitle); addCameraContainer = findViewById(R.id.addCameraContainer); lineConnectContainer = findViewById(R.id.lineConnectContainer); tvStatus = (TextView) findViewById(R.id.tvStatus); btnRetry = (TextView) findViewById(R.id.btnRetry); btnLineConnect = (Button) findViewById(R.id.btnLineConnet); btnLineConnetOk = findViewById(R.id.btnLineConnetOk); imgAnimation = (ImageView) findViewById(R.id.imgAnimation); btnFinish = findViewById(R.id.btnFinish); ckbCloundService = (CheckBox) findViewById(R.id.ckbCloundService); tvMore = findViewById(R.id.tvMore); llyCloundService = findViewById(R.id.llyCloundService); connectStateContainer = findViewById(R.id.connectStateContainer); llyStatus1 = findViewById(R.id.llyStatus1); llyStatus2 = findViewById(R.id.llyStatus2); llyStatus3 = findViewById(R.id.llyStatus3); helpTop = findViewById(R.id.helpTop); help = findViewById(R.id.help); tvDeviceWifiConfigTip = findViewById(R.id.tvDeviceWifiConfigTip); tvSuccess = findViewById(R.id.tvSuccess); } @SuppressLint("HandlerLeak") private Handler timerHandler = new Handler() { public void handleMessage(Message msg) { if (msg.what==0) { if (isFinishing()) { return; } TextView timer = (TextView) msg.obj; int now = Integer.parseInt(timer.getText().toString()) - 1; if (now >= 0) { timer.setText("" + now); Message newMsg = obtainMessage(); newMsg.what = 0; newMsg.obj = timer; sendMessageDelayed(newMsg, 1000); } }else{} } }; private boolean isLineConnecting; @Override protected void onActivityResult(int requestCode, int resultCode, Intent intent) { super.onActivityResult(requestCode, resultCode, intent); // mTriggerHelper.onActivityResult(requestCode, resultCode, intent); } private void showStatus(int status) { connectStateContainer.setVisibility(View.VISIBLE); TextView tip = (TextView) llyStatus1.findViewById(R.id.tip); View successIcon = llyStatus1.findViewById(R.id.successIcon); final TextView timer = (TextView) llyStatus1.findViewById(R.id.timer); TextView tip2 = (TextView) llyStatus2.findViewById(R.id.tip); View successIcon2 = llyStatus2.findViewById(R.id.successIcon); final TextView timer2 = (TextView) llyStatus2.findViewById(R.id.timer); TextView tip3 = (TextView) llyStatus3.findViewById(R.id.tip); View successIcon3 = llyStatus3.findViewById(R.id.successIcon); final TextView timer3 = (TextView) llyStatus3.findViewById(R.id.timer); llyStatus1.setVisibility(View.VISIBLE); llyStatus2.setVisibility(View.VISIBLE); llyStatus3.setVisibility(View.VISIBLE); successIcon.setVisibility(View.INVISIBLE); successIcon2.setVisibility(View.INVISIBLE); successIcon3.setVisibility(View.INVISIBLE); timer.setVisibility(View.INVISIBLE); timer2.setVisibility(View.INVISIBLE); timer3.setVisibility(View.INVISIBLE); tip.setText(R.string.auto_wifi_tip_connecting_wifi); tip2.setText(R.string.auto_wifi_tip_connecting_server); tip3.setText(R.string.auto_wifi_tip_binding_account); tip.setTextSize(Utils.px2dip(this, getResources().getDimension(R.dimen.botton_text_size))); tip2.setTextSize(Utils.px2dip(this, getResources().getDimension(R.dimen.botton_text_size))); tip3.setTextSize(Utils.px2dip(this, getResources().getDimension(R.dimen.botton_text_size))); tip.setTextColor(getResources().getColor(R.color.upgrade_gray)); tip2.setTextColor(getResources().getColor(R.color.upgrade_gray)); tip3.setTextColor(getResources().getColor(R.color.upgrade_gray)); tip3.setVisibility(View.VISIBLE); // 连接wifi if (STATUS_WIFI_CONNETCTING == status) { tip.setTextSize(Utils.px2dip(this, getResources().getDimension(R.dimen.tab_text_size))); tip.setTextColor(getResources().getColor(R.color.black)); tip.setText(R.string.auto_wifi_tip_connecting_wifi_ing); timer.setVisibility(View.VISIBLE); timer.setText(MAX_TIME_STEP_ONE_WIFI + ""); timer2.setText(MAX_TIME_STEP_THREE_ADD + ""); timer3.setText(MAX_TIME_STEP_THREE_ADD + ""); Message msg = timerHandler.obtainMessage(); msg.what = 0; msg.obj = timer; timerHandler.sendMessageDelayed(msg, 1000); } else if (STATUS_REGISTING == status) { timer2.setText(MAX_TIME_STEP_TWO_REGIST + ""); timer3.setText(MAX_TIME_STEP_THREE_ADD + ""); successIcon.setVisibility(View.VISIBLE); tip2.setTextSize(Utils.px2dip(this, getResources().getDimension(R.dimen.tab_text_size))); tip2.setTextColor(getResources().getColor(R.color.black)); tip.setText(R.string.auto_wifi_tip_connecting_wifi_ok); tip2.setText(R.string.auto_wifi_tip_connecting_server_ing); timer2.setVisibility(View.VISIBLE); Message msg = timerHandler.obtainMessage(); msg.what = 0; msg.obj = timer2; timerHandler.sendMessageDelayed(msg, 1000); } else if (STATUS_ADDING_CAMERA == status) { timer3.setText(MAX_TIME_STEP_THREE_ADD + ""); if (isLineConnecting) { llyStatus1.setVisibility(View.GONE); llyStatus2.setVisibility(View.GONE); } successIcon.setVisibility(View.VISIBLE); successIcon2.setVisibility(View.VISIBLE); successIcon3.setVisibility(View.INVISIBLE); tip3.setTextSize(Utils.px2dip(this, getResources().getDimension(R.dimen.tab_text_size))); tip3.setTextColor(getResources().getColor(R.color.black)); tip.setText(R.string.auto_wifi_tip_connecting_wifi_ok); tip2.setText(R.string.auto_wifi_tip_connecting_server_ok); tip3.setText(R.string.auto_wifi_tip_binding_account_ing); timer3.setVisibility(View.VISIBLE); // Message msg = timerHandler.obtainMessage(); msg.what = 0; msg.obj = timer3; timerHandler.sendMessageDelayed(msg, 1000); // } else if (STATUS_LINE_CONNECTING == status) { // connectStateContainer.setVisibility(View.VISIBLE); // llyStatus1.setVisibility(View.GONE); // llyStatus2.setVisibility(View.GONE); // llyStatus3.setVisibility(View.VISIBLE); // tip3.setTextSize(Utils.px2dip(this, getResources().getDimension(R.dimen.twenty))); // tip3.setTextColor(getResources().getColor(R.color.black)); // tip3.setText(R.string.auto_wifi_tip_binding_account_ing); // timer3.setVisibility(View.VISIBLE); // Message description = timerHandler.obtainMessage(); // timerHandler.sendMessage(description); // description.what = 0; // description.obj = timer3; // timerHandler.sendMessageDelayed(description, 1000); } else if (STATUS_ADD_CAMERA_SUCCESS == status || ERROR_WIFI_CONNECT == status || ERROR_REGIST == status || ERROR_ADD_CAMERA == status) { connectStateContainer.setVisibility(View.GONE); } else { } } private void initUI() { if (fromPage == FROM_PAGE_SERIES_NUM_SEARCH_ACTIVITY) { tvTitle.setText(R.string.auto_wifi_title_add_device); } else { // 一切为了转圈 // if (TextUtils.isEmpty(deviceType)) { tvTitle.setText(R.string.auto_wifi_title_add_device2); // } else { // tvTitle.setText(R.string.auto_wifi_title_add_device1); // } } } private void setListener() { btnBack.setOnClickListener(this); btnCancel.setOnClickListener(this); btnLineConnect.setOnClickListener(this); btnLineConnetOk.setOnClickListener(this); btnRetry.setOnClickListener(this); btnFinish.setOnClickListener(this); tvMore.setOnClickListener(this); help.setOnClickListener(this); } private void connectCamera() { changeStatuss(STATUS_WIFI_CONNETCTING); } private void start() { isWifiConnected = false; isPlatConnected = false; isWifiOkBonjourget = false; isPlatBonjourget = false; //Detection 5 seconds ahead of search LogUtil.i(TAG, "in start: startOvertimeTimer"); startOvertimeTimer((MAX_TIME_STEP_ONE_WIFI - 5) * 1000, new Runnable() { public void run() { final Runnable success = new Runnable() { public void run() { if (isPlatConnected) { return; } // save wifipassword if (!isLineConnecting && !TextUtils.isEmpty(mac) && !"NULL".equals(mac)) { // LocalInfo.getInstance().setWifiPassword(mac, wifiPassword); } isPlatConnected = true; t4 = System.currentTimeMillis(); changeStatuss(STATUS_ADDING_CAMERA); LogUtil.d(TAG, "start Timeout from the server to obtain the device information is successful"); } }; final Runnable fail = new Runnable() { public void run() { t4 = System.currentTimeMillis(); LogUtil.d(TAG, "Timeout from the server to get device information failed"); stopWifiConfigOnThread(); addCameraFailed(isWifiOkBonjourget ? ERROR_REGIST : ERROR_WIFI_CONNECT, searchErrorCode); } }; Thread thr = new Thread(new Runnable() { @Override public void run() { LogUtil.i(TAG, "in start, begin probeDeviceInfo"); int result = probeDeviceInfo(serialNo); LogUtil.i(TAG, "in start, got probeDeviceInfo"); if (result == 0 && mEZProbeDeviceInfo != null) { LogUtil.i(TAG, "in start, probeDeviceInfo success," + mEZProbeDeviceInfo); runOnUiThread(success); // TODO } else if (result == ErrorCode.ERROR_WEB_DEVICE_ONLINE_NOT_ADD) { LogUtil.i(TAG, "in start, probeDeviceInfo error:ERROR_WEB_DIVICE_ONLINE_NOT_ADD"); runOnUiThread(success); } else { LogUtil.i(TAG, "in start, probeDeviceInfo camera not online"); runOnUiThread(fail); } } }); thr.start(); } }); boolean support_sound_wave = getIntent().getBooleanExtra("support_sound_wave", false); boolean support_Wifi = getIntent().getBooleanExtra("support_Wifi", false); boolean isStartedConfigWifi = true; if (support_Wifi){ getOpenSDK().stopConfigWiFi(); getOpenSDK().startConfigWifi(AutoWifiConnectingActivity.this, serialNo, wifiSSID, wifiPassword, EZConstants.EZWiFiConfigMode.EZWiFiConfigSmart, mEZStartConfigWifiCallback); }else if(support_sound_wave){ getOpenSDK().startConfigWifi(AutoWifiConnectingActivity.this, serialNo, wifiSSID, wifiPassword, EZConstants.EZWiFiConfigMode.EZWiFiConfigWave, mEZStartConfigWifiCallback); }else{ isStartedConfigWifi = false; } if (isStartedConfigWifi){ DeviceOnlineStatusMonitor.start(serialNo, mEZStartConfigWifiCallback); } } private synchronized void stopWifiConfigOnThread() { // Stop configuration, stop bonjour service new Thread(new Runnable() { @Override public void run() { long startTime = System.currentTimeMillis(); getOpenSDK().stopConfigWiFi(); LogUtil.d(TAG, "stopBonjourOnThread .cost time = " + (System.currentTimeMillis() - startTime) + "ms"); } }).start(); LogUtil.d(TAG, "stopBonjourOnThread .................."); } @Override public void onClick(View v) { if (v.getId()==R.id.btnBack) { onBackPressed(); }else if (v.getId()==R.id.cancel_btn) { cancelOnClick(); }else if (v.getId()==R.id.btnRetry) { retryOnclick(); }else if (v.getId()==R.id.btnLineConnet) { lineConnectClick(); }else if (v.getId()==R.id.btnLineConnetOk) { lineConnectOkClick(); }else if (v.getId()==R.id.btnFinish) { finishOnClick(); }else if (v.getId()==R.id.tvMore) { moreOnClick(); }else if (v.getId()==R.id.help) { helpOnclick(); }else{ } } private void helpOnclick() { } private void moreOnClick() { } private void finishOnClick() { // Cloud storage switch, the device is not online or not the latest device or the user does not open the cloud storage service is not see this control if (llyCloundService.getVisibility() == View.VISIBLE && ckbCloundService.isChecked()) { enableCloudStoryed(); } else { closeActivity(); } } private void enableCloudStoryed() { // Local network detection if (!ConnectionDetector.isNetworkAvailable(this)) { showToast(R.string.save_encrypt_password_fail_network_exception); return; } // mWaitDlg.show(); showWaitDialog(R.string.start_cloud); new Thread() { @Override public void run() { } ; }.start(); } private void cancelOnClick() { btnCancel.setVisibility(View.GONE); lineConnectContainer.setVisibility(View.GONE); addCameraContainer.setVisibility(View.VISIBLE); // if (TextUtils.isEmpty(mVerifyCode)) { tvTitle.setText(R.string.auto_wifi_title_add_device2); // } else { // tvTitle.setText(R.string.auto_wifi_title_add_device1); // } helpTop.setVisibility(View.VISIBLE); help.setVisibility(View.VISIBLE); } private void retryOnclick() { helpTop.setVisibility(View.GONE); help.setVisibility(View.GONE); if (errorStep==ERROR_WIFI_CONNECT) { changeStatuss(STATUS_WIFI_CONNETCTING); }else if (errorStep==ERROR_REGIST) { changeStatuss(STATUS_ADDING_CAMERA); }else if (errorStep==ERROR_ADD_CAMERA) { recordConfigStartTime = System.currentTimeMillis(); changeStatuss(STATUS_ADDING_CAMERA); }else{ } } private void lineConnectClick() { helpTop.setVisibility(View.GONE); help.setVisibility(View.GONE); connectStateContainer.setVisibility(View.GONE); btnCancel.setVisibility(View.VISIBLE); lineConnectContainer.setVisibility(View.VISIBLE); if (btnLineConnect.getVisibility() == View.VISIBLE) { tvTitle.setText(R.string.auto_wifi_line_connect_title); } else if (TextUtils.isEmpty(deviceType)) { tvTitle.setText(R.string.auto_wifi_network_add_device2); } else { tvTitle.setText(R.string.auto_wifi_network_add_device1); } addCameraContainer.setVisibility(View.GONE); } private void lineConnectOkClick() { isLineConnecting = true; cancelOnClick(); help.setVisibility(View.GONE); helpTop.setVisibility(View.GONE); btnRetry.setVisibility(View.GONE); btnLineConnect.setVisibility(View.GONE); changeStatuss(STATUS_ADDING_CAMERA); // if (TextUtils.isEmpty(deviceType)) { tvTitle.setText(R.string.auto_wifi_title_add_device2); // } else { // tvTitle.setText(R.string.auto_wifi_title_add_device1); // } } private void showConfirmDialog() { new AlertDialog.Builder(this).setMessage(R.string.auto_wifi_dialog_connecting_msg) .setPositiveButton(R.string.update_exit, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); finish(); } }) .setNegativeButton(R.string.wait, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }) .create() .show(); } private void changeStatuss(int Status) { tvStatus.setVisibility(View.GONE); tvStatus.setText(""); if (Status==STATUS_WIFI_CONNETCTING) { imgAnimation.setVisibility(View.VISIBLE); tvStatus.setText(R.string.auto_wifi_connecting_msg1); imgAnimation.setImageResource(R.drawable.connect_wifi_bg); animWaiting = (AnimationDrawable) imgAnimation.getDrawable(); animWaiting.start(); btnRetry.setVisibility(View.GONE); btnLineConnect.setVisibility(View.GONE); showStatus(STATUS_WIFI_CONNETCTING); recordConfigStartTime = System.currentTimeMillis(); t1 = System.currentTimeMillis(); t2 = 0; t3 = 0; t4 = 0; t5 = 0; searchErrorCode = 0; addCameraError = -1; start(); }else if (Status==STATUS_REGISTING) { LogUtil.i(TAG, "change status to REGISTING"); // tvStatus.setText(R.string.auto_wifi_connecting_msg2); // if (isFromDeviceSetting) { // tvStatus.setText(R.string.device_wifi_connecting); // imgAnimation.setImageResource(R.drawable.divce_config_wifi_wait); // } else { // } // 检测 cancelOvertimeTimer(); LogUtil.i(TAG, "in STATUS_REGISTING: startOvertimeTimer"); startOvertimeTimer((MAX_TIME_STEP_TWO_REGIST - 5) * 1000, new Runnable() { public void run() { getOpenSDK().stopConfigWiFi(); final Runnable success = new Runnable() { public void run() { if (isPlatConnected) { return; } // save wifipassword if (!isLineConnecting && !TextUtils.isEmpty(mac) && !"NULL".equals(mac)) { // LocalInfo.getInstance().setWifiPassword(mac, wifiPassword); } isPlatConnected = true; t4 = System.currentTimeMillis(); changeStatuss(STATUS_ADDING_CAMERA); LogUtil.d(TAG, "STATUS_REGISTING Timeout from the server to obtain the device information is successful"); } }; final Runnable fail = new Runnable() { public void run() { t4 = System.currentTimeMillis(); LogUtil.d(TAG, "Timeout from the server to get device information failed"); stopWifiConfigOnThread(); addCameraFailed(ERROR_REGIST, searchErrorCode); } }; Thread thr = new Thread(new Runnable() { @Override public void run() { LogUtil.i(TAG, "in change status STATUS_REGISTING, begin probeDeviceInfo"); int result = probeDeviceInfo(serialNo); LogUtil.i(TAG, "in change status STATUS_REGISTING, got probeDeviceInfo"); if (result == 0 && mEZProbeDeviceInfo != null) { LogUtil.i(TAG, "in change status STATUS_REGISTING, probeDeviceInfo success, " + mEZProbeDeviceInfo); runOnUiThread(success); } else if (result == ErrorCode.ERROR_WEB_DEVICE_ONLINE_NOT_ADD) { LogUtil.i(TAG, "in change status STATUS_REGISTING, " + " probeDeviceInfo error:ERROR_WEB_DIVICE_ONLINE_NOT_ADD"); runOnUiThread(success); } else { LogUtil.i(TAG, "in change status STATUS_REGISTING, probeDeviceInfo camera not online"); runOnUiThread(fail); } } }); thr.start(); } }); imgAnimation.setImageResource(R.drawable.register_server_bg); animWaiting = (AnimationDrawable) imgAnimation.getDrawable(); animWaiting.start(); btnRetry.setVisibility(View.GONE); btnLineConnect.setVisibility(View.GONE); showStatus(STATUS_REGISTING); }else if (Status==STATUS_ADDING_CAMERA) { addCameraError = -1; tvStatus.setVisibility(View.GONE); tvStatus.setText(""); // tvStatus.setText(R.string.auto_wifi_connecting_msg3); // if (isFromDeviceSetting) { // tvStatus.setText(R.string.device_wifi_connecting); // imgAnimation.setImageResource(R.drawable.divce_config_wifi_wait); // } else { // } imgAnimation.setImageResource(R.drawable.auto_wifi_link_account_bg); animWaiting = (AnimationDrawable) imgAnimation.getDrawable(); animWaiting.start(); btnRetry.setVisibility(View.GONE); btnLineConnect.setVisibility(View.GONE); // save wifipassword if (!isLineConnecting && !TextUtils.isEmpty(mac) && !"NULL".equals(mac)) { // LocalInfo.getInstance().setWifiPassword(mac, wifiPassword); } LogUtil.d(TAG, "The server gets the device information successfully"); t4 = System.currentTimeMillis(); // From the device to switch the wifi interface to the processing addQueryCamera(); showStatus(STATUS_ADDING_CAMERA); }else if (Status==STATUS_ADD_CAMERA_SUCCESS) { t5 = System.currentTimeMillis(); // From the device to switch the wifi interface to the processing recordConfigTimeAndError(); btnFinish.setVisibility(View.VISIBLE); boolean bX1orX2 = false;//mDeviceInfoEx.getEnumModel() == DeviceModel.X1 || mDeviceInfoEx.getEnumModel() == DeviceModel.X2; if (bX1orX2) { imgAnimation.setImageResource(R.drawable.success_img); } else { imgAnimation.setImageResource(R.drawable.success); } // DeviceModel.A1 // 是否支持营销wifi,只有support_wifi_2.4G=1的时候才生效:1-支持,0-不支持 // tvStatus.setVisibility(View.VISIBLE); // if (mDeviceInfoEx.getSupportWifiPortal() != DeviceConsts.NOT_SUPPORT) { // // tvStatus.setText(R.string.add_camera_success_tip); // } showStatus(STATUS_ADD_CAMERA_SUCCESS); }else{ } } private void recordConfigTimeAndError() { // 非有线连接,不是来自添加页面,不是来自设置界面,不是解绑错误 if (!isLineConnecting && fromPage != FROM_PAGE_SERIES_NUM_SEARCH_ACTIVITY && !isUnbindDeviceError) { } } private void startOvertimeTimer(long time, final Runnable run) { LogUtil.i(TAG, "Enter startOvertimeTimer: " + run); if (overTimeTimer != null) { LogUtil.i(TAG, " overTimeTimer.cancel: " + overTimeTimer); overTimeTimer.cancel(); overTimeTimer = null; } overTimeTimer = new Timer(); overTimeTimer.schedule(new TimerTask() { @Override public void run() { LogUtil.d(TAG, "startOvertimeTimer"); runOnUiThread(run); DeviceOnlineStatusMonitor.stop(); } }, time); LogUtil.i(TAG, " startOvertimeTimer: timer:" + overTimeTimer + " runnable:" + run); } private void cancelOvertimeTimer() { LogUtil.i(TAG, "Enter cancelOvertimeTimer: "); if (overTimeTimer != null) { LogUtil.i(TAG, " cancelOvertimeTimer: " + overTimeTimer); overTimeTimer.cancel(); } } private int addCameraError = -1; private void addCameraFailed(int errorStep, int errorCode) { this.errorStep = errorStep; addCameraError = errorCode; tvStatus.setVisibility(View.VISIBLE); // Failed to clear the read seconds instant if (timerHandler != null) { timerHandler.removeMessages(0); } if (errorStep == ERROR_WIFI_CONNECT) { showStatus(ERROR_WIFI_CONNECT); btnRetry.setVisibility(View.VISIBLE); // Failed to clear the read seconds instant if (isSupportNetWork) { btnLineConnect.setVisibility(View.VISIBLE); } // Source device switch wifi btnLineConnect.setText(R.string.ez_auto_wifi_line_connect); imgAnimation.setImageResource(R.drawable.failure_wifi); tvStatus.setText(R.string.ez_auto_wifi_connecting_failed); helpTop.setVisibility(View.VISIBLE); help.setVisibility(View.VISIBLE); // stopBonjourOnThread(); recordConfigTimeAndError(); } else if (errorStep == ERROR_REGIST) { showStatus(ERROR_REGIST); // stopBonjourOnThread(); btnRetry.setVisibility(View.VISIBLE); btnLineConnect.setVisibility(View.GONE); imgAnimation.setImageResource(R.drawable.failure_server); tvStatus.setText(R.string.auto_wifi_register_failed); recordConfigTimeAndError(); } else if (errorStep == ERROR_ADD_CAMERA) { showStatus(ERROR_ADD_CAMERA); btnRetry.setVisibility(View.VISIBLE); btnLineConnect.setVisibility(View.GONE); imgAnimation.setImageResource(R.drawable.failure_account); if (errorCode == ErrorCode.ERROR_WEB_DEVICE_EXCEPTION) { // Device exception tvStatus.setText( getString(R.string.auto_wifi_add_device_failed) + "(" + getString(R.string.device_error) + ")"); } else if (errorCode == ErrorCode.ERROR_WEB_DEVICE_ADD_OWN_AGAIN) { // The device has been added by itself // showToast(R.string.query_camera_fail_repeat_error); tvStatus.setText(getString(R.string.auto_wifi_add_device_failed2) + "(" + getString( R.string.auto_wifi_device_you_added_already) + ")"); btnRetry.setVisibility(View.GONE); btnFinish.setVisibility(View.VISIBLE); } else if (errorCode == ErrorCode.ERROR_WEB_DEVICE_ADDED) { // TODO // The device has been added tvStatus.setText(getString(R.string.auto_wifi_add_device_failed2) + "(" + getString( R.string.auto_wifi_device_added_already) + ")"); btnRetry.setVisibility(View.GONE); btnFinish.setVisibility(View.VISIBLE); // } else if (errorCode == ErrorCode.ERROR_WEB_NET_EXCEPTION) { // // network anomaly // tvStatus.setText(getString(R.string.auto_wifi_add_device_failed2) + "(" // + getString(R.string.network_exception) + ")"); } else if (errorCode == ErrorCode.ERROR_WEB_DEVICE_NOT_ONLINE) { // The device is not online tvStatus.setText(R.string.add_device_failed_not_online); } else if (errorCode == ErrorCode.ERROR_WEB_DEVICE_VERIFY_CODE_ERROR) { // Verification code error tvStatus.setText(getString(R.string.auto_wifi_add_device_failed2) + "(" + getString(R.string.verify_code_error) + ")"); } else if (errorCode == ErrorCode.ERROR_WEB_DEVICE_NOT_EXIT) { // The device does not exist tvStatus.setText(R.string.auto_wifi_device_not_exist); } else if (errorCode == ErrorCode.ERROR_WEB_DEVICE_ADDED_BT_OTHER) { // The device has been added by others tvStatus.setText(R.string.auto_wifi_device_added_by_others); btnRetry.setVisibility(View.GONE); btnFinish.setVisibility(View.VISIBLE); } else if (errorCode == ErrorCode.ERROR_WEB_DEVICE_OFFLINE_NOT_ADD) { // The device is not online and is not added tvStatus.setText(R.string.ez_add_device_failed_not_online); } else if (errorCode > 0) { tvStatus.setText(getErrorTip(R.string.auto_wifi_add_device_failed, errorCode)); } else { tvStatus.setText(R.string.auto_wifi_add_device_failed); } recordConfigTimeAndError(); } else { } } public void addQueryCamera() { // 从设备切换wifi界面来的处理 // if (mSearchDevice == null || mSearchDevice.getAvailableChannelCount() <= 0) { // // 将摄像头添加到用户下面 // // showToast("该设备已经被添加"); // LogUtil.d(TAG, "该设备已被添加"); //// addCameraFailed(ERROR_ADD_CAMERA, ErrorCode.ERROR_WEB_SET_EMAIL_REPEAT_ERROR); // return; // } LogUtil.d(TAG, "Add a camera: mVerifyCode = " + mVerifyCode); //mj //boolean stub = mSearchDevice.getReleaseVersion() != null && !mSearchDevice.getReleaseVersion().contains("DEFAULT"); boolean stub = false; if (stub) { if (!TextUtils.isEmpty(mVerifyCode)) { // First click if you already have a verification code, then add it directly addQueryCameraAddVerifyCode(); } else { LogUtil.d(TAG, "Add a camera: showInputCameraVerifyCodeDlg mVerifyCode = " + mVerifyCode); showInputCameraVerifyCodeDlg(); } } else { if (!(TextUtils.isEmpty(mVerifyCode))) { addQueryCameraAddVerifyCode(); } else { showInputCameraPswDlg(); } } } private void addQueryCameraAddVerifyCode() { // Local network detection if (!ConnectionDetector.isNetworkAvailable(this)) { showToast(R.string.add_camera_fail_network_exception); return; } new Thread() { public void run() { int count = ADD_CAMERA_TIMES; while (count > 0) { // Increase the mobile client operation information record boolean isSuccessfulToAdd = false; try { getOpenSDK().addDevice(serialNo, mVerifyCode); isSuccessfulToAdd = true; } catch (BaseException e) { ErrorInfo errorInfo = e.getErrorInfo(); // 设备在线,已被自己添加 if (errorInfo.errorCode == 120017){ isSuccessfulToAdd = true; }else{ count--; if (count <= 0) { sendMessage(MSG_ADD_CAMERA_FAIL, errorInfo.errorCode); } } } if (isSuccessfulToAdd){ sendMessage(MSG_ADD_CAMERA_SUCCESS); count = -1; }else{ showToast("failed to add device!"); } } } }.start(); } private class MessageHandler extends Handler { @Override public void handleMessage(Message msg) { if (msg.what==MSG_ADD_CAMERA_SUCCESS) { handleAddCameraSuccess(); }else if (msg.what==MSG_ADD_CAMERA_FAIL) { handleAddCameraFail(msg.arg1); }else if (msg.what==MSG_OPEN_CLOUD_STORYED_SUCCESS) { openCloudSuccess(); }else if (msg.what==MSG_OPEN_CLOUD_STORYED_FAIL) { openCloudFailed(msg.arg1); }else{ } } } private void handleAddCameraFail(int errCode) { if (errCode==120010) { LogUtil.d(TAG, "Add camera failure verification code error = " + errCode); mVerifyCode = ""; }else{ } addCameraFailed(ERROR_ADD_CAMERA, errCode); } public void openCloudFailed(int arg1) { // mWaitDlg.dismiss(); dismissWaitDialog(); LogUtil.e(TAG, "Add cloud storage failed, error code:" + arg1); new AlertDialog.Builder(this).setTitle(R.string.enable_cloud_fause) .setMessage(R.string.enable_cloud_fause_retry) .setNegativeButton(R.string.retry, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int arg1) { dialog.dismiss(); enableCloudStoryed(); // mWaitDlg.show(); showWaitDialog(R.string.start_cloud); } }) .setPositiveButton(R.string.not_now, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); closeActivity(); } }) .setCancelable(false) .create() .show(); } public void openCloudSuccess() { mDeviceInfoEx.setCloudServiceStatus(1); // mWaitDlg.dismiss(); dismissWaitDialog(); // showToast(id); closeActivity(); } public void handleAddCameraSuccess() { changeStatuss(STATUS_ADD_CAMERA_SUCCESS); } private void sendMessage(int msgCode) { if (mMsgHandler != null) { Message msg = Message.obtain(); msg.what = msgCode; mMsgHandler.sendMessage(msg); } else { LogUtil.e(TAG, "sendMessage-> mMsgHandler object is null"); } } private void sendMessage(int msgCode, int errorCode) { if (mMsgHandler != null) { Message msg = Message.obtain(); msg.what = msgCode; msg.arg1 = errorCode; mMsgHandler.sendMessage(msg); } else { LogUtil.e(TAG, "sendMessage-> mMsgHandler object is null"); } } ; private void showInputCameraVerifyCodeDlg() { mVerifyCode = null; LayoutInflater factory = LayoutInflater.from(this); final View passwordErrorLayout = factory.inflate(R.layout.verifycode_layout, null); final EditText newPassword = (EditText) passwordErrorLayout.findViewById(R.id.new_password); newPassword.setTransformationMethod(PasswordTransformationMethod.getInstance()); newPassword.setFocusable(true); final TextView message1 = (TextView) passwordErrorLayout.findViewById(R.id.message1); // StringBuffer sb = new StringBuffer(); // sb.append("").append(getString(R.string.realplay_verifycode_error_message0)) // .append("").append("").append(mSearchDevice.getSubSerial()).append("") // .append("").append(getString(R.string.realplay_verifycode_error_message1)) // .append("").append("") // .append(getString(R.string.realplay_verifycode_error_message2)+getString(R.string.realplay_verifycode_error_message3)).append(""); message1.setText(R.string.realplay_verifycode_error_message0); // 使用布局中的视图创建AlertDialog AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle(R.string.camera_detail_verifycode_error_title); builder.setView(passwordErrorLayout); builder.setPositiveButton(R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { finish(); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(newPassword.getWindowToken(), 0); } }); builder.setNegativeButton(R.string.confirm, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { mVerifyCode = newPassword.getText().toString(); if (verifyLegality(mVerifyCode)) { addQueryCameraAddVerifyCode(); } else { mVerifyCode = null; } } }); if (!isFinishing()) { Dialog dialog = builder.create(); dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); dialog.show(); } } private boolean verifyLegality(String verifyCodeString) { if (verifyCodeString.equalsIgnoreCase("")) { showInputCameraVerifyCodeDlg(); return false; } return true; } private void showInputCameraPswDlg() { LayoutInflater factory = LayoutInflater.from(this); final View passwordErrorLayout = factory.inflate(R.layout.password_error_layout, null); final EditText newPassword = (EditText) passwordErrorLayout.findViewById(R.id.new_password); newPassword.setFilters(new InputFilter[] { new InputFilter.LengthFilter(Constant.PSW_MAX_LENGTH) }); final TextView message1 = (TextView) passwordErrorLayout.findViewById(R.id.message1); message1.setText(getString(R.string.realplay_password_error_message1)); mVerifyCode = null; // TextView titleView = new TextView(this); // titleView.setTextSize(R.dimen.button_text_size); // titleView.setText(getString(R.string.serial_add_password_error_title)); AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle(R.string.serial_add_password_error_title); builder.setView(passwordErrorLayout); builder.setPositiveButton(R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { finish(); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(newPassword.getWindowToken(), 0); } }); builder.setNegativeButton(R.string.confirm, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // 确定修改名称 String password = newPassword.getText().toString(); if (pswLegality(password)) { mVerifyCode = newPassword.getText().toString(); addQueryCameraAddVerifyCode(); } } }); if (!isFinishing()) { Dialog dialog = builder.create(); dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); dialog.show(); } } private boolean pswLegality(String pswString) { if (pswString.equalsIgnoreCase("")) { showInputCameraPswDlg(); return false; } return true; } private void closeActivity() { // start the EZCameraList here Intent intent = new Intent(this, EZCameraListActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); finish(); } @Override public void onBackPressed() { if (tvDeviceWifiConfigTip.getVisibility() == View.VISIBLE) { /*mj CustomApplication obg = (CustomApplication) getApplication(); HashMap activitis = obg.getSingleActivities(); if (activitis.get(AutoWifiNetConfigActivity.class.getName()) != null) { activitis.get(AutoWifiNetConfigActivity.class.getName()).finish(); } if (activitis.get(ResetIntroduceActivity.class.getName()) != null) { activitis.get(ResetIntroduceActivity.class.getName()).finish(); } finish();*/ // Has been completed } else if (btnFinish.getVisibility() == View.VISIBLE) { closeActivity(); // Wired connection interface } else if (btnCancel.getVisibility() == View.VISIBLE) { cancelOnClick(); // If you are configuring (including wired and wireless) } else if (connectStateContainer.getVisibility() == View.VISIBLE) { showConfirmDialog(); } else { finish(); } } @Override protected void onDestroy() { super.onDestroy(); if (timerHandler != null) { timerHandler.removeMessages(0); } cancelOvertimeTimer(); stopWifiConfigOnThread(); } private static class DeviceOnlineStatusMonitor{ private static EZOpenSDKListener.EZStartConfigWifiCallback mCallback = null; private static String mDeviceSerial = null; private static boolean isMonitoring = false; private static Thread mCurrentThread = null; static void start(final String deviceSerial, EZOpenSDKListener.EZStartConfigWifiCallback callback){ if (isMonitoring){ return; } LogUtil.d(TAG, "start to monitor device status"); isMonitoring = true; mCallback = callback; mDeviceSerial = deviceSerial; mCurrentThread = new Thread(new Runnable() { @Override public void run() { while (isMonitoring){ boolean isOnline =false; EZProbeDeviceInfoResult result = getOpenSDK().probeDeviceInfo(mDeviceSerial,null); // online && not added by anyone if (result.getBaseException() == null){ isOnline = true; // online && added by current account }else if(result.getBaseException().getErrorCode() == 120020){ isOnline = true; } LogUtil.d(TAG, "device is online? " + isOnline); if (isOnline){ mCallback.onStartConfigWifiCallback(deviceSerial, EZConstants.EZWifiConfigStatus.DEVICE_PLATFORM_REGISTED); stop(); }else{ try { Thread.sleep(10 * 1000); } catch (InterruptedException e) { e.printStackTrace(); } } } LogUtil.d(TAG, "finish to monitor device status"); } }); mCurrentThread.start(); } static void stop(){ if (!isMonitoring){ return; } LogUtil.d(TAG, "stop to monitor device status"); if (mCurrentThread != null){ mCurrentThread.interrupt(); mCurrentThread = null; } isMonitoring = false; mDeviceSerial = null; mCallback = null; } } }