Merge pull request #5663 from osmandapp/MyLocationUiImprovements

Improve my location UI
This commit is contained in:
Alexander Sytnyk 2018-07-12 17:53:14 +03:00 committed by GitHub
commit 5930856428
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 124 additions and 12 deletions

View file

@ -12,12 +12,27 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="?attr/card_bg_color"> android:background="?attr/card_bg_color">
<ImageView <FrameLayout
android:id="@+id/my_location_image"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="@dimen/my_location_image_height" android:layout_height="@dimen/my_location_image_height"
android:background="@android:color/holo_green_light" app:layout_scrollFlags="scroll">
app:layout_scrollFlags="scroll"/>
<ImageView
android:id="@+id/my_location_bg_image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="center"
android:src="@drawable/img_my_location_roadbg" />
<ImageView
android:id="@+id/my_location_user_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:paddingTop="@dimen/content_padding_standard"
tools:src="@drawable/img_my_location_user" />
</FrameLayout>
<LinearLayout <LinearLayout
android:id="@+id/text_container" android:id="@+id/text_container"
@ -28,7 +43,7 @@
android:paddingLeft="@dimen/my_location_text_sides_margin" android:paddingLeft="@dimen/my_location_text_sides_margin"
android:paddingRight="@dimen/my_location_text_sides_margin"> android:paddingRight="@dimen/my_location_text_sides_margin">
<FrameLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="@dimen/action_bar_height"> android:layout_height="@dimen/action_bar_height">
@ -37,13 +52,27 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_vertical" android:layout_gravity="center_vertical"
android:layout_weight="1"
android:gravity="center" android:gravity="center"
android:text="@string/start_location_sharing" android:text="@string/start_location_sharing"
android:textColor="?attr/ctrl_active_color" android:textColor="?attr/ctrl_active_color"
android:textSize="@dimen/title_text_size" android:textSize="@dimen/title_text_size"
app:typeface="@string/font_roboto_mono_bold"/> app:typeface="@string/font_roboto_mono_bold"/>
</FrameLayout> <ImageView
android:id="@+id/options"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="0"
android:background="?attr/selectableItemBackgroundBorderless"
android:paddingLeft="@dimen/content_padding_half"
android:paddingRight="@dimen/content_padding_half"
android:visibility="gone"
tools:src="@drawable/ic_action_other_menu"
tools:tint="@color/icon_light"
tools:visiblity="visible" />
</LinearLayout>
<TextView <TextView
android:id="@+id/description" android:id="@+id/description"

View file

@ -5,6 +5,7 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:background="?attr/card_bg_color" android:background="?attr/card_bg_color"
android:orientation="vertical"> android:orientation="vertical">

View file

@ -25,7 +25,9 @@
<item name="primary_btn_bg">@drawable/primary_btn_bg_light</item> <item name="primary_btn_bg">@drawable/primary_btn_bg_light</item>
<item name="primary_btn_text_color">@color/primary_btn_text_light</item> <item name="primary_btn_text_color">@color/primary_btn_text_light</item>
<item name="secondary_btn_bg">@drawable/secondary_btn_bg_light</item> <item name="secondary_btn_bg">@drawable/secondary_btn_bg_light</item>
<item name="android:windowTranslucentStatus">true</item>
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="bottom_nav_shadow">@drawable/bg_bottom_bar_shadow_with_line_day</item> <item name="bottom_nav_shadow">@drawable/bg_bottom_bar_shadow_with_line_day</item>
</style> </style>

View file

