Move Android Extras as private APIs under qtbase
To the option to users to use some needed APIs until we make them ready as proper cross-platform public APIs. Change-Id: I53006397463331ebae8314bf8a3a019474aec617 Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
This commit is contained in:
parent
75d8623752
commit
ee05af296f
@ -0,0 +1,69 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2017 BogDan Vatra <bogdan@kde.org>
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the Android port of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 3 requirements
|
||||
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 2.0 or (at your option) the GNU General
|
||||
** Public license version 3 or any later version approved by the KDE Free
|
||||
** Qt Foundation. The licenses are as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
|
||||
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
package org.qtproject.qt.android.extras;
|
||||
|
||||
import android.os.Binder;
|
||||
import android.os.Parcel;
|
||||
|
||||
public class QtAndroidBinder extends Binder
|
||||
{
|
||||
public QtAndroidBinder(long id)
|
||||
{
|
||||
m_id = id;
|
||||
}
|
||||
|
||||
public void setId(long id)
|
||||
{
|
||||
synchronized(this)
|
||||
{
|
||||
m_id = id;
|
||||
}
|
||||
}
|
||||
@Override
|
||||
protected boolean onTransact(int code, Parcel data, Parcel reply, int flags)
|
||||
{
|
||||
synchronized(this)
|
||||
{
|
||||
return QtNative.onTransact(m_id, code, data, reply, flags);
|
||||
}
|
||||
}
|
||||
|
||||
private long m_id;
|
||||
}
|
@ -0,0 +1,78 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2017 BogDan Vatra <bogdan@kde.org>
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the Android port of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 3 requirements
|
||||
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 2.0 or (at your option) the GNU General
|
||||
** Public license version 3 or any later version approved by the KDE Free
|
||||
** Qt Foundation. The licenses are as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
|
||||
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
package org.qtproject.qt.android.extras;
|
||||
|
||||
import android.content.ComponentName;
|
||||
import android.content.ServiceConnection;
|
||||
import android.os.IBinder;
|
||||
|
||||
public class QtAndroidServiceConnection implements ServiceConnection
|
||||
{
|
||||
public QtAndroidServiceConnection(long id)
|
||||
{
|
||||
m_id = id;
|
||||
}
|
||||
|
||||
public void setId(long id)
|
||||
{
|
||||
synchronized(this)
|
||||
{
|
||||
m_id = id;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onServiceConnected(ComponentName name, IBinder service)
|
||||
{
|
||||
synchronized(this) {
|
||||
QtNative.onServiceConnected(m_id, name.flattenToString(), service);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onServiceDisconnected(ComponentName name)
|
||||
{
|
||||
synchronized(this) {
|
||||
QtNative.onServiceDisconnected(m_id, name.flattenToString());
|
||||
}
|
||||
}
|
||||
|
||||
private long m_id;
|
||||
}
|
@ -0,0 +1,55 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2017 BogDan Vatra <bogdan@kde.org>
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the Android port of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 3 requirements
|
||||
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 2.0 or (at your option) the GNU General
|
||||
** Public license version 3 or any later version approved by the KDE Free
|
||||
** Qt Foundation. The licenses are as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
|
||||
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
package org.qtproject.qt.android.extras;
|
||||
|
||||
import android.content.ComponentName;
|
||||
import android.content.ServiceConnection;
|
||||
import android.os.IBinder;
|
||||
import android.os.Parcel;
|
||||
|
||||
public class QtNative {
|
||||
// Binder
|
||||
public static native boolean onTransact(long id, int code, Parcel data, Parcel reply, int flags);
|
||||
|
||||
|
||||
// ServiceConnection
|
||||
public static native void onServiceConnected(long id, String name, IBinder service);
|
||||
public static native void onServiceDisconnected(long id, String name);
|
||||
}
|
@ -983,6 +983,7 @@ qt_internal_extend_target(Core CONDITION ANDROID AND NOT ANDROID_EMBEDDED
|
||||
kernel/qjnienvironment.cpp kernel/qjnienvironment.h
|
||||
kernel/qjniobject.cpp kernel/qjniobject.h
|
||||
kernel/qjnihelpers.cpp kernel/qjnihelpers_p.h
|
||||
platform/android/qandroidextras_p.h platform/android/qandroidextras.cpp
|
||||
platform/android/qandroidnativeinterface.cpp
|
||||
)
|
||||
|
||||
|
1030
src/corelib/platform/android/qandroidextras.cpp
Normal file
1030
src/corelib/platform/android/qandroidextras.cpp
Normal file
File diff suppressed because it is too large
Load Diff
262
src/corelib/platform/android/qandroidextras_p.h
Normal file
262
src/corelib/platform/android/qandroidextras_p.h
Normal file
@ -0,0 +1,262 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2016 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the QtCore module of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 3 requirements
|
||||
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 2.0 or (at your option) the GNU General
|
||||
** Public license version 3 or any later version approved by the KDE Free
|
||||
** Qt Foundation. The licenses are as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
|
||||
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef QANDROIDEXTRAS_H
|
||||
#define QANDROIDEXTRAS_H
|
||||
|
||||
//
|
||||
// W A R N I N G
|
||||
// -------------
|
||||
//
|
||||
// This file is not part of the Qt API. It exists purely as an
|
||||
// implementation detail. This header file may change from version to
|
||||
// version without notice, or even be removed.
|
||||
//
|
||||
// We mean it.
|
||||
//
|
||||
|
||||
#include <jni.h>
|
||||
#include <functional>
|
||||
|
||||
#include <QtCore/private/qglobal_p.h>
|
||||
#include <QtCore/qjniobject.h>
|
||||
#include <QtCore/private/qjnihelpers_p.h>
|
||||
#include <QtCore/qcoreapplication.h>
|
||||
#include <QtCore/qmap.h>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
class QAndroidParcel;
|
||||
class QAndroidBinderPrivate;
|
||||
class QAndroidBinder;
|
||||
|
||||
class Q_CORE_EXPORT QAndroidBinder
|
||||
{
|
||||
public:
|
||||
enum class CallType {
|
||||
Normal = 0,
|
||||
OneWay = 1
|
||||
};
|
||||
|
||||
public:
|
||||
explicit QAndroidBinder();
|
||||
QAndroidBinder(const QJniObject &binder);
|
||||
|
||||
virtual ~QAndroidBinder();
|
||||
|
||||
virtual bool onTransact(int code, const QAndroidParcel &data,
|
||||
const QAndroidParcel &reply, CallType flags);
|
||||
bool transact(int code, const QAndroidParcel &data,
|
||||
QAndroidParcel *reply = nullptr, CallType flags = CallType::Normal) const;
|
||||
|
||||
QJniObject handle() const;
|
||||
|
||||
private:
|
||||
friend class QAndroidBinderPrivate;
|
||||
friend class QAndroidParcelPrivate;
|
||||
friend class QAndroidServicePrivate;
|
||||
QSharedPointer<QAndroidBinderPrivate> d;
|
||||
};
|
||||
|
||||
class QAndroidParcelPrivate;
|
||||
|
||||
class Q_CORE_EXPORT QAndroidParcel
|
||||
{
|
||||
public:
|
||||
QAndroidParcel();
|
||||
explicit QAndroidParcel(const QJniObject& parcel);
|
||||
virtual ~QAndroidParcel();
|
||||
|
||||
void writeData(const QByteArray &data) const;
|
||||
void writeVariant(const QVariant &value) const;
|
||||
void writeBinder(const QAndroidBinder &binder) const;
|
||||
void writeFileDescriptor(int fd) const;
|
||||
|
||||
QByteArray readData() const;
|
||||
QVariant readVariant() const;
|
||||
QAndroidBinder readBinder() const;
|
||||
int readFileDescriptor() const;
|
||||
|
||||
QJniObject handle() const;
|
||||
|
||||
private:
|
||||
friend class QAndroidParcelPrivate;
|
||||
friend class QAndroidBinder;
|
||||
QSharedPointer<QAndroidParcelPrivate> d;
|
||||
};
|
||||
|
||||
class QAndroidActivityResultReceiverPrivate;
|
||||
|
||||
class Q_CORE_EXPORT QAndroidActivityResultReceiver
|
||||
{
|
||||
public:
|
||||
QAndroidActivityResultReceiver();
|
||||
virtual ~QAndroidActivityResultReceiver();
|
||||
virtual void handleActivityResult(int receiverRequestCode, int resultCode,
|
||||
const QJniObject &data) = 0;
|
||||
|
||||
private:
|
||||
friend class QAndroidActivityResultReceiverPrivate;
|
||||
Q_DISABLE_COPY(QAndroidActivityResultReceiver)
|
||||
|
||||
QScopedPointer<QAndroidActivityResultReceiverPrivate> d;
|
||||
};
|
||||
|
||||
class Q_CORE_EXPORT QAndroidServiceConnection
|
||||
{
|
||||
public:
|
||||
QAndroidServiceConnection();
|
||||
explicit QAndroidServiceConnection(const QJniObject &serviceConnection);
|
||||
virtual ~QAndroidServiceConnection();
|
||||
|
||||
virtual void onServiceConnected(const QString &name,
|
||||
const QAndroidBinder &serviceBinder) = 0;
|
||||
virtual void onServiceDisconnected(const QString &name) = 0;
|
||||
|
||||
QJniObject handle() const;
|
||||
private:
|
||||
Q_DISABLE_COPY(QAndroidServiceConnection)
|
||||
QJniObject m_handle;
|
||||
};
|
||||
|
||||
class Q_CORE_EXPORT QAndroidIntent
|
||||
{
|
||||
public:
|
||||
QAndroidIntent();
|
||||
virtual ~QAndroidIntent();
|
||||
explicit QAndroidIntent(const QJniObject &intent);
|
||||
explicit QAndroidIntent(const QString &action);
|
||||
explicit QAndroidIntent(const QJniObject &packageContext, const char *className);
|
||||
|
||||
void putExtra(const QString &key, const QByteArray &data);
|
||||
QByteArray extraBytes(const QString &key);
|
||||
|
||||
void putExtra(const QString &key, const QVariant &value);
|
||||
QVariant extraVariant(const QString &key);
|
||||
|
||||
QJniObject handle() const;
|
||||
|
||||
private:
|
||||
QJniObject m_handle;
|
||||
};
|
||||
|
||||
class QAndroidServicePrivate;
|
||||
|
||||
class Q_CORE_EXPORT QAndroidService : public QCoreApplication
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
QAndroidService(int &argc, char **argv
|
||||
#ifndef Q_QDOC
|
||||
, int flags = ApplicationFlags
|
||||
#endif
|
||||
);
|
||||
QAndroidService(int &argc, char **argv,
|
||||
const std::function<QAndroidBinder*(const QAndroidIntent &intent)> & binder
|
||||
#ifndef Q_QDOC
|
||||
, int flags = ApplicationFlags
|
||||
#endif
|
||||
);
|
||||
virtual ~QAndroidService();
|
||||
|
||||
virtual QAndroidBinder* onBind(const QAndroidIntent &intent);
|
||||
|
||||
private:
|
||||
friend class QAndroidServicePrivate;
|
||||
Q_DISABLE_COPY(QAndroidService)
|
||||
|
||||
QScopedPointer<QAndroidServicePrivate> d;
|
||||
};
|
||||
|
||||
class QAndroidActivityCallbackResultReceiver: public QAndroidActivityResultReceiver
|
||||
{
|
||||
public:
|
||||
QAndroidActivityCallbackResultReceiver();
|
||||
void handleActivityResult(int receiverRequestCode, int resultCode,
|
||||
const QJniObject &intent) override;
|
||||
void registerCallback(int receiverRequestCode,
|
||||
std::function<void(int, int, const QJniObject &)> callbackFunc);
|
||||
|
||||
static QAndroidActivityCallbackResultReceiver *instance();
|
||||
private:
|
||||
QMap<int, std::function<void(int, int, const QJniObject &data)>> callbackMap;
|
||||
|
||||
static QAndroidActivityCallbackResultReceiver *s_instance;
|
||||
};
|
||||
|
||||
namespace QtAndroidPrivate
|
||||
{
|
||||
Q_CORE_EXPORT void startIntentSender(const QJniObject &intentSender,
|
||||
int receiverRequestCode,
|
||||
QAndroidActivityResultReceiver *resultReceiver = nullptr);
|
||||
Q_CORE_EXPORT void startActivity(const QJniObject &intent,
|
||||
int receiverRequestCode,
|
||||
QAndroidActivityResultReceiver *resultReceiver = nullptr);
|
||||
Q_CORE_EXPORT void startActivity(const QAndroidIntent &intent,
|
||||
int receiverRequestCode,
|
||||
QAndroidActivityResultReceiver *resultReceiver = nullptr);
|
||||
Q_CORE_EXPORT void startActivity(const QJniObject &intent,
|
||||
int receiverRequestCode,
|
||||
std::function<void(int, int, const QJniObject &data)>
|
||||
callbackFunc);
|
||||
|
||||
enum class BindFlag {
|
||||
None = 0x00000000,
|
||||
AutoCreate = 0x00000001,
|
||||
DebugUnbind = 0x00000002,
|
||||
NotForeground = 0x00000004,
|
||||
AboveClient = 0x00000008,
|
||||
AllowOomManagement = 0x00000010,
|
||||
WaivePriority = 0x00000020,
|
||||
Important = 0x00000040,
|
||||
AdjustWithActivity = 0x00000080,
|
||||
ExternalService = -2147483648 // 0x80000000
|
||||
|
||||
};
|
||||
Q_DECLARE_FLAGS(BindFlags, BindFlag)
|
||||
|
||||
Q_CORE_EXPORT bool bindService(const QAndroidIntent &serviceIntent,
|
||||
const QAndroidServiceConnection &serviceConnection,
|
||||
BindFlags flags = BindFlag::None);
|
||||
}
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
#endif // QANDROIDEXTRAS_H
|
Loading…
Reference in New Issue
Block a user