Fix of copying to clipboard

This commit is contained in:
Dmitriy Karpushin 2023-03-17 16:53:02 +03:00
parent 8d45af2034
commit c0bb06bf49
6 changed files with 37 additions and 1 deletions

View file

@ -5,6 +5,8 @@
package org.amnezia.vpn.qt; package org.amnezia.vpn.qt;
import android.Manifest import android.Manifest
import android.content.ClipData
import android.content.ClipboardManager
import android.content.ComponentName import android.content.ComponentName
import android.content.ContentResolver import android.content.ContentResolver
import android.content.Context import android.content.Context
@ -63,6 +65,10 @@ class VPNActivity : org.qtproject.qt.android.bindings.QtActivity() {
@JvmStatic fun saveFileAs(fileContent: String, suggestedName: String) { @JvmStatic fun saveFileAs(fileContent: String, suggestedName: String) {
VPNActivity.getInstance().saveFile(fileContent, suggestedName) VPNActivity.getInstance().saveFile(fileContent, suggestedName)
} }
@JvmStatic fun putTextToClipboard(text: String) {
VPNActivity.getInstance().putToClipboard(text)
}
} }
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
@ -370,4 +376,15 @@ class VPNActivity : org.qtproject.qt.android.bindings.QtActivity() {
tmpFileContentToSave = "" tmpFileContentToSave = ""
} }
private fun putToClipboard(text: String) {
this.runOnUiThread {
val clipboard = applicationContext.getSystemService(CLIPBOARD_SERVICE) as ClipboardManager?
if (clipboard != null) {
val clip: ClipData = ClipData.newPlainText("", text)
clipboard.setPrimaryClip(clip)
}
}
}
} }

View file

@ -15,6 +15,7 @@
#include "private/qandroidextras_p.h" #include "private/qandroidextras_p.h"
#include "ui/pages_logic/StartPageLogic.h" #include "ui/pages_logic/StartPageLogic.h"
#include "androidvpnactivity.h"
#include "androidutils.h" #include "androidutils.h"
namespace { namespace {
@ -267,6 +268,11 @@ void AndroidController::startQrReaderActivity()
AndroidVPNActivity::instance()->startQrCodeReader(); AndroidVPNActivity::instance()->startQrCodeReader();
} }
void AndroidController::copyTextToClipboard(QString text)
{
AndroidVPNActivity::instance()->copyTextToClipboard(text);
}
void AndroidController::scheduleStatusCheckSlot() void AndroidController::scheduleStatusCheckSlot()
{ {
QTimer::singleShot(1000, [this]() { QTimer::singleShot(1000, [this]() {

View file

@ -11,7 +11,6 @@
#include "ui/pages_logic/StartPageLogic.h" #include "ui/pages_logic/StartPageLogic.h"
#include "protocols/vpnprotocol.h" #include "protocols/vpnprotocol.h"
#include "androidvpnactivity.h"
using namespace amnezia; using namespace amnezia;
@ -44,6 +43,7 @@ public:
void setVpnConfig(const QJsonObject &newVpnConfig); void setVpnConfig(const QJsonObject &newVpnConfig);
void startQrReaderActivity(); void startQrReaderActivity();
void copyTextToClipboard(QString text);
signals: signals:
void connectionStateChanged(VpnProtocol::VpnConnectionState state); void connectionStateChanged(VpnProtocol::VpnConnectionState state);

View file

@ -65,6 +65,14 @@ void AndroidVPNActivity::saveFileAs(QString fileContent, QString suggestedFilena
QJniObject::fromString(suggestedFilename).object<jstring>()); QJniObject::fromString(suggestedFilename).object<jstring>());
} }
void AndroidVPNActivity::copyTextToClipboard(QString text)
{
QJniObject::callStaticMethod<void>(
CLASSNAME,
"putTextToClipboard", "(Ljava/lang/String;)V",
QJniObject::fromString(text).object<jstring>());
}
// static // static
AndroidVPNActivity* AndroidVPNActivity::instance() { AndroidVPNActivity* AndroidVPNActivity::instance() {
if (s_instance == nullptr) { if (s_instance == nullptr) {

View file

@ -76,6 +76,7 @@ public:
static void connectService(); static void connectService();
static void startQrCodeReader(); static void startQrCodeReader();
static void saveFileAs(QString fileContent, QString suggestedFilename); static void saveFileAs(QString fileContent, QString suggestedFilename);
static void copyTextToClipboard(QString text);
signals: signals:
void serviceConnected(); void serviceConnected();

View file

@ -474,7 +474,11 @@ void UiLogic::saveBinaryFile(const QString &desc, QString ext, const QString &da
void UiLogic::copyToClipboard(const QString &text) void UiLogic::copyToClipboard(const QString &text)
{ {
#ifdef Q_OS_ANDROID
AndroidController::instance()->copyTextToClipboard(text);
#elif
qApp->clipboard()->setText(text); qApp->clipboard()->setText(text);
#endif
} }
void UiLogic::shareTempFile(const QString &suggestedName, QString ext, const QString& data) { void UiLogic::shareTempFile(const QString &suggestedName, QString ext, const QString& data) {