Rollback to Fragment to be able to use Maverick capabilities
This commit is contained in:
parent
26cddd2d0d
commit
23e8cad10f
@ -64,6 +64,7 @@ import im.vector.app.features.home.room.list.RoomListFragment
|
|||||||
import im.vector.app.features.home.room.threads.list.views.ThreadListFragment
|
import im.vector.app.features.home.room.threads.list.views.ThreadListFragment
|
||||||
import im.vector.app.features.location.LocationPreviewFragment
|
import im.vector.app.features.location.LocationPreviewFragment
|
||||||
import im.vector.app.features.location.LocationSharingFragment
|
import im.vector.app.features.location.LocationSharingFragment
|
||||||
|
import im.vector.app.features.location.live.map.LocationLiveMapViewFragment
|
||||||
import im.vector.app.features.login.LoginCaptchaFragment
|
import im.vector.app.features.login.LoginCaptchaFragment
|
||||||
import im.vector.app.features.login.LoginFragment
|
import im.vector.app.features.login.LoginFragment
|
||||||
import im.vector.app.features.login.LoginGenericTextInputFormFragment
|
import im.vector.app.features.login.LoginGenericTextInputFormFragment
|
||||||
@ -993,4 +994,9 @@ interface FragmentModule {
|
|||||||
@IntoMap
|
@IntoMap
|
||||||
@FragmentKey(LocationPreviewFragment::class)
|
@FragmentKey(LocationPreviewFragment::class)
|
||||||
fun bindLocationPreviewFragment(fragment: LocationPreviewFragment): Fragment
|
fun bindLocationPreviewFragment(fragment: LocationPreviewFragment): Fragment
|
||||||
|
|
||||||
|
@Binds
|
||||||
|
@IntoMap
|
||||||
|
@FragmentKey(LocationLiveMapViewFragment::class)
|
||||||
|
fun bindLocationLiveMapViewFragment(fragment: LocationLiveMapViewFragment): Fragment
|
||||||
}
|
}
|
||||||
|
@ -39,10 +39,8 @@ fun ComponentActivity.registerStartForActivityResult(onResult: (ActivityResult)
|
|||||||
fun AppCompatActivity.addFragment(
|
fun AppCompatActivity.addFragment(
|
||||||
container: ViewGroup,
|
container: ViewGroup,
|
||||||
fragment: Fragment,
|
fragment: Fragment,
|
||||||
allowStateLoss: Boolean = false,
|
allowStateLoss: Boolean = false) {
|
||||||
tag: String? = null
|
supportFragmentManager.commitTransaction(allowStateLoss) { add(container.id, fragment) }
|
||||||
) {
|
|
||||||
supportFragmentManager.commitTransaction(allowStateLoss) { add(container.id, fragment, tag) }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun <T : Fragment> AppCompatActivity.addFragment(
|
fun <T : Fragment> AppCompatActivity.addFragment(
|
||||||
|
@ -36,9 +36,10 @@ fun Fragment.registerStartForActivityResult(onResult: (ActivityResult) -> Unit):
|
|||||||
fun Fragment.addFragment(
|
fun Fragment.addFragment(
|
||||||
frameId: Int,
|
frameId: Int,
|
||||||
fragment: Fragment,
|
fragment: Fragment,
|
||||||
|
tag: String? = null,
|
||||||
allowStateLoss: Boolean = false
|
allowStateLoss: Boolean = false
|
||||||
) {
|
) {
|
||||||
parentFragmentManager.commitTransaction(allowStateLoss) { add(frameId, fragment) }
|
parentFragmentManager.commitTransaction(allowStateLoss) { add(frameId, fragment, tag) }
|
||||||
}
|
}
|
||||||
|
|
||||||
fun <T : Fragment> Fragment.addFragment(
|
fun <T : Fragment> Fragment.addFragment(
|
||||||
|
@ -19,31 +19,21 @@ package im.vector.app.features.location.live.map
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.os.Parcelable
|
import android.os.Parcelable
|
||||||
import androidx.lifecycle.lifecycleScope
|
|
||||||
import com.mapbox.mapboxsdk.maps.MapboxMapOptions
|
|
||||||
import com.mapbox.mapboxsdk.maps.SupportMapFragment
|
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import im.vector.app.R
|
import im.vector.app.R
|
||||||
import im.vector.app.core.extensions.addFragment
|
import im.vector.app.core.extensions.addFragment
|
||||||
import im.vector.app.core.platform.VectorBaseActivity
|
import im.vector.app.core.platform.VectorBaseActivity
|
||||||
import im.vector.app.databinding.ActivityLocationSharingBinding
|
import im.vector.app.databinding.ActivityLocationSharingBinding
|
||||||
import im.vector.app.features.location.UrlMapProvider
|
|
||||||
import kotlinx.parcelize.Parcelize
|
import kotlinx.parcelize.Parcelize
|
||||||
import javax.inject.Inject
|
|
||||||
|
|
||||||
@Parcelize
|
@Parcelize
|
||||||
data class LocationLiveMapViewArgs(
|
data class LocationLiveMapViewArgs(
|
||||||
val roomId: String
|
val roomId: String
|
||||||
) : Parcelable
|
) : Parcelable
|
||||||
|
|
||||||
/**
|
|
||||||
* Screen showing a map with all the current users sharing their live location in room.
|
|
||||||
*/
|
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
class LocationLiveMapViewActivity : VectorBaseActivity<ActivityLocationSharingBinding>() {
|
class LocationLiveMapViewActivity : VectorBaseActivity<ActivityLocationSharingBinding>() {
|
||||||
|
|
||||||
@Inject lateinit var urlMapProvider: UrlMapProvider
|
|
||||||
|
|
||||||
override fun getBinding() = ActivityLocationSharingBinding.inflate(layoutInflater)
|
override fun getBinding() = ActivityLocationSharingBinding.inflate(layoutInflater)
|
||||||
|
|
||||||
override fun initUiAndData() {
|
override fun initUiAndData() {
|
||||||
@ -56,30 +46,18 @@ class LocationLiveMapViewActivity : VectorBaseActivity<ActivityLocationSharingBi
|
|||||||
.setTitle(getString(R.string.location_activity_title_preview))
|
.setTitle(getString(R.string.location_activity_title_preview))
|
||||||
.allowBack()
|
.allowBack()
|
||||||
|
|
||||||
setupMap()
|
if (isFirstCreation()) {
|
||||||
}
|
addFragment(
|
||||||
|
views.fragmentContainer,
|
||||||
private fun setupMap() {
|
LocationLiveMapViewFragment::class.java,
|
||||||
val mapFragment: SupportMapFragment? = if (isFirstCreation()) {
|
mapViewArgs
|
||||||
val options = MapboxMapOptions.createFromAttributes(this, null)
|
)
|
||||||
val fragment = SupportMapFragment.newInstance(options)
|
|
||||||
addFragment(views.fragmentContainer, fragment, tag = MAP_FRAGMENT_TAG)
|
|
||||||
fragment
|
|
||||||
} else {
|
|
||||||
supportFragmentManager.findFragmentByTag(MAP_FRAGMENT_TAG) as? SupportMapFragment
|
|
||||||
}
|
|
||||||
|
|
||||||
mapFragment?.getMapAsync { mapBoxMap ->
|
|
||||||
lifecycleScope.launchWhenCreated {
|
|
||||||
mapBoxMap.setStyle(urlMapProvider.getMapUrl())
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|
||||||
private const val EXTRA_LOCATION_LIVE_MAP_VIEW_ARGS = "EXTRA_LOCATION_LIVE_MAP_VIEW_ARGS"
|
private const val EXTRA_LOCATION_LIVE_MAP_VIEW_ARGS = "EXTRA_LOCATION_LIVE_MAP_VIEW_ARGS"
|
||||||
private const val MAP_FRAGMENT_TAG = "im.vector.app.features.location.live.map"
|
|
||||||
|
|
||||||
fun getIntent(context: Context, locationLiveMapViewArgs: LocationLiveMapViewArgs): Intent {
|
fun getIntent(context: Context, locationLiveMapViewArgs: LocationLiveMapViewArgs): Intent {
|
||||||
return Intent(context, LocationLiveMapViewActivity::class.java).apply {
|
return Intent(context, LocationLiveMapViewActivity::class.java).apply {
|
||||||
|
@ -0,0 +1,77 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2022 New Vector Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package im.vector.app.features.location.live.map
|
||||||
|
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import androidx.lifecycle.lifecycleScope
|
||||||
|
import com.airbnb.mvrx.args
|
||||||
|
import com.mapbox.mapboxsdk.maps.MapView
|
||||||
|
import com.mapbox.mapboxsdk.maps.MapboxMapOptions
|
||||||
|
import com.mapbox.mapboxsdk.maps.SupportMapFragment
|
||||||
|
import im.vector.app.R
|
||||||
|
import im.vector.app.core.extensions.addFragment
|
||||||
|
import im.vector.app.core.platform.VectorBaseFragment
|
||||||
|
import im.vector.app.databinding.FragmentLiveLocationMapBinding
|
||||||
|
import im.vector.app.databinding.FragmentLocationPreviewBinding
|
||||||
|
import im.vector.app.features.home.room.detail.timeline.helper.LocationPinProvider
|
||||||
|
import im.vector.app.features.location.UrlMapProvider
|
||||||
|
import java.lang.ref.WeakReference
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Screen showing a map with all the current users sharing their live location in room.
|
||||||
|
*/
|
||||||
|
class LocationLiveMapViewFragment @Inject constructor(
|
||||||
|
private val urlMapProvider: UrlMapProvider,
|
||||||
|
private val locationPinProvider: LocationPinProvider
|
||||||
|
) : VectorBaseFragment<FragmentLiveLocationMapBinding>() {
|
||||||
|
|
||||||
|
private val args: LocationLiveMapViewArgs by args()
|
||||||
|
|
||||||
|
override fun getBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentLiveLocationMapBinding {
|
||||||
|
return FragmentLiveLocationMapBinding.inflate(layoutInflater, container, false)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
setupMap()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun setupMap() {
|
||||||
|
val mapFragment: SupportMapFragment =
|
||||||
|
parentFragmentManager.findFragmentByTag(MAP_FRAGMENT_TAG) as? SupportMapFragment
|
||||||
|
?: run {
|
||||||
|
val options = MapboxMapOptions.createFromAttributes(requireContext(), null)
|
||||||
|
val fragment = SupportMapFragment.newInstance(options)
|
||||||
|
addFragment(R.id.liveLocationMapContainer, fragment, tag = MAP_FRAGMENT_TAG)
|
||||||
|
fragment
|
||||||
|
}
|
||||||
|
|
||||||
|
mapFragment.getMapAsync { mapBoxMap ->
|
||||||
|
lifecycleScope.launchWhenCreated {
|
||||||
|
mapBoxMap.setStyle(urlMapProvider.getMapUrl())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
private const val MAP_FRAGMENT_TAG = "im.vector.app.features.location.live.map"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,5 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:id="@+id/liveLocationMapContainer"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent" />
|
Loading…
Reference in New Issue
Block a user