privacy policy
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
# Privacy Policy
|
||||
|
||||
Last updated: 2026-05-10
|
||||
|
||||
Private QR Scanner is provided by SoftwareApp-HB.
|
||||
Contact: softwareapp.hb@gmail.com
|
||||
|
||||
This policy explains how Private QR Scanner handles data on your device.
|
||||
|
||||
## What the App Accesses
|
||||
|
||||
Camera: The app uses the camera only to scan QR codes and barcodes. Camera frames are processed on your device and are not saved by the app.
|
||||
|
||||
Selected images: If you choose to scan from an image, the app reads that selected image only to detect QR codes or barcodes. The app does not keep a copy of the image.
|
||||
|
||||
Scanned content: The app displays scanned content on your device. If you enable Save history (local), the scanned content, content type, and scan time are stored locally on your device. History is off by default.
|
||||
|
||||
Settings: The app stores your local preferences, such as whether history, security warnings, scan feedback, and the selected use-case view are enabled.
|
||||
|
||||
Event and ticketing data: Imported whitelist IDs and batch scan results are processed locally. Whitelist IDs are kept in memory for the current app session and are not uploaded by the app.
|
||||
|
||||
## How Data Is Used
|
||||
|
||||
Data is used to scan codes, show scan results, provide local security warnings, support optional local history, support event and ticketing workflows, and run actions that you choose.
|
||||
|
||||
## Data Collection and Sharing
|
||||
|
||||
Private QR Scanner does not create accounts, show ads, use analytics, use tracking SDKs, use crash reporting SDKs, or send app data to a developer backend. The app does not request the Android Internet permission.
|
||||
|
||||
The developer does not receive, collect, sell, or share your scanned content, selected images, history, settings, or whitelist data.
|
||||
|
||||
Data can leave your device only when you choose an Android or third-party action, such as Open, Share, Call, SMS, Email, Add contact, Add calendar event, Wi-Fi settings, or Google Play review. Those actions are handled by Android, Google Play, or the app or service you choose, and their privacy practices apply.
|
||||
|
||||
## Storage, Retention, and Deletion
|
||||
|
||||
Optional scan history and settings are stored in app-private storage on your device. Android app backup is disabled for this app.
|
||||
|
||||
Scan history remains on your device until you delete individual entries, delete all history, turn history off and choose to delete existing history, clear the app data, or uninstall the app.
|
||||
|
||||
Settings remain on your device until you change them, clear the app data, or uninstall the app.
|
||||
|
||||
Camera frames, selected images, imported whitelist IDs, and batch scan results are not retained by the app after the active use or app session ends, unless the resulting scanned content is saved to local history because you enabled that setting.
|
||||
|
||||
## Security
|
||||
|
||||
The app relies on Android app-private storage and Android permission controls. Keep your device screen lock and operating system security updates enabled to protect local data.
|
||||
|
||||
## Children
|
||||
|
||||
The app is not directed to children and does not knowingly collect personal data from anyone.
|
||||
|
||||
## Changes
|
||||
|
||||
If this policy changes, the updated policy will be included in the app and in the public policy copy for the app.
|
||||
|
||||
## Contact
|
||||
|
||||
For privacy questions or deletion requests about data that may have been sent through an external action you chose, contact the relevant external service. For questions about this app, contact SoftwareApp-HB at softwareapp.hb@gmail.com.
|
||||
@@ -23,6 +23,7 @@ Offline-first, ad-free QR/barcode scanner built with Kotlin, Jetpack Compose, Ca
|
||||
- Keine Tracker/Analytics/Crashlytics
|
||||
- Kein Backend, keine Servercalls
|
||||
- Keine `INTERNET`-Permission im Manifest
|
||||
- Datenschutzerklärung in der App und als [PRIVACY_POLICY.md](PRIVACY_POLICY.md)
|
||||
|
||||
## MVP Features
|
||||
- Home: Scan-Button, lokaler Historie-Toggle (Default: OFF), Datenschutz-Dialog
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
<application
|
||||
tools:targetApi="33"
|
||||
android:name=".CleanScannerApp"
|
||||
android:allowBackup="true"
|
||||
android:allowBackup="false"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:localeConfig="@xml/locales_config"
|
||||
|
||||
@@ -7,7 +7,6 @@ import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.material3.AlertDialog
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Switch
|
||||
@@ -31,16 +30,7 @@ fun HomeScreen(
|
||||
val showPrivacyDialog = remember { mutableStateOf(false) }
|
||||
|
||||
if (showPrivacyDialog.value) {
|
||||
AlertDialog(
|
||||
onDismissRequest = { showPrivacyDialog.value = false },
|
||||
title = { Text(text = stringResource(R.string.privacy)) },
|
||||
text = { Text(text = stringResource(R.string.privacy_text)) },
|
||||
confirmButton = {
|
||||
TextButton(onClick = { showPrivacyDialog.value = false }) {
|
||||
Text(text = stringResource(R.string.confirm))
|
||||
}
|
||||
}
|
||||
)
|
||||
PrivacyPolicyDialog(onDismiss = { showPrivacyDialog.value = false })
|
||||
}
|
||||
|
||||
Column(
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
package de.softwareapp_hb.privateqrscanner.ui.screens
|
||||
|
||||
import androidx.compose.foundation.layout.heightIn
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.material3.AlertDialog
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.material3.TextButton
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalConfiguration
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import de.softwareapp_hb.privateqrscanner.R
|
||||
|
||||
@Composable
|
||||
fun PrivacyPolicyDialog(onDismiss: () -> Unit) {
|
||||
val context = LocalContext.current
|
||||
val configuration = LocalConfiguration.current
|
||||
val policyText = remember(context, configuration) {
|
||||
context.resources.openRawResource(R.raw.privacy_policy)
|
||||
.bufferedReader()
|
||||
.use { it.readText() }
|
||||
}
|
||||
|
||||
AlertDialog(
|
||||
onDismissRequest = onDismiss,
|
||||
title = { Text(text = stringResource(R.string.privacy_policy)) },
|
||||
text = {
|
||||
Text(
|
||||
text = policyText,
|
||||
modifier = Modifier
|
||||
.heightIn(max = 420.dp)
|
||||
.verticalScroll(rememberScrollState()),
|
||||
style = MaterialTheme.typography.bodyMedium
|
||||
)
|
||||
},
|
||||
confirmButton = {
|
||||
TextButton(onClick = onDismiss) {
|
||||
Text(text = stringResource(R.string.close))
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
@@ -36,6 +36,7 @@ fun SettingsScreen(
|
||||
val context = LocalContext.current
|
||||
val showDeleteConfirm = remember { mutableStateOf(false) }
|
||||
val showUseCasePicker = remember { mutableStateOf(false) }
|
||||
val showPrivacyPolicy = remember { mutableStateOf(false) }
|
||||
|
||||
if (showDeleteConfirm.value) {
|
||||
AlertDialog(
|
||||
@@ -85,6 +86,10 @@ fun SettingsScreen(
|
||||
)
|
||||
}
|
||||
|
||||
if (showPrivacyPolicy.value) {
|
||||
PrivacyPolicyDialog(onDismiss = { showPrivacyPolicy.value = false })
|
||||
}
|
||||
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.fillMaxSize()
|
||||
@@ -126,6 +131,9 @@ fun SettingsScreen(
|
||||
Text(text = stringResource(R.string.version))
|
||||
Text(text = stringResource(R.string.licenses))
|
||||
Text(text = stringResource(R.string.contact))
|
||||
TextButton(onClick = { showPrivacyPolicy.value = true }) {
|
||||
Text(text = stringResource(R.string.privacy_policy))
|
||||
}
|
||||
Spacer(modifier = Modifier.height(12.dp))
|
||||
TextButton(onClick = { InAppReviewRequester.requestReview(context) }) {
|
||||
Text(text = stringResource(R.string.review_app))
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
Datenschutzerklärung
|
||||
Stand: 10.05.2026
|
||||
|
||||
Private QR Scanner wird von SoftwareApp-HB bereitgestellt.
|
||||
Kontakt: softwareapp.hb@gmail.com
|
||||
|
||||
Diese Erklärung beschreibt, wie Private QR Scanner Daten auf deinem Gerät verarbeitet.
|
||||
|
||||
Worauf die App zugreift
|
||||
|
||||
Kamera: Die App nutzt die Kamera nur zum Scannen von QR-Codes und Barcodes. Kamerabilder werden auf deinem Gerät verarbeitet und nicht von der App gespeichert.
|
||||
|
||||
Ausgewählte Bilder: Wenn du ein Bild zum Scannen auswählst, liest die App dieses ausgewählte Bild nur zur Erkennung von QR-Codes oder Barcodes. Die App behält keine Kopie des Bildes.
|
||||
|
||||
Gescannte Inhalte: Die App zeigt gescannte Inhalte auf deinem Gerät an. Wenn du Historie speichern (lokal) aktivierst, werden gescannter Inhalt, Inhaltstyp und Scanzeit lokal auf deinem Gerät gespeichert. Die Historie ist standardmäßig ausgeschaltet.
|
||||
|
||||
Einstellungen: Die App speichert lokale Einstellungen, zum Beispiel ob Historie, Sicherheitswarnungen, Scan-Feedback und die gewählte Use-Case-Ansicht aktiviert sind.
|
||||
|
||||
Event- und Ticketdaten: Importierte Whitelist-IDs und Stapel-Scans werden lokal verarbeitet. Whitelist-IDs bleiben im Arbeitsspeicher der aktuellen App-Sitzung und werden von der App nicht hochgeladen.
|
||||
|
||||
Wie Daten genutzt werden
|
||||
|
||||
Daten werden genutzt, um Codes zu scannen, Scan-Ergebnisse anzuzeigen, lokale Sicherheitswarnungen bereitzustellen, die optionale lokale Historie zu ermöglichen, Event- und Ticketing-Abläufe zu unterstützen und von dir gewählte Aktionen auszuführen.
|
||||
|
||||
Datenerhebung und Weitergabe
|
||||
|
||||
Private QR Scanner erstellt keine Konten, zeigt keine Werbung, verwendet keine Analysefunktionen, nutzt keine Tracking-SDKs, nutzt keine Crash-Reporting-SDKs und sendet keine App-Daten an ein Entwickler-Backend. Die App fordert keine Android-Berechtigung für Internetzugriff an.
|
||||
|
||||
Der Entwickler erhält, erhebt, verkauft oder teilt keine gescannten Inhalte, ausgewählten Bilder, Historie, Einstellungen oder Whitelist-Daten.
|
||||
|
||||
Daten können dein Gerät nur verlassen, wenn du eine Android- oder Drittanbieteraktion auswählst, zum Beispiel Öffnen, Teilen, Anrufen, SMS, E-Mail, Kontakt hinzufügen, Kalendereintrag hinzufügen, WLAN-Einstellungen oder Google-Play-Bewertung. Diese Aktionen werden von Android, Google Play oder der von dir gewählten App beziehungsweise dem gewählten Dienst verarbeitet. Deren Datenschutzpraktiken gelten dann.
|
||||
|
||||
Speicherung, Aufbewahrung und Löschung
|
||||
|
||||
Optionale Scan-Historie und Einstellungen werden im privaten App-Speicher auf deinem Gerät gespeichert. Android-App-Backups sind für diese App deaktiviert.
|
||||
|
||||
Die Scan-Historie bleibt auf deinem Gerät, bis du einzelne Einträge löschst, die gesamte Historie löschst, die Historie deaktivierst und vorhandene Einträge löschen lässt, die App-Daten löschst oder die App deinstallierst.
|
||||
|
||||
Einstellungen bleiben auf deinem Gerät, bis du sie änderst, die App-Daten löschst oder die App deinstallierst.
|
||||
|
||||
Kamerabilder, ausgewählte Bilder, importierte Whitelist-IDs und Stapel-Scans werden von der App nach der aktiven Nutzung oder App-Sitzung nicht aufbewahrt, außer der daraus erkannte gescannte Inhalt wird in der lokalen Historie gespeichert, weil du diese Einstellung aktiviert hast.
|
||||
|
||||
Sicherheit
|
||||
|
||||
Die App nutzt den privaten App-Speicher und die Berechtigungssteuerung von Android. Nutze eine Gerätesperre und aktuelle Sicherheitsupdates deines Betriebssystems, um lokale Daten zu schützen.
|
||||
|
||||
Kinder
|
||||
|
||||
Die App richtet sich nicht an Kinder und erhebt wissentlich keine personenbezogenen Daten von Personen.
|
||||
|
||||
Änderungen
|
||||
|
||||
Wenn sich diese Erklärung ändert, wird die aktualisierte Erklärung in die App und in die öffentliche Kopie der Datenschutzerklärung aufgenommen.
|
||||
|
||||
Kontakt
|
||||
|
||||
Bei Datenschutzfragen oder Löschanfragen zu Daten, die durch eine von dir gewählte externe Aktion übertragen wurden, wende dich an den jeweiligen externen Dienst. Bei Fragen zu dieser App kontaktiere SoftwareApp-HB unter softwareapp.hb@gmail.com.
|
||||
@@ -0,0 +1,57 @@
|
||||
Privacy Policy
|
||||
Last updated: 2026-05-10
|
||||
|
||||
Private QR Scanner is provided by SoftwareApp-HB.
|
||||
Contact: softwareapp.hb@gmail.com
|
||||
|
||||
This policy explains how Private QR Scanner handles data on your device.
|
||||
|
||||
What the app accesses
|
||||
|
||||
Camera: The app uses the camera only to scan QR codes and barcodes. Camera frames are processed on your device and are not saved by the app.
|
||||
|
||||
Selected images: If you choose to scan from an image, the app reads that selected image only to detect QR codes or barcodes. The app does not keep a copy of the image.
|
||||
|
||||
Scanned content: The app displays scanned content on your device. If you enable Save history (local), the scanned content, content type, and scan time are stored locally on your device. History is off by default.
|
||||
|
||||
Settings: The app stores your local preferences, such as whether history, security warnings, scan feedback, and the selected use-case view are enabled.
|
||||
|
||||
Event and ticketing data: Imported whitelist IDs and batch scan results are processed locally. Whitelist IDs are kept in memory for the current app session and are not uploaded by the app.
|
||||
|
||||
How data is used
|
||||
|
||||
Data is used to scan codes, show scan results, provide local security warnings, support optional local history, support event and ticketing workflows, and run actions that you choose.
|
||||
|
||||
Data collection and sharing
|
||||
|
||||
Private QR Scanner does not create accounts, show ads, use analytics, use tracking SDKs, use crash reporting SDKs, or send app data to a developer backend. The app does not request the Android Internet permission.
|
||||
|
||||
The developer does not receive, collect, sell, or share your scanned content, selected images, history, settings, or whitelist data.
|
||||
|
||||
Data can leave your device only when you choose an Android or third-party action, such as Open, Share, Call, SMS, Email, Add contact, Add calendar event, Wi-Fi settings, or Google Play review. Those actions are handled by Android, Google Play, or the app or service you choose, and their privacy practices apply.
|
||||
|
||||
Storage, retention, and deletion
|
||||
|
||||
Optional scan history and settings are stored in app-private storage on your device. Android app backup is disabled for this app.
|
||||
|
||||
Scan history remains on your device until you delete individual entries, delete all history, turn history off and choose to delete existing history, clear the app data, or uninstall the app.
|
||||
|
||||
Settings remain on your device until you change them, clear the app data, or uninstall the app.
|
||||
|
||||
Camera frames, selected images, imported whitelist IDs, and batch scan results are not retained by the app after the active use or app session ends, unless the resulting scanned content is saved to local history because you enabled that setting.
|
||||
|
||||
Security
|
||||
|
||||
The app relies on Android app-private storage and Android permission controls. Keep your device screen lock and operating system security updates enabled to protect local data.
|
||||
|
||||
Children
|
||||
|
||||
The app is not directed to children and does not knowingly collect personal data from anyone.
|
||||
|
||||
Changes
|
||||
|
||||
If this policy changes, the updated policy will be included in the app and in the public policy copy for the app.
|
||||
|
||||
Contact
|
||||
|
||||
For privacy questions or deletion requests about data that may have been sent through an external action you chose, contact the relevant external service. For questions about this app, contact SoftwareApp-HB at softwareapp.hb@gmail.com.
|
||||
@@ -6,7 +6,8 @@
|
||||
<string name="settings">Einstellungen</string>
|
||||
<string name="save_history">Historie speichern (lokal)</string>
|
||||
<string name="privacy">Datenschutz</string>
|
||||
<string name="privacy_text">Keine Datenübertragung, keine Werbung, kein Tracking.</string>
|
||||
<string name="privacy_policy">Datenschutzerklärung</string>
|
||||
<string name="privacy_text">Lokale Verarbeitung, keine Werbung, kein Tracking. Details stehen in der Datenschutzerklärung.</string>
|
||||
<string name="security_warnings">Sicherheitswarnungen</string>
|
||||
<string name="scan_feedback">Scan-Feedback (Ton + Vibration)</string>
|
||||
<string name="about">Über</string>
|
||||
@@ -19,6 +20,7 @@
|
||||
<string name="delete_all">Alles löschen</string>
|
||||
<string name="confirm_delete_all">Alle Historie-Einträge löschen?</string>
|
||||
<string name="confirm">Bestätigen</string>
|
||||
<string name="close">Schließen</string>
|
||||
<string name="search">Suchen</string>
|
||||
<string name="flashlight">Taschenlampe</string>
|
||||
<string name="camera_permission_title">Kamerazugriff erforderlich</string>
|
||||
|
||||
@@ -6,7 +6,8 @@
|
||||
<string name="settings">Settings</string>
|
||||
<string name="save_history">Save history (local)</string>
|
||||
<string name="privacy">Privacy</string>
|
||||
<string name="privacy_text">No data transfer, no ads, no tracking.</string>
|
||||
<string name="privacy_policy">Privacy Policy</string>
|
||||
<string name="privacy_text">Local processing, no ads, no tracking. See the privacy policy for details.</string>
|
||||
<string name="security_warnings">Security warnings</string>
|
||||
<string name="scan_feedback">Scan feedback (beep + haptic)</string>
|
||||
<string name="about">About</string>
|
||||
@@ -19,6 +20,7 @@
|
||||
<string name="delete_all">Delete all</string>
|
||||
<string name="confirm_delete_all">Delete all history entries?</string>
|
||||
<string name="confirm">Confirm</string>
|
||||
<string name="close">Close</string>
|
||||
<string name="search">Search</string>
|
||||
<string name="flashlight">Flashlight</string>
|
||||
<string name="camera_permission_title">Camera access required</string>
|
||||
|
||||
Reference in New Issue
Block a user