From 2b61c48303d97917c1101c8d4df99013b3a8dd70 Mon Sep 17 00:00:00 2001 From: albexk Date: Sat, 20 Jan 2024 18:16:45 +0300 Subject: [PATCH] Hide "QR-code" button from config import menu for Android devices without camera --- client/android/src/org/amnezia/vpn/AmneziaActivity.kt | 4 ++++ client/platforms/android/android_controller.cpp | 5 +++++ client/platforms/android/android_controller.h | 1 + client/ui/controllers/settingsController.cpp | 11 +++++++++++ client/ui/controllers/settingsController.h | 2 ++ client/ui/qml/Pages2/PageSetupWizardConfigSource.qml | 4 ++-- 6 files changed, 25 insertions(+), 2 deletions(-) diff --git a/client/android/src/org/amnezia/vpn/AmneziaActivity.kt b/client/android/src/org/amnezia/vpn/AmneziaActivity.kt index 2ed2c7f7..3583a383 100644 --- a/client/android/src/org/amnezia/vpn/AmneziaActivity.kt +++ b/client/android/src/org/amnezia/vpn/AmneziaActivity.kt @@ -5,6 +5,7 @@ import android.content.Intent import android.content.Intent.EXTRA_MIME_TYPES import android.content.Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY import android.content.ServiceConnection +import android.content.pm.PackageManager import android.net.Uri import android.net.VpnService import android.os.Bundle @@ -418,6 +419,9 @@ class AmneziaActivity : QtActivity() { Log.v(TAG, "Set notification text") } + @Suppress("unused") + fun isCameraPresent(): Boolean = applicationContext.packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA) + @Suppress("unused") fun startQrCodeReader() { Log.v(TAG, "Start camera") diff --git a/client/platforms/android/android_controller.cpp b/client/platforms/android/android_controller.cpp index 5d442b81..767004fc 100644 --- a/client/platforms/android/android_controller.cpp +++ b/client/platforms/android/android_controller.cpp @@ -191,6 +191,11 @@ void AndroidController::setNotificationText(const QString &title, const QString (jint) timerSec); } +bool AndroidController::isCameraPresent() +{ + return callActivityMethod("isCameraPresent", "()Z"); +} + void AndroidController::startQrReaderActivity() { callActivityMethod("startQrCodeReader", "()V"); diff --git a/client/platforms/android/android_controller.h b/client/platforms/android/android_controller.h index 48044544..86b117f7 100644 --- a/client/platforms/android/android_controller.h +++ b/client/platforms/android/android_controller.h @@ -33,6 +33,7 @@ public: void setNotificationText(const QString &title, const QString &message, int timerSec); void saveFile(const QString &fileName, const QString &data); QString openFile(const QString &filter); + bool isCameraPresent(); void startQrReaderActivity(); void setSaveLogs(bool enabled); void exportLogsFile(const QString &fileName); diff --git a/client/ui/controllers/settingsController.cpp b/client/ui/controllers/settingsController.cpp index 8ac4cca0..c7306a10 100644 --- a/client/ui/controllers/settingsController.cpp +++ b/client/ui/controllers/settingsController.cpp @@ -206,3 +206,14 @@ void SettingsController::toggleScreenshotsEnabled(bool enable) }); #endif } + +bool SettingsController::isCameraPresent() +{ +#if defined Q_OS_IOS + return true; +#elif defined Q_OS_ANDROID + return AndroidController::instance()->isCameraPresent(); +#else + return false; +#endif +} diff --git a/client/ui/controllers/settingsController.h b/client/ui/controllers/settingsController.h index a6cbc587..5b30b095 100644 --- a/client/ui/controllers/settingsController.h +++ b/client/ui/controllers/settingsController.h @@ -59,6 +59,8 @@ public slots: bool isScreenshotsEnabled(); void toggleScreenshotsEnabled(bool enable); + bool isCameraPresent(); + signals: void primaryDnsChanged(); void secondaryDnsChanged(); diff --git a/client/ui/qml/Pages2/PageSetupWizardConfigSource.qml b/client/ui/qml/Pages2/PageSetupWizardConfigSource.qml index 07189eb7..519aa6cc 100644 --- a/client/ui/qml/Pages2/PageSetupWizardConfigSource.qml +++ b/client/ui/qml/Pages2/PageSetupWizardConfigSource.qml @@ -90,7 +90,7 @@ It's okay as long as it's from someone you trust.") LabelWithButtonType { Layout.fillWidth: true - visible: GC.isMobile() + visible: SettingsController.isCameraPresent() text: qsTr("QR-code") rightImageSource: "qrc:/images/controls/chevron-right.svg" @@ -105,7 +105,7 @@ It's okay as long as it's from someone you trust.") } DividerType { - visible: GC.isMobile() + visible: SettingsController.isCameraPresent() } LabelWithButtonType {