From e55c5f41dc37032ad84a7d9f1cc711b24f0ccf12 Mon Sep 17 00:00:00 2001 From: Licaon_Kter Date: Wed, 9 Feb 2022 17:09:38 +0200 Subject: [PATCH] Krita update --- metadata/org.krita.yml | 234 +++++++++++++++++++- metadata/org.krita/v5.0.2.patch | 369 ++++++++++++++++++++++++++++++++ 2 files changed, 592 insertions(+), 11 deletions(-) create mode 100644 metadata/org.krita/v5.0.2.patch diff --git a/metadata/org.krita.yml b/metadata/org.krita.yml index d541981476..3be8412c15 100644 --- a/metadata/org.krita.yml +++ b/metadata/org.krita.yml @@ -72,6 +72,56 @@ Builds: -p=apk ndk: r21d + - versionName: 5.0.2 + versionCode: 1050006 + commit: v5.0.2 + timeout: 30000 + sudo: + - find /opt/android-sdk/platforms -type d -mindepth 1 -maxdepth 1 -not -name + "android-28" -exec rm -rf {} \; + - apt-get update || apt-get update + - apt-get install -y build-essential + - apt-get install -y -t stretch-backports-sloppy libarchive13 + - apt-get install -y -t stretch-backports cmake + init: sed -i '/com.android.billingclient/d' packaging/android/apk/build.gradle + patch: + - v5.0.2.patch + output: build/krita_build_apk/build/outputs/apk/release/krita-armeabi-v7a-$$VERSION$$-release-unsigned.apk + scanignore: + - plugins/extensions/pykrita/plugin/krita/sceditor/rope.zip + - libs/flake/tests/data/store.zip + - libs/flake/tests/data/odf_frame_resource_store.zip + build: + - export DEP_COMMIT=3ce8590a94407ea17a6f3ce8d2772ea8a7e86075 + - export ANDROID_ABI=armeabi-v7a + - export BUILD_ROOT=$(pwd) + - export ANDROID_API_LEVEL=23 + - export CMAKE_ANDROID_NDK=$$NDK$$ + - export ANDROID_SDK_ROOT=$$SDK$$ + - export SUBDIR=${BUILD_ROOT}/packaging/android + - mkdir ${BUILD_ROOT}/build + - git reset --hard $DEP_COMMIT + - git apply 0001-fix-exiv2-url.patch + - echo 'gradle "$@"' > ${SUBDIR}/apk/gradlew + - ${SUBDIR}/androidbuild.sh --src=${BUILD_ROOT} --build-type=Release --build-root=${BUILD_ROOT}/build + -p=boost + - ${SUBDIR}/androidbuild.sh --src=${BUILD_ROOT} --build-type=Release --build-root=${BUILD_ROOT}/build + -p=qt + - ${SUBDIR}/androidbuild.sh --src=${BUILD_ROOT} --build-type=Release --build-root=${BUILD_ROOT}/build + -p=3rdparty + - ${SUBDIR}/androidbuild.sh --src=${BUILD_ROOT} --build-type=Release --build-root=${BUILD_ROOT}/build + -p=kf5 + - git reset --hard $$COMMIT$$ + - mkdir ${BUILD_ROOT}/po + - python3 ${BUILD_ROOT}/build-tools/copy_po.py + - git apply 0001-remove_billing.patch + - git apply 0002-restore_abi.patch + - ${SUBDIR}/androidbuild.sh --src=${BUILD_ROOT} --build-type=Release --build-root=${BUILD_ROOT}/build + -p=krita-bin + - ${SUBDIR}/androidbuild.sh --src=${BUILD_ROOT} --build-type=Release --build-root=${BUILD_ROOT}/build + -p=apk + ndk: r22b + - versionName: 4.4.2 versionCode: 2040404 commit: v4.4.2 @@ -117,6 +167,56 @@ Builds: -p=apk ndk: r21d + - versionName: 5.0.2 + versionCode: 2050006 + commit: v5.0.2 + timeout: 30000 + sudo: + - find /opt/android-sdk/platforms -type d -mindepth 1 -maxdepth 1 -not -name + "android-28" -exec rm -rf {} \; + - apt-get update || apt-get update + - apt-get install -y build-essential + - apt-get install -y -t stretch-backports-sloppy libarchive13 + - apt-get install -y -t stretch-backports cmake + init: sed -i '/com.android.billingclient/d' packaging/android/apk/build.gradle + patch: + - v5.0.2.patch + output: build/krita_build_apk/build/outputs/apk/release/krita-arm64-v8a-$$VERSION$$-release-unsigned.apk + scanignore: + - plugins/extensions/pykrita/plugin/krita/sceditor/rope.zip + - libs/flake/tests/data/store.zip + - libs/flake/tests/data/odf_frame_resource_store.zip + build: + - export DEP_COMMIT=3ce8590a94407ea17a6f3ce8d2772ea8a7e86075 + - export ANDROID_ABI=arm64-v8a + - export BUILD_ROOT=$(pwd) + - export ANDROID_API_LEVEL=23 + - export CMAKE_ANDROID_NDK=$$NDK$$ + - export ANDROID_SDK_ROOT=$$SDK$$ + - export SUBDIR=${BUILD_ROOT}/packaging/android + - mkdir ${BUILD_ROOT}/build + - git reset --hard $DEP_COMMIT + - git apply 0001-fix-exiv2-url.patch + - echo 'gradle "$@"' > ${SUBDIR}/apk/gradlew + - ${SUBDIR}/androidbuild.sh --src=${BUILD_ROOT} --build-type=Release --build-root=${BUILD_ROOT}/build + -p=boost + - ${SUBDIR}/androidbuild.sh --src=${BUILD_ROOT} --build-type=Release --build-root=${BUILD_ROOT}/build + -p=qt + - ${SUBDIR}/androidbuild.sh --src=${BUILD_ROOT} --build-type=Release --build-root=${BUILD_ROOT}/build + -p=3rdparty + - ${SUBDIR}/androidbuild.sh --src=${BUILD_ROOT} --build-type=Release --build-root=${BUILD_ROOT}/build + -p=kf5 + - git reset --hard $$COMMIT$$ + - mkdir ${BUILD_ROOT}/po + - python3 ${BUILD_ROOT}/build-tools/copy_po.py + - git apply 0001-remove_billing.patch + - git apply 0002-restore_abi.patch + - ${SUBDIR}/androidbuild.sh --src=${BUILD_ROOT} --build-type=Release --build-root=${BUILD_ROOT}/build + -p=krita-bin + - ${SUBDIR}/androidbuild.sh --src=${BUILD_ROOT} --build-type=Release --build-root=${BUILD_ROOT}/build + -p=apk + ndk: r22b + - versionName: 4.4.2 versionCode: 3040404 commit: v4.4.2 @@ -162,6 +262,56 @@ Builds: -p=apk ndk: r21d + - versionName: 5.0.2 + versionCode: 3050006 + commit: v5.0.2 + timeout: 30000 + sudo: + - find /opt/android-sdk/platforms -type d -mindepth 1 -maxdepth 1 -not -name + "android-28" -exec rm -rf {} \; + - apt-get update || apt-get update + - apt-get install -y build-essential + - apt-get install -y -t stretch-backports-sloppy libarchive13 + - apt-get install -y -t stretch-backports cmake + init: sed -i '/com.android.billingclient/d' packaging/android/apk/build.gradle + patch: + - v5.0.2.patch + output: build/krita_build_apk/build/outputs/apk/release/krita-x86-$$VERSION$$-release-unsigned.apk + scanignore: + - plugins/extensions/pykrita/plugin/krita/sceditor/rope.zip + - libs/flake/tests/data/store.zip + - libs/flake/tests/data/odf_frame_resource_store.zip + build: + - export DEP_COMMIT=7175ca9c9f4cea94cea11f6709a74e25f31ff137 + - export ANDROID_ABI=x86 + - export BUILD_ROOT=$(pwd) + - export ANDROID_API_LEVEL=23 + - export CMAKE_ANDROID_NDK=$$NDK$$ + - export ANDROID_SDK_ROOT=$$SDK$$ + - export SUBDIR=${BUILD_ROOT}/packaging/android + - mkdir ${BUILD_ROOT}/build + - git reset --hard $DEP_COMMIT + - git apply 0001-fix-exiv2-url.patch + - echo 'gradle "$@"' > ${SUBDIR}/apk/gradlew + - ${SUBDIR}/androidbuild.sh --src=${BUILD_ROOT} --build-type=Release --build-root=${BUILD_ROOT}/build + -p=boost + - ${SUBDIR}/androidbuild.sh --src=${BUILD_ROOT} --build-type=Release --build-root=${BUILD_ROOT}/build + -p=qt + - ${SUBDIR}/androidbuild.sh --src=${BUILD_ROOT} --build-type=Release --build-root=${BUILD_ROOT}/build + -p=3rdparty + - ${SUBDIR}/androidbuild.sh --src=${BUILD_ROOT} --build-type=Release --build-root=${BUILD_ROOT}/build + -p=kf5 + - git reset --hard $$COMMIT$$ + - mkdir ${BUILD_ROOT}/po + - python3 ${BUILD_ROOT}/build-tools/copy_po.py + - git apply 0001-remove_billing.patch + - git apply 0002-restore_abi.patch + - ${SUBDIR}/androidbuild.sh --src=${BUILD_ROOT} --build-type=Release --build-root=${BUILD_ROOT}/build + -p=krita-bin + - ${SUBDIR}/androidbuild.sh --src=${BUILD_ROOT} --build-type=Release --build-root=${BUILD_ROOT}/build + -p=apk + ndk: r22b + - versionName: 4.4.2 versionCode: 4040404 commit: v4.4.2 @@ -207,21 +357,83 @@ Builds: -p=apk ndk: r21d + - versionName: 5.0.2 + versionCode: 4050006 + commit: v5.0.2 + timeout: 30000 + sudo: + - find /opt/android-sdk/platforms -type d -mindepth 1 -maxdepth 1 -not -name + "android-28" -exec rm -rf {} \; + - apt-get update || apt-get update + - apt-get install -y build-essential + - apt-get install -y -t stretch-backports-sloppy libarchive13 + - apt-get install -y -t stretch-backports cmake + init: sed -i '/com.android.billingclient/d' packaging/android/apk/build.gradle + patch: + - v5.0.2.patch + output: build/krita_build_apk/build/outputs/apk/release/krita-x86_64-$$VERSION$$-release-unsigned.apk + scanignore: + - plugins/extensions/pykrita/plugin/krita/sceditor/rope.zip + - libs/flake/tests/data/store.zip + - libs/flake/tests/data/odf_frame_resource_store.zip + build: + - export DEP_COMMIT=3ce8590a94407ea17a6f3ce8d2772ea8a7e86075 + - export ANDROID_ABI=x86_64 + - export BUILD_ROOT=$(pwd) + - export ANDROID_API_LEVEL=23 + - export CMAKE_ANDROID_NDK=$$NDK$$ + - export ANDROID_SDK_ROOT=$$SDK$$ + - export SUBDIR=${BUILD_ROOT}/packaging/android + - mkdir ${BUILD_ROOT}/build + - git reset --hard $DEP_COMMIT + - git apply 0001-fix-exiv2-url.patch + - echo 'gradle "$@"' > ${SUBDIR}/apk/gradlew + - ${SUBDIR}/androidbuild.sh --src=${BUILD_ROOT} --build-type=Release --build-root=${BUILD_ROOT}/build + -p=boost + - ${SUBDIR}/androidbuild.sh --src=${BUILD_ROOT} --build-type=Release --build-root=${BUILD_ROOT}/build + -p=qt + - ${SUBDIR}/androidbuild.sh --src=${BUILD_ROOT} --build-type=Release --build-root=${BUILD_ROOT}/build + -p=3rdparty + - ${SUBDIR}/androidbuild.sh --src=${BUILD_ROOT} --build-type=Release --build-root=${BUILD_ROOT}/build + -p=kf5 + - git reset --hard $$COMMIT$$ + - mkdir ${BUILD_ROOT}/po + - python3 ${BUILD_ROOT}/build-tools/copy_po.py + - git apply 0001-remove_billing.patch + - git apply 0002-restore_abi.patch + - ${SUBDIR}/androidbuild.sh --src=${BUILD_ROOT} --build-type=Release --build-root=${BUILD_ROOT}/build + -p=krita-bin + - ${SUBDIR}/androidbuild.sh --src=${BUILD_ROOT} --build-type=Release --build-root=${BUILD_ROOT}/build + -p=apk + ndk: r22b + MaintainerNotes: |- - - Dependencies are built using different commit than the app itself. - - All google play donation code was added in 5e323fb7, remove_billing.patch is based on that commit. - - Compilation fails unless only SDK versions 21 and are present in SDK, so we're removing them. - - Patch at metadata/org.krita/remove_billing.patch actually creates another patch in project's - - Root dir since otherwise fdroid lint fails with unused file. - - New versions and exact commits for deps and app itself can be found on KDE jenkins: - - https://binary-factory.kde.org/job/Krita_Release_Android_arm64-v8a_Build - - https://binary-factory.kde.org/job/Krita_Android_arm64-v8a_Dependency_Build - - Version code schema, taken from build.gradle: + - (1) Compilation fails if older versions of the SDK are present, so we're + - removing unneeded ones. + - (2) Dependencies are built using a recent commit from the master branch. + - The exact commits and the logs for the deps and the app builds can be + - found on KDE jenkins: + - https://binary-factory.kde.org/job/Krita_Release_Android_arm64-v8a_Build + - https://binary-factory.kde.org/job/Krita_Android_arm64-v8a_Dependency_Build + - (3) Translations are downloaded as part of the release process. They are + - included in the release tarball, and the official builds are based upon it. + - We can add FETCH_TRANSLATIONS to the build options or just run copy_po.py + - before building krita. + - (4) Patches at metadata/org.krita/*.patch actually create another patches + - in the project's root directory, since otherwise fdroid lint fails with + - unused file. + - (5) All google play donation code was added in 5e323fb7 (for branch 4) + - and 23b73112 (for branch 5), and remove-billing patches are (loosely) + - based on those commits. + - (6) Starting from the commit b517d988, which went to the version 5, + - versionCode no longer depends on abi; we revert that with restore-abi + - patches. + - (7) Version code schema, taken from build.gradle: - project.ext.versionCodes = ['armeabi-v7a': 1, 'arm64-v8a': 2, 'x86': 3, 'x86_64': 4] - project.ext.versionCodes[abi] * 1000000 + versionMajor * 10000 + versionMinor * 100 + versionRelease ArchivePolicy: 12 versions AutoUpdateMode: None UpdateCheckMode: None -CurrentVersion: 4.4.2 -CurrentVersionCode: 4040404 +CurrentVersion: 5.0.2 +CurrentVersionCode: 2050006 diff --git a/metadata/org.krita/v5.0.2.patch b/metadata/org.krita/v5.0.2.patch new file mode 100644 index 0000000000..dd0cc115f6 --- /dev/null +++ b/metadata/org.krita/v5.0.2.patch @@ -0,0 +1,369 @@ +diff --git a/0001-fix-exiv2-url.patch b/0001-fix-exiv2-url.patch +new file mode 100644 +index 0000000..7f561b3 +--- /dev/null ++++ b/0001-fix-exiv2-url.patch +@@ -0,0 +1,22 @@ ++diff --git a/3rdparty/ext_exiv2/CMakeLists.txt b/3rdparty/ext_exiv2/CMakeLists.txt ++index 9f419ecc44..a87720df90 100644 ++--- a/3rdparty/ext_exiv2/CMakeLists.txt +++++ b/3rdparty/ext_exiv2/CMakeLists.txt ++@@ -3,7 +3,7 @@ SET(PREFIX_ext_exiv2 "${EXTPREFIX}" ) ++ if (ANDROID) ++ ExternalProject_Add( ext_exiv2 ++ DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} ++- URL https://exiv2.org/builds/exiv2-0.27.3-Source.tar.gz +++ URL https://github.com/Exiv2/exiv2/releases/download/v0.27.3/exiv2-0.27.3-Source.tar.gz ++ URL_HASH SHA256=a79f5613812aa21755d578a297874fb59a85101e793edc64ec2c6bd994e3e778 ++ ++ INSTALL_DIR ${PREFIX_ext_exiv2} ++@@ -28,7 +28,7 @@ elseif(WIN32) ++ ++ ExternalProject_Add( ext_exiv2 ++ DOWNLOAD_DIR ${EXTERNALS_DOWNLOAD_DIR} ++- URL https://exiv2.org/builds/exiv2-0.27.3-Source.tar.gz +++ URL https://github.com/Exiv2/exiv2/releases/download/v0.27.3/exiv2-0.27.3-Source.tar.gz ++ URL_HASH SHA256=a79f5613812aa21755d578a297874fb59a85101e793edc64ec2c6bd994e3e778 ++ ++ PATCH_COMMAND ${WINDOWS_PATCH_COMMAND} +diff --git a/0001-remove_billing.patch b/0001-remove_billing.patch +new file mode 100644 +index 0000000..ea0d0ac +--- /dev/null ++++ b/0001-remove_billing.patch +@@ -0,0 +1,307 @@ ++diff --git a/libs/ui/KisWelcomePageWidget.cpp b/libs/ui/KisWelcomePageWidget.cpp ++index c33d9b38f4..9e2ab1b297 100644 ++--- a/libs/ui/KisWelcomePageWidget.cpp +++++ b/libs/ui/KisWelcomePageWidget.cpp ++@@ -186,15 +186,8 @@ KisWelcomePageWidget::KisWelcomePageWidget(QWidget *parent) ++ ++ verticalLayout->addWidget(donationBannerImage); ++ ++- jboolean bannerPurchased = QAndroidJniObject::callStaticMethod("org/krita/android/DonationHelper", "isBadgePurchased", "()Z"); ++- if (bannerPurchased) { ++- donationLink->hide(); ++- donationBannerImage->show(); ++- QAndroidJniObject::callStaticMethod("org/krita/android/DonationHelper", "endConnection", "()V"); ++- } else { ++- donationLink->show(); ++- donationBannerImage->hide(); ++- } +++ donationLink->hide(); +++ donationBannerImage->hide(); ++ #endif ++ ++ ++@@ -419,7 +412,6 @@ void KisWelcomePageWidget::slotUpdateThemeColors() ++ #ifdef Q_OS_ANDROID ++ void KisWelcomePageWidget::slotStartDonationFlow() ++ { ++- QAndroidJniObject::callStaticMethod("org/krita/android/DonationHelper", "startBillingFlow", "()V"); ++ } ++ #endif ++ ++@@ -769,17 +761,6 @@ void KisWelcomePageWidget::updateVersionUpdaterFrame() ++ } ++ #endif ++ ++-#ifdef Q_OS_ANDROID ++-extern "C" JNIEXPORT void JNICALL ++-Java_org_krita_android_JNIWrappers_donationSuccessful(JNIEnv* /*env*/, ++- jobject /*obj*/, ++- jint /*n*/) ++-{ ++- KisWelcomePageWidget::donationLink->hide(); ++- KisWelcomePageWidget::donationBannerImage->show(); ++-} ++-#endif ++- ++ QFont KisWelcomePageWidget::largerFont() ++ { ++ QFont larger = font(); ++diff --git a/packaging/android/apk/AndroidManifest.xml b/packaging/android/apk/AndroidManifest.xml ++index e1991bf984..2d171aee3e 100644 ++--- a/packaging/android/apk/AndroidManifest.xml +++++ b/packaging/android/apk/AndroidManifest.xml ++@@ -161,6 +161,5 @@ ++ ++ ++ ++- ++ ++ ++diff --git a/packaging/android/apk/build.gradle b/packaging/android/apk/build.gradle ++index 8d4fef3ac0..a0d0b9eb17 100644 ++--- a/packaging/android/apk/build.gradle +++++ b/packaging/android/apk/build.gradle ++@@ -147,7 +147,3 @@ android { ++ configure.finalizedBy(removeDuplicateAssets) ++ } ++ ++-dependencies { ++- implementation 'com.android.billingclient:billing:3.0.3' ++-} ++- ++diff --git a/packaging/android/apk/res/values/strings.xml b/packaging/android/apk/res/values/strings.xml ++index 7ede48f146..c0586ad60e 100644 ++--- a/packaging/android/apk/res/values/strings.xml +++++ b/packaging/android/apk/res/values/strings.xml ++@@ -8,8 +8,6 @@ ++ Swipe Right ++ Circle Clockwise ++ Circle Counter-Clockwise ++- Something went wrong... ++- Cancelled ++ Saving Document ++ Cancel ++ ++diff --git a/packaging/android/apk/src/org/krita/android/DonationHelper.java b/packaging/android/apk/src/org/krita/android/DonationHelper.java ++deleted file mode 100644 ++index 5e05d31ee5..0000000000 ++--- a/packaging/android/apk/src/org/krita/android/DonationHelper.java +++++ /dev/null ++@@ -1,192 +0,0 @@ ++-/* ++- * This file is part of the KDE project ++- * SPDX-FileCopyrightText: 2020 Sharaf Zaman ++- * ++- * SPDX-License-Identifier: GPL-2.0-or-later ++- */ ++- ++-package org.krita.android; ++- ++-import android.util.Log; ++-import android.widget.Toast; ++- ++-import com.android.billingclient.api.AcknowledgePurchaseParams; ++-import com.android.billingclient.api.AcknowledgePurchaseResponseListener; ++-import com.android.billingclient.api.BillingClient; ++-import com.android.billingclient.api.BillingClientStateListener; ++-import com.android.billingclient.api.BillingFlowParams; ++-import com.android.billingclient.api.BillingResult; ++-import com.android.billingclient.api.Purchase; ++-import com.android.billingclient.api.PurchasesUpdatedListener; ++-import com.android.billingclient.api.SkuDetails; ++-import com.android.billingclient.api.SkuDetailsParams; ++-import com.android.billingclient.api.SkuDetailsResponseListener; ++- ++-import org.krita.R; ++-import org.qtproject.qt5.android.QtNative; ++- ++-import java.util.ArrayList; ++-import java.util.List; ++- ++-public class DonationHelper implements PurchasesUpdatedListener, BillingClientStateListener, SkuDetailsResponseListener { ++- ++- private final String LOG_TAG = "krita.DonationHelper"; ++- ++- private BillingClient mBillingClient; ++- private List mSkuDetails; ++- ++- private static DonationHelper sInstance; ++- ++- private DonationHelper() { ++- ++- mBillingClient = BillingClient.newBuilder(QtNative.getContext()) ++- .setListener(this) ++- .enablePendingPurchases() ++- .build(); ++- mBillingClient.startConnection(this); ++- } ++- ++- public static DonationHelper getInstance() { ++- if (sInstance == null) { ++- sInstance = new DonationHelper(); ++- } ++- return sInstance; ++- } ++- ++- @Override ++- public void onBillingSetupFinished(BillingResult billingResult) { ++- if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) { ++- querySkuDetails(); ++- } ++- } ++- ++- private void querySkuDetails() { ++- List skus = new ArrayList<>(); ++- skus.add("thankyoukiki"); ++- ++- SkuDetailsParams params = SkuDetailsParams.newBuilder() ++- .setType(BillingClient.SkuType.INAPP) ++- .setSkusList(skus) ++- .build(); ++- ++- mBillingClient.querySkuDetailsAsync(params, this); ++- } ++- ++- @Override ++- public void onSkuDetailsResponse(BillingResult billingResult, List list) { ++- if (billingResult == null) { ++- Log.e(LOG_TAG, "null billingResult"); ++- return; ++- } ++- ++- if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) { ++- if (list != null) { ++- mSkuDetails = list; ++- } ++- } ++- } ++- ++- @Override ++- public void onBillingServiceDisconnected() { ++- ++- } ++- ++- ++- @Override ++- public void onPurchasesUpdated(BillingResult billingResult, List purchases) { ++- if (billingResult == null) { ++- Log.e(LOG_TAG, "null billingResult"); ++- return; ++- } ++- switch (billingResult.getResponseCode()) { ++- case BillingClient.BillingResponseCode.OK: ++- // only one item, for now ++- for (Purchase purchase: purchases) { ++- handlePurchase(purchase); ++- } ++- break; ++- ++- case BillingClient.BillingResponseCode.ITEM_ALREADY_OWNED: ++- // this shouldn't happen with our current logic! ++- Log.w(LOG_TAG, "Item already owned"); ++- JNIWrappers.donationSuccessful(); ++- break; ++- ++- case BillingClient.BillingResponseCode.DEVELOPER_ERROR: ++- Log.e(LOG_TAG, "Dev Error: " + billingResult.getDebugMessage()); ++- break; ++- ++- case BillingClient.BillingResponseCode.USER_CANCELED: ++- showToast(R.string.cancelled); ++- break; ++- ++- default: ++- showToast(R.string.something_wrong); ++- } ++- } ++- ++- private void handlePurchase(Purchase purchase) { ++- if (purchase.getPurchaseState() == Purchase.PurchaseState.PURCHASED) { ++- ackPurchase(purchase); ++- JNIWrappers.donationSuccessful(); ++- } ++- } ++- ++- private void ackPurchase(Purchase purchase) { ++- AcknowledgePurchaseParams params = AcknowledgePurchaseParams ++- .newBuilder() ++- .setPurchaseToken(purchase.getPurchaseToken()) ++- .build(); ++- mBillingClient.acknowledgePurchase(params, new AcknowledgePurchaseResponseListener() { ++- @Override ++- public void onAcknowledgePurchaseResponse(BillingResult billingResult) { ++- Log.d(LOG_TAG, "BillingResult: " + billingResult.getResponseCode()); ++- } ++- }); ++- } ++- ++- private static void showToast(final int resourceId) { ++- QtNative.activity().runOnUiThread(new Runnable() { ++- @Override ++- public void run() { ++- Toast.makeText(QtNative.getContext(), resourceId, Toast.LENGTH_LONG).show(); ++- } ++- }); ++- } ++- ++- public static void startBillingFlow() { ++- if (!getInstance().mBillingClient.isReady()) { ++- getInstance().mBillingClient.startConnection(sInstance); ++- showToast(R.string.something_wrong); ++- return; ++- } ++- ++- if (getInstance().mSkuDetails != null) { ++- // there's only one for now ++- for (SkuDetails detail: getInstance().mSkuDetails) { ++- BillingFlowParams flowParams = BillingFlowParams.newBuilder() ++- .setSkuDetails(detail) ++- .build(); ++- ++- getInstance().mBillingClient.launchBillingFlow(QtNative.activity(), flowParams); ++- } ++- } ++- } ++- ++- // This method will be called from C++ side, to see if the banner has been purchased. ++- // We only have one item right now, so this will do. ++- public static boolean isBadgePurchased() { ++- Purchase.PurchasesResult purchasesResult = ++- getInstance().mBillingClient.queryPurchases(BillingClient.SkuType.INAPP); ++- ++- if (purchasesResult.getPurchasesList() != null) ++- return !purchasesResult.getPurchasesList().isEmpty(); ++- else ++- return false; ++- } ++- ++- public static void endConnection() { ++- getInstance().mBillingClient.endConnection(); ++- sInstance = null; ++- } ++-} ++diff --git a/packaging/android/apk/src/org/krita/android/JNIWrappers.java b/packaging/android/apk/src/org/krita/android/JNIWrappers.java ++index e761bf492f..1670bfc673 100644 ++--- a/packaging/android/apk/src/org/krita/android/JNIWrappers.java +++++ b/packaging/android/apk/src/org/krita/android/JNIWrappers.java ++@@ -19,7 +19,6 @@ class JNIWrappers { ++ public static native boolean exitFullScreen(); ++ ++ public static native boolean hasMainWindowLoaded(); ++- public static native void donationSuccessful(); ++ public static native void openFileFromIntent(String uri); ++ } ++ ++diff --git a/packaging/android/apk/src/org/krita/android/MainActivity.java b/packaging/android/apk/src/org/krita/android/MainActivity.java ++index 8f3c8ba650..8af8295385 100644 ++--- a/packaging/android/apk/src/org/krita/android/MainActivity.java +++++ b/packaging/android/apk/src/org/krita/android/MainActivity.java ++@@ -40,8 +40,6 @@ public class MainActivity extends QtActivity { ++ super.onCreate(savedInstanceState); ++ Log.i(TAG, "LibsLoaded"); ++ new ConfigsManager().handleAssets(this); ++- ++- DonationHelper.getInstance(); ++ } ++ ++ @Override +diff --git a/0002-restore_abi.patch b/0002-restore_abi.patch +new file mode 100644 +index 0000000..5896f43 +--- /dev/null ++++ b/0002-restore_abi.patch +@@ -0,0 +1,22 @@ ++diff --git a/packaging/android/apk/build.gradle b/packaging/android/apk/build.gradle ++index a0d0b9eb17..332d1a6cbc 100644 ++--- a/packaging/android/apk/build.gradle +++++ b/packaging/android/apk/build.gradle ++@@ -118,7 +118,7 @@ android { ++ abortOnError false ++ } ++ ++- project.ext.constant = 5 +++ project.ext.versionCodes = ['armeabi-v7a': 1, 'arm64-v8a': 2, 'x86': 3, 'x86_64': 4] ++ ++ def versionMajor = 5 ++ def versionMinor = 0 ++@@ -134,7 +134,7 @@ android { ++ defaultConfig { ++ targetSdkVersion 30 ++ minSdkVersion 23 ++- versionCode project.ext.constant * 1000000 + versionMajor * 10000 + versionMinor * 100 + versionRelease +++ versionCode project.ext.versionCodes[abi] * 1000000 + versionMajor * 10000 + versionMinor * 100 + versionRelease ++ versionName "5.0.2" ++ archivesBaseName = "krita-$abi-$versionName" ++ }