Skip to content

Commit f9ccbeb

Browse files
committed
Add sponsor and source code buttons
Close #104.
1 parent c2881f5 commit f9ccbeb

File tree

6 files changed

+56
-0
lines changed

6 files changed

+56
-0
lines changed

app/src/main/java/io/github/chrisimx/scanbridge/AppSettingsScreen.kt

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,22 @@ import androidx.compose.foundation.layout.Box
2727
import androidx.compose.foundation.layout.Column
2828
import androidx.compose.foundation.layout.ExperimentalLayoutApi
2929
import androidx.compose.foundation.layout.PaddingValues
30+
import androidx.compose.foundation.layout.Row
3031
import androidx.compose.foundation.layout.fillMaxSize
3132
import androidx.compose.foundation.layout.fillMaxWidth
3233
import androidx.compose.foundation.layout.padding
3334
import androidx.compose.foundation.rememberScrollState
3435
import androidx.compose.foundation.selection.toggleable
3536
import androidx.compose.foundation.verticalScroll
37+
import androidx.compose.material3.Button
38+
import androidx.compose.material3.ButtonDefaults
3639
import androidx.compose.material3.Checkbox
3740
import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
3841
import androidx.compose.material3.HorizontalDivider
42+
import androidx.compose.material3.Icon
3943
import androidx.compose.material3.MaterialTheme
4044
import androidx.compose.material3.OutlinedButton
45+
import androidx.compose.material3.OutlinedIconButton
4146
import androidx.compose.material3.Text
4247
import androidx.compose.runtime.Composable
4348
import androidx.compose.runtime.getValue
@@ -46,13 +51,16 @@ import androidx.compose.runtime.remember
4651
import androidx.compose.runtime.setValue
4752
import androidx.compose.ui.Alignment
4853
import androidx.compose.ui.Modifier
54+
import androidx.compose.ui.graphics.Color
4955
import androidx.compose.ui.platform.LocalContext
56+
import androidx.compose.ui.res.painterResource
5057
import androidx.compose.ui.res.stringResource
5158
import androidx.compose.ui.semantics.Role
5259
import androidx.compose.ui.unit.dp
5360
import androidx.constraintlayout.compose.ConstraintLayout
5461
import androidx.constraintlayout.compose.Dimension
5562
import androidx.core.content.edit
63+
import androidx.core.net.toUri
5664
import io.github.chrisimx.scanbridge.logs.FileLogger
5765
import io.github.chrisimx.scanbridge.uicomponents.TitledCard
5866
import io.github.chrisimx.scanbridge.uicomponents.dialog.SimpleTextDialog
@@ -258,6 +266,33 @@ fun AppSettingsScreen(innerPadding: PaddingValues) {
258266
) {
259267
VersionComposable()
260268

269+
Row(modifier = Modifier.padding(vertical = 16.dp), verticalAlignment = Alignment.CenterVertically) {
270+
Button(
271+
modifier = Modifier.padding(horizontal = 8.dp),
272+
onClick = {
273+
val intent = Intent(Intent.ACTION_VIEW, "https://github.com/sponsors/Chrisimx".toUri())
274+
context.startActivity(intent)
275+
},
276+
colors = ButtonDefaults.buttonColors(
277+
containerColor = Color(0xFFFF6F61),
278+
contentColor = Color.White
279+
)
280+
) {
281+
Icon(
282+
modifier = Modifier.padding(end = 8.dp),
283+
painter = painterResource(R.drawable.favorite_24px),
284+
contentDescription = stringResource(R.string.donate)
285+
)
286+
Text(stringResource(R.string.donate))
287+
}
288+
OutlinedIconButton(onClick = {
289+
val intent = Intent(Intent.ACTION_VIEW, "https://github.com/Chrisimx/ScanBridge".toUri())
290+
context.startActivity(intent)
291+
}) {
292+
Icon(painterResource(R.drawable.github_mark), contentDescription = stringResource(R.string.source_code))
293+
}
294+
}
295+
261296
HorizontalDivider(modifier = Modifier.padding(14.dp))
262297

263298
var information: String? by remember {
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
2+
android:width="24dp"
3+
android:height="24dp"
4+
android:viewportWidth="960"
5+
android:viewportHeight="960"
6+
android:tint="#D30E40">
7+
<path
8+
android:fillColor="@android:color/white"
9+
android:pathData="M480,840L422,788Q321,697 255,631Q189,565 150,512.5Q111,460 95.5,416Q80,372 80,326Q80,232 143,169Q206,106 300,106Q352,106 399,128Q446,150 480,190Q514,150 561,128Q608,106 660,106Q754,106 817,169Q880,232 880,326Q880,372 864.5,416Q849,460 810,512.5Q771,565 705,631Q639,697 538,788L480,840ZM480,732Q576,646 638,584.5Q700,523 736,477.5Q772,432 786,396.5Q800,361 800,326Q800,266 760,226Q720,186 660,186Q613,186 573,212.5Q533,239 518,280L518,280L442,280L442,280Q427,239 387,212.5Q347,186 300,186Q240,186 200,226Q160,266 160,326Q160,361 174,396.5Q188,432 224,477.5Q260,523 322,584.5Q384,646 480,732ZM480,459Q480,459 480,459Q480,459 480,459Q480,459 480,459Q480,459 480,459Q480,459 480,459Q480,459 480,459Q480,459 480,459Q480,459 480,459L480,459L480,459L480,459Q480,459 480,459Q480,459 480,459Q480,459 480,459Q480,459 480,459Q480,459 480,459Q480,459 480,459Q480,459 480,459Q480,459 480,459Z"/>
10+
</vector>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="23.5dp" android:viewportHeight="96" android:viewportWidth="98" android:width="23.989584dp">
2+
3+
<path android:fillColor="#24292f" android:fillType="evenOdd" android:pathData="M48.854,0C21.839,0 0,22 0,49.217c0,21.756 13.993,40.172 33.405,46.69 2.427,0.49 3.316,-1.059 3.316,-2.362 0,-1.141 -0.08,-5.052 -0.08,-9.127 -13.59,2.934 -16.42,-5.867 -16.42,-5.867 -2.184,-5.704 -5.42,-7.17 -5.42,-7.17 -4.448,-3.015 0.324,-3.015 0.324,-3.015 4.934,0.326 7.523,5.052 7.523,5.052 4.367,7.496 11.404,5.378 14.235,4.074 0.404,-3.178 1.699,-5.378 3.074,-6.6 -10.839,-1.141 -22.243,-5.378 -22.243,-24.283 0,-5.378 1.94,-9.778 5.014,-13.2 -0.485,-1.222 -2.184,-6.275 0.486,-13.038 0,0 4.125,-1.304 13.426,5.052a46.97,46.97 0,0 1,12.214 -1.63c4.125,0 8.33,0.571 12.213,1.63 9.302,-6.356 13.427,-5.052 13.427,-5.052 2.67,6.763 0.97,11.816 0.485,13.038 3.155,3.422 5.015,7.822 5.015,13.2 0,18.905 -11.404,23.06 -22.324,24.283 1.78,1.548 3.316,4.481 3.316,9.126 0,6.6 -0.08,11.897 -0.08,13.526 0,1.304 0.89,2.853 3.316,2.364 19.412,-6.52 33.405,-24.935 33.405,-46.691C97.707,22 75.788,0 48.854,0z"/>
4+
5+
</vector>

app/src/main/res/values-de/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,4 +95,6 @@
9595
<string name="disable_cert_checks_desc">Diese Einstellung deaktiviert alle Zertifikatsprüfungen bei HTTPS-Verbindungen. Jedes Zertifikat wird folglich akzeptiert, egal ob es ungültig oder selbstsigniert ist. Diese Einstellung sollte nicht in unsicheren Netwerken verwendet werden, denn durch sie wird ein Man-in-the-Middle-Angriff leicht durchführbar.\n\nIn den meisten Fällen werden Scanner in privaten Netzwerken oder über VPN-Verbindungen verwendet, wo Authentizität in der Regel keine große Rolle spielt. In solchen Umgebungen ist es unwahrscheinlich, dass das Deaktivieren der Zertifikatsprüfung ein echtes Sicherheitsrisiko darstellt. Und falls Vertraulichkeit oder Authentizität doch eine Rolle spielen, hilft selbst HTTPS nur begrenzt – denn eSCL bietet keinerlei Client-Authentifizierung. Jeder mit Netzwerkzugriff auf den Scanner kann potenziell auf gescannte Seiten zugreifen.</string>
9696
<string name="remember_scan_settings">Speichern der zuletzt verwendeten Scaneinstellungen</string>
9797
<string name="remember_scan_settings_desc">Wenn diese Option aktiviert ist, werden die zuletzt verwendeten Scaneinstellungen (z.B. Quelle, Duplex usw.) beim Erstellen einer neuen Scansitzung wiederhergestellt.\n\nWenn sie deaktiviert ist, beginnt jede Sitzung mit den standardmäßigen Scaneinstellungen (höchste Auflösung, größtmöglicher Scanbereich).</string>
98+
<string name="donate">Für ScanBridge spenden</string>
99+
<string name="source_code">Den Quellcode anschauen</string>
98100
</resources>

app/src/main/res/values-it/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,4 +94,6 @@
9494
<string name="disable_cert_checks_desc">Questa opzione disabilita la convalida di tutti i certificati HTTPS. Verrà accettato qualsiasi certificato, inclusi quelli autofirmati, scaduti o non validi. Non utilizzare questa opzione su reti pubbliche o non sicure, poiché rende possibili attacchi man-in-the-middle (MitM). Nella maggior parte dei casi, gli scanner vengono utilizzati su reti private o tramite connessioni VPN, dove le criticità sull\'autenticazione sono minime. In tali ambienti, è improbabile che la disabilitazione dei controlli dei certificati rappresenti un rischio reale per la sicurezza. E nel caso in cui la riservatezza o l\'autenticità siano un problema, anche HTTPS non sarà di grande aiuto, poiché eSCL non dispone di autenticazione client. Chiunque abbia accesso alla rete può potenzialmente recuperare le pagine scansionate.</string>
9595
<string name="remember_scan_settings">Ricorda le impostazioni di scansione</string>
9696
<string name="remember_scan_settings_desc">Se abilitata, quando si crea una nuova sessione di scansione verranno ripristinate le ultime impostazioni di scansione utilizzate (sorgente di input, duplex, ecc.). Se disabilitata, ogni sessione inizia con le impostazioni di scansione predefinite (massima risoluzione, area di scansione più ampia possibile).</string>
97+
<string name="donate">Dona a ScanBridge</string>
98+
<string name="source_code">Codice sorgente</string>
9799
</resources>

app/src/main/res/values/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,4 +95,6 @@
9595
<string name="disable_cert_checks_desc">This option disables all HTTPS certificate validation. Any certificate will be accepted, including self-signed, expired, or otherwise invalid ones. Do not use this option on insecure or public networks, as it makes man-in-the-middle (MitM) attacks possible.\n\nIn most cases, scanners are used on private networks or over VPN connections, where concerns about authenticity are minimal. In such environments, disabling certificate checks is unlikely to pose a real security risk. And in case confidentiality or authenticity is a concern, even HTTPS won\'t help much, as eSCL lacks client authentication altogether. Anyone with access to the network can potentially retrieve scanned pages.</string>
9696
<string name="remember_scan_settings">Remember scan settings</string>
9797
<string name="remember_scan_settings_desc">When enabled, your last used scan settings (input source, duplex, etc.) will be restored when you create a new scan session.\n\nWhen disabled, each session starts with default scan settings (highest resolution, largest possible scan area).</string>
98+
<string name="donate">Support ScanBridge\'s development</string>
99+
<string name="source_code">View source code</string>
98100
</resources>

0 commit comments

Comments
 (0)