Merge branch 'master' of ssh://github.com/osmandapp/Osmand into LoginDialogsUiImprovements

This commit is contained in:
Chumva 2018-07-05 12:28:49 +03:00
commit a1df9c3a1f
8 changed files with 157 additions and 80 deletions

View file

@ -86,7 +86,7 @@
android:paddingRight="@dimen/content_padding_standard"
android:paddingStart="@dimen/list_item_content_margin">
<TextView
<net.osmand.telegram.ui.views.TextViewEx
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/content_padding_standard"
@ -94,13 +94,17 @@
android:layout_weight="1"
android:text="@string/show_on_map"
android:textAppearance="?attr/textAppearanceListItemSecondary"
android:textColor="?attr/ctrl_active_color"
android:textStyle="bold"/>
android:textColor="?android:attr/textColorSecondary"
app:typeface="@string/font_roboto_medium"/>
<Switch
android:id="@+id/show_on_map_switch"
<net.osmand.telegram.ui.views.TextViewEx
android:id="@+id/show_on_map_state"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
android:layout_height="wrap_content"
android:textAppearance="?attr/textAppearanceListItemSecondary"
android:textColor="?attr/ctrl_active_color"
app:typeface="@string/font_roboto_medium"
tools:text="All"/>
</LinearLayout>

View file

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="12dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="12dp"
android:textColor="?android:attr/textColorPrimary"
android:textSize="@dimen/list_item_title_text_size"
tools:text="Some menu item"/>

View file

