master
kt 128 lines 3.73 KB
Raw
1 package com.plugin.admob
2
3 import com.plugin.admob.ads.AdBase
4 import com.plugin.admob.core.Context
5 import com.plugin.admob.core.Helper.Companion.jsonArray2stringList
6 import android.app.Activity
7 import app.tauri.plugin.Invoke
8 import app.tauri.plugin.JSObject
9 import org.json.JSONException
10 import org.json.JSONObject
11 import java.lang.reflect.InvocationTargetException
12
13 class ExecuteContext internal constructor(private val call: Invoke) : Context {
14 fun <T : AdBase?> optAdOrCreate(type: Class<T>): T? {
15 var ad = type.cast(optAd())
16 if (ad == null) {
17 try {
18 ad = type.getDeclaredConstructor(ExecuteContext::class.java).newInstance(this)
19 } catch (e: IllegalAccessException) {
20 e.printStackTrace()
21 this.reject("Fail to create ad")
22 } catch (e: InstantiationException) {
23 e.printStackTrace()
24 this.reject("Fail to create ad")
25 } catch (e: InvocationTargetException) {
26 e.printStackTrace()
27 this.reject("Fail to create ad")
28 } catch (e: NoSuchMethodException) {
29 e.printStackTrace()
30 this.reject("Fail to create ad")
31 }
32 }
33 return ad
34 }
35
36 val activity: Activity
37 get() = plugin!!.activity
38
39 private fun getData(): InvokeArgs {
40 return call.parseArgs(InvokeArgs::class.java);
41 }
42
43 private fun getProperty(args: InvokeArgs, name: String): Any? {
44 return when (name) {
45 "id" -> args.id
46 "cls" -> args.cls
47 "adUnitId" -> args.adUnitId
48 "appMuted" -> args.appMuted
49 "appVolume" -> args.appVolume
50 "position" -> args.position
51 "contentUrl" -> args.contentUrl
52 "npa" -> args.npa
53 "maxAdContentRating" -> args.maxAdContentRating
54 "tagForChildDirectedTreatment" -> args.tagForChildDirectedTreatment
55 "tagForUnderAgeOfConsent" -> args.tagForUnderAgeOfConsent
56 "testDeviceIds" -> args.testDeviceIds
57 "serverSideVerification" -> args.serverSideVerification
58 "customData" -> args.customData
59 "userId" -> args.userId
60 else -> null
61 }
62 }
63
64 override fun getInvokeArgs(): InvokeArgs {
65 return getData()
66 }
67
68 override fun has(name: String): Boolean {
69 println("has: $name, ${getProperty(getData(), name)}")
70 return getProperty(getData(), name) != null
71 }
72
73 override fun opt(name: String): Any? {
74 println("opt: $name, ${getProperty(getData(), name)}")
75 return getProperty(getData(), name)
76 }
77
78 override fun optBoolean(name: String): Boolean? {
79 return opt(name) as Boolean?
80 }
81
82 override fun optDouble(name: String): Double? {
83 return opt(name) as Double?
84 }
85
86 override fun optFloat(name: String): Float? {
87 return opt(name) as Float?
88 }
89
90 override fun optInt(name: String): Int? {
91 return opt(name) as Int?
92 }
93
94 override fun optString(name: String): String? {
95 return opt(name) as String?
96 }
97
98 override fun optStringList(name: String): List<String?> {
99 return opt(name) as List<String?>
100 }
101
102 override fun optObject(name: String): JSONObject? {
103 return opt(name) as JSONObject?
104 }
105
106 override fun resolve() {
107 call.resolve()
108 }
109
110 override fun resolve(data: Boolean) {
111 try {
112 call.resolve(JSObject().apply {
113 put("data", data)
114 })
115 } catch (e: JSONException) {
116 e.printStackTrace()
117 reject()
118 }
119 }
120
121 override fun reject(msg: String?) {
122 call.reject(msg)
123 }
124
125 companion object {
126 var plugin: AdmobPlugin? = null
127 }
128 }