[LLM] feat: Implement 'About' Section via Bottom Tab & License Collection#157
[LLM] feat: Implement 'About' Section via Bottom Tab & License Collection#157menny wants to merge 1 commit into
Conversation
…tion Add the "About" screen (The Colophon) as a fourth bottom navigation tab and integrate the Google OSS Licenses plugin to collect and display open-source attributions. ### What - Integrated the Google OSS Licenses plugin and play-services-oss-licenses library. - Enabled `buildConfig` in the app's buildFeatures. - Fully localized all the new strings across English, Arabic, German, Spanish, French, Hebrew, and Russian. - Built a scrollable, premium `AboutScreen` displaying app icon, dynamic version name, translation methodology abstract, links to the GitHub repository/issue tracker, and an outlined button to launch play services licenses activity. - Configured a new bottom navigation tab `About` mapped to `AboutScreen`. - Added a unit test in `MainActivityTest.kt` to verify correct `TabScreen.About` tab configurations. ### Why This implements the academic "Colophon" aesthetic defined in DESIGN.md, allowing users to understand the Wikipedia conceptual translation methodology and check open-source attributions, and integrates beautifully with the existing bottom navigation bar. Commit made by Antigravity. Fixes #140
|
This review follows the Robust Maintainer guidelines, focusing on resilience, transparency, and adherence to the established architectural patterns. The addition of the 'Colophon' section is a great step toward the 'Scholarly' aesthetic defined in our design manifest. The localization coverage is excellent. |
anysoftkeyboard-bot
left a comment
There was a problem hiding this comment.
The review identifies critical stability risks due to unprotected startActivity calls that could lead to crashes on certain device configurations, violating the project's zero-tolerance policy for unhandled runtime errors.
| border = BorderStroke(1.dp, MaterialTheme.colorScheme.secondary), | ||
| modifier = Modifier.fillMaxWidth(), | ||
| ) { | ||
| Text( |
There was a problem hiding this comment.
[Risk] The startActivity call for OssLicensesMenuActivity is not protected. Any failure to resolve the class or launch the intent will result in a crash. This should be wrapped in a try-catch block to handle ActivityNotFoundException.
| .clickable { | ||
| val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url)) | ||
| context.startActivity(intent) | ||
| } |
There was a problem hiding this comment.
[Risk] Launching an external browser using ACTION_VIEW can throw an ActivityNotFoundException on devices without a browser. This call must be protected to ensure system stability.
| val aboutTab = TabScreen.About | ||
| assertEquals("about", aboutTab.route) | ||
| assertEquals(R.string.tab_about, aboutTab.titleRes) | ||
| assertEquals(androidx.compose.material.icons.Icons.Default.Info, aboutTab.icon) |
There was a problem hiding this comment.
[Maintenance] The test uses a full package name inline: androidx.compose.material.icons.Icons.Default.Info. Per guidelines, use imports instead.
| horizontalAlignment = Alignment.CenterHorizontally, | ||
| ) { | ||
| // 1. Header | ||
| Icon( |
There was a problem hiding this comment.
[Maintenance] The Icon component uses a tint on a mipmap resource (ic_launcher_foreground). This matches the monochromatic design goal but is fragile for bitmaps. Consider using a dedicated vector or setting tint to Color.Unspecified.
| <string name="about_abstract">Janus Glossa is an open-source tool designed to translate concepts within their context, utilizing the crowd-sourced knowledge of Wikipedia.</string> | ||
| <string name="about_methodology_title">How it works</string> | ||
| <string name="about_methodology_text">Unlike standard dictionaries, Janus Glossa aligns concepts. It finds the encyclopedia entry for your term, then follows the inter-language link to the target language to provide a precise, context-aware translation.</string> | ||
| <string name="about_link_source_code">Source Code</string> |
There was a problem hiding this comment.
[Observation] The string content_description_about is defined but remains unused. It should be applied to the app icon in the AboutScreen header or the tab icon to improve accessibility.
|
|
||
| <!-- About screen --> | ||
| <string name="tab_about">حول</string> | ||
| <string name="about_title">Janus Glossa</string> |
There was a problem hiding this comment.
[Observation] The version string in Arabic (إصدار %1$s) omits the 'v' prefix used in other locales. Consider if strict consistency across languages is required.
| fun AboutScreen(modifier: Modifier = Modifier) { | ||
| val context = LocalContext.current | ||
| val scrollState = rememberScrollState() | ||
|
|
There was a problem hiding this comment.
[Observation] The AboutScreen uses a nested Scaffold. Ensure that it doesn't cause conflicting inset handling with the Scaffold in JanusApp. It appears safe here as the inner Scaffold has no bars.
Add the 'About' screen (The Colophon) as a fourth bottom navigation tab and integrate the Google OSS Licenses plugin to collect and display open-source attributions.
What
buildConfigin the app's buildFeatures.AboutScreendisplaying app icon, dynamic version name, translation methodology abstract, links to the GitHub repository/issue tracker, and an outlined button to launch play services licenses activity.Aboutmapped toAboutScreen.MainActivityTest.ktto verify correctTabScreen.Abouttab configurations.Why
This implements the academic "Colophon" aesthetic defined in DESIGN.md, allowing users to understand the Wikipedia conceptual translation methodology and check open-source attributions, and integrates beautifully with the existing bottom navigation bar.
Fixes #140