Skip to content

Commit

Permalink
Add Glance App Widget
Browse files Browse the repository at this point in the history
과거 SOPT 시절 컴포즈 코드 삭제


앱 모듈에 글랜스 의존성 추가


패키지 명 변경


Workmanager 추가


Glance Viewer 의존성 추가


Sopt Widget 추가


Glance App Widget 초기설정


Widget Viewer Activity 추가


네이밍 구체화 하기 (Sopt -> Attendance)


서버통신 데이터(출석점수)를 위젯에 추가시키기 위해 WorkManager config


위젯에 출석 점수 업데이트 시키기


State 저장소를 하나의 파일로 일치시키기


에러 대응


빌드 이슈 fix


위젯 형태 수정하고 PeriodicTask 등록


Glance beta로 bump


Glance Beta로 update 후 deprecated된 api 대체


App Widget 크기 180dp로 고정


Widget background gradient로 변경


[feature/app-widget] Bump glance version
  • Loading branch information
l2hyunwoo committed Sep 11, 2023
1 parent eb9bee8 commit 0cfbe14
Show file tree
Hide file tree
Showing 22 changed files with 399 additions and 357 deletions.
5 changes: 4 additions & 1 deletion app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ dependencies {
implementation(libs.bundles.compose)
implementation(libs.startup)
implementation(libs.security)
implementation(libs.workmanager)

implementation(libs.bundles.accompanist)
implementation(libs.inappupdate)
Expand All @@ -102,9 +103,10 @@ dependencies {
implementation(libs.rxbinding)

implementation(libs.bundles.compose)

implementation(libs.compose.glance)
implementation(libs.bundles.mavericks)

implementation(libs.hilt.workmanager)
implementation(platform(libs.firebase))
implementation(libs.bundles.firebase)
implementation(libs.sentry.compose)
Expand All @@ -117,6 +119,7 @@ dependencies {
androidTestImplementation(libs.bundles.compose.test)
androidTestImplementation(libs.bundles.android.test)
debugImplementation(libs.bundles.compose.android.test)
debugImplementation(libs.compose.glance.viewer)

debugImplementation(libs.bundles.flipper)
releaseImplementation(libs.flipper.noop)
Expand Down
10 changes: 10 additions & 0 deletions app/src/debug/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">

<application>
<activity
android:name=".WidgetViewerActivity"
android:exported="true">
</activity>
</application>
</manifest>
20 changes: 20 additions & 0 deletions app/src/debug/java/org/sopt/official/WidgetViewerActivity.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package org.sopt.official

import androidx.glance.appwidget.ExperimentalGlanceRemoteViewsApi
import androidx.glance.appwidget.GlanceAppWidgetReceiver
import com.google.android.glance.tools.viewer.GlanceSnapshot
import com.google.android.glance.tools.viewer.GlanceViewerActivity
import org.sopt.official.widget.AttendanceWidget
import org.sopt.official.widget.AttendanceWidgetReceiver

@OptIn(ExperimentalGlanceRemoteViewsApi::class)
class WidgetViewerActivity : GlanceViewerActivity() {
override suspend fun getGlanceSnapshot(
receiver: Class<out GlanceAppWidgetReceiver>
) = when (receiver) {
AttendanceWidgetReceiver::class.java -> GlanceSnapshot(instance = AttendanceWidget())
else -> throw IllegalArgumentException()
}

override fun getProviders() = listOf(AttendanceWidgetReceiver::class.java)
}
16 changes: 16 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,10 @@
android:authorities="${applicationId}.androidx-startup"
android:exported="false"
tools:node="merge">
<meta-data
android:name="androidx.work.impl.WorkManagerInitializer"
android:value="androidx.startup"
tools:node="remove" />
<meta-data
android:name="org.sopt.official.config.initializer.TimberInitializer"
android:value="androidx.startup" />
Expand Down Expand Up @@ -92,6 +96,18 @@
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<receiver
android:name="org.sopt.official.widget.AttendanceWidgetReceiver"
android:exported="false">

<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>

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

</manifest>
17 changes: 16 additions & 1 deletion app/src/main/java/org/sopt/official/App.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,29 +2,39 @@ package org.sopt.official

import android.app.Application
import androidx.appcompat.app.AppCompatDelegate
import androidx.hilt.work.HiltWorkerFactory
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.ProcessLifecycleOwner
import androidx.lifecycle.coroutineScope
import androidx.lifecycle.repeatOnLifecycle
import androidx.work.Configuration
import com.airbnb.mvrx.mocking.MockableMavericks
import com.google.firebase.messaging.FirebaseMessaging
import dagger.hilt.android.HiltAndroidApp
import kotlinx.coroutines.launch
import kotlinx.coroutines.tasks.await
import org.sopt.official.data.persistence.SoptDataStore
import org.sopt.official.widget.AttendanceTaskManager
import timber.log.Timber
import javax.inject.Inject

@HiltAndroidApp
class App : Application() {
class App : Application(), Configuration.Provider {

@Inject
lateinit var dataStore: SoptDataStore
@Inject
lateinit var workerFactory: HiltWorkerFactory

@Inject
lateinit var attendanceTaskManager: AttendanceTaskManager

override fun onCreate() {
super.onCreate()
initFlipper()
initMavericks()
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
attendanceTaskManager.enqueue()
ProcessLifecycleOwner.get().lifecycle.coroutineScope.launch {
ProcessLifecycleOwner.get().lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) {
runCatching {
Expand All @@ -43,4 +53,9 @@ class App : Application() {
private fun initFlipper() {
FlipperInitializer.init(this)
}

override fun getWorkManagerConfiguration() = Configuration.Builder()
.setWorkerFactory(workerFactory)
.setMinimumLoggingLevel(android.util.Log.VERBOSE)
.build()
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.sopt.official.designsystem
package org.sopt.official.component

import android.app.AlertDialog
import android.content.Context
Expand Down
27 changes: 0 additions & 27 deletions app/src/main/java/org/sopt/official/designsystem/style/Color.kt

This file was deleted.

193 changes: 0 additions & 193 deletions app/src/main/java/org/sopt/official/designsystem/style/Theme.kt

This file was deleted.

Loading

0 comments on commit 0cfbe14

Please sign in to comment.