diff --git a/OsmAnd-telegram/src/net/osmand/telegram/ui/MyLocationTabFragment.kt b/OsmAnd-telegram/src/net/osmand/telegram/ui/MyLocationTabFragment.kt index 5f6c7fa214..89b460b38a 100644 --- a/OsmAnd-telegram/src/net/osmand/telegram/ui/MyLocationTabFragment.kt +++ b/OsmAnd-telegram/src/net/osmand/telegram/ui/MyLocationTabFragment.kt @@ -1,6 +1,7 @@ package net.osmand.telegram.ui import android.animation.* +import android.annotation.SuppressLint import android.content.Intent import android.graphics.drawable.GradientDrawable import android.os.Build @@ -48,7 +49,6 @@ class MyLocationTabFragment : Fragment(), TelegramListener, ChatLiveMessagesList private lateinit var textContainer: LinearLayout private lateinit var titleContainer: LinearLayout private lateinit var optionsBtn: ImageView - private lateinit var optionsBtnTitle: ImageView private lateinit var title: TextView private lateinit var description: TextView private lateinit var searchBox: FrameLayout @@ -114,12 +114,12 @@ class MyLocationTabFragment : Fragment(), TelegramListener, ChatLiveMessagesList optionsBtn = mainView.findViewById(R.id.options).apply { setImageDrawable(app.uiUtils.getThemedIcon(R.drawable.ic_action_other_menu)) - setOnClickListener { showPopupMenu(optionsBtn) } + setOnClickListener { showPopupMenu(this) } } - optionsBtnTitle = mainView.findViewById(R.id.options_title).apply { + mainView.findViewById(R.id.options_title).apply { setImageDrawable(app.uiUtils.getThemedIcon(R.drawable.ic_action_other_menu)) - setOnClickListener { showPopupMenu(optionsBtnTitle) } + setOnClickListener { showPopupMenu(this) } } imageContainer = mainView.findViewById(R.id.image_container) @@ -166,9 +166,7 @@ class MyLocationTabFragment : Fragment(), TelegramListener, ChatLiveMessagesList setOnCheckedChangeListener { _, isChecked -> if (!isChecked) { app.settings.stopSharingLocationToChats() - if (!app.settings.hasAnyChatToShareLocation()) { - app.shareLocationHelper.stopSharingLocation() - } + app.shareLocationHelper.stopSharingLocation() updateContent() } } @@ -240,9 +238,7 @@ class MyLocationTabFragment : Fragment(), TelegramListener, ChatLiveMessagesList } override fun onChatLiveMessagesUpdated(messages: List) { - app.runInUIThread { - updateContent() - } + app.runInUIThread { updateContent() } } fun onPrimaryBtnClick() { @@ -447,6 +443,7 @@ class MyLocationTabFragment : Fragment(), TelegramListener, ChatLiveMessagesList } } + @SuppressLint("SetTextI18n") override fun onBindViewHolder(holder: BaseViewHolder, position: Int) { val chat = chats[position] val lastItem = position == itemCount - 1 @@ -479,9 +476,7 @@ class MyLocationTabFragment : Fragment(), TelegramListener, ChatLiveMessagesList holder.itemView.setOnClickListener { if (live) { app.settings.shareLocationToChat(chat.id, false) - if (!app.settings.hasAnyChatToShareLocation()) { - app.shareLocationHelper.stopSharingLocation() - } + app.shareLocationHelper.stopSharingLocation() notifyItemChanged(position) } else { holder.checkBox?.apply { @@ -505,11 +500,10 @@ class MyLocationTabFragment : Fragment(), TelegramListener, ChatLiveMessagesList val duration = settings.getChatLivePeriod(chat.id)?.toInt() if (duration != null && duration > 0) { - holder.descriptionDuration?.text = OsmandFormatter.getFormattedDuration(context!!, duration, false) + holder.descriptionDuration?.text = OsmandFormatter.getFormattedDuration(context!!, duration) holder.description?.apply { visibility = View.VISIBLE - val sharingTimeDescription = "${getText(R.string.sharing_time)}:" - text = sharingTimeDescription + text = "${getText(R.string.sharing_time)}:" } } val message = telegramHelper.getChatLiveMessages()[chat.id] @@ -519,10 +513,8 @@ class MyLocationTabFragment : Fragment(), TelegramListener, ChatLiveMessagesList val expiresIn = content.expiresIn holder.textInArea?.apply { visibility = View.VISIBLE - val addDuration = OsmandFormatter.getFormattedDuration(context!!, - TelegramHelper.MESSAGE_ADD_ACTIVE_TIME_SEC, false) - val textInAreaDescription = "${getText(R.string.plus)} $addDuration" - text = textInAreaDescription + text = "${getText(R.string.plus)} ${OsmandFormatter.getFormattedDuration(context!!, + TelegramHelper.MESSAGE_ADD_ACTIVE_TIME_SEC)}" setOnClickListener { var newLivePeriod = app.settings.getChatLivePeriod(chat.id) if (newLivePeriod != null) { @@ -536,8 +528,7 @@ class MyLocationTabFragment : Fragment(), TelegramListener, ChatLiveMessagesList } holder.stopSharingDescr?.apply { visibility = View.VISIBLE - val stopDescription = "${getText(R.string.stop_at)}:" - text = stopDescription + text = "${getText(R.string.stop_at)}:" } holder.stopSharingFirstPart?.apply { @@ -547,9 +538,8 @@ class MyLocationTabFragment : Fragment(), TelegramListener, ChatLiveMessagesList holder.stopSharingSecondPart?.apply { visibility = View.VISIBLE - val stopSharingSecondPart = "(${getString(R.string.in_time, + text = "(${getString(R.string.in_time, OsmandFormatter.getFormattedDuration(context!!, expiresIn, true))})" - text = stopSharingSecondPart } if (expiresIn == 0) { removeItem(chat) diff --git a/OsmAnd-telegram/src/net/osmand/telegram/ui/SettingsDialogFragment.kt b/OsmAnd-telegram/src/net/osmand/telegram/ui/SettingsDialogFragment.kt index dd8380b504..d46b89d99a 100644 --- a/OsmAnd-telegram/src/net/osmand/telegram/ui/SettingsDialogFragment.kt +++ b/OsmAnd-telegram/src/net/osmand/telegram/ui/SettingsDialogFragment.kt @@ -103,10 +103,10 @@ class SettingsDialogFragment : DialogFragment() { listOf(30 * 60, 60 * 60, 90 * 60) ) { - override fun getCurrentValue() = OsmandFormatter.getFormattedDuration(app, values[0],false) + override fun getCurrentValue() = OsmandFormatter.getFormattedDuration(app, values[0]) override fun setCurrentValue(index: Int) { - val value = OsmandFormatter.getFormattedDuration(app, values[index],false) + val value = OsmandFormatter.getFormattedDuration(app, values[index]) Toast.makeText(context, value, Toast.LENGTH_SHORT).show() } } @@ -119,10 +119,10 @@ class SettingsDialogFragment : DialogFragment() { listOf(30 * 60, 60 * 60, 90 * 60) ) { - override fun getCurrentValue() = OsmandFormatter.getFormattedDuration(app, values[0],false) + override fun getCurrentValue() = OsmandFormatter.getFormattedDuration(app, values[0]) override fun setCurrentValue(index: Int) { - val value = OsmandFormatter.getFormattedDuration(app, values[index],false) + val value = OsmandFormatter.getFormattedDuration(app, values[index]) Toast.makeText(context, value, Toast.LENGTH_SHORT).show() } } @@ -135,10 +135,10 @@ class SettingsDialogFragment : DialogFragment() { listOf(30 * 60, 60 * 60, 90 * 60) ) { - override fun getCurrentValue() = OsmandFormatter.getFormattedDuration(app, values[0],false) + override fun getCurrentValue() = OsmandFormatter.getFormattedDuration(app, values[0]) override fun setCurrentValue(index: Int) { - val value = OsmandFormatter.getFormattedDuration(app, values[index],false) + val value = OsmandFormatter.getFormattedDuration(app, values[index]) Toast.makeText(context, value, Toast.LENGTH_SHORT).show() } } @@ -154,7 +154,7 @@ class SettingsDialogFragment : DialogFragment() { abstract fun setCurrentValue(index: Int) - fun getMenuItems() = values.map { OsmandFormatter.getFormattedDuration(app, it, false) } + fun getMenuItems() = values.map { OsmandFormatter.getFormattedDuration(app, it) } } private enum class AppConnect( diff --git a/OsmAnd-telegram/src/net/osmand/telegram/utils/OsmandFormatter.kt b/OsmAnd-telegram/src/net/osmand/telegram/utils/OsmandFormatter.kt index 1c8588ca55..5e8e222636 100644 --- a/OsmAnd-telegram/src/net/osmand/telegram/utils/OsmandFormatter.kt +++ b/OsmAnd-telegram/src/net/osmand/telegram/utils/OsmandFormatter.kt @@ -19,6 +19,9 @@ object OsmandFormatter { val FEET_IN_ONE_METER = YARDS_IN_ONE_METER * 3f private val fixed2 = DecimalFormat("0.00") private val fixed1 = DecimalFormat("0.0") + + private const val SHORT_TIME_FORMAT = "%02d:%02d" + private const val SHORT_SIMPLE_DATE_FORMAT = "HH:mm" private val dateFormatSymbols = DateFormatSymbols.getInstance() private val localDaysStr = getLettersStringArray(dateFormatSymbols.shortWeekdays, 2) @@ -30,11 +33,11 @@ object OsmandFormatter { fixed2.minimumIntegerDigits = 1 } - fun getFormattedDuration(ctx: Context, seconds: Int, short: Boolean): String { + fun getFormattedDuration(ctx: Context, seconds: Int, short: Boolean = false): String { val hours = seconds / (60 * 60) val minutes = seconds / 60 % 60 if (short) { - return String.format("%02d:%02d", hours, minutes) + return String.format(SHORT_TIME_FORMAT, hours, minutes) } return when { hours > 0 -> { @@ -53,9 +56,9 @@ object OsmandFormatter { val calendar = Calendar.getInstance() calendar.timeInMillis = System.currentTimeMillis() + (seconds * 1000) return if (isSameDay(calendar, Calendar.getInstance())) { - SimpleDateFormat("HH:mm", Locale.getDefault()).format(calendar.time) + SimpleDateFormat(SHORT_SIMPLE_DATE_FORMAT, Locale.getDefault()).format(calendar.time) } else { - SimpleDateFormat("HH:mm", Locale.getDefault()).format(calendar.time) + + SimpleDateFormat(SHORT_SIMPLE_DATE_FORMAT, Locale.getDefault()).format(calendar.time) + " " + localDaysStr[calendar.get(Calendar.DAY_OF_WEEK)] } } @@ -127,11 +130,7 @@ object OsmandFormatter { } @JvmOverloads - fun getFormattedDistance( - meters: Float, - ctx: TelegramApplication, - forceTrailingZeros: Boolean = true - ): String { + fun getFormattedDistance(meters: Float, ctx: TelegramApplication, forceTrailingZeros: Boolean = true): String { val format1 = if (forceTrailingZeros) "{0,number,0.0} " else "{0,number,0.#} " val format2 = if (forceTrailingZeros) "{0,number,0.00} " else "{0,number,0.##} " @@ -150,39 +149,19 @@ object OsmandFormatter { } if (meters >= 100 * mainUnitInMeters) { - return (meters / mainUnitInMeters + 0.5).toInt().toString() + " " + ctx.getString( - mainUnitStr - ) //$NON-NLS-1$ + return (meters / mainUnitInMeters + 0.5).toInt().toString() + " " + ctx.getString(mainUnitStr) //$NON-NLS-1$ } else if (meters > 9.99f * mainUnitInMeters) { - return MessageFormat.format( - format1 + ctx.getString(mainUnitStr), - meters / mainUnitInMeters - ).replace('\n', ' ') //$NON-NLS-1$ + return MessageFormat.format(format1 + ctx.getString(mainUnitStr), meters / mainUnitInMeters).replace('\n', ' ') //$NON-NLS-1$ } else if (meters > 0.999f * mainUnitInMeters) { - return MessageFormat.format( - format2 + ctx.getString(mainUnitStr), - meters / mainUnitInMeters - ).replace('\n', ' ') //$NON-NLS-1$ + return MessageFormat.format(format2 + ctx.getString(mainUnitStr), meters / mainUnitInMeters).replace('\n', ' ') //$NON-NLS-1$ } else if (mc == MetricsConstants.MILES_AND_FEET && meters > 0.249f * mainUnitInMeters) { - return MessageFormat.format( - format2 + ctx.getString(mainUnitStr), - meters / mainUnitInMeters - ).replace('\n', ' ') //$NON-NLS-1$ + return MessageFormat.format(format2 + ctx.getString(mainUnitStr), meters / mainUnitInMeters).replace('\n', ' ') //$NON-NLS-1$ } else if (mc == MetricsConstants.MILES_AND_METERS && meters > 0.249f * mainUnitInMeters) { - return MessageFormat.format( - format2 + ctx.getString(mainUnitStr), - meters / mainUnitInMeters - ).replace('\n', ' ') //$NON-NLS-1$ + return MessageFormat.format(format2 + ctx.getString(mainUnitStr), meters / mainUnitInMeters).replace('\n', ' ') //$NON-NLS-1$ } else if (mc == MetricsConstants.MILES_AND_YARDS && meters > 0.249f * mainUnitInMeters) { - return MessageFormat.format( - format2 + ctx.getString(mainUnitStr), - meters / mainUnitInMeters - ).replace('\n', ' ') //$NON-NLS-1$ + return MessageFormat.format(format2 + ctx.getString(mainUnitStr), meters / mainUnitInMeters).replace('\n', ' ') //$NON-NLS-1$ } else if (mc == MetricsConstants.NAUTICAL_MILES && meters > 0.99f * mainUnitInMeters) { - return MessageFormat.format( - format2 + ctx.getString(mainUnitStr), - meters / mainUnitInMeters - ).replace('\n', ' ') //$NON-NLS-1$ + return MessageFormat.format(format2 + ctx.getString(mainUnitStr), meters / mainUnitInMeters).replace('\n', ' ') //$NON-NLS-1$ } else { if (mc == MetricsConstants.KILOMETERS_AND_METERS || mc == MetricsConstants.MILES_AND_METERS) { return (meters + 0.5).toInt().toString() + " " + ctx.getString(R.string.m) //$NON-NLS-1$ @@ -265,13 +244,6 @@ object OsmandFormatter { return (kmh10 / 10f).toString() + " " + SpeedConstants.METERS_PER_SECOND.toShortString(ctx) } } - fun capitalizeFirstLetter(s: String?): String? { - return if (s != null && s.isNotEmpty()) { - Character.toUpperCase(s[0]) + if (s.length > 1) s.substring(1) else "" - } else { - s - } - } private fun isSameDay(cal1: Calendar, cal2: Calendar): Boolean { return cal1.get(Calendar.ERA) == cal2.get(Calendar.ERA) && @@ -283,9 +255,9 @@ object OsmandFormatter { val newStrings = arrayOfNulls(strings.size) for (i in strings.indices) { if (strings[i].length > letters) { - newStrings[i] = capitalizeFirstLetter(strings[i].substring(0, letters)) + newStrings[i] = (strings[i].substring(0, letters)).capitalize() } else { - newStrings[i] = capitalizeFirstLetter(strings[i]) + newStrings[i] = strings[i].capitalize() } } return newStrings