From d1512bc2560af9caf5387d599c1982bc270db3f9 Mon Sep 17 00:00:00 2001 From: zlzw <583819556@qq.com> Date: Wed, 31 Jul 2024 13:45:41 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=B8=89=E6=98=9F=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IAP6Helper/build.gradle | 2 + .../android/sdk/iap/lib/SamsungUtil.java | 134 ++++ .../sdk/iap/lib/activity/AccountActivity.java | 85 --- .../sdk/iap/lib/activity/BaseActivity.java | 233 ------- .../lib/activity/CheckPackageActivity.java | 57 -- .../sdk/iap/lib/activity/DialogActivity.java | 53 -- .../sdk/iap/lib/activity/PaymentActivity.java | 127 ---- .../iap/lib/dialog/BaseDialogFragment.java | 213 ------ .../sdk/iap/lib/helper/HelperDefine.java | 192 ------ .../iap/lib/helper/HelperListenerManager.java | 102 --- .../sdk/iap/lib/helper/HelperUtil.java | 335 --------- .../android/sdk/iap/lib/helper/IapHelper.java | 642 ------------------ .../sdk/iap/lib/helper/task/BaseTask.java | 65 -- .../task/ConsumePurchasedItemsTask.java | 105 --- .../iap/lib/helper/task/GetOwnedListTask.java | 112 --- .../helper/task/GetProductsDetailsTask.java | 115 ---- .../OnConsumePurchasedItemsListener.java | 20 - .../lib/listener/OnGetOwnedListListener.java | 20 - .../OnGetProductsDetailsListener.java | 20 - .../iap/lib/listener/OnIapBindListener.java | 13 - .../iap/lib/listener/OnPaymentListener.java | 15 - .../sdk/iap/lib/listener/OnSucceedBind.java | 8 - .../sdk/iap/lib/service/BaseService.java | 76 --- .../lib/service/ConsumePurchasedItems.java | 62 -- .../sdk/iap/lib/service/OwnedProduct.java | 63 -- .../sdk/iap/lib/service/ProductsDetails.java | 63 -- .../android/sdk/iap/lib/vo/BaseVo.java | 146 ---- .../android/sdk/iap/lib/vo/ConsumeVo.java | 75 -- .../android/sdk/iap/lib/vo/ErrorVo.java | 59 -- .../sdk/iap/lib/vo/OwnedProductVo.java | 115 ---- .../android/sdk/iap/lib/vo/ProductVo.java | 223 ------ .../android/sdk/iap/lib/vo/PurchaseVo.java | 172 ----- IAP6Helper/src/main/res/values-en/strings.xml | 4 + .../src/main/res/values-zh-rCN/strings.xml | 4 + .../src/main/res/values-zh-rHK/strings.xml | 4 + .../src/main/res/values-zh-rTW/strings.xml | 4 + IAP6Helper/src/main/res/values/strings.xml | 4 +- app/proguard-rules.pro | 1 + common/build.gradle | 19 +- common/libs/samsung-iap-6.1.1.aar | Bin 248596 -> 0 bytes .../pay/samsung/OnSamsungPaymentListener.java | 7 + .../common/pay/samsung/SamsungUtil.java | 126 ++-- .../com/yunbao/live/dialog/LiveGiftPopup.java | 2 + live/src/main/res/layout/view_live_end.xml | 14 +- .../yunbao/main/activity/SamsungFragment.java | 3 +- 45 files changed, 241 insertions(+), 3673 deletions(-) create mode 100644 IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/SamsungUtil.java delete mode 100644 IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/activity/AccountActivity.java delete mode 100644 IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/activity/BaseActivity.java delete mode 100644 IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/activity/CheckPackageActivity.java delete mode 100644 IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/activity/DialogActivity.java delete mode 100644 IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/activity/PaymentActivity.java delete mode 100644 IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/dialog/BaseDialogFragment.java delete mode 100644 IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/helper/HelperDefine.java delete mode 100644 IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/helper/HelperListenerManager.java delete mode 100644 IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/helper/HelperUtil.java delete mode 100644 IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/helper/IapHelper.java delete mode 100644 IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/helper/task/BaseTask.java delete mode 100644 IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/helper/task/ConsumePurchasedItemsTask.java delete mode 100644 IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/helper/task/GetOwnedListTask.java delete mode 100644 IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/helper/task/GetProductsDetailsTask.java delete mode 100644 IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/listener/OnConsumePurchasedItemsListener.java delete mode 100644 IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/listener/OnGetOwnedListListener.java delete mode 100644 IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/listener/OnGetProductsDetailsListener.java delete mode 100644 IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/listener/OnIapBindListener.java delete mode 100644 IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/listener/OnPaymentListener.java delete mode 100644 IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/listener/OnSucceedBind.java delete mode 100644 IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/service/BaseService.java delete mode 100644 IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/service/ConsumePurchasedItems.java delete mode 100644 IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/service/OwnedProduct.java delete mode 100644 IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/service/ProductsDetails.java delete mode 100644 IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/vo/BaseVo.java delete mode 100644 IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/vo/ConsumeVo.java delete mode 100644 IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/vo/ErrorVo.java delete mode 100644 IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/vo/OwnedProductVo.java delete mode 100644 IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/vo/ProductVo.java delete mode 100644 IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/vo/PurchaseVo.java delete mode 100644 common/libs/samsung-iap-6.1.1.aar create mode 100644 common/src/main/java/com/yunbao/common/pay/samsung/OnSamsungPaymentListener.java diff --git a/IAP6Helper/build.gradle b/IAP6Helper/build.gradle index 0f459a391..38a3c8dff 100644 --- a/IAP6Helper/build.gradle +++ b/IAP6Helper/build.gradle @@ -31,4 +31,6 @@ repositories { } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar']) + implementation 'com.google.code.gson:gson:2.8.6' + } \ No newline at end of file diff --git a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/SamsungUtil.java b/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/SamsungUtil.java new file mode 100644 index 000000000..7a631dc00 --- /dev/null +++ b/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/SamsungUtil.java @@ -0,0 +1,134 @@ +package com.samsung.android.sdk.iap.lib; + +import android.content.Context; +import android.util.Log; + +import com.google.gson.Gson; +import com.samsung.android.sdk.iap.lib.constants.HelperDefine; +import com.samsung.android.sdk.iap.lib.helper.IapHelper; +import com.samsung.android.sdk.iap.lib.listener.OnConsumePurchasedItemsListener; +import com.samsung.android.sdk.iap.lib.listener.OnGetOwnedListListener; +import com.samsung.android.sdk.iap.lib.vo.ConsumeVo; +import com.samsung.android.sdk.iap.lib.vo.ErrorVo; +import com.samsung.android.sdk.iap.lib.vo.OwnedProductVo; +import com.samsung.android.sdk.iap.lib.vo.PurchaseVo; + +import java.util.ArrayList; + +public class SamsungUtil { + + private Context mContext; + + IapHelper iapHelper; + + private static SamsungUtil samsungUtil; + + public static SamsungUtil newInstance(Context context) { + if (samsungUtil == null) { + samsungUtil = new SamsungUtil(context); + } + return samsungUtil; + } + + public SamsungUtil(Context mContext) { + this.mContext = mContext; + } + + /** + * 初始化 + */ + public void init() { + iapHelper = IapHelper.getInstance(mContext); + //设置支付模式 OPERATION_MODE_PRODUCTION 正式模式 OPERATION_MODE_TEST 测试模式 + iapHelper.setOperationMode(HelperDefine.OperationMode.OPERATION_MODE_PRODUCTION); + } + + public void dispose() { + if (iapHelper != null) { + iapHelper.dispose(); + } + } + + + /** + * 购买 + * + * @param skuId + */ + public void buy(String skuId, OnPaymentListener onPaymentListener) { + //购买 + iapHelper.startPayment(skuId, "", (errorVo, purchaseVo) -> { + if (purchaseVo != null) { + onPaymentListener.onPaymentSuccess(purchaseVo.getPurchaseId()); + } else { + if (errorVo.getErrorCode() == HelperDefine.IAP_PAYMENT_IS_CANCELED) { + onPaymentListener.onPaymentFailed(mContext.getString(R.string.pay_cancel)); + } else { + onPaymentListener.onPaymentFailed(errorVo.getErrorString()); + } + } + + }); + } + + public interface OnPaymentListener { + void onPaymentSuccess(String purchaseVo); + + void onPaymentFailed(String errorVo); + } + + + /** + * 消耗指定商品 + * + * @param skuId + */ + public void consume(String skuId) { + //消耗 + iapHelper.consumePurchasedItems(skuId, new OnConsumePurchasedItemsListener() { + @Override + public void onConsumePurchasedItems(ErrorVo _errorVO, ArrayList _consumeList) { + if (_consumeList != null) { + Log.e("samsung","消耗:" + new Gson().toJson(_consumeList)); + Log.e("samsung","ErrorVo:" + _errorVO.dump()); + } + } + }); + } + + public void consumeAll(ArrayList _ownedList) { + if (_ownedList.size() > 0) { + iapHelper.consumePurchasedItems(_ownedList.get(0).getPurchaseId(), new OnConsumePurchasedItemsListener() { + @Override + public void onConsumePurchasedItems(ErrorVo _errorVO, ArrayList _consumeList1) { + if (_errorVO.getErrorCode() == IapHelper.IAP_ERROR_NONE) { + Log.e("samsung","消耗:" + new Gson().toJson(_consumeList1)); + Log.e("samsung","ErrorVo:" + _errorVO.dump()); + _ownedList.remove(0); + consumeAll(_ownedList); + } + } + }); + } + } + + + /** + * 消耗所有未消耗的消耗品 + */ + public void query() { + //查询商品 PRODUCT_TYPE_ITEM 消耗品&非消耗品 + iapHelper.getOwnedList(HelperDefine.PRODUCT_TYPE_ITEM, new OnGetOwnedListListener() { + @Override + public void onGetOwnedProducts(ErrorVo _errorVo, ArrayList _ownedList) { + if (_errorVo != null) { + if (_errorVo.getErrorCode() == IapHelper.IAP_ERROR_NONE) { + if (_ownedList != null) { + consumeAll(_ownedList); + } + } + } + } + }); + } +} diff --git a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/activity/AccountActivity.java b/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/activity/AccountActivity.java deleted file mode 100644 index 4ce2f87a2..000000000 --- a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/activity/AccountActivity.java +++ /dev/null @@ -1,85 +0,0 @@ -package com.samsung.android.sdk.iap.lib.activity; - -import android.app.Activity; -import android.content.Intent; -import android.os.Bundle; -import android.util.Log; - -import com.samsung.android.sdk.iap.lib.helper.HelperDefine; -import com.samsung.android.sdk.iap.lib.helper.HelperUtil; -import com.samsung.android.sdk.iap.lib.helper.IapHelper; - -/** - * Created by sangbum7.kim on 2018-03-06. - */ - -public class AccountActivity extends Activity { - private static final String TAG = AccountActivity.class.getSimpleName(); - - IapHelper mIapHelper = null; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - mIapHelper = IapHelper.getInstance(this); - // ==================================================================== - // 1. If IAP package is installed and valid, start SamsungAccount - // authentication activity to start purchase. - // ==================================================================== - Log.i(TAG, "Samsung Account Login..."); - HelperUtil.startAccountActivity(this); - // ==================================================================== - } - - @Override - protected void onDestroy() { - super.onDestroy(); - } - - @Override - protected void onActivityResult(int _requestCode, int _resultCode, Intent intent) { - Log.i(TAG, "onActivityResult>> requestCode : " + _requestCode + ", resultCode : " + _resultCode); - switch (_requestCode) { - case HelperDefine.REQUEST_CODE_IS_ACCOUNT_CERTIFICATION: - Log.i(TAG, "REQUEST_CODE_IS_ACCOUNT_CERTIFICATION Result : " + _resultCode); - // 1) If SamsungAccount authentication is succeed - // ------------------------------------------------------------ - if (RESULT_OK == _resultCode) { - // bind to IAPService - // -------------------------------------------------------- - Runnable runProcess = new Runnable() { - @Override - public void run() { - mIapHelper.bindIapService(); - } - }; - runProcess.run(); - - finish(); - overridePendingTransition(0, 0); - // -------------------------------------------------------- - } - // ------------------------------------------------------------ - // 2) If SamsungAccount authentication is cancelled - // ------------------------------------------------------------ - else { -// Runnable runProcess = new Runnable() { -// @Override -// public void run() { -// if(mIapHelper.getServiceProcess() != null) -// mIapHelper.getServiceProcess().onEndProcess(); -// else -// mIapHelper.dispose(); -// } -// }; -// if(runProcess!=null) -// runProcess.run(); -// else - mIapHelper.dispose(); - finish(); - } - break; - } - } -} diff --git a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/activity/BaseActivity.java b/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/activity/BaseActivity.java deleted file mode 100644 index 10e581604..000000000 --- a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/activity/BaseActivity.java +++ /dev/null @@ -1,233 +0,0 @@ -package com.samsung.android.sdk.iap.lib.activity; - -import android.app.Activity; -import android.app.Dialog; -import android.content.Intent; -import android.os.Bundle; -import android.util.Log; -import android.widget.Toast; - -import com.samsung.android.sdk.iap.lib.R; -import com.samsung.android.sdk.iap.lib.dialog.BaseDialogFragment; -import com.samsung.android.sdk.iap.lib.helper.HelperDefine; -import com.samsung.android.sdk.iap.lib.helper.HelperUtil; -import com.samsung.android.sdk.iap.lib.helper.IapHelper; -import com.samsung.android.sdk.iap.lib.vo.ErrorVo; -import com.samsung.android.sdk.iap.lib.vo.PurchaseVo; - - -public abstract class BaseActivity extends Activity { - private static final String TAG = BaseActivity.class.getSimpleName(); - - protected ErrorVo mErrorVo = new ErrorVo(); - private Dialog mProgressDialog = null; - protected PurchaseVo mPurchaseVo = null; - - /** - * Helper Class between IAPService and 3rd Party Application - */ - IapHelper mIapHelper = null; - - /** - * Flag value to show successful pop-up. Error pop-up appears whenever it fails or not. - */ - protected boolean mShowErrorDialog = true; - - @Override - protected void onCreate(Bundle savedInstanceState) { - // 1. IapHelper Instance creation - // To test on development, set mode to test mode using - // use HelperDefine.OperationMode.OPERATION_MODE_TEST or - // HelperDefine.OperationMode.OPERATION_MODE_TEST_FAILURE constants. - // ==================================================================== - mIapHelper = IapHelper.getInstance(this); - // ==================================================================== - - // 2. This activity is invisible excepting progress bar as default. - // ==================================================================== - try { - Toast.makeText(this, - R.string.dream_sapps_body_authenticating_ing, - Toast.LENGTH_LONG).show(); - } catch (Exception e) { - e.printStackTrace(); - } - // ==================================================================== - - super.onCreate(savedInstanceState); - } - - public void setErrorVo(ErrorVo _errorVo) { - mErrorVo = _errorVo; - } - - public boolean checkAppsPackage(Activity _activity) { - // 1. If Galaxy Store is installed - // ==================================================================== - if (HelperUtil.isInstalledAppsPackage(this)) { - // 1) If Galaxy Store is enabled - // ================================================================ - if (!HelperUtil.isEnabledAppsPackage(this)) { - HelperUtil.showEnableGalaxyStoreDialog(_activity); - // ================================================================ - // 2) If Galaxy Store is valid - // ================================================================ - } else if (HelperUtil.isValidAppsPackage(this)) { - return true; - } else { - // Set error to notify result to third-party application - // ------------------------------------------------------------ - final String ERROR_ISSUER_IAP_CLIENT = "IC"; - final int ERROR_CODE_INVALID_GALAXY_STORE = 10002; - String errorString = String.format( - getString( - R.string.dream_ph_body_contact_p1sscustomer_servicep2ss_for_more_information_n_nerror_code_c_p3ss), - "", "", ERROR_ISSUER_IAP_CLIENT + ERROR_CODE_INVALID_GALAXY_STORE); - mErrorVo.setError(HelperDefine.IAP_PAYMENT_IS_CANCELED, errorString); - HelperUtil.showInvalidGalaxyStoreDialog(this); - } - // ================================================================ - - // ==================================================================== - // 2. If Galaxy Store is not installed - // ==================================================================== - } else { - HelperUtil.installAppsPackage(this); - } - // ==================================================================== - return false; - } - - /** - * dispose IapHelper {@link PaymentActivity} To do that, preDestory must be invoked at first in onDestory of each child activity - */ - protected void preDestory() { - // 1. Invoke dispose Method to unbind service and release inprogress flag - // ==================================================================== - if (mIapHelper != null) { - mIapHelper.dispose(); - mIapHelper = null; - } - } - - @Override - protected void onDestroy() { - // 1. dismiss ProgressDialog - // ==================================================================== - try { - if (mProgressDialog != null) { - mProgressDialog.dismiss(); - mProgressDialog = null; - } - } catch (Exception e) { - e.printStackTrace(); - } - // ==================================================================== - - super.onDestroy(); - } - - @Override - public void finish() { - super.finish(); - overridePendingTransition(0, 0); - } - - protected void finishPurchase(Intent _intent) { - // 1. If there is bundle passed from IAP - // ==================================================================== - if (_intent != null && _intent.getExtras() != null) { - Bundle extras = _intent.getExtras(); - mErrorVo.setError( - extras.getInt(HelperDefine.KEY_NAME_STATUS_CODE), - extras.getString(HelperDefine.KEY_NAME_ERROR_STRING), - extras.getString(HelperDefine.KEY_NAME_ERROR_DETAILS, "")); - - // 1) If the purchase is successful, - // ---------------------------------------------------------------- - if (mErrorVo.getErrorCode() == HelperDefine.IAP_ERROR_NONE) { - mPurchaseVo = new PurchaseVo(extras.getString( - HelperDefine.KEY_NAME_RESULT_OBJECT)); - - mErrorVo.setError( - HelperDefine.IAP_ERROR_NONE, - getString(R.string.dream_sapps_body_your_purchase_is_complete)); - - finish(); - } - // ---------------------------------------------------------------- - // 2) If the purchase is failed - // ---------------------------------------------------------------- - else { - Log.e(TAG, "finishPurchase: " + mErrorVo.dump()); - if (mShowErrorDialog) { - HelperUtil.showIapErrorDialog( - this, - getString(R.string.dream_ph_pheader_couldnt_complete_purchase), - mErrorVo.getErrorString(), - mErrorVo.getErrorDetailsString(), - new BaseDialogFragment.OnClickListener() { - @Override - public void onClick() { - finish(); - } - }, - null); - } else { - finish(); - } - } - // ---------------------------------------------------------------- - } - // ==================================================================== - // 2. If there is no bundle passed from IAP - // ==================================================================== - else { - mErrorVo.setError( - HelperDefine.IAP_ERROR_COMMON, - getString(R.string.mids_sapps_pop_unknown_error_occurred)); - - if (mShowErrorDialog) { - HelperUtil.showIapErrorDialog( - this, - getString(R.string.dream_ph_pheader_couldnt_complete_purchase), - getString(R.string.mids_sapps_pop_unknown_error_occurred), - new BaseDialogFragment.OnClickListener() { - @Override - public void onClick() { - finish(); - } - }, - null); - } else { - finish(); - } - - return; - } - // ==================================================================== - } - - protected void cancelPurchase(Intent intent) { - if (intent != null) { - Bundle extras = intent.getExtras(); - if (extras != null) { - mErrorVo.setError( - extras.getInt( - HelperDefine.KEY_NAME_STATUS_CODE, - HelperDefine.IAP_PAYMENT_IS_CANCELED), - extras.getString( - HelperDefine.KEY_NAME_ERROR_STRING, - getString(R.string.mids_sapps_pop_payment_canceled)), - extras.getString(HelperDefine.KEY_NAME_ERROR_DETAILS, "")); - finish(); - return; - } - } - - mErrorVo.setError( - HelperDefine.IAP_PAYMENT_IS_CANCELED, - getString(R.string.mids_sapps_pop_payment_canceled)); - finish(); - } -} \ No newline at end of file diff --git a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/activity/CheckPackageActivity.java b/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/activity/CheckPackageActivity.java deleted file mode 100644 index e790a63d0..000000000 --- a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/activity/CheckPackageActivity.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.samsung.android.sdk.iap.lib.activity; - -import android.app.Activity; -import android.content.Intent; -import android.os.Bundle; - -import com.samsung.android.sdk.iap.lib.helper.HelperDefine; -import com.samsung.android.sdk.iap.lib.helper.HelperUtil; -import com.samsung.android.sdk.iap.lib.helper.IapHelper; - -/** - * Created by sangbum7.kim on 2018-03-07. - */ - -public class CheckPackageActivity extends Activity { - private static final String TAG = CheckPackageActivity.class.getSimpleName(); - private boolean mFinishFlag = true; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - mFinishFlag = true; - Intent intent = getIntent(); - if (intent != null) { - Bundle extras = intent.getExtras(); - if (extras != null) { - int DialogType = extras.getInt("DialogType"); - switch (DialogType) { - case HelperDefine.DIALOG_TYPE_INVALID_PACKAGE: { - HelperUtil.showInvalidGalaxyStoreDialog(this); - mFinishFlag = false; - } - break; - case HelperDefine.DIALOG_TYPE_DISABLE_APPLICATION: { - HelperUtil.showEnableGalaxyStoreDialog(this); - mFinishFlag = false; - } - break; - case HelperDefine.DIALOG_TYPE_APPS_DETAIL: { - HelperUtil.showUpdateGalaxyStoreDialog(this); - mFinishFlag = false; - } - break; - } - } - } - if (mFinishFlag) { - finish(); - } - } - - @Override - protected void onDestroy() { - super.onDestroy(); - IapHelper.getInstance(getApplicationContext()).dispose(); - } -} diff --git a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/activity/DialogActivity.java b/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/activity/DialogActivity.java deleted file mode 100644 index 8e77cfa79..000000000 --- a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/activity/DialogActivity.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.samsung.android.sdk.iap.lib.activity; - -import android.app.Activity; -import android.content.ActivityNotFoundException; -import android.content.Intent; -import android.net.Uri; -import android.os.Bundle; -import android.text.TextUtils; - -import com.samsung.android.sdk.iap.lib.R; -import com.samsung.android.sdk.iap.lib.dialog.BaseDialogFragment; -import com.samsung.android.sdk.iap.lib.helper.HelperDefine; -import com.samsung.android.sdk.iap.lib.helper.HelperUtil; - -/** - * Created by sangbum7.kim on 2018-03-05. - */ - -public class DialogActivity extends Activity { - private static final String TAG = DialogActivity.class.getSimpleName(); - private String mExtraString = ""; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - Intent intent = getIntent(); - if (intent != null) { - Bundle extras = intent.getExtras(); - if (extras != null) { - if (HelperDefine.DIALOG_TYPE_NOTIFICATION == extras.getInt("DialogType")) { - String title = extras.getString("Title"); - String message = extras.getString("Message"); - HelperUtil.showIapErrorDialog( - this, - title, - message, - new BaseDialogFragment.OnClickListener() { - @Override - public void onClick() { - finish(); - } - }, - null); - } - } - } - } - - @Override - protected void onDestroy() { - super.onDestroy(); - } -} diff --git a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/activity/PaymentActivity.java b/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/activity/PaymentActivity.java deleted file mode 100644 index e309aa00c..000000000 --- a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/activity/PaymentActivity.java +++ /dev/null @@ -1,127 +0,0 @@ -package com.samsung.android.sdk.iap.lib.activity; - -import android.content.ComponentName; -import android.content.Context; -import android.content.Intent; -import android.content.res.Configuration; -import android.os.Bundle; -import android.util.Log; -import android.widget.Toast; - -import com.samsung.android.sdk.iap.lib.R; -import com.samsung.android.sdk.iap.lib.helper.HelperDefine; -import com.samsung.android.sdk.iap.lib.helper.HelperListenerManager; -import com.samsung.android.sdk.iap.lib.listener.OnPaymentListener; - -public class PaymentActivity extends BaseActivity { - private static final String TAG = PaymentActivity.class.getSimpleName(); - - private String mItemId = null; - private String mPassThroughParam = ""; - private int mMode; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - Intent intent = getIntent(); - if (intent != null && intent.getExtras() != null - && intent.getExtras().containsKey("ItemId")) { - Bundle extras = intent.getExtras(); - mItemId = extras.getString("ItemId"); - mPassThroughParam = extras.getString("PassThroughParam"); - mShowErrorDialog = extras.getBoolean("ShowErrorDialog", true); - mMode = extras.getInt("OperationMode", HelperDefine.OperationMode.OPERATION_MODE_PRODUCTION.getValue()); - } else { - Toast.makeText(this, - R.string.mids_sapps_pop_an_invalid_value_has_been_provided_for_samsung_in_app_purchase, - Toast.LENGTH_LONG).show(); - - // Set error to pass result to third-party application - // ---------------------------------------------------------------- - mErrorVo.setError(HelperDefine.IAP_ERROR_COMMON, - getString(R.string.mids_sapps_pop_an_invalid_value_has_been_provided_for_samsung_in_app_purchase)); - // ---------------------------------------------------------------- - - finish(); - } - - if (checkAppsPackage(this)) { - startPaymentActivity(); - } - } - - @Override - protected void onDestroy() { - super.preDestory(); - if (isFinishing()) { - OnPaymentListener onPaymentListener = - HelperListenerManager.getInstance().getOnPaymentListener(); - HelperListenerManager.getInstance().setOnPaymentListener(null); - if (null != onPaymentListener) { - onPaymentListener.onPayment(mErrorVo, mPurchaseVo); - } - } - super.onDestroy(); - } - - @Override - public void onConfigurationChanged(Configuration newConfig) { - super.onConfigurationChanged(newConfig); - } - - @Override - protected void onActivityResult(int _requestCode, int _resultCode, Intent _intent) { - switch (_requestCode) { - case HelperDefine.REQUEST_CODE_IS_IAP_PAYMENT: { - if (_resultCode == RESULT_OK) { - finishPurchase(_intent); - } - else if (_resultCode == RESULT_CANCELED) { - Log.e(TAG, "Payment is canceled."); - cancelPurchase(_intent); - } - break; - } - case HelperDefine.REQUEST_CODE_IS_ENABLE_APPS: { - if (checkAppsPackage(this)) { - startPaymentActivity(); - } - break; - } - } - } - - private void startPaymentActivity() { - if (mIapHelper == null) { - Log.e(TAG, "Fail to get IAP Helper instance"); - return; - } - try { - Context context = this.getApplicationContext(); - Bundle bundle = new Bundle(); - bundle.putString(HelperDefine.KEY_NAME_THIRD_PARTY_NAME, context.getPackageName()); - bundle.putString(HelperDefine.KEY_NAME_ITEM_ID, mItemId); - if (mPassThroughParam != null) { - bundle.putString(HelperDefine.KEY_NAME_PASSTHROUGH_ID, mPassThroughParam); - } - bundle.putInt(HelperDefine.KEY_NAME_OPERATION_MODE, mMode); - bundle.putString(HelperDefine.KEY_NAME_VERSION_CODE, HelperDefine.HELPER_VERSION); - - ComponentName com = new ComponentName(HelperDefine.GALAXY_PACKAGE_NAME, - HelperDefine.IAP_PACKAGE_NAME + ".activity.PaymentMethodListActivity"); - - Intent intent = new Intent(Intent.ACTION_MAIN); - intent.addCategory(Intent.CATEGORY_LAUNCHER); - intent.setComponent(com); - - intent.putExtras(bundle); - - if (intent.resolveActivity(context.getPackageManager()) != null) { - startActivityForResult(intent, HelperDefine.REQUEST_CODE_IS_IAP_PAYMENT); - } - } catch (Exception e) { - e.printStackTrace(); - } - } -} \ No newline at end of file diff --git a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/dialog/BaseDialogFragment.java b/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/dialog/BaseDialogFragment.java deleted file mode 100644 index 8f2977cd3..000000000 --- a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/dialog/BaseDialogFragment.java +++ /dev/null @@ -1,213 +0,0 @@ -package com.samsung.android.sdk.iap.lib.dialog; - -import android.app.ActionBar; -import android.app.Dialog; -import android.app.DialogFragment; -import android.content.res.Configuration; -import android.os.Build; -import android.os.Bundle; -import android.text.TextUtils; -import android.text.method.LinkMovementMethod; -import android.util.Log; -import android.util.TypedValue; -import android.view.Gravity; -import android.view.View; -import android.view.WindowManager; -import android.widget.Button; -import android.widget.TextView; - -import com.samsung.android.sdk.iap.lib.R; - -public class BaseDialogFragment extends DialogFragment implements View.OnClickListener { - private static final String TAG = BaseDialogFragment.class.getSimpleName(); - - private int dialogWidth; - private String title; - private CharSequence message; - private String messageExtra = ""; - private String positiveBtnText; - private String negativeBtnText; - private OnClickListener positiveButtonListener = null; - private OnClickListener negativeButtonListener = null; - - public static final String IAP_DIALOG_TAG = "IAP_dialog"; - - public interface OnClickListener { - void onClick(); - } - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - } - - @Override - public void onResume() { - super.onResume(); - dialogWidth = getDialogWidth(); - getDialog().getWindow().setLayout(dialogWidth, ActionBar.LayoutParams.WRAP_CONTENT); - } - - @Override - public void onDestroyView() { - if (getDialog() != null && getRetainInstance()) { - getDialog().setDismissMessage(null); - } - super.onDestroyView(); - } - - @Override - public Dialog onCreateDialog(Bundle savedInstanceState) { - View view; - if (isDarkMode()) { - view = getActivity().getLayoutInflater().inflate(R.layout.dialog_dark, null); - } else { - view = getActivity().getLayoutInflater().inflate(R.layout.dialog_light, null); - } - - ((TextView) view.findViewById(R.id.dialog_title)).setText(title); - ((TextView) view.findViewById(R.id.dialog_message)).setText(message); - ((TextView) view.findViewById(R.id.dialog_message)).setLinksClickable(true); - ((TextView) view.findViewById(R.id.dialog_message)).setMovementMethod(LinkMovementMethod.getInstance()); - - if (messageExtra == null || messageExtra.isEmpty()) { - view.findViewById(R.id.dialog_message_extra).setVisibility(View.GONE); - } else { - ((TextView) view.findViewById(R.id.dialog_message_extra)) - .setText(getString(R.string.ids_com_body_error_code_c) + " " + messageExtra); - view.findViewById(R.id.dialog_message_extra).setVisibility(View.VISIBLE); - } - - ((Button) view.findViewById(R.id.dialog_ok_btn)).setText(positiveBtnText); - view.findViewById(R.id.dialog_ok_btn).setOnClickListener(this); - - if (negativeButtonListener == null) { - view.findViewById(R.id.dialog_cancel_btn).setVisibility(View.GONE); - view.findViewById(R.id.dialog_btn_padding).setVisibility(View.GONE); - } else { - ((Button) view.findViewById(R.id.dialog_cancel_btn)).setText(negativeBtnText); - view.findViewById(R.id.dialog_cancel_btn).setVisibility(View.VISIBLE); - view.findViewById(R.id.dialog_cancel_btn).setOnClickListener(this); - view.findViewById(R.id.dialog_btn_padding).setVisibility(View.VISIBLE); - } - - Dialog dialog = new Dialog(getActivity(), R.style.Theme_DialogTransparent); - dialog.setContentView(view); - dialog.setCancelable(false); - dialog.setCanceledOnTouchOutside(false); - - dialog.getWindow().setGravity(Gravity.BOTTOM); - dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); - TypedValue dimValue = new TypedValue(); - if (isDarkMode()) { - getResources().getValue(R.integer.dim_dark, dimValue, true); - } else { - getResources().getValue(R.integer.dim_light, dimValue, true); - } - dialog.getWindow().setDimAmount(dimValue.getFloat()); - - return dialog; - } - - @Override - public void onConfigurationChanged(Configuration newConfig) { - super.onConfigurationChanged(newConfig); - dialogWidth = getDialogWidth(); - getDialog().getWindow().setLayout(dialogWidth, ActionBar.LayoutParams.WRAP_CONTENT); - } - - public BaseDialogFragment setDialogTitle(String _title) { - if (!TextUtils.isEmpty(_title)) { - this.title = _title; - } - return this; - } - - public BaseDialogFragment setDialogMessageText(CharSequence _message) { - if (!TextUtils.isEmpty(_message)) { - this.message = _message; - } - return this; - } - - public BaseDialogFragment setDialogMessageExtra(String _extra) { - if (!TextUtils.isEmpty(_extra)) { - this.messageExtra = _extra; - } - return this; - } - - public BaseDialogFragment setDialogPositiveButton(String _positiveBtnText, final OnClickListener listener) { - if (!TextUtils.isEmpty(_positiveBtnText)) { - positiveBtnText = _positiveBtnText; - } else { - positiveBtnText = (String) getText(android.R.string.ok); - } - if (listener != null) { - positiveButtonListener = listener; - } - return this; - } - - public BaseDialogFragment setDialogNegativeButton(String _negativeBtnText, final OnClickListener listener) { - if (!TextUtils.isEmpty(_negativeBtnText)) { - negativeBtnText = _negativeBtnText; - } - if (listener != null) { - negativeButtonListener = listener; - } - return this; - } - - @Override - public void onClick(View v) { - if (v.getId() == R.id.dialog_ok_btn) { - Runnable OkBtnRunnable = new Runnable() { - @Override - public void run() { - positiveButtonListener.onClick(); - } - }; - OkBtnRunnable.run(); - } else if (v.getId() == R.id.dialog_cancel_btn) { - Runnable CancelBtnRunnable = new Runnable() { - @Override - public void run() { - negativeButtonListener.onClick(); - } - }; - CancelBtnRunnable.run(); - } - dismiss(); - } - - private int getDialogWidth() { - TypedValue outValue = new TypedValue(); - getResources().getValue(R.integer.dialog_width_percentage, outValue, true); - float ratio = outValue.getFloat(); - int width = (int) (getResources().getDisplayMetrics().widthPixels * ratio); - return width; - } - - private boolean isDarkMode() { - try { - // getContext() requires M OS or higher version - int nightModeFlags = 0; - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - nightModeFlags = getContext().getResources().getConfiguration().uiMode & - Configuration.UI_MODE_NIGHT_MASK; - } - switch (nightModeFlags) { - case Configuration.UI_MODE_NIGHT_YES: - return true; - case Configuration.UI_MODE_NIGHT_NO: - case Configuration.UI_MODE_NIGHT_UNDEFINED: - default: - return false; - } - } catch (Exception e) { - e.printStackTrace(); - return false; - } - } -} \ No newline at end of file diff --git a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/helper/HelperDefine.java b/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/helper/HelperDefine.java deleted file mode 100644 index 15a86549d..000000000 --- a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/helper/HelperDefine.java +++ /dev/null @@ -1,192 +0,0 @@ -package com.samsung.android.sdk.iap.lib.helper; - -/** - * Created by sangbum7.kim on 2017-07-17. - */ - -public class HelperDefine { - public static final String HELPER_VERSION = "6.1.0.004"; - // IAP Signature HashCode - Used to validate IAP package - // ======================================================================== - public static final int APPS_SIGNATURE_HASHCODE = 0x79998D13; - public static final int APPS_PACKAGE_VERSION = 450301000; - public static final int APPS_PACKAGE_VERSION_GO = 510130000; - public static final int APPS_PACKAGE_VERSION_INDIA = 660107000; - - // ======================================================================== - - // Name of IAP Package and Service - // ======================================================================== - public static final String GALAXY_PACKAGE_NAME = "com.sec.android.app.samsungapps"; - public static final String IAP_PACKAGE_NAME = "com.samsung.android.iap"; - public static final String IAP_SERVICE_NAME = - "com.samsung.android.iap.service.IAPService"; - // ======================================================================== - - // result code for binding to IAPService - // ======================================================================== - public static final int IAP_RESPONSE_RESULT_OK = 0; - public static final int IAP_RESPONSE_RESULT_UNAVAILABLE = 2; - // ======================================================================== - - // BUNDLE KEY - // ======================================================================== - public static final String KEY_NAME_THIRD_PARTY_NAME = "THIRD_PARTY_NAME"; - public static final String KEY_NAME_STATUS_CODE = "STATUS_CODE"; - public static final String KEY_NAME_ERROR_STRING = "ERROR_STRING"; - public static final String KEY_NAME_ERROR_DETAILS = "ERROR_DETAILS"; - public static final String KEY_NAME_ITEM_ID = "ITEM_ID"; - public static final String KEY_NAME_PASSTHROUGH_ID = "PASSTHROUGH_ID"; - public static final String KEY_NAME_RESULT_LIST = "RESULT_LIST"; - public static final String KEY_NAME_OPERATION_MODE = "OPERATION_MODE"; - public static final String KEY_NAME_RESULT_OBJECT = "RESULT_OBJECT"; - public static final String KEY_NAME_VERSION_CODE = "VERSION_CODE"; - public static final String NEXT_PAGING_INDEX = "NEXT_PAGING_INDEX"; - // ======================================================================== - - // Item Type - // ======================================================================== - public static final String PRODUCT_TYPE_ITEM = "item"; - public static final String PRODUCT_TYPE_SUBSCRIPTION = "subscription"; - public static final String PRODUCT_TYPE_ALL = "all"; - - // Define request code to IAPService. - // ======================================================================== - public static final int REQUEST_CODE_IS_IAP_PAYMENT = 1; - public static final int REQUEST_CODE_IS_ACCOUNT_CERTIFICATION = 2; - public static final int REQUEST_CODE_IS_ENABLE_APPS = 3; - // ======================================================================== - - // Define dialog type to DialogActivity - public static final int DIALOG_TYPE_NONE = 0; - public static final int DIALOG_TYPE_NOTIFICATION = 1; - public static final int DIALOG_TYPE_INVALID_PACKAGE = 2; - public static final int DIALOG_TYPE_DISABLE_APPLICATION = 3; - public static final int DIALOG_TYPE_APPS_DETAIL = 4; - - // Define request parameter to IAPService - // ======================================================================== - public static final int PASSTHROGUH_MAX_LENGTH = 255; - // ======================================================================== - - // Define status code notify to 3rd-party application - // ======================================================================== - /** - * Success - */ - final public static int IAP_ERROR_NONE = 0; - - /** - * Payment is cancelled - */ - final public static int IAP_PAYMENT_IS_CANCELED = 1; - - /** - * IAP initialization error - */ - final public static int IAP_ERROR_INITIALIZATION = -1000; - - /** - * IAP need to be upgraded - */ - final public static int IAP_ERROR_NEED_APP_UPGRADE = -1001; - - /** - * Common error - */ - final public static int IAP_ERROR_COMMON = -1002; - - /** - * Repurchase NON-CONSUMABLE item - */ - final public static int IAP_ERROR_ALREADY_PURCHASED = -1003; - - /** - * When PaymentMethodList Activity is called without Bundle data - */ - final public static int IAP_ERROR_WHILE_RUNNING = -1004; - - /** - * does not exist item or item group id - */ - final public static int IAP_ERROR_PRODUCT_DOES_NOT_EXIST = -1005; - - /** - * After purchase request not received the results can not be determined whether to buy. So, the confirmation of purchase list is needed. - */ - final public static int IAP_ERROR_CONFIRM_INBOX = -1006; - - /** - * Error when item group id does not exist - */ - public static final int IAP_ERROR_ITEM_GROUP_DOES_NOT_EXIST = -1007; - - /** - * Error when network is not available - */ - public static final int IAP_ERROR_NETWORK_NOT_AVAILABLE = -1008; - - /** - * IOException - */ - public static final int IAP_ERROR_IOEXCEPTION_ERROR = -1009; - - /** - * SocketTimeoutException - */ - public static final int IAP_ERROR_SOCKET_TIMEOUT = -1010; - - /** - * ConnectTimeoutException - */ - public static final int IAP_ERROR_CONNECT_TIMEOUT = -1011; - - /** - * The Item is not for sale in the country - */ - public static final int IAP_ERROR_NOT_EXIST_LOCAL_PRICE = -1012; - - /** - * IAP is not serviced in the country - */ - public static final int IAP_ERROR_NOT_AVAILABLE_SHOP = -1013; - - /** - * SA not logged in - */ - public static final int IAP_ERROR_NEED_SA_LOGIN = -1014; - // ======================================================================== - - /** - * initial state - */ - protected static final int STATE_TERM = 0; - - /** - * state of bound to IAPService successfully - */ - protected static final int STATE_BINDING = 1; - - /** - * state of InitIapTask successfully finished - */ - protected static final int STATE_READY = 2; - // ======================================================================== - - // IAP Operation Mode - // ======================================================================== - public enum OperationMode { - OPERATION_MODE_TEST_FAILURE(-1), - OPERATION_MODE_PRODUCTION(0), - OPERATION_MODE_TEST(1); - - final private int value; - OperationMode(int value) { - this.value = value; - } - public int getValue() { - return value; - } - } - // ======================================================================== -} diff --git a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/helper/HelperListenerManager.java b/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/helper/HelperListenerManager.java deleted file mode 100644 index f4a827f65..000000000 --- a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/helper/HelperListenerManager.java +++ /dev/null @@ -1,102 +0,0 @@ -package com.samsung.android.sdk.iap.lib.helper; - -import com.samsung.android.sdk.iap.lib.helper.task.ConsumePurchasedItemsTask; -import com.samsung.android.sdk.iap.lib.helper.task.GetOwnedListTask; -import com.samsung.android.sdk.iap.lib.helper.task.GetProductsDetailsTask; -import com.samsung.android.sdk.iap.lib.listener.OnConsumePurchasedItemsListener; -import com.samsung.android.sdk.iap.lib.listener.OnGetOwnedListListener; -import com.samsung.android.sdk.iap.lib.listener.OnGetProductsDetailsListener; -import com.samsung.android.sdk.iap.lib.listener.OnPaymentListener; - -/** - * Created by sangbum7.kim on 2017-08-29. - */ - -public class HelperListenerManager { - private static HelperListenerManager mInstance = null; - - private OnGetProductsDetailsListener mOnGetProductsDetailsListener = null; - private OnGetOwnedListListener mOnGetOwnedListListener = null; - private OnConsumePurchasedItemsListener mOnConsumePurchasedItemsListener = null; - private OnPaymentListener mOnPaymentListener = null; - - /** - * HelperListenerManager singleton reference method - */ - public static HelperListenerManager getInstance() { - if (mInstance == null) { - mInstance = new HelperListenerManager(); - } - return mInstance; - } - - public static void destroy() { - mInstance = null; - } - - /** - * HelperListenerManager constructor - */ - private HelperListenerManager() { - mOnGetProductsDetailsListener = null; - mOnGetOwnedListListener = null; - mOnConsumePurchasedItemsListener = null; - mOnPaymentListener = null; - } - - /** - * Register {@link OnGetProductsDetailsListener} callback interface to be invoked when {@link GetProductsDetailsTask} has been finished. - * - * @param _onGetProductsDetailsListener - */ - public void setOnGetProductsDetailsListener(OnGetProductsDetailsListener _onGetProductsDetailsListener) { - mOnGetProductsDetailsListener = _onGetProductsDetailsListener; - } - - public OnGetProductsDetailsListener getOnGetProductsDetailsListener() { - return mOnGetProductsDetailsListener; - } - - - /** - * Register {@link OnGetOwnedListListener} callback interface to be invoked when {@link GetOwnedListTask} has been finished. - * - * @param _onGetOwnedListListener - */ - public void setOnGetOwnedListListener(OnGetOwnedListListener _onGetOwnedListListener) { - mOnGetOwnedListListener = _onGetOwnedListListener; - } - - public OnGetOwnedListListener getOnGetOwnedListListener() { - return mOnGetOwnedListListener; - } - - - /** - * Register {@link OnConsumePurchasedItemsListener} callback interface to be invoked when {@link ConsumePurchasedItemsTask} has been finished. - * - * @param _onConsumePurchasedItemsListener - */ - public void setOnConsumePurchasedItemsListener(OnConsumePurchasedItemsListener _onConsumePurchasedItemsListener) { - mOnConsumePurchasedItemsListener = _onConsumePurchasedItemsListener; - } - - public OnConsumePurchasedItemsListener getOnConsumePurchasedItemsListener() { - return mOnConsumePurchasedItemsListener; - } - - - /** - * Register a callback interface to be invoked when Purchase Process has been finished. - * - * @param _onPaymentListener - */ - public void setOnPaymentListener(OnPaymentListener _onPaymentListener) { - mOnPaymentListener = _onPaymentListener; - } - - - public OnPaymentListener getOnPaymentListener() { - return mOnPaymentListener; - } -} diff --git a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/helper/HelperUtil.java b/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/helper/HelperUtil.java deleted file mode 100644 index 265ff6f50..000000000 --- a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/helper/HelperUtil.java +++ /dev/null @@ -1,335 +0,0 @@ -package com.samsung.android.sdk.iap.lib.helper; - -import android.app.Activity; -import android.content.ComponentName; -import android.content.Context; -import android.content.Intent; -import android.content.pm.PackageInfo; -import android.content.pm.PackageManager; -import android.content.pm.Signature; -import android.net.Uri; -import android.os.Build; -import android.provider.Settings; -import android.text.Html; -import android.util.Log; - -import com.samsung.android.sdk.iap.lib.R; -import com.samsung.android.sdk.iap.lib.activity.BaseActivity; -import com.samsung.android.sdk.iap.lib.dialog.BaseDialogFragment; -import com.samsung.android.sdk.iap.lib.vo.ErrorVo; - -/** - * Created by sangbum7.kim on 2017-08-17. - */ - -public class HelperUtil { - private static final String TAG = HelperUtil.class.getSimpleName(); - - /** - * show a dialog - * - * @param activity The activity adding the fragment that displays a dialog - * @param title The title to display - * @param message The message to display - * @param positiveListener The listener to be invoked when the positive button of the dialog is pressed - * @param negativeListener The listener to be invoked when the negative button of the dialog is pressed - */ - public static void showIapErrorDialog( - final Activity activity, - String title, - String message, - final BaseDialogFragment.OnClickListener positiveListener, - final BaseDialogFragment.OnClickListener negativeListener) { - showIapErrorDialog(activity, title, message, "", positiveListener, negativeListener); - } - - /** - * show a dialog - * - * @param activity The activity adding the fragment that displays a dialog - * @param title The title to display - * @param message The message to display - * @param messageExtra The extra message to display - * @param positiveListener The listener to be invoked when the positive button of the dialog is pressed - * @param negativeListener The listener to be invoked when the negative button of the dialog is pressed - */ - public static void showIapErrorDialog( - final Activity activity, - String title, - String message, - String messageExtra, - final BaseDialogFragment.OnClickListener positiveListener, - final BaseDialogFragment.OnClickListener negativeListener) { - new BaseDialogFragment() - .setDialogTitle(title) - .setDialogMessageText(message) - .setDialogMessageExtra(messageExtra) - .setDialogPositiveButton(activity.getString(android.R.string.ok), positiveListener) - .setDialogNegativeButton(activity.getString(android.R.string.cancel), negativeListener) - .show(activity.getFragmentManager(), BaseDialogFragment.IAP_DIALOG_TAG); - } - - /** - * show a dialog to update the Galaxy Store - * - * @param activity The activity adding the fragment that displays a dialog - */ - public static void showUpdateGalaxyStoreDialog(final Activity activity) { - // TODO: both title and message will be changed as UX Guide - new BaseDialogFragment() - .setDialogTitle(activity.getString(R.string.dream_ph_pheader_couldnt_complete_purchase)) - .setDialogMessageText(activity.getString( - R.string.dream_ph_body_to_complete_this_purchase_you_need_to_update_the_galaxy_store)) - .setDialogPositiveButton( - activity.getString(android.R.string.ok), - new BaseDialogFragment.OnClickListener() { - @Override - public void onClick() { - goGalaxyStoreDetailPage(activity.getApplicationContext()); - activity.finish(); - } - }) - .setDialogNegativeButton( - activity.getString(android.R.string.cancel), - new BaseDialogFragment.OnClickListener() { - @Override - public void onClick() { - activity.finish(); - } - }) - .show(activity.getFragmentManager(), BaseDialogFragment.IAP_DIALOG_TAG); - } - - /** - * show a dialog to enable the Galaxy Store - * - * @param activity The activity adding the fragment that displays a dialog - */ - public static void showEnableGalaxyStoreDialog(final Activity activity) { - // TODO: both title and message will be changed as UX Guide - new BaseDialogFragment() - .setDialogTitle(activity.getString(R.string.dream_ph_pheader_couldnt_complete_purchase)) - .setDialogMessageText( - activity.getString(R.string.dream_ph_body_to_complete_this_purchase_you_need_to_enable_the_galaxy_store_in_settings)) - .setDialogPositiveButton( - activity.getString(android.R.string.ok), - new BaseDialogFragment.OnClickListener() { - @Override - public void onClick() { - Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); - intent.setData(Uri.parse("package:" + HelperDefine.GALAXY_PACKAGE_NAME)); - activity.startActivityForResult(intent, HelperDefine.REQUEST_CODE_IS_ENABLE_APPS); - - activity.finish(); - } - }) - .setDialogNegativeButton( - activity.getString(android.R.string.cancel), - new BaseDialogFragment.OnClickListener() { - @Override - public void onClick() { - activity.finish(); - } - }) - .show(activity.getFragmentManager(), BaseDialogFragment.IAP_DIALOG_TAG); - } - - /** - * show a dialog to notice that the Galaxy Store is invalid - * - * @param activity The activity adding the fragment that displays a dialog - */ - public static void showInvalidGalaxyStoreDialog(final Activity activity) { - final String ERROR_ISSUER_IAP_CLIENT = "IC"; - final int ERROR_CODE_INVALID_GALAXY_STORE = 10002; - - String source = String.format( - activity.getString( - R.string.dream_ph_body_contact_p1sscustomer_servicep2ss_for_more_information_n_nerror_code_c_p3ss), - "", "", - ERROR_ISSUER_IAP_CLIENT + ERROR_CODE_INVALID_GALAXY_STORE); - - CharSequence errorMessage; - // fromHtml(String) was deprecated in N OS - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) { - errorMessage = Html.fromHtml(source); - } else { - errorMessage = Html.fromHtml(source, Html.FROM_HTML_MODE_LEGACY); - } - new BaseDialogFragment() - .setDialogTitle(activity.getString(R.string.dream_ph_pheader_couldnt_complete_purchase)) - .setDialogMessageText(errorMessage) - .setDialogMessageExtra(ERROR_ISSUER_IAP_CLIENT + ERROR_CODE_INVALID_GALAXY_STORE) - .setDialogPositiveButton( - activity.getString(android.R.string.ok), - new BaseDialogFragment.OnClickListener() { - @Override - public void onClick() { - activity.finish(); - } - }) - .show(activity.getFragmentManager(), BaseDialogFragment.IAP_DIALOG_TAG); - } - - private static void goGalaxyStoreDetailPage(Context context) { - // Link of Galaxy Store for IAP install - // ------------------------------------------------------------ - Uri appsDeepLink = Uri.parse("samsungapps://StoreVersionInfo/"); - // ------------------------------------------------------------ - - Intent intent = new Intent(); - intent.setData(appsDeepLink); - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR1) { - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | - Intent.FLAG_ACTIVITY_CLEAR_TOP | - Intent.FLAG_INCLUDE_STOPPED_PACKAGES); - } else { - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | - Intent.FLAG_ACTIVITY_CLEAR_TOP); - } - - if (intent.resolveActivity(context.getPackageManager()) != null) { - context.startActivity(intent); - } - } - - /** - * Check that Galaxy Store is installed - * - * @param _context Context - * @return If it is true Galaxy Store is installed. otherwise, not installed. - */ - static public boolean isInstalledAppsPackage(Context _context) { - PackageManager pm = _context.getPackageManager(); - try { - PackageInfo packageInfo = pm.getPackageInfo(HelperDefine.GALAXY_PACKAGE_NAME, PackageManager.GET_META_DATA); - int versionType = packageInfo.versionCode / 100000000; - Log.i(TAG, "isInstalledAppsPackage : " + packageInfo.versionCode + ", " + versionType); - switch (versionType) { - case 4: { - return packageInfo.versionCode >= HelperDefine.APPS_PACKAGE_VERSION; - } - case 5: { - return true; -// return packageInfo.versionCode >= HelperDefine.APPS_PACKAGE_VERSION_GO; - } - case 6: { - return packageInfo.versionCode >= HelperDefine.APPS_PACKAGE_VERSION_INDIA; - } - // Unverified version - default: - return true; - } - } catch (PackageManager.NameNotFoundException e) { - e.printStackTrace(); - return false; - } - } - - static public boolean isEnabledAppsPackage(Context context) { - //// TODO: 2017-08-16 Make sure the status is normal - int status = context.getPackageManager().getApplicationEnabledSetting(HelperDefine.GALAXY_PACKAGE_NAME); - Log.i(TAG, "isEnabledAppsPackage: status " + status); - return !((status == PackageManager.COMPONENT_ENABLED_STATE_DISABLED) || (status == PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER)); - } - - - /** - * check validation of installed Galaxy Store in your device - * - * @param _context - * @return If it is true Galaxy Store is valid. otherwise, is not valid. - */ - static public boolean isValidAppsPackage(Context _context) { - boolean result = true; - try { - Signature[] sigs = _context.getPackageManager().getPackageInfo( - HelperDefine.GALAXY_PACKAGE_NAME, - PackageManager.GET_SIGNATURES).signatures; - if (sigs[0].hashCode() != HelperDefine.APPS_SIGNATURE_HASHCODE) { - result = false; - } - } catch (Exception e) { - e.printStackTrace(); - result = false; - } - - return result; - } - - /** - * SamsungAccount authentication - * - * @param _activity - */ - static public boolean startAccountActivity(final Activity _activity) { - ComponentName com = new ComponentName(HelperDefine.GALAXY_PACKAGE_NAME, - HelperDefine.IAP_PACKAGE_NAME + ".activity.AccountActivity"); - Context context = _activity.getApplicationContext(); - - Intent intent = new Intent(); - intent.setComponent(com); - - if (intent.resolveActivity(context.getPackageManager()) != null) { - _activity.startActivityForResult(intent, - HelperDefine.REQUEST_CODE_IS_ACCOUNT_CERTIFICATION); - return true; - } - return false; - } - - /** - * go to about page of Galaxy Store in order to install IAP package. - */ - static public void installAppsPackage(final BaseActivity _activity) { - // Set error in order to notify result to third-party application. - // ==================================================================== - ErrorVo errorVo = new ErrorVo(); - _activity.setErrorVo(errorVo); - - errorVo.setError( - HelperDefine.IAP_PAYMENT_IS_CANCELED, - _activity.getString(R.string.mids_sapps_pop_payment_canceled)); - // ==================================================================== - - // Show information dialog - // ==================================================================== - showUpdateGalaxyStoreDialog(_activity); - // ==================================================================== - } - - static public int checkAppsPackage(Context _context) { - // 1. If Galaxy Store is installed - // ==================================================================== - if (HelperUtil.isInstalledAppsPackage(_context)) { - // 1) If Galaxy Store is enabled - // ================================================================ - if (!HelperUtil.isEnabledAppsPackage(_context)) { - return HelperDefine.DIALOG_TYPE_DISABLE_APPLICATION; - // ================================================================ - // 2) If Galaxy Store is valid - // ================================================================ - } else if (HelperUtil.isValidAppsPackage(_context)) { - return HelperDefine.DIALOG_TYPE_NONE; - } else { - // ------------------------------------------------------------ - // show alert dialog if Galaxy Store is invalid - // ------------------------------------------------------------ - return HelperDefine.DIALOG_TYPE_INVALID_PACKAGE; - // ------------------------------------------------------------ - } - // ================================================================ - - // ==================================================================== - // 2. If Galaxy Store is not installed - // ==================================================================== - } else { - // When user click the OK button on the dialog, - // go to Galaxy Store Detail page - // ==================================================================== - return HelperDefine.DIALOG_TYPE_APPS_DETAIL; - } - // ==================================================================== - } -} diff --git a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/helper/IapHelper.java b/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/helper/IapHelper.java deleted file mode 100644 index a31cce9b8..000000000 --- a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/helper/IapHelper.java +++ /dev/null @@ -1,642 +0,0 @@ -package com.samsung.android.sdk.iap.lib.helper; - -import android.content.ComponentName; -import android.content.Context; -import android.content.Intent; -import android.content.ServiceConnection; -import android.os.AsyncTask.Status; -import android.os.IBinder; -import android.text.TextUtils; -import android.util.Base64; -import android.util.Log; - -import com.samsung.android.iap.IAPConnector; -import com.samsung.android.sdk.iap.lib.R; -import com.samsung.android.sdk.iap.lib.activity.CheckPackageActivity; -import com.samsung.android.sdk.iap.lib.activity.PaymentActivity; -import com.samsung.android.sdk.iap.lib.helper.HelperDefine; -import com.samsung.android.sdk.iap.lib.helper.task.ConsumePurchasedItemsTask; -import com.samsung.android.sdk.iap.lib.helper.task.GetOwnedListTask; -import com.samsung.android.sdk.iap.lib.helper.task.GetProductsDetailsTask; -import com.samsung.android.sdk.iap.lib.listener.OnConsumePurchasedItemsListener; -import com.samsung.android.sdk.iap.lib.listener.OnGetOwnedListListener; -import com.samsung.android.sdk.iap.lib.listener.OnGetProductsDetailsListener; -import com.samsung.android.sdk.iap.lib.listener.OnPaymentListener; -import com.samsung.android.sdk.iap.lib.service.BaseService; -import com.samsung.android.sdk.iap.lib.service.ConsumePurchasedItems; -import com.samsung.android.sdk.iap.lib.service.OwnedProduct; -import com.samsung.android.sdk.iap.lib.service.ProductsDetails; -import com.samsung.android.sdk.iap.lib.vo.ErrorVo; - -import java.util.ArrayList; - -public class IapHelper extends HelperDefine { - private static final String TAG = IapHelper.class.getSimpleName(); - - /** - * Please double-check this mode before release. - */ - private int mMode = HelperDefine.OperationMode.OPERATION_MODE_PRODUCTION.getValue(); - // ======================================================================== - - private Context mContext = null; - - private IAPConnector mIapConnector = null; - private ServiceConnection mServiceConn = null; - - // AsyncTask for API - // ======================================================================== - private com.samsung.android.sdk.iap.lib.helper.task.GetProductsDetailsTask mGetProductsDetailsTask = null; - private com.samsung.android.sdk.iap.lib.helper.task.GetOwnedListTask mGetOwnedListTask = null; - private com.samsung.android.sdk.iap.lib.helper.task.ConsumePurchasedItemsTask mConsumePurchasedItemsTask = null; - // ======================================================================== - - private ArrayList mServiceQueue = new ArrayList(); - private BaseService mCurrentService = null; - - // API listener - private HelperListenerManager mListenerInstance = null; - - private static IapHelper mInstance = null; - - // State of IAP Service - // ======================================================================== - private int mState = HelperDefine.STATE_TERM; - private final static Object mOperationLock = new Object(); - static boolean mOperationRunningFlag = false; - private boolean mShowErrorDialog = true; - - // ######################################################################## - // ######################################################################## - // 1. SamsungIAPHeler object create and reference - // ######################################################################## - // ######################################################################## - - /** - * IapHelper constructor - * - * @param _context - */ - private IapHelper(Context _context) { - _setContextAndMode(_context); - _setListenerInstance(); - } - - /** - * IapHelper singleton reference method - * - * @param _context Context - */ - public static IapHelper getInstance(Context _context) { - Log.i(TAG, "IAP Helper version : " + HelperDefine.HELPER_VERSION); - if (null == mInstance) { - mInstance = new IapHelper(_context); - } else { - mInstance._setContextAndMode(_context); - } - - return mInstance; - } - - public void setOperationMode(OperationMode _mode) { - mMode = _mode.getValue(); - } - - private void _setContextAndMode(Context _context) { - mContext = _context.getApplicationContext(); - } - - private void _setListenerInstance() { - if (mListenerInstance != null) { - mListenerInstance.destroy(); - mListenerInstance = null; - } - mListenerInstance = HelperListenerManager.getInstance(); - } - - - // ######################################################################## - // ######################################################################## - // 2. Binding for IAPService - // ######################################################################## - // ######################################################################## - - /** - * bind to IAPService - */ - public void bindIapService() { - Log.i(TAG, "bindIapService()"); - // exit If already bound - // ==================================================================== - if (mState >= HelperDefine.STATE_BINDING) { - onBindIapFinished(HelperDefine.IAP_RESPONSE_RESULT_OK); - return; - } - // ==================================================================== - - // Connection to IAP service - // ==================================================================== - mServiceConn = new ServiceConnection() { - @Override - public void onServiceDisconnected(ComponentName _name) { - Log.i(TAG, "IAP Service Disconnected..."); - - mState = HelperDefine.STATE_TERM; - mIapConnector = null; - mServiceConn = null; - } - - @Override - public void onServiceConnected - ( - ComponentName _name, - IBinder _service - ) { - Log.i(TAG, "IAP Service Connected..."); - mIapConnector = IAPConnector.Stub.asInterface(_service); - - if (mIapConnector != null) { - mState = HelperDefine.STATE_BINDING; - onBindIapFinished(HelperDefine.IAP_RESPONSE_RESULT_OK); - } else { - mState = HelperDefine.STATE_TERM; - onBindIapFinished(HelperDefine.IAP_RESPONSE_RESULT_UNAVAILABLE); - } - } - }; - // ==================================================================== - Intent serviceIntent = new Intent(); - serviceIntent.setComponent(new ComponentName(HelperDefine.GALAXY_PACKAGE_NAME, HelperDefine.IAP_SERVICE_NAME)); - - // bind to IAPService - // ==================================================================== - try { - if (mContext == null || mContext.bindService(serviceIntent, - mServiceConn, - Context.BIND_AUTO_CREATE) == false) { - mState = HelperDefine.STATE_TERM; - onBindIapFinished(HelperDefine.IAP_RESPONSE_RESULT_UNAVAILABLE); - } - } catch (SecurityException e) { - Log.e(TAG, "SecurityException : " + e); - onBindIapFinished(HelperDefine.IAP_RESPONSE_RESULT_UNAVAILABLE); - } - // ==================================================================== - } - - - protected void onBindIapFinished(int _result) { - Log.i(TAG, "onBindIapFinished"); - if (_result == HelperDefine.IAP_RESPONSE_RESULT_OK) { - if (getServiceProcess() != null) { - getServiceProcess().runServiceProcess(); - } - } - // ============================================================ - // 2) If IAPService is not bound. - // ============================================================ - else { - if (getServiceProcess() != null) { - ErrorVo errorVo = new ErrorVo(); - errorVo.setError(HelperDefine.IAP_ERROR_INITIALIZATION, - mContext.getString(R.string.mids_sapps_pop_unknown_error_occurred) + "[Lib_Bind]"); - errorVo.setShowDialog(mShowErrorDialog); - getServiceProcess().setErrorVo(errorVo); - getServiceProcess().onEndProcess(); - } - } - } - - - /* ######################################################################## - * ######################################################################## - * 3. IAP APIs. - * ######################################################################## - * ##################################################################### */ - /////////////////////////////////////////////////////////////////////////// - // 3.1) getProductsDetails /////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////////////// - - /** - *
-     * This load item list by starting productActivity in this library, and the result will be sent to {@link OnGetProductsDetailsListener} Callback
-     * interface.
-     *
-     * 
- * - * @param _productIds - * @param _onGetProductsDetailsListener - */ - public void getProductsDetails - ( - String _productIds, - OnGetProductsDetailsListener _onGetProductsDetailsListener - ) { - try { - if (_onGetProductsDetailsListener == null) { - throw new Exception("_onGetProductsDetailsListener is null"); - } - - ProductsDetails productsDetails = new ProductsDetails(mInstance, mContext, _onGetProductsDetailsListener); - productsDetails.setProductId(_productIds); - setServiceProcess(productsDetails); - - IapStartInProgressFlag(); - checkAppsPackage(); - } catch (IapInProgressException e) { - e.printStackTrace(); - } catch (Exception e) { - e.printStackTrace(); - } - } - - /** - * execute GetProductsDetailsTask - */ - public boolean safeGetProductsDetails - ( - ProductsDetails _baseService, - String _productIDs, - boolean _showErrorDialog - ) { - try { - if (mGetProductsDetailsTask != null && - mGetProductsDetailsTask.getStatus() != Status.FINISHED) { - mGetProductsDetailsTask.cancel(true); - } - if (mIapConnector == null || mContext == null) { - return false; - } else { - mGetProductsDetailsTask = new com.samsung.android.sdk.iap.lib.helper.task.GetProductsDetailsTask(_baseService, - mIapConnector, - mContext, - _productIDs, - _showErrorDialog, - mMode); - mGetProductsDetailsTask.execute(); - return true; - } - } catch (Exception e) { - e.printStackTrace(); - return false; - } - } - - - /////////////////////////////////////////////////////////////////////////// - // 3.2) getOwnedList ////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////////////// - - /** - *
-     * This load owned product list by starting OwnedListActivity in this library, and the result will be sent to {@link OnGetOwnedListListener}
-     * Callback interface.
-     *
-     * 
- * - * @param _productType - * @param _onGetOwnedListListener - */ - public boolean getOwnedList - ( - String _productType, - OnGetOwnedListListener _onGetOwnedListListener - ) { - Log.i(TAG, "getOwnedList"); - try { - if (_onGetOwnedListListener == null) { - throw new Exception("_onGetOwnedListListener is null"); - } - if (TextUtils.isEmpty(_productType)) { - throw new Exception("_productType is null or empty"); - } - - OwnedProduct ownedProduct = new OwnedProduct(mInstance, mContext, _onGetOwnedListListener); - ownedProduct.setProductType(_productType); - setServiceProcess(ownedProduct); - - IapStartInProgressFlag(); - checkAppsPackage(); - } catch (IapInProgressException e) { - e.printStackTrace(); - } catch (Exception e) { - e.printStackTrace(); - return false; - } - return true; - } - - /** - * execute GetOwnedListTask - */ - public boolean safeGetOwnedList - ( - OwnedProduct _baseService, - String _productType, - boolean _showErrorDialog - ) { - try { - if (mGetOwnedListTask != null && - mGetOwnedListTask.getStatus() != Status.FINISHED) { - mGetOwnedListTask.cancel(true); - } - - if (mIapConnector == null || mContext == null) { - return false; - } else { - mGetOwnedListTask = new com.samsung.android.sdk.iap.lib.helper.task.GetOwnedListTask(_baseService, - mIapConnector, - mContext, - _productType, - _showErrorDialog, - mMode); - - mGetOwnedListTask.execute(); - return true; - } - } catch (Exception e) { - e.printStackTrace(); - return false; - } - } - - /////////////////////////////////////////////////////////////////////////// - // 3.3) consumePurchasedItems ///////////////////////////////////////////// - /////////////////////////////////////////////////////////////////////////// - - /** - *
-     * This load item list by starting OwnedListActivity in this library, and the result will be sent to {@link OnConsumePurchasedItemsListener}
-     * Callback interface.
-     *
-     * 
- * - * @param _purchaseIds - * @param _onConsumePurchasedItemsListener - */ - public boolean consumePurchasedItems - ( - String _purchaseIds, - OnConsumePurchasedItemsListener _onConsumePurchasedItemsListener - ) { - try { - if (_onConsumePurchasedItemsListener == null) { - throw new Exception("_onConsumePurchasedItemsListener is null"); - } - if (TextUtils.isEmpty(_purchaseIds)) { - throw new Exception("_purchaseIds is null or empty"); - } - - ConsumePurchasedItems consumePurchasedItems = new ConsumePurchasedItems(mInstance, mContext, _onConsumePurchasedItemsListener); - consumePurchasedItems.setPurchaseIds(_purchaseIds); - setServiceProcess(consumePurchasedItems); - - IapStartInProgressFlag(); - checkAppsPackage(); - } catch (IapInProgressException e) { - e.printStackTrace(); - } catch (Exception e) { - e.printStackTrace(); - return false; - } - return true; - } - - /** - * execute ConsumePurchasedItemsTask - */ - public boolean safeConsumePurchasedItems - ( - ConsumePurchasedItems _baseService, - String _purchaseIds, - boolean _showErrorDialog - ) { - try { - if (mConsumePurchasedItemsTask != null && - mConsumePurchasedItemsTask.getStatus() != Status.FINISHED) { - mConsumePurchasedItemsTask.cancel(true); - } - - mConsumePurchasedItemsTask = new com.samsung.android.sdk.iap.lib.helper.task.ConsumePurchasedItemsTask(_baseService, - mIapConnector, - mContext, - _purchaseIds, - _showErrorDialog, - mMode); - mConsumePurchasedItemsTask.execute(); - return true; - } catch (Exception e) { - e.printStackTrace(); - return false; - } - } - - /////////////////////////////////////////////////////////////////////////// - // 3.4) startPurchase / /////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////////////// - - /** - *
-     * Start payment process by starting {@link PaymentActivity} in this library, and result will be sent to {@link OnPaymentListener} interface. To
-     * do that, PaymentActivity must be described in AndroidManifest.xml of third-party application as below.
-     * 

- * <activity android:name="com.sec.android.iap.lib.activity.PaymentActivity" android:theme="@style/Theme.Empty" - * android:configChanges="orientation|screenSize"/> - *

- * - * @param _itemId - * @param _passThroughParam - * @param _onPaymentListener - */ - public boolean startPayment - ( - String _itemId, - String _passThroughParam, - OnPaymentListener _onPaymentListener - ) { - try { - if (_onPaymentListener == null) { - throw new Exception("OnPaymentListener is null"); - } - if (TextUtils.isEmpty(_itemId)) { - throw new Exception("_itemId is null or empty"); - } - if (_passThroughParam != null && _passThroughParam.getBytes("UTF-8").length > HelperDefine.PASSTHROGUH_MAX_LENGTH) { - throw new Exception("PassThroughParam length exceeded (MAX " + HelperDefine.PASSTHROGUH_MAX_LENGTH + ")"); - } - - IapStartInProgressFlag(); - mListenerInstance.setOnPaymentListener(_onPaymentListener); - - Intent intent = new Intent(mContext, PaymentActivity.class); - intent.putExtra("ItemId", _itemId); - String encodedPassThroughParam = ""; - if (_passThroughParam != null) { - encodedPassThroughParam = Base64.encodeToString(_passThroughParam.getBytes("UTF-8"), 0); - } - intent.putExtra("PassThroughParam", encodedPassThroughParam); - intent.putExtra("ShowErrorDialog", mShowErrorDialog); - intent.putExtra("OperationMode", mMode); - Log.i(TAG, "startPayment: " + mMode); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - - mContext.startActivity(intent); - } catch (IapInProgressException e) { - e.printStackTrace(); - return false; - } catch (Exception e) { - e.printStackTrace(); - return false; - } - return true; - } - - /** - *
-     * Start payment process by starting {@link PaymentActivity} in this library, and result will be sent to {@link OnPaymentListener} interface. To
-     * do that, PaymentActivity must be described in AndroidManifest.xml of third-party application as below.
-     * 

- * <activity android:name="com.sec.android.iap.lib.activity.PaymentActivity" android:theme="@style/Theme.Empty" - * android:configChanges="orientation|screenSize"/> - *

- * - * @param _itemId - * @param _passThroughParam - * @param _showSuccessDialog Unused parameter. - * @param _onPaymentListener - * @deprecated - */ - public boolean startPayment - ( - String _itemId, - String _passThroughParam, - boolean _showSuccessDialog, - OnPaymentListener _onPaymentListener - ) { - return startPayment(_itemId, _passThroughParam, _onPaymentListener); - } - - // ######################################################################## - // ######################################################################## - // 4. etc - // ######################################################################## - // ######################################################################## - - /** - * Stop running task, {@link GetProductsDetailsTask}, {@link ConsumePurchasedItemsTask} or {@link GetOwnedListTask} } before dispose(). - */ - private void stopTasksIfNotFinished() { - if (mGetProductsDetailsTask != null) { - if (mGetProductsDetailsTask.getStatus() != Status.FINISHED) { - Log.e(TAG, "stopTasksIfNotFinished: mGetProductsDetailsTask Status > " + mGetProductsDetailsTask.getStatus()); - mGetProductsDetailsTask.cancel(true); - } - } - - if (mGetOwnedListTask != null) { - if (mGetOwnedListTask.getStatus() != Status.FINISHED) { - Log.e(TAG, "stopTasksIfNotFinished: mGetOwnedListTask Status > " + mGetOwnedListTask.getStatus()); - mGetOwnedListTask.cancel(true); - } - } - - if (mConsumePurchasedItemsTask != null) { - if (mConsumePurchasedItemsTask.getStatus() != Status.FINISHED) { - Log.e(TAG, "stopTasksIfNotFinished: mConsumePurchasedItemsTask Status > " + mConsumePurchasedItemsTask.getStatus()); - mConsumePurchasedItemsTask.cancel(true); - } - } - } - - /** - * Unbind from IAPService and release used resources. - */ - public void dispose() { - stopTasksIfNotFinished(); - - if (mContext != null && mServiceConn != null) { - mContext.unbindService(mServiceConn); - } - - mState = HelperDefine.STATE_TERM; - mServiceConn = null; - mIapConnector = null; - clearServiceProcess(); - IapEndInProgressFlag(); - } - - void IapStartInProgressFlag() throws IapInProgressException { - Log.i(TAG, "IapStartInProgressFlag"); - synchronized (mOperationLock) { - if (mOperationRunningFlag) { - throw new IapInProgressException("another operation is running"); - } - mOperationRunningFlag = true; - } - } - - void IapEndInProgressFlag() { - Log.i(TAG, "IapEndInProgressFlag"); - synchronized (mOperationLock) { - mOperationRunningFlag = false; - } - } - - protected static class IapInProgressException extends Exception { - public IapInProgressException(String message) { - super(message); - } - } - - void checkAppsPackage() { - int checkResult = HelperUtil.checkAppsPackage(mContext); - if (checkResult == HelperDefine.DIALOG_TYPE_NONE) { - bindIapService(); - } else { - Intent intent = new Intent(mContext, CheckPackageActivity.class); - intent.putExtra("DialogType", checkResult); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - mContext.startActivity(intent); - } - } - - /** - * Sets whether error popup is displayed when payment is finished. - */ - public void setShowErrorDialog(boolean _showErrorDialog) { - this.mShowErrorDialog = _showErrorDialog; - } - - public boolean getShowErrorDialog() { - return this.mShowErrorDialog; - } - - public BaseService getServiceProcess() { - return getServiceProcess(false); - } - - public BaseService getServiceProcess(boolean _nextProcess) { - if (mCurrentService == null || _nextProcess) { - mCurrentService = null; - if (mServiceQueue.size() > 0) { - mCurrentService = mServiceQueue.get(0); - mServiceQueue.remove(0); - } - } - return mCurrentService; - } - - private void setServiceProcess(BaseService _baseService) { - mServiceQueue.add(_baseService); - } - - private void clearServiceProcess() { - do { - if (mCurrentService != null) { - mCurrentService.releaseProcess(); - } - mCurrentService = getServiceProcess(true); - } while (mCurrentService != null); - mServiceQueue.clear(); - } -} \ No newline at end of file diff --git a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/helper/task/BaseTask.java b/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/helper/task/BaseTask.java deleted file mode 100644 index c284cef37..000000000 --- a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/helper/task/BaseTask.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.samsung.android.sdk.iap.lib.helper.task; - -import android.content.Context; -import android.os.AsyncTask; -import android.util.Log; - -import com.samsung.android.iap.IAPConnector; -import com.samsung.android.sdk.iap.lib.R; -import com.samsung.android.sdk.iap.lib.helper.HelperDefine; -import com.samsung.android.sdk.iap.lib.service.BaseService; -import com.samsung.android.sdk.iap.lib.vo.ErrorVo; - -/** - * Created by sangbum7.kim on 2017-09-01. - */ - -public class BaseTask extends AsyncTask { - private static final String TAG = BaseTask.class.getSimpleName(); - - protected BaseService mBaseService; - protected IAPConnector mIapConnector; - protected Context mContext; - protected int mMode; - protected String mPackageName = ""; - - protected ErrorVo mErrorVo = new ErrorVo(); - - public BaseTask(BaseService _baseService, - IAPConnector _iapConnector, - Context _context, - boolean _showErrorDialog, - int _mode) { - - mBaseService = _baseService; - mIapConnector = _iapConnector; - mContext = _context; - if (mContext != null) { - mPackageName = mContext.getPackageName(); - } - mMode = _mode; - mErrorVo.setShowDialog(_showErrorDialog); - mBaseService.setErrorVo(mErrorVo); - } - - @Override - protected Boolean doInBackground(String... params) { - return true; - } - - @Override - protected void onPostExecute(Boolean _result) { - // ================================================================ - if (!_result) { - mErrorVo.setError(mErrorVo.getErrorCode(), mContext.getString(R.string.mids_sapps_pop_unknown_error_occurred)); - } - // ================================================================ - - mBaseService.onEndProcess(); - } - - @Override - protected void onCancelled() { - Log.e(TAG, "onCancelled: task cancelled"); - } -} diff --git a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/helper/task/ConsumePurchasedItemsTask.java b/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/helper/task/ConsumePurchasedItemsTask.java deleted file mode 100644 index 95b7776be..000000000 --- a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/helper/task/ConsumePurchasedItemsTask.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.samsung.android.sdk.iap.lib.helper.task; - -import android.content.Context; -import android.os.Bundle; -import android.util.Log; - -import com.samsung.android.iap.IAPConnector; -import com.samsung.android.sdk.iap.lib.R; -import com.samsung.android.sdk.iap.lib.helper.HelperDefine; -import com.samsung.android.sdk.iap.lib.service.ConsumePurchasedItems; -import com.samsung.android.sdk.iap.lib.vo.ConsumeVo; - -import java.util.ArrayList; - -/** - * Asynchronized Task to load a list of items - */ -public class ConsumePurchasedItemsTask extends BaseTask { - private static final String TAG = GetOwnedListTask.class.getSimpleName(); - private String mPurchaseIds = ""; - - ArrayList mConsumeList = new ArrayList(); - - public ConsumePurchasedItemsTask - ( - ConsumePurchasedItems _baseService, - IAPConnector _iapConnector, - Context _context, - String _purchaseIds, - boolean _showErrorDialog, - int _mode - ) { - super(_baseService, _iapConnector, _context, _showErrorDialog, _mode); - mPurchaseIds = _purchaseIds; - - _baseService.setConsumeList(mConsumeList); - } - - @Override - protected Boolean doInBackground(String... params) { - try { - // 1) call getItemList() method of IAPService - // ============================================================ - Bundle bundle = mIapConnector.consumePurchasedItems( - mPackageName, - mPurchaseIds, - mMode); - // ============================================================ - - // 2) save status code, error string and extra String. - // ============================================================ - if (bundle != null) { - mErrorVo.setError(bundle.getInt(HelperDefine.KEY_NAME_STATUS_CODE), - bundle.getString(HelperDefine.KEY_NAME_ERROR_STRING)); - } else { - mErrorVo.setError( - HelperDefine.IAP_ERROR_COMMON, - mContext.getString( - R.string.mids_sapps_pop_unknown_error_occurred)); - } - // ============================================================ - - // 3) If item list is loaded successfully, - // make item list by Bundle data - // ============================================================ - // ============================================================ - - // 3) If item list is loaded successfully, - // make item list by Bundle data - // ============================================================ - if (mErrorVo.getErrorCode() == HelperDefine.IAP_ERROR_NONE) { - if (bundle != null) { - ArrayList consumePurchasedItemsStringList = - bundle.getStringArrayList(HelperDefine.KEY_NAME_RESULT_LIST); - - if (consumePurchasedItemsStringList != null) { - for (String consumePurchasedItemString : consumePurchasedItemsStringList) { - ConsumeVo consumeVo = new ConsumeVo(consumePurchasedItemString); - mConsumeList.add(consumeVo); - } - } else { - Log.i(TAG, "Bundle Value 'RESULT_LIST' is null."); - } - } - } - // ============================================================ - // 4) If failed, print log. - // ============================================================ - else { - Log.e(TAG, mErrorVo.getErrorString()); - } - // ============================================================ - } catch (Exception e) { - mErrorVo.setError( - HelperDefine.IAP_ERROR_COMMON, - mContext.getString( - R.string.mids_sapps_pop_unknown_error_occurred)); - - e.printStackTrace(); - return false; - } - - return true; - } -} diff --git a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/helper/task/GetOwnedListTask.java b/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/helper/task/GetOwnedListTask.java deleted file mode 100644 index a52b7d21d..000000000 --- a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/helper/task/GetOwnedListTask.java +++ /dev/null @@ -1,112 +0,0 @@ -package com.samsung.android.sdk.iap.lib.helper.task; - -import android.content.Context; -import android.os.Bundle; -import android.util.Log; - -import com.samsung.android.iap.IAPConnector; -import com.samsung.android.sdk.iap.lib.R; -import com.samsung.android.sdk.iap.lib.helper.HelperDefine; -import com.samsung.android.sdk.iap.lib.service.OwnedProduct; -import com.samsung.android.sdk.iap.lib.vo.OwnedProductVo; - -import java.util.ArrayList; - -/** - * Asynchronized Task to load a list of items - */ -public class GetOwnedListTask extends BaseTask { - private static final String TAG = GetOwnedListTask.class.getSimpleName(); - private String mProductType = ""; - ArrayList mOwnedList = new ArrayList(); - - public GetOwnedListTask - ( - OwnedProduct _baseService, - IAPConnector _iapConnector, - Context _context, - String _productType, - boolean _showErrorDialog, - int _mode - ) { - super(_baseService, _iapConnector, _context, _showErrorDialog, _mode); - mProductType = _productType; - _baseService.setOwnedList(mOwnedList); - } - - @Override - protected Boolean doInBackground(String... params) { - Log.i(TAG, "doInBackground: start"); - try { - int pagingIndex = 1; - do { - Log.i(TAG, "doInBackground: pagingIndex = " + pagingIndex); - // 1) call getItemList() method of IAPService - // ============================================================ - Bundle bundle = mIapConnector.getOwnedList( - mPackageName, - mProductType, - pagingIndex, - mMode); - // ============================================================ - - // 2) save status code, error string and extra String. - // ============================================================ - if (bundle != null) { - mErrorVo.setError(bundle.getInt(HelperDefine.KEY_NAME_STATUS_CODE), - bundle.getString(HelperDefine.KEY_NAME_ERROR_STRING)); - } else { - mErrorVo.setError( - HelperDefine.IAP_ERROR_COMMON, - mContext.getString( - R.string.mids_sapps_pop_unknown_error_occurred)); - } - // ============================================================ - - // 3) If item list is loaded successfully, - // make item list by Bundle data - // ============================================================ - if (mErrorVo.getErrorCode() == HelperDefine.IAP_ERROR_NONE) { - if (bundle != null) { - String nextPagingIndex = bundle.getString(HelperDefine.NEXT_PAGING_INDEX); - if (nextPagingIndex != null && nextPagingIndex.length() > 0) { - pagingIndex = Integer.parseInt(nextPagingIndex); - } else { - pagingIndex = -1; - } - - ArrayList ownedProductStringList = - bundle.getStringArrayList(HelperDefine.KEY_NAME_RESULT_LIST); - - if (ownedProductStringList != null) { - for (String ownedProductString : ownedProductStringList) { - OwnedProductVo ownedPrroductVo = new OwnedProductVo(ownedProductString); - mOwnedList.add(ownedPrroductVo); - } - } else { - Log.i(TAG, "Bundle Value 'RESULT_LIST' is null."); - } - } - } - // ============================================================ - // 4) If failed, print log. - // ============================================================ - else { - Log.e(TAG, mErrorVo.getErrorString()); - return true; - } - // ============================================================ - } while (pagingIndex > 0); - } catch (Exception e) { - mErrorVo.setError( - HelperDefine.IAP_ERROR_COMMON, - mContext.getString( - R.string.mids_sapps_pop_unknown_error_occurred)); - - e.printStackTrace(); - return false; - } - - return true; - } -} diff --git a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/helper/task/GetProductsDetailsTask.java b/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/helper/task/GetProductsDetailsTask.java deleted file mode 100644 index 65002d7b0..000000000 --- a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/helper/task/GetProductsDetailsTask.java +++ /dev/null @@ -1,115 +0,0 @@ -package com.samsung.android.sdk.iap.lib.helper.task; - -import android.content.Context; -import android.os.Bundle; -import android.util.Log; - -import com.samsung.android.iap.IAPConnector; -import com.samsung.android.sdk.iap.lib.R; -import com.samsung.android.sdk.iap.lib.helper.HelperDefine; -import com.samsung.android.sdk.iap.lib.service.ProductsDetails; -import com.samsung.android.sdk.iap.lib.vo.ProductVo; - -import java.util.ArrayList; - -/** - * Asynchronized Task to load a list of items - */ -public class GetProductsDetailsTask extends BaseTask { - private static final String TAG = GetProductsDetailsTask.class.getSimpleName(); - private String mProductIds = ""; - ArrayList mProductsDetails = new ArrayList(); - - public GetProductsDetailsTask - ( - ProductsDetails _baseService, - IAPConnector _iapConnector, - Context _context, - String _productIDs, - boolean _showErrorDialog, - int _mode - ) { - super(_baseService, _iapConnector, _context, _showErrorDialog, _mode); - mProductIds = _productIDs; - - _baseService.setProductsDetails(mProductsDetails); - } - - @Override - protected Boolean doInBackground(String... params) { - try { - int pagingIndex = 1; - do { - // 1) call getProductsDetails() method of IAPService - // ---- Order Priority ---- - // 1. if productIds is not empty, the infomations abouts products included in the productIds are returned - // 2. if productIds is empty, the infomations about all products in this package are returned on a page by page - // ============================================================ - Bundle bundle = mIapConnector.getProductsDetails( - mPackageName, - mProductIds, - pagingIndex, - mMode); - // ============================================================ - - // 2) save status code, error string and extra String. - // ============================================================ - if (bundle != null) { - mErrorVo.setError(bundle.getInt(HelperDefine.KEY_NAME_STATUS_CODE), - bundle.getString(HelperDefine.KEY_NAME_ERROR_STRING)); - } else { - mErrorVo.setError( - HelperDefine.IAP_ERROR_COMMON, - mContext.getString( - R.string.mids_sapps_pop_unknown_error_occurred)); - } - // ============================================================ - - // 3) If item list is loaded successfully, - // make item list by Bundle data - // ============================================================ - if (mErrorVo.getErrorCode() == HelperDefine.IAP_ERROR_NONE) { - if (bundle != null) { - String nextPagingIndex = bundle.getString(HelperDefine.NEXT_PAGING_INDEX); - if (nextPagingIndex != null && nextPagingIndex.length() > 0) { - pagingIndex = Integer.parseInt(nextPagingIndex); - Log.i(TAG, "PagingIndex = " + nextPagingIndex); - } else { - pagingIndex = -1; - } - - ArrayList productStringList = - bundle.getStringArrayList(HelperDefine.KEY_NAME_RESULT_LIST); - - if (productStringList != null) { - for (String productString : productStringList) { - ProductVo productVo = new ProductVo(productString); - mProductsDetails.add(productVo); - } - } else { - Log.i(TAG, "Bundle Value 'RESULT_LIST' is null."); - } - } - } - // ============================================================ - // 4) If failed, print log. - // ============================================================ - else { - Log.e(TAG, mErrorVo.getErrorString()); - return true; - } - // ============================================================ - } while (pagingIndex > 0); - } catch (Exception e) { - mErrorVo.setError( - HelperDefine.IAP_ERROR_COMMON, - mContext.getString( - R.string.mids_sapps_pop_unknown_error_occurred)); - - e.printStackTrace(); - return false; - } - - return true; - } -} diff --git a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/listener/OnConsumePurchasedItemsListener.java b/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/listener/OnConsumePurchasedItemsListener.java deleted file mode 100644 index 4311cde1b..000000000 --- a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/listener/OnConsumePurchasedItemsListener.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.samsung.android.sdk.iap.lib.listener; - -import com.samsung.android.sdk.iap.lib.helper.task.GetOwnedListTask; -import com.samsung.android.sdk.iap.lib.vo.ConsumeVo; -import com.samsung.android.sdk.iap.lib.vo.ErrorVo; - -import java.util.ArrayList; - -/** - * Callback Interface used with {@link GetOwnedListTask} - */ -public interface OnConsumePurchasedItemsListener { - /** - * Callback method to be invoked when {@link GetOwnedListTask} has been finished. - * - * @param _errorVO - * @param _consumeList - */ - void onConsumePurchasedItems(ErrorVo _errorVO, ArrayList _consumeList); -} diff --git a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/listener/OnGetOwnedListListener.java b/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/listener/OnGetOwnedListListener.java deleted file mode 100644 index 35d76f957..000000000 --- a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/listener/OnGetOwnedListListener.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.samsung.android.sdk.iap.lib.listener; - -import com.samsung.android.sdk.iap.lib.helper.task.GetOwnedListTask; -import com.samsung.android.sdk.iap.lib.vo.ErrorVo; -import com.samsung.android.sdk.iap.lib.vo.OwnedProductVo; - -import java.util.ArrayList; - -/** - * Callback Interface used with {@link GetOwnedListTask} - */ -public interface OnGetOwnedListListener { - /** - * Callback method to be invoked when {@link GetOwnedListTask} has been finished. - * - * @param _errorVO - * @param _ownedList - */ - void onGetOwnedProducts(ErrorVo _errorVO, ArrayList _ownedList); -} diff --git a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/listener/OnGetProductsDetailsListener.java b/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/listener/OnGetProductsDetailsListener.java deleted file mode 100644 index 55442b181..000000000 --- a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/listener/OnGetProductsDetailsListener.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.samsung.android.sdk.iap.lib.listener; - -import com.samsung.android.sdk.iap.lib.helper.task.GetProductsDetailsTask; -import com.samsung.android.sdk.iap.lib.vo.ErrorVo; -import com.samsung.android.sdk.iap.lib.vo.ProductVo; - -import java.util.ArrayList; - -/** - * Callback Interface used with {@link GetProductsDetailsTask} - */ -public interface OnGetProductsDetailsListener { - /** - * Callback method to be invoked when {@link GetProductsDetailsTask} has been finished. - * - * @param _errorVO - * @param _productList - */ - void onGetProducts(ErrorVo _errorVO, ArrayList _productList); -} diff --git a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/listener/OnIapBindListener.java b/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/listener/OnIapBindListener.java deleted file mode 100644 index ff6ca117c..000000000 --- a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/listener/OnIapBindListener.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.samsung.android.sdk.iap.lib.listener; - -/** - * Callback Interface to be invoked when bind to IAPService has been finished. - */ -public interface OnIapBindListener { - /** - * Callback method to be invoked after binding to IAP service successfully. - * - * @param result - */ - public void onBindIapFinished(int result); -} \ No newline at end of file diff --git a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/listener/OnPaymentListener.java b/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/listener/OnPaymentListener.java deleted file mode 100644 index 00a098365..000000000 --- a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/listener/OnPaymentListener.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.samsung.android.sdk.iap.lib.listener; - -import com.samsung.android.sdk.iap.lib.vo.ErrorVo; -import com.samsung.android.sdk.iap.lib.vo.PurchaseVo; - -/** - * Callback Interface to be invoked when payment has been finished. - */ -public interface OnPaymentListener { - /** - * Callback method to be invoked when payment has been finished. There is return data for result of financial transaction whenever it was - * successful or failed. - */ - void onPayment(ErrorVo _errorVO, PurchaseVo _purchaseVO); -} diff --git a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/listener/OnSucceedBind.java b/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/listener/OnSucceedBind.java deleted file mode 100644 index 3db6ffc21..000000000 --- a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/listener/OnSucceedBind.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.samsung.android.sdk.iap.lib.listener; - -/** - * Created by sangbum7.kim on 2018-02-28. - */ - -public interface OnSucceedBind { -} diff --git a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/service/BaseService.java b/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/service/BaseService.java deleted file mode 100644 index d6b03eb1e..000000000 --- a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/service/BaseService.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.samsung.android.sdk.iap.lib.service; - -import android.content.Context; -import android.content.Intent; -import android.util.Log; - -import com.samsung.android.sdk.iap.lib.R; -import com.samsung.android.sdk.iap.lib.activity.AccountActivity; -import com.samsung.android.sdk.iap.lib.activity.DialogActivity; -import com.samsung.android.sdk.iap.lib.helper.HelperDefine; -import com.samsung.android.sdk.iap.lib.helper.IapHelper; -import com.samsung.android.sdk.iap.lib.vo.ErrorVo; - -/** - * Created by sangbum7.kim on 2018-02-28. - */ - -public abstract class BaseService { - private static final String TAG = BaseService.class.getSimpleName(); - - protected ErrorVo mErrorVo = new ErrorVo(); - protected IapHelper mIapHelper = null; - protected Context mContext = null; - - public BaseService(IapHelper _iapHelper, Context _context) { - mIapHelper = _iapHelper; - mContext = _context; - mErrorVo.setError(HelperDefine.IAP_ERROR_INITIALIZATION, mContext.getString(R.string.mids_sapps_pop_unknown_error_occurred)); - } - - public ErrorVo getErrorVo() { - return mErrorVo; - } - - public void setErrorVo(ErrorVo mErrorVo) { - this.mErrorVo = mErrorVo; - } - - public abstract void runServiceProcess(); - - public void onEndProcess() { - Log.i(TAG, "BaseService.onEndProcess"); - - if (mErrorVo.getErrorCode() == HelperDefine.IAP_ERROR_NEED_SA_LOGIN) { - Intent intent = new Intent(mContext, AccountActivity.class); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - mContext.startActivity(intent); - return; - } else if (mErrorVo.getErrorCode() != HelperDefine.IAP_ERROR_NONE) { - if (mErrorVo.getErrorCode() != HelperDefine.IAP_ERROR_NETWORK_NOT_AVAILABLE && mErrorVo.isShowDialog()) { - Intent intent = new Intent(mContext, DialogActivity.class); - intent.putExtra("Title", mContext.getString(R.string.dream_ph_pheader_couldnt_complete_purchase)); - intent.putExtra("Message", mErrorVo.getErrorString()); - intent.putExtra("DialogType", HelperDefine.DIALOG_TYPE_NOTIFICATION); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - mContext.startActivity(intent); - } - } - - if (mIapHelper != null) { - BaseService baseService = mIapHelper.getServiceProcess(true); - if (baseService != null) { - baseService.runServiceProcess(); - } else { - mIapHelper.dispose(); - } - } - onReleaseProcess(); - } - - public void releaseProcess() { - onReleaseProcess(); - } - - abstract void onReleaseProcess(); -} diff --git a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/service/ConsumePurchasedItems.java b/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/service/ConsumePurchasedItems.java deleted file mode 100644 index 3766b4a25..000000000 --- a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/service/ConsumePurchasedItems.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.samsung.android.sdk.iap.lib.service; - -import android.content.Context; -import android.util.Log; - -import com.samsung.android.sdk.iap.lib.R; -import com.samsung.android.sdk.iap.lib.helper.HelperDefine; -import com.samsung.android.sdk.iap.lib.helper.IapHelper; -import com.samsung.android.sdk.iap.lib.listener.OnConsumePurchasedItemsListener; -import com.samsung.android.sdk.iap.lib.vo.ConsumeVo; - -import java.util.ArrayList; - -/** - * Created by sangbum7.kim on 2018-02-28. - */ - -public class ConsumePurchasedItems extends BaseService { - private static final String TAG = ConsumePurchasedItems.class.getSimpleName(); - - private OnConsumePurchasedItemsListener mOnConsumePurchasedItemsListener = null; - private static String mPurchaseIds = ""; - protected ArrayList mConsumeList = null; - - public ConsumePurchasedItems(IapHelper _iapHelper, Context _context, OnConsumePurchasedItemsListener _onConsumePurchasedItemsListener) { - super(_iapHelper, _context); - mOnConsumePurchasedItemsListener = _onConsumePurchasedItemsListener; - } - - public static void setPurchaseIds(String _purchaseIds) { - mPurchaseIds = _purchaseIds; - } - - public void setConsumeList(ArrayList _consumeList) { - this.mConsumeList = _consumeList; - } - - @Override - public void runServiceProcess() { - if (mIapHelper != null) { - if (mIapHelper.safeConsumePurchasedItems(ConsumePurchasedItems.this, - mPurchaseIds, - mIapHelper.getShowErrorDialog()) == true) { - return; - } - } - mErrorVo.setError(HelperDefine.IAP_ERROR_INITIALIZATION, mContext.getString(R.string.mids_sapps_pop_unknown_error_occurred)); - onEndProcess(); - } - - @Override - public void onReleaseProcess() { - Log.i(TAG, "ConsumePurchasedItems.onReleaseProcess"); - try { - if (mOnConsumePurchasedItemsListener != null) { - mOnConsumePurchasedItemsListener.onConsumePurchasedItems(mErrorVo, mConsumeList); - } - } catch (Exception e) { - Log.e(TAG, e.toString()); - } - } -} diff --git a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/service/OwnedProduct.java b/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/service/OwnedProduct.java deleted file mode 100644 index ac3dd40f0..000000000 --- a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/service/OwnedProduct.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.samsung.android.sdk.iap.lib.service; - -import android.content.Context; -import android.util.Log; - -import com.samsung.android.sdk.iap.lib.R; -import com.samsung.android.sdk.iap.lib.helper.HelperDefine; -import com.samsung.android.sdk.iap.lib.helper.IapHelper; -import com.samsung.android.sdk.iap.lib.listener.OnGetOwnedListListener; -import com.samsung.android.sdk.iap.lib.vo.OwnedProductVo; - -import java.util.ArrayList; - -/** - * Created by sangbum7.kim on 2018-02-28. - */ - -public class OwnedProduct extends BaseService { - private static final String TAG = OwnedProduct.class.getSimpleName(); - - private OnGetOwnedListListener mOnGetOwnedListListener = null; - private static String mProductType = ""; - protected ArrayList mOwnedList = null; - - public OwnedProduct(IapHelper _iapHelper, Context _context, OnGetOwnedListListener _onGetOwnedListListener) { - super(_iapHelper, _context); - mOnGetOwnedListListener = _onGetOwnedListListener; - } - - public static void setProductType(String _productType) { - mProductType = _productType; - } - - public void setOwnedList(ArrayList _ownedList) { - this.mOwnedList = _ownedList; - } - - @Override - public void runServiceProcess() { - Log.i(TAG, "runServiceProcess"); - if (mIapHelper != null) { - if (mIapHelper.safeGetOwnedList(OwnedProduct.this, - mProductType, - mIapHelper.getShowErrorDialog()) == true) { - return; - } - } - mErrorVo.setError(HelperDefine.IAP_ERROR_INITIALIZATION, mContext.getString(R.string.mids_sapps_pop_unknown_error_occurred)); - onEndProcess(); - } - - @Override - public void onReleaseProcess() { - Log.i(TAG, "OwnedProduct.onReleaseProcess"); - try { - if (mOnGetOwnedListListener != null) { - mOnGetOwnedListListener.onGetOwnedProducts(mErrorVo, mOwnedList); - } - } catch (Exception e) { - Log.e(TAG, e.toString()); - } - } -} diff --git a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/service/ProductsDetails.java b/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/service/ProductsDetails.java deleted file mode 100644 index e0f736910..000000000 --- a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/service/ProductsDetails.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.samsung.android.sdk.iap.lib.service; - -import android.content.Context; -import android.util.Log; - -import com.samsung.android.sdk.iap.lib.R; -import com.samsung.android.sdk.iap.lib.helper.HelperDefine; -import com.samsung.android.sdk.iap.lib.helper.IapHelper; -import com.samsung.android.sdk.iap.lib.listener.OnGetProductsDetailsListener; -import com.samsung.android.sdk.iap.lib.vo.ProductVo; - -import java.util.ArrayList; - -/** - * Created by sangbum7.kim on 2018-02-28. - */ - -public class ProductsDetails extends BaseService { - private static final String TAG = ProductsDetails.class.getSimpleName(); - - private OnGetProductsDetailsListener mOnGetProductsDetailsListener = null; - private static String mProductIds = ""; - protected ArrayList mProductsDetails = null; - - public ProductsDetails(IapHelper _iapHelper, Context _context, OnGetProductsDetailsListener _onGetProductsDetailsListener) { - super(_iapHelper, _context); - mOnGetProductsDetailsListener = _onGetProductsDetailsListener; - } - - public static void setProductId(String _productIds) { - mProductIds = _productIds; - } - - public void setProductsDetails(ArrayList _ProductsDetails) { - this.mProductsDetails = _ProductsDetails; - } - - @Override - public void runServiceProcess() { - Log.i(TAG, "succeedBind"); - if (mIapHelper != null) { - if (mIapHelper.safeGetProductsDetails(ProductsDetails.this, - mProductIds, - mIapHelper.getShowErrorDialog()) == true) { - return; - } - } - mErrorVo.setError(HelperDefine.IAP_ERROR_INITIALIZATION, mContext.getString(R.string.mids_sapps_pop_unknown_error_occurred)); - onEndProcess(); - } - - @Override - public void onReleaseProcess() { - Log.i(TAG, "OwnedProduct.onEndProcess"); - try { - if (mOnGetProductsDetailsListener != null) { - mOnGetProductsDetailsListener.onGetProducts(mErrorVo, mProductsDetails); - } - } catch (Exception e) { - Log.e(TAG, e.toString()); - } - } -} diff --git a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/vo/BaseVo.java b/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/vo/BaseVo.java deleted file mode 100644 index 76c8f39c2..000000000 --- a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/vo/BaseVo.java +++ /dev/null @@ -1,146 +0,0 @@ -package com.samsung.android.sdk.iap.lib.vo; - -import android.text.format.DateFormat; - -import org.json.JSONException; -import org.json.JSONObject; - -public class BaseVo { - private String mItemId; - private String mItemName; - private Double mItemPrice; - private String mItemPriceString; - private String mCurrencyUnit; - private String mCurrencyCode; - private String mItemDesc; - private String mType; - private Boolean mIsConsumable; - - public BaseVo() { - } - - public BaseVo(String _jsonString) { - try { - JSONObject jObject = new JSONObject(_jsonString); - - setItemId(jObject.optString("mItemId")); - setItemName(jObject.optString("mItemName")); - setItemPrice(jObject.optDouble("mItemPrice")); - setItemPriceString(jObject.optString("mItemPriceString")); - setCurrencyUnit(jObject.optString("mCurrencyUnit")); - setCurrencyCode(jObject.optString("mCurrencyCode")); - setItemDesc(jObject.optString("mItemDesc")); - setType(jObject.optString("mType")); - Boolean isConsumable = false; - if (jObject.optString("mConsumableYN") != null && jObject.optString("mConsumableYN").equals("Y")) { - isConsumable = true; - } - setIsConsumable(isConsumable); - } catch (JSONException e) { - e.printStackTrace(); - } - } - - public String getItemId() { - return mItemId; - } - - public void setItemId(String _itemId) { - mItemId = _itemId; - } - - public String getItemName() { - return mItemName; - } - - public void setItemName(String _itemName) { - mItemName = _itemName; - } - - public Double getItemPrice() { - return mItemPrice; - } - - public void setItemPrice(Double _itemPrice) { - mItemPrice = _itemPrice; - } - - public String getItemPriceString() { - return mItemPriceString; - } - - public void setItemPriceString(String _itemPriceString) { - mItemPriceString = _itemPriceString; - } - - public String getCurrencyUnit() { - return mCurrencyUnit; - } - - public void setCurrencyUnit(String _currencyUnit) { - mCurrencyUnit = _currencyUnit; - } - - public String getCurrencyCode() { - return mCurrencyCode; - } - - public void setCurrencyCode(String _currencyCode) { - mCurrencyCode = _currencyCode; - } - - public String getItemDesc() { - return mItemDesc; - } - - public void setItemDesc(String _itemDesc) { - mItemDesc = _itemDesc; - } - - public String getType() { - return mType; - } - - public void setType(String _itemDesc) { - mType = _itemDesc; - } - - public Boolean getIsConsumable() { - return mIsConsumable; - } - - public void setIsConsumable(Boolean _consumableYN) { - mIsConsumable = _consumableYN; - } - - - public String dump() { - String dump = null; - - dump = "ItemId : " + getItemId() + "\n" + - "ItemName : " + getItemName() + "\n" + - "ItemPrice : " + getItemPrice() + "\n" + - "ItemPriceString : " + getItemPriceString() + "\n" + - "ItemDesc : " + getItemDesc() + "\n" + - "CurrencyUnit : " + getCurrencyUnit() + "\n" + - "CurrencyCode : " + getCurrencyCode() + "\n" + - "IsConsumable : " + getIsConsumable() + "\n" + - "Type : " + getType(); - - return dump; - } - - protected String getDateString(long _timeMills) { - String result = ""; - String dateFormat = "yyyy-MM-dd HH:mm:ss"; - - try { - result = DateFormat.format(dateFormat, _timeMills).toString(); - } catch (Exception e) { - e.printStackTrace(); - result = ""; - } - - return result; - } -} \ No newline at end of file diff --git a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/vo/ConsumeVo.java b/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/vo/ConsumeVo.java deleted file mode 100644 index 87fef9461..000000000 --- a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/vo/ConsumeVo.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.samsung.android.sdk.iap.lib.vo; - -import android.util.Log; - -import org.json.JSONException; -import org.json.JSONObject; - -public class ConsumeVo { - private static final String TAG = ConsumeVo.class.getSimpleName(); - - private String mPurchaseId; - private String mStatusString; - private int mStatusCode; - - private String mJsonString = ""; - - public ConsumeVo(String _jsonString) { - setJsonString(_jsonString); - try { - JSONObject jObject = new JSONObject(_jsonString); - - Log.i(TAG, jObject.toString(4)); - - setPurchaseId(jObject.optString("mPurchaseId")); - setStatusString(jObject.optString("mStatusString")); - setStatusCode(jObject.optInt("mStatusCode")); - } catch (JSONException e) { - e.printStackTrace(); - } catch (Exception e) { - e.printStackTrace(); - } - } - - public String getPurchaseId() { - return mPurchaseId; - } - - public void setPurchaseId(String _paymentId) { - mPurchaseId = _paymentId; - } - - public String getStatusString() { - return mStatusString; - } - - public void setStatusString(String _statusString) { - mStatusString = _statusString; - } - - public int getStatusCode() { - return mStatusCode; - } - - public void setStatusCode(int _statusCode) { - mStatusCode = _statusCode; - } - - public String getJsonString() { - return mJsonString; - } - - public void setJsonString(String _jsonString) { - mJsonString = _jsonString; - } - - public String dump() { - String dump = null; - - dump = "PurchaseId : " + getPurchaseId() + "\n" + - "StatusString : " + getStatusString() + "\n" + - "StatusCode : " + getStatusCode(); - - return dump; - } -} \ No newline at end of file diff --git a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/vo/ErrorVo.java b/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/vo/ErrorVo.java deleted file mode 100644 index 8f691fe2d..000000000 --- a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/vo/ErrorVo.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.samsung.android.sdk.iap.lib.vo; - -import com.samsung.android.sdk.iap.lib.helper.HelperDefine; - -public class ErrorVo { - private int mErrorCode = HelperDefine.IAP_PAYMENT_IS_CANCELED; - private String mErrorString = ""; - private String mErrorDetailsString = ""; - private String mExtraString = ""; - private boolean mShowDialog = false; - - public void setError(int _errorCode, String _errorString) { - mErrorCode = _errorCode; - mErrorString = _errorString; - } - - public void setError(int _errorCode, String _errorString, String _errorDetails) { - mErrorCode = _errorCode; - mErrorString = _errorString; - mErrorDetailsString = _errorDetails; - } - - public int getErrorCode() { - return mErrorCode; - } - - public String getErrorString() { - return mErrorString; - } - - public String getErrorDetailsString() { - return mErrorDetailsString; - } - - public String getExtraString() { - return mExtraString; - } - - public void setExtraString(String _extraString) { - mExtraString = _extraString; - } - - public boolean isShowDialog() { - return mShowDialog; - } - - public void setShowDialog(boolean _showDialog) { - mShowDialog = _showDialog; - } - - public String dump() { - String dump = - "ErrorCode : " + getErrorCode() + "\n" + - "ErrorString : " + getErrorString() + "\n" + - "ErrorDetailsString : " + getErrorDetailsString() + "\n" + - "ExtraString : " + getExtraString(); - return dump; - } -} diff --git a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/vo/OwnedProductVo.java b/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/vo/OwnedProductVo.java deleted file mode 100644 index 9bb1c9c4e..000000000 --- a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/vo/OwnedProductVo.java +++ /dev/null @@ -1,115 +0,0 @@ -package com.samsung.android.sdk.iap.lib.vo; - -import android.util.Base64; - -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.UnsupportedEncodingException; - -public class OwnedProductVo extends BaseVo { - private static final String TAG = OwnedProductVo.class.getSimpleName(); - - private String mPaymentId; - private String mPurchaseId; - private String mPurchaseDate; - private String mPassThroughParam; - - // Expiration date for a item which is "subscription" type - // ======================================================================== - private String mSubscriptionEndDate = ""; - // ======================================================================== - - private String mJsonString = ""; - - public OwnedProductVo() { - } - - public OwnedProductVo(String _jsonString) { - super(_jsonString); - setJsonString(_jsonString); - - try { - JSONObject jObject = new JSONObject(_jsonString); - setPaymentId(jObject.optString("mPaymentId")); - setPurchaseId(jObject.optString("mPurchaseId")); - setPurchaseDate(getDateString(jObject.optLong("mPurchaseDate"))); - jObject.remove("mPurchaseDate"); - jObject.put("mPurchaseDate", getPurchaseDate()); - - String decodedPassThroughParam = new String(Base64.decode(jObject.optString("mPassThroughParam"), 0), "UTF-8"); - setPassThroughParam(decodedPassThroughParam); - - if (jObject.optLong("mSubscriptionEndDate") != 0) { - setSubscriptionEndDate(getDateString(jObject.optLong("mSubscriptionEndDate"))); - } - jObject.remove("mSubscriptionEndDate"); - jObject.put("mSubscriptionEndDate", getSubscriptionEndDate()); - setJsonString(jObject.toString()); - } catch (JSONException e) { - e.printStackTrace(); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - } - - public String getPaymentId() { - return mPaymentId; - } - - public void setPaymentId(String _paymentId) { - mPaymentId = _paymentId; - } - - public String getPurchaseId() { - return mPurchaseId; - } - - public void setPurchaseId(String _purchaseId) { - mPurchaseId = _purchaseId; - } - - public String getPurchaseDate() { - return mPurchaseDate; - } - - public void setPurchaseDate(String _purchaseDate) { - mPurchaseDate = _purchaseDate; - } - - public String getSubscriptionEndDate() { - return mSubscriptionEndDate; - } - - public void setSubscriptionEndDate(String _subscriptionEndDate) { - mSubscriptionEndDate = _subscriptionEndDate; - } - - public String getPassThroughParam() { - return mPassThroughParam; - } - - public void setPassThroughParam(String _passThroughParam) { - mPassThroughParam = _passThroughParam; - } - - public String getJsonString() { - return mJsonString; - } - - public void setJsonString(String _jsonString) { - mJsonString = _jsonString; - } - - public String dump() { - String dump = super.dump() + "\n"; - - dump += "PaymentID : " + getPaymentId() + "\n" + - "PurchaseID : " + getPurchaseId() + "\n" + - "PurchaseDate : " + getPurchaseDate() + "\n" + - "PassThroughParam : " + getPassThroughParam() + "\n" + - "SubscriptionEndDate : " + getSubscriptionEndDate(); - - return dump; - } -} \ No newline at end of file diff --git a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/vo/ProductVo.java b/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/vo/ProductVo.java deleted file mode 100644 index 635056069..000000000 --- a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/vo/ProductVo.java +++ /dev/null @@ -1,223 +0,0 @@ -package com.samsung.android.sdk.iap.lib.vo; - -import org.json.JSONException; -import org.json.JSONObject; - -public class ProductVo extends BaseVo { - private static final String TAG = ProductVo.class.getSimpleName(); - - //Subscription data - private String mSubscriptionDurationUnit; - private String mSubscriptionDurationMultiplier; - - // Tiered Subscription data - private String mTieredPrice = ""; - private String mTieredPriceString = ""; - private String mTieredSubscriptionYN = ""; - private String mTieredSubscriptionDurationUnit = ""; - private String mTieredSubscriptionDurationMultiplier = ""; - private String mTieredSubscriptionCount = ""; - private String mShowStartDate = ""; - private String mShowEndDate = ""; - - private String mItemImageUrl; - private String mItemDownloadUrl; - private String mReserved1; - private String mReserved2; - private String mFreeTrialPeriod; - - private String mJsonString; - - public ProductVo() { - } - - public ProductVo(String _jsonString) { - super(_jsonString); - setJsonString(_jsonString); - - try { - JSONObject jObject = new JSONObject(_jsonString); - - setSubscriptionDurationUnit(jObject.optString("mSubscriptionDurationUnit")); - setSubscriptionDurationMultiplier(jObject.optString("mSubscriptionDurationMultiplier")); - - setTieredSubscriptionYN(jObject.optString("mTieredSubscriptionYN")); - setTieredSubscriptionDurationUnit(jObject.optString("mTieredSubscriptionDurationUnit")); - setTieredSubscriptionDurationMultiplier(jObject.optString("mTieredSubscriptionDurationMultiplier")); - setTieredSubscriptionCount(jObject.optString("mTieredSubscriptionCount")); - setTieredPrice(jObject.optString("mTieredPrice")); - setTieredPriceString(jObject.optString("mTieredPriceString")); - setShowStartDate(getDateString(jObject.optLong("mShowStartDate"))); - setShowEndDate(getDateString(jObject.optLong("mShowEndDate"))); - - setItemImageUrl(jObject.optString("mItemImageUrl")); - setItemDownloadUrl(jObject.optString("mItemDownloadUrl")); - setReserved1(jObject.optString("mReserved1")); - setReserved2(jObject.optString("mReserved2")); - setFreeTrialPeriod(jObject.optString("mFreeTrialPeriod")); - } catch (JSONException e) { - e.printStackTrace(); - } - } - - public String getSubscriptionDurationUnit() { - return mSubscriptionDurationUnit; - } - - public void setSubscriptionDurationUnit(String _subscriptionDurationUnit) { - mSubscriptionDurationUnit = _subscriptionDurationUnit; - } - - public String getSubscriptionDurationMultiplier() { - return mSubscriptionDurationMultiplier; - } - - public void setSubscriptionDurationMultiplier( - String _subscriptionDurationMultiplier) { - mSubscriptionDurationMultiplier = _subscriptionDurationMultiplier; - } - - public String getTieredSubscriptionYN() { - return mTieredSubscriptionYN; - } - - public void setTieredSubscriptionYN(String _tieredSubscriptionYN) { - this.mTieredSubscriptionYN = _tieredSubscriptionYN; - } - - public String getTieredPrice() { - return mTieredPrice; - } - - public void setTieredPrice(String _tieredPrice) { - this.mTieredPrice = _tieredPrice; - } - - public String getTieredPriceString() { - return mTieredPriceString; - } - - public void setTieredPriceString(String _tieredPriceString) { - this.mTieredPriceString = _tieredPriceString; - } - - public String getTieredSubscriptionDurationUnit() { - return mTieredSubscriptionDurationUnit; - } - - public void setTieredSubscriptionDurationUnit(String _tieredSubscriptionDurationUnit) { - this.mTieredSubscriptionDurationUnit = _tieredSubscriptionDurationUnit; - } - - public String getTieredSubscriptionDurationMultiplier() { - return mTieredSubscriptionDurationMultiplier; - } - - public void setTieredSubscriptionDurationMultiplier(String _tieredSubscriptionDurationMultiplier) { - this.mTieredSubscriptionDurationMultiplier = _tieredSubscriptionDurationMultiplier; - } - - public String getTieredSubscriptionCount() { - return mTieredSubscriptionCount; - } - - public void setTieredSubscriptionCount(String _tieredSubscriptionCount) { - this.mTieredSubscriptionCount = _tieredSubscriptionCount; - } - - public String getShowStartDate() { - return mShowStartDate; - } - - public void setShowStartDate(String showStartDate) { - this.mShowStartDate = showStartDate; - } - - public String getShowEndDate() { - return mShowEndDate; - } - - public void setShowEndDate(String showEndDate) { - this.mShowEndDate = showEndDate; - } - - public String getItemImageUrl() { - return mItemImageUrl; - } - - public void setItemImageUrl(String _itemImageUrl) { - mItemImageUrl = _itemImageUrl; - } - - public String getItemDownloadUrl() { - return mItemDownloadUrl; - } - - public void setItemDownloadUrl(String _itemDownloadUrl) { - mItemDownloadUrl = _itemDownloadUrl; - } - - public String getReserved1() { - return mReserved1; - } - - public void setReserved1(String _reserved1) { - mReserved1 = _reserved1; - } - - public String getReserved2() { - return mReserved2; - } - - public void setReserved2(String _reserved2) { - mReserved2 = _reserved2; - } - - public String getFreeTrialPeriod() { - return mFreeTrialPeriod; - } - - public void setFreeTrialPeriod(String _freeTrialPeriod) { - mFreeTrialPeriod = _freeTrialPeriod; - } - - public String getJsonString() { - return mJsonString; - } - - public void setJsonString(String _jsonString) { - mJsonString = _jsonString; - } - - public String tieredDump() { - String dump = ""; - if (getTieredSubscriptionYN().equals("Y") == true) { - dump = "TieredSubscriptionYN : " + getTieredSubscriptionYN() + "\n" + - "TieredPrice : " + getTieredPrice() + "\n" + - "TieredPriceString : " + getTieredPriceString() + "\n" + - "TieredSubscriptionCount : " + getTieredSubscriptionCount() + "\n" + - "TieredSubscriptionDurationUnit : " + getTieredSubscriptionDurationUnit() + "\n" + - "TieredSubscriptionDurationMultiplier : " + getTieredSubscriptionDurationMultiplier() + "\n" + - "ShowStartDate : " + getShowStartDate() + "\n" + - "ShowEndDate : " + getShowEndDate(); - - } - return dump; - } - - public String dump() { - String dump = super.dump() + "\n"; - - dump += "SubscriptionDurationUnit : " - + getSubscriptionDurationUnit() + "\n" + - "SubscriptionDurationMultiplier : " + - getSubscriptionDurationMultiplier() + "\n" + - "ItemImageUrl : " + getItemImageUrl() + "\n" + - "ItemDownloadUrl : " + getItemDownloadUrl() + "\n" + - "Reserved1 : " + getReserved1() + "\n" + - "Reserved2 : " + getReserved2() + "\n" + - "FreeTrialPeriod : " + getFreeTrialPeriod() + "\n" + - tieredDump(); - return dump; - } -} \ No newline at end of file diff --git a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/vo/PurchaseVo.java b/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/vo/PurchaseVo.java deleted file mode 100644 index 9181cbbf5..000000000 --- a/IAP6Helper/src/main/java/com/samsung/android/sdk/iap/lib/vo/PurchaseVo.java +++ /dev/null @@ -1,172 +0,0 @@ -package com.samsung.android.sdk.iap.lib.vo; - -import android.util.Base64; - -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.UnsupportedEncodingException; - -public class PurchaseVo extends BaseVo { - private static final String TAG = PurchaseVo.class.getSimpleName(); - - private String mPaymentId; - private String mPurchaseId; - private String mPurchaseDate; - private String mVerifyUrl; - private String mPassThroughParam; - - private String mItemImageUrl; - private String mItemDownloadUrl; - private String mReserved1; - private String mReserved2; - private String mOrderId; - private String mUdpSignature; - - private String mJsonString; - - public PurchaseVo(String _jsonString) { - super(_jsonString); - setJsonString(_jsonString); - - try { - JSONObject jObject = new JSONObject(_jsonString); - - setPaymentId(jObject.optString("mPaymentId")); - setPurchaseId(jObject.optString("mPurchaseId")); - setPurchaseDate(getDateString(jObject.optLong("mPurchaseDate"))); - jObject.remove("mPurchaseDate"); - jObject.put("mPurchaseDate", getPurchaseDate()); - String decodedPassThroughParam = new String(Base64.decode(jObject.optString("mPassThroughParam"), 0), "UTF-8"); - setPassThroughParam(decodedPassThroughParam); - - setItemImageUrl(jObject.optString("mItemImageUrl")); - setItemDownloadUrl(jObject.optString("mItemDownloadUrl")); - setReserved1(jObject.optString("mReserved1")); - setReserved2(jObject.optString("mReserved2")); - setOrderId(jObject.optString("mOrderId")); - - setVerifyUrl(jObject.optString("mVerifyUrl")); - setUdpSignature(jObject.optString("mUdpSignature")); - - setJsonString(jObject.toString()); - } catch (JSONException e) { - e.printStackTrace(); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - } - - public String getPaymentId() { - return mPaymentId; - } - - public void setPaymentId(String _paymentId) { - mPaymentId = _paymentId; - } - - public String getPurchaseId() { - return mPurchaseId; - } - - public void setPurchaseId(String _purchaseId) { - mPurchaseId = _purchaseId; - } - - public String getPurchaseDate() { - return mPurchaseDate; - } - - public void setPurchaseDate(String _purchaseDate) { - mPurchaseDate = _purchaseDate; - } - - public String getVerifyUrl() { - return mVerifyUrl; - } - - public void setVerifyUrl(String _verifyUrl) { - mVerifyUrl = _verifyUrl; - } - - public String getPassThroughParam() { - return mPassThroughParam; - } - - public void setPassThroughParam(String _passThroughParam) { - mPassThroughParam = _passThroughParam; - } - - public String getItemImageUrl() { - return mItemImageUrl; - } - - public void setItemImageUrl(String _itemImageUrl) { - mItemImageUrl = _itemImageUrl; - } - - public String getItemDownloadUrl() { - return mItemDownloadUrl; - } - - public void setItemDownloadUrl(String _itemDownloadUrl) { - mItemDownloadUrl = _itemDownloadUrl; - } - - public String getReserved1() { - return mReserved1; - } - - public void setReserved1(String _reserved1) { - mReserved1 = _reserved1; - } - - public String getReserved2() { - return mReserved2; - } - - public void setReserved2(String _reserved2) { - mReserved2 = _reserved2; - } - - public String getOrderId() { - return mOrderId; - } - - public void setOrderId(String orderId) { - this.mOrderId = orderId; - } - - public String getUdpSignature() { - return mUdpSignature; - } - - public void setUdpSignature(String udpSignature) { - this.mUdpSignature = udpSignature; - } - - public String getJsonString() { - return mJsonString; - } - - public void setJsonString(String _jsonString) { - mJsonString = _jsonString; - } - - public String dump() { - String dump = super.dump() + "\n"; - - dump += "PaymentID : " + getPaymentId() + "\n" + - "PurchaseId : " + getPurchaseId() + "\n" + - "PurchaseDate : " + getPurchaseDate() + "\n" + - "PassThroughParam : " + getPassThroughParam() + "\n" + - "VerifyUrl : " + getVerifyUrl() + "\n" + - "ItemImageUrl : " + getItemImageUrl() + "\n" + - "ItemDownloadUrl : " + getItemDownloadUrl() + "\n" + - "Reserved1 : " + getReserved1() + "\n" + - "Reserved2 : " + getReserved2() + "\n" + - "UdpSignature : " + getUdpSignature(); - - return dump; - } -} \ No newline at end of file diff --git a/IAP6Helper/src/main/res/values-en/strings.xml b/IAP6Helper/src/main/res/values-en/strings.xml index 57f4427cd..ba3497b9b 100644 --- a/IAP6Helper/src/main/res/values-en/strings.xml +++ b/IAP6Helper/src/main/res/values-en/strings.xml @@ -52,4 +52,8 @@ Update Galaxy Apps A new version is available. Galaxy Apps will be updated to the latest version to complete this purchase. + + Payment cancellation + Payment successful + Payment failed diff --git a/IAP6Helper/src/main/res/values-zh-rCN/strings.xml b/IAP6Helper/src/main/res/values-zh-rCN/strings.xml index 8217be31b..ba753b6d7 100644 --- a/IAP6Helper/src/main/res/values-zh-rCN/strings.xml +++ b/IAP6Helper/src/main/res/values-zh-rCN/strings.xml @@ -52,4 +52,8 @@ 更新三星应用商店 有新版本可用。三星应用商店将更新至最新版本以完成本次购物。 + + 支付取消 + 支付成功 + 支付失敗 diff --git a/IAP6Helper/src/main/res/values-zh-rHK/strings.xml b/IAP6Helper/src/main/res/values-zh-rHK/strings.xml index 7f80ffcce..e27e2dd0e 100644 --- a/IAP6Helper/src/main/res/values-zh-rHK/strings.xml +++ b/IAP6Helper/src/main/res/values-zh-rHK/strings.xml @@ -52,4 +52,8 @@ 更新 Galaxy Apps 已有新版本可用。Galaxy Apps 將更新至最新版本以完成此購買。 + + 支付取消 + 支付成功 + 支付失敗 diff --git a/IAP6Helper/src/main/res/values-zh-rTW/strings.xml b/IAP6Helper/src/main/res/values-zh-rTW/strings.xml index ecaf37806..359453fc3 100644 --- a/IAP6Helper/src/main/res/values-zh-rTW/strings.xml +++ b/IAP6Helper/src/main/res/values-zh-rTW/strings.xml @@ -52,4 +52,8 @@ 更新 Galaxy Apps 有可用的新版本。Galaxy Apps 將更新至最新版本以完成此筆購買。 + + 支付取消 + 支付成功 + 支付失敗 diff --git a/IAP6Helper/src/main/res/values/strings.xml b/IAP6Helper/src/main/res/values/strings.xml index ab19c6ff7..f8d6d64d1 100644 --- a/IAP6Helper/src/main/res/values/strings.xml +++ b/IAP6Helper/src/main/res/values/strings.xml @@ -20,5 +20,7 @@ Error code: To purchase items, you need to install Samsung In-App Purchase. Install? - + Payment cancellation + Payment successful + Payment failed \ No newline at end of file diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 1c250b06d..4f22c90ef 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -315,3 +315,4 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode; -keep class com.qiniu.**{*;} -keep class com.qiniu.**{public ();} -ignorewarnings +-keep class com.samsung.android.sdk.**{*;} \ No newline at end of file diff --git a/common/build.gradle b/common/build.gradle index e04255fcb..7968f2e9e 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -229,14 +229,23 @@ dependencies { //侧滑删除 api 'com.yanzhenjie.recyclerview:x:1.3.2' - //华为支付插件包 - //api project(':lib_huawei') - //google插件包 - api project(':lib_google') + huawei_onlineImplementation project(':lib_huawei') + huawei_testImplementation project(':lib_huawei') + + samsung_onlineImplementation project(":lib_google") + samsung_testImplementation project(":lib_google") + + google_onlineImplementation project(":lib_google") + google_testImplementation project(":lib_google") + + link_onlineImplementation project(":lib_google") + link_testImplementation project(":lib_google") //samsung插件包 - //api project(':IAP6Helper') + samsung_onlineImplementation project(':IAP6Helper') + samsung_testImplementation project(':IAP6Helper') + //時間選擇器 api 'com.contrarywind:Android-PickerView:4.1.9' diff --git a/common/libs/samsung-iap-6.1.1.aar b/common/libs/samsung-iap-6.1.1.aar deleted file mode 100644 index 4195da69d3130d83d543ec406ede677ae7a6cb80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 248596 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%0DFr|(=@bs{@X;mMO(&UErP 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≤zQGB5}(`V{YswngvjNS65O8=k+%L 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%0D9d*u97Y5}w|#m? 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 { - if (purchaseVo != null) { - onPaymentListener.onPaymentSuccess(purchaseVo.getPurchaseId()); - } else { - if (errorVo.getErrorCode() == HelperDefine.IAP_PAYMENT_IS_CANCELED) { - onPaymentListener.onPaymentFailed(mContext.getString(R.string.pay_cancel)); - } else { - onPaymentListener.onPaymentFailed(errorVo.getErrorString()); + public void buy(String skuId, OnSamsungPaymentListener onPaymentListener) { + if(samsung==null)return; + try { + Class listenerClass = Class.forName("com.samsung.android.sdk.iap.lib.SamsungUtil$OnPaymentListener"); + Object listenerObj = Proxy.newProxyInstance(mContext.getClassLoader(), new Class[]{listenerClass}, new InvocationHandler() { + @Override + public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { + if("onPaymentSuccess".equals(method.getName())){ + onPaymentListener.onPaymentSuccess((String) args[0]); + }else if("onPaymentFailed".equals(method.getName())){ + onPaymentListener.onPaymentFailed((String) args[0]); + } + return null; } - } - - }); - } - - public interface OnPaymentListener { - void onPaymentSuccess(String purchaseVo); - - void onPaymentFailed(String errorVo); + }); + samsung.getClass().getMethod("buy",String.class, listenerClass).invoke(samsung,skuId,listenerObj); + }catch (Exception e){ + e.printStackTrace(); + } } @@ -86,51 +92,25 @@ public class SamsungUtil { * @param skuId */ public void consume(String skuId) { - //消耗 - iapHelper.consumePurchasedItems(skuId, new OnConsumePurchasedItemsListener() { - @Override - public void onConsumePurchasedItems(ErrorVo _errorVO, ArrayList _consumeList) { - if (_consumeList != null) { - L.e("消耗:" + new Gson().toJson(_consumeList)); - L.e("ErrorVo:" + _errorVO.dump()); - } - } - }); - } - - public void consumeAll(ArrayList _ownedList) { - if (_ownedList.size() > 0) { - iapHelper.consumePurchasedItems(_ownedList.get(0).getPurchaseId(), new OnConsumePurchasedItemsListener() { - @Override - public void onConsumePurchasedItems(ErrorVo _errorVO, ArrayList _consumeList1) { - if (_errorVO.getErrorCode() == IapHelper.IAP_ERROR_NONE) { - L.e("消耗:" + new Gson().toJson(_consumeList1)); - L.e("ErrorVo:" + _errorVO.dump()); - _ownedList.remove(0); - consumeAll(_ownedList); - } - } - }); + if(samsung==null)return; + try { + samsung.getClass().getMethod("consume",String.class).invoke(samsung,skuId); + }catch (Exception e){ + e.printStackTrace(); } } + /** * 消耗所有未消耗的消耗品 */ public void query() { - //查询商品 PRODUCT_TYPE_ITEM 消耗品&非消耗品 - iapHelper.getOwnedList(HelperDefine.PRODUCT_TYPE_ITEM, new OnGetOwnedListListener() { - @Override - public void onGetOwnedProducts(ErrorVo _errorVo, ArrayList _ownedList) { - if (_errorVo != null) { - if (_errorVo.getErrorCode() == IapHelper.IAP_ERROR_NONE) { - if (_ownedList != null) { - consumeAll(_ownedList); - } - } - } - } - }); + if(samsung==null)return; + try { + samsung.getClass().getMethod("query").invoke(samsung); + }catch (Exception e){ + e.printStackTrace(); + } } } diff --git a/live/src/main/java/com/yunbao/live/dialog/LiveGiftPopup.java b/live/src/main/java/com/yunbao/live/dialog/LiveGiftPopup.java index 12733abfb..f62688e2d 100644 --- a/live/src/main/java/com/yunbao/live/dialog/LiveGiftPopup.java +++ b/live/src/main/java/com/yunbao/live/dialog/LiveGiftPopup.java @@ -836,7 +836,9 @@ public class LiveGiftPopup extends AbsDialogFragment { @Override public void onSuccess(GiftNamingInfoModel data) { if (TextUtils.equals(data.getNamingStatus(), "1")) { + boolean isPageGift = liveGiftModel.isPageGift(); liveGiftModel = JSONObject.parseObject(GsonUtils.toJson(data), LiveGiftBean.class); + liveGiftModel.setPageGift(isPageGift); if (!TextUtils.isEmpty(liveGiftModel.getNamingLiveuid()) && !TextUtils.isEmpty(liveGiftModel.getNamingUid()) && !TextUtils.equals(liveGiftModel.getNamingLiveuid(), "0") && diff --git a/live/src/main/res/layout/view_live_end.xml b/live/src/main/res/layout/view_live_end.xml index 75f13aa1c..c577da116 100644 --- a/live/src/main/res/layout/view_live_end.xml +++ b/live/src/main/res/layout/view_live_end.xml @@ -173,7 +173,7 @@ android:layout_height="match_parent" android:background="#b3000000" android:visibility="visible" - tools:visibility="gone"> + tools:visibility="visible"> + tools:visibility="gone"> + android:textSize="14sp" + tools:text="Pornography: Sexual behavior: Moderate pornography" />