fix(privacy): honor no-network claims, add OTA opt-out, bundle privacy policy #23
No reviewers
Labels
No labels
bug
code
docs
duplicate
enhancement
help wanted
invalid
question
styles
wontfix
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
uwayss/muhsin!23
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "claude/privacy-ota-fixes"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
behind a new "Automatic Updates" setting (on by default), so users can
opt out of the per-cold-launch request to ota.uwayss.com.
point the settings link at it instead of an external URL.
Closes #20
@claude give me a full list of all the behavioral changes in this PR. every file and every change. i want a table. explain clearly. be clear, direct and concise
I have the full diff. No file changes needed — this is a pure explanation request. Here's my reply.
Behavioral changes in this PR
app.json"checkAutomatically": "ON_ERROR_RECOVERY"to theupdatesblock.ON_LOAD, the previous default). It now only checks automatically as an error-recovery fallback; the normal update check moves entirely into app code (see below).src/core/services/updateService.ts(new)checkForOtaUpdate(): callsUpdates.checkForUpdateAsync(), and if an update is available, fetches and applies it viareloadAsync(). No-ops ifUpdates.isEnabledis false; errors are caught and logged, not thrown.ota.uwayss.com, and it's called conditionally (seeappStore.ts), not automatically by the Updates runtime.src/core/store/appStore.tsisAutoUpdateEnabled: boolean, defaulttrue.• New action
toggleAutoUpdate().• On store init, calls
checkForOtaUpdate()onlyif (settings.isAutoUpdateEnabled).persistState.src/features/settings/settingsData.tsisAutoUpdateEnabled) added to the settings list, under Haptics.• "Privacy Policy" item type changed from
action(opened external URL) tonavigation(path: 'PrivacyPolicy').src/features/settings/SettingsListItem.tsxhandleTogglenow also handlesisAutoUpdateEnabled, callingtoggleAutoUpdate().• Haptic feedback (
triggerHaptic()) now fires for any toggle, not just haptics.• Removed the special-case that hid the chevron on the old Privacy
actionitem (no longer needed since it's anavigationitem).src/screens/SettingsScreen.tsxprivacy: () => Linking.openURL(...)action (dead code — no longer referenced since the settings item type changed).Linkingis still used for other actions (rate app, feedback email) so no import is left dangling.src/navigation/AppNavigator.tsxPrivacyPolicyScreenin the Settings stack (PrivacyPolicyroute).src/screens/PrivacyPolicyScreen.tsx(new)src/core/i18n/en.jsonscreens.privacyPolicy,settings.autoUpdates, and a fullprivacyPolicyblock (intro, 5items,footer).src/core/i18n/ar.json,de.json,es.json,fa.json,tr.jsonscreens.privacyPolicy,settings.autoUpdates) — only these two, not the fullprivacyPolicyblock.privacyPolicy.items,intro,footer) will fall back to English for these languages, since onlyen.jsonhas that block. Worth flagging as a possible follow-up if full localization is expected.PRIVACY.mdota.uwayss.com, and that it can be disabled in Settings). Renumbers items 4→5 to insert the new "Automatic Updates" item.Net behavioral summary
ON_LOADauto-check is disabled; the check is now explicit app code gated by a setting.@claude 1- Actually no, we don't need to give users the option to opt out of automatic updates because adding that option ruins the updates for normal users. Because now we don't use Expo's default behavior and we have to restart the app ourselves to apply updates which is definitely a worse experience than just applying the next bundle in the next launch. We're just acknowledging the fact that ota updates exist. We're not adding options for them
2- we gotta translate the privacy policy to the other languages as well. not just in the app but also the markdown file in the repo.
Both requested changes are now on branch
claude/privacy-ota-fixes(PR #23), pushed as commita686dd6.What changed
1. Removed the auto-update opt-out (per your feedback that it makes updates worse for normal users):
app.json: droppedcheckAutomatically: "ON_ERROR_RECOVERY"— Expo is back to its defaultON_LOADbehavior, applying the next bundle automatically on a future cold start.src/core/services/updateService.tsentirely (no more explicitcheckForUpdateAsync/fetchUpdateAsync/reloadAsynccalls or the immediate-reload-on-cold-start behavior).appStore.ts: removedisAutoUpdateEnabled,toggleAutoUpdate, and the gated check frominitialize().settingsData.ts/SettingsListItem.tsx: removed the "Automatic Updates" toggle row and its handling entirely — settings no longer mention OTA updates at all, they just happen silently via Expo's default mechanism.PRIVACY.md/en.json'sprivacyPolicyblock: updated wording to just acknowledge the OTA check exists, with no mention of an opt-out.2. Translated the privacy policy into Arabic, German, Spanish, Persian, and Turkish:
privacyPolicyblock (intro, 5 items, matching content) to each locale's JSON file, so the in-app Privacy Policy screen is fully localized instead of falling back to English.PRIVACY.ar.md,PRIVACY.de.md,PRIVACY.es.md,PRIVACY.fa.md,PRIVACY.tr.mdin the repo root, with a language-switcher line added to the top of each (including the EnglishPRIVACY.md).Note: while pushing, I found
uwaysshad pushed a commit directly to this branch in the meantime (dropping the privacy-policy footer line, adding a dev-mode guard to the old update check). I rebased on top of it — the dev-mode guard is moot since that file is now deleted, and I removed thefooterkey from my new translations to stay consistent with that change.Verified
tsc --noEmit,expo lint, andprettier --checkall pass (only pre-existing unrelated warnings remain).3c7aa4fe3ad7d169894ed7d169894e168bcc06d6