package com.pandocloud.freeiot.ui.device;
import java.io.File;
import org.apache.http.Header;
import org.json.JSONException;
import org.json.JSONObject;
import org.xwalk.core.XWalkView;
import org.xwalk.core.internal.XWalkSettings;
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.os.Environment;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ProgressBar;
import android.widget.TextView;
import com.pandocloud.android.api.AbsOpenApi;
import com.pandocloud.freeiot.R;
import com.pandocloud.freeiot.api.DevicesApi;
import com.pandocloud.freeiot.api.WrapperJsonHttpResponseHandler;
import com.pandocloud.freeiot.jsbridge.BridgeHandler;
import com.pandocloud.freeiot.jsbridge.BridgeUtil;
import com.pandocloud.freeiot.jsbridge.BridgeHelper;
import com.pandocloud.freeiot.jsbridge.CallBackFunction;
import com.pandocloud.freeiot.jsbridge.DefaultHandler;
import com.pandocloud.freeiot.ui.app.UserState;
import com.pandocloud.freeiot.ui.base.BaseActivity;
import com.pandocloud.freeiot.ui.bean.http.BaseResponse;
import com.pandocloud.freeiot.utils.ActivityUtils;
import com.pandocloud.freeiot.utils.AnalyticsUtils;
import com.pandocloud.freeiot.utils.LogUtils;
import com.umeng.analytics.MobclickAgent;
public class DeviceControlActivity extends BaseActivity implements OnClickListener, OnRefreshListener {
private String mIdentifier;
private String mTitleName;
private BridgeHelper bridgeHelper;
public XWalkView mWebView;
private String mUrl;
private SwipeRefreshLayout mSwipeRefreshLayout;
private ProgressBar mProgressBar;
// private String operateUrl = UrlConfigManager.getOutletControlUrl();
@Override
protected void onCreate(Bundle savedInstances) {
super.onCreate(savedInstances);
setContentView(R.layout.activity_outlet_control);
Bundle bundle = getIntent().getExtras();
if (bundle != null) {
mIdentifier = bundle.getString("identifier");
// operateUrl = String.format(operateUrl, mIdentifier);
mUrl = bundle.getString("app");
if (BridgeUtil.hasAssetFile(this, "index.html")) {
mUrl = "file:///android_asset/index.html";
}
LogUtils.e("url=> " + mUrl);
// mUrl = "file:///android_asset/index.html";
// mUrl = "file:///android_asset/failed/404.html";
mTitleName = bundle.getString("name");
((TextView)findViewById(R.id.title)).setText(mTitleName);
}
mSwipeRefreshLayout = (SwipeRefreshLayout)findViewById(R.id.swipe_container);
mSwipeRefreshLayout.setColorScheme(R.color.main_red_color);
mSwipeRefreshLayout.setOnRefreshListener(this);
mProgressBar = (ProgressBar)findViewById(R.id.progressbar);
mWebView = (XWalkView) findViewById(R.id.webview);
findViewById(R.id.back).setOnClickListener(this);
bridgeHelper = new BridgeHelper(this, mWebView);
initVebView();
}
@SuppressLint({ "JavascriptInterface", "SetJavaScriptEnabled", "NewApi" })
public void initVebView() {
mWebView.clearCache(false);
XWalkSettings settings = mWebView.getSettings();
// settings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
if (settings != null) {
settings.setJavaScriptEnabled(true);
// settings.setBuiltInZoomControls(false);
// settings.setSupportZoom(false);
settings.setUseWideViewPort(true);
// settings.setRenderPriority(RenderPriority.HIGH);
settings.setJavaScriptCanOpenWindowsAutomatically(true);
// settings.setLoadWithOverviewMode(true);
settings.setAppCacheEnabled(true);
File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + ".pando");
if (!file.exists()) {
file.mkdirs();
}
settings.setAppCachePath(file.getAbsolutePath());
}
bridgeHelper.setLoadingListener(webviewLoadingListener);
registerHandlers();
//"file:///android_asset/pdjs.js"
bridgeHelper.initContext(null, new DefaultHandler());
mWebView.load(mUrl, null);
}
BridgeHelper.onLoadingListener webviewLoadingListener = new BridgeHelper.onLoadingListener(){
@Override
public void onPageStart() {
mSwipeRefreshLayout.setRefreshing(true);
}
@Override
public void onPageFinished() {
mSwipeRefreshLayout.setRefreshing(false);
}
};
@Override
public void onRefresh() {
LogUtils.d("mUrl: " + mUrl);
mWebView.load(mUrl, null);
}
@Override
protected void onResume() {
super.onResume();
MobclickAgent.onPageStart(AnalyticsUtils.AnalyticsViewKeys.VIEW_DEVICE_CONTROL_ACTIVITY);
MobclickAgent.onResume(this);
if (mWebView != null) {
mWebView.resumeTimers();
mWebView.onShow();
}
}
@Override
protected void onPause() {
super.onPause();
MobclickAgent.onPageEnd(AnalyticsUtils.AnalyticsViewKeys.VIEW_DEVICE_CONTROL_ACTIVITY);
MobclickAgent.onPause(this);
if (mWebView != null) {
mWebView.pauseTimers();
mWebView.onHide();
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.back:
ActivityUtils.animFinish(DeviceControlActivity.this, R.anim.slide_in_from_left, R.anim.slide_out_to_right);
break;
default:
break;
}
}
public void registerHandlers() {
bridgeHelper.registerHandler("sendCommand", new BridgeHandler() {
@Override
public void handler(String data, final CallBackFunction function) {
LogUtils.e("sendCommandHandler=>" + data);
DevicesApi.sendCommands(DeviceControlActivity.this,
UserState.getInstances(DeviceControlActivity.this).getAccessToken(""),
mIdentifier, data,
new WrapperJsonHttpResponseHandler(DeviceControlActivity.this) {
@Override
public void onStart() {
mProgressBar.setVisibility(View.VISIBLE);
}
@Override
public void onSuccess(int statusCode,
Header[] headers, JSONObject response) {
if (response.has("code")) {
try {
int code = response.getInt("code");
if (code != BaseResponse.CODE_SUCCESS) {
super.onSuccess(statusCode, headers, response);
} else {
function.onCallBack(response);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
@Override
public void onFinish() {
mProgressBar.setVisibility(View.GONE);
}
});
}
});
bridgeHelper.registerHandler("currentStatus", new BridgeHandler() {
@Override
public void handler(String data, final CallBackFunction function) {
DevicesApi.getDeviceCurrentState(DeviceControlActivity.this,
UserState.getInstances(DeviceControlActivity.this).getAccessToken(""),
mIdentifier, new WrapperJsonHttpResponseHandler(DeviceControlActivity.this) {
@Override
public void onStart() {
mProgressBar.setVisibility(View.VISIBLE);
}
@Override
public void onFailure(int statusCode, Header[] headers,
Throwable throwable, JSONObject errorResponse) {
super.onFailure(statusCode, headers, throwable, errorResponse);
}
@Override
public void onSuccess(int statusCode, Header[] headers,
JSONObject response) {
LogUtils.e(response.toString());
if (response.has("code")) {
try {
int code = response.getInt("code");
if (code != BaseResponse.CODE_SUCCESS) {
super.onSuccess(statusCode, headers, response);
} else {
function.onCallBack(response);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
@Override
public void onFinish() {
mProgressBar.setVisibility(View.GONE);
}
});
}
});
bridgeHelper.registerHandler("getCurrentStatus", new BridgeHandler() {
@Override
public void handler(String data, final CallBackFunction function) {
DevicesApi.getDeviceCurrentState(DeviceControlActivity.this,
UserState.getInstances(DeviceControlActivity.this).getAccessToken(""),
mIdentifier, new WrapperJsonHttpResponseHandler(DeviceControlActivity.this) {
@Override
public void onStart() {
mProgressBar.setVisibility(View.VISIBLE);
}
@Override
public void onFailure(int statusCode, Header[] headers,
Throwable throwable, JSONObject errorResponse) {
super.onFailure(statusCode, headers, throwable, errorResponse);
}
@Override
public void onSuccess(int statusCode, Header[] headers,
JSONObject response) {
LogUtils.e(response.toString());
if (response.has("code")) {
try {
int code = response.getInt("code");
if (code != BaseResponse.CODE_SUCCESS) {
super.onSuccess(statusCode, headers, response);
} else {
function.onCallBack(response);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
@Override
public void onFinish() {
mProgressBar.setVisibility(View.GONE);
}
});
}
});
bridgeHelper.registerHandler("setCurrentStatus", new BridgeHandler() {
@Override
public void handler(String data, final CallBackFunction function) {
DevicesApi.setDeviceCurrentState(DeviceControlActivity.this,
UserState.getInstances(DeviceControlActivity.this).getAccessToken(""),
mIdentifier,data, new WrapperJsonHttpResponseHandler(DeviceControlActivity.this){
@Override
public void onStart() {
mProgressBar.setVisibility(View.VISIBLE);
}
@Override
public void onFailure(int statusCode, Header[] headers,
Throwable throwable, JSONObject errorResponse) {
super.onFailure(statusCode, headers, throwable, errorResponse);
}
@Override
public void onSuccess(int statusCode, Header[] headers,
JSONObject response) {
LogUtils.e(response.toString());
if (response.has("code")) {
try {
int code = response.getInt("code");
if (code != BaseResponse.CODE_SUCCESS) {
super.onSuccess(statusCode, headers, response);
} else {
function.onCallBack(response);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
@Override
public void onFinish() {
mProgressBar.setVisibility(View.GONE);
}
});
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mWebView != null) {
mWebView.onDestroy();
}
AbsOpenApi.cancel(this, true);
}
}