Skip to content

Commit

Permalink
Migrated implementation of widget to glance
Browse files Browse the repository at this point in the history
  • Loading branch information
HeyPouya committed Jul 28, 2024
1 parent c4acde8 commit a03ef20
Show file tree
Hide file tree
Showing 7 changed files with 139 additions and 74 deletions.
7 changes: 7 additions & 0 deletions features/widget/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ plugins {
alias(libs.plugins.jetbrainsKotlinAndroid)
alias(libs.plugins.ksp)
alias(libs.plugins.hiltGradle)
alias(libs.plugins.compose.compiler)
}

android {
Expand All @@ -11,6 +12,9 @@ android {
minSdk = libs.versions.minSdkVersion.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
buildFeatures {
compose = true
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
Expand All @@ -33,6 +37,9 @@ dependencies {
ksp(libs.hilt.android.compiler)
ksp(libs.hilt.compiler)

implementation(libs.androidx.glance)
implementation(libs.androidx.glance.appwidget)

testImplementation(libs.junit)
androidTestImplementation(libs.androidx.junit)
androidTestImplementation(libs.espresso)
Expand Down
8 changes: 4 additions & 4 deletions features/widget/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,15 @@

<application>
<receiver
android:name=".AppWidget"
android:exported="true">
android:name=".CalendarAppWidgetReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>

<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/widget" />
android:name="android.appwidget.provider"
android:resource="@xml/widget" />
</receiver>
</application>

Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package com.pouyaheydari.calendar.widget

import android.content.Context
import androidx.glance.GlanceId
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.widget.components.CalendarWidgetComponent
import dagger.hilt.EntryPoint
import dagger.hilt.InstallIn
import dagger.hilt.android.EntryPointAccessors
import dagger.hilt.components.SingletonComponent

class CalendarAppWidget : GlanceAppWidget() {

@EntryPoint
@InstallIn(SingletonComponent::class)
interface CalendarAppWidgetEntryPoint {
fun provideToday(): CalendarModel
}

override suspend fun provideGlance(context: Context, id: GlanceId) {
val appContext = context.applicationContext ?: throw IllegalStateException()
val hiltEntryPoint =
EntryPointAccessors.fromApplication(
appContext,
CalendarAppWidgetEntryPoint::class.java
)

val today = hiltEntryPoint.provideToday()

provideContent {
GlanceTheme {
CalendarWidgetComponent(context, today)
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.pouyaheydari.calendar.widget

import androidx.glance.appwidget.GlanceAppWidget
import androidx.glance.appwidget.GlanceAppWidgetReceiver

class CalendarAppWidgetReceiver : GlanceAppWidgetReceiver() {
override val glanceAppWidget: GlanceAppWidget
get() = CalendarAppWidget()
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
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
import androidx.compose.ui.unit.sp
import androidx.glance.GlanceModifier
import androidx.glance.GlanceTheme
import androidx.glance.action.actionStartActivity
import androidx.glance.action.clickable
import androidx.glance.background
import androidx.glance.layout.Alignment
import androidx.glance.layout.Column
import androidx.glance.layout.fillMaxSize
import androidx.glance.layout.padding
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))

val rlm = '\u200F'
Column(
modifier = GlanceModifier
.fillMaxSize()
.clickable(actionStartActivity(activity = activity))
.padding(16.dp)
.background(GlanceTheme.colors.widgetBackground),
horizontalAlignment = Alignment.Horizontal.CenterHorizontally
) {
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()
),
style = TextStyle(
color = GlanceTheme.colors.onSurface,
fontSize = 24.sp,
textAlign = TextAlign.Center
),
)
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()
),
style = TextStyle(
color = GlanceTheme.colors.onSurface,
fontSize = 20.sp,
textAlign = TextAlign.Center,
),
)
}
}
10 changes: 5 additions & 5 deletions features/widget/src/main/res/xml/widget.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:initialLayout="@layout/widget_layout"
android:minWidth="200dp"
android:minHeight="48dp"
android:resizeMode="horizontal|vertical"
android:updatePeriodMillis="30000" />
android:initialLayout="@layout/glance_default_loading_layout"
android:minHeight="48dp"
android:minWidth="200dp"
android:resizeMode="horizontal"
android:updatePeriodMillis="30000" />

0 comments on commit a03ef20

Please sign in to comment.