diff --git a/vault-web/public/config.json b/vault-web/public/config.json
index 0c616c27..6d0289f6 100644
--- a/vault-web/public/config.json
+++ b/vault-web/public/config.json
@@ -3,5 +3,6 @@
"oauth2ClientId": "7ZEK2BNCEVYEJIZC5OR3TR6PQDUJ4NP3",
"oauth2ClientSecret": "VWTMENEWUYWH6G523CEV5CWOCHH7FMECW36PPQENOASYYZOQJOSGQXSR2Y62N3HB",
"appStoreUrl": "https://apps.apple.com/app/koofr-vault/id6468869124",
- "googlePlayUrl": "https://play.google.com/store/apps/details?id=net.koofr.vault"
+ "googlePlayUrl": "https://play.google.com/store/apps/details?id=net.koofr.vault",
+ "fDroidUrl": "https://f-droid.org/en/packages/net.koofr.vault/"
}
\ No newline at end of file
diff --git a/vault-web/src/assets/images/apps/f-droid.png b/vault-web/src/assets/images/apps/f-droid.png
new file mode 100644
index 00000000..60ffc6c9
Binary files /dev/null and b/vault-web/src/assets/images/apps/f-droid.png differ
diff --git a/vault-web/src/assets/images/apps/f-droid@2x.png b/vault-web/src/assets/images/apps/f-droid@2x.png
new file mode 100644
index 00000000..b69f985b
Binary files /dev/null and b/vault-web/src/assets/images/apps/f-droid@2x.png differ
diff --git a/vault-web/src/components/intro/IntroModal.tsx b/vault-web/src/components/intro/IntroModal.tsx
index 8a06875e..2c4a0ea6 100644
--- a/vault-web/src/components/intro/IntroModal.tsx
+++ b/vault-web/src/components/intro/IntroModal.tsx
@@ -10,13 +10,15 @@ import {
useState,
} from 'react';
+import appStoreImage from '../../assets/images/apps/app-store.png';
+import appStore2xImage from '../../assets/images/apps/app-store@2x.png';
+import fDroidImage from '../../assets/images/apps/f-droid.png';
+import fDroid2xImage from '../../assets/images/apps/f-droid@2x.png';
+import googlePlayImage from '../../assets/images/apps/google-play.png';
+import googlePlay2xImage from '../../assets/images/apps/google-play@2x.png';
import intro01Image from '../../assets/images/intro/intro-01.png';
import intro012xImage from '../../assets/images/intro/intro-01@2x.png';
import intro02Image from '../../assets/images/intro/intro-02.png';
-import googlePlayImage from '../../assets/images/apps/google-play.png';
-import googlePlay2xImage from '../../assets/images/apps/google-play@2x.png';
-import appStoreImage from '../../assets/images/apps/app-store.png';
-import appStore2xImage from '../../assets/images/apps/app-store@2x.png';
import intro022xImage from '../../assets/images/intro/intro-02@2x.png';
import intro03Image from '../../assets/images/intro/intro-03.png';
import intro032xImage from '../../assets/images/intro/intro-03@2x.png';
@@ -36,6 +38,7 @@ import introEndImage from '../../assets/images/intro/intro-end.png';
import introEnd2xImage from '../../assets/images/intro/intro-end@2x.png';
import introStartImage from '../../assets/images/intro/intro-start.png';
import introStart2xImage from '../../assets/images/intro/intro-start@2x.png';
+import { useConfig } from '../../config';
import { buttonStyle } from '../../styles/mixins/buttons';
import { imgRetinaBase } from '../../styles/mixins/images';
@@ -51,7 +54,6 @@ import {
ModalHeader,
ModalTitle,
} from '../modal/Modal';
-import { useConfig } from '../../config';
const introButtonColor = '#2286f7';
const introButtonColorHover = '#0870e6';
@@ -322,7 +324,8 @@ const IntroStep5 = memo(() => {
{config.appStoreUrl !== undefined ||
- config.googlePlayUrl !== undefined ? (
+ config.googlePlayUrl !== undefined ||
+ config.fDroidUrl !== undefined ? (
{
) : null}
{config.appStoreUrl !== undefined ? (
-
+
{
/>
) : null}
+
+ {config.fDroidUrl !== undefined ? (
+
+
+
+ ) : null}
) : null}
diff --git a/vault-web/src/config.ts b/vault-web/src/config.ts
index 41eaa7e4..89ef5e47 100644
--- a/vault-web/src/config.ts
+++ b/vault-web/src/config.ts
@@ -6,6 +6,7 @@ export interface Config {
oauth2ClientSecret: string;
appStoreUrl?: string;
googlePlayUrl?: string;
+ fDroidUrl?: string;
}
export async function loadConfig(): Promise {
diff --git a/vault-web/src/pages/LandingPageOfficial.tsx b/vault-web/src/pages/LandingPageOfficial.tsx
index 425305d0..29d359bb 100644
--- a/vault-web/src/pages/LandingPageOfficial.tsx
+++ b/vault-web/src/pages/LandingPageOfficial.tsx
@@ -3,14 +3,16 @@ import { css, cx } from '@emotion/css';
import { memo } from 'react';
import Typewriter from 'typewriter-effect';
+import appStoreImage from '../assets/images/apps/app-store.png';
+import appStore2xImage from '../assets/images/apps/app-store@2x.png';
+import fDroidImage from '../assets/images/apps/f-droid.png';
+import fDroid2xImage from '../assets/images/apps/f-droid@2x.png';
+import googlePlayImage from '../assets/images/apps/google-play.png';
+import googlePlay2xImage from '../assets/images/apps/google-play@2x.png';
import arrowDownImage from '../assets/images/landing/arrow-down.png';
import arrowDown2xImage from '../assets/images/landing/arrow-down@2x.png';
import arrowRightImage from '../assets/images/landing/arrow-right.png';
import arrowRight2xImage from '../assets/images/landing/arrow-right@2x.png';
-import googlePlayImage from '../assets/images/apps/google-play.png';
-import googlePlay2xImage from '../assets/images/apps/google-play@2x.png';
-import appStoreImage from '../assets/images/apps/app-store.png';
-import appStore2xImage from '../assets/images/apps/app-store@2x.png';
import graphic1Image from '../assets/images/landing/graphic-1.png';
import graphic12xImage from '../assets/images/landing/graphic-1@2x.png';
import graphic2Image from '../assets/images/landing/graphic-2.png';
@@ -38,10 +40,10 @@ import { BaseAnchorButton } from '../components/Button';
import { GitRelease } from '../components/GitRelease';
import { GitRevision } from '../components/GitRevision';
import { RetinaImage } from '../components/RetinaImage';
+import { useConfig } from '../config';
import { buttonStyle } from '../styles/mixins/buttons';
import { allStates } from '../styles/mixins/hover';
import { useDocumentTitle } from '../utils/useDocumentTitle';
-import { useConfig } from '../config';
const landingButtonStyle = buttonStyle(
'#1683fb',
@@ -314,7 +316,8 @@ export const LandingPageOfficial = memo(() => {
{config.appStoreUrl !== undefined ||
- config.googlePlayUrl !== undefined ? (
+ config.googlePlayUrl !== undefined ||
+ config.fDroidUrl !== undefined ? (
{
) : null}
{config.appStoreUrl !== undefined ? (
-
+
{
/>
) : null}
+
+ {config.fDroidUrl !== undefined ? (
+
+
+
+ ) : null}
) : null}
diff --git a/vault-web/src/pages/MobilePage.tsx b/vault-web/src/pages/MobilePage.tsx
index e0b98e9e..9e8f3f9d 100644
--- a/vault-web/src/pages/MobilePage.tsx
+++ b/vault-web/src/pages/MobilePage.tsx
@@ -4,6 +4,8 @@ import { useLocation } from 'react-router-dom';
import appStoreImage from '../assets/images/apps/app-store.png';
import appStore2xImage from '../assets/images/apps/app-store@2x.png';
+import fDroidImage from '../assets/images/apps/f-droid.png';
+import fDroid2xImage from '../assets/images/apps/f-droid@2x.png';
import googlePlayImage from '../assets/images/apps/google-play.png';
import googlePlay2xImage from '../assets/images/apps/google-play@2x.png';
import { LinkButton } from '../components/Button';
@@ -75,12 +77,13 @@ export const MobilePage = memo(() => {
{config.appStoreUrl !== undefined ||
- config.googlePlayUrl !== undefined ? (
+ config.googlePlayUrl !== undefined ||
+ config.fDroidUrl !== undefined ? (
{config.googlePlayUrl !== undefined ? (
@@ -89,7 +92,7 @@ export const MobilePage = memo(() => {
target="_blank"
rel="noreferrer"
className={css`
- margin-right: 20px;
+ margin-bottom: 15px;
`}
>
{
) : null}
{config.appStoreUrl !== undefined ? (
-
+
{
/>
) : null}
+
+ {config.fDroidUrl !== undefined ? (
+
+
+
+ ) : null}
) : null}