设置家和公司

This commit is contained in:
zhangyuanzhen
2020-01-12 15:31:18 +08:00
parent 590ef1fc1f
commit e4605a1a1f
18 changed files with 365 additions and 97 deletions

View File

@@ -1,5 +1,7 @@
package com.mogo.module.navi.bean;
import com.amap.api.maps.model.CameraPosition;
import com.amap.api.services.geocoder.RegeocodeAddress;
import com.mogo.map.MogoLatLng;
import com.mogo.map.search.inputtips.MogoTip;
import java.util.ArrayList;
@@ -78,17 +80,32 @@ public class EntityConvertUtils {
// location.getCoordType() );
//}
//public static SearchPoi geocodeAddress2Poi( RegeocodeAddress address, CameraPosition position ) {
// if ( address == null || position == null ) {
// return null;
// }
// return new SearchPoi( System.currentTimeMillis() + "",
// address.getFormatAddress(),
// address.getFormatAddress(),
// position.target.latitude,
// position.target.longitude,
// address.getDistrict(),
// address.getAdCode(),
// "" );
//}
public static SearchPoi geocodeAddress2Poi( RegeocodeAddress address, CameraPosition position ) {
if ( address == null || position == null ) {
return null;
}
return new SearchPoi( System.currentTimeMillis() + "",
address.getFormatAddress(),
address.getFormatAddress(),
position.target.latitude,
position.target.longitude,
address.getDistrict(),
address.getAdCode(),
"" );
}
public static SearchPoi geoToPoi(double latitude,double longitude,int type) {
SearchPoi searchPoi = new SearchPoi(System.currentTimeMillis() + "",
null,
null,
latitude,
longitude,
null,
null,
"");
searchPoi.setType(type);
return searchPoi;
}
}

View File

@@ -1,16 +0,0 @@
package com.mogo.module.navi.constants;
/**
* @author congtaowang
* @since 2019-12-12
* <p>
* 自定义地图样式
*/
public class CustomMapStyle {
public static final String STYLE_ID = "e3e33a3423230b219494b40c4d71d93a";
public static final String ASSET_STYLE_DATA = "style.data";
public static final String ASSET_STYLE_EXTRA_DATA = "style_extra.data";
}

View File

@@ -4,12 +4,15 @@ import android.annotation.SuppressLint
import android.app.StatusBarManager
import android.content.Context
import androidx.fragment.app.Fragment
import com.alibaba.android.arouter.facade.annotation.Route
import com.alibaba.android.arouter.facade.template.IProvider
import com.alibaba.android.arouter.launcher.ARouter
import com.amap.api.services.interfaces.IGeocodeSearch
import com.mogo.map.marker.IMogoMarkerManager
import com.mogo.map.navi.IMogoNavi
import com.mogo.map.search.geo.IMogoGeoSearch
import com.mogo.map.uicontroller.IMogoMapUIController
import com.mogo.module.navi.manager.MogoSettingManager
import com.mogo.service.MogoServicePaths
import com.mogo.service.fragmentmanager.FragmentDescriptor
import com.mogo.service.fragmentmanager.IMogoFragmentManager
@@ -23,7 +26,7 @@ import kotlin.isInitialized as isInitialized1
* 2020-01-08.
*/
@SuppressLint("StaticFieldLeak")
object SearchServiceHolder {
object SearchServiceHolder{
// 单例对象要使用Application Context
private lateinit var context: Context
val fragmentManager: IMogoFragmentManager = ARouter.getInstance().build(
@@ -38,10 +41,12 @@ object SearchServiceHolder {
val statusManager: IMogoStatusManager = ARouter.getInstance().build(
MogoServicePaths.PATH_STATUS_MANAGER
).navigation() as IMogoStatusManager
val settingManager: MogoSettingManager = ARouter.getInstance().build(
MogoServicePaths.PATH_ADDRESS_MANAGER
).navigation() as MogoSettingManager
var geoSearch: IMogoGeoSearch? = null
fun init(context: Context) {
fun init(context: Context) {
this.context = context
}

View File

@@ -0,0 +1,94 @@
package com.mogo.module.navi.manager
import android.annotation.SuppressLint
import android.content.Context
import com.mogo.module.common.MogoModulePaths
import com.mogo.module.navi.bean.EntityConvertUtils
import com.mogo.module.navi.bean.SearchPoi
import com.mogo.module.navi.constants.DataConstants
import com.mogo.module.navi.constants.SearchServiceHolder
import com.mogo.module.navi.database.AppDataBase
import com.mogo.module.navi.ui.search.ChoosePathFragment
import com.mogo.module.navi.ui.setting.SettingAddressFragment
import com.mogo.service.fragmentmanager.FragmentDescriptor
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.schedulers.Schedulers
/**
* @author zyz
* 2020-01-12.
*/
object AddressManager {
private var homeAddress: SearchPoi? = null
private var companyAddress: SearchPoi? = null
fun goHome() {
if (homeAddress == null) {
pushSettingAddress(
DataConstants.TYPE_HOME_ADDRESS
)
} else {
var newInstance = ChoosePathFragment.newInstance(EntityConvertUtils.poi2MogoTip(
homeAddress
))
SearchServiceHolder.push(
newInstance, MogoModulePaths.PATH_FRAGMENT_CHOOSE_PAHT
)
}
}
fun goCompany() {
if (companyAddress == null) {
pushSettingAddress(
DataConstants.TYPE_COMPANY_ADDRESS
)
} else {
var newInstance =
ChoosePathFragment.newInstance(EntityConvertUtils.poi2MogoTip(
companyAddress
))
SearchServiceHolder.push(
newInstance, MogoModulePaths.PATH_FRAGMENT_CHOOSE_PAHT
)
}
}
private fun pushSettingAddress(type: Int) {
val builder = FragmentDescriptor.Builder()
builder.fragment(SettingAddressFragment.newInstance(type))
val build = builder.tag(MogoModulePaths.PATH_FRAGMENT_SETTING_HOME)
.build()
SearchServiceHolder.fragmentManager.push(build)
}
@SuppressLint("CheckResult") fun init(context: Context) {
AppDataBase.getDatabase(context)
.poiDao()
.companyAddress
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe { t1, t2 ->
if (t1.size > 0) {
companyAddress = t1[0]
}
}
AppDataBase.getDatabase(context)
.poiDao()
.homeAddress
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe { t1, t2 ->
if (t1.size > 0) {
homeAddress = t1[0]
}
}
}
fun insert(searchPoi: SearchPoi) {
if (searchPoi.type == DataConstants.TYPE_COMPANY_ADDRESS) {
companyAddress = searchPoi
} else {
homeAddress = searchPoi
}
}
}

View File

@@ -0,0 +1,27 @@
package com.mogo.module.navi.manager;
import android.content.Context;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.mogo.module.navi.constants.SearchServiceHolder;
import com.mogo.service.MogoServicePaths;
import com.mogo.service.module.IMogoAddressManager;
/**
* @author zyz
* 2020-01-12.
*/
@Route( path = MogoServicePaths.PATH_ADDRESS_MANAGER )
public class MogoAddressManager implements IMogoAddressManager {
@Override public void goHome() {
AddressManager.INSTANCE.goHome();
}
@Override public void goCompany() {
AddressManager.INSTANCE.goCompany();
}
@Override public void init(Context context) {
AddressManager.INSTANCE.init(context);
SearchServiceHolder.INSTANCE.init(context);
}
}

View File

@@ -0,0 +1,60 @@
package com.mogo.module.navi.manager;
import android.content.Context;
import android.content.SharedPreferences;
import androidx.annotation.Nullable;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.mogo.service.MogoServicePaths;
import com.mogo.service.module.IMogoSettingManager;
import java.util.Map;
import java.util.Set;
/**
* @author zyz
* 2020-01-12.
*/
@Route(path = MogoServicePaths.PATH_SETTING_MANAGER)
public class MogoSettingManager implements IMogoSettingManager {
private static final String KEY_PAHT_PREFER="keyPath";
private static final String KEY_VOLUME="keyVolume";
private static final String KEY_VOICE_STYLE="keyVoice";
private static final String KEY_MAP_TYPE="keyMapType";
private SharedPreferences settings;
@Override public int getPathPrefer() {
return settings.getInt(KEY_PAHT_PREFER,0);
}
@Override public int getVolume() {
return settings.getInt(KEY_VOLUME,0);
}
@Override public int getVoiceStyle() {
return settings.getInt(KEY_VOICE_STYLE,0);
}
@Override public int getMapType() {
return settings.getInt(KEY_MAP_TYPE,0);
}
public void setPathPrefer(int type) {
settings.edit().putInt(KEY_PAHT_PREFER,type).apply();
}
public void setVolume(int type) {
settings.edit().putInt(KEY_PAHT_PREFER,type).apply();
}
public void setVoiceStyle(int type) {
settings.edit().putInt(KEY_PAHT_PREFER,type).apply();
}
public void setMapType(int type) {
settings.edit().putInt(KEY_PAHT_PREFER,type).apply();
}
@Override public void init(Context context) {
settings = context.getSharedPreferences("settings", Context.MODE_PRIVATE);
}
}

View File

@@ -97,6 +97,7 @@ class ChoosePathFragment : BaseFragment(), IMogoNaviListener {
tv_navi_navi.setOnClickListener {
SearchServiceHolder.getNavi()
.startNavi(false)
SearchServiceHolder.fragmentManager.clearAll()
}
SearchServiceHolder.getNavi()

View File

@@ -15,19 +15,16 @@ import com.mogo.module.common.MogoModulePaths;
import com.mogo.module.navi.R;
import com.mogo.module.navi.bean.EntityConvertUtils;
import com.mogo.module.navi.bean.SearchPoi;
import com.mogo.module.navi.constants.AMapConstants;
import com.mogo.module.navi.manager.AddressManager;
import com.mogo.module.navi.constants.SearchServiceHolder;
import com.mogo.module.navi.ui.adapter.HistoryPoiAdapter;
import com.mogo.module.navi.ui.adapter.SearchPoiAdapter;
import com.mogo.module.navi.ui.base.UiController;
import com.mogo.module.navi.ui.setting.NaviSettingFragment;
import com.mogo.module.navi.ui.setting.SettingAddressFragment;
import com.mogo.service.fragmentmanager.FragmentDescriptor;
import java.util.ArrayList;
import java.util.List;
import javax.net.ssl.SSLHandshakeException;
/**
* 搜索页面
* <p>
@@ -83,7 +80,6 @@ public class SearchFragment extends BaseSearchFragment implements SearchView, Vi
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
SearchServiceHolder.INSTANCE.init(getActivity().getApplicationContext());
SearchServiceHolder.INSTANCE.getMarkerManger().removeMarkers();
SearchServiceHolder.INSTANCE.getMapUIController().showMyLocation( false );
moveMapToCenter();
@@ -149,13 +145,13 @@ public class SearchFragment extends BaseSearchFragment implements SearchView, Vi
findViewById(R.id.tv_navi_company).setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
pupSettingAddress(1);
AddressManager.INSTANCE.goCompany();
}
});
findViewById(R.id.tv_navi_home).setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
pupSettingAddress(0);
AddressManager.INSTANCE.goHome();
}
});
@@ -174,14 +170,7 @@ public class SearchFragment extends BaseSearchFragment implements SearchView, Vi
SearchServiceHolder.INSTANCE.getFragmentManager().push(build);
}
private void pupSettingAddress(int type) {
FragmentDescriptor.Builder builder = new FragmentDescriptor.Builder();
builder.fragment(SettingAddressFragment.Companion.newInstance(type));
FragmentDescriptor build =
builder.tag(MogoModulePaths.PATH_FRAGMENT_SETTING_HOME).build();
SearchServiceHolder.INSTANCE.getFragmentManager().push(build);
}
/**
* 显示我的位置,并且可设置为家

View File

@@ -5,11 +5,8 @@ import android.os.Bundle
import android.view.View
import androidx.fragment.app.Fragment
import com.alibaba.android.arouter.facade.annotation.Route
import com.amap.api.col.n3.it
import com.mogo.map.MogoLatLng
import com.mogo.map.listener.IMogoMapListener
import com.mogo.map.location.IMogoLocationListener
import com.mogo.map.location.MogoLocation
import com.mogo.map.marker.IMogoMarker
import com.mogo.map.marker.MogoMarkerOptions
import com.mogo.map.search.geo.IMogoGeoSearchListener
@@ -20,9 +17,17 @@ import com.mogo.module.common.MogoModulePaths
import com.mogo.module.common.adapter.MogoMapListenerAdapter
import com.mogo.module.navi.R
import com.mogo.module.navi.R.string
import com.mogo.module.navi.bean.EntityConvertUtils
import com.mogo.module.navi.bean.SearchPoi
import com.mogo.module.navi.constants.AMapConstants
import com.mogo.module.navi.manager.AddressManager
import com.mogo.module.navi.constants.DataConstants
import com.mogo.module.navi.constants.SearchServiceHolder
import com.mogo.module.navi.database.AppDataBase
import com.mogo.module.navi.ui.base.BaseFragment
import io.reactivex.Observable
import io.reactivex.ObservableOnSubscribe
import io.reactivex.schedulers.Schedulers
import kotlinx.android.synthetic.main.fragment_setting_address.tv_set_as_home
import kotlinx.android.synthetic.main.include_search_bar.et_navi_search
import kotlinx.android.synthetic.main.include_search_bar.iv_navi_back
@@ -43,9 +48,10 @@ class SettingAddressFragment : BaseFragment(), IMogoGeoSearchListener {
}
private val TAG: String = "SettingAddressFragment"
private var style: Int = 0
private var style: Int = DataConstants.TYPE_HOME_ADDRESS
var addMarker: IMogoMarker? = null
private var selectPoi: MogoLatLng?=null
private var mapListener: IMogoMapListener = object : MogoMapListenerAdapter() {
override fun onMapChanged(
latLng: MogoLatLng?,
@@ -54,6 +60,7 @@ class SettingAddressFragment : BaseFragment(), IMogoGeoSearchListener {
bearing: Float
) {
super.onMapChanged(latLng, zoom, tilt, bearing)
selectPoi=latLng
var mogoRegeocodeQuery = MogoRegeocodeQuery()
mogoRegeocodeQuery.point = latLng
SearchServiceHolder.getGeoSearcher().getFromLocationAsyn(mogoRegeocodeQuery)
@@ -72,7 +79,7 @@ class SettingAddressFragment : BaseFragment(), IMogoGeoSearchListener {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
style = arguments?.getInt(AMapConstants.KEY_SET_HOME_COMPONY) ?: 0
style = arguments?.getInt(AMapConstants.KEY_SET_HOME_COMPONY) ?: DataConstants.TYPE_HOME_ADDRESS
setMarkerStatus(true)
SearchServiceHolder.listenerCenter.registerMogoMapListener(
MogoModulePaths.PATH_FRAGMENT_SETTING_HOME, mapListener
@@ -91,11 +98,11 @@ class SettingAddressFragment : BaseFragment(), IMogoGeoSearchListener {
}
fun isHome(): Boolean {
return style == 0
return style == DataConstants.TYPE_HOME_ADDRESS
}
fun isCompony(): Boolean {
return style == 1
return style == DataConstants.TYPE_COMPANY_ADDRESS
}
override fun onViewCreated(
@@ -114,11 +121,18 @@ class SettingAddressFragment : BaseFragment(), IMogoGeoSearchListener {
iv_navi_back.setOnClickListener {
SearchServiceHolder.fragmentManager.pop()
}
tv_set_as_home.setOnClickListener {
var geoToPoi =
EntityConvertUtils.geoToPoi(selectPoi?.lat ?: 0.0, selectPoi?.lng ?: 0.0, style)
insert(geoToPoi)
SearchServiceHolder.fragmentManager.pop()
}
et_navi_search.isEnabled = false
et_navi_search.setText(getString(string.drag_map_to_choose))
var location = SearchServiceHolder.getMapUIController()
.windowCenterLocation
.windowCenterLocation
if (addMarker == null) {
var decodeResource = BitmapFactory.decodeResource(resources, R.mipmap.icon_choose_position2)
val options = MogoMarkerOptions()
@@ -128,12 +142,26 @@ class SettingAddressFragment : BaseFragment(), IMogoGeoSearchListener {
.anchor(0.5f, 1f)
.longitude(location?.lng ?: 0.0)
addMarker = SearchServiceHolder.getMarkerManger()
.addMarker(MogoModulePaths.PATH_FRAGMENT_SETTING_HOME, options)
.addMarker(MogoModulePaths.PATH_FRAGMENT_SETTING_HOME, options)
var locationPointInScreen = SearchServiceHolder.getMapUIController()
.getLocationPointInScreen(location)
.getLocationPointInScreen(location)
addMarker?.setPositionByPixels(locationPointInScreen)
}
}
fun insert(searchPoi: SearchPoi) {
AddressManager.insert(searchPoi)
Observable.create(
ObservableOnSubscribe<String> {
AppDataBase.getDatabase(context)
.poiDao()
.insert(searchPoi)
})
.subscribeOn(Schedulers.io())
.subscribe()
}
override fun onDestroyView() {
@@ -149,7 +177,7 @@ class SettingAddressFragment : BaseFragment(), IMogoGeoSearchListener {
}
companion object {
fun newInstance(type: Int = 0): Fragment {
fun newInstance(type: Int = DataConstants.TYPE_HOME_ADDRESS): Fragment {
var settingAddressFragment = SettingAddressFragment()
val bundle = Bundle()
bundle.putInt(AMapConstants.KEY_SET_HOME_COMPONY, type)