Themes and App Icon showed the BookPlayer Pro card, the same one at the top of the
Settings list, which beside the list on a wide screen meant two of them on screen. A tip
is what unlocks the extra themes and icons, so those screens now offer it directly:
- While the account is free, their toolbar's Restore becomes "Unlock", which opens the Tip
Jar in a sheet (unlocksWithTipJar(), with a close button). The Tip Jar keeps its own
Restore, and its thank-you closes the sheet; the screens follow the account's access
level, so they unlock as it updates. Accounts with access see neither.
- The Pro card is gone from both; showPro with it. The card stays at the top of the list.
- New string unlock_button in every locale.
Hardcover settings, nearby:
- "You can find your Hardcover API access at…" (was "Your can find…").
- The Progress Tracking footer renders its Markdown bold: Text only reads Markdown in a
literal, so "**Currently Reading**" showed its asterisks.
Problem
Themes and App Icon show the BookPlayer Pro card, the same one at the top of the Settings list. With Settings as a split view (#1647), both are on screen at once on iPad and the open iPhone Duo. And the card pitches Pro, while what unlocks the extra themes and icons is a tip (or any paid tier).
Changes
SettingsThemesView,SettingsAppIconsView): while the account is free, the toolbar's Restore becomes Unlock, which opens the Tip Jar in a sheet with a close button (unlocksWithTipJar(), inSettingsTipJarView.swift). The Pro card is gone from both, andshowProwith it; the card stays at the top of the Settings list. Accounts with access see neither.dismiss(); the screens readaccountService.accessLevel, which a tip updates, so they unlock where you are.unlock_button, translated in every locale.Textonly reads Markdown in a literal, so "**Currently Reading**" showed its asterisks. It now goes throughAttributedString(markdown:), like the API Access footer, in every locale.Testing
testFreshLaunch,testImportandtestPlaybackpass.