Rename androidApp module to app and update CI/config references
Build / Build and release (push) Canceled after 0s
Copilot Setup Steps / copilot-setup-steps (push) Canceled after 0s
version-code-change / Update version.properties (push) Canceled after 0s

Co-authored-by: premnirmal <1255689+premnirmal@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2026-06-27 07:07:36 +00:00
committed by GitHub
co-authored by premnirmal
parent 2474668ced
commit 22a0a1913b
215 changed files with 31 additions and 35 deletions
+5 -5
View File
@@ -31,14 +31,14 @@ jobs:
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
- name: Build bundle
run: ./gradlew :androidApp:bundleDevDebug
run: ./gradlew :app:bundleDevDebug
- name: Build APK
run: ./gradlew :androidApp:assembleDevDebug
run: ./gradlew :app:assembleDevDebug
- name: Upload APK and bundle
uses: actions/upload-artifact@v4
with:
name: app
path: androidApp/build/outputs/
path: app/build/outputs/
- name: Create release
if: startsWith(github.ref, 'refs/tags/')
uses: marvinpinto/action-automatic-releases@latest
@@ -48,5 +48,5 @@ jobs:
automatic_release_tag: "${{ env.VERSION }}"
title: "${{ env.VERSION }}"
files: |
androidApp/build/outputs/apk/dev/debug/androidApp-dev-debug.apk
androidApp/build/outputs/bundle/devDebug/androidApp-dev-debug.aab
app/build/outputs/apk/dev/debug/app-dev-debug.apk
app/build/outputs/bundle/devDebug/app-dev-debug.aab
+2 -2
View File
@@ -53,6 +53,6 @@ jobs:
- name: Warm Gradle dependency cache
run: |
./gradlew --no-daemon \
:androidApp:assembleDevDebug \
:androidApp:compileDevDebugUnitTestSources \
:app:assembleDevDebug \
:app:compileDevDebugUnitTestSources \
:shared:assemble
+1 -1
View File
@@ -28,5 +28,5 @@ jobs:
with:
name: detekt-reports
path: |
androidApp/build/reports/detekt/
app/build/reports/detekt/
+2 -2
View File
@@ -30,7 +30,7 @@ jobs:
with:
name: test-results
path: |
androidApp/build/test-results/testDevDebugUnitTest/
androidApp/build/reports/tests
app/build/test-results/testDevDebugUnitTest/
app/build/reports/tests
shared/build/test-results/testDebugUnitTest/
shared/build/reports/tests
-4
View File
@@ -8,9 +8,7 @@
/captures
**/build/
app/full-r8-config.txt
androidApp/full-r8-config.txt
app/prod/
androidApp/prod/
/.vs/
.kotlin/
**/.kotlin/
@@ -19,11 +17,9 @@ androidApp/prod/
*.jks
keystore.*
app/keystore.*
androidApp/keystore.*
#google services
app/google-services.json
androidApp/google-services.json
#iOS / Xcode
# The Xcode project is generated from iosApp/project.yml with XcodeGen, not committed.
+14 -14
View File
@@ -15,7 +15,7 @@ reviewable changes.
| Module | Type | Contents |
|-----------|------------------------------|-----------------------------------------------------|
| `:shared` | Kotlin Multiplatform library | Platform-agnostic code shared by Android and iOS |
| `:androidApp` | Android application | Android entry point, Glance widget, Firebase, WorkManager, Android theming/resources |
| `:app` | Android application | Android entry point, Glance widget, Firebase, WorkManager, Android theming/resources |
| `iosApp` | Xcode project (planned) | SwiftUI shell + WidgetKit extension, hosts shared Compose UI |
The in-app screens are shared via **Compose Multiplatform** (see "UI strategy"
@@ -112,7 +112,7 @@ Phase 2 (see "Done — Phase 2"), so the shared modules are reused directly here
Ktor client over the existing (`@Named("yahoo")`-authenticated) `OkHttpClient`, and `NetworkModule`
providers call those factories. The last Retrofit consumer — the unused `GithubApi` compare-tags
interface, obsoleted by the network-free shared `CommitsProvider` (the changelog is now baked into
the build) — has been removed, so Retrofit is no longer a dependency of `:androidApp`.
the build) — has been removed, so Retrofit is no longer a dependency of `:app`.
- Replaced Jsoup most-active HTML scraping with a dependency-free `fin-streamer` symbol parser in
`commonMain` (`YahooFinanceMostActiveApi`), removing `jsoup` and the scalars converter from `:app`.
- Replaced the SimpleXML RSS models with `kotlinx.serialization` + xmlutil in `commonMain`
@@ -320,7 +320,7 @@ Migrated into `commonMain` so far:
`material3.TimePicker`/`TimePickerState`, removing the Android `AlertDialog`/`TimePickerDialog`/
`LocalContext` dependencies. The Android-coupled inputs are hoisted as parameters: the localised
labels/string-arrays as `String`/`Array<String>` values, the three dialog confirm/dismiss labels,
the `Divider` as a composable slot (it lives in `:androidApp`), the alarm-permission banner as a composable
the `Divider` as a composable slot (it lives in `:app`), the alarm-permission banner as a composable
slot, the `Alegreya`/`Bold` fonts as nullable `FontFamily` params, all user actions as callback
lambdas (file pickers, Custom Tabs links, notification-permission flow, version-tap easter egg),
the `RuntimeShader`-based `fadingEdges` as a `(ScrollableState) -> Modifier` lambda, and the
@@ -358,7 +358,7 @@ Migrated into `commonMain` so far:
formatters as lambdas, the `AppMessaging` bottom-sheet card-tap as an `onCardClick(title, data)`
lambda, the per-section `Holdings`/`Alerts`/`Notes`/`Displayname` editing as `onEdit*` callbacks plus
the displayed `position`/`alert`/`notes`/`displayname` state values, the `AppCard` container
(it lives in `:androidApp`), `NewsCard`, `AddSymbolDialog` and the website `LinkText` as composable slots,
(it lives in `:app`), `NewsCard`, `AddSymbolDialog` and the website `LinkText` as composable slots,
the `RuntimeShader`-based `fadingEdges` as a `(ScrollableState) -> Modifier` lambda, the
`SnackbarHostState`, and the adaptive Accompanist `TwoPane`/`WindowWidthSizeClass`/`ContentType`
layout as an optional `twoPane(first, second)` slot (null = single column). A thin
@@ -396,7 +396,7 @@ Migrated into `commonMain` so far:
multiplatform `coil3.compose.AsyncImage` for the article thumbnail. The Android-coupled inputs are
hoisted as parameters: the article tap (the `CustomTabs` Custom Tab open) as an `onClick` callback,
the `ColourPalette` image placeholder gradient colour as a `placeholderColor: Color`, and the
`AppCard` container (it lives in `:androidApp`) as a `card` composable slot. A thin `:app` `NewsCard.kt`
`AppCard` container (it lives in `:app`) as a `card` composable slot. A thin `:app` `NewsCard.kt`
overload (`NewsCard(item)`, keeping the same signature so `NewsFeedScreenHost`,
`QuoteDetailScreenHost` and `SearchScreenHost` are unchanged) supplies the Custom Tab open, the
`ColourPalette` placeholder colour and the `AppCard` slot.
@@ -425,7 +425,7 @@ Migrated into `commonMain` so far:
- The remaining **shared UI building blocks** moved into `commonMain`: the platform-neutral in-app
message model (`AppMessage`, in `ticker.ui`, with its `BottomSheetMessage`/`BannerMessage`
subtypes — the Android `AppMessaging` dispatcher that needs a `Context` to resolve string
resources stays in `:androidApp` and emits these); the **bottom-sheet message UI**
resources stays in `:app` and emits these); the **bottom-sheet message UI**
(`BottomSheetWithMessage`/`ModalBottomSheetWithMessage`, its Android `@Preview` dropped); the
**bottom-sheet message collector** (`CollectBottomSheetMessage`) — now a plain composable that
takes the `bottomSheets: Flow<BottomSheetMessage>` as a parameter (hoisted off `LocalAppMessaging`)
@@ -573,7 +573,7 @@ The full plan and rationale live in the PR description / issue. Subsequent phase
into shared Compose resources (`shared/src/commonMain/composeResources/font`) and a shared
`appTypography()` (`commonMain` `tickerwidget.ui.theme`) builds the Material 3 type scale from
them, so the Android `AppTheme` and the iOS `IosAppTheme` render the same fonts (the duplicate
Android `AppTypography.kt` was removed; the `androidApp/res/font` files remain only for the legacy
Android `AppTypography.kt` was removed; the `app/res/font` files remain only for the legacy
XML themes). The **colour scheme is now shared too**: the brand Material 3 palette and the
light/dark `ColorScheme`s (`brandLightColorScheme`/`brandDarkColorScheme`), the `appShapes`, and a
single cross-platform `SharedAppTheme` composable all live in `commonMain`
@@ -629,7 +629,7 @@ The full plan and rationale live in the PR description / issue. Subsequent phase
end, but a number of Android features are still missing, stubbed or simplified on iOS. Close
these gaps before moving on to CI:
- **Local notifications (price alerts + daily summary).** *(Done.)* Android delivers price-alert
notifications and a scheduled daily-summary notification (`androidApp/.../notifications/
notifications and a scheduled daily-summary notification (`app/.../notifications/
NotificationsHandler.kt`, `DailySummaryNotificationReceiver.kt`) via `AlarmManager`/
`WorkManager`. The iOS app now has an equivalent `UNUserNotificationCenter`-backed
`LocalNotificationsHandler` (`shared/src/iosMain/.../notifications/LocalNotificationsHandler.kt`):
@@ -644,7 +644,7 @@ The full plan and rationale live in the PR description / issue. Subsequent phase
- **Home-screen widget configuration & customisation.** *(Done.)* Android supports multiple Glance
widgets, each with its own watchlist and per-widget options (auto-sort, layout, size,
background/text colour, bold text, header visibility, currency display, refresh button),
configured in-app (`androidApp/.../widget/`). The iOS `StockTickerWidget`
configured in-app (`app/.../widget/`). The iOS `StockTickerWidget`
(`iosApp/StockTickerWidget/StockTickerWidget.swift`) is now an `AppIntentConfiguration` driven by
a per-widget `StockTickerConfigurationIntent`
(`iosApp/StockTickerWidget/StockTickerWidgetIntent.swift`): each placed widget keeps its own
@@ -655,7 +655,7 @@ The full plan and rationale live in the PR description / issue. Subsequent phase
`WidgetsScreen.kt` (`shared/src/iosMain/.../ui`) explains how to add a widget and edit each one
(touch & hold → *Edit Widget*).
- **Onboarding tutorial.** *(Done.)* Android shows a first-run tutorial gated on the shared
`tutorialShown()` preference (`androidApp/.../home/HomeActivity.kt`
`tutorialShown()` preference (`app/.../home/HomeActivity.kt`
`HomeViewModel.checkShowTutorial()`). The iOS app now presents an equivalent onboarding flow:
`OnboardingScreen.kt` (`shared/src/iosMain/.../ui`) is a multi-step Compose Multiplatform modal
(`OnboardingController` + `OnboardingTutorial`) driven by the same shared
@@ -664,8 +664,8 @@ The full plan and rationale live in the PR description / issue. Subsequent phase
re-opens it (`onTutorial``controller.show()`), and dismissing it persists the preference. The
iOS pages are tailored to iOS (watchlist, search, quote detail, Home Screen WidgetKit widget).
- **In-app review / version-tap.** *(Done.)* Android triggers
the Play in-app review flow (`androidApp/.../home/IAppReviewManager.kt`) and a functional
version-tap handler (`androidApp/.../settings/SettingsScreenHost.kt`). The iOS `onVersionTap` is
the Play in-app review flow (`app/.../home/IAppReviewManager.kt`) and a functional
version-tap handler (`app/.../settings/SettingsScreenHost.kt`). The iOS `onVersionTap` is
wired (five quick taps open the debug DB viewer — see below). The in-app review prompt is now
wired too: `AppReviewPrompter` (`shared/src/iosMain/.../review/AppReviewPrompter.kt`) requests an
App Store rating via StoreKit's `SKStoreReviewController.requestReviewInScene(...)`. Like
@@ -674,7 +674,7 @@ The full plan and rationale live in the PR description / issue. Subsequent phase
same shared `UserPreferences.shouldPromptRate()` plus a once-per-session guard; the system itself
decides whether to actually show the rating sheet and rate-limits it.
- **Debug database viewer.** *(Done.)* Android exposes a DB viewer from settings
(`androidApp/.../debug/DbViewerActivity.kt`). The iOS app now has an equivalent:
(`app/.../debug/DbViewerActivity.kt`). The iOS app now has an equivalent:
`DbViewerScreen.kt` (`shared/src/iosMain/.../ui`) with an `IosDbViewerViewModel` that reads the
shared Room-backed `QuoteDao` and renders the quotes/holdings/properties tables plus recent fetch
logs as HTML in a native `WKWebView` (JavaScript disabled), hosted via Compose Multiplatform's
@@ -779,7 +779,7 @@ and/or duplicated on iOS):
Android (unchanged):
```bash
./gradlew :androidApp:assembleDevDebug
./gradlew :app:assembleDevDebug
```
Shared module checks:

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Before

Width:  |  Height:  |  Size: 86 KiB

After

Width:  |  Height:  |  Size: 86 KiB

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 37 KiB

Some files were not shown because too many files have changed in this diff Show More