Update align support
BIN
.idea/caches/build_file_checksums.ser
generated
@ -83,7 +83,7 @@ object Constants {
|
||||
|
||||
enum class WidgetAlign(val rawValue: Int) {
|
||||
LEFT(0),
|
||||
RIGHT(1),
|
||||
// RIGHT(1),
|
||||
CENTER(2)
|
||||
}
|
||||
}
|
@ -9,9 +9,11 @@ import android.provider.Settings
|
||||
import android.util.DisplayMetrics
|
||||
import android.util.Log
|
||||
import android.util.TypedValue
|
||||
import android.view.Gravity
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.LinearLayout
|
||||
import android.widget.RelativeLayout
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.view.isVisible
|
||||
@ -42,7 +44,8 @@ class MainFragment : Fragment() {
|
||||
|
||||
companion object {
|
||||
fun newInstance() = MainFragment()
|
||||
private var PREVIEW_BASE_HEIGHT: Int = if (Preferences.widgetAlign == Constants.WidgetAlign.CENTER.rawValue) 120 else 200
|
||||
private val PREVIEW_BASE_HEIGHT: Int
|
||||
get() = if (Preferences.widgetAlign == Constants.WidgetAlign.CENTER.rawValue) 120 else 200
|
||||
}
|
||||
|
||||
private lateinit var viewModel: MainViewModel
|
||||
@ -154,6 +157,10 @@ class MainFragment : Fragment() {
|
||||
|
||||
viewModel.widgetAlign.observe(viewLifecycleOwner) {
|
||||
updatePreviewVisibility()
|
||||
lifecycleScope.launch {
|
||||
delay(350)
|
||||
updateClock()
|
||||
}
|
||||
}
|
||||
|
||||
viewModel.showPreview.observe(viewLifecycleOwner) {
|
||||
@ -252,6 +259,10 @@ class MainFragment : Fragment() {
|
||||
binding.widgetDetail.clockBottomMarginLarge.isVisible =
|
||||
Preferences.showClock && Preferences.clockBottomMargin == Constants.ClockBottomMargin.LARGE.rawValue
|
||||
|
||||
// Align
|
||||
binding.widgetDetail.timeContainer.layoutParams = (binding.widgetDetail.timeContainer.layoutParams as LinearLayout.LayoutParams).apply {
|
||||
gravity = if (Preferences.widgetAlign == Constants.WidgetAlign.CENTER.rawValue) Gravity.CENTER_HORIZONTAL else Gravity.NO_GRAVITY
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateClockVisibility(showClock: Boolean) {
|
||||
@ -261,7 +272,7 @@ class MainFragment : Fragment() {
|
||||
updatePreviewVisibility()
|
||||
|
||||
if (showClock) {
|
||||
binding.widgetDetail.timeContainer.layoutParams = binding.widgetDetail.timeContainer.layoutParams.apply {
|
||||
binding.widgetDetail.timeContainer.layoutParams = (binding.widgetDetail.timeContainer.layoutParams as LinearLayout.LayoutParams).apply {
|
||||
height = RelativeLayout.LayoutParams.WRAP_CONTENT
|
||||
}
|
||||
binding.widgetDetail.timeContainer.measure(0, 0)
|
||||
|
@ -6,6 +6,7 @@ import android.util.Log
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
@ -98,9 +99,14 @@ class LayoutFragment : Fragment() {
|
||||
|
||||
viewModel.widgetAlign.observe(viewLifecycleOwner) {
|
||||
maintainScrollPosition {
|
||||
binding.widgetAlignIcon.setImageDrawable(when (it) {
|
||||
Constants.WidgetAlign.LEFT.rawValue -> ContextCompat.getDrawable(requireContext(), R.drawable.round_align_horizontal_left_24)
|
||||
Constants.WidgetAlign.CENTER.rawValue -> ContextCompat.getDrawable(requireContext(), R.drawable.round_align_horizontal_center_24)
|
||||
else -> ContextCompat.getDrawable(requireContext(), R.drawable.round_align_horizontal_center_24)
|
||||
})
|
||||
|
||||
binding.widgetAlignLabel.text = when (it) {
|
||||
Constants.WidgetAlign.LEFT.rawValue -> getString(R.string.settings_widget_align_left_subtitle)
|
||||
Constants.WidgetAlign.RIGHT.rawValue -> getString(R.string.settings_widget_align_right_subtitle)
|
||||
Constants.WidgetAlign.CENTER.rawValue -> getString(R.string.settings_widget_align_center_subtitle)
|
||||
else -> getString(R.string.settings_widget_align_center_subtitle)
|
||||
}
|
||||
@ -204,10 +210,6 @@ class LayoutFragment : Fragment() {
|
||||
getString(R.string.settings_widget_align_left_subtitle),
|
||||
Constants.WidgetAlign.LEFT.rawValue
|
||||
)
|
||||
.addItem(
|
||||
getString(R.string.settings_widget_align_right_subtitle),
|
||||
Constants.WidgetAlign.RIGHT.rawValue
|
||||
)
|
||||
.addOnSelectItemListener { value ->
|
||||
Preferences.widgetAlign = value
|
||||
}.show()
|
||||
|
@ -132,6 +132,7 @@ class MainViewModel(context: Application) : AndroidViewModel(context) {
|
||||
addSource(Preferences.asLiveData(Preferences::customFontName)) { value = true }
|
||||
addSource(Preferences.asLiveData(Preferences::customFontVariant)) { value = true }
|
||||
addSource(Preferences.asLiveData(Preferences::secondRowInformation)) { value = true }
|
||||
addSource(Preferences.asLiveData(Preferences::widgetAlign)) { value = true }
|
||||
addSource(Preferences.asLiveData(Preferences::showDividers)) { value = true }
|
||||
addSource(Preferences.asLiveData(Preferences::secondRowTopMargin)) { value = true }
|
||||
addSource(Preferences.asLiveData(Preferences::isDateCapitalize)) { value = true }
|
||||
|
@ -7,6 +7,7 @@ import android.content.Intent
|
||||
import android.graphics.Color
|
||||
import android.graphics.Typeface
|
||||
import android.text.format.DateUtils
|
||||
import android.util.Log
|
||||
import android.util.TypedValue
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
@ -16,6 +17,7 @@ import android.widget.RemoteViews
|
||||
import android.widget.TextView
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.core.view.updateMargins
|
||||
import com.tommasoberlose.anotherwidget.R
|
||||
import com.tommasoberlose.anotherwidget.databinding.LeftAlignedWidgetBinding
|
||||
import com.tommasoberlose.anotherwidget.db.EventRepository
|
||||
@ -127,7 +129,7 @@ class LeftAlignedWidget(val context: Context) {
|
||||
PendingIntent.FLAG_UPDATE_CURRENT
|
||||
)
|
||||
views.setOnClickPendingIntent(R.id.date_rect, calPIntent)
|
||||
views.setViewVisibility(R.id.date_layout, View.VISIBLE)
|
||||
views.setViewVisibility(R.id.first_line_rect, View.VISIBLE)
|
||||
|
||||
val nextEvent = eventRepository.getNextEvent()
|
||||
val nextAlarm = AlarmHelper.getNextAlarm(context)
|
||||
@ -184,7 +186,7 @@ class LeftAlignedWidget(val context: Context) {
|
||||
views.setViewVisibility(R.id.next_event_rect, View.VISIBLE)
|
||||
|
||||
// Event time difference
|
||||
if (Preferences.showDiffTime && Calendar.getInstance().timeInMillis < (nextEvent.startDate - 1000 * 60 * 60)) {
|
||||
if (Preferences.showDiffTime && Calendar.getInstance().timeInMillis < nextEvent.startDate) {
|
||||
views.setImageViewBitmap(
|
||||
R.id.next_event_difference_time_rect,
|
||||
BitmapHelper.getBitmapFromView(
|
||||
@ -192,8 +194,9 @@ class LeftAlignedWidget(val context: Context) {
|
||||
draw = false
|
||||
)
|
||||
)
|
||||
views.setViewVisibility(R.id.next_event_difference_time_rect, View.VISIBLE)
|
||||
|
||||
views.setOnClickPendingIntent(R.id.next_event_difference_time_rect, eventIntent)
|
||||
views.setViewVisibility(R.id.next_event_difference_time_rect, View.VISIBLE)
|
||||
} else {
|
||||
views.setViewVisibility(R.id.next_event_difference_time_rect, View.GONE)
|
||||
}
|
||||
@ -227,12 +230,14 @@ class LeftAlignedWidget(val context: Context) {
|
||||
)
|
||||
views.setViewVisibility(R.id.calendar_layout_rect, View.VISIBLE)
|
||||
|
||||
// Second row
|
||||
views.setImageViewBitmap(
|
||||
R.id.sub_line_rect,
|
||||
BitmapHelper.getBitmapFromView(bindingView.subLine, draw = false)
|
||||
)
|
||||
views.setViewVisibility(R.id.calendar_layout_rect, View.VISIBLE)
|
||||
views.setViewVisibility(R.id.sub_line_rect, View.VISIBLE)
|
||||
views.setViewVisibility(R.id.weather_sub_line_rect, View.VISIBLE)
|
||||
views.setViewVisibility(R.id.first_line_rect, View.GONE)
|
||||
|
||||
views.setViewVisibility(R.id.sub_line_top_margin_small_sans, View.GONE)
|
||||
views.setViewVisibility(R.id.sub_line_top_margin_medium_sans, View.GONE)
|
||||
views.setViewVisibility(R.id.sub_line_top_margin_large_sans, View.GONE)
|
||||
} else if (GlanceProviderHelper.showGlanceProviders(context) && bindingView.calendarLayout.isVisible) {
|
||||
var showSomething = false
|
||||
loop@ for (provider: Constants.GlanceProviderId in GlanceProviderHelper.getGlanceProviders(context)) {
|
||||
@ -354,15 +359,11 @@ class LeftAlignedWidget(val context: Context) {
|
||||
|
||||
|
||||
if (showSomething) {
|
||||
views.setImageViewBitmap(
|
||||
R.id.sub_line_rect,
|
||||
BitmapHelper.getBitmapFromView(bindingView.subLine, draw = false)
|
||||
)
|
||||
|
||||
views.setViewVisibility(R.id.first_line_rect, View.VISIBLE)
|
||||
views.setViewVisibility(R.id.calendar_layout_rect, View.GONE)
|
||||
views.setViewVisibility(R.id.weather_rect, View.VISIBLE)
|
||||
views.setViewVisibility(R.id.sub_line_rect, View.VISIBLE)
|
||||
|
||||
views.setViewVisibility(R.id.calendar_layout_rect, View.GONE)
|
||||
views.setViewVisibility(R.id.weather_sub_line_rect, View.GONE)
|
||||
} else {
|
||||
// Spacing
|
||||
@ -371,6 +372,12 @@ class LeftAlignedWidget(val context: Context) {
|
||||
views.setViewVisibility(R.id.sub_line_top_margin_large_sans, View.GONE)
|
||||
}
|
||||
}
|
||||
|
||||
// Second row
|
||||
views.setImageViewBitmap(
|
||||
R.id.sub_line_rect,
|
||||
BitmapHelper.getBitmapFromView(bindingView.subLine, draw = false)
|
||||
)
|
||||
} catch (ex: Exception) {
|
||||
ex.printStackTrace()
|
||||
CrashlyticsReceiver.sendCrash(context, ex)
|
||||
@ -542,12 +549,9 @@ class LeftAlignedWidget(val context: Context) {
|
||||
bindingView.subLine.isVisible = true
|
||||
bindingView.weatherSubLine.isVisible = true
|
||||
|
||||
bindingView.subLineTopMarginSmall.visibility =
|
||||
if (Preferences.secondRowTopMargin == Constants.SecondRowTopMargin.SMALL.rawValue) View.VISIBLE else View.GONE
|
||||
bindingView.subLineTopMarginMedium.visibility =
|
||||
if (Preferences.secondRowTopMargin == Constants.SecondRowTopMargin.MEDIUM.rawValue) View.VISIBLE else View.GONE
|
||||
bindingView.subLineTopMarginLarge.visibility =
|
||||
if (Preferences.secondRowTopMargin == Constants.SecondRowTopMargin.LARGE.rawValue) View.VISIBLE else View.GONE
|
||||
bindingView.subLineTopMarginSmall.visibility = View.GONE
|
||||
bindingView.subLineTopMarginMedium.visibility = View.GONE
|
||||
bindingView.subLineTopMarginLarge.visibility = View.GONE
|
||||
} else if (GlanceProviderHelper.showGlanceProviders(context)) {
|
||||
bindingView.subLineIcon.isVisible = true
|
||||
var showSomething = false
|
||||
|
@ -99,7 +99,6 @@ class MainWidget : AppWidgetProvider() {
|
||||
WidgetHelper.runWithCustomTypeface(context) {
|
||||
val views = when (Preferences.widgetAlign) {
|
||||
Constants.WidgetAlign.LEFT.rawValue -> LeftAlignedWidget(context).generateWidget(appWidgetId, min(dimensions.first - 8.toPixel(context), min(width, height) - 16.toPixel(context)), it)
|
||||
Constants.WidgetAlign.RIGHT.rawValue -> LeftAlignedWidget(context).generateWidget(appWidgetId, min(dimensions.first - 8.toPixel(context), min(width, height) - 16.toPixel(context)), it)
|
||||
else -> StandardWidget(context).generateWidget(appWidgetId, min(dimensions.first - 8.toPixel(context), min(width, height) - 16.toPixel(context)), it)
|
||||
}
|
||||
appWidgetManager.updateAppWidget(appWidgetId, views)
|
||||
@ -109,7 +108,6 @@ class MainWidget : AppWidgetProvider() {
|
||||
fun getWidgetView(context: Context, typeface: Typeface?): ViewBinding {
|
||||
return when (Preferences.widgetAlign) {
|
||||
Constants.WidgetAlign.LEFT.rawValue -> LeftAlignedWidget(context).generateWidgetView(typeface)
|
||||
Constants.WidgetAlign.RIGHT.rawValue -> LeftAlignedWidget(context).generateWidgetView(typeface)
|
||||
else -> StandardWidget(context).generateWidgetView(typeface)
|
||||
}
|
||||
}
|
||||
|
@ -129,7 +129,13 @@ class StandardWidget(val context: Context) {
|
||||
PendingIntent.FLAG_UPDATE_CURRENT
|
||||
)
|
||||
views.setOnClickPendingIntent(R.id.date_rect, calPIntent)
|
||||
views.setViewVisibility(R.id.date_layout, View.VISIBLE)
|
||||
views.setViewVisibility(R.id.first_line_rect, View.VISIBLE)
|
||||
|
||||
// Second row
|
||||
views.setImageViewBitmap(
|
||||
R.id.sub_line_rect,
|
||||
BitmapHelper.getBitmapFromView(bindingView.subLine, draw = false)
|
||||
)
|
||||
|
||||
val nextEvent = eventRepository.getNextEvent()
|
||||
val nextAlarm = AlarmHelper.getNextAlarm(context)
|
||||
@ -207,7 +213,7 @@ class StandardWidget(val context: Context) {
|
||||
views.setViewVisibility(R.id.next_event_rect, View.VISIBLE)
|
||||
|
||||
// Event time difference
|
||||
if (Preferences.showDiffTime && Calendar.getInstance().timeInMillis < (nextEvent.startDate - 1000 * 60 * 60)) {
|
||||
if (Preferences.showDiffTime && Calendar.getInstance().timeInMillis < nextEvent.startDate) {
|
||||
views.setImageViewBitmap(
|
||||
R.id.next_event_difference_time_rect,
|
||||
BitmapHelper.getBitmapFromView(
|
||||
@ -249,13 +255,11 @@ class StandardWidget(val context: Context) {
|
||||
BitmapHelper.getBitmapFromView(bindingView.nextEvent, draw = false)
|
||||
)
|
||||
views.setViewVisibility(R.id.calendar_layout_rect, View.VISIBLE)
|
||||
|
||||
// Second row
|
||||
views.setImageViewBitmap(
|
||||
R.id.sub_line_rect,
|
||||
BitmapHelper.getBitmapFromView(bindingView.subLine, draw = false)
|
||||
)
|
||||
views.setViewVisibility(R.id.sub_line_rect, View.VISIBLE)
|
||||
views.setViewVisibility(R.id.weather_sub_line_rect, View.VISIBLE)
|
||||
|
||||
views.setViewVisibility(R.id.first_line_rect, View.GONE)
|
||||
|
||||
} else if (GlanceProviderHelper.showGlanceProviders(context) && bindingView.calendarLayout.isVisible) {
|
||||
var showSomething = false
|
||||
loop@ for (provider: Constants.GlanceProviderId in GlanceProviderHelper.getGlanceProviders(context)) {
|
||||
@ -383,9 +387,9 @@ class StandardWidget(val context: Context) {
|
||||
)
|
||||
|
||||
views.setViewVisibility(R.id.first_line_rect, View.VISIBLE)
|
||||
views.setViewVisibility(R.id.calendar_layout_rect, View.GONE)
|
||||
views.setViewVisibility(R.id.sub_line_rect, View.VISIBLE)
|
||||
|
||||
views.setViewVisibility(R.id.calendar_layout_rect, View.GONE)
|
||||
views.setViewVisibility(R.id.weather_sub_line_rect, View.GONE)
|
||||
} else {
|
||||
// Spacing
|
||||
|
@ -21,7 +21,9 @@ import android.content.res.Resources
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.util.DisplayMetrics
|
||||
import android.util.TypedValue
|
||||
import android.view.animation.AlphaAnimation
|
||||
import android.widget.RelativeLayout
|
||||
import androidx.annotation.UiThread
|
||||
import androidx.browser.customtabs.CustomTabColorSchemeParams
|
||||
import androidx.core.animation.addListener
|
||||
import androidx.core.view.isVisible
|
||||
@ -262,4 +264,4 @@ fun View.setOnSingleClickListener(l: View.OnClickListener) {
|
||||
|
||||
fun View.setOnSingleClickListener(l: (View) -> Unit) {
|
||||
setOnClickListener(OnSingleClickListener(l))
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 207 B |
After Width: | Height: | Size: 210 B |
After Width: | Height: | Size: 203 B |
After Width: | Height: | Size: 292 B |
After Width: | Height: | Size: 245 B |
After Width: | Height: | Size: 184 B |
After Width: | Height: | Size: 186 B |
After Width: | Height: | Size: 174 B |
After Width: | Height: | Size: 275 B |
After Width: | Height: | Size: 251 B |
After Width: | Height: | Size: 187 B |
After Width: | Height: | Size: 189 B |
After Width: | Height: | Size: 174 B |
After Width: | Height: | Size: 275 B |
After Width: | Height: | Size: 253 B |
After Width: | Height: | Size: 166 B |
After Width: | Height: | Size: 172 B |
After Width: | Height: | Size: 123 B |
After Width: | Height: | Size: 203 B |
After Width: | Height: | Size: 172 B |
After Width: | Height: | Size: 142 B |
After Width: | Height: | Size: 159 B |
After Width: | Height: | Size: 122 B |
After Width: | Height: | Size: 174 B |
After Width: | Height: | Size: 176 B |
After Width: | Height: | Size: 147 B |
After Width: | Height: | Size: 163 B |
After Width: | Height: | Size: 125 B |
After Width: | Height: | Size: 174 B |
After Width: | Height: | Size: 175 B |
After Width: | Height: | Size: 213 B |
After Width: | Height: | Size: 188 B |
After Width: | Height: | Size: 187 B |
After Width: | Height: | Size: 124 B |
After Width: | Height: | Size: 124 B |
After Width: | Height: | Size: 126 B |
After Width: | Height: | Size: 176 B |
After Width: | Height: | Size: 181 B |
After Width: | Height: | Size: 179 B |
After Width: | Height: | Size: 285 B |
After Width: | Height: | Size: 274 B |
After Width: | Height: | Size: 272 B |
After Width: | Height: | Size: 329 B |
After Width: | Height: | Size: 328 B |
After Width: | Height: | Size: 331 B |
After Width: | Height: | Size: 203 B |
After Width: | Height: | Size: 216 B |
After Width: | Height: | Size: 172 B |
After Width: | Height: | Size: 245 B |
After Width: | Height: | Size: 308 B |
After Width: | Height: | Size: 174 B |
After Width: | Height: | Size: 211 B |
After Width: | Height: | Size: 176 B |
After Width: | Height: | Size: 251 B |
After Width: | Height: | Size: 312 B |
After Width: | Height: | Size: 174 B |
After Width: | Height: | Size: 216 B |
After Width: | Height: | Size: 175 B |
After Width: | Height: | Size: 253 B |
After Width: | Height: | Size: 313 B |
After Width: | Height: | Size: 292 B |
After Width: | Height: | Size: 287 B |
After Width: | Height: | Size: 245 B |
After Width: | Height: | Size: 483 B |
After Width: | Height: | Size: 464 B |
After Width: | Height: | Size: 275 B |
After Width: | Height: | Size: 254 B |
After Width: | Height: | Size: 251 B |
After Width: | Height: | Size: 448 B |
After Width: | Height: | Size: 466 B |
After Width: | Height: | Size: 275 B |
After Width: | Height: | Size: 257 B |
After Width: | Height: | Size: 253 B |
After Width: | Height: | Size: 444 B |
After Width: | Height: | Size: 466 B |
After Width: | Height: | Size: 245 B |
After Width: | Height: | Size: 366 B |
After Width: | Height: | Size: 308 B |
After Width: | Height: | Size: 464 B |
After Width: | Height: | Size: 596 B |
After Width: | Height: | Size: 251 B |
After Width: | Height: | Size: 369 B |
After Width: | Height: | Size: 312 B |
After Width: | Height: | Size: 466 B |
After Width: | Height: | Size: 592 B |
After Width: | Height: | Size: 253 B |
After Width: | Height: | Size: 367 B |
After Width: | Height: | Size: 313 B |
After Width: | Height: | Size: 466 B |
After Width: | Height: | Size: 588 B |
@ -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,2L12,2c0.55,0 1,0.45 1,1v4l6.5,0C20.33,7 21,7.67 21,8.5v0c0,0.83 -0.67,1.5 -1.5,1.5H13v4h3.5c0.83,0 1.5,0.67 1.5,1.5v0c0,0.83 -0.67,1.5 -1.5,1.5H13v4c0,0.55 -0.45,1 -1,1h0c-0.55,0 -1,-0.45 -1,-1v-4H7.5C6.67,17 6,16.33 6,15.5v0C6,14.67 6.67,14 7.5,14H11v-4H4.5C3.67,10 3,9.33 3,8.5v0C3,7.67 3.67,7 4.5,7H11l0,-4C11,2.45 11.45,2 12,2z"/>
|
||||
</vector>
|