@ -25,7 +25,7 @@
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/AppTheme"
|
||||
tools:ignore="LockedOrientationActivity">
|
||||
<activity android:name=".ui.activities.MainActivity" android:launchMode="singleInstance" android:theme="@style/AppTheme.Main" android:screenOrientation="portrait">
|
||||
<activity android:name=".ui.activities.MainActivity" android:launchMode="singleInstance" android:theme="@style/AppTheme.Main">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
|
||||
|
@ -30,6 +30,7 @@ object Preferences : KotprefModel() {
|
||||
var customLocationLon by stringPref(key = "PREF_CUSTOM_LOCATION_LON", default = "")
|
||||
var customLocationAdd by stringPref(key = "PREF_CUSTOM_LOCATION_ADD", default = "")
|
||||
var dateFormat by stringPref(default = "")
|
||||
var isDateCapitalize by booleanPref(default = false)
|
||||
var weatherRefreshPeriod by intPref(key = "PREF_WEATHER_REFRESH_PERIOD", default = 1)
|
||||
var showUntil by intPref(key = "PREF_SHOW_UNTIL", default = 1)
|
||||
var calendarAppName by stringPref(key = "PREF_CALENDAR_APP_NAME", default = "")
|
||||
|
@ -4,6 +4,7 @@ import android.Manifest
|
||||
import android.content.ContentUris
|
||||
import android.content.Context
|
||||
import android.provider.CalendarContract
|
||||
import android.util.Log
|
||||
import com.tommasoberlose.anotherwidget.services.EventListenerJob
|
||||
import com.tommasoberlose.anotherwidget.db.EventRepository
|
||||
import com.tommasoberlose.anotherwidget.models.Event
|
||||
@ -61,6 +62,7 @@ object CalendarHelper {
|
||||
for (instance in instances) {
|
||||
try {
|
||||
val e = provider.getEvent(instance.eventId)
|
||||
Log.d("ciao", "evento: $e")
|
||||
if (e != null && !e.deleted && instance.begin <= limit.timeInMillis && (Preferences.calendarAllDay || !e.allDay) && !getFilteredCalendarIdList().contains(
|
||||
e.calendarId
|
||||
) && (Preferences.showDeclinedEvents || e.selfAttendeeStatus.toInt() != CalendarContract.Attendees.ATTENDEE_STATUS_DECLINED)
|
||||
|
@ -12,27 +12,30 @@ import java.util.*
|
||||
object DateHelper {
|
||||
fun getDateText(context: Context, date: Calendar): String {
|
||||
return if (Preferences.dateFormat != "") {
|
||||
try {
|
||||
val text = try {
|
||||
SimpleDateFormat(Preferences.dateFormat, Locale.getDefault()).format(date.time)
|
||||
} catch (e: Exception) {
|
||||
getDefaultDateText(context, date)
|
||||
}
|
||||
if (Preferences.isDateCapitalize) text.getCapWordString() else text
|
||||
} else {
|
||||
val flags: Int =
|
||||
DateUtils.FORMAT_SHOW_DATE or DateUtils.FORMAT_NO_YEAR or DateUtils.FORMAT_ABBREV_MONTH
|
||||
"%s, %s".format(
|
||||
val text = "%s, %s".format(
|
||||
SimpleDateFormat("EEEE", Locale.getDefault()).format(date.time),
|
||||
DateUtils.formatDateTime(context, date.timeInMillis, flags)
|
||||
)
|
||||
if (Preferences.isDateCapitalize) text.getCapWordString() else text
|
||||
}
|
||||
}
|
||||
|
||||
fun getDefaultDateText(context: Context, date: Calendar): String {
|
||||
val flags: Int =
|
||||
DateUtils.FORMAT_SHOW_DATE or DateUtils.FORMAT_NO_YEAR or DateUtils.FORMAT_ABBREV_MONTH
|
||||
return "%s, %s".format(
|
||||
val text = "%s, %s".format(
|
||||
SimpleDateFormat("EEEE", Locale.getDefault()).format(date.time),
|
||||
DateUtils.formatDateTime(context, date.timeInMillis, flags)
|
||||
)
|
||||
return if (Preferences.isDateCapitalize) text.getCapWordString() else text
|
||||
}
|
||||
}
|
@ -3,6 +3,7 @@ package com.tommasoberlose.anotherwidget.helpers
|
||||
import android.appwidget.AppWidgetManager
|
||||
import android.content.Context
|
||||
import android.content.res.Configuration.ORIENTATION_PORTRAIT
|
||||
import android.util.Log
|
||||
import com.google.firebase.crashlytics.FirebaseCrashlytics
|
||||
import com.tommasoberlose.anotherwidget.db.EventRepository
|
||||
import com.tommasoberlose.anotherwidget.global.Preferences
|
||||
@ -24,19 +25,9 @@ object WidgetHelper {
|
||||
return widthInPx to heightInPx
|
||||
}
|
||||
|
||||
private fun getWidgetWidth(isPortrait: Boolean, widgetId: Int): Int =
|
||||
if (isPortrait) {
|
||||
getWidgetSizeInDp(widgetId, AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH)
|
||||
} else {
|
||||
getWidgetSizeInDp(widgetId, AppWidgetManager.OPTION_APPWIDGET_MAX_WIDTH)
|
||||
}
|
||||
private fun getWidgetWidth(isPortrait: Boolean, widgetId: Int): Int = getWidgetSizeInDp(widgetId, AppWidgetManager.OPTION_APPWIDGET_MAX_WIDTH)
|
||||
|
||||
private fun getWidgetHeight(isPortrait: Boolean, widgetId: Int): Int =
|
||||
if (isPortrait) {
|
||||
getWidgetSizeInDp(widgetId, AppWidgetManager.OPTION_APPWIDGET_MAX_HEIGHT)
|
||||
} else {
|
||||
getWidgetSizeInDp(widgetId, AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT)
|
||||
}
|
||||
private fun getWidgetHeight(isPortrait: Boolean, widgetId: Int): Int = getWidgetSizeInDp(widgetId, AppWidgetManager.OPTION_APPWIDGET_MAX_HEIGHT)
|
||||
|
||||
private fun getWidgetSizeInDp(widgetId: Int, key: String): Int =
|
||||
appWidgetManager.getAppWidgetOptions(widgetId).getInt(key, 0)
|
||||
|
@ -18,7 +18,9 @@ import com.tommasoberlose.anotherwidget.databinding.ActivityCustomDateBinding
|
||||
import com.tommasoberlose.anotherwidget.global.Preferences
|
||||
import com.tommasoberlose.anotherwidget.helpers.DateHelper
|
||||
import com.tommasoberlose.anotherwidget.ui.viewmodels.CustomDateViewModel
|
||||
import com.tommasoberlose.anotherwidget.utils.getCapWordString
|
||||
import com.tommasoberlose.anotherwidget.utils.openURI
|
||||
import com.tommasoberlose.anotherwidget.utils.toast
|
||||
import kotlinx.android.synthetic.main.activity_custom_date.*
|
||||
import kotlinx.android.synthetic.main.activity_custom_location.action_back
|
||||
import kotlinx.android.synthetic.main.activity_custom_location.list_view
|
||||
@ -78,7 +80,7 @@ class CustomDateActivity : AppCompatActivity() {
|
||||
}
|
||||
|
||||
delay(200)
|
||||
val text = if (dateFormat != "") {
|
||||
var text = if (dateFormat != "") {
|
||||
try {
|
||||
SimpleDateFormat(dateFormat, Locale.getDefault()).format(DATE.time)
|
||||
} catch (e: Exception) {
|
||||
@ -88,6 +90,10 @@ class CustomDateActivity : AppCompatActivity() {
|
||||
"__"
|
||||
}
|
||||
|
||||
if (Preferences.isDateCapitalize) {
|
||||
text = text.getCapWordString()
|
||||
}
|
||||
|
||||
withContext(Dispatchers.Main) {
|
||||
action_save.isVisible = text != ERROR_STRING
|
||||
loader.visibility = View.INVISIBLE
|
||||
@ -96,6 +102,11 @@ class CustomDateActivity : AppCompatActivity() {
|
||||
|
||||
}
|
||||
})
|
||||
|
||||
viewModel.isDateCapitalize.observe(this, Observer {
|
||||
viewModel.dateInput.value = viewModel.dateInput.value
|
||||
binding.isdCapitalizeEnabled = it
|
||||
})
|
||||
}
|
||||
|
||||
private fun setupListener() {
|
||||
@ -108,6 +119,15 @@ class CustomDateActivity : AppCompatActivity() {
|
||||
finish()
|
||||
}
|
||||
|
||||
action_capitalize.setOnClickListener {
|
||||
Preferences.isDateCapitalize = !Preferences.isDateCapitalize
|
||||
}
|
||||
|
||||
action_capitalize.setOnLongClickListener {
|
||||
toast(getString(R.string.action_capitalize_the_date))
|
||||
true
|
||||
}
|
||||
|
||||
action_date_format_info.setOnClickListener {
|
||||
openURI("https://developer.android.com/reference/java/text/SimpleDateFormat")
|
||||
}
|
||||
|
@ -14,6 +14,7 @@ import android.util.TypedValue
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.ImageView
|
||||
import android.widget.RelativeLayout
|
||||
import androidx.core.animation.addListener
|
||||
import androidx.core.app.NotificationManagerCompat
|
||||
@ -291,21 +292,27 @@ class MainFragment : Fragment(), SharedPreferences.OnSharedPreferenceChangeList
|
||||
activity?.let { act ->
|
||||
val wallpaper = act.getCurrentWallpaper()
|
||||
widget_bg.setImageDrawable(if (it) wallpaper else null)
|
||||
widget_bg.layoutParams = widget_bg.layoutParams.apply {
|
||||
if (wallpaper != null) {
|
||||
widget_bg.layoutParams =
|
||||
(widget_bg.layoutParams as ViewGroup.MarginLayoutParams).apply {
|
||||
|
||||
val metrics = DisplayMetrics()
|
||||
act.windowManager.defaultDisplay.getMetrics(metrics)
|
||||
|
||||
var newHeight = metrics.heightPixels
|
||||
var newWidth = (wallpaper?.intrinsicWidth ?: 1) * metrics.heightPixels / (wallpaper?.intrinsicHeight ?: 1)
|
||||
|
||||
if (newWidth < metrics.widthPixels) {
|
||||
newWidth = metrics.widthPixels
|
||||
newHeight = (wallpaper?.intrinsicHeight ?: 1) * metrics.widthPixels / (wallpaper?.intrinsicWidth ?: 1)
|
||||
val dimensions: Pair<Int, Int> = if (wallpaper.intrinsicWidth >= wallpaper.intrinsicHeight) {
|
||||
metrics.heightPixels to (wallpaper.intrinsicWidth) * metrics.heightPixels / (wallpaper.intrinsicHeight)
|
||||
} else {
|
||||
metrics.widthPixels to (wallpaper.intrinsicHeight) * metrics.widthPixels / (wallpaper.intrinsicWidth)
|
||||
}
|
||||
|
||||
height = newHeight
|
||||
width = newWidth
|
||||
setMargins(
|
||||
if (dimensions.first >= dimensions.second) (-80).toPixel(requireContext()) else 0,
|
||||
(-80).toPixel(requireContext()), 0, 0
|
||||
)
|
||||
|
||||
width = dimensions.first
|
||||
height = dimensions.second
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
@ -3,8 +3,10 @@ package com.tommasoberlose.anotherwidget.ui.viewmodels
|
||||
import android.app.Application
|
||||
import androidx.lifecycle.AndroidViewModel
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import com.chibatching.kotpref.livedata.asLiveData
|
||||
import com.tommasoberlose.anotherwidget.global.Preferences
|
||||
|
||||
class CustomDateViewModel(application: Application) : AndroidViewModel(application) {
|
||||
val dateInput: MutableLiveData<String> = MutableLiveData(if (Preferences.dateFormat == "") "EEEE, MMM dd" else Preferences.dateFormat)
|
||||
val isDateCapitalize = Preferences.asLiveData(Preferences::isDateCapitalize)
|
||||
}
|
@ -12,6 +12,7 @@ import android.graphics.Color
|
||||
import android.graphics.Typeface
|
||||
import android.os.Bundle
|
||||
import android.text.format.DateUtils
|
||||
import android.util.Log
|
||||
import android.util.TypedValue
|
||||
import android.view.View
|
||||
import android.widget.ImageView
|
||||
@ -34,6 +35,7 @@ import java.lang.Exception
|
||||
import java.text.DateFormat
|
||||
import java.util.*
|
||||
import java.util.concurrent.TimeUnit
|
||||
import kotlin.math.min
|
||||
|
||||
|
||||
class MainWidget : AppWidgetProvider() {
|
||||
@ -84,9 +86,10 @@ class MainWidget : AppWidgetProvider() {
|
||||
appWidgetId: Int) {
|
||||
val displayMetrics = Resources.getSystem().displayMetrics
|
||||
val width = displayMetrics.widthPixels
|
||||
val height = displayMetrics.heightPixels
|
||||
|
||||
val dimensions = WidgetHelper.WidgetSizeProvider(context, appWidgetManager).getWidgetsSize(appWidgetId)
|
||||
generateWidgetView(context, appWidgetId, appWidgetManager, dimensions.first - 8.toPixel(context) /*width - 16.toPixel(context)*/)
|
||||
generateWidgetView(context, appWidgetId, appWidgetManager, min(dimensions.first - 8.toPixel(context), min(width, height) - 16.toPixel(context)))
|
||||
}
|
||||
|
||||
private fun generateWidgetView(context: Context, appWidgetId: Int, appWidgetManager: AppWidgetManager, w: Int) {
|
||||
@ -498,8 +501,8 @@ class MainWidget : AppWidgetProvider() {
|
||||
} else {
|
||||
v.second_row_icon.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.round_today))
|
||||
if (!nextEvent.allDay) {
|
||||
val startHour = DateFormat.getTimeInstance(DateFormat.SHORT).format(nextEvent.startDate)
|
||||
val endHour = DateFormat.getTimeInstance(DateFormat.SHORT).format(nextEvent.endDate)
|
||||
val startHour = DateFormat.getTimeInstance(DateFormat.SHORT, Locale.getDefault()).format(nextEvent.startDate)
|
||||
val endHour = DateFormat.getTimeInstance(DateFormat.SHORT, Locale.getDefault()).format(nextEvent.endDate)
|
||||
|
||||
var dayDiff = TimeUnit.MILLISECONDS.toDays(nextEvent.endDate - nextEvent.startDate)
|
||||
|
||||
|
BIN
app/src/main/res/drawable-hdpi/round_format_size.png
Normal file
After Width: | Height: | Size: 206 B |
BIN
app/src/main/res/drawable-hdpi/round_format_size_black_24.png
Normal file
After Width: | Height: | Size: 237 B |
BIN
app/src/main/res/drawable-hdpi/round_format_size_black_36.png
Normal file
After Width: | Height: | Size: 311 B |
BIN
app/src/main/res/drawable-hdpi/round_format_size_black_48.png
Normal file
After Width: | Height: | Size: 306 B |
BIN
app/src/main/res/drawable-hdpi/round_keyboard_capslock.png
Normal file
After Width: | Height: | Size: 306 B |
After Width: | Height: | Size: 167 B |
After Width: | Height: | Size: 204 B |
After Width: | Height: | Size: 268 B |
BIN
app/src/main/res/drawable-mdpi/round_format_size.png
Normal file
After Width: | Height: | Size: 159 B |
BIN
app/src/main/res/drawable-mdpi/round_format_size_black_24.png
Normal file
After Width: | Height: | Size: 156 B |
BIN
app/src/main/res/drawable-mdpi/round_format_size_black_36.png
Normal file
After Width: | Height: | Size: 237 B |
BIN
app/src/main/res/drawable-mdpi/round_format_size_black_48.png
Normal file
After Width: | Height: | Size: 232 B |
BIN
app/src/main/res/drawable-mdpi/round_keyboard_capslock.png
Normal file
After Width: | Height: | Size: 243 B |
After Width: | Height: | Size: 147 B |
After Width: | Height: | Size: 151 B |
After Width: | Height: | Size: 204 B |
BIN
app/src/main/res/drawable-xhdpi/round_format_size.png
Normal file
After Width: | Height: | Size: 237 B |
BIN
app/src/main/res/drawable-xhdpi/round_format_size_black_24.png
Normal file
After Width: | Height: | Size: 232 B |
BIN
app/src/main/res/drawable-xhdpi/round_format_size_black_36.png
Normal file
After Width: | Height: | Size: 306 B |
BIN
app/src/main/res/drawable-xhdpi/round_format_size_black_48.png
Normal file
After Width: | Height: | Size: 405 B |
BIN
app/src/main/res/drawable-xhdpi/round_keyboard_capslock.png
Normal file
After Width: | Height: | Size: 401 B |
After Width: | Height: | Size: 204 B |
After Width: | Height: | Size: 243 B |
After Width: | Height: | Size: 306 B |
BIN
app/src/main/res/drawable-xxhdpi/round_format_size.png
Normal file
After Width: | Height: | Size: 311 B |
BIN
app/src/main/res/drawable-xxhdpi/round_format_size_black_24.png
Normal file
After Width: | Height: | Size: 306 B |
BIN
app/src/main/res/drawable-xxhdpi/round_format_size_black_36.png
Normal file
After Width: | Height: | Size: 545 B |
BIN
app/src/main/res/drawable-xxhdpi/round_format_size_black_48.png
Normal file
After Width: | Height: | Size: 519 B |
BIN
app/src/main/res/drawable-xxhdpi/round_keyboard_capslock.png
Normal file
After Width: | Height: | Size: 551 B |
After Width: | Height: | Size: 268 B |
After Width: | Height: | Size: 306 B |
After Width: | Height: | Size: 422 B |
BIN
app/src/main/res/drawable-xxxhdpi/round_format_size.png
Normal file
After Width: | Height: | Size: 306 B |
BIN
app/src/main/res/drawable-xxxhdpi/round_format_size_black_24.png
Normal file
After Width: | Height: | Size: 405 B |
BIN
app/src/main/res/drawable-xxxhdpi/round_format_size_black_36.png
Normal file
After Width: | Height: | Size: 519 B |
BIN
app/src/main/res/drawable-xxxhdpi/round_format_size_black_48.png
Normal file
After Width: | Height: | Size: 688 B |
BIN
app/src/main/res/drawable-xxxhdpi/round_keyboard_capslock.png
Normal file
After Width: | Height: | Size: 724 B |
After Width: | Height: | Size: 306 B |
After Width: | Height: | Size: 401 B |
After Width: | Height: | Size: 551 B |
10
app/src/main/res/drawable/round_format_size_24.xml
Normal file
@ -0,0 +1,10 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
android:tint="?attr/colorControlNormal">
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="M9,5.5c0,0.83 0.67,1.5 1.5,1.5H14v10.5c0,0.83 0.67,1.5 1.5,1.5s1.5,-0.67 1.5,-1.5V7h3.5c0.83,0 1.5,-0.67 1.5,-1.5S21.33,4 20.5,4h-10C9.67,4 9,4.67 9,5.5zM4.5,12H6v5.5c0,0.83 0.67,1.5 1.5,1.5S9,18.33 9,17.5V12h1.5c0.83,0 1.5,-0.67 1.5,-1.5S11.33,9 10.5,9h-6C3.67,9 3,9.67 3,10.5S3.67,12 4.5,12z"/>
|
||||
</vector>
|
10
app/src/main/res/drawable/round_keyboard_capslock_24.xml
Normal file
@ -0,0 +1,10 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
android:tint="?attr/colorControlNormal">
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="M12,8.41l3.89,3.89c0.39,0.39 1.02,0.39 1.41,0 0.39,-0.39 0.39,-1.02 0,-1.41L12.71,6.3c-0.39,-0.39 -1.02,-0.39 -1.41,0l-4.6,4.59c-0.39,0.39 -0.39,1.02 0,1.41 0.39,0.39 1.02,0.39 1.41,0L12,8.41zM7,18h10c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1H7c-0.55,0 -1,0.45 -1,1s0.45,1 1,1z"/>
|
||||
</vector>
|
@ -5,6 +5,9 @@
|
||||
<variable
|
||||
name="viewModel"
|
||||
type="com.tommasoberlose.anotherwidget.ui.viewmodels.CustomDateViewModel" />
|
||||
<variable
|
||||
name="isdCapitalizeEnabled"
|
||||
type="Boolean" />
|
||||
</data>
|
||||
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
@ -113,6 +116,9 @@
|
||||
app:cardElevation="2dp"
|
||||
app:cardCornerRadius="0dp"
|
||||
app:cardBackgroundColor="@color/colorPrimary">
|
||||
<RelativeLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="48dp"
|
||||
@ -122,15 +128,33 @@
|
||||
android:textColor="@color/colorPrimaryText"
|
||||
android:textSize="20sp"
|
||||
app:textAllCaps="false"
|
||||
android:gravity="center"
|
||||
android:gravity="center_vertical|start"
|
||||
android:paddingEnd="32dp"
|
||||
android:layout_centerVertical="true"
|
||||
android:textAlignment="viewStart"
|
||||
android:maxLines="1"
|
||||
android:lines="1"
|
||||
android:singleLine="true"
|
||||
android:ellipsize="end"
|
||||
android:layout_marginTop="8dp"
|
||||
android:layout_marginLeft="16dp"
|
||||
android:layout_marginRight="16dp"
|
||||
android:layout_marginLeft="32dp"
|
||||
android:layout_marginRight="32dp"
|
||||
android:layout_marginBottom="16dp" />
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="40dp"
|
||||
android:padding="5dp"
|
||||
android:layout_centerVertical="true"
|
||||
android:src="@drawable/round_keyboard_capslock"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:clickable="true"
|
||||
android:focusable="true"
|
||||
android:background="?attr/selectableItemBackgroundBorderless"
|
||||
app:tint="@color/colorPrimaryText"
|
||||
android:layout_marginEnd="20dp"
|
||||
android:alpha="@{isdCapitalizeEnabled ? 1f : 0.3f, default=0.3}"
|
||||
android:id="@+id/action_capitalize" />
|
||||
</RelativeLayout>
|
||||
</com.google.android.material.card.MaterialCardView>
|
||||
<RelativeLayout
|
||||
android:layout_width="match_parent"
|
||||
|
@ -77,8 +77,6 @@
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="-80dp"
|
||||
android:layout_marginStart="-80dp"
|
||||
android:scaleType="fitStart"
|
||||
android:adjustViewBounds="true"
|
||||
android:id="@+id/widget_bg" />
|
||||
|
@ -233,4 +233,5 @@
|
||||
<string name="settings_weather_icon_pack_title">Icon pack</string>
|
||||
<string name="settings_weather_icon_pack_default">Default</string>
|
||||
<string name="settings_weather_icon_pack_minimal">Minimal</string>
|
||||
<string name="action_capitalize_the_date">Capitalize the date</string>
|
||||
</resources>
|
||||
|