Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
7fb7aec
feat(nova): restructure the game detail window around its artwork
papi-ux Aug 5, 2026
ebdb0f6
feat(nova): paint the detail overview the way the concept specifies
papi-ux Aug 5, 2026
4925620
feat(nova): give the detail destinations their own headers and grouping
papi-ux Aug 5, 2026
e1a4f3a
feat(nova): let the primary action follow the session
papi-ux Aug 5, 2026
03b17ac
feat(nova): give the detail overview a portrait layout
papi-ux Aug 6, 2026
557f043
fix(nova): stop the detail destinations squishing their content
papi-ux Aug 6, 2026
868dee4
feat(nova): rework the detail destinations to use the space they have
papi-ux Aug 6, 2026
022f506
fix(nova): keep the destination scrim neutral across themes
papi-ux Aug 6, 2026
baf0dd4
feat(nova): let launch mode answer where it runs, and give tune the p…
papi-ux Aug 6, 2026
f91c871
fix(nova): give the drill-in destinations somewhere for focus to land
papi-ux Aug 6, 2026
fbdbe1d
feat(nova): rebuild the drawer interiors as full-bleed rows
papi-ux Aug 6, 2026
e89743a
feat(nova): make launch mode's choices rows like the rest of the drawer
papi-ux Aug 6, 2026
e7f23fb
fix(nova): make the row focus and the heads-up badge survive a light …
papi-ux Aug 6, 2026
01a54f0
feat(nova): mark the cut where a drawer body scrolls under its hint bar
papi-ux Aug 6, 2026
8387d37
feat(nova): give the launch mode you pick somewhere to live
papi-ux Aug 6, 2026
d52a277
chore(nova): drop imports the sheet left behind
papi-ux Aug 6, 2026
0490481
test(nova): make the drawer order guards assert existence, not just o…
papi-ux Aug 6, 2026
8f17f7f
feat(nova): let the drawer rows reach the panel's edges
papi-ux Aug 6, 2026
ad1e89c
feat(nova): carry the launcher playtime the host now reports
papi-ux Aug 6, 2026
c8ac25a
feat(nova): show how long a game has been played
papi-ux Aug 6, 2026
821795d
feat(nova): draw the play time gauge against the completion estimates
papi-ux Aug 6, 2026
1da4555
fix(nova): draw the gauge the way the concept draws it
papi-ux Aug 6, 2026
0ac6c6f
feat(nova): say which game an estimate is actually for
papi-ux Aug 6, 2026
a0358ec
fix(nova): stop the launch mode badge claiming a recommendation nobod…
papi-ux Aug 6, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import androidx.test.ext.junit.rules.ActivityScenarioRule
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry
import com.papi.nova.api.PolarisClientSettings
import com.papi.nova.api.PolarisApiClient
import com.papi.nova.shared.polaris.model.PolarisGame
import com.papi.nova.ui.compose.NovaComposeTheme
import org.junit.Assert.assertTrue
Expand Down Expand Up @@ -113,7 +114,23 @@ class NovaGameDetailComposeTest {
iconAvailable = false,
iconPresentationKey = "",
iconLoader = {},
coverLoader = {}
coverLoader = {},
destination = NovaGameDetailDestination.OVERVIEW,
steamDecision = null,
reviewExpanded = false,
// No host is reachable under test; the backdrop simply draws nothing.
apiClient = PolarisApiClient(
InstrumentationRegistry.getInstrumentation().targetContext,
"",
),
sourceLabel = "Steam",
onDestination = {},
onSteamChoice = {},
// no session under test, so the primary action stays a launch
activeSession = null,
onResumeSession = {},
onEndSession = {},
onDismissDestination = {},
)
}
}
Expand Down
1 change: 1 addition & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -294,6 +294,7 @@

<activity
android:name="com.papi.nova.ui.NovaGameDetailActivity"
android:launchMode="singleTop"
android:theme="@style/AppTheme"
android:exported="false" />

Expand Down
17 changes: 17 additions & 0 deletions app/src/main/java/com/papi/nova/api/PolarisGameJsonAdapter.kt
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,23 @@ object PolarisGameJsonAdapter {
coverUrl = json.optString("cover_url", ""),
genres = fetchStringArray(json.optJSONArray("genres")),
lastLaunched = json.optLong("last_launched", 0),
beatTime = json.optJSONObject("beat_time")?.let { beat ->
PolarisGame.BeatTime(
mainSeconds = beat.optLong("main_seconds", 0).coerceAtLeast(0),
extrasSeconds = beat.optLong("extras_seconds", 0).coerceAtLeast(0),
completionistSeconds = beat.optLong("completionist_seconds", 0).coerceAtLeast(0),
matchedName = beat.optString("matched_name", ""),
url = beat.optString("url", ""),
cachedAt = beat.optLong("cached_at", 0).coerceAtLeast(0)
)
},
playTime = json.optJSONObject("play_time")?.let { played ->
PolarisGame.PlayTime(
seconds = played.optLong("seconds", 0).coerceAtLeast(0),
source = played.optString("source", ""),
readAt = played.optLong("read_at", 0).coerceAtLeast(0)
)
},
mangohud = json.optBoolean("mangohud", false),
hdrSupported = json.optBoolean("hdr_supported", false),
launchMode = launchMode,
Expand Down
4 changes: 3 additions & 1 deletion app/src/main/java/com/papi/nova/ui/NovaArtworkStudio.kt
Original file line number Diff line number Diff line change
Expand Up @@ -288,10 +288,12 @@ fun NovaArtworkStudio(
choicePreviewLoader: (ImageView, PolarisArtworkChoice) -> Unit,
currentArtworkPresentationKey: (String) -> String,
currentArtworkLoader: (ImageView, String) -> Unit,
/** True when the studio is the destination rather than a row inside one. */
initiallyExpanded: Boolean = false,
) {
val colors = LocalNovaComposeColors.current
val surfaces = LocalNovaLibrarySurfaces.current
var expanded by remember(initialQuery) { mutableStateOf(false) }
var expanded by remember(initialQuery) { mutableStateOf(initiallyExpanded) }
var query by remember(initialQuery) { mutableStateOf(initialQuery) }
val title = stringResource(R.string.nova_artwork_studio_title)
val summary = stringResource(R.string.nova_artwork_studio_summary)
Expand Down
250 changes: 136 additions & 114 deletions app/src/main/java/com/papi/nova/ui/NovaGameDetailActivity.kt

Large diffs are not rendered by default.

Loading
Loading