package com.mm.android.deviceaddmodule; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.View; import com.company.NetSDK.DEVICE_NET_INFO_EX; import com.lechange.opensdk.media.DeviceInitInfo; import com.mm.android.deviceaddmodule.contract.DeviceAddConstract; import com.mm.android.deviceaddmodule.event.DeviceAddEvent; import com.mm.android.deviceaddmodule.helper.DeviceAddHelper; import com.mm.android.deviceaddmodule.helper.PageNavigationHelper; import com.mm.android.deviceaddmodule.mobilecommon.AppConsume.ProviderManager; import com.mm.android.deviceaddmodule.mobilecommon.base.BaseFragment; import com.mm.android.deviceaddmodule.mobilecommon.base.BaseFragmentActivity; import com.mm.android.deviceaddmodule.mobilecommon.base.DefaultPermissionListener; import com.mm.android.deviceaddmodule.mobilecommon.common.LCConfiguration; import com.mm.android.deviceaddmodule.mobilecommon.common.PermissionHelper; import com.mm.android.deviceaddmodule.mobilecommon.dialog.LCAlertDialog; import com.mm.android.deviceaddmodule.mobilecommon.entity.deviceadd.DeviceAddInfo; import com.mm.android.deviceaddmodule.mobilecommon.eventbus.event.BaseEvent; import com.mm.android.deviceaddmodule.mobilecommon.eventbus.event.CommonEvent; import com.mm.android.deviceaddmodule.mobilecommon.utils.LogUtil; import com.mm.android.deviceaddmodule.mobilecommon.widget.CommonTitle; import com.mm.android.deviceaddmodule.model.DeviceAddModel; import com.mm.android.deviceaddmodule.p_ap.ApBindSuccessFragment; import com.mm.android.deviceaddmodule.p_ap.ApPairFragment; import com.mm.android.deviceaddmodule.p_bindsuccess.BindSuccessFragment; import com.mm.android.deviceaddmodule.p_cloudconnect.CloudConnectFragment; import com.mm.android.deviceaddmodule.p_devlogin.DevLoginFragment; import com.mm.android.deviceaddmodule.p_devlogin.DevSecCodeFragment; import com.mm.android.deviceaddmodule.p_errortip.ErrorTipFragment; import com.mm.android.deviceaddmodule.p_init.InitFragment; import com.mm.android.deviceaddmodule.p_init.SecurityCheckFragment; import com.mm.android.deviceaddmodule.p_softap.DevWifiListFragment; import com.mm.android.deviceaddmodule.p_softap.oversea.SoftApResultFragment; import com.mm.android.deviceaddmodule.p_wiredwireless.SmartConfigFragment; import com.mm.android.deviceaddmodule.p_wiredwireless.WifiPwdFragment; import com.mm.android.deviceaddmodule.presenter.DeviceAddPresenter; import com.mm.android.deviceaddmodule.views.popwindow.BasePopWindow; import com.mm.android.deviceaddmodule.views.popwindow.PopWindowFactory; import org.greenrobot.eventbus.EventBus; import static android.Manifest.permission.ACCESS_COARSE_LOCATION; import static com.mm.android.deviceaddmodule.mobilecommon.common.Constants.PERMISSION_REQUEST_ID; /** * 添加设备主界面,各功能模块以Fragment形式依附于此类 */ public class DeviceAddActivity extends BaseFragmentActivity implements DeviceAddConstract.View, CommonTitle.OnTitleClickListener { public static final String TAG = "DeviceAddActivity"; private CommonTitle mTitle; //标题栏 DeviceAddConstract.Presenter mPresenter; private final String STOP_ADD_DIALOG = "stop_add_dialog"; LCAlertDialog mLCAlertDialog; PopWindowFactory mPopWindowFactory; BasePopWindow mMoreOptionPopWindow, mLoadingPopWindow, mTypeChosePopWindow; private DefaultPermissionListener defaultPermissionListener; private PermissionHelper permissionHelper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_device_add); initView(); initData(); } //接收EventBus消息 @Override public void onMessageEvent(BaseEvent event) { super.onMessageEvent(event); if (event instanceof DeviceAddEvent) { String code = event.getCode(); if (DeviceAddEvent.CONFIG_PAGE_NAVIGATION_ACTION.equals(code)) { mPresenter.dispatchPageNavigation(); } else if (DeviceAddEvent.CHANGE_TO_WIRELESS_ACTION.equals(code)) { mPresenter.changeToWireless(); } else if (DeviceAddEvent.CHANGE_TO_WIRED_ACTION.equals(code)) { mPresenter.changeToWired(); } else if (DeviceAddEvent.CHANGE_TO_SOFTAP_ACTION.equals(code)) { mPresenter.changeToSoftAp(); } else if (DeviceAddEvent.TITLE_MODE_ACTION.equals(code)) { Bundle bundle = ((DeviceAddEvent) event).getBundle(); String titleMode = bundle.getString(DeviceAddEvent.KEY.TITLE_MODE); mPresenter.setCurTitleMode(titleMode); dispatchTitle(titleMode); } else if (DeviceAddEvent.SHOW_LOADING_VIEW_ACTION.equals(code)) { synchronized (DeviceAddActivity.this) { if (mLoadingPopWindow != null && !this.isFinishing()) { if (!mLoadingPopWindow.isShowing()) { mLoadingPopWindow.showAsDropDown(mTitle); } } else if (!this.isFinishing() && hasWindowFocus()) { mLoadingPopWindow = mPopWindowFactory.createPopWindow(this, mTitle, PopWindowFactory.PopWindowType.LOADING); } } } else if (DeviceAddEvent.DISMISS_LOADING_VIEW_ACTION.equals(code)) { synchronized (DeviceAddActivity.this) { LogUtil.debugLog(TAG,"LoadingDismiss-->" + mLoadingPopWindow); if (mLoadingPopWindow != null) { mLoadingPopWindow.dismiss(); } } } else if (DeviceAddEvent.DESTROY_ACTION.equals(code)) { destroy(); } else if (DeviceAddEvent.OFFLINE_CONFIG_SUCCESS_ACTION.equals(code)) { offlineConfigSucceed(); } else if (DeviceAddEvent.SOFTAP_REFRSH_WIFI_LIST_DISABLE_ACTION.equals(code)) { mTitle.setEnabled(false, CommonTitle.ID_RIGHT); } else if (DeviceAddEvent.SOFTAP_REFRSH_WIFI_LIST_ENABLE_ACTION.equals(code)) { mTitle.setEnabled(true, CommonTitle.ID_RIGHT); } else if (DeviceAddEvent.SHOW_TYPE_CHOSE_ACTION.equals(code)) { mTypeChosePopWindow = mPopWindowFactory.createPopWindow(this, mTitle, PopWindowFactory.PopWindowType.CHOSETYPE); } else if(DeviceAddEvent.GET_DEVICE_SN.equals(code)){ // mPresenter.startSearchService(); } } } //初始化页面布局 private void initView() { mPopWindowFactory = new PopWindowFactory(); initTitle(); } private void initTitle() { mTitle = findViewById(R.id.title); mTitle.initView(R.drawable.mobile_common_title_back, 0, R.string.add_device_title); mTitle.setOnTitleClickListener(this); } //初始化页面数据 private void initData() { mPresenter = new DeviceAddPresenter(this); //添加逻辑入库 mPresenter.dispatchIntentData(getIntent()); permissionHelper = new PermissionHelper(this); defaultPermissionListener = new DefaultPermissionListener() { @Override public void onGranted() { mPresenter.getGPSLocation(); } @Override public boolean onDenied() { mPresenter.getGPSLocation(); return true; } }; permissionHelper.requestPermissions(new String[]{ ACCESS_COARSE_LOCATION}, defaultPermissionListener); } //动态权限申请回调 @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { if (requestCode == PERMISSION_REQUEST_ID) { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { if (defaultPermissionListener != null) { defaultPermissionListener.onGranted(); } } else { if (defaultPermissionListener != null&&permissionHelper!=null) { if (!defaultPermissionListener.onDenied()) { //返回false,默认处理,向用户说明权限的必要性并引导 permissionHelper.gotoSettingPage(permissions, defaultPermissionListener); } } } } } @Override protected void onResume() { super.onResume(); } @Override protected void onDestroy() { super.onDestroy(); mPresenter = null; } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); final Fragment curFragment = getSupportFragmentManager().findFragmentById(R.id.content); if (curFragment != null) { curFragment.onActivityResult(requestCode, resultCode, data); } } @Override public void onBackPressed() { goBack(); } private void goBack() { final Fragment curFragment = getSupportFragmentManager().findFragmentById(R.id.content); int entryCount = getSupportFragmentManager().getBackStackEntryCount(); boolean isWifiOfflineMode = DeviceAddModel.newInstance().getDeviceInfoCache().isWifiOfflineMode(); if (curFragment == null || entryCount <= 0 || (isWifiOfflineMode && entryCount == 1) || curFragment instanceof ApBindSuccessFragment) { if (mLoadingPopWindow != null) { mLoadingPopWindow.dismiss(); } if (curFragment instanceof ApBindSuccessFragment) { if (ProviderManager.getAppProvider().getAppType() == LCConfiguration.APP_LECHANGE_OVERSEA) { showStopDevAddDialog(true); } return; } destroy(); } else { if (curFragment instanceof CloudConnectFragment || curFragment instanceof InitFragment || curFragment instanceof DevLoginFragment || curFragment instanceof DevSecCodeFragment || curFragment instanceof SmartConfigFragment || curFragment instanceof DevWifiListFragment || curFragment instanceof SoftApResultFragment || curFragment instanceof SecurityCheckFragment || curFragment instanceof ApPairFragment) {//以上界面退出需二次确认 showStopDevAddDialog(curFragment instanceof ApPairFragment); } else { if (!((BaseFragment) curFragment).onBackPressed()) {//子类未消耗返回事件 if (curFragment instanceof ErrorTipFragment) { showStopDevAddDialog(false); return; } else if (curFragment instanceof BindSuccessFragment) { destroy(); return; } if (mLoadingPopWindow != null) { mLoadingPopWindow.dismiss(); } //从输入wifi密码页面返回,统一回到电源页面 if (curFragment instanceof WifiPwdFragment) { getSupportFragmentManager().popBackStackImmediate(PageNavigationHelper.TIP_POWER_FRAGMENT_TAG, 0); return; } getSupportFragmentManager().popBackStack(); //退回到上个界面 } } } } private void dispatchTitle(String titleMode) { mTitle.setVisibleRight(View.VISIBLE); if (DeviceAddHelper.TitleMode.MORE.name().equals(titleMode) || DeviceAddHelper.TitleMode.MORE2.name().equals(titleMode) || DeviceAddHelper.TitleMode.MORE3.name().equals(titleMode) || DeviceAddHelper.TitleMode.MORE4.name().equals(titleMode)) { mTitle.setIconRight(R.drawable.common_icon_nav_more); } else if (DeviceAddHelper.TitleMode.REFRESH.name().equals(titleMode)) { mTitle.setIconRight(R.drawable.common_image_nav_refresh_selector); } else if (DeviceAddHelper.TitleMode.SHARE.name().equals(titleMode)) { mTitle.setTitleCenter(R.string.mobile_common_device); mTitle.setIconRight(R.drawable.mobile_common_share_selector); boolean isOversea = ProviderManager.getAppProvider().getAppType() == LCConfiguration.APP_LECHANGE_OVERSEA; boolean canBeShare = mPresenter.canBeShare(); mTitle.setVisibleRight(isOversea && canBeShare ? View.VISIBLE : View.GONE); } else if (DeviceAddHelper.TitleMode.FREE_CLOUD_STORAGE.name().equals(titleMode)) { mTitle.setVisibleLeft(View.GONE); mTitle.setVisibleRight(View.GONE); } else if (DeviceAddHelper.TitleMode.MODIFY_DEVICE_NAME.name().equals(titleMode)) { mTitle.setTitleCenter(R.string.mobile_common_modify_device_pwd); mTitle.setVisibleRight(View.GONE); } else { mTitle.setIconRight(0); } } /** * 停止添加流程提示框 */ private void showStopDevAddDialog(final boolean isExitApAdd) { dismissLCAlertDialog(); LCAlertDialog.Builder builder = new LCAlertDialog.Builder(this); builder.setTitle(R.string.add_device_confrim_to_quit); builder.setMessage(R.string.add_device_not_complete_tip); builder.setCancelButton(R.string.common_cancel, null); builder.setConfirmButton(R.string.common_confirm, new LCAlertDialog.OnClickListener() { @Override public void onClick(LCAlertDialog dialog, int which, boolean isChecked) { destroy(); } }); mLCAlertDialog = builder.create(); mLCAlertDialog.show(getSupportFragmentManager(), STOP_ADD_DIALOG); } private void dismissLCAlertDialog() { if (mLCAlertDialog != null && mLCAlertDialog.isVisible()) { mLCAlertDialog.dismissAllowingStateLoss(); mLCAlertDialog = null; } } @Override public void onCommonTitleClick(int id) { final Fragment curFragment = getSupportFragmentManager().findFragmentById(R.id.content); switch (id) { case CommonTitle.ID_LEFT: goBack(); break; case CommonTitle.ID_RIGHT: { if (mPresenter.getCurTitleMode().equals(DeviceAddHelper.TitleMode.MORE.name())) { mMoreOptionPopWindow = mPopWindowFactory.createPopWindow(this, mTitle, PopWindowFactory.PopWindowType.OPTION1); } else if (mPresenter.getCurTitleMode().equals(DeviceAddHelper.TitleMode.MORE2.name())) { mMoreOptionPopWindow = mPopWindowFactory.createPopWindow(this, mTitle, PopWindowFactory.PopWindowType.OPTION2); } else if (mPresenter.getCurTitleMode().equals(DeviceAddHelper.TitleMode.MORE3.name())) { mMoreOptionPopWindow = mPopWindowFactory.createPopWindow(this, mTitle, PopWindowFactory.PopWindowType.OPTION3); } else if (mPresenter.getCurTitleMode().equals(DeviceAddHelper.TitleMode.MORE4.name())) { mMoreOptionPopWindow = mPopWindowFactory.createPopWindow(this, mTitle, PopWindowFactory.PopWindowType.OPTION4); } else if (mPresenter.getCurTitleMode().equals(DeviceAddHelper.TitleMode.REFRESH.name())) { EventBus.getDefault().post(new DeviceAddEvent(DeviceAddEvent.SOFTAP_REFRSH_WIFI_LIST)); } else if (mPresenter.getCurTitleMode().equals(DeviceAddHelper.TitleMode.SHARE.name())) { mPresenter.getDeviceShareInfo(); } } } } @Override public Context getContextInfo() { return this; } @Override public boolean isViewActive() { return !isActivityDestory(); } @Override public void showToastInfo(String msg) { toast(msg); } @Override public void showToastInfo(int msgId) { toast(msgId); } @Override public void showProgressDialog() { EventBus.getDefault().post(new DeviceAddEvent(DeviceAddEvent.SHOW_LOADING_VIEW_ACTION)); } @Override public void cancelProgressDialog() { EventBus.getDefault().post(new DeviceAddEvent(DeviceAddEvent.DISMISS_LOADING_VIEW_ACTION)); } @Override public void setTitle(int titleId) { mTitle.setTitleCenter(titleId); } @Override public void goScanPage() { PageNavigationHelper.gotoScanPage(this); } @Override public void goDispatchPage() { PageNavigationHelper.gotoDispatchPage(this); } @Override public void goHubPairPage(String sn, String hubType) { PageNavigationHelper.gotoHubGuide1Page(this, sn, hubType); } @Override public void goApConfigPage(boolean hasSelecteGateway) { final Fragment curFragment = getSupportFragmentManager().findFragmentById(R.id.content); PageNavigationHelper.gotoGatewayListPage(curFragment, hasSelecteGateway); } @Override public void goTypeChoosePage() { final Fragment curFragment = getSupportFragmentManager().findFragmentById(R.id.content); PageNavigationHelper.gotoTypeChoosePage(curFragment); } @Override public void goWiredwirelessPage(boolean isWifi) { final Fragment curFragment = getSupportFragmentManager().findFragmentById(R.id.content); PageNavigationHelper.gotoPowerTipPage(curFragment, isWifi); } @Override public void goWiredwirelessPageNoAnim(boolean isWifi) { final Fragment curFragment = getSupportFragmentManager().findFragmentById(R.id.content); PageNavigationHelper.gotoPowerTipPageNoAnim(curFragment, isWifi); } @Override public void goSoftApPage() { final Fragment curFragment = getSupportFragmentManager().findFragmentById(R.id.content); PageNavigationHelper.gotoSoftApTipPage(curFragment); } @Override public void goSoftApPageNoAnim() { final Fragment curFragment = getSupportFragmentManager().findFragmentById(R.id.content); PageNavigationHelper.gotoSoftApTipPageNoAnim(curFragment); } @Override public void goIMEIInputPage() { final Fragment curFragment = getSupportFragmentManager().findFragmentById(R.id.content); PageNavigationHelper.gotoIMEIInputPage(curFragment); } @Override public void goNotSupportBindTipPage() { final Fragment curFragment = getSupportFragmentManager().findFragmentById(R.id.content); PageNavigationHelper.gotoErrorTipPage(curFragment, DeviceAddHelper.ErrorCode.DEVICE_BIND_ERROR_NOT_SUPPORT_TO_BIND); } @Override public void goOfflineConfigPage(String sn, String devModelName, String imei) { PageNavigationHelper.gotoOfflineConfigPage(this, sn, devModelName, imei); } @Override public void goInitPage(DeviceInitInfo device_net_info_ex) { final Fragment curFragment = getSupportFragmentManager().findFragmentById(R.id.content); PageNavigationHelper.gotoInitPage(curFragment, device_net_info_ex); } @Override public void goCloudConnetPage() { Fragment curFragment = getSupportFragmentManager().findFragmentById(R.id.content); PageNavigationHelper.gotoCloudConnectPage(curFragment); } @Override public void completeAction(boolean isAp) { DeviceAddInfo deviceAddInfo = DeviceAddModel.newInstance().getDeviceInfoCache(); boolean isDeviceDetail = deviceAddInfo.isDeviceDetail(); String code = CommonEvent.AP_PAIR_SUCCEED_2_MAIN_ACTION; if (isDeviceDetail) { code = CommonEvent.AP_PAIR_SUCCEED_2_MID_ACTION; } if (isAp && deviceAddInfo.getGatewayInfo() != null) { String deviceId = deviceAddInfo.getGatewayInfo().getSn(); String apId = deviceAddInfo.getDeviceSn(); Bundle bundle = new Bundle(); bundle.putString(LCConfiguration.Device_ID, deviceId); bundle.putString(LCConfiguration.AP_ID, apId); CommonEvent commonEvent = new CommonEvent(code); commonEvent.setBundle(bundle); EventBus.getDefault().post(commonEvent); } destroy(); if (!isDeviceDetail) { ProviderManager.getDeviceAddCustomProvider().goHomePage(getContextInfo()); } } // 主动释放资源、结束activity,而不依赖于onDestroy方法来释放资源(onDestroy方法时机不可控) private void destroy() { finish(); mPresenter.uninit(); if (mLoadingPopWindow != null) { if (mLoadingPopWindow.isShowing()) { mLoadingPopWindow.dismiss(); } mLoadingPopWindow = null; } EventBus.getDefault().post("backXamarin"); } // 离线配网成功,返回上一级页面 private void offlineConfigSucceed() { setResult(RESULT_OK); finish(); mPresenter.uninit(); } }