diff options
author | Andy Nichols <andy.nichols@digia.com> | 2014-03-19 16:24:20 +0100 |
---|---|---|
committer | Eskil Abrahamsen-Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com> | 2014-03-20 10:09:47 +0200 |
commit | df7f5181256dc70becd6dda3c603688edce6fb57 (patch) | |
tree | 4e1474f65af2960da03d3d99771212ec9bbd8895 | |
parent | 9b47ca9690b6a61f7f74cc044962992323cb5be7 (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>
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; |