@ -15,7 +15,7 @@ object TelegramUiHelper {
app: TelegramApplication, app: TelegramApplication,
iv: ImageView?, iv: ImageView?,
photoPath: String?, photoPath: String?,
placeholderId: Int = R.drawable.ic_group placeholderId: Int = R.drawable.img_user_picture
) { ) {
if (iv == null) { if (iv == null) {
return return
@ -26,7 +26,7 @@ object TelegramUiHelper {
bitmap = app.uiUtils.getCircleBitmap(photoPath) bitmap = app.uiUtils.getCircleBitmap(photoPath)
} }
if (bitmap == null) { if (bitmap == null) {
drawable = app.uiUtils.getThemedIcon(placeholderId) drawable = app.uiUtils.getIcon(placeholderId)
} }
if (bitmap != null) { if (bitmap != null) {
iv.setImageBitmap(bitmap) iv.setImageBitmap(bitmap)
@ -43,7 +43,7 @@ object TelegramUiHelper {
val res = ChatItem().apply { val res = ChatItem().apply {
chatTitle = chat.title chatTitle = chat.title
photoPath = chat.photo?.small?.local?.path photoPath = chat.photo?.small?.local?.path
placeholderId = R.drawable.ic_group placeholderId = R.drawable.img_user_picture
} }
val type = chat.type val type = chat.type
if (type is TdApi.ChatTypePrivate || type is TdApi.ChatTypeSecret) { if (type is TdApi.ChatTypePrivate || type is TdApi.ChatTypeSecret) {
@ -98,7 +98,7 @@ object TelegramUiHelper {
chatTitle = chat.title chatTitle = chat.title
name = content.name name = content.name
latLon = LatLon(content.lat, content.lon) latLon = LatLon(content.lat, content.lon)
placeholderId = R.drawable.ic_group placeholderId = R.drawable.img_user_picture
} }
} else { } else {
null null
@ -123,7 +123,7 @@ object TelegramUiHelper {
} }
latLon = LatLon(content.location.latitude, content.location.longitude) latLon = LatLon(content.location.latitude, content.location.longitude)
photoPath = helper.getUserPhotoPath(user) photoPath = helper.getUserPhotoPath(user)
placeholderId = R.drawable.ic_group placeholderId = R.drawable.img_user_picture
userId = message.senderUserId userId = message.senderUserId
} }
} }

View file

@ -1,6 +1,7 @@
package net.osmand.telegram.ui package net.osmand.telegram.ui
import android.animation.* import android.animation.*
import android.graphics.Paint
import android.graphics.drawable.GradientDrawable import android.graphics.drawable.GradientDrawable
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
@ -8,6 +9,7 @@ import android.support.design.widget.AppBarLayout
import android.support.v4.app.Fragment import android.support.v4.app.Fragment
import android.support.v4.content.ContextCompat import android.support.v4.content.ContextCompat
import android.support.v7.widget.LinearLayoutManager import android.support.v7.widget.LinearLayoutManager
import android.support.v7.widget.ListPopupWindow
import android.support.v7.widget.RecyclerView import android.support.v7.widget.RecyclerView
import android.view.* import android.view.*
import android.widget.* import android.widget.*
@ -17,6 +19,7 @@ import net.osmand.telegram.helpers.TelegramHelper
import net.osmand.telegram.helpers.TelegramHelper.TelegramListener import net.osmand.telegram.helpers.TelegramHelper.TelegramListener
import net.osmand.telegram.helpers.TelegramUiHelper import net.osmand.telegram.helpers.TelegramUiHelper
import net.osmand.telegram.ui.MyLocationTabFragment.MyLocationListAdapter.ChatViewHolder import net.osmand.telegram.ui.MyLocationTabFragment.MyLocationListAdapter.ChatViewHolder
import net.osmand.telegram.utils.AndroidUtils
import org.drinkless.td.libcore.telegram.TdApi import org.drinkless.td.libcore.telegram.TdApi
private const val SELECTED_CHATS_KEY = "selected_chats" private const val SELECTED_CHATS_KEY = "selected_chats"
@ -34,6 +37,8 @@ class MyLocationTabFragment : Fragment(), TelegramListener {
private val telegramHelper get() = app.telegramHelper private val telegramHelper get() = app.telegramHelper
private lateinit var appBarLayout: AppBarLayout private lateinit var appBarLayout: AppBarLayout
private lateinit var userImage: ImageView
private lateinit var optionsBtn: ImageView
private lateinit var textContainer: LinearLayout private lateinit var textContainer: LinearLayout
private lateinit var title: TextView private lateinit var title: TextView
private lateinit var description: TextView private lateinit var description: TextView
@ -85,10 +90,22 @@ class MyLocationTabFragment : Fragment(), TelegramListener {
appBarCollapsed = collapsed appBarCollapsed = collapsed
adjustText() adjustText()
adjustSearchBox() adjustSearchBox()
optionsBtn.visibility = if (collapsed) View.VISIBLE else View.GONE
} }
} }
} }
userImage = mainView.findViewById<ImageView>(R.id.my_location_user_image).apply {
setImageResource(R.drawable.img_my_location_user)
}
optionsBtn = mainView.findViewById<ImageView>(R.id.options).apply {
setImageDrawable(app.uiUtils.getThemedIcon(R.drawable.ic_action_other_menu))
setOnClickListener {
showPopupMenu()
}
}
textContainer = mainView.findViewById<LinearLayout>(R.id.text_container).apply { textContainer = mainView.findViewById<LinearLayout>(R.id.text_container).apply {
if (Build.VERSION.SDK_INT >= 16) { if (Build.VERSION.SDK_INT >= 16) {
layoutTransition.enableTransitionType(LayoutTransition.CHANGING) layoutTransition.enableTransitionType(LayoutTransition.CHANGING)
@ -125,6 +142,60 @@ class MyLocationTabFragment : Fragment(), TelegramListener {
return mainView return mainView
} }
private fun showPopupMenu() {
val menuList = ArrayList<String>()
val logout = getString(R.string.shared_string_logout)
val login = getString(R.string.shared_string_login)
if (telegramHelper.getTelegramAuthorizationState() == TelegramHelper.TelegramAuthorizationState.READY) {
menuList.add(0, logout)
} else if (telegramHelper.getTelegramAuthorizationState() == TelegramHelper.TelegramAuthorizationState.CLOSED) {
menuList.add(0, login)
}
val paint = Paint()
paint.textSize = resources.getDimensionPixelSize(R.dimen.list_item_title_text_size).toFloat()
val textWidth = paint.measureText(menuList[0])
val itemWidth = textWidth.toInt() + AndroidUtils.dpToPx(context!!, 32F)
val minWidth = AndroidUtils.dpToPx(context!!, 100F)
ListPopupWindow(context!!).apply {
isModal = true
anchorView = optionsBtn
setContentWidth(Math.max(minWidth, itemWidth))
setDropDownGravity(Gravity.END or Gravity.TOP)
setAdapter(ArrayAdapter(context, R.layout.popup_list_text_item, menuList))
setOnItemClickListener { _, _, position, _ ->
when (position) {
menuList.indexOf(logout) -> {
logoutTelegram()
}
menuList.indexOf(login) -> {
loginTelegram()
}
}
dismiss()
}
show()
}
}
fun logoutTelegram(silent: Boolean = false) {
if (telegramHelper.getTelegramAuthorizationState() == TelegramHelper.TelegramAuthorizationState.READY) {
telegramHelper.logout()
} else {
if (!silent) {
Toast.makeText(context, R.string.not_logged_in, Toast.LENGTH_SHORT).show()
}
}
}
fun loginTelegram() {
if (telegramHelper.getTelegramAuthorizationState() != TelegramHelper.TelegramAuthorizationState.CLOSED) {
telegramHelper.logout()
}
telegramHelper.init()
}
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
updateList() updateList()

View file

@ -59,6 +59,15 @@ object AndroidUtils {
).toInt() ).toInt()
} }
fun getStatusBarHeight(ctx: Context): Int {
var result = 0
val resourceId = ctx.resources.getIdentifier("status_bar_height", "dimen", "android")
if (resourceId > 0) {
result = ctx.resources.getDimensionPixelSize(resourceId)
}
return result
}
@ColorInt @ColorInt
fun getAttrColor(ctx: Context, @AttrRes attrId: Int, @ColorInt defaultColor: Int = 0): Int { fun getAttrColor(ctx: Context, @AttrRes attrId: Int, @ColorInt defaultColor: Int = 0): Int {
val ta = ctx.theme.obtainStyledAttributes(intArrayOf(attrId)) val ta = ctx.theme.obtainStyledAttributes(intArrayOf(attrId))