Skip to content

Commit c7821c4

Browse files
committed
- adds small widget components
- adds colors, gradient background - adds preview images - adds resources
1 parent c5a5f73 commit c7821c4

File tree

10 files changed

+207
-3
lines changed

10 files changed

+207
-3
lines changed

app/src/main/AndroidManifest.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -490,7 +490,7 @@
490490
</intent-filter>
491491
<meta-data
492492
android:name="android.appwidget.provider"
493-
android:resource="@xml/reading_challenge_widget_info"/>
493+
android:resource="@xml/reading_challenge_large_widget_info"/>
494494
</receiver>
495495

496496
<receiver
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package org.wikipedia.widgets.readingchallenge
2+
3+
import androidx.compose.ui.graphics.Color
4+
import org.wikipedia.R
5+
6+
object WidgetColors {
7+
val challengeNotOptInBackground = Color(0xFFFFE49C)
8+
val normalReadingBackground = Color(0xFFF5EBF2)
9+
val musicReadingBackground = Color(0xFFD9E2FF)
10+
val spaceReadingBackground = Color(0xFFE6E0F0)
11+
val streakOngoingBackground = Color(0xFFFFEAD4)
12+
val completedBackground = Color(0xFFB6D4FB)
13+
14+
val readingContent = Color(0xFF9B527F)
15+
val musicContent = Color(0xFF534FA3)
16+
val spaceContent = Color(0xFF3056A9)
17+
18+
val sleepingContent = Color(0xFFA95226)
19+
20+
val white = Color(0xFFFFFFFF)
21+
val primary = Color(0xFF202122)
22+
val progressive = Color(0xFF3366CC)
23+
}
24+
25+
object WidgetBackground {
26+
val challengeNotOptInRadialGradient = R.drawable.widget_radial_background
27+
}

app/src/main/java/org/wikipedia/widgets/readingchallenge/smallwidget/ReadingChallengeSmallWidget.kt

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,21 @@ import androidx.compose.runtime.Composable
55
import androidx.compose.runtime.collectAsState
66
import androidx.compose.runtime.getValue
77
import androidx.glance.GlanceId
8+
import androidx.glance.GlanceModifier
89
import androidx.glance.GlanceTheme
910
import androidx.glance.appwidget.GlanceAppWidget
1011
import androidx.glance.appwidget.SizeMode
12+
import androidx.glance.appwidget.action.actionStartActivity
1113
import androidx.glance.appwidget.provideContent
14+
import androidx.glance.background
15+
import org.wikipedia.R
16+
import org.wikipedia.WikipediaApp
17+
import org.wikipedia.main.MainActivity
1218
import org.wikipedia.widgets.readingchallenge.ReadingChallengeState
1319
import org.wikipedia.widgets.readingchallenge.ReadingChallengeWidgetRepository
20+
import org.wikipedia.widgets.readingchallenge.WidgetColors
21+
import org.wikipedia.widgets.readingchallenge.smallwidget.components.SmallWidget
22+
import org.wikipedia.widgets.readingchallenge.smallwidget.components.WidgetButton
1423

1524
class ReadingChallengeSmallWidget : GlanceAppWidget() {
1625

@@ -35,15 +44,26 @@ class ReadingChallengeSmallWidget : GlanceAppWidget() {
3544
fun ReadingChallengeSmallContent(
3645
state: ReadingChallengeState
3746
) {
38-
// each state will have small and large widget content
3947
when (state) {
48+
ReadingChallengeState.NotLiveYet -> {
49+
SmallWidget(
50+
modifier = GlanceModifier
51+
.background(WidgetColors.challengeNotOptInBackground),
52+
mainImageResId = R.drawable.globe, // TODO: update when svg's are provided
53+
bottomContent = {
54+
WidgetButton(
55+
text = "Join Challenge",
56+
action = actionStartActivity(MainActivity.newIntent(WikipediaApp.instance).putExtra("fromWidget", true))
57+
)
58+
}
59+
)
60+
}
4061
ReadingChallengeState.ChallengeCompleted -> TODO()
4162
ReadingChallengeState.ChallengeConcludedIncomplete -> TODO()
4263
ReadingChallengeState.ChallengeConcludedNoStreak -> TODO()
4364
ReadingChallengeState.ChallengeRemoved -> TODO()
4465
ReadingChallengeState.EnrolledNotStarted -> TODO()
4566
ReadingChallengeState.NotEnrolled -> TODO()
46-
ReadingChallengeState.NotLiveYet -> TODO()
4767
is ReadingChallengeState.StreakOngoingNeedsReading -> TODO()
4868
is ReadingChallengeState.StreakOngoingReadToday -> TODO()
4969
}
Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
package org.wikipedia.widgets.readingchallenge.smallwidget.components
2+
3+
import androidx.compose.runtime.Composable
4+
import androidx.compose.ui.graphics.Color
5+
import androidx.compose.ui.unit.Dp
6+
import androidx.compose.ui.unit.dp
7+
import androidx.compose.ui.unit.sp
8+
import androidx.glance.Button
9+
import androidx.glance.ButtonDefaults
10+
import androidx.glance.ColorFilter
11+
import androidx.glance.GlanceModifier
12+
import androidx.glance.Image
13+
import androidx.glance.ImageProvider
14+
import androidx.glance.action.Action
15+
import androidx.glance.appwidget.cornerRadius
16+
import androidx.glance.color.ColorProvider
17+
import androidx.glance.layout.Alignment
18+
import androidx.glance.layout.Box
19+
import androidx.glance.layout.Column
20+
import androidx.glance.layout.Row
21+
import androidx.glance.layout.Spacer
22+
import androidx.glance.layout.fillMaxSize
23+
import androidx.glance.layout.fillMaxWidth
24+
import androidx.glance.layout.padding
25+
import androidx.glance.layout.size
26+
import androidx.glance.layout.width
27+
import androidx.glance.text.FontWeight
28+
import androidx.glance.text.Text
29+
import androidx.glance.text.TextStyle
30+
import org.wikipedia.R
31+
import org.wikipedia.widgets.readingchallenge.WidgetColors
32+
33+
@Composable
34+
fun SmallWidget(
35+
modifier: GlanceModifier = GlanceModifier,
36+
titleBarIcon: Int = R.drawable.ic_wikipedia_w,
37+
mainImageResId: Int,
38+
bottomContent: @Composable () -> Unit = { }
39+
) {
40+
Box(
41+
modifier = GlanceModifier
42+
.fillMaxSize()
43+
.cornerRadius(24.dp)
44+
.then(modifier)
45+
.padding(16.dp),
46+
) {
47+
Row(
48+
modifier = GlanceModifier
49+
.fillMaxWidth(),
50+
horizontalAlignment = Alignment.End
51+
) {
52+
Image(
53+
provider = ImageProvider(titleBarIcon),
54+
contentDescription = null,
55+
modifier = GlanceModifier.size(24.dp)
56+
)
57+
}
58+
59+
Column(
60+
modifier = GlanceModifier
61+
.fillMaxSize()
62+
.padding(top = 16.dp),
63+
horizontalAlignment = Alignment.CenterHorizontally,
64+
verticalAlignment = Alignment.CenterVertically
65+
) {
66+
Spacer(modifier = GlanceModifier.defaultWeight())
67+
68+
Image(
69+
provider = ImageProvider(mainImageResId),
70+
contentDescription = null,
71+
modifier = GlanceModifier.size(120.dp)
72+
)
73+
74+
Spacer(modifier = GlanceModifier.defaultWeight())
75+
76+
bottomContent()
77+
}
78+
}
79+
}
80+
81+
@Composable
82+
fun WidgetButton(
83+
text: String,
84+
action: Action,
85+
modifier: GlanceModifier = GlanceModifier
86+
) {
87+
Button(
88+
text = text,
89+
onClick = action,
90+
colors = ButtonDefaults.buttonColors(
91+
backgroundColor = ColorProvider(day = WidgetColors.progressive, night = WidgetColors.progressive),
92+
contentColor = ColorProvider(day = WidgetColors.white, night = WidgetColors.white)
93+
),
94+
modifier = modifier.fillMaxWidth()
95+
)
96+
}
97+
98+
@Composable
99+
fun WidgetBadge(
100+
text: String,
101+
iconResId: Int,
102+
iconSize: Dp = 16.dp,
103+
spacerWidth: Dp = 4.dp,
104+
iconTintColorProvider: Color,
105+
textColorProvider: Color,
106+
modifier: GlanceModifier = GlanceModifier
107+
) {
108+
Row(
109+
modifier = modifier,
110+
verticalAlignment = Alignment.CenterVertically,
111+
horizontalAlignment = Alignment.CenterHorizontally
112+
) {
113+
Image(
114+
provider = ImageProvider(iconResId),
115+
contentDescription = null,
116+
modifier = GlanceModifier
117+
.size(iconSize),
118+
colorFilter = ColorFilter.tint(ColorProvider(day = iconTintColorProvider, night = iconTintColorProvider))
119+
)
120+
Spacer(
121+
modifier = GlanceModifier.width(spacerWidth)
122+
)
123+
Text(
124+
text = text,
125+
style = TextStyle(
126+
fontSize = 32.sp,
127+
color = ColorProvider(day = textColorProvider, night = textColorProvider),
128+
fontWeight = FontWeight.Medium
129+
)
130+
)
131+
}
132+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
2+
android:width="24dp"
3+
android:height="24dp"
4+
android:viewportWidth="960"
5+
android:viewportHeight="960">
6+
<path
7+
android:pathData="M160,560q0,-105 50,-187t110,-138q60,-56 110,-85.5l50,-29.5v132q0,37 25,58.5t56,21.5q17,0 32.5,-7t28.5,-23l18,-22q72,42 116,116.5T800,560q0,88 -43,160.5T644,835q17,-24 26.5,-52.5T680,722q0,-40 -15,-75.5T622,583L480,444 339,583q-29,29 -44,64t-15,75q0,32 9.5,60.5T316,835q-70,-42 -113,-114.5T160,560ZM480,556 L565,639q17,17 26,38t9,45q0,49 -35,83.5T480,840q-50,0 -85,-34.5T360,722q0,-23 9,-44.5t26,-38.5l85,-83Z"
8+
android:fillColor="#FFFFFF"/>
9+
</vector>
39.2 KB
Loading
28.6 KB
Loading
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<shape xmlns:android="http://schemas.android.com/apk/res/android"
3+
android:shape="rectangle">
4+
5+
<gradient
6+
android:type="radial"
7+
android:gradientRadius="100%p"
8+
android:centerX="0.3"
9+
android:centerY="0.4"
10+
android:startColor="#FFFFFF"
11+
android:centerColor="#9DEBF9"
12+
android:endColor="#2D92E9" />
13+
14+
</shape>

app/src/main/res/xml/reading_challenge_widget_info.xml renamed to app/src/main/res/xml/reading_challenge_large_widget_info.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,6 @@
1010
android:targetCellHeight="1"
1111
android:updatePeriodMillis="86400000"
1212
android:widgetCategory="home_screen"
13+
android:previewImage="@drawable/large_widget_challenge_not_opted_in"
1314
tools:targetApi="31">
1415
</appwidget-provider>

app/src/main/res/xml/reading_challenge_small_widget_info.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
android:targetCellWidth="2"
1313
android:updatePeriodMillis="86400000"
1414
android:widgetCategory="home_screen"
15+
android:previewImage="@drawable/small_widget_challenge_not_opted_in"
1516
tools:targetApi="31">
1617

1718
</appwidget-provider>

0 commit comments

Comments
 (0)