@ -1,4 +1,6 @@
<resources>
<string name="shared_string_all">All</string>
<string name="shared_string_off">Off</string>
<string name="authorization_already_registered_in_telegram">You need an already registered account and phone number in Telegram</string>
<string name="do_not_have_telegram">I don`t have Telegram account</string>
<string name="enter_phone_number">Enter phone number</string>

View file

@ -33,21 +33,13 @@ class TelegramSettings(private val app: TelegramApplication) {
read()
}
fun hasAnyChatToShareLocation(): Boolean {
return shareLocationChats.isNotEmpty()
}
fun hasAnyChatToShareLocation() = shareLocationChats.isNotEmpty()
fun isSharingLocationToChat(chatTitle: String): Boolean {
return shareLocationChats.contains(chatTitle)
}
fun isSharingLocationToChat(chatTitle: String) = shareLocationChats.contains(chatTitle)
fun hasAnyChatToShowOnMap(): Boolean {
return showOnMapChats.isNotEmpty()
}
fun hasAnyChatToShowOnMap() = showOnMapChats.isNotEmpty()
fun isShowingChatOnMap(chatTitle: String): Boolean {
return showOnMapChats.contains(chatTitle)
}
fun isShowingChatOnMap(chatTitle: String) = showOnMapChats.contains(chatTitle)
fun removeNonexistingChats(presentChatTitles: List<String>) {
val shareLocationChats = shareLocationChats.toMutableList()
@ -84,6 +76,7 @@ class TelegramSettings(private val app: TelegramApplication) {
}
fun getShareLocationChats() = ArrayList(shareLocationChats)
fun getShowOnMapChats() = ArrayList(showOnMapChats)
fun getShowOnMapChatsCount() = showOnMapChats.size
@ -131,10 +124,16 @@ class TelegramSettings(private val app: TelegramApplication) {
}
this.showOnMapChats = showOnMapChats
metricsConstants = MetricsConstants.valueOf(prefs.getString(METRICS_CONSTANTS_KEY, MetricsConstants.KILOMETERS_AND_METERS.name))
speedConstants = SpeedConstants.valueOf(prefs.getString(SPEED_CONSTANTS_KEY, SpeedConstants.KILOMETERS_PER_HOUR.name))
metricsConstants = MetricsConstants.valueOf(
prefs.getString(METRICS_CONSTANTS_KEY, MetricsConstants.KILOMETERS_AND_METERS.name)
)
speedConstants = SpeedConstants.valueOf(
prefs.getString(SPEED_CONSTANTS_KEY, SpeedConstants.KILOMETERS_PER_HOUR.name)
)
sendMyLocationInterval = prefs.getLong(SEND_MY_LOCATION_INTERVAL_KEY, SEND_MY_LOCATION_INTERVAL_DEFAULT)
userLocationExpireTime = prefs.getLong(USER_LOCATION_EXPIRE_TIME_KEY, USER_LOCATION_EXPIRE_TIME_DEFAULT)
sendMyLocationInterval =
prefs.getLong(SEND_MY_LOCATION_INTERVAL_KEY, SEND_MY_LOCATION_INTERVAL_DEFAULT)
userLocationExpireTime =
prefs.getLong(USER_LOCATION_EXPIRE_TIME_KEY, USER_LOCATION_EXPIRE_TIME_DEFAULT)
}
}

View file

@ -837,6 +837,25 @@ class TelegramHelper private constructor() {
}
}
}
TdApi.UpdateMessageEdited.CONSTRUCTOR -> {
val updateMessageEdited = obj as TdApi.UpdateMessageEdited
val message = usersLocationMessages[updateMessageEdited.messageId]
if (message == null) {
updateMessageEdited.apply {
requestMessage(chatId, messageId, this@TelegramHelper::addNewMessage)
}
} else {
synchronized(message) {
message.editDate = updateMessageEdited.editDate
}
val chatTitle = chats[message.chatId]?.title
if (chatTitle != null) {
incomingMessagesListeners.forEach {
it.onReceiveChatLocationMessages(chatTitle, message)
}
}
}
}
TdApi.UpdateMessageContent.CONSTRUCTOR -> {
val updateMessageContent = obj as TdApi.UpdateMessageContent
val message = usersLocationMessages[updateMessageContent.messageId]

View file

@ -1,21 +1,24 @@
package net.osmand.telegram.ui
import android.graphics.Paint
import android.os.Bundle
import android.support.v4.app.Fragment
import android.support.v7.widget.LinearLayoutManager
import android.support.v7.widget.ListPopupWindow
import android.support.v7.widget.RecyclerView
import android.view.Gravity
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import android.widget.ImageView
import android.widget.Switch
import android.widget.TextView
import android.widget.Toast
import net.osmand.telegram.R
import net.osmand.telegram.TelegramApplication
import net.osmand.telegram.helpers.TelegramHelper
import net.osmand.telegram.helpers.TelegramHelper.*
import net.osmand.telegram.helpers.TelegramUiHelper
import net.osmand.telegram.utils.AndroidUtils
import org.drinkless.td.libcore.telegram.TdApi
private const val CHAT_VIEW_TYPE = 0
@ -30,7 +33,7 @@ class LiveNowTabFragment : Fragment(), TelegramListener, TelegramIncomingMessage
private val osmandHelper get() = app.osmandHelper
private val settings get() = app.settings
private val adapter = LiveNowListAdapter()
private lateinit var adapter: LiveNowListAdapter
override fun onCreateView(
inflater: LayoutInflater,
@ -38,6 +41,7 @@ class LiveNowTabFragment : Fragment(), TelegramListener, TelegramIncomingMessage
savedInstanceState: Bundle?
): View? {
val mainView = inflater.inflate(R.layout.fragment_live_now_tab, container, false)
adapter = LiveNowListAdapter()
mainView.findViewById<RecyclerView>(R.id.recycler_view).apply {
layoutManager = LinearLayoutManager(context)
adapter = this@LiveNowTabFragment.adapter
@ -95,7 +99,7 @@ class LiveNowTabFragment : Fragment(), TelegramListener, TelegramIncomingMessage
}
override fun onReceiveChatLocationMessages(chatTitle: String, vararg messages: TdApi.Message) {
updateList()
app.runInUIThread { updateList() }
}
override fun updateLocationMessages() {
@ -125,6 +129,9 @@ class LiveNowTabFragment : Fragment(), TelegramListener, TelegramIncomingMessage
inner class LiveNowListAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
private val menuList =
listOf(getString(R.string.shared_string_off), getString(R.string.shared_string_all))
var items: List<Any> = emptyList()
set(value) {
field = value
@ -156,44 +163,14 @@ class LiveNowTabFragment : Fragment(), TelegramListener, TelegramIncomingMessage
if (item is TdApi.Chat && holder is ChatViewHolder) {
val nextItemIsUser = !lastItem && items[position + 1] is TdApi.User
val chatTitle = item.title
val stateTextInd = if (settings.isShowingChatOnMap(chatTitle)) 1 else 0
TelegramUiHelper.setupPhoto(app, holder.icon, item.photo?.small?.local?.path)
holder.title?.text = chatTitle
holder.description?.text = "Chat description" // FIXME
holder.imageButton?.setImageDrawable(app.uiUtils.getThemedIcon(R.drawable.ic_overflow_menu_white))
holder.imageButton?.setOnClickListener {
Toast.makeText(context, "Options", Toast.LENGTH_SHORT).show() // FIXME
}
holder.showOnMapRow?.setOnClickListener {
holder.showOnMapSwitch?.isChecked = !holder.showOnMapSwitch?.isChecked!!
}
holder.showOnMapSwitch?.setOnCheckedChangeListener(null)
holder.showOnMapSwitch?.isChecked = settings.isShowingChatOnMap(chatTitle)
holder.showOnMapSwitch?.setOnCheckedChangeListener { _, isChecked ->
settings.showChatOnMap(chatTitle, isChecked)
if (settings.hasAnyChatToShowOnMap()) {
if (osmandHelper.isOsmandNotInstalled()) {
if (isChecked) {
activity?.let {
MainActivity.OsmandMissingDialogFragment()
.show(it.supportFragmentManager, null)
}
}
} else {
if (isChecked) {
app.showLocationHelper.showChatMessages(chatTitle)
} else {
app.showLocationHelper.hideChatMessages(chatTitle)
}
app.showLocationHelper.startShowingLocation()
}
} else {
app.showLocationHelper.stopShowingLocation()
if (!isChecked) {
app.showLocationHelper.hideChatMessages(chatTitle)
}
}
}
holder.imageButton?.visibility = View.GONE
holder.showOnMapRow?.setOnClickListener { showPopupMenu(holder, chatTitle) }
holder.showOnMapState?.text = menuList[stateTextInd]
holder.bottomDivider?.visibility = if (nextItemIsUser) View.VISIBLE else View.GONE
holder.bottomShadow?.visibility = if (lastItem) View.VISIBLE else View.GONE
} else if (item is TdApi.User && holder is ContactViewHolder) {
@ -211,6 +188,56 @@ class LiveNowTabFragment : Fragment(), TelegramListener, TelegramIncomingMessage
override fun getItemCount() = items.size
private fun showPopupMenu(holder: ChatViewHolder, chatTitle: String) {
val ctx = holder.itemView.context
val paint = Paint()
paint.textSize =
resources.getDimensionPixelSize(R.dimen.list_item_title_text_size).toFloat()
val textWidth = Math.max(paint.measureText(menuList[0]), paint.measureText(menuList[1]))
val itemWidth = textWidth.toInt() + AndroidUtils.dpToPx(ctx, 32F)
val minWidth = AndroidUtils.dpToPx(ctx, 100F)
ListPopupWindow(ctx).apply {
isModal = true
anchorView = holder.showOnMapState
setContentWidth(Math.max(minWidth, itemWidth))
setDropDownGravity(Gravity.END or Gravity.TOP)
setAdapter(ArrayAdapter(ctx, R.layout.popup_list_text_item, menuList))
setOnItemClickListener { _, _, position, _ ->
val allSelected = position == 1
settings.showChatOnMap(chatTitle, allSelected)
if (settings.hasAnyChatToShowOnMap()) {
if (osmandHelper.isOsmandNotInstalled()) {
if (allSelected) {
activity?.let {
MainActivity.OsmandMissingDialogFragment()
.show(it.supportFragmentManager, null)
}
}
} else {
if (allSelected) {
app.showLocationHelper.showChatMessages(chatTitle)
} else {
app.showLocationHelper.hideChatMessages(chatTitle)
}
app.showLocationHelper.startShowingLocation()
}
} else {
app.showLocationHelper.stopShowingLocation()
if (!allSelected) {
app.showLocationHelper.hideChatMessages(chatTitle)
}
}
holder.showOnMapState?.text = menuList[position]
dismiss()
}
show()
}
}
inner class ContactViewHolder(val view: View) : RecyclerView.ViewHolder(view) {
val icon: ImageView? = view.findViewById(R.id.icon)
val title: TextView? = view.findViewById(R.id.title)
@ -224,7 +251,7 @@ class LiveNowTabFragment : Fragment(), TelegramListener, TelegramIncomingMessage
val description: TextView? = view.findViewById(R.id.description)
val imageButton: ImageView? = view.findViewById(R.id.image_button)
val showOnMapRow: View? = view.findViewById(R.id.show_on_map_row)
val showOnMapSwitch: Switch? = view.findViewById(R.id.show_on_map_switch)
val showOnMapState: TextView? = view.findViewById(R.id.show_on_map_state)
val bottomDivider: View? = view.findViewById(R.id.bottom_divider)
val bottomShadow: View? = view.findViewById(R.id.bottom_shadow)
}

View file

@ -2965,4 +2965,5 @@
\nНије потребно скидање посебне карте, поглед се прави од стандардних карти.
\n
\nОвај поглед се може искључити тако што се или овде деактивира, или тако што се, по жељи, промени \"Стил карте\" под \"Подеси карту\".</string>
<string name="point_deleted">Тачка %1$s обрисана</string>
</resources>

View file

@ -2511,7 +2511,7 @@ Vänligen tillhandahåll fullständig kod</string>
<string name="wrong_format">Fel format</string>
<string name="shared_string_road">Väg</string>
<string name="show_map">Visa kartan</string>
<string name="route_is_calculated">Rutten är beräknad</string>
<string name="route_is_calculated">Rutten beräknad</string>
<string name="round_trip">Rundtur</string>
<string name="make_round_trip">Gör en rundtur</string>
@ -2521,12 +2521,12 @@ Vänligen tillhandahåll fullständig kod</string>
<string name="my_location">Min plats</string>
<string name="shared_string_sort">Sortera</string>
<string name="is_saved">har sparats</string>
<string name="marker_save_as_track">Spara som spår</string>
<string name="marker_save_as_track">Spara som GPX-fil</string>
<string name="move_to_history">Flytta till historiken</string>
<string name="show_arrows_on_the_map">Visa pilar på kartan</string>
<string name="show_passed">Visa passerade</string>
<string name="hide_passed">Dölj passerade</string>
<string name="remove_from_map_markers">Tag bort från Kartmarkörer</string>
<string name="remove_from_map_markers">Tag bort från kartmarkörer\'</string>
<string name="shared_string_list">Lista</string>
<string name="shared_string_groups">Grupper</string>
<string name="passed">Senast använt: %1$s</string>
@ -2557,17 +2557,17 @@ Vänligen tillhandahåll fullständig kod</string>
<string name="shared_string_paused">Pausad</string>
<string name="retry">Försök igen</string>
<string name="plan_route_no_markers_toast">Du måste lägga till åtminstone en markör för att använda denna funktion.</string>
<string name="osn_modify_dialog_error">Ett undantagsfel inträffade: anteckningen ändrades inte</string>
<string name="osn_modify_dialog_error">Kunde ej ändra anteckning</string>
<string name="osn_modify_dialog_title">Ändra anteckning</string>
<string name="context_menu_item_modify_note">Ändra OSM-anteckning</string>
<string name="coordinates_format">Koordinatformat</string>
<string name="use_system_keyboard">Använd systemets tangentbord</string>
<string name="fast_coordinates_input_descr">Välj koordinatformat. Du kan alltid ändra det genom att peta på Alternativ.</string>
<string name="fast_coordinates_input_descr">Välj koordinatformat. Du kan alltid ändra det genom att trycka på \'Alternativ\'.</string>
<string name="use_location">Använd platsen</string>
<string name="shared_string_finish">Avsluta</string>
<string name="plan_route">Planera rutt</string>
<string name="marker_save_as_track_descr">Exportera dina markörer till en fil:</string>
<string name="group_will_be_removed_after_restart">Gruppen tas bort efter nästa omstart av appen.</string>
<string name="marker_save_as_track_descr">Exportera dina markörer till följande GPX-fil:</string>
<string name="group_will_be_removed_after_restart">Gruppen kommer att försvinna nästa gång du startar appen.</string>
<string name="date_added">Datum tillagd</string>
<string name="order_by">Ordna efter:</string>
<string name="all_markers_moved_to_history">Alla kartmarkörer har flyttats till historiken</string>
@ -2601,15 +2601,15 @@ Vänligen tillhandahåll fullständig kod</string>
<string name="store_tracks_in_monthly_directories_descrp">Spara inspelade spår i undermappar efter inspelad månad (typ 2017-01).</string>
<string name="mapillary_menu_descr_dates">Visa endast tillagda bilder</string>
<string name="mapillary_menu_descr_username">Visa endast bilder tillagda av</string>
<string name="import_gpx_file_description">kan importeras som favoritpunkter eller som spårfil.</string>
<string name="import_gpx_file_description">kan importeras som favoriter eller som GPX-fil.</string>
<string name="import_as_gpx">Importera som GPX-fil</string>
<string name="import_as_favorites">Importera som favorit</string>
<string name="import_as_favorites">Importera som favoriter</string>
<string name="import_file">Importera fil</string>
<string name="wrong_input">Felaktig inmatning</string>
<string name="waypoints_added_to_map_markers">Waypoints tillagda i kartmarkörer</string>
<string name="make_round_trip_descr">Lägg till kopia av startpunkten som destination.</string>
<string name="fast_coordinates_input">Snabbinmatning av koordinater</string>
<string name="add_location_as_first_point_descr">Lägg till din position som första punkt för att planera en perfekt rutt.</string>
<string name="add_location_as_first_point_descr">Lägg till din position som första punkt för att planera den perfekta rutten.</string>
<string name="coordinate_input">Koordinatinmatning</string>
<string name="modify_the_search_query">Ändra sökningen.</string>
<string name="empty_state_osm_edits">Skapa eller ändra OSM-objekt</string>
@ -2622,7 +2622,7 @@ Vänligen tillhandahåll fullständig kod</string>
<string name="notes_by_date">Anteckningar efter datum</string>
<string name="by_date">Efter datum</string>
<string name="by_type">Efter typ</string>
<string name="looking_for_tracks_with_waypoints">Söker spår med waypoints</string>
<string name="looking_for_tracks_with_waypoints">Söker efter spår med waypoints</string>
<string name="shared_string_more_without_dots">Mer</string>
<string name="appearance_on_the_map">Utseende på kartan</string>
<string name="what_is_here">Det som finns här:</string>
@ -2684,23 +2684,23 @@ Vänligen tillhandahåll fullständig kod</string>
<string name="one_tap_active_descr">Tryck på en markör på kartan för att flytta den till toppen av de aktiva markörerna utan att öppna sammanhangsmenyn.</string>
<string name="one_tap_active">Ett tryck för att aktivera</string>
<string name="empty_state_av_notes_desc">Lägg till ljud-, video- eller fotonotering för varje punkt på kartan, med hjälp av widgeten eller menyn.</string>
<string name="add_track_to_markers_descr">Välj ett spår att lägga till sina waypoints till markörer. (Endast spår med waypoints visas.)</string>
<string name="add_track_to_markers_descr">Välj ett spår för att lägga till dess waypoints till markörer.</string>
<string name="add_favourites_group_to_markers_descr">Välj en favoritkategori för att lägga till markörer.</string>
<string name="shared_string_gpx_waypoints">Spåra waypoints</string>
<string name="favourites_group">Kategorin Favoriter</string>
<string name="add_group">Lägg till en grupp</string>
<string name="add_group_descr">Du kan importera grupper från favoriter eller spår-waypoints.</string>
<string name="add_group_descr">Importera grupper från favoriter eller GPX-waypoints.</string>
<string name="empty_state_markers_active">Skapa kartmarkörer!</string>
<string name="empty_state_markers_active_desc">Tryck långt eller kort på platser, tryck sedan på flaggknappen.</string>
<string name="empty_state_markers_active_desc">Tryck långt eller kort på \'Platser\', tryck sedan på flaggknappen.</string>
<string name="empty_state_markers_groups">Importera grupper</string>
<string name="empty_state_markers_groups_desc">Du kan importera Favoritgrupper eller spåra waypoints som markörer.</string>
<string name="empty_state_markers_groups_desc">Importera Favoritgrupper eller waypoints som markörer.</string>
<string name="empty_state_markers_history_desc">Markörer markerade som godkända visas på denna skärm.</string>
<string name="shared_string_two">Två</string>
<string name="shared_string_one">En</string>
<string name="show_guide_line_descr">Visa styrlinjer från din position till de aktiva markörslägena.</string>
<string name="show_guide_line_descr">Visa styrlinjer från din position till de aktiva markörlägena.</string>
<string name="show_arrows_descr">Visa en eller två pilar som anger riktningen till de aktiva markörerna.</string>
<string name="distance_indication_descr">Välj hur du vill visa avståndet till aktiva markörer.</string>
<string name="active_markers_descr">Välj hur många riktningsindikatorer som visas.</string>
<string name="active_markers_descr">Välj hur många riktningsindikatorer som ska visas.</string>
<string name="digits_quantity">Antal decimaler</string>
<string name="shared_string_right">Höger</string>
<string name="shared_string_left">Vänster</string>
@ -2708,12 +2708,12 @@ Vänligen tillhandahåll fullständig kod</string>
<string name="shared_string_paste">Klistra in</string>
<string name="coordinate_input_accuracy_description">Växla automatiskt till nästa fält efter du skrivit in %1$d decimaler.</string>
<string name="coordinate_input_accuracy">%1$d decimaler</string>
<string name="go_to_next_field">Gå till nästa fält</string>
<string name="go_to_next_field">Nästa fält</string>
<string name="rename_marker">Byt namn på markör</string>
<string name="tap_on_map_to_hide_interface_descr">Ett tryck på kartan växlar kontrollknappar och widgets.</string>
<string name="tap_on_map_to_hide_interface">Helskärmsläge</string>
<string name="mark_passed">Markör godkänd</string>
<string name="show_guide_line">Visa stödlinjer</string>
<string name="show_guide_line">Visa riktlinjer</string>
<string name="marker_show_distance_descr">Välj hur du vill ange avstånd och riktning till kartmarkörer på kartan:</string>
<string name="map_orientation_change_in_accordance_with_speed">Kartorienteringströskel</string>
<string name="map_orientation_change_in_accordance_with_speed_descr">Välj nedan vilken hastighet kartläget växlar från \"riktning\" till \"kompass\".</string>
@ -2997,4 +2997,15 @@ Vänligen tillhandahåll fullständig kod</string>
<string name="get_osmand_live">Skaffa OsmAnd Live för att låsa upp alla features: Dagliga kartuppdateringar med obegränsat antal nedladdningar, alla betal-och gratistillägg, Wikipedia, Wikivoyage och mycket mer.</string>
<string name="unirs_render_descr">Ändring av standardstilen för att öka kontrasten av gång och cykelvägar. Använder färger från tidigare versioner av Mapink.</string>
<string name="shared_string_gpx_files">GPX-filer</string>
<string name="release_3_0">• Nyhet: Stöd för globala offline reseguider. Refererade platser är länkade till kartan. Datan kommer initialt från Wikivoyage.
\n
\n • Wikipedia: Nytt utseende, aktiva länkar, stöd för bilder
\n
\n • Open Track UI: Stöd för waypoint-grupper
\n
\n • Kartmarkörer: Importering av valda grupper från GPX-filer, koordinatinmatning, nytt utseende
\n
\n • OsmAnd Live-prenumeration stödjer nu alla OsmAnd features
\n
\n</string>
</resources>