Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
191bae2
Document in-app feedback sheet design and implementation plan
rainxchzed Apr 29, 2026
35b0533
Expose OS version and system locale tag from core/domain Platform hel…
rainxchzed Apr 29, 2026
2b22240
Add string resources for in-app feedback bottom sheet
rainxchzed Apr 29, 2026
8801ca5
Add feedback category, topic, channel, and diagnostics model types
rainxchzed Apr 29, 2026
891a3b0
Add FeedbackState, FeedbackAction, FeedbackEvent for the feedback sheet
rainxchzed Apr 29, 2026
b3e4aec
Add FeedbackComposer for mailto and GitHub issue URL assembly
rainxchzed Apr 29, 2026
1ca0ffc
Add FeedbackViewModel with diagnostics gathering and send dispatch
rainxchzed Apr 29, 2026
3238bfc
Register FeedbackViewModel in the Koin viewModels module
rainxchzed Apr 29, 2026
9b3bb6f
Add CategorySelector radio group for the feedback sheet
rainxchzed Apr 29, 2026
75682ff
Add TopicSelector chip row for the feedback sheet
rainxchzed Apr 29, 2026
6880446
Add ConditionalFields renderer for category-specific feedback extras
rainxchzed Apr 29, 2026
ad28b99
Add DiagnosticsPreview card with toggle for the feedback sheet
rainxchzed Apr 29, 2026
6ca932c
Add SendActions row with email and GitHub send buttons
rainxchzed Apr 29, 2026
6d1f888
Add FeedbackBottomSheet shell composing the full feedback form
rainxchzed Apr 29, 2026
45f4c68
Add open/close flag and actions for the feedback bottom sheet
rainxchzed Apr 29, 2026
ba59e05
Mount FeedbackBottomSheet from TweaksRoot with snackbar feedback
rainxchzed Apr 29, 2026
0431f27
Replace dead help_support row with Send feedback entry in Tweaks About
rainxchzed Apr 29, 2026
07e3e55
Reset feedback form after successful send so reopening shows a fresh …
rainxchzed Apr 29, 2026
dd1b36b
Match diagnostics preview to body markdown so the card shows exactly …
rainxchzed Apr 29, 2026
b7497a4
Reserve room for truncation suffix so the body never exceeds the cap
rainxchzed Apr 29, 2026
aab207e
Route startActivity failures through BrowserHelper onFailure callback…
rainxchzed Apr 29, 2026
6a9ef11
Sync FeedbackEvent.OnSent in spec to carry the channel like the imple…
rainxchzed Apr 29, 2026
d5461f0
Mark TopicSelector chip row as a selectable group for accessibility
rainxchzed Apr 29, 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 @@ -15,6 +15,7 @@ import zed.rainxch.recentlyviewed.presentation.RecentlyViewedViewModel
import zed.rainxch.search.presentation.SearchViewModel
import zed.rainxch.starred.presentation.StarredReposViewModel
import zed.rainxch.tweaks.presentation.TweaksViewModel
import zed.rainxch.tweaks.presentation.feedback.FeedbackViewModel

val viewModelsModule =
module {
Expand Down Expand Up @@ -60,5 +61,6 @@ val viewModelsModule =
viewModelOf(::SearchViewModel)
viewModelOf(::ProfileViewModel)
viewModelOf(::TweaksViewModel)
viewModelOf(::FeedbackViewModel)
viewModelOf(::StarredReposViewModel)
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@ class AndroidBrowserHelper(
Intent(Intent.ACTION_VIEW, url.toUri()).apply {
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
}
context.startActivity(intent)
try {
context.startActivity(intent)
} catch (e: Exception) {
onFailure(e.message ?: "Unable to open the requested URL.")
}
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
package zed.rainxch.core.domain

import android.os.Build
import java.util.Locale
import zed.rainxch.core.domain.model.Platform

actual fun getPlatform(): Platform = Platform.ANDROID

actual fun getOsVersion(): String = "${Build.VERSION.RELEASE} (API ${Build.VERSION.SDK_INT})"

actual fun getSystemLocaleTag(): String =
Locale.getDefault().toLanguageTag().takeIf { it.isNotBlank() } ?: "und"
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,7 @@ package zed.rainxch.core.domain
import zed.rainxch.core.domain.model.Platform

expect fun getPlatform(): Platform

expect fun getOsVersion(): String

expect fun getSystemLocaleTag(): String
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package zed.rainxch.core.domain

import java.util.Locale
import zed.rainxch.core.domain.model.Platform

actual fun getPlatform(): Platform =
Expand All @@ -8,3 +9,8 @@ actual fun getPlatform(): Platform =
System.getProperty("os.name").lowercase().contains("mac") -> Platform.MACOS
else -> Platform.LINUX
}

actual fun getOsVersion(): String = System.getProperty("os.version") ?: "unknown"

actual fun getSystemLocaleTag(): String =
Locale.getDefault().toLanguageTag().takeIf { it.isNotBlank() } ?: "und"
Original file line number Diff line number Diff line change
Expand Up @@ -861,4 +861,48 @@
<string name="details_unlink_external_app_dialog_confirm">Unlink</string>
<string name="details_unlink_external_app_success">Unlinked. We\'ll re-suggest a match next scan.</string>
<string name="details_unlink_external_app_failure">Couldn\'t unlink — try again.</string>

<!-- Tweaks feature - Feedback -->
<string name="feedback_send">Send feedback</string>
<string name="feedback_title">Send feedback</string>
<string name="feedback_close">Close</string>

<!-- Feedback - Category -->
<string name="feedback_category_label">Category</string>
<string name="feedback_category_bug">Bug</string>
<string name="feedback_category_feature">Feature request</string>
<string name="feedback_category_change">Change request</string>
<string name="feedback_category_other">Other</string>

<!-- Feedback - Topic -->
<string name="feedback_topic_label">Topic</string>
<string name="feedback_topic_install_update">Install / Update</string>
<string name="feedback_topic_search">Search &amp; Discovery</string>
<string name="feedback_topic_details">Repo details</string>
<string name="feedback_topic_auth">Auth &amp; Account</string>
<string name="feedback_topic_ui">UI / UX</string>
<string name="feedback_topic_translation">Translation / Language</string>
<string name="feedback_topic_performance">Performance</string>
<string name="feedback_topic_other">Other</string>

<!-- Feedback - Form fields -->
<string name="feedback_field_title">Title</string>
<string name="feedback_field_description">Description</string>
<string name="feedback_field_steps">Steps to reproduce</string>
<string name="feedback_field_expected_actual">Expected vs actual</string>
<string name="feedback_field_use_case">Use case</string>
<string name="feedback_field_proposed_solution">Proposed solution</string>
<string name="feedback_field_current_behaviour">Current behaviour</string>
<string name="feedback_field_desired_behaviour">Desired behaviour</string>

<!-- Feedback - Diagnostics -->
<string name="feedback_diagnostics_header">Diagnostics</string>
<string name="feedback_diagnostics_include">Include diagnostics</string>

<!-- Feedback - Send actions -->
<string name="feedback_send_via_email">Send Email</string>
<string name="feedback_send_via_github">Open as GitHub Issue</string>
<string name="feedback_send_success_email">Thanks — opening your mail client.</string>
<string name="feedback_send_success_github">Thanks — opening your browser.</string>
<string name="feedback_send_error">Couldn\'t open feedback channel: %1$s</string>
</resources>
Loading