package com.pandocloud.freeiot.ui.device; import org.apache.http.Header; import android.content.Intent; import android.os.Bundle; import android.support.v4.content.LocalBroadcastManager; import android.text.TextUtils; import android.view.View; import android.view.View.OnClickListener; import android.widget.EditText; import android.widget.RadioButton; import com.pandocloud.android.api.AbsOpenApi; import com.pandocloud.freeiot.R; import com.pandocloud.freeiot.api.DevicesApi; import com.pandocloud.freeiot.api.WrapperBaseJsonHttpResponseHandler; import com.pandocloud.freeiot.ui.app.ActionConstants; import com.pandocloud.freeiot.ui.app.UserState; import com.pandocloud.freeiot.ui.base.BaseActivity; import com.pandocloud.freeiot.ui.bean.Device; import com.pandocloud.freeiot.ui.bean.DeviceInfo; import com.pandocloud.freeiot.ui.bean.http.BaseResponse; import com.pandocloud.freeiot.ui.bean.http.DeviceInfoResponse; import com.pandocloud.freeiot.ui.db.DBManager; import com.pandocloud.freeiot.utils.ActivityUtils; import com.pandocloud.freeiot.utils.CommonUtils; import com.pandocloud.freeiot.utils.GsonUtils; public class DeviceInfoModifyActivity extends BaseActivity implements OnClickListener { private EditText etDeviceName; private RadioButton secureBtn1, secureBtn2; private static final int DEVICE_BINDING_EVERYTHING = 1; private static final int DEVICE_BINDING_ONLY_UNBINDING = 2; private Device device; @Override protected void onCreate(Bundle arg0) { super.onCreate(arg0); setContentView(R.layout.activity_device_info_modify); device = (Device) getIntent().getSerializableExtra("device"); etDeviceName = (EditText) findViewById(R.id.et_name); secureBtn1 = (RadioButton) findViewById(R.id.radioBtn1); secureBtn2 = (RadioButton) findViewById(R.id.radioBtn2); etDeviceName.setText(device.name); findViewById(R.id.back).setOnClickListener(this); findViewById(R.id.btn_ok).setOnClickListener(this); if (device != null && device.isOwner()) { loadDeivceInfo(); } else { findViewById(R.id.permission_tip).setVisibility(View.GONE); findViewById(R.id.permission_layout).setVisibility(View.GONE); } } @Override public void onClick(View v) { switch (v.getId()) { case R.id.back: ActivityUtils.animFinish(DeviceInfoModifyActivity.this, R.anim.slide_in_from_left, R.anim.slide_out_to_right); break; case R.id.btn_ok: modifyDeviceInfo(); break; default: break; } } public void loadDeivceInfo() { DevicesApi.deviceInfo(this, UserState.getInstances(this).getAccessToken(""), device.identifier, new WrapperBaseJsonHttpResponseHandler<DeviceInfoResponse>(this) { @Override protected DeviceInfoResponse parseResponse2( String rawJsonData, boolean isFailure) throws Throwable { if (isFailure || TextUtils.isEmpty(rawJsonData)) { return null; } return GsonUtils.getInstance().getGson().fromJson(rawJsonData, DeviceInfoResponse.class); } @Override public void onSuccess(int statusCode, Header[] headers, String rawJsonData, DeviceInfoResponse response) { if (response.isSuccess()) { DeviceInfo deviceInfo = response.data; if (deviceInfo.secure_level == DEVICE_BINDING_EVERYTHING) { secureBtn1.setChecked(true); } else if (deviceInfo.secure_level == DEVICE_BINDING_ONLY_UNBINDING) { secureBtn2.setChecked(true); } etDeviceName.setText(deviceInfo.name); } else { super.onSuccess(statusCode, headers, rawJsonData, response); } } @Override public void onFinish() { super.onFinish(); } }); } public void modifyDeviceInfo() { String deviceName = etDeviceName.getText().toString().trim(); if (TextUtils.isEmpty(deviceName)) { CommonUtils.ToastMsg(this, R.string.error_deivce_name_empty); return; } if (!device.isOwner()) { boolean hasInfo = getIntent().getBooleanExtra("hasInfo", false); if (hasInfo) { DBManager.getInstances(this).updateDevieInfo(device.identifier, deviceName); } else { DBManager.getInstances(this).insertDeviceInfo(device.identifier, deviceName); } updateSuccess(); return; } int secureLevel = secureBtn1.isChecked() ? DEVICE_BINDING_EVERYTHING : DEVICE_BINDING_ONLY_UNBINDING; DevicesApi.deviceInfoModify(this, UserState.getInstances(this).getAccessToken(""), device.identifier, deviceName, secureLevel, new WrapperBaseJsonHttpResponseHandler<BaseResponse>(this) { @Override public void onStart() { CommonUtils.showProgressDialog(DeviceInfoModifyActivity.this, "", getString(R.string.device_info_uploading)); } @Override protected BaseResponse parseResponse2(String rawJsonData, boolean isFailure) throws Throwable { if (isFailure || TextUtils.isEmpty(rawJsonData)) { return null; } return GsonUtils.getInstance().getGson().fromJson(rawJsonData, BaseResponse.class); } @Override public void onSuccess(int statusCode, Header[] headers, String rawJsonData, BaseResponse response) { if (response.isSuccess()) { updateSuccess(); } else { super.onSuccess(statusCode, headers, rawJsonData, response); } } @Override public void onFinish() { CommonUtils.dismissDialog(); } }); } public void updateSuccess() { CommonUtils.ToastMsg(DeviceInfoModifyActivity.this, R.string.device_info_modify_success); LocalBroadcastManager.getInstance(DeviceInfoModifyActivity.this).sendBroadcast(new Intent(ActionConstants.ACTON_REFRESH_DEVICES)); ActivityUtils.animFinish(DeviceInfoModifyActivity.this, R.anim.slide_in_from_left, R.anim.slide_out_to_right); } @Override protected void onDestroy() { super.onDestroy(); AbsOpenApi.cancel(DeviceInfoModifyActivity.this, true); } }