summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndy Nichols <andy.nichols@digia.com>2014-03-19 16:24:20 +0100
committerEskil Abrahamsen-Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>2014-03-20 10:09:47 +0200
commitdf7f5181256dc70becd6dda3c603688edce6fb57 (patch)
tree4e1474f65af2960da03d3d99771212ec9bbd8895
parent9b47ca9690b6a61f7f74cc044962992323cb5be7 (diff)
Add title and description properties to QInAppProduct
Includes backends for iOS and Android Change-Id: If2ae69537fae46d83c8a026582922cb791fb8608 Reviewed-by: Eskil Abrahamsen-Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
-rw-r--r--src/android/src/com/digia/qt5/android/purchasing/QtInAppPurchase.java16
-rw-r--r--src/imports/purchasing/qinappproductqmltype.cpp28
-rw-r--r--src/imports/purchasing/qinappproductqmltype_p.h6
-rw-r--r--src/purchasing/inapppurchase/android/qandroidinappproduct.cpp4
-rw-r--r--src/purchasing/inapppurchase/android/qandroidinappproduct_p.h2
-rw-r--r--src/purchasing/inapppurchase/android/qandroidinapppurchasebackend.cpp7
-rw-r--r--src/purchasing/inapppurchase/android/qandroidinapppurchasebackend_p.h4
-rw-r--r--src/purchasing/inapppurchase/android/qandroidjni.cpp8
-rw-r--r--src/purchasing/inapppurchase/ios/qiosinapppurchaseproduct.mm7
-rw-r--r--src/purchasing/inapppurchase/qinappproduct.cpp28
-rw-r--r--src/purchasing/inapppurchase/qinappproduct.h6
11 files changed, 101 insertions, 15 deletions
diff --git a/src/android/src/com/digia/qt5/android/purchasing/QtInAppPurchase.java b/src/android/src/com/digia/qt5/android/purchasing/QtInAppPurchase.java
index d3497bc..7916d62 100644
--- a/src/android/src/com/digia/qt5/android/purchasing/QtInAppPurchase.java
+++ b/src/android/src/com/digia/qt5/android/purchasing/QtInAppPurchase.java
@@ -250,10 +250,16 @@ public class QtInAppPurchase
JSONObject jo = new JSONObject(details);
String queriedProductId = jo.getString("productId");
String queriedPrice = jo.getString("price");
- if (queriedProductId == null || queriedPrice == null) {
+ String queriedTitle = jo.getString("title");
+ String queriedDescription = jo.getString("description");
+ if (queriedProductId == null || queriedPrice == null || queriedTitle == null || queriedDescription == null) {
Log.e(TAG, "Data missing from product details.");
} else if (productId.equals(queriedProductId)) {
- registerProduct(m_nativePointer, queriedProductId, queriedPrice);
+ registerProduct(m_nativePointer,
+ queriedProductId,
+ queriedPrice,
+ queriedTitle,
+ queriedDescription);
return;
}
} catch (JSONException e) {
@@ -400,7 +406,11 @@ public class QtInAppPurchase
private native static void queryFailed(long nativePointer, String productId);
private native static void purchasedProductsQueried(long nativePointer);
- private native static void registerProduct(long nativePointer, String productId, String price);
+ private native static void registerProduct(long nativePointer,
+ String productId,
+ String price,
+ String title,
+ String description);
private native static void purchaseFailed(long nativePointer, int requestCode, int failureReason, String errorString);
private native static void purchaseSucceeded(long nativePointer,
int requestCode,
diff --git a/src/imports/purchasing/qinappproductqmltype.cpp b/src/imports/purchasing/qinappproductqmltype.cpp
index d3ab8ff..06e1a00 100644
--- a/src/imports/purchasing/qinappproductqmltype.cpp
+++ b/src/imports/purchasing/qinappproductqmltype.cpp
@@ -215,15 +215,43 @@ QString QInAppProductQmlType::price() const
return m_product != 0 ? m_product->price() : QString();
}
+/*!
+ \qmlproperty string QtPurchasing::Product::title
+ This property holds the title of the product once it has been successfully queried from the
+ external market place. The title is localized if the external market place has defined a title
+ in the current users locale.
+*/
+QString QInAppProductQmlType::title() const
+{
+ return m_product != 0 ? m_product->title() : QString();
+}
+
+/*!
+ \qmlproperty string QtPurchasing::Product::description
+ This property holds the description of the product once it has been successfully queried from the
+ external market place. The title is localized if the external market place has defined a description
+ in the current users locale.
+*/
+QString QInAppProductQmlType::description() const
+{
+ return m_product != 0 ? m_product->description() : QString();
+}
+
void QInAppProductQmlType::setProduct(QInAppProduct *product)
{
if (m_product == product)
return;
QString oldPrice = price();
+ QString oldTitle = title();
+ QString oldDescription = description();
m_product = product;
if (price() != oldPrice)
emit priceChanged();
+ if (title() != oldTitle)
+ emit titleChanged();
+ if (description() != oldDescription)
+ emit descriptionChanged();
}
void QInAppProductQmlType::handleProductRegistered(QInAppProduct *product)
diff --git a/src/imports/purchasing/qinappproductqmltype_p.h b/src/imports/purchasing/qinappproductqmltype_p.h
index e6c3475..4cc0e02 100644
--- a/src/imports/purchasing/qinappproductqmltype_p.h
+++ b/src/imports/purchasing/qinappproductqmltype_p.h
@@ -35,6 +35,8 @@ class QInAppProductQmlType : public QObject, public QQmlParserStatus
Q_ENUMS(Status)
Q_PROPERTY(QString identifier READ identifier WRITE setIdentifier NOTIFY identifierChanged)
Q_PROPERTY(QString price READ price NOTIFY priceChanged)
+ Q_PROPERTY(QString title READ title NOTIFY titleChanged)
+ Q_PROPERTY(QString description READ description NOTIFY descriptionChanged)
Q_PROPERTY(Status status READ status NOTIFY statusChanged)
public:
enum Status {
@@ -54,6 +56,8 @@ public:
Status status() const;
QString price() const;
+ QString title() const;
+ QString description() const;
void setStore(QInAppStore *store);
@@ -64,6 +68,8 @@ Q_SIGNALS:
void identifierChanged();
void statusChanged();
void priceChanged();
+ void titleChanged();
+ void descriptionChanged();
protected:
void componentComplete();
diff --git a/src/purchasing/inapppurchase/android/qandroidinappproduct.cpp b/src/purchasing/inapppurchase/android/qandroidinappproduct.cpp
index 2d7aa34..faaa342 100644
--- a/src/purchasing/inapppurchase/android/qandroidinappproduct.cpp
+++ b/src/purchasing/inapppurchase/android/qandroidinappproduct.cpp
@@ -25,10 +25,12 @@ QT_BEGIN_NAMESPACE
QAndroidInAppProduct::QAndroidInAppProduct(QAndroidInAppPurchaseBackend *backend,
const QString &price,
+ const QString &title,
+ const QString &description,
ProductType productType,
const QString &identifier,
QObject *parent)
- : QInAppProduct(price, productType, identifier, parent)
+ : QInAppProduct(price, title, description, productType, identifier, parent)
, m_backend(backend)
{
}
diff --git a/src/purchasing/inapppurchase/android/qandroidinappproduct_p.h b/src/purchasing/inapppurchase/android/qandroidinappproduct_p.h
index b908388..02d6fe7 100644
--- a/src/purchasing/inapppurchase/android/qandroidinappproduct_p.h
+++ b/src/purchasing/inapppurchase/android/qandroidinappproduct_p.h
@@ -43,6 +43,8 @@ class QAndroidInAppProduct : public QInAppProduct
public:
explicit QAndroidInAppProduct(QAndroidInAppPurchaseBackend *backend,
const QString &price,
+ const QString &title,
+ const QString &description,
ProductType productType,
const QString &identifier,
QObject *parent = 0);
diff --git a/src/purchasing/inapppurchase/android/qandroidinapppurchasebackend.cpp b/src/purchasing/inapppurchase/android/qandroidinapppurchasebackend.cpp
index 68e8843..dcfcf3b 100644
--- a/src/purchasing/inapppurchase/android/qandroidinapppurchasebackend.cpp
+++ b/src/purchasing/inapppurchase/android/qandroidinapppurchasebackend.cpp
@@ -229,7 +229,10 @@ void QAndroidInAppPurchaseBackend::checkFinalizationStatus(QInAppProduct *produc
}
}
-void QAndroidInAppPurchaseBackend::registerProduct(const QString &productId, const QString &price)
+void QAndroidInAppPurchaseBackend::registerProduct(const QString &productId,
+ const QString &price,
+ const QString &title,
+ const QString &description)
{
#if defined(QANDROIDINAPPPURCHASEBACKEND_DEBUG)
qDebug("Registering product %s with price %s", qPrintable(productId), qPrintable(price));
@@ -239,7 +242,7 @@ void QAndroidInAppPurchaseBackend::registerProduct(const QString &productId, con
QHash<QString, QInAppProduct::ProductType>::iterator it = m_productTypeForPendingId.find(productId);
Q_ASSERT(it != m_productTypeForPendingId.end());
- QAndroidInAppProduct *product = new QAndroidInAppProduct(this, price, it.value(), it.key(), this);
+ QAndroidInAppProduct *product = new QAndroidInAppProduct(this, price, title, description, it.value(), it.key(), this);
checkFinalizationStatus(product);
emit productQueryDone(product);
diff --git a/src/purchasing/inapppurchase/android/qandroidinapppurchasebackend_p.h b/src/purchasing/inapppurchase/android/qandroidinapppurchasebackend_p.h
index 6729dbc..73190ef 100644
--- a/src/purchasing/inapppurchase/android/qandroidinapppurchasebackend_p.h
+++ b/src/purchasing/inapppurchase/android/qandroidinapppurchasebackend_p.h
@@ -68,7 +68,9 @@ public:
// Callbacks from Java
Q_INVOKABLE void registerQueryFailure(const QString &productId);
Q_INVOKABLE void registerProduct(const QString &productId,
- const QString &price);
+ const QString &price,
+ const QString &title,
+ const QString &description);
Q_INVOKABLE void registerPurchased(const QString &identifier,
const QString &signature,
const QString &data,
diff --git a/src/purchasing/inapppurchase/android/qandroidjni.cpp b/src/purchasing/inapppurchase/android/qandroidjni.cpp
index 0ec5728..5b69eff 100644
--- a/src/purchasing/inapppurchase/android/qandroidjni.cpp
+++ b/src/purchasing/inapppurchase/android/qandroidjni.cpp
@@ -43,14 +43,16 @@ static void purchasedProductsQueried(jclass, jlong nativePointer)
Qt::AutoConnection);
}
-static void registerProduct(jclass, jlong nativePointer, jstring productId, jstring price)
+static void registerProduct(jclass, jlong nativePointer, jstring productId, jstring price, jstring title, jstring description)
{
QAndroidInAppPurchaseBackend *backend = reinterpret_cast<QAndroidInAppPurchaseBackend *>(nativePointer);
QMetaObject::invokeMethod(backend,
"registerProduct",
Qt::AutoConnection,
Q_ARG(QString, QAndroidJniObject(productId).toString()),
- Q_ARG(QString, QAndroidJniObject(price).toString()));
+ Q_ARG(QString, QAndroidJniObject(price).toString()),
+ Q_ARG(QString, QAndroidJniObject(title).toString()),
+ Q_ARG(QString, QAndroidJniObject(description).toString()));
}
static void registerPurchased(jclass, jlong nativePointer, jstring identifier,
@@ -103,7 +105,7 @@ static void purchaseFailed(jclass, jlong nativePointer, jint requestCode, jint f
static JNINativeMethod methods[] = {
{"queryFailed", "(JLjava/lang/String;)V", (void *)queryFailed},
{"purchasedProductsQueried", "(J)V", (void *)purchasedProductsQueried},
- {"registerProduct", "(JLjava/lang/String;Ljava/lang/String;)V", (void *)registerProduct},
+ {"registerProduct", "(JLjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V", (void *)registerProduct},
{"registerPurchased", "(JLjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;J)V", (void *)registerPurchased},
{"purchaseSucceeded", "(JILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;J)V", (void *)purchaseSucceeded},
{"purchaseFailed", "(JIILjava/lang/String;)V", (void *)purchaseFailed}
diff --git a/src/purchasing/inapppurchase/ios/qiosinapppurchaseproduct.mm b/src/purchasing/inapppurchase/ios/qiosinapppurchaseproduct.mm
index 693ade2..be62219 100644
--- a/src/purchasing/inapppurchase/ios/qiosinapppurchaseproduct.mm
+++ b/src/purchasing/inapppurchase/ios/qiosinapppurchaseproduct.mm
@@ -50,7 +50,12 @@ QT_BEGIN_NAMESPACE
QIosInAppPurchaseProduct::QIosInAppPurchaseProduct(SKProduct *product,
ProductType productType,
QIosInAppPurchaseBackend *backend)
- : QInAppProduct(QString::fromNSString([product localizedPrice]), productType, QString::fromNSString([product productIdentifier]), backend)
+ : QInAppProduct(QString::fromNSString([product localizedPrice]),
+ QString::fromNSString([product localizedTitle]),
+ QString::fromNSString([product localizedDescription]),
+ productType,
+ QString::fromNSString([product productIdentifier]),
+ backend)
, m_nativeProduct(product)
{
}
diff --git a/src/purchasing/inapppurchase/qinappproduct.cpp b/src/purchasing/inapppurchase/qinappproduct.cpp
index e6ee858..18ae992 100644
--- a/src/purchasing/inapppurchase/qinappproduct.cpp
+++ b/src/purchasing/inapppurchase/qinappproduct.cpp
@@ -24,14 +24,18 @@ QT_BEGIN_NAMESPACE
struct QInAppProductPrivate
{
- QInAppProductPrivate(const QString &price, QInAppProduct::ProductType type, const QString &id)
+ QInAppProductPrivate(const QString &price, const QString &title, const QString &description, QInAppProduct::ProductType type, const QString &id)
: localPrice(price)
+ , localTitle(title)
+ , localDescription(description)
, productType(type)
, identifier(id)
{
}
QString localPrice;
+ QString localTitle;
+ QString localDescription;
QInAppProduct::ProductType productType;
QString identifier;
};
@@ -52,10 +56,10 @@ struct QInAppProductPrivate
/*!
* \internal
*/\
-QInAppProduct::QInAppProduct(const QString &price, ProductType productType, const QString &identifier, QObject *parent)
+QInAppProduct::QInAppProduct(const QString &price, const QString &title, const QString &description, ProductType productType, const QString &identifier, QObject *parent)
: QObject(parent)
{
- d = QSharedPointer<QInAppProductPrivate>(new QInAppProductPrivate(price, productType, identifier));
+ d = QSharedPointer<QInAppProductPrivate>(new QInAppProductPrivate(price, title, description, productType, identifier));
}
/*!
@@ -75,6 +79,24 @@ QString QInAppProduct::price() const
}
/*!
+ * Returns the title of the product as reported by the external store. This title is returned from the
+ * store in the locale language if available.
+ */
+QString QInAppProduct::title() const
+{
+ return d->localTitle;
+}
+
+/*!
+ * Returns the description of the product as reported by the external store. This description is returned
+ * from the store in the locale language if available.
+ */
+QString QInAppProduct::description() const
+{
+ return d->localDescription;
+}
+
+/*!
* Returns the identifier of the product. This matches the identifier of the product which is registered
* in the external store.
*/
diff --git a/src/purchasing/inapppurchase/qinappproduct.h b/src/purchasing/inapppurchase/qinappproduct.h
index a0ab2e2..722aa65 100644
--- a/src/purchasing/inapppurchase/qinappproduct.h
+++ b/src/purchasing/inapppurchase/qinappproduct.h
@@ -35,6 +35,8 @@ class Q_PURCHASING_EXPORT QInAppProduct: public QObject
Q_PROPERTY(QString identifier READ identifier CONSTANT)
Q_PROPERTY(ProductType productType READ productType CONSTANT)
Q_PROPERTY(QString price READ price CONSTANT)
+ Q_PROPERTY(QString title READ title CONSTANT)
+ Q_PROPERTY(QString description READ description CONSTANT)
public:
enum ProductType
@@ -49,11 +51,13 @@ public:
ProductType productType() const;
QString price() const;
+ QString title() const;
+ QString description() const;
Q_INVOKABLE virtual void purchase() = 0;
protected:
- explicit QInAppProduct(const QString &price, ProductType productType, const QString &identifier, QObject *parent = 0);
+ explicit QInAppProduct(const QString &price, const QString &title, const QString &description, ProductType productType, const QString &identifier, QObject *parent = 0);
private:
friend class QInAppStore;