add share location btn and support for it
This commit is contained in:
parent
59c90e548f
commit
8ce3642345
2 changed files with 78 additions and 16 deletions
|
@ -215,12 +215,36 @@
|
||||||
|
|
||||||
</android.support.design.widget.AppBarLayout>
|
</android.support.design.widget.AppBarLayout>
|
||||||
|
|
||||||
|
|
||||||
|
<FrameLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
app:layout_behavior="@string/appbar_scrolling_view_behavior"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
<android.support.v7.widget.RecyclerView
|
<android.support.v7.widget.RecyclerView
|
||||||
android:id="@+id/recycler_view"
|
android:id="@+id/recycler_view"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:clipToPadding="false"
|
android:clipToPadding="false"
|
||||||
android:paddingBottom="@dimen/list_view_bottom_padding"
|
android:paddingBottom="@dimen/list_view_bottom_padding"/>
|
||||||
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
|
|
||||||
|
<net.osmand.telegram.ui.views.TextViewEx
|
||||||
|
android:id="@+id/start_sharing_btn"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="bottom|center_horizontal"
|
||||||
|
android:background="@drawable/img_shadow_fab"
|
||||||
|
android:drawableLeft="@drawable/ic_group"
|
||||||
|
android:drawablePadding="@dimen/content_padding_half"
|
||||||
|
android:drawableStart="@drawable/ic_group"
|
||||||
|
android:gravity="center"
|
||||||
|
android:paddingLeft="32dp"
|
||||||
|
android:paddingRight="32dp"
|
||||||
|
android:text="@string/share_location"
|
||||||
|
android:textColor="@color/white"
|
||||||
|
app:typeface="@string/font_roboto_medium"
|
||||||
|
android:visibility="gone"/>
|
||||||
|
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
</android.support.design.widget.CoordinatorLayout>
|
</android.support.design.widget.CoordinatorLayout>
|
||||||
|
|
|
@ -12,6 +12,7 @@ import android.support.v4.content.ContextCompat
|
||||||
import android.support.v7.widget.LinearLayoutManager
|
import android.support.v7.widget.LinearLayoutManager
|
||||||
import android.support.v7.widget.RecyclerView
|
import android.support.v7.widget.RecyclerView
|
||||||
import android.view.*
|
import android.view.*
|
||||||
|
import android.view.animation.LinearInterpolator
|
||||||
import android.widget.*
|
import android.widget.*
|
||||||
import net.osmand.telegram.R
|
import net.osmand.telegram.R
|
||||||
import net.osmand.telegram.TelegramApplication
|
import net.osmand.telegram.TelegramApplication
|
||||||
|
@ -54,6 +55,7 @@ class MyLocationTabFragment : Fragment(), TelegramListener, ChatLiveMessagesList
|
||||||
private lateinit var description: TextView
|
private lateinit var description: TextView
|
||||||
private lateinit var searchBox: FrameLayout
|
private lateinit var searchBox: FrameLayout
|
||||||
private lateinit var stopSharingSwitcher: Switch
|
private lateinit var stopSharingSwitcher: Switch
|
||||||
|
private lateinit var openOsmAndBtn: View
|
||||||
|
|
||||||
private lateinit var searchBoxBg: GradientDrawable
|
private lateinit var searchBoxBg: GradientDrawable
|
||||||
|
|
||||||
|
@ -66,6 +68,8 @@ class MyLocationTabFragment : Fragment(), TelegramListener, ChatLiveMessagesList
|
||||||
|
|
||||||
private var actionButtonsListener: ActionButtonsListener? = null
|
private var actionButtonsListener: ActionButtonsListener? = null
|
||||||
|
|
||||||
|
private var sharingModeOn = false
|
||||||
|
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
inflater: LayoutInflater,
|
inflater: LayoutInflater,
|
||||||
container: ViewGroup?,
|
container: ViewGroup?,
|
||||||
|
@ -81,6 +85,8 @@ class MyLocationTabFragment : Fragment(), TelegramListener, ChatLiveMessagesList
|
||||||
searchBoxHeight = resources.getDimensionPixelSize(R.dimen.search_box_height)
|
searchBoxHeight = resources.getDimensionPixelSize(R.dimen.search_box_height)
|
||||||
searchBoxSidesMargin = resources.getDimensionPixelSize(R.dimen.content_padding_half)
|
searchBoxSidesMargin = resources.getDimensionPixelSize(R.dimen.content_padding_half)
|
||||||
|
|
||||||
|
sharingModeOn = settings.hasAnyChatToShareLocation()
|
||||||
|
|
||||||
savedInstanceState?.apply {
|
savedInstanceState?.apply {
|
||||||
selectedChats.addAll(getLongArray(SELECTED_CHATS_KEY).toSet())
|
selectedChats.addAll(getLongArray(SELECTED_CHATS_KEY).toSet())
|
||||||
if (selectedChats.isNotEmpty()) {
|
if (selectedChats.isNotEmpty()) {
|
||||||
|
@ -156,12 +162,22 @@ class MyLocationTabFragment : Fragment(), TelegramListener, ChatLiveMessagesList
|
||||||
mainView.findViewById<RecyclerView>(R.id.recycler_view).apply {
|
mainView.findViewById<RecyclerView>(R.id.recycler_view).apply {
|
||||||
layoutManager = LinearLayoutManager(context)
|
layoutManager = LinearLayoutManager(context)
|
||||||
adapter = this@MyLocationTabFragment.adapter
|
adapter = this@MyLocationTabFragment.adapter
|
||||||
|
addOnScrollListener(object : RecyclerView.OnScrollListener() {
|
||||||
|
override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
|
||||||
|
super.onScrollStateChanged(recyclerView, newState)
|
||||||
|
when (newState) {
|
||||||
|
RecyclerView.SCROLL_STATE_DRAGGING -> animateOpenOsmAndBtn(false)
|
||||||
|
RecyclerView.SCROLL_STATE_IDLE -> animateOpenOsmAndBtn(true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
stopSharingSwitcher = mainView.findViewById<Switch>(R.id.stop_all_sharing_switcher).apply {
|
stopSharingSwitcher = mainView.findViewById<Switch>(R.id.stop_all_sharing_switcher).apply {
|
||||||
isChecked = settings.hasAnyChatToShareLocation()
|
isChecked = sharingModeOn
|
||||||
setOnCheckedChangeListener { _, isChecked ->
|
setOnCheckedChangeListener { _, isChecked ->
|
||||||
if (!isChecked) {
|
if (!isChecked) {
|
||||||
|
sharingModeOn = isChecked
|
||||||
app.settings.stopSharingLocationToChats()
|
app.settings.stopSharingLocationToChats()
|
||||||
app.shareLocationHelper.stopSharingLocation()
|
app.shareLocationHelper.stopSharingLocation()
|
||||||
updateContent()
|
updateContent()
|
||||||
|
@ -169,6 +185,14 @@ class MyLocationTabFragment : Fragment(), TelegramListener, ChatLiveMessagesList
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
openOsmAndBtn = mainView.findViewById<View>(R.id.start_sharing_btn).apply {
|
||||||
|
visibility = if (sharingModeOn) View.VISIBLE else View.GONE
|
||||||
|
setOnClickListener {
|
||||||
|
sharingModeOn = false
|
||||||
|
updateContent()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return mainView
|
return mainView
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -191,6 +215,7 @@ class MyLocationTabFragment : Fragment(), TelegramListener, ChatLiveMessagesList
|
||||||
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
||||||
super.onActivityResult(requestCode, resultCode, data)
|
super.onActivityResult(requestCode, resultCode, data)
|
||||||
if (requestCode == SetTimeDialogFragment.LOCATION_SHARED_REQUEST_CODE) {
|
if (requestCode == SetTimeDialogFragment.LOCATION_SHARED_REQUEST_CODE) {
|
||||||
|
sharingModeOn = settings.hasAnyChatToShareLocation()
|
||||||
clearSelection()
|
clearSelection()
|
||||||
updateContent()
|
updateContent()
|
||||||
}
|
}
|
||||||
|
@ -248,6 +273,16 @@ class MyLocationTabFragment : Fragment(), TelegramListener, ChatLiveMessagesList
|
||||||
clearSelection()
|
clearSelection()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun animateOpenOsmAndBtn(show: Boolean) {
|
||||||
|
val scale = if (show) 1f else 0f
|
||||||
|
openOsmAndBtn.animate()
|
||||||
|
.scaleX(scale)
|
||||||
|
.scaleY(scale)
|
||||||
|
.setDuration(200)
|
||||||
|
.setInterpolator(LinearInterpolator())
|
||||||
|
.start()
|
||||||
|
}
|
||||||
|
|
||||||
private fun clearSelection() {
|
private fun clearSelection() {
|
||||||
selectedChats.clear()
|
selectedChats.clear()
|
||||||
adapter.notifyDataSetChanged()
|
adapter.notifyDataSetChanged()
|
||||||
|
@ -329,19 +364,19 @@ class MyLocationTabFragment : Fragment(), TelegramListener, ChatLiveMessagesList
|
||||||
|
|
||||||
private fun updateSharingMode() {
|
private fun updateSharingMode() {
|
||||||
val headerParams = imageContainer.layoutParams as AppBarLayout.LayoutParams
|
val headerParams = imageContainer.layoutParams as AppBarLayout.LayoutParams
|
||||||
val sharingMode = settings.hasAnyChatToShareLocation()
|
imageContainer.visibility = if (sharingModeOn) View.GONE else View.VISIBLE
|
||||||
imageContainer.visibility = if (sharingMode) View.GONE else View.VISIBLE
|
textContainer.visibility = if (sharingModeOn) View.GONE else View.VISIBLE
|
||||||
textContainer.visibility = if (sharingMode) View.GONE else View.VISIBLE
|
titleContainer.visibility = if (sharingModeOn) View.VISIBLE else View.GONE
|
||||||
titleContainer.visibility = if (sharingMode) View.VISIBLE else View.GONE
|
openOsmAndBtn.visibility = if (sharingModeOn) View.VISIBLE else View.GONE
|
||||||
headerParams.scrollFlags = if (sharingMode) 0 else AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL
|
headerParams.scrollFlags = if (sharingModeOn) 0 else AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL
|
||||||
stopSharingSwitcher.isChecked = sharingMode
|
stopSharingSwitcher.isChecked = true
|
||||||
appBarScrollRange = -1
|
appBarScrollRange = -1
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updateList() {
|
private fun updateList() {
|
||||||
val chats: MutableList<TdApi.Chat> = mutableListOf()
|
val chats: MutableList<TdApi.Chat> = mutableListOf()
|
||||||
val currentUser = telegramHelper.getCurrentUser()
|
val currentUser = telegramHelper.getCurrentUser()
|
||||||
val chatList = if (settings.hasAnyChatToShareLocation()) {
|
val chatList = if (sharingModeOn && settings.hasAnyChatToShareLocation()) {
|
||||||
settings.getShareLocationChats()
|
settings.getShareLocationChats()
|
||||||
} else {
|
} else {
|
||||||
telegramHelper.getChatListIds()
|
telegramHelper.getChatListIds()
|
||||||
|
@ -349,7 +384,9 @@ class MyLocationTabFragment : Fragment(), TelegramListener, ChatLiveMessagesList
|
||||||
for (chatId in chatList) {
|
for (chatId in chatList) {
|
||||||
val chat = telegramHelper.getChat(chatId)
|
val chat = telegramHelper.getChat(chatId)
|
||||||
if (chat != null) {
|
if (chat != null) {
|
||||||
if (telegramHelper.isPrivateChat(chat)) {
|
if (settings.isSharingLocationToChat(chatId) && !sharingModeOn) {
|
||||||
|
continue
|
||||||
|
} else if (telegramHelper.isPrivateChat(chat)) {
|
||||||
if ((chat.type as TdApi.ChatTypePrivate).userId == currentUser?.id) {
|
if ((chat.type as TdApi.ChatTypePrivate).userId == currentUser?.id) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
@ -368,7 +405,7 @@ class MyLocationTabFragment : Fragment(), TelegramListener, ChatLiveMessagesList
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getItemViewType(position: Int): Int {
|
override fun getItemViewType(position: Int): Int {
|
||||||
return if (settings.isSharingLocationToChat(chats[position].id)) {
|
return if (settings.isSharingLocationToChat(chats[position].id) && sharingModeOn) {
|
||||||
SHARE_LOCATION_CHAT
|
SHARE_LOCATION_CHAT
|
||||||
} else {
|
} else {
|
||||||
DEFAULT_CHAT
|
DEFAULT_CHAT
|
||||||
|
@ -503,6 +540,7 @@ class MyLocationTabFragment : Fragment(), TelegramListener, ChatLiveMessagesList
|
||||||
private fun removeItem(chat: TdApi.Chat) {
|
private fun removeItem(chat: TdApi.Chat) {
|
||||||
chats.remove(chat)
|
chats.remove(chat)
|
||||||
if (chats.isEmpty()) {
|
if (chats.isEmpty()) {
|
||||||
|
sharingModeOn = false
|
||||||
updateContent()
|
updateContent()
|
||||||
} else {
|
} else {
|
||||||
adapter.notifyDataSetChanged()
|
adapter.notifyDataSetChanged()
|
||||||
|
|
Loading…
Reference in a new issue