package com.donut.wxf1a06dafa3350688 import android.app.Activity import android.app.Application import android.content.Intent import androidx.core.app.ActivityCompat import androidx.core.content.PermissionChecker.PERMISSION_DENIED import androidx.core.content.PermissionChecker.PERMISSION_GRANTED import androidx.lifecycle.Observer import com.donut.plugin.activity.AliPayActivity import com.donut.plugin.activity.HuaWeiActivity import com.donut.plugin.activity.LenovoActivity import com.donut.plugin.activity.PermissionsActivity import com.donut.plugin.bean.DataBean import com.donut.plugin.channelsdk.lenovo.LenovoSDK import com.donut.plugin.util.* import com.donut.plugin.util.LiveEventBusKeys.* import com.jeremyliao.liveeventbus.LiveEventBus import com.tencent.luggage.wxa.SaaA.plugin.AsyncJsApi import com.tencent.luggage.wxa.SaaA.plugin.NativePluginInterface import com.tencent.luggage.wxa.SaaA.plugin.SyncJsApi import org.json.JSONObject import java.lang.reflect.Method /** * * * //必须传入第一个object参数,callback必须带参数! * */ class TestNativePlugin : NativePluginInterface { var mLenovoLEBLoginCallBack: Observer? = null; var mLenovoLEBPayCallBack: Observer? = null; var mAliPayLEBCallBack: Observer? = null; var mHuaWeiLoginLEBCallBack: Observer? = null; var mHuaWeiLogOutLEBCallBack: Observer? = null; var mPermissionsLEBCallBack: Observer? = null; override fun getPluginID(): String { return BuildConfig.PLUGIN_ID } /** * 初始化application * */ @AsyncJsApi(methodName = "initPlugin") fun initPluginMethod(data: JSONObject?, callback: (data: Any) -> Unit, activity: Activity) { try { val clazz = Class.forName("android.app.ActivityThread") val method: Method = clazz.getMethod("currentApplication") BaseConsts.mBaseApplication = method.invoke(null) as Application; BaseConsts.mTopActivity = activity; Logger.e(" BaseConsts.mTopActivity::${BaseConsts.mTopActivity.localClassName}") DeviceUuidFactory(BaseConsts.mBaseApplication); callback("success") } catch (e: Exception) { callback("fail") e.printStackTrace() } } @AsyncJsApi(methodName = "initPermissions") fun initPermission(data: JSONObject?, callback: (data: Any) -> Unit) { if (mPermissionsLEBCallBack == null) { mPermissionsLEBCallBack = Observer { t: DataBean? -> Logger.e("给js返回的:" + t!!.toJSON()) if (t != null) { callback(t.toJSON()) } else { callback("error") } //清空3个监听 mPermissionsLEBCallBack = clearLEBCallBackByKey(LiveEventBusKeys.PERMISSIONS_ACTIVITY_CALLBACK, mPermissionsLEBCallBack!!) }; LiveEventBus .get(LiveEventBusKeys.PERMISSIONS_ACTIVITY_CALLBACK, DataBean::class.java) .observeForever(mPermissionsLEBCallBack!!) } var intent = Intent(BaseConsts.mTopActivity, PermissionsActivity::class.java) intent.putExtra("permissionArray", data!!.getString("permissionArr")) BaseConsts.mTopActivity.startActivity(intent) } @SyncJsApi(methodName = "checkPermission") fun checkPermission( data: JSONObject?, activity: Activity ): Boolean { if (data!!.length() == 0) { Logger.e("未传输需要检测的权限") return false; } if (ActivityCompat.checkSelfPermission(activity, data!!.getString("permission")) == PERMISSION_GRANTED ) { return true; } else if (ActivityCompat.checkSelfPermission(activity, data!!.getString("permission")) == PERMISSION_DENIED ) { return false; } return false; } /** * 获取deviceUUID * */ @SyncJsApi(methodName = "getDeviceUuid") fun getDeviceUUID(data: JSONObject?): String { return DeviceUuidFactory.getUuid(); } /** * 联想sdk方法 *初始化插件-联想渠道 * */ @AsyncJsApi(methodName = "lenovoInitSDK") fun lenovoInit(data: JSONObject?, callback: (data: Any) -> Unit) { Logger.e("初始化插件-联想渠道") LenovoSDK.initSDK(BaseConsts.mTopActivity, object : LenovoSDK.LoginCallBack { override fun loginSuccess(data: String?) { callback(data!!) } override fun loginFail(data: String?) { callback(data!!) } }) } /** * 联想登陆 * */ @AsyncJsApi(methodName = "lenovoLogin") fun lenovoLogin(data: JSONObject?, callback: (data: Any) -> Unit) { if (mLenovoLEBLoginCallBack == null) { Logger.e("联想监听是空的,初始化") mLenovoLEBLoginCallBack = Observer { t: DataBean? -> Logger.e("联想监听回调:${t!!.toJSON()}") callback(t.toJSON()!!) //清空3个监听 mLenovoLEBLoginCallBack = clearLEBCallBackByKey(LiveEventBusKeys.LENOVO_LOGIN_CALLBACK, mLenovoLEBLoginCallBack!!) }; LiveEventBus .get(LiveEventBusKeys.LENOVO_LOGIN_CALLBACK, DataBean::class.java) .observeForever(mLenovoLEBLoginCallBack!!) } var intent = Intent(BaseConsts.mTopActivity, LenovoActivity::class.java) intent.putExtra("type", "0") BaseConsts.mTopActivity.startActivity(intent) } /** * 联想支付 * */ @AsyncJsApi(methodName = "lenovoPay") fun lenovoPay(data: JSONObject?, callback: (data: Any) -> Unit) { if (mLenovoLEBPayCallBack == null) { mLenovoLEBPayCallBack = Observer { t: DataBean? -> Logger.e("联想支付监听回调:${t!!.toJSON()}") callback(t.toJSON()!!) //清空3个监听 mLenovoLEBPayCallBack = clearLEBCallBackByKey(LiveEventBusKeys.LENOVO_PAY_CALLBACK, mLenovoLEBPayCallBack!!) }; LiveEventBus .get(LiveEventBusKeys.LENOVO_PAY_CALLBACK, DataBean::class.java) .observeForever(mLenovoLEBPayCallBack!!) } var intent = Intent(BaseConsts.mTopActivity, LenovoActivity::class.java) intent.putExtra("type", "1") intent.putExtra("payData", data.toString()) BaseConsts.mTopActivity.startActivity(intent) } /** * 联想退出登陆 * */ @AsyncJsApi(methodName = "lenovoLogout") fun lenovoLogout(data: JSONObject?, callback: (data: Any) -> Unit) { LenovoSDK.loginOut(BaseConsts.mTopActivity, object : LenovoSDK.LoginCallBack { override fun loginSuccess(data: String?) { callback("success") } override fun loginFail(data: String?) { callback("fail") } }) } /** * 支付宝支付 * */ @AsyncJsApi(methodName = "aliPay") fun aliPay(data: JSONObject?, callback: (data: Any) -> Unit) { Logger.e("调用插件支付宝支付方法!") if (mAliPayLEBCallBack == null) { Logger.e("重置支付宝支付方法的callback") mAliPayLEBCallBack = Observer { t: DataBean? -> Logger.e("支付宝支付返回:${t!!.toJSON()}") callback(t.toJSON()!!) //清空监听 mAliPayLEBCallBack = clearLEBCallBackByKey(ALI_PAY_CALLBACK, mAliPayLEBCallBack!!) } //注册监听 LiveEventBus .get(ALI_PAY_CALLBACK, DataBean::class.java) .observeForever(mAliPayLEBCallBack!!) } Logger.e("调用支付宝支付方法") var intent = Intent(BaseConsts.mTopActivity, AliPayActivity::class.java) intent.putExtra("orderInfo", data.toString()) BaseConsts.mTopActivity.startActivity(intent) } @AsyncJsApi(methodName = "HuaWeiLogin") fun huaweiLogin(data: JSONObject?, callback: (data: Any) -> Unit) { if (mHuaWeiLoginLEBCallBack == null) { Logger.e("初始化华为LEBcallback") mHuaWeiLoginLEBCallBack = Observer { t: DataBean? -> Logger.e("华为监听返回:${t!!.toJSON()}") callback(t.toJSON()); //移除LEB监听和指控 mHuaWeiLoginLEBCallBack = clearLEBCallBackByKey(HUAWEI_LOGIN_CALLBACK, mHuaWeiLoginLEBCallBack!!) } //注册LEBCallBack监听 LiveEventBus .get(HUAWEI_LOGIN_CALLBACK, DataBean::class.java) .observeForever(mHuaWeiLoginLEBCallBack!!) } var intent = Intent(BaseConsts.mTopActivity, HuaWeiActivity::class.java) intent.putExtra("type", "0") BaseConsts.mTopActivity.startActivity(intent) } @AsyncJsApi(methodName = "HuaWeiSignOut") fun huaweiLogout(data: JSONObject?, callback: (data: Any) -> Unit) { if (mHuaWeiLogOutLEBCallBack == null) { mHuaWeiLogOutLEBCallBack = Observer { t: DataBean? -> Logger.e("华为登出监听返回:${t!!.toJSON()}") callback(t.toJSON()); //移除LEB监听和指控 mHuaWeiLogOutLEBCallBack = clearLEBCallBackByKey(HUAWEI_LOGOUT_CALLBACK, mHuaWeiLogOutLEBCallBack!!) } //注册LEBCallBack监听 LiveEventBus .get(HUAWEI_LOGOUT_CALLBACK, DataBean::class.java) .observeForever(mHuaWeiLogOutLEBCallBack!!) } var intent = Intent(BaseConsts.mTopActivity, HuaWeiActivity::class.java) intent.putExtra("type", "1") BaseConsts.mTopActivity.startActivity(intent) } @AsyncJsApi(methodName = "HuaWeiPay") fun huaweiPay(data: JSONObject?, callback: (data: Any) -> Unit) { var intent = Intent(BaseConsts.mTopActivity, HuaWeiActivity::class.java) intent.putExtra("type", "2") intent.putExtra("payData", data.toString()) BaseConsts.mTopActivity.startActivity(intent) } //根据key移除leb回调,并且指向空 private fun clearLEBCallBackByKey( key: String, observer: Observer ): Observer? { LiveEventBus .get(key, DataBean::class.java) .removeObserver(observer) return null; } }