package com.videogo; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.database.DataSetObserver; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v4.content.ContextCompat; import android.text.TextUtils; import android.util.Log; import android.util.TypedValue; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.EditText; import android.widget.Spinner; import android.widget.SpinnerAdapter; import android.widget.TextView; import com.alibaba.android.arouter.launcher.ARouter; import com.ezviz.demo.common.HdlHttp; import com.google.gson.Gson; import com.videogo.constant.Config; import com.videogo.exception.BaseException; import com.videogo.openapi.EZOpenSDK; import com.videogo.openapi.EzvizAPI; import com.videogo.ui.cameralist.EZCameraListActivity; import com.videogo.util.LogUtil; import java.util.List; import ezviz.ezopensdk.demo.SdkInitParams; import ezviz.ezopensdk.demo.SdkInitTool; import ezviz.ezopensdk.demo.ServerAreasEnum; import ezviz.ezopensdk.demo.SpTool; import ezviz.ezopensdk.demo.ValueKeys; import ezviz.ezopensdk.R; import ezviz.ezopensdkcommon.common.BaseApplication; import ezviz.ezopensdkcommon.common.RootActivity; import static com.videogo.EzvizApplication.getOpenSDK; import static com.videogo.constant.Constant.OAUTH_SUCCESS_ACTION; public class MainActivity extends RootActivity { private final static String TAG = MainActivity.class.getSimpleName(); private ServerAreasEnum mCurrentServerArea = ServerAreasEnum.ASIA_CHINA; private EditText mAppKeyET = null; private EditText mAccessTokenET = null; public static SdkInitParams mInitParams; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main_ez); Bundle bundle=this.getIntent().getExtras(); if(bundle!=null){ token = bundle.getString("Token"); HdlHttp.HdlToken=bundle.getString("HdlToken"); HdlHttp.RequestHttpsHost=bundle.getString("Url"); } init(); customInitData(); } void init() { BaseApplication.mInstance = getApplication(); // 初始化ARouter ARouter.openDebug(); ARouter.openLog(); ARouter.init(getApplication()); } public String token="ra.aamy8d1gabcnrz0jbbj4gjkpcpy55g0s-8z529x82uz-0jzly2o-g30muwagq"; /*Mae自定义的初始化方法*/ private void customInitData() { SpTool.init(getApplicationContext()); if (!loadLastSdkInitParams()) { mInitParams = SdkInitParams.createBy(mCurrentServerArea); } mInitParams.accessToken = ""; SdkInitTool.initSdk(getApplication(), mInitParams); if (EzvizAPI.getInstance().isLogin()) { jumpToCameraListActivity(); finish(); } else { mSdkInitParams = SdkInitParams.createBy(mCurrentServerArea); mSdkInitParams.accessToken =token; SdkInitTool.initSdk(getApplication(), mSdkInitParams); registerLoginResultReceiver(); getOpenSDK().openLoginPage(); } } private boolean loadLastSdkInitParams() { String sdkInitParamStr = SpTool.obtainValue(ValueKeys.SDK_INIT_PARAMS); if (sdkInitParamStr != null){ mInitParams = new Gson().fromJson(sdkInitParamStr, SdkInitParams.class); return mInitParams != null && mInitParams.appKey != null; } return false; } /** * 检查AccessToke是否有效 */ private void startCheckLoginValidity(){ showLoginAnim(true); if (checkAppKeyAndAccessToken()){ jumpToCameraListActivity(); finish(); } showLoginAnim(false); } /** * 通过萤石账号进行体验 */ public void onClickLoginByEzvizAccount(View view) { if (mCurrentServerArea == null || mCurrentServerArea.defaultOpenAuthAppKey == null){ toast("Error occurred! Please try to use demo with appKey & accessToken."); return; } mSdkInitParams = SdkInitParams.createBy(mCurrentServerArea); SdkInitTool.initSdk(getApplication(), mSdkInitParams); registerLoginResultReceiver(); getOpenSDK().openLoginPage(); } private SdkInitParams mSdkInitParams = null; private BroadcastReceiver mLoginResultReceiver = null; private void registerLoginResultReceiver(){ if (mLoginResultReceiver == null){ mLoginResultReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { Log.i(TAG, "login success by h5 page"); unregisterLoginResultReceiver(); saveLastSdkInitParams(mSdkInitParams); jumpToCameraListActivity(); finish(); } }; IntentFilter filter = new IntentFilter(OAUTH_SUCCESS_ACTION); registerReceiver(mLoginResultReceiver, filter); Log.i(TAG, "registered login result receiver"); } } private void unregisterLoginResultReceiver(){ if (mLoginResultReceiver != null){ unregisterReceiver(mLoginResultReceiver); mLoginResultReceiver = null; Log.i(TAG, "unregistered login result receiver"); } } /** * 通过AccessToken进行体验 */ public void onClickStartExperience(View view) { if (checkLoginInfo()){ SdkInitParams sdkInitParams = SdkInitParams.createBy(mCurrentServerArea); sdkInitParams.appKey = getValidText(mAppKeyET.getText().toString()); sdkInitParams.accessToken = getValidText(mAccessTokenET.getText().toString()); SdkInitTool.initSdk(getApplication(), sdkInitParams); switchServerToCurrent(); new Thread(new Runnable() { @Override public void run() { showLoginAnim(true); if (checkAppKeyAndAccessToken()){ // 保存相关信息 SdkInitParams sdkInitParams = SdkInitParams.createBy(mCurrentServerArea); sdkInitParams.appKey = getValidText(mAppKeyET.getText().toString()); saveLastSdkInitParams(sdkInitParams); // 跳转到主界面 jumpToCameraListActivity(); } showLoginAnim(false); } }).start(); } } private String getValidText(String origin){ if (origin == null){ return null; } StringBuilder target = new StringBuilder(); for (char ch: origin.toCharArray()){ if (ch == '\0' || ch == '\n' || ch == 160){ break; }else{ target.append(ch); } } return target.toString(); } private void jumpToCameraListActivity(){ Intent toCameraListIntent = new Intent(getApplicationContext(), EZCameraListActivity.class); EditText specifiedDeviceEt = (EditText) findViewById(R.id.et_specified_device); Log.i("ON+","specifiedDeviceEt"+specifiedDeviceEt); Log.i("ON+","page_container"+(View)findViewById(R.id.page_container)); Log.i("ON+","btn_sdk_login"+(View)findViewById(R.id.btn_sdk_login)); Log.i("ON+","btn_sdk_login"+(View)findViewById(R.id.btn_sdk_login)); if (specifiedDeviceEt != null && !TextUtils.isEmpty(specifiedDeviceEt.getText().toString())){ toCameraListIntent.putExtra(ValueKeys.DEVICE_SERIAL.name(), specifiedDeviceEt.getText().toString()); } MainActivity.this.startActivity(toCameraListIntent); MainActivity.this.finish(); } private ViewGroup mLoginAnimVg = null; private boolean isShowLoginAnim = false; private void showLoginAnim(final boolean show){ if (mLoginAnimVg == null){ mLoginAnimVg = (ViewGroup) findViewById(R.id.vg_login_anim); } if (mLoginAnimVg == null){ return; } runOnUiThread(new Runnable() { @Override public void run() { isShowLoginAnim = show; if (show){ mLoginAnimVg.setVisibility(View.VISIBLE); }else{ mLoginAnimVg.setVisibility(View.INVISIBLE); } } }); } /** * 获取上次sdk初始化的参数 */ private SdkInitParams getLastSdkInitParams(){ String lastSdkInitParamsStr = SpTool.obtainValue(ValueKeys.SDK_INIT_PARAMS); if (lastSdkInitParamsStr == null){ return null; }else{ return new Gson().fromJson(lastSdkInitParamsStr, SdkInitParams.class); } } /** * 保存上次sdk初始化的参数 */ private void saveLastSdkInitParams(SdkInitParams sdkInitParams) { // 不保存AccessToken sdkInitParams.accessToken = null; SpTool.storeValue(ValueKeys.SDK_INIT_PARAMS, sdkInitParams.toString()); } /** * 通过调用服务接口判断AppKey和AccessToken且有效 * @return 是否依旧有效 */ private boolean checkAppKeyAndAccessToken() { boolean isValid = false; try { EzvizApplication.getOpenSDK().getDeviceList(0, 1); isValid = true; } catch (BaseException e) { e.printStackTrace(); Log.e(TAG, "Error code is " + e.getErrorCode()); int errCode = e.getErrorCode(); String errMsg; if (errCode == 400031) { errMsg = getApplicationContext().getString(R.string.tip_of_bad_net); } else { errMsg = getApplicationContext().getString(R.string.login_expire); } toast(errMsg); } return isValid; } private void switchServerToCurrent() { EzvizAPI.getInstance().setServerUrl(mCurrentServerArea.openApiServer, mCurrentServerArea.openAuthApiServer); Log.e(TAG, "switched server area!!!\n" + mCurrentServerArea.toString()); } private boolean checkLoginInfo() { if (mAppKeyET.getText().toString().equals("")){ toast("AppKey不能为空"); return false; } if (mAccessTokenET.getText().toString().equals("")){ toast("AccessToken不能为空"); return false; } return true; } private void initUI() { // 设置服务器区域下拉框显示和监听 Spinner areaServerSp = (Spinner) findViewById(R.id.sp_server_area); if (areaServerSp != null){ ServerAreasSpAdapter adapter = new ServerAreasSpAdapter(getApplicationContext(), ServerAreasEnum.getAllServers()); areaServerSp.setAdapter(adapter); areaServerSp.setOnItemSelectedListener(mServerAreasOnItemCLickLister); } mAppKeyET = (EditText) findViewById(R.id.et_app_key); mAccessTokenET = (EditText) findViewById(R.id.et_access_token); SdkInitParams sdkInitParams = getLastSdkInitParams(); if (sdkInitParams != null){ mAppKeyET.setText(sdkInitParams.appKey); try{ mAccessTokenET.setText(EZOpenSDK.getInstance().getEZAccessToken().getAccessToken()); }catch (Exception e){ LogUtil.d(TAG, "failed to load AccessToken"); } for (int position = 0; position < ServerAreasEnum.getAllServers().size(); position++){ if (sdkInitParams.serverAreaId == ServerAreasEnum.getAllServers().get(position).id){ if (areaServerSp != null){ areaServerSp.setSelection(position); } } } } TextView sdkVerTv = (TextView) findViewById(R.id.tv_sdk_ver); if (sdkVerTv != null){ sdkVerTv.setText("SDK Version: " + Config.VERSION); } } private AdapterView.OnItemSelectedListener mServerAreasOnItemCLickLister = new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { mCurrentServerArea = ServerAreasEnum.getAllServers().get(position); // 仅预置了appKey的区域才展示萤石账号登录按钮 if (mCurrentServerArea.defaultOpenAuthAppKey != null){ showEzvizAccountLoginTv(true); }else{ showEzvizAccountLoginTv(false); } } @Override public void onNothingSelected(AdapterView parent) { showEzvizAccountLoginTv(false); } private void showEzvizAccountLoginTv(boolean show){ View loginTv = MainActivity.this.findViewById(R.id.tv_ezviz_account_login); if (loginTv == null){ return; } if (show){ loginTv.setVisibility(View.VISIBLE); }else { loginTv.setVisibility(View.INVISIBLE); } } }; private class ServerAreasSpAdapter implements SpinnerAdapter{ private Context mContext; private List mServerAreaArray; public ServerAreasSpAdapter(@NonNull Context context, @NonNull List serverList){ mContext = context; mServerAreaArray = serverList; } @Override public View getDropDownView(int position, View convertView, ViewGroup parent) { return getDropDownServerAreaItemView(position, convertView); } @Override public void registerDataSetObserver(DataSetObserver observer) { } @Override public void unregisterDataSetObserver(DataSetObserver observer) { } @Override public int getCount() { int cnt = 0; if (mServerAreaArray != null){ cnt = mServerAreaArray.size(); } return cnt; } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return position; } @Override public boolean hasStableIds() { return false; } @Override public View getView(int position, View convertView, ViewGroup parent) { return getServerAreaItemView(position, convertView); } @Override public int getItemViewType(int position) { return 1; } @Override public int getViewTypeCount() { return 1; } @Override public boolean isEmpty() { return false; } private View getServerAreaItemView(int position, View convertView){ TextView itemTv = (TextView) convertView; if (itemTv == null){ itemTv = new TextView(mContext); itemTv.setTextColor(ContextCompat.getColor(mContext, R.color.red)); // dp转px(applyDimension的用途是根据当前数值单位和屏幕像素密度将指定数值转换为Android标准尺寸单位px) int height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 50, mContext.getResources().getDisplayMetrics()); itemTv.setHeight(height); itemTv.setGravity(Gravity.CENTER_VERTICAL); } itemTv.setText(mServerAreaArray.get(position).areaName); return itemTv; } private View getDropDownServerAreaItemView(int position, View convertView){ TextView itemTv = (TextView) getServerAreaItemView(position, convertView); itemTv.setGravity(Gravity.CENTER); return itemTv; } } @Override protected void onDestroy() { super.onDestroy(); unregisterLoginResultReceiver(); } @Override public void onBackPressed() { if (isShowLoginAnim){ toast(getApplicationContext().getString(R.string.cancel_init_sdk)); showLoginAnim(false); }else{ super.onBackPressed(); } } }