Commit 08f5a0d0 authored by wanglei's avatar wanglei

...

parent 4a2e9f27
...@@ -2,7 +2,6 @@ package com.base.locationsharewhite.ui.locationmap ...@@ -2,7 +2,6 @@ package com.base.locationsharewhite.ui.locationmap
import android.animation.ValueAnimator import android.animation.ValueAnimator
import android.graphics.Color import android.graphics.Color
import android.os.Build
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.animation.LinearInterpolator import android.view.animation.LinearInterpolator
...@@ -19,12 +18,11 @@ import com.base.locationsharewhite.location.LocationShareListUtils ...@@ -19,12 +18,11 @@ import com.base.locationsharewhite.location.LocationShareListUtils
import com.base.locationsharewhite.map.MapUtils.addLocationMarker import com.base.locationsharewhite.map.MapUtils.addLocationMarker
import com.base.locationsharewhite.map.MapUtils.getLatLngByLocationManager import com.base.locationsharewhite.map.MapUtils.getLatLngByLocationManager
import com.base.locationsharewhite.ui.views.DialogView.showMapTypeDialog import com.base.locationsharewhite.ui.views.DialogView.showMapTypeDialog
import com.base.locationsharewhite.ui.views.DialogView.showViewerMoreDialog
import com.base.locationsharewhite.utils.BarUtils import com.base.locationsharewhite.utils.BarUtils
import com.base.locationsharewhite.utils.LogEx import com.base.locationsharewhite.utils.LogEx
import com.base.locationsharewhite.utils.PermissionUtils.checkLocationPermission import com.base.locationsharewhite.utils.PermissionUtils.checkLocationPermission
import com.base.locationsharewhite.utils.ToastUtils.toast import com.base.locationsharewhite.utils.ToastUtils.toast
import com.google.android.gms.location.FusedLocationProviderClient
import com.google.android.gms.location.LocationServices
import com.google.android.gms.maps.CameraUpdateFactory import com.google.android.gms.maps.CameraUpdateFactory
import com.google.android.gms.maps.GoogleMap import com.google.android.gms.maps.GoogleMap
import com.google.android.gms.maps.OnMapReadyCallback import com.google.android.gms.maps.OnMapReadyCallback
...@@ -73,12 +71,18 @@ class LocationMapActivity : BaseActivity<ActivityLocationMapBinding>(), OnMapRea ...@@ -73,12 +71,18 @@ class LocationMapActivity : BaseActivity<ActivityLocationMapBinding>(), OnMapRea
private fun initAdapter() { private fun initAdapter() {
adapter = ViewingAdapter { adapter = ViewingAdapter(
if (currentViewingBean != it) { itemClick = {
currentViewingBean = it if (currentViewingBean != it) {
initFriendLocationMarker(it) currentViewingBean = it
initFriendLocationMarker(it)
}
},
moreClick = { anchorView, item ->
showViewerMoreDialog(anchorView)
} }
}
)
binding.rvViewing.adapter = adapter binding.rvViewing.adapter = adapter
} }
...@@ -180,11 +184,17 @@ class LocationMapActivity : BaseActivity<ActivityLocationMapBinding>(), OnMapRea ...@@ -180,11 +184,17 @@ class LocationMapActivity : BaseActivity<ActivityLocationMapBinding>(), OnMapRea
override fun onMapReady(googleMap: GoogleMap) { override fun onMapReady(googleMap: GoogleMap) {
map = googleMap map = googleMap
LogEx.logDebug(TAG, "onMapReady") LogEx.logDebug(TAG, "onMapReady")
initMyLocationMarker() val flag = resetMyLocation()
resetMyLocation()
if (!flag) {
locationPresenter.getGoogleServiceLocation()
locationPresenter.oneShotLocationCallBack = {
resetMyLocation()
}
}
} }
private fun resetMyLocation() { private fun resetMyLocation(): Boolean {
var myLatLng: LatLng? = getLatLngByLocationManager() var myLatLng: LatLng? = getLatLngByLocationManager()
if (myLatLng == null) { if (myLatLng == null) {
myLatLng = locationPresenter.googleLocation myLatLng = locationPresenter.googleLocation
...@@ -198,7 +208,9 @@ class LocationMapActivity : BaseActivity<ActivityLocationMapBinding>(), OnMapRea ...@@ -198,7 +208,9 @@ class LocationMapActivity : BaseActivity<ActivityLocationMapBinding>(), OnMapRea
myLatLng?.let { myLatLng?.let {
myMarker?.position = myLatLng myMarker?.position = myLatLng
map?.moveCamera(CameraUpdateFactory.newLatLngZoom(myLatLng, 15f)) map?.moveCamera(CameraUpdateFactory.newLatLngZoom(myLatLng, 15f))
return true
} }
return false
} }
private fun initMyLocationMarker() { private fun initMyLocationMarker() {
......
...@@ -30,7 +30,9 @@ class LocationPresenter( ...@@ -30,7 +30,9 @@ class LocationPresenter(
//google的地理位置服务 //google的地理位置服务
private var fusedLocationClient: FusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(activity) private var fusedLocationClient: FusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(activity)
var googleLocation: LatLng? = null var googleLocation: LatLng? = null
var oneShotLocationCallBack: (() -> Unit)? = null
fun startUploadMyLocation() { fun startUploadMyLocation() {
if (uploadJob == null) { if (uploadJob == null) {
...@@ -51,12 +53,18 @@ class LocationPresenter( ...@@ -51,12 +53,18 @@ class LocationPresenter(
} }
} }
@SuppressLint("MissingPermission") @SuppressLint("MissingPermission")
fun getGoogleServiceLocation() { fun getGoogleServiceLocation() {
fusedLocationClient.lastLocation fusedLocationClient.lastLocation
.addOnSuccessListener { location: Location? -> .addOnSuccessListener { location: Location? ->
if (location != null) { if (location != null) {
googleLocation = LatLng(location.latitude, location.longitude) val latLng = LatLng(location.latitude, location.longitude)
googleLocation = latLng
oneShotLocationCallBack?.invoke()
oneShotLocationCallBack = null
} }
} }
} }
......
...@@ -11,7 +11,10 @@ import com.base.locationsharewhite.ui.views.XmlEx.inflate ...@@ -11,7 +11,10 @@ import com.base.locationsharewhite.ui.views.XmlEx.inflate
import com.base.locationsharewhite.utils.KotlinExt.toFormatHHMinute import com.base.locationsharewhite.utils.KotlinExt.toFormatHHMinute
import com.chad.library.adapter4.BaseQuickAdapter import com.chad.library.adapter4.BaseQuickAdapter
class ViewingAdapter(val itemClick: (item: ViewingBean) -> Unit) : BaseQuickAdapter<ViewingBean, ViewingAdapter.ViewingViewHolder>() { class ViewingAdapter(
val itemClick: (item: ViewingBean) -> Unit,
val moreClick: (view: View, item: ViewingBean) -> Unit,
) : BaseQuickAdapter<ViewingBean, ViewingAdapter.ViewingViewHolder>() {
inner class ViewingViewHolder(view: View) : ViewHolder(view) inner class ViewingViewHolder(view: View) : ViewHolder(view)
override fun onBindViewHolder(holder: ViewingViewHolder, position: Int, item: ViewingBean?) { override fun onBindViewHolder(holder: ViewingViewHolder, position: Int, item: ViewingBean?) {
...@@ -42,6 +45,9 @@ class ViewingAdapter(val itemClick: (item: ViewingBean) -> Unit) : BaseQuickAdap ...@@ -42,6 +45,9 @@ class ViewingAdapter(val itemClick: (item: ViewingBean) -> Unit) : BaseQuickAdap
} }
val time = item.locatDate?.timezone ?: 0 val time = item.locatDate?.timezone ?: 0
binding.tvTime.text = time.toFormatHHMinute() binding.tvTime.text = time.toFormatHHMinute()
binding.ivMore.setOnClickListener {
moreClick.invoke(it, item)
}
binding.root.setOnClickListener { binding.root.setOnClickListener {
itemClick.invoke(item) itemClick.invoke(item)
} }
......
...@@ -25,6 +25,8 @@ import com.google.android.gms.maps.CameraUpdateFactory ...@@ -25,6 +25,8 @@ import com.google.android.gms.maps.CameraUpdateFactory
import com.google.android.gms.maps.GoogleMap import com.google.android.gms.maps.GoogleMap
import com.google.android.gms.maps.OnMapReadyCallback import com.google.android.gms.maps.OnMapReadyCallback
import com.google.android.gms.maps.SupportMapFragment import com.google.android.gms.maps.SupportMapFragment
import com.google.android.gms.maps.model.LatLng
import com.google.android.gms.maps.model.Marker
class MainActivity : BaseActivity<ActivityMainBinding>(), OnMapReadyCallback { class MainActivity : BaseActivity<ActivityMainBinding>(), OnMapReadyCallback {
...@@ -35,7 +37,8 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), OnMapReadyCallback { ...@@ -35,7 +37,8 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), OnMapReadyCallback {
} }
private var map: GoogleMap? = null private var map: GoogleMap? = null
private lateinit var mainPresenter: MainPresenter
private var marker: Marker? = null
override fun initView() { override fun initView() {
LogEx.logDebug(TAG, "initView") LogEx.logDebug(TAG, "initView")
...@@ -43,6 +46,12 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), OnMapReadyCallback { ...@@ -43,6 +46,12 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), OnMapReadyCallback {
BarUtils.setStatusBarColor(this, Color.TRANSPARENT) BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
binding.root.updatePadding(top = BarUtils.getStatusBarHeight()) binding.root.updatePadding(top = BarUtils.getStatusBarHeight())
if (isLanguageRecreate(MyApplication.mainLanguage)) {
return
}
mainPresenter = MainPresenter(this)
if (!checkLocationPermission()) { if (!checkLocationPermission()) {
launcher.launch(arrayOf(Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION)) { launcher.launch(arrayOf(Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION)) {
...@@ -71,6 +80,9 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), OnMapReadyCallback { ...@@ -71,6 +80,9 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), OnMapReadyCallback {
override fun initListener() { override fun initListener() {
super.initListener() super.initListener()
if (isLanguageRecreate(MyApplication.mainLanguage)) {
return
}
onBackPressedDispatcher.addCallback { onBackPressedDispatcher.addCallback {
showAppExitDialog() showAppExitDialog()
} }
...@@ -112,12 +124,23 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), OnMapReadyCallback { ...@@ -112,12 +124,23 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), OnMapReadyCallback {
override fun onMapReady(googleMap: GoogleMap) { override fun onMapReady(googleMap: GoogleMap) {
map = googleMap map = googleMap
val latLng = getLatLngByLocationManager() val latLng: LatLng? = getLatLngByLocationManager()
latLng?.let { if (latLng == null) {
LogEx.logDebug(TAG, "getLastKnowLocation ${latLng.latitude} ${latLng.longitude}") mainPresenter.getGoogleServiceLocation()
val myAvatar = LayoutInflater.from(this).inflate(R.layout.avatar_me, null) mainPresenter.locationCallBack = {
map?.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 15f)) if (marker == null) {
map?.addLocationMarker(myAvatar, latLng, "my") changeLocation(it)
}
}
} else {
changeLocation(latLng)
} }
} }
private fun changeLocation(latLng: LatLng) {
LogEx.logDebug(TAG, "getLastKnowLocation ${latLng.latitude} ${latLng.longitude}")
val myAvatar = LayoutInflater.from(this).inflate(R.layout.avatar_me, null)
map?.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 15f))
marker = map?.addLocationMarker(myAvatar, latLng, "my")
}
} }
\ No newline at end of file
package com.base.locationsharewhite.ui.main
import android.annotation.SuppressLint
import android.app.Activity
import android.location.Location
import com.google.android.gms.location.FusedLocationProviderClient
import com.google.android.gms.location.LocationServices
import com.google.android.gms.maps.model.LatLng
class MainPresenter(
val activity: Activity
) {
//google的地理位置服务
private var fusedLocationClient: FusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(activity)
var googleLocation: LatLng? = null
var locationCallBack: ((latLng: LatLng) -> Unit)? = null
@SuppressLint("MissingPermission")
fun getGoogleServiceLocation() {
fusedLocationClient.lastLocation
.addOnSuccessListener { location: Location? ->
if (location != null) {
val latLng = LatLng(location.latitude, location.longitude)
googleLocation = latLng
locationCallBack?.invoke(latLng)
}
}
}
}
\ No newline at end of file
...@@ -6,11 +6,15 @@ import android.content.Context ...@@ -6,11 +6,15 @@ import android.content.Context
import android.graphics.Color import android.graphics.Color
import android.view.Gravity import android.view.Gravity
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View
import android.widget.FrameLayout
import android.widget.LinearLayout import android.widget.LinearLayout
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import com.base.locationsharewhite.R import com.base.locationsharewhite.R
import com.base.locationsharewhite.databinding.DialogAppExitBinding import com.base.locationsharewhite.databinding.DialogAppExitBinding
import com.base.locationsharewhite.databinding.DialogMapTypeBinding import com.base.locationsharewhite.databinding.DialogMapTypeBinding
import com.base.locationsharewhite.databinding.DialogViewerMoreBinding
import com.base.locationsharewhite.utils.LogEx
import com.google.android.gms.maps.GoogleMap import com.google.android.gms.maps.GoogleMap
object DialogView { object DialogView {
...@@ -76,4 +80,56 @@ object DialogView { ...@@ -76,4 +80,56 @@ object DialogView {
dialog.dismiss() dialog.dismiss()
} }
} }
fun Context.showViewerMoreDialog(
anchorView: View,
) {
val binding = DialogViewerMoreBinding.inflate(LayoutInflater.from(this))
val dialog = AlertDialog.Builder(this).create()
dialog.setView(binding.root)
dialog.show()
dialog.window?.setBackgroundDrawableResource(android.R.color.transparent)
val params = dialog.window?.attributes
params?.dimAmount = 0f
params?.width = resources.getDimensionPixelOffset(R.dimen.dp_120)
params?.height = FrameLayout.LayoutParams.WRAP_CONTENT
params?.gravity = Gravity.TOP
val height = resources.getDimensionPixelOffset(R.dimen.dp_90)
val isOutScreen = viewIsOutScreen(anchorView, height)
val location = IntArray(2)
anchorView.getLocationOnScreen(location)
val marginEnd = resources.getDimensionPixelOffset(R.dimen.dp_235)
LogEx.logDebug("showViewerMoreDialog", "marginEnd=$marginEnd ${location[0]}")
val x = location[0] - marginEnd
val y = if (isOutScreen) {
binding.root.background = ContextCompat.getDrawable(this, R.drawable.bg_b3000000_tlr10_bl10)
location[1] - height - resources.getDimensionPixelOffset(R.dimen.dp_48)
} else {
binding.root.background = ContextCompat.getDrawable(this, R.drawable.bg_b3000000_tl10_blr10)
location[1] + resources.getDimensionPixelOffset(R.dimen.dp_2)
}
params?.x = x
params?.y = y
dialog.window?.attributes = params
}
fun Context.viewIsOutScreen(view: View, height: Int): Boolean {
val screenHeight = resources.displayMetrics.heightPixels
val viewBottomPosition: Int = view.bottom
if (viewBottomPosition + height > screenHeight) {
// 超出了屏幕
return true
} else {
// 没有超出屏幕
return false
}
}
} }
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#b3000000" />
<corners
android:bottomRightRadius="@dimen/dp_10"
android:bottomLeftRadius="10dp"
android:topLeftRadius="10dp" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#b3000000" />
<corners
android:bottomLeftRadius="10dp"
android:topLeftRadius="10dp"
android:topRightRadius="10dp" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="120dp"
android:layout_height="wrap_content"
android:background="@drawable/bg_b3000000_tl10_blr10"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="45dp"
android:gravity="center"
android:text="@string/rename"
android:textColor="@color/white"
android:textSize="16sp" />
<View
android:layout_width="match_parent"
android:layout_height="1px"
android:background="#545454" />
<TextView
android:layout_width="match_parent"
android:layout_height="45dp"
android:gravity="center"
android:text="@string/delete"
android:textColor="@color/white"
android:textSize="16sp" />
</LinearLayout>
\ No newline at end of file
...@@ -10,4 +10,17 @@ ...@@ -10,4 +10,17 @@
<dimen name="dp_200">200dp</dimen> <dimen name="dp_200">200dp</dimen>
<dimen name="dp_150">150dp</dimen> <dimen name="dp_150">150dp</dimen>
<dimen name="dp_356">356dp</dimen> <dimen name="dp_356">356dp</dimen>
<dimen name="dp_90">90dp</dimen>
<dimen name="dp_120">120dp</dimen>
<dimen name="dp_136">136dp</dimen>
<dimen name="dp_2">2dp</dimen>
<dimen name="dp_20">20dp</dimen>
<dimen name="dp_60">60dp</dimen>
<dimen name="dp_48">48dp</dimen>
<dimen name="dp_156">156dp</dimen>
<dimen name="dp_180">180dp</dimen>
<dimen name="dp_300">300dp</dimen>
<dimen name="dp_250">250dp</dimen>
<dimen name="dp_225">225dp</dimen>
<dimen name="dp_235">235dp</dimen>
</resources> </resources>
\ No newline at end of file
...@@ -54,4 +54,5 @@ ...@@ -54,4 +54,5 @@
<string name="enter_your_name">Enter your name</string> <string name="enter_your_name">Enter your name</string>
<string name="name_is_empty">Name is empty</string> <string name="name_is_empty">Name is empty</string>
<string name="me">me</string> <string name="me">me</string>
<string name="delete">Delete</string>
</resources> </resources>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment