Krita Source Code Documentation
Loading...
Searching...
No Matches
KisAndroidDonations Class Reference

#include <KisAndroidDonations.h>

+ Inheritance diagram for KisAndroidDonations:

Public Types

enum class  State {
  Unknown = 0 , Checking = 1 , Unavailable = 2 , NoSupport = 3 ,
  Supporter = 4
}
 

Public Slots

void slotManageSubscription (const QString &productId)
 
void slotManageSubscriptions ()
 
void slotStartDonationFlow ()
 

Signals

void sigShowDonationManagementDialogRequested ()
 
void sigSplashDialogDismissed ()
 
void sigStateChanged ()
 
void sigStateUpdateReceived (int state, long long ownedProductFlags)
 

Public Member Functions

QVector< KisSupporterProductgetCurrentProducts () const
 
bool isShowDonationManagementDialogPending () const
 
void setShowDonationManagementDialogPending (bool pending)
 
bool shouldShowSupporterBadge () const
 
void startBillingFlowFor (const QString &productId, const QString &offerToken)
 
State state () const
 

Static Public Member Functions

static KisAndroidDonationsinstance ()
 
static void setLoaded (bool loaded)
 
static void setLoadingText (const QString &text)
 
static void showDonationDialog (bool splash)
 

Private Slots

void slotUpdateState (int state, long long ownedProductFlags)
 

Private Member Functions

bool isProductOwned (const QString &productId) const
 
 KisAndroidDonations (QObject *parent=nullptr)
 
void syncState ()
 

Private Attributes

long long m_ownedProductFlags {0L}
 
bool m_showDonationManagementDialogPending {false}
 
State m_state {State::Unknown}
 

Friends

class KisApplication
 

Detailed Description

Definition at line 14 of file KisAndroidDonations.h.

Member Enumeration Documentation

◆ State

enum class KisAndroidDonations::State
strong
Enumerator
Unknown 
Checking 
Unavailable 
NoSupport 
Supporter 

Definition at line 21 of file KisAndroidDonations.h.

21 {
22 // Initial or error state. Assume in-app purchases are unavailable.
23 Unknown = 0,
24 // The billing code is still checking whether any products are available
25 // and if the user owns any of them.
26 Checking = 1,
27 // In-app purchases are unavailable. This may be because of an
28 // unexpected error, but may also be an expected condition, e.g. because
29 // the user is running a debug or nightly build, which have a different
30 // package name and therefore no products assigned to them.
31 Unavailable = 2,
32 // User does not own any support products, but they could purchase one.
33 NoSupport = 3,
34 // User owns at least some kind of supporter product.
35 Supporter = 4,
36 };

Constructor & Destructor Documentation

◆ KisAndroidDonations()

KisAndroidDonations::KisAndroidDonations ( QObject * parent = nullptr)
explicitprivate

Definition at line 213 of file KisAndroidDonations.cpp.

214 : QObject(parent)
215{
216 // The state update can come from a different thread, so we'll use a queued connection.
217 connect(this,
219 this,
221 Qt::QueuedConnection);
222}
void slotUpdateState(int state, long long ownedProductFlags)
void sigStateUpdateReceived(int state, long long ownedProductFlags)

References sigStateUpdateReceived(), and slotUpdateState().

Member Function Documentation

◆ getCurrentProducts()

QVector< KisSupporterProduct > KisAndroidDonations::getCurrentProducts ( ) const

Definition at line 149 of file KisAndroidDonations.cpp.

150{
152 QAndroidJniObject currentProducts = QAndroidJniObject::callStaticObjectMethod("org/krita/android/DonationHelper",
153 "getCurrentProducts",
154 "()Ljava/util/List;");
155 jint size = currentProducts.callMethod<jint>("size", "()I");
156 products.reserve(size);
157 for (jint i = 0; i < size; ++i) {
158 QAndroidJniObject javaProduct = currentProducts.callObjectMethod("get", "(I)Ljava/lang/Object;", i);
159
160 products.append(KisSupporterProduct{
161 KisSupporterProductType(javaProduct.callMethod<jint>("getType", "()I")),
162 KisSupporterProductAvailability(javaProduct.callMethod<jint>("getAvailability", "()I")),
163 javaProduct.callObjectMethod("getId", "()Ljava/lang/String;").toString(),
164 javaProduct.callObjectMethod("getTitle", "()Ljava/lang/String;").toString(),
165 javaProduct.callObjectMethod("getDescription", "()Ljava/lang/String;").toString(),
166 getProductIcon(javaProduct),
167 javaProduct.callObjectMethod("getButtonText", "()Ljava/lang/String;").toString(),
168 javaProduct.callObjectMethod("getOfferToken", "()Ljava/lang/String;").toString(),
169 });
170 }
171 return products;
172}
enum KRITAUI_EXPORT KisSupporterProductAvailability
enum KRITAUI_EXPORT KisSupporterProductType
int size(const Forest< T > &forest)
Definition KisForest.h:1232

References KisSupporterProductAvailability, and KisSupporterProductType.

◆ instance()

KisAndroidDonations * KisAndroidDonations::instance ( )
static

Definition at line 72 of file KisAndroidDonations.cpp.

73{
74 KisApplication *app = qobject_cast<KisApplication *>(KisApplication::instance());
75 if (app) {
76 return app->androidDonations();
77 } else {
78 return nullptr;
79 }
80}
Base class for the Krita app.

◆ isProductOwned()

bool KisAndroidDonations::isProductOwned ( const QString & productId) const
private

Definition at line 224 of file KisAndroidDonations.cpp.

225{
226 QAndroidJniObject productIdObject = QAndroidJniObject::fromString(productId);
227 return QAndroidJniObject::callStaticMethod<jboolean>("org/krita/android/DonationHelper",
228 "isProductOwned",
229 "(Ljava/lang/String;)B");
230}

◆ isShowDonationManagementDialogPending()

bool KisAndroidDonations::isShowDonationManagementDialogPending ( ) const
inline

Definition at line 44 of file KisAndroidDonations.h.

◆ setLoaded()

void KisAndroidDonations::setLoaded ( bool loaded)
static

Definition at line 82 of file KisAndroidDonations.cpp.

83{
84 QAndroidJniObject::callStaticMethod<void>("org/krita/android/MainActivity", "setLoaded", "(Z)V", jboolean(loaded));
85}

◆ setLoadingText()

void KisAndroidDonations::setLoadingText ( const QString & text)
static

Definition at line 87 of file KisAndroidDonations.cpp.

88{
89 QAndroidJniObject textObject = QAndroidJniObject::fromString(text);
90 QAndroidJniObject::callStaticMethod<void>("org/krita/android/MainActivity",
91 "setLoadingText",
92 "(Ljava/lang/String;)V",
93 textObject.object<jstring>());
94}

◆ setShowDonationManagementDialogPending()

void KisAndroidDonations::setShowDonationManagementDialogPending ( bool pending)

◆ shouldShowSupporterBadge()

bool KisAndroidDonations::shouldShowSupporterBadge ( ) const

Definition at line 134 of file KisAndroidDonations.cpp.

135{
136 return m_state == State::Supporter && isProductOwned(QStringLiteral("thankyoukiki"));
137}
bool isProductOwned(const QString &productId) const

References isProductOwned(), m_state, and Supporter.

◆ showDonationDialog()

void KisAndroidDonations::showDonationDialog ( bool splash)
static

Definition at line 96 of file KisAndroidDonations.cpp.

97{
98 QAndroidJniEnvironment env;
99 jbyteArray splashBytes = nullptr;
100 QString splashArtist;
101 if (splash) {
103 splashArtist = source.artistCredit;
104 QFile f(source.resourcePath);
105 if (f.open(QIODevice::ReadOnly)) {
106 QByteArray buf = f.readAll();
107 f.close();
108
109 jsize length = buf.size();
110 if (length > 0) {
111 splashBytes = env->NewByteArray(length);
112 env->SetByteArrayRegion(splashBytes, 0, length, reinterpret_cast<const jbyte *>(buf.constData()));
113 }
114 } else {
115 qWarning("Failed to read splash screen image from '%s': %s",
116 qUtf8Printable(source.resourcePath),
117 qUtf8Printable(f.errorString()));
118 }
119 }
120 QAndroidJniObject splashArtistObject = QAndroidJniObject::fromString(splashArtist);
121 QAndroidJniObject splashVersionObject = QAndroidJniObject::fromString(qApp->applicationVersion());
122 QAndroidJniObject::callStaticMethod<void>("org/krita/android/MainActivity",
123 "showDonationDialog",
124 "(Z[BLjava/lang/String;Ljava/lang/String;)V",
125 jboolean(splash),
126 splashBytes,
127 splashArtistObject.object(),
128 splashVersionObject.object());
129 if (splashBytes) {
130 env->DeleteLocalRef(splashBytes);
131 }
132}
qreal length(const QPointF &vec)
Definition Ellipse.cc:82
KisMagneticGraph::vertex_descriptor source(typename KisMagneticGraph::edge_descriptor e, KisMagneticGraph g)
static Source getImageSource()

References KisSplashScreen::getImageSource(), length(), and source().

◆ sigShowDonationManagementDialogRequested

void KisAndroidDonations::sigShowDonationManagementDialogRequested ( )
signal

◆ sigSplashDialogDismissed

void KisAndroidDonations::sigSplashDialogDismissed ( )
signal

◆ sigStateChanged

void KisAndroidDonations::sigStateChanged ( )
signal

◆ sigStateUpdateReceived

void KisAndroidDonations::sigStateUpdateReceived ( int state,
long long ownedProductFlags )
signal

◆ slotManageSubscription

void KisAndroidDonations::slotManageSubscription ( const QString & productId)
slot

Definition at line 195 of file KisAndroidDonations.cpp.

196{
197 QAndroidJniObject productIdObject = QAndroidJniObject::fromString(productId);
198 QAndroidJniObject::callStaticMethod<void>("org/krita/android/MainActivity",
199 "manageSubscription",
200 "(Ljava/lang/String;)V",
201 productIdObject.object<jstring>());
202}

◆ slotManageSubscriptions

void KisAndroidDonations::slotManageSubscriptions ( )
slot

Definition at line 190 of file KisAndroidDonations.cpp.

191{
192 QAndroidJniObject::callStaticMethod<void>("org/krita/android/MainActivity", "manageSubscriptions", "()V");
193}

◆ slotStartDonationFlow

void KisAndroidDonations::slotStartDonationFlow ( )
slot

Definition at line 185 of file KisAndroidDonations.cpp.

186{
187 showDonationDialog(false);
188}
static void showDonationDialog(bool splash)

References showDonationDialog().

◆ slotUpdateState

void KisAndroidDonations::slotUpdateState ( int state,
long long ownedProductFlags )
privateslot

Definition at line 204 of file KisAndroidDonations.cpp.

205{
206 if (int(m_state) != state || m_ownedProductFlags != ownedProductFlags) {
208 m_ownedProductFlags = ownedProductFlags;
209 Q_EMIT sigStateChanged();
210 }
211}

References m_ownedProductFlags, m_state, sigStateChanged(), and state().

◆ startBillingFlowFor()

void KisAndroidDonations::startBillingFlowFor ( const QString & productId,
const QString & offerToken )

Definition at line 174 of file KisAndroidDonations.cpp.

175{
176 QAndroidJniObject productIdObject = QAndroidJniObject::fromString(productId);
177 QAndroidJniObject offerTokenObject = QAndroidJniObject::fromString(offerToken);
178 QAndroidJniObject::callStaticMethod<void>("org/krita/android/DonationHelper",
179 "startBillingFlowForProductId",
180 "(Ljava/lang/String;Ljava/lang/String;)V",
181 productIdObject.object<jstring>(),
182 offerTokenObject.object<jstring>());
183}

◆ state()

State KisAndroidDonations::state ( ) const
inline

Definition at line 40 of file KisAndroidDonations.h.

40{ return m_state; }

◆ syncState()

void KisAndroidDonations::syncState ( )
private

Definition at line 232 of file KisAndroidDonations.cpp.

233{
234 QAndroidJniObject::callStaticMethod<void>("org/krita/android/DonationHelper", "syncState", "()V");
235}

Friends And Related Symbol Documentation

◆ KisApplication

friend class KisApplication
friend

Definition at line 17 of file KisAndroidDonations.h.

Member Data Documentation

◆ m_ownedProductFlags

long long KisAndroidDonations::m_ownedProductFlags {0L}
private

Definition at line 81 of file KisAndroidDonations.h.

81{0L};

◆ m_showDonationManagementDialogPending

bool KisAndroidDonations::m_showDonationManagementDialogPending {false}
private

Definition at line 82 of file KisAndroidDonations.h.

82{false};

◆ m_state

State KisAndroidDonations::m_state {State::Unknown}
private

Definition at line 80 of file KisAndroidDonations.h.


The documentation for this class was generated from the following files: