parent
5de59b5224
commit
5e3abc157a
25 changed files with 2336 additions and 2483 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,764 @@ |
||||
package com.project.survey.ui; |
||||
|
||||
import android.Manifest; |
||||
import android.content.ComponentName; |
||||
import android.content.Context; |
||||
import android.content.DialogInterface; |
||||
import android.content.Intent; |
||||
import android.content.pm.PackageManager; |
||||
import android.location.Location; |
||||
import android.location.LocationManager; |
||||
import android.os.Build; |
||||
import android.provider.Settings; |
||||
import android.view.View; |
||||
|
||||
import androidx.annotation.NonNull; |
||||
import androidx.appcompat.app.AppCompatActivity; |
||||
import androidx.core.app.ActivityCompat; |
||||
import androidx.fragment.app.Fragment; |
||||
import androidx.lifecycle.Lifecycle; |
||||
import androidx.lifecycle.LifecycleEventObserver; |
||||
import androidx.lifecycle.LifecycleOwner; |
||||
|
||||
import com.afollestad.materialdialogs.DialogAction; |
||||
import com.afollestad.materialdialogs.MaterialDialog; |
||||
import com.bingce.AppChannel; |
||||
import com.bingce.BaseApp; |
||||
import com.bingce.coordlib.model.Blh; |
||||
import com.bingce.coordlib.util.CoordUtil; |
||||
import com.bingce.data.cache.CachedCurrentCoordinateSystemKt; |
||||
import com.bingce.data.sync.GlobalFlowCenter; |
||||
import com.bingce.data.sync.utils.LeanCloudUserLoginStateUtils; |
||||
import com.bingce.device.Device; |
||||
import com.bingce.device.enums.ConnectTypeEnum; |
||||
import com.bingce.device.enums.DeviceTypeEnum; |
||||
import com.bingce.device.service.comm.ble.BleService; |
||||
import com.bingce.device.service.comm.emulator.EmulatorService; |
||||
import com.bingce.device.service.comm.localgps.LocationService; |
||||
import com.bingce.device.service.comm.localgps.NativePositioningService; |
||||
import com.bingce.device.service.comm.messenger.QxwzMessengerService; |
||||
import com.bingce.device.service.comm.otg.OTGCommService; |
||||
import com.bingce.device.service.comm.socket.TsSocketService; |
||||
import com.bingce.device.service.comm.spp.BTService; |
||||
import com.bingce.device.service.ntrip_sdk.CmccSdkService; |
||||
import com.bingce.device.service.ntrip_sdk.LuoWangSdkService; |
||||
import com.bingce.device.service.ntrip_sdk.NtripService; |
||||
import com.bingce.device.service.ntrip_sdk.QxwzSdkService; |
||||
import com.bingce.device.service.ntrip_sdk.SixentsSdkService; |
||||
import com.bingce.device.ui.ConnectRtkActivity; |
||||
import com.bingce.device.ui.ConnectTSActivity; |
||||
import com.bingce.device.ui.dialog.DialogUtil; |
||||
import com.bingce.device.ui.utils.DeviceUtil; |
||||
import com.bingce.device.ui.widget.BCProgressDialog; |
||||
import com.bingce.rtk.command.RTK; |
||||
import com.bingce.rtk.command.qxwz.QxwzRTK; |
||||
import com.bingce.rtk.enums.DataLinkModeEnum; |
||||
import com.bingce.rtk.enums.NetworkModeEnum; |
||||
import com.bingce.rtk.enums.NtripCorsProviderEnum; |
||||
import com.bingce.rtk.event.RtkCheckBaseMoveEvent; |
||||
import com.bingce.rtk.event.RtkCmdAnswerEvent; |
||||
import com.bingce.rtk.event.RtkCmdQueueSendEvent; |
||||
import com.bingce.rtk.event.RtkCmdUiEvent; |
||||
import com.bingce.rtk.event.RtkReceivedSerialNumberEvent; |
||||
import com.bingce.rtk.event.RtkSpeechEvent; |
||||
import com.bingce.rtk.event.RtkStartCmccServiceEvent; |
||||
import com.bingce.rtk.event.RtkStartLuoWangServiceEvent; |
||||
import com.bingce.rtk.event.RtkStartNtripServiceEvent; |
||||
import com.bingce.rtk.event.RtkStartQxwzSdkServiceEvent; |
||||
import com.bingce.rtk.event.RtkStartSixentsServiceEvent; |
||||
import com.bingce.rtk.event.RtkStopNtripSDKEvent; |
||||
import com.bingce.rtk.gnss.Gnss; |
||||
import com.bingce.rtk.model.GnssPosition; |
||||
import com.bingce.rtk.util.GnssUtil; |
||||
import com.bingce.totalstation.TotalStation; |
||||
import com.bingce.totalstation.TsConfig; |
||||
import com.bingce.totalstation.enums.SetupStationMethodEnum; |
||||
import com.bingce.totalstation.event.TsUpdateStatusEvent; |
||||
import com.bingce.utils.AppCompatActivityProviderUtils; |
||||
import com.bingce.utils.AppUtil; |
||||
import com.bingce.utils.IProvider; |
||||
import com.bingce.utils.LCDeviceUtil; |
||||
import com.bingce.utils.RomUtil; |
||||
import com.bingce.utils.SdkUtils; |
||||
import com.bingce.utils.SoundPoolUtil; |
||||
import com.bingce.utils.ThreadPoolUtil; |
||||
import com.bingce.utils.Util; |
||||
import com.bingce.utils.ValidateUtil; |
||||
import com.bingce.utils.VipManager; |
||||
import com.hjq.permissions.OnPermissionCallback; |
||||
import com.hjq.permissions.OnPermissionPageCallback; |
||||
import com.hjq.permissions.Permission; |
||||
import com.hjq.permissions.XXPermissions; |
||||
import com.project.survey.App; |
||||
import com.project.survey.R; |
||||
import com.project.survey.ui.instrument.basestationtranslation.RtkBaseCorrectActivity; |
||||
|
||||
import net.tatans.tensorflowtts.tts.TtsManager; |
||||
|
||||
import org.greenrobot.eventbus.EventBus; |
||||
import org.greenrobot.eventbus.Subscribe; |
||||
import org.greenrobot.eventbus.ThreadMode; |
||||
|
||||
import java.util.List; |
||||
|
||||
import alibaba.fastjson.JSON; |
||||
import alibaba.fastjson.JSONObject; |
||||
import blankj.utilcode.util.ActivityUtils; |
||||
import blankj.utilcode.util.ServiceUtils; |
||||
import blankj.utilcode.util.StringUtils; |
||||
import blankj.utilcode.util.ToastUtils; |
||||
import blankj.utilcode.util.Utils; |
||||
import cn.leancloud.LCUser; |
||||
import cn.leancloud.types.LCGeoPoint; |
||||
import cn.liuyanbing.surveyor.model.util.CUtil; |
||||
|
||||
public class MainActivityUtils extends AppCompatActivityProviderUtils { |
||||
private boolean gnssServerReady = false; |
||||
private MaterialDialog cenLngUnusualDialog; |
||||
private MaterialDialog langDialog, unbindDeviceDialog; |
||||
private BCProgressDialog deviceConnectingProgressDialog; |
||||
private final CachedCurrentCoordinateSystemKt cachedCoordinateSystemKt; |
||||
|
||||
public MainActivityUtils(AppCompatActivity activity, |
||||
IProvider<AppCompatActivity> activityIProvider) { |
||||
super(activityIProvider); |
||||
cachedCoordinateSystemKt = new CachedCurrentCoordinateSystemKt(activity); |
||||
activity.getLifecycle().addObserver(new LifecycleEventObserver() { |
||||
@Override |
||||
public void onStateChanged(@NonNull LifecycleOwner source, @NonNull Lifecycle.Event event) { |
||||
switch (event) { |
||||
case ON_CREATE: |
||||
EventBus.getDefault().register(MainActivityUtils.this); |
||||
// SoundPoolUtil.getInstance().initHintSing(activity, SoundPoolUtil.TEST, R.raw.savedone);
|
||||
//// SoundPoolUtil.getInstance().initHintSing(activity, SoundPoolUtil.SEPTENTRIO_FILL, R.raw.septentrio_fill);
|
||||
//// SoundPoolUtil.getInstance().initHintSing(activity, SoundPoolUtil.SEPTENTRIO_CUT, R.raw.septentrio_cut);
|
||||
// SoundPoolUtil.getInstance().initHintSing(activity, SoundPoolUtil.ALPHA_STAKING, R.raw.alphastaking);
|
||||
// SoundPoolUtil.getInstance().initHintSing(activity, SoundPoolUtil.ALPHA_RECORDING, R.raw.alpharecording);
|
||||
break; |
||||
case ON_DESTROY: |
||||
EventBus.getDefault().unregister(MainActivityUtils.this); |
||||
SoundPoolUtil.getInstance().onDestroy(); |
||||
break; |
||||
case ON_RESUME: |
||||
checkGnssServerReady(); |
||||
break; |
||||
} |
||||
} |
||||
}); |
||||
} |
||||
|
||||
|
||||
@Subscribe(threadMode = ThreadMode.MAIN) |
||||
public void onMessageEvent(RtkSpeechEvent event) { |
||||
if (!StringUtils.isEmpty(event.getText())) TtsManager.getInstance().speak(event.getText()); |
||||
} |
||||
|
||||
@Subscribe(threadMode = ThreadMode.MAIN) |
||||
public void onMessageEvent(RtkCheckBaseMoveEvent event) { |
||||
//检查是否需要进行基站平移校准
|
||||
String needBaseCorrect = GnssUtil.checkNeedBaseCorrect(); |
||||
if (GnssPosition.getInstance().isBaseMoveRemind() && (event.isConfirmMoved() || needBaseCorrect != null)) { |
||||
new MaterialDialog.Builder(/*this*/context()).title(R.string.hint) |
||||
.content("检测到基站位置发生变化,为了保证精度可靠,请选择基站平移校准" + (event.isConfirmMoved() ? "" : (needBaseCorrect == null ? "" : "\n(" + needBaseCorrect + ")"))) |
||||
.positiveText(R.string.rtk_base_correct) |
||||
.negativeText("忽略") |
||||
.neutralText("本次不再提醒") |
||||
.onPositive(new MaterialDialog.SingleButtonCallback() { |
||||
@Override |
||||
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { |
||||
Intent intent = new Intent(Utils.getApp(), RtkBaseCorrectActivity.class); |
||||
startActivity(intent); |
||||
} |
||||
}).onNeutral(new MaterialDialog.SingleButtonCallback() { |
||||
@Override |
||||
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { |
||||
GnssPosition.getInstance().setBaseMoveRemind(false); |
||||
} |
||||
}).show(); |
||||
} |
||||
} |
||||
|
||||
public void checkRtkLocation() { |
||||
if (Device.getInstance().deviceType != DeviceTypeEnum.DEVICE_TYPE_RTK) return; |
||||
if (((BaseApp) Utils.getApp()).avGeoPoint == null && GnssPosition.getInstance().validate) { |
||||
Blh blh = GnssPosition.getInstance().getWgs84Blh(); |
||||
if (!CUtil.isEqual(blh.getLatitude(), 0) && !CUtil.isEqual(blh.getLongitude(), 0)) { |
||||
((BaseApp) Utils.getApp()).avGeoPoint = new LCGeoPoint(blh.getLatitude(), blh.getLongitude()); |
||||
((BaseApp) Utils.getApp()).lastRTKLocation = ((BaseApp) Utils.getApp()).avGeoPoint.getLatitude() + "," + ((BaseApp) Utils.getApp()).avGeoPoint.getLongitude(); |
||||
Util.putPreference("lastRTKLocation", ((BaseApp) Utils.getApp()).lastRTKLocation); |
||||
} |
||||
} |
||||
if (GnssPosition.getInstance().getPosType() != GnssPosition.POS_TYPE_NONE//初始化时跳过
|
||||
&& cachedCoordinateSystemKt.isDataReady() && Device.getInstance().remindCentLngUnusual//已经提示过就不再提示
|
||||
&& Device.getInstance().deviceType == DeviceTypeEnum.DEVICE_TYPE_RTK//RTK时才提示
|
||||
&& Math.abs(GnssPosition.getInstance().getWgs84Blh().getLongitude() - cachedCoordinateSystemKt.coordinateSystem().centLng) > 3.0d) { |
||||
if (cenLngUnusualDialog == null || !cenLngUnusualDialog.isShowing()) { |
||||
if (ActivityUtils.getTopActivity() != null && !ActivityUtils.getTopActivity().isFinishing()) |
||||
cenLngUnusualDialog = new MaterialDialog.Builder(ActivityUtils.getTopActivity()).title(R.string.hint).content(getString(R.string.center_longitude_unusual) + getString(R.string.current_center_longitude) + ":" + CoordUtil.radianToDmsDoubleString(Math.toRadians(cachedCoordinateSystemKt.coordinateSystem().centLng), 6, false)).positiveText(R.string.confirm).onPositive(new MaterialDialog.SingleButtonCallback() { |
||||
@Override |
||||
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { |
||||
Device.getInstance().remindCentLngUnusual = false; |
||||
Util.putPreference("remindCentLngUnusual", Device.getInstance().remindCentLngUnusual); |
||||
} |
||||
}).show(); |
||||
} |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 连接设备成功后,启动相关服务,因为Ntrip与SN无关,可以在此执行,与SN相关的服务在RtkReceivedSerialNumberEvent事件后执行 |
||||
*/ |
||||
public void onDeviceConnectSuccess() { |
||||
if (deviceConnectingProgressDialog != null && deviceConnectingProgressDialog.isShowing()) { |
||||
deviceConnectingProgressDialog.dismiss(); |
||||
deviceConnectingProgressDialog = null; |
||||
} |
||||
if (Device.getInstance().deviceType == DeviceTypeEnum.DEVICE_TYPE_RTK) { |
||||
if (Device.getInstance().connectType == ConnectTypeEnum.CONNECT_TYPE_SPP || Device.getInstance().connectType == ConnectTypeEnum.CONNECT_TYPE_BLE) { |
||||
if (Gnss.getInstance().getDevice().getCurDataLink() == DataLinkModeEnum.PHONE) { |
||||
if (!Device.getInstance().isRtkInitDone()) { |
||||
Device.getInstance().rtkRunnableStart(); |
||||
Device.getInstance().rtkInit(); |
||||
} |
||||
if (Gnss.getInstance().getNetwork().getMode() == NetworkModeEnum.NTRIP) {//因为SDK与deviceID相关,所以在获取序列号后执行,而Ntrip启动是在连接成功后就可以
|
||||
EventBus.getDefault().post(new RtkStartNtripServiceEvent()); |
||||
ToastUtils.showShort(R.string.phone_network_diff_initialization); |
||||
} |
||||
} else { |
||||
if (!Device.getInstance().isRtkInitDone()) { |
||||
Device.getInstance().rtkRunnableStart(); |
||||
Device.getInstance().rtkInit(); |
||||
} |
||||
} |
||||
} else if (Device.getInstance().connectType == ConnectTypeEnum.CONNECT_TYPE_QXBT) { |
||||
if (!Device.getInstance().isRtkInitDone()) { |
||||
Device.getInstance().rtkRunnableStart(); |
||||
Device.getInstance().rtkInit(); |
||||
} |
||||
} else { |
||||
//手机定位或演示模式
|
||||
} |
||||
} else { |
||||
TotalStation.getInstance().runnableStart(); |
||||
TotalStation.getInstance().init(); |
||||
// if (((App) Utils.getApp()).isShowTsSetupStationOption) chooseSetupStationType();
|
||||
} |
||||
//记录用户联机时手机定位的大概位置
|
||||
if (ActivityCompat.checkSelfPermission(/*this*/context(), Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { |
||||
LocationManager mLocationManager = ((LocationManager) context().getSystemService(Context.LOCATION_SERVICE)); |
||||
if (mLocationManager != null) { |
||||
List<String> providers = mLocationManager.getProviders(true); |
||||
if (providers.contains(LocationManager.GPS_PROVIDER)) { |
||||
Location location = mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); |
||||
if (location != null) { |
||||
((BaseApp) Utils.getApp()).lastPhoneLocation = location.getLatitude() + "," + location.getLongitude(); |
||||
Util.putPreference("lastPhoneLocation", ((BaseApp) Utils.getApp()).lastPhoneLocation); |
||||
} |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 获取SN号后启动与SN相关的服务 |
||||
* |
||||
* @param event |
||||
*/ |
||||
@Subscribe(threadMode = ThreadMode.MAIN) |
||||
public void onMessageEvent(RtkReceivedSerialNumberEvent event) {//因为SDK与deviceID相关,所以在此执行,而Ntrip启动是在连接成功后就可以
|
||||
if (Gnss.getInstance().getDevice().getCurDataLink() == DataLinkModeEnum.PHONE) { |
||||
if (Gnss.getInstance().getNetwork().getMode() == NetworkModeEnum.QXWZ_SDK) { |
||||
EventBus.getDefault().post(new RtkStartQxwzSdkServiceEvent()); |
||||
ToastUtils.showShort(R.string.qxwz_service_initialization); |
||||
} else if (Gnss.getInstance().getNetwork().getMode() == NetworkModeEnum.CMCC_SDK) { |
||||
EventBus.getDefault().post(new RtkStartCmccServiceEvent()); |
||||
ToastUtils.showShort(R.string.cmcc_service_initialization); |
||||
} else if (Gnss.getInstance().getNetwork().getMode() == NetworkModeEnum.SIXENTS_SDK) { |
||||
EventBus.getDefault().post(new RtkStartSixentsServiceEvent()); |
||||
ToastUtils.showShort(R.string.sixents_service_initialization); |
||||
} else if (Gnss.getInstance().getNetwork().getMode() == NetworkModeEnum.LUOWANG_SDK) { |
||||
EventBus.getDefault().post(new RtkStartLuoWangServiceEvent()); |
||||
ToastUtils.showShort(R.string.luowang_service_initialization); |
||||
} |
||||
} |
||||
} |
||||
|
||||
public void onDeviceConnectFailed() { |
||||
if (deviceConnectingProgressDialog != null && deviceConnectingProgressDialog.isShowing()) { |
||||
deviceConnectingProgressDialog.dismiss(); |
||||
deviceConnectingProgressDialog = null; |
||||
ToastUtils.showShort(R.string.device_connect_failed); |
||||
} |
||||
} |
||||
|
||||
public void onDeviceConnectLost() { |
||||
ToastUtils.showShort(R.string.device_connect_lost); |
||||
} |
||||
|
||||
public void onRequestConnect() { |
||||
if (deviceConnectingProgressDialog == null || !deviceConnectingProgressDialog.isShowing()) { |
||||
deviceConnectingProgressDialog = new BCProgressDialog.Builder(ActivityUtils.getTopActivity()).title(R.string.connect_device).build(); |
||||
deviceConnectingProgressDialog.show(); |
||||
} |
||||
} |
||||
|
||||
@Subscribe(threadMode = ThreadMode.MAIN) |
||||
public void onMessageEvent(TsUpdateStatusEvent event) { |
||||
// Fragment currentFragment = MainFragmentUtil.getCurrentFragment(/*this*/activity(), MainActivity.mainContainer);
|
||||
// if (currentFragment instanceof TcsAutoScan2DxfFragment) {
|
||||
// ((TcsAutoScan2DxfFragment) currentFragment).updateStatus(event.getStatus());
|
||||
// }
|
||||
} |
||||
|
||||
@Subscribe(threadMode = ThreadMode.MAIN) |
||||
public void onMessageEvent(RtkStartNtripServiceEvent event) { |
||||
// CorsUseLogManager.getInstance().logEvent("MainActivity-onMessageEvent-StartNtripServiceEvent");
|
||||
ServiceUtils.startService(NtripService.class); |
||||
} |
||||
|
||||
@Subscribe(threadMode = ThreadMode.MAIN) |
||||
public void onMessageEvent(RtkStartQxwzSdkServiceEvent event) { |
||||
// CorsUseLogManager.getInstance().logEvent("MainActivity-onMessageEvent-StartQxwzServiceEvent");
|
||||
ServiceUtils.startService(QxwzSdkService.class); |
||||
} |
||||
|
||||
@Subscribe(threadMode = ThreadMode.MAIN) |
||||
public void onMessageEvent(RtkStartSixentsServiceEvent event) { |
||||
// CorsUseLogManager.getInstance().logEvent("MainActivity-onMessageEvent-StartSixentsServiceEvent");
|
||||
ServiceUtils.startService(SixentsSdkService.class); |
||||
} |
||||
|
||||
@Subscribe(threadMode = ThreadMode.MAIN) |
||||
public void onMessageEvent(RtkStartCmccServiceEvent event) { |
||||
// CorsUseLogManager.getInstance().logEvent("MainActivity-onMessageEvent-StartCmccServiceEvent");
|
||||
ServiceUtils.startService(CmccSdkService.class); |
||||
} |
||||
|
||||
@Subscribe(threadMode = ThreadMode.MAIN) |
||||
public void onMessageEvent(RtkStartLuoWangServiceEvent event) { |
||||
// CorsUseLogManager.getInstance().logEvent("MainActivity-onMessageEvent-StartLuoWangServiceEvent");
|
||||
ServiceUtils.startService(LuoWangSdkService.class); |
||||
} |
||||
|
||||
@Subscribe(threadMode = ThreadMode.MAIN) |
||||
public void onMessageEvent(RtkStopNtripSDKEvent event) { |
||||
ServiceUtils.stopService(NtripService.class); |
||||
ServiceUtils.stopService(QxwzSdkService.class); |
||||
ServiceUtils.stopService(CmccSdkService.class); |
||||
ServiceUtils.stopService(LuoWangSdkService.class); |
||||
ServiceUtils.stopService(SixentsSdkService.class); |
||||
Device.getInstance().oneKeyFixValid = false; |
||||
} |
||||
|
||||
@Subscribe(threadMode = ThreadMode.MAIN) |
||||
public void onMessageEvent(RtkCmdAnswerEvent event) { |
||||
Device.getInstance().rtkProcessCmdAnswer(event.getSentence()); |
||||
} |
||||
|
||||
@Subscribe(threadMode = ThreadMode.MAIN) |
||||
public void onMessageEvent(RtkCmdQueueSendEvent event) { |
||||
Device.getInstance().rtkSendCommand(event.getQueue()); |
||||
} |
||||
|
||||
@Subscribe(threadMode = ThreadMode.MAIN) |
||||
public void onMessageEvent(RtkCmdUiEvent event) { |
||||
if (event.getContent() == null) { |
||||
Device.getInstance().rtkUpdateUiMessage(event.getWhat()); |
||||
} else { |
||||
Device.getInstance().rtkUpdateUiMessage(event.getWhat(), event.getContent()); |
||||
} |
||||
} |
||||
|
||||
// /**
|
||||
// * 选择设站模式
|
||||
// */
|
||||
// private void chooseSetupStationType() {
|
||||
// if (((App) Utils.getApp()).lastTsSetupStationType < 0 || ((App) Utils.getApp()).lastTsSetupStationType > 4)
|
||||
// ((App) Utils.getApp()).lastTsSetupStationType = 0;
|
||||
// new MaterialDialog.Builder(ActivityUtils.getTopActivity())
|
||||
// .title(R.string.total_station_setup_type)
|
||||
// .items(R.array.setup_station_type_with_current)
|
||||
// .itemsCallbackSingleChoice(((App) Utils.getApp()).lastTsSetupStationType, new MaterialDialog.ListCallbackSingleChoice() {
|
||||
// @Override
|
||||
// public boolean onSelection(MaterialDialog dialog, View itemView, int which, CharSequence text) {
|
||||
// switch (which) {
|
||||
// case 0:
|
||||
// startActivity(new Intent(Utils.getApp(), SetupStationCurrentActivity.class));
|
||||
// break;
|
||||
// case 1:
|
||||
// TsConfig.getInstance().setSetupStationMethod(SetupStationMethodEnum.TS_DONE_SKIP);
|
||||
// ToastUtils.showShort(R.string.apply_success);
|
||||
// break;
|
||||
// case 2:
|
||||
// TsConfig.getInstance().setSetupStationMethod(SetupStationMethodEnum.TS_DONE_INPUT_INTO_APP);
|
||||
// startActivity(new Intent(Utils.getApp(), SetupStationInputActivity.class));
|
||||
// break;
|
||||
// case 3:
|
||||
// TsConfig.getInstance().setSetupStationMethod(SetupStationMethodEnum.APP_SETUP_KNOWN_BACK_SIGHT);
|
||||
// startActivity(new Intent(Utils.getApp(), SetupStationKnownBackSightActivity.class));
|
||||
// break;
|
||||
// case 4:
|
||||
// TsConfig.getInstance().setSetupStationMethod(SetupStationMethodEnum.APP_SETUP_RESECTION);
|
||||
// startActivity(new Intent(Utils.getApp(), SetupStationResectionActivity.class));
|
||||
// break;
|
||||
// }
|
||||
// TsConfig.getInstance().save();
|
||||
// ((App) Utils.getApp()).lastTsSetupStationType = which;
|
||||
// Util.putPreference("lastTsSetupStationType", ((App) Utils.getApp()).lastTsSetupStationType);
|
||||
// return false;
|
||||
// }
|
||||
// }).positiveText(R.string.next)
|
||||
// .neutralText(R.string.not_show_again)
|
||||
// .onNeutral(new MaterialDialog.SingleButtonCallback() {
|
||||
// @Override
|
||||
// public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
|
||||
// Util.putPreference("key_is_show_ts_setup_station_option", false);
|
||||
// ((App) Utils.getApp()).isShowTsSetupStationOption = false;
|
||||
// new MaterialDialog.Builder(ActivityUtils.getTopActivity())
|
||||
// .content(R.string.set_show_ts_setup_station_option_in_setting)
|
||||
// .positiveText(R.string.i_know)
|
||||
// .show();
|
||||
// }
|
||||
// }).show();
|
||||
// }
|
||||
|
||||
/** |
||||
* 连接蓝牙先请求打开定位权限 |
||||
*/ |
||||
public void requestBluetoothPermission() { |
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S && XXPermissions.isGranted(ActivityUtils.getTopActivity(), Permission.BLUETOOTH_CONNECT)) {//S及以后不需要位置权限
|
||||
checkConnectLast(); |
||||
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {//S及以后不需要位置权限,此时只需请求connect权限
|
||||
if (XXPermissions.isGranted(ActivityUtils.getTopActivity(), Permission.BLUETOOTH_CONNECT)) { |
||||
checkConnectLast(); |
||||
} else { |
||||
new MaterialDialog.Builder(ActivityUtils.getTopActivity()) |
||||
.title(R.string.location_permission) |
||||
.content(R.string.bluetooth_need_location_permission) |
||||
.canceledOnTouchOutside(false) |
||||
.positiveText(R.string.to_allow) |
||||
.negativeText(R.string.refuse) |
||||
.onPositive((dialog, which) -> { |
||||
XXPermissions.with(ActivityUtils.getTopActivity()) |
||||
.permission(Permission.BLUETOOTH_CONNECT) |
||||
.request(new OnPermissionCallback() { |
||||
@Override |
||||
public void onGranted(List<String> permissions, boolean all) { |
||||
checkConnectLast(); |
||||
} |
||||
|
||||
@Override |
||||
public void onDenied(List<String> permissions, boolean never) { |
||||
if (never) { |
||||
ToastUtils.showLong(R.string.bluetooth_connect_need_permission); |
||||
XXPermissions.startPermissionActivity(ActivityUtils.getTopActivity(), permissions, new OnPermissionPageCallback() { |
||||
@Override |
||||
public void onGranted() { |
||||
requestBluetoothPermission(); |
||||
} |
||||
|
||||
@Override |
||||
public void onDenied() { |
||||
ToastUtils.showLong(R.string.bluetooth_connect_need_permission); |
||||
} |
||||
}); |
||||
} else { |
||||
requestBluetoothPermission(); |
||||
} |
||||
} |
||||
}); |
||||
}) |
||||
.onNegative((dialog, which) -> { |
||||
|
||||
}).show(); |
||||
} |
||||
} else {//S以下,需要请求两个权限,位置和Connect权限
|
||||
if (XXPermissions.isGranted(ActivityUtils.getTopActivity(), Permission.ACCESS_FINE_LOCATION, Permission.BLUETOOTH_CONNECT)) { |
||||
checkConnectLast(); |
||||
} else { |
||||
new MaterialDialog.Builder(ActivityUtils.getTopActivity()) |
||||
.title(R.string.location_permission) |
||||
.content(R.string.bluetooth_need_location_permission) |
||||
.canceledOnTouchOutside(false) |
||||
.positiveText(R.string.to_allow) |
||||
.negativeText(R.string.refuse) |
||||
.onPositive((dialog, which) -> { |
||||
XXPermissions.with(ActivityUtils.getTopActivity()) |
||||
.permission(Permission.ACCESS_FINE_LOCATION, Permission.BLUETOOTH_CONNECT) |
||||
.request(new OnPermissionCallback() { |
||||
@Override |
||||
public void onGranted(List<String> permissions, boolean all) { |
||||
if (all) { |
||||
checkConnectLast(); |
||||
} else { |
||||
requestBluetoothPermission(); |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public void onDenied(List<String> permissions, boolean never) { |
||||
if (never) { |
||||
ToastUtils.showLong(R.string.bluetooth_connection_requires_positioning_permission_please_turn_it_on_manually); |
||||
XXPermissions.startPermissionActivity(ActivityUtils.getTopActivity(), permissions, new OnPermissionPageCallback() { |
||||
@Override |
||||
public void onGranted() { |
||||
requestBluetoothPermission(); |
||||
} |
||||
|
||||
@Override |
||||
public void onDenied() { |
||||
ToastUtils.showLong(R.string.bluetooth_connect_need_permission); |
||||
} |
||||
}); |
||||
} else { |
||||
requestBluetoothPermission(); |
||||
} |
||||
} |
||||
}); |
||||
}) |
||||
.onNegative((dialog, which) -> { |
||||
|
||||
}).show(); |
||||
} |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 检查权限 |
||||
*/ |
||||
public void requestPhonePermission() { |
||||
if (!XXPermissions.isGranted(ActivityUtils.getTopActivity(), Permission.READ_PHONE_STATE)) { |
||||
long lastReadPhoneStateDeniedTime = Util.getLongPreference("lastReadPhoneStateDeniedTime", 0L); |
||||
if (System.currentTimeMillis() - lastReadPhoneStateDeniedTime > 48 * 60 * 60 * 1000L) {//每48小时提示一次
|
||||
new MaterialDialog.Builder(ActivityUtils.getTopActivity()) |
||||
.title(R.string.mobile_phone_permissions) |
||||
.content(R.string.verify_imei_imsi_code_to_prevent_account_theft) |
||||
.canceledOnTouchOutside(false) |
||||
.positiveText(R.string.to_allow) |
||||
.negativeText(R.string.refuse) |
||||
.onPositive(new MaterialDialog.SingleButtonCallback() { |
||||
@Override |
||||
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { |
||||
XXPermissions.with(ActivityUtils.getTopActivity()) |
||||
.permission(Permission.READ_PHONE_STATE) |
||||
.request(new OnPermissionCallback() { |
||||
@Override |
||||
public void onGranted(List<String> permissions, boolean all) { |
||||
} |
||||
|
||||
@Override |
||||
public void onDenied(List<String> permissions, boolean never) { |
||||
if (never) { |
||||
ToastUtils.showShort(R.string.manually_enable_the_phone_state_permission_to_bind_hardware_devices); |
||||
} |
||||
Util.putPreference("lastReadPhoneStateDeniedTime", System.currentTimeMillis()); |
||||
} |
||||
}); |
||||
} |
||||
}) |
||||
.onNegative(new MaterialDialog.SingleButtonCallback() { |
||||
@Override |
||||
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { |
||||
Util.putPreference("lastReadPhoneStateDeniedTime", System.currentTimeMillis()); |
||||
} |
||||
}).show(); |
||||
} |
||||
} |
||||
} |
||||
|
||||
public void showRemindConnectDeviceDialog() { |
||||
new MaterialDialog.Builder(ActivityUtils.getTopActivity()) |
||||
.title(R.string.hint) |
||||
.content(R.string.no_instrument_connected) |
||||
.positiveText(R.string.connect) |
||||
.onPositive(new MaterialDialog.SingleButtonCallback() { |
||||
@Override |
||||
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { |
||||
requestBluetoothPermission(); |
||||
} |
||||
}) |
||||
.negativeText(R.string.cancel) |
||||
.show(); |
||||
} |
||||
|
||||
|
||||
public void checkConnectLast() { |
||||
if (Device.getInstance().connectType == ConnectTypeEnum.CONNECT_TYPE_SPP) { |
||||
if (!ServiceUtils.isServiceRunning(BTService.class.getName()) && XXPermissions.isGranted(activity(), Permission.BLUETOOTH_CONNECT)) { |
||||
ServiceUtils.startService(BTService.class); |
||||
} |
||||
} else if (Device.getInstance().connectType == ConnectTypeEnum.CONNECT_TYPE_BLE) { |
||||
if (!ServiceUtils.isServiceRunning(BleService.class.getName()) && XXPermissions.isGranted(activity(), Permission.BLUETOOTH_CONNECT)) { |
||||
ServiceUtils.startService(BleService.class); |
||||
} |
||||
} else if (Device.getInstance().connectType == ConnectTypeEnum.CONNECT_TYPE_QXBT) { |
||||
//千寻RTK需要GnssServer连接蓝牙
|
||||
} else if (Device.getInstance().connectType == ConnectTypeEnum.CONNECT_TYPE_HOTSPOT) { |
||||
if (!ServiceUtils.isServiceRunning(TsSocketService.class.getName())) { |
||||
ServiceUtils.startService(TsSocketService.class); |
||||
} |
||||
} else if (Device.getInstance().connectType == ConnectTypeEnum.CONNECT_TYPE_OTG) { |
||||
if (!ServiceUtils.isServiceRunning(OTGCommService.class.getName())) { |
||||
ServiceUtils.startService(OTGCommService.class); |
||||
} |
||||
} else if (Device.getInstance().connectType == ConnectTypeEnum.CONNECT_TYPE_TPCOM) { |
||||
if (!ServiceUtils.isServiceRunning(TsSocketService.class.getName())) { |
||||
ServiceUtils.startService(TsSocketService.class); |
||||
} |
||||
} else if (Device.getInstance().connectType == ConnectTypeEnum.CONNECT_TYPE_PHONE_LOCATION) { |
||||
if (!ServiceUtils.isServiceRunning(NativePositioningService.class.getName())) { |
||||
ServiceUtils.startService(NativePositioningService.class); |
||||
ThreadPoolUtil.execute(() -> Device.getInstance().requestConnect(), 500); |
||||
} |
||||
} else if (Device.getInstance().connectType == ConnectTypeEnum.CONNECT_TYPE_EMULATOR) { |
||||
if (!ServiceUtils.isServiceRunning(EmulatorService.class.getName())) { |
||||
ServiceUtils.startService(EmulatorService.class); |
||||
} |
||||
} |
||||
if (!Device.getInstance().isDeviceConnected()) { |
||||
if (!"".equals(Device.getInstance().deviceBlueName)) { |
||||
String instrumentInfo = ActivityUtils.getTopActivity().getString(R.string.instrument_name) + ":" + Device.getInstance().deviceBlueName + "\n" + ActivityUtils.getTopActivity().getString(R.string.instrument_type_name) + ":" + Device.getInstance().deviceBrand; |
||||
new MaterialDialog.Builder(ActivityUtils.getTopActivity()) |
||||
.title(R.string.quick_connect) |
||||
.content(instrumentInfo) |
||||
.positiveText(Device.getInstance().deviceType == DeviceTypeEnum.DEVICE_TYPE_TS ? R.string.connect_and_setup_station : R.string.connect) |
||||
.negativeText(R.string.config) |
||||
.neutralText(R.string.switch_instrument) |
||||
.onPositive(new MaterialDialog.SingleButtonCallback() { |
||||
@Override |
||||
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { |
||||
if (Device.getInstance().connectType == ConnectTypeEnum.CONNECT_TYPE_HOTSPOT) { |
||||
startHotspotComm(); |
||||
} else { |
||||
if (DeviceUtil.checkIfNeedGnssServer()) { |
||||
if (DeviceUtil.checkIfGnssServerReady(ActivityUtils.getTopActivity())) {//先检查如果是千寻rtk,是否安装并打开了GnssServier
|
||||
gnssServerReady = true; |
||||
} |
||||
} else { |
||||
Device.getInstance().requestConnect(); |
||||
ToastUtils.showShort(R.string.connecting_please_wait); |
||||
} |
||||
} |
||||
} |
||||
}).onNegative(new MaterialDialog.SingleButtonCallback() { |
||||
@Override |
||||
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { |
||||
Intent intent; |
||||
if (Device.getInstance().deviceType == DeviceTypeEnum.DEVICE_TYPE_TS) { |
||||
intent = new Intent(ActivityUtils.getTopActivity(), ConnectTSActivity.class); |
||||
} else { |
||||
intent = new Intent(ActivityUtils.getTopActivity(), ConnectRtkActivity.class); |
||||
} |
||||
intent.putExtra("customChannel", AppChannel.customChannel); |
||||
ActivityUtils.getTopActivity().startActivity(intent); |
||||
} |
||||
}).onNeutral(new MaterialDialog.SingleButtonCallback() { |
||||
@Override |
||||
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { |
||||
chooseInstrumentType(); |
||||
} |
||||
}).show(); |
||||
} else { |
||||
chooseInstrumentType(); |
||||
} |
||||
} else { |
||||
if (Device.getInstance().connectType == ConnectTypeEnum.CONNECT_TYPE_PHONE_LOCATION) { |
||||
ToastUtils.showShort(R.string.native_rtk_is_running); |
||||
} else { |
||||
Intent intent; |
||||
if (Device.getInstance().deviceType == DeviceTypeEnum.DEVICE_TYPE_TS) { |
||||
intent = new Intent(ActivityUtils.getTopActivity(), ConnectTSActivity.class); |
||||
} else { |
||||
intent = new Intent(ActivityUtils.getTopActivity(), ConnectRtkActivity.class); |
||||
} |
||||
intent.putExtra("customChannel", AppChannel.customChannel); |
||||
ActivityUtils.getTopActivity().startActivity(intent); |
||||
} |
||||
} |
||||
|
||||
} |
||||
|
||||
public void checkGnssServerReady() { |
||||
if (gnssServerReady) { |
||||
new MaterialDialog.Builder(ActivityUtils.getTopActivity()) |
||||
.title(R.string.hint) |
||||
.content(R.string.you_need_start_gnss_server_for_communication) |
||||
.positiveText(R.string.started).onPositive(new MaterialDialog.SingleButtonCallback() { |
||||
@Override |
||||
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { |
||||
if (RTK.getInstance() instanceof QxwzRTK) { |
||||
Device.getInstance().connectType = ConnectTypeEnum.CONNECT_TYPE_QXBT; |
||||
ServiceUtils.startService(QxwzMessengerService.class); |
||||
} |
||||
} |
||||
}).negativeText(R.string.cancel).dismissListener(new DialogInterface.OnDismissListener() { |
||||
@Override |
||||
public void onDismiss(DialogInterface dialog) { |
||||
gnssServerReady = false; |
||||
} |
||||
}).show(); |
||||
} |
||||
} |
||||
|
||||
private void chooseInstrumentType() { |
||||
new MaterialDialog.Builder(ActivityUtils.getTopActivity()) |
||||
.title(R.string.choose_instrument_type) |
||||
.items(new String[]{ActivityUtils.getTopActivity().getString(R.string.total_station), ActivityUtils.getTopActivity().getString(R.string.rtk)}) |
||||
.itemsCallback(new MaterialDialog.ListCallback() { |
||||
@Override |
||||
public void onSelection(MaterialDialog dialog, View itemView, int which, CharSequence text) { |
||||
switch (which) { |
||||
case 0: |
||||
ConnectTSActivity.start(); |
||||
break; |
||||
case 1: |
||||
ConnectRtkActivity.start(); |
||||
break; |
||||
} |
||||
} |
||||
}).show(); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 开启wifi通信 |
||||
*/ |
||||
private void startHotspotComm() { |
||||
if (!ValidateUtil.isIPAddress(TsConfig.getInstance().getIp())) { |
||||
ToastUtils.showShort(R.string.please_input_correct_ip); |
||||
return; |
||||
} |
||||
if (TsConfig.getInstance().getPort() < 1024 || TsConfig.getInstance().getPort() > 65535) { |
||||
ToastUtils.showShort(R.string.please_input_correct_port); |
||||
return; |
||||
} |
||||
if (DeviceUtil.isWifiApOpen()) { |
||||
ServiceUtils.stopService(EmulatorService.class); |
||||
ServiceUtils.stopService(LocationService.class); |
||||
ServiceUtils.stopService(NativePositioningService.class); |
||||
ServiceUtils.stopService(BTService.class); |
||||
ServiceUtils.stopService(BleService.class); |
||||
ServiceUtils.startService(TsSocketService.class); |
||||
ThreadPoolUtil.execute(new Runnable() { |
||||
@Override |
||||
public void run() { |
||||
Device.getInstance().requestConnect(); |
||||
} |
||||
}, 200); |
||||
} else { |
||||
ToastUtils.showShort(R.string.please_open_hotspot_first); |
||||
//打开网络共享与热点设置页面
|
||||
if (RomUtil.isOppo() || RomUtil.isLenove() || RomUtil.isGionee()) { |
||||
//OPPO系统系统特殊,会让在Manifest.xml声明Settings$TetherSettingsActivity,现在让用户自己找热点界面,并开启
|
||||
ToastUtils.showShort(R.string.find_tether_setting_and_open); |
||||
ActivityUtils.getTopActivity().startActivity(new Intent(Settings.ACTION_SETTINGS)); |
||||
} else { |
||||
Intent intent = new Intent(); |
||||
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); |
||||
ComponentName comp = new ComponentName("com.android.settings", "com.android.settings.Settings$TetherSettingsActivity"); |
||||
intent.setComponent(comp); |
||||
ActivityUtils.getTopActivity().startActivity(intent); |
||||
} |
||||
} |
||||
} |
||||
} |
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,65 @@ |
||||
package com.project.survey.util |
||||
|
||||
import com.bingce.coordlib.model.CoordinateSystem |
||||
import com.bingce.data.base.user.UserConfig |
||||
import com.bingce.data.base.user.UserConfigConstants |
||||
import com.bingce.data.database.AppDataBase |
||||
import com.bingce.data.database.KeyValueDb |
||||
import com.bingce.data.database.ProjectDb |
||||
import com.bingce.data.surveyor.designdata.kv.KeyValueConstants |
||||
import com.bingce.data.surveyor.designdata.kv.KeyValueRecord |
||||
import com.bingce.data.surveyor.designdata.project.ProjectRecord |
||||
import com.bingce.utils.ThreadPoolUtil |
||||
import com.project.survey.App |
||||
import com.project.survey.constants.SPConstants |
||||
import java.util.Date |
||||
|
||||
object MockUtil { |
||||
|
||||
val isTest = false |
||||
|
||||
fun login(){ |
||||
SPUtils.put(SPConstants.ACCOUNT, "zhangsan") |
||||
SPUtils.put(SPConstants.TOKEN, "1234567890") |
||||
val personId = "123456" |
||||
SPUtils.put(SPConstants.PERSON_ID, personId) |
||||
SPUtils.put(SPConstants.MOBILE_PHONE, "15911112222") |
||||
|
||||
// 进入项目,设置当前项目 |
||||
val projectId = "111111" |
||||
SPUtils.put(SPConstants.PROJECT_ID, projectId) |
||||
|
||||
// 存储配置--当前项目 |
||||
ThreadPoolUtil.execute { |
||||
var userConfig = AppDataBase.getInstance().userConfigDao().findByLeanCloudUserId(personId) |
||||
if (userConfig == null) { //创建第一个用户配置--使用默认数据目录 |
||||
userConfig = UserConfig.newItem( |
||||
personId, |
||||
UserConfigConstants.VALUE_DEFAULT_DB_FOLDER |
||||
) |
||||
AppDataBase.getInstance().userConfigDao().save(userConfig) |
||||
} |
||||
|
||||
//存储新的项目 |
||||
ProjectDb.getInstance().save( |
||||
ProjectRecord(projectId, "哈哈工程", |
||||
CoordinateSystem.newCoordinateSystem(App.instance.applicationContext), Date().time).apply { |
||||
author = "张哈哈" |
||||
} |
||||
) |
||||
var currentProjectConfig = |
||||
KeyValueDb.getInstance().findData(KeyValueConstants.KEY_CURRENT_PROJECT_ID) |
||||
if (currentProjectConfig != null) { |
||||
currentProjectConfig.value = projectId |
||||
} else { |
||||
currentProjectConfig = KeyValueRecord(KeyValueConstants.KEY_CURRENT_PROJECT_ID, projectId) |
||||
} |
||||
KeyValueDb.getInstance().save(currentProjectConfig) |
||||
} |
||||
|
||||
} |
||||
|
||||
fun logout(){ |
||||
|
||||
} |
||||
} |
Loading…
Reference in new issue