| | |
| | | import android.content.Context; |
| | | import android.content.Intent; |
| | | import android.content.res.Resources; |
| | | import android.graphics.drawable.Drawable; |
| | | import android.os.Bundle; |
| | | import android.text.TextUtils; |
| | | import android.util.Log; |
| | | import android.util.Pair; |
| | | import android.view.LayoutInflater; |
| | | import android.view.View; |
| | | import android.view.ViewGroup; |
| | |
| | | |
| | | import androidx.annotation.NonNull; |
| | | import androidx.annotation.Nullable; |
| | | import androidx.core.content.ContextCompat; |
| | | import androidx.lifecycle.Observer; |
| | | |
| | | import com.dayu.pipirrapp.MyApplication; |
| | |
| | | import com.dayu.pipirrapp.utils.WebViewUtils; |
| | | import com.dayu.pipirrapp.view.ConfirmDialog; |
| | | import com.dayu.pipirrapp.view.TipUtil; |
| | | import com.example.expand_button.ExpandButton; |
| | | import com.hjq.permissions.OnPermissionCallback; |
| | | import com.hjq.permissions.Permission; |
| | | import com.hjq.permissions.XXPermissions; |
| | |
| | | import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; |
| | | import io.reactivex.rxjava3.disposables.CompositeDisposable; |
| | | import io.reactivex.rxjava3.schedulers.Schedulers; |
| | | import kotlin.Triple; |
| | | |
| | | /** |
| | | * author: zuo |
| | |
| | | private void loadLocalData() { |
| | | // 异步加载中心点数据 |
| | | compositeDisposable.add( |
| | | DaoSingleton.getAsynchInstance(this.getContext()).centerPointDao().findFirst() |
| | | .subscribeOn(Schedulers.io()) |
| | | .observeOn(AndroidSchedulers.mainThread()) |
| | | .subscribe(result -> { |
| | | centerPointBean = result; |
| | | if (centerPointBean == null) { |
| | | getCenterPoint(); |
| | | } else { |
| | | jumpCenterPoint(); |
| | | } |
| | | }, throwable -> { |
| | | Log.e(TAG, "Load centerPoint error: " + throwable); |
| | | getCenterPoint(); |
| | | }, () -> { |
| | | // 当Maybe为空时调用 |
| | | getCenterPoint(); |
| | | }) |
| | | DaoSingleton.getAsynchInstance(this.getContext()).centerPointDao().findFirst() |
| | | .subscribeOn(Schedulers.io()) |
| | | .observeOn(AndroidSchedulers.mainThread()) |
| | | .subscribe(result -> { |
| | | centerPointBean = result; |
| | | if (centerPointBean == null) { |
| | | getCenterPoint(); |
| | | } else { |
| | | jumpCenterPoint(); |
| | | } |
| | | }, throwable -> { |
| | | Log.e(TAG, "Load centerPoint error: " + throwable); |
| | | getCenterPoint(); |
| | | }, () -> { |
| | | // 当Maybe为空时调用 |
| | | getCenterPoint(); |
| | | }) |
| | | ); |
| | | |
| | | // 异步加载取水口数据 |
| | | compositeDisposable.add( |
| | | DaoSingleton.getAsynchInstance(this.getContext()).markerDao().getAll() |
| | | .subscribeOn(Schedulers.io()) |
| | | .observeOn(AndroidSchedulers.mainThread()) |
| | | .subscribe(markers -> { |
| | | if (markers == null || markers.isEmpty()) { |
| | | getMarkerData(); |
| | | } else { |
| | | for (MarkerBean marker : markers) { |
| | | markerBeanSet.put(marker.getId(), marker); |
| | | setMapMarker(marker); |
| | | } |
| | | } |
| | | }, throwable -> { |
| | | Log.e(TAG, "Load markers error: " + throwable.getMessage()); |
| | | getMarkerData(); |
| | | }, () -> { |
| | | // 当Maybe为空时调用 |
| | | getMarkerData(); |
| | | }) |
| | | DaoSingleton.getAsynchInstance(this.getContext()).markerDao().getAll() |
| | | .subscribeOn(Schedulers.io()) |
| | | .observeOn(AndroidSchedulers.mainThread()) |
| | | .subscribe(markers -> { |
| | | if (markers == null || markers.isEmpty()) { |
| | | getMarkerData(); |
| | | } else { |
| | | for (MarkerBean marker : markers) { |
| | | markerBeanSet.put(marker.getId(), marker); |
| | | setMapMarker(marker); |
| | | } |
| | | } |
| | | }, throwable -> { |
| | | Log.e(TAG, "Load markers error: " + throwable.getMessage()); |
| | | getMarkerData(); |
| | | }, () -> { |
| | | // 当Maybe为空时调用 |
| | | getMarkerData(); |
| | | }) |
| | | ); |
| | | |
| | | // 异步加载分水房数据 |
| | | compositeDisposable.add( |
| | | DaoSingleton.getAsynchInstance(this.getContext()).divideDao().getAll() |
| | | .subscribeOn(Schedulers.io()) |
| | | .observeOn(AndroidSchedulers.mainThread()) |
| | | .subscribe(divides -> { |
| | | if (divides == null || divides.isEmpty()) { |
| | | getDivideList(); |
| | | } else { |
| | | for (DivideBean divide : divides) { |
| | | divideBeanMap.put(divide.getId(), divide); |
| | | setMapDivide(divide); |
| | | } |
| | | } |
| | | }, throwable -> { |
| | | Log.e(TAG, "Load divides error: " + throwable.getMessage()); |
| | | getDivideList(); |
| | | }, () -> { |
| | | // 当Maybe为空时调用 |
| | | getDivideList(); |
| | | }) |
| | | DaoSingleton.getAsynchInstance(this.getContext()).divideDao().getAll() |
| | | .subscribeOn(Schedulers.io()) |
| | | .observeOn(AndroidSchedulers.mainThread()) |
| | | .subscribe(divides -> { |
| | | if (divides == null || divides.isEmpty()) { |
| | | getDivideList(); |
| | | } else { |
| | | for (DivideBean divide : divides) { |
| | | divideBeanMap.put(divide.getId(), divide); |
| | | setMapDivide(divide); |
| | | } |
| | | } |
| | | }, throwable -> { |
| | | Log.e(TAG, "Load divides error: " + throwable.getMessage()); |
| | | getDivideList(); |
| | | }, () -> { |
| | | // 当Maybe为空时调用 |
| | | getDivideList(); |
| | | }) |
| | | ); |
| | | } |
| | | |
| | |
| | | |
| | | // 使用 CompositeDisposable 管理数据库插入操作 |
| | | compositeDisposable.add( |
| | | DaoSingleton.getAsynchInstance(MapFragment.this.getContext()).markerDao().insertAll(markerBeans) |
| | | .subscribeOn(Schedulers.io()) |
| | | .observeOn(AndroidSchedulers.mainThread()) |
| | | .subscribe( |
| | | () -> { |
| | | // 插入成功 |
| | | Log.i("mWebView", "数据插入成功"); |
| | | }, |
| | | throwable -> { |
| | | // 插入失败 |
| | | Log.e("mWebView", "数据插入失败: " + throwable.getMessage()); |
| | | } |
| | | ) |
| | | DaoSingleton.getAsynchInstance(MapFragment.this.getContext()).markerDao().insertAll(markerBeans) |
| | | .subscribeOn(Schedulers.io()) |
| | | .observeOn(AndroidSchedulers.mainThread()) |
| | | .subscribe( |
| | | () -> { |
| | | // 插入成功 |
| | | Log.i("mWebView", "数据插入成功"); |
| | | }, |
| | | throwable -> { |
| | | // 插入失败 |
| | | Log.e("mWebView", "数据插入失败: " + throwable.getMessage()); |
| | | } |
| | | ) |
| | | ); |
| | | } |
| | | |
| | |
| | | Intent issue = new Intent(MapFragment.this.getActivity(), AddIssueActivity.class); |
| | | MapFragment.this.getActivity().startActivity(issue); |
| | | }); |
| | | binding.expandButton.setLegendsArray(new Triple<>( |
| | | ContextCompat.getDrawable(requireContext(), R.drawable.marker_blue), |
| | | ContextCompat.getDrawable(requireContext(), R.drawable.marker_unselected), |
| | | "取水口" |
| | | ), |
| | | new Triple<>( |
| | | ContextCompat.getDrawable(requireContext(), R.drawable.divide_home_blue), |
| | | ContextCompat.getDrawable(requireContext(), R.drawable.divide_home_unselected), |
| | | "分水房" |
| | | )); |
| | | binding.expandButton.setOnLegendItemClickListener((position, isSelected) -> { |
| | | switch (position) { |
| | | case 0: |
| | | showMarkers(isSelected); |
| | | break; |
| | | case 1: |
| | | showDivideMarkers(isSelected); |
| | | break; |
| | | |
| | | |
| | | } |
| | | }); |
| | | } |
| | | |
| | | /** |
| | |
| | | setMapDivide(divideBean); |
| | | divideBeans.add(divideBean); |
| | | } |
| | | |
| | | |
| | | // 使用 CompositeDisposable 管理数据库插入操作 |
| | | compositeDisposable.add( |
| | | DaoSingleton.getAsynchInstance(MapFragment.this.getContext()).divideDao().insertAll(divideBeans) |
| | | .subscribeOn(Schedulers.io()) |
| | | .observeOn(AndroidSchedulers.mainThread()) |
| | | .subscribe( |
| | | () -> { |
| | | // 插入成功 |
| | | Log.i("mWebView", "数据插入成功"); |
| | | }, |
| | | throwable -> { |
| | | // 插入失败 |
| | | Log.e("mWebView", "数据插入失败: " + throwable.getMessage()); |
| | | } |
| | | ) |
| | | DaoSingleton.getAsynchInstance(MapFragment.this.getContext()).divideDao().insertAll(divideBeans) |
| | | .subscribeOn(Schedulers.io()) |
| | | .observeOn(AndroidSchedulers.mainThread()) |
| | | .subscribe( |
| | | () -> { |
| | | // 插入成功 |
| | | Log.i("mWebView", "数据插入成功"); |
| | | }, |
| | | throwable -> { |
| | | // 插入失败 |
| | | Log.e("mWebView", "数据插入失败: " + throwable.getMessage()); |
| | | } |
| | | ) |
| | | ); |
| | | } |
| | | } else { |
| | |
| | | mWebView.restoreState(savedInstanceState); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 显示或隐藏地图上的取水口 |
| | | * |
| | | * @param isShow |
| | | */ |
| | | private void showMarkers(boolean isShow) { |
| | | if (isShow) { |
| | | mWebView.evaluateJavascript("javascript:showAllWaterIntakes()", value -> { |
| | | }); |
| | | } else { |
| | | mWebView.evaluateJavascript("javascript:hideAllWaterIntakes()", value -> { |
| | | }); |
| | | } |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 显示或隐藏地图上的分水房 |
| | | * |
| | | * @param isShow |
| | | */ |
| | | private void showDivideMarkers(boolean isShow) { |
| | | if (isShow) { |
| | | mWebView.evaluateJavascript("javascript:showAllDivides()", value -> { |
| | | }); |
| | | } else { |
| | | mWebView.evaluateJavascript("javascript:hideAllDivides()", value -> { |
| | | }); |
| | | } |
| | | } |
| | | |
| | | } |