Skip to content

Commit

Permalink
Added preview to the widget
Browse files Browse the repository at this point in the history
  • Loading branch information
HeyPouya committed Jul 28, 2024
1 parent 7e3b716 commit 9336806
Show file tree
Hide file tree
Showing 8 changed files with 61 additions and 79 deletions.
3 changes: 3 additions & 0 deletions features/widget/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,11 @@ dependencies {
ksp(libs.hilt.android.compiler)
ksp(libs.hilt.compiler)

// Glance
implementation(libs.androidx.glance)
implementation(libs.androidx.glance.appwidget)
debugImplementation(libs.androidx.glance.preview)
debugImplementation(libs.androidx.glance.appwidget.preview)

testImplementation(libs.junit)
androidTestImplementation(libs.androidx.junit)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,18 @@ import androidx.glance.GlanceTheme
import androidx.glance.appwidget.GlanceAppWidget
import androidx.glance.appwidget.provideContent
import com.pouyaheydari.calendar.core.pojo.CalendarModel
import com.pouyaheydari.calendar.core.utils.extensions.toEnglishMonth
import com.pouyaheydari.calendar.core.utils.extensions.toPersianMonth
import com.pouyaheydari.calendar.core.utils.extensions.toPersianNumber
import com.pouyaheydari.calendar.core.utils.extensions.toPersianWeekDay
import com.pouyaheydari.calendar.widget.components.CalendarWidgetComponent
import dagger.hilt.EntryPoint
import dagger.hilt.InstallIn
import dagger.hilt.android.EntryPointAccessors
import dagger.hilt.components.SingletonComponent

private const val MAIN_ACTIVITY = ".MainActivity"

class CalendarAppWidget : GlanceAppWidget() {

@EntryPoint
Expand All @@ -29,11 +35,39 @@ class CalendarAppWidget : GlanceAppWidget() {
)

val today = hiltEntryPoint.provideToday()
val persianDate = getPersianDate(context, today)
val gregorianDate = getGregorianDate(context, today)
val mainActivityPath = context.packageName.plus(MAIN_ACTIVITY)

provideContent {
GlanceTheme {
CalendarWidgetComponent(context, today)
CalendarWidgetComponent(
persianDate = persianDate,
gregorianDate = gregorianDate,
mainActivityPath = mainActivityPath
)
}
}
}

private fun getPersianDate(context: Context, today: CalendarModel) = context.getString(
R.string.persian_full_date,
today.dayOfWeek.toPersianWeekDay(context),
today.iranianDay.toPersianNumber(),
today.iranianMonth.toPersianMonth(context),
today.iranianYear.toPersianNumber()
)

private fun getGregorianDate(context: Context, today: CalendarModel): String {

// We have to add this to prevent misplacement of dates when combining persian text with numbers
val rlm = '\u200F'

return rlm + context.getString(
R.string.gregorian_full_date,
today.gDay.toPersianNumber(),
today.gMonth.toEnglishMonth(context),
today.gYear.toPersianNumber()
)
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.pouyaheydari.calendar.widget.components

import android.content.Context
import androidx.appcompat.app.AppCompatActivity
import androidx.compose.runtime.Composable
import androidx.compose.ui.unit.dp
Expand All @@ -14,24 +13,20 @@ import androidx.glance.layout.Alignment
import androidx.glance.layout.Column
import androidx.glance.layout.fillMaxSize
import androidx.glance.layout.padding
import androidx.glance.preview.ExperimentalGlancePreviewApi
import androidx.glance.preview.Preview
import androidx.glance.text.Text
import androidx.glance.text.TextAlign
import androidx.glance.text.TextStyle
import com.pouyaheydari.calendar.core.pojo.CalendarModel
import com.pouyaheydari.calendar.core.utils.extensions.toEnglishMonth
import com.pouyaheydari.calendar.core.utils.extensions.toPersianMonth
import com.pouyaheydari.calendar.core.utils.extensions.toPersianNumber
import com.pouyaheydari.calendar.core.utils.extensions.toPersianWeekDay
import com.pouyaheydari.calendar.widget.R

private const val MAIN_ACTIVITY = ".MainActivity"

@Composable
internal fun CalendarWidgetComponent(context: Context, today: CalendarModel) {
val activity = (Class.forName(context.packageName.plus(MAIN_ACTIVITY))
.asSubclass(AppCompatActivity::class.java))
internal fun CalendarWidgetComponent(
persianDate: String = "",
gregorianDate: String = "",
mainActivityPath: String = ""
) {
val activity = (Class.forName(mainActivityPath).asSubclass(AppCompatActivity::class.java))

val rlm = '\u200F'
Column(
modifier = GlanceModifier
.fillMaxSize()
Expand All @@ -43,13 +38,7 @@ internal fun CalendarWidgetComponent(context: Context, today: CalendarModel) {
Text(
modifier = GlanceModifier.defaultWeight(),
maxLines = 1,
text = context.getString(
R.string.persian_full_date,
today.dayOfWeek.toPersianWeekDay(context),
today.iranianDay.toPersianNumber(),
today.iranianMonth.toPersianMonth(context),
today.iranianYear.toPersianNumber()
),
text = persianDate,
style = TextStyle(
color = GlanceTheme.colors.onSurface,
fontSize = 24.sp,
Expand All @@ -59,12 +48,7 @@ internal fun CalendarWidgetComponent(context: Context, today: CalendarModel) {
Text(
modifier = GlanceModifier.defaultWeight(),
maxLines = 1,
text = rlm + context.getString(
R.string.gregorian_full_date,
today.gDay.toPersianNumber(),
today.gMonth.toEnglishMonth(context),
today.gYear.toPersianNumber()
),
text = gregorianDate,
style = TextStyle(
color = GlanceTheme.colors.onSurface,
fontSize = 20.sp,
Expand All @@ -73,3 +57,10 @@ internal fun CalendarWidgetComponent(context: Context, today: CalendarModel) {
)
}
}

@OptIn(ExperimentalGlancePreviewApi::class)
@Preview(widthDp = 200, heightDp = 200)
@Composable
private fun Preview() {
CalendarWidgetComponent(persianDate = "یکشنبه ۷ مرداد ۱۴۰۳", gregorianDate = "۲۸ ژوییه ۲۰۲۴")
}
9 changes: 0 additions & 9 deletions features/widget/src/main/res/drawable/widget_background.xml

This file was deleted.

Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
41 changes: 0 additions & 41 deletions features/widget/src/main/res/layout/widget_layout.xml

This file was deleted.

1 change: 1 addition & 0 deletions features/widget/src/main/res/xml/widget.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@
android:minHeight="48dp"
android:minWidth="200dp"
android:resizeMode="horizontal"
android:previewImage="@drawable/widget_preview"
android:updatePeriodMillis="30000" />
7 changes: 5 additions & 2 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,13 @@ hiltCompiler = "1.2.0"
coroutines = "1.8.1"
navigation = "2.7.7"
material = "1.12.0"
lifecycle = "2.8.3"
lifecycle = "2.8.4"
core= "1.13.1"
junit = "4.13.2"
androidJunit = "1.2.1"
espresso = "3.6.1"
ksp = "2.0.0-1.0.21"
ksp = "2.0.0-1.0.22"
glancePreview = "1.1.0"

[libraries]
androidx-glance = { module = "androidx.glance:glance", version.ref = "glance" }
Expand All @@ -47,6 +48,8 @@ androidx-core = { group = "androidx.core", name = "core-ktx", version.ref="core"
junit = { group = "junit", name = "junit", version.ref="junit" }
androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref="androidJunit" }
espresso = { group = "androidx.test.espresso", name = "espresso-core", version.ref="espresso" }
androidx-glance-preview = { group = "androidx.glance", name = "glance-preview", version.ref = "glancePreview" }
androidx-glance-appwidget-preview = { group = "androidx.glance", name = "glance-appwidget-preview", version.ref = "glancePreview" }

[plugins]
androidApplication = { id = "com.android.application", version.ref = "agp" }
Expand Down

0 comments on commit 9336806

Please sign in to comment.