package com.woot.plugins.kakao import android.content.ActivityNotFoundException import android.util.Log import androidx.appcompat.app.AppCompatActivity import com.getcapacitor.JSArray import com.getcapacitor.JSObject import com.getcapacitor.PluginCall import com.kakao.sdk.user.UserApiClient import com.kakao.sdk.auth.model.OAuthToken import com.kakao.sdk.template.model.FeedTemplate import com.kakao.sdk.share.ShareClient import com.kakao.sdk.share.WebSharerClient import com.kakao.sdk.share.model.SharingResult import com.kakao.sdk.template.model.Button import com.kakao.sdk.template.model.Content import com.kakao.sdk.template.model.Link import java.util.ArrayList import com.google.gson.Gson import com.kakao.sdk.auth.AuthApiClient import com.kakao.sdk.common.model.KakaoSdkError import com.kakao.sdk.common.util.KakaoCustomTabsClient import com.kakao.sdk.talk.TalkApiClient import com.kakao.sdk.talk.model.Order import org.json.JSONArray val gson = Gson() enum class TokenStatus { LOGIN_NEEDED, ERROR, SUCCEED } class CapacitorKakao(var activity: AppCompatActivity) { fun initializeKakao(call: PluginCall) { tokenAvailability() { status: TokenStatus -> val ret = JSObject() ret.put("status", status.toString()) call.resolve(ret) } } fun kakaoLogin(call: PluginCall) { var serviceTermsParam = call.getArray("serviceTerms"); serviceTermsParam = if (serviceTermsParam === null || serviceTermsParam.length() === 0) null else serviceTermsParam; if (UserApiClient.instance.isKakaoTalkLoginAvailable(activity)) { if (serviceTermsParam != null) { UserApiClient.instance.loginWithKakaoTalk( activity, serviceTerms = serviceTermsParam.toList() ) { oAuthToken: OAuthToken?, error: Throwable? -> handleKakaoLoginResponse(call, oAuthToken, error) } } else { UserApiClient.instance.loginWithKakaoTalk( activity ) { oAuthToken: OAuthToken?, error: Throwable? -> handleKakaoLoginResponse(call, oAuthToken, error) } } } else { if (serviceTermsParam != null) { UserApiClient.instance.loginWithKakaoAccount( activity, serviceTerms = serviceTermsParam.toList() ) { oAuthToken: OAuthToken?, error: Throwable? -> handleKakaoLoginResponse(call, oAuthToken, error) } } else { UserApiClient.instance.loginWithKakaoAccount( activity ) { oAuthToken: OAuthToken?, error: Throwable? -> handleKakaoLoginResponse(call, oAuthToken, error) } } } } private fun handleKakaoLoginResponse(call: PluginCall, oAuthToken: OAuthToken?, error: Throwable?) { if (error != null) { Log.e(TAG, "login fail : ", error) call.reject(error.toString()) } else if (oAuthToken != null) { Log.i(TAG, "login success : " + oAuthToken.accessToken) val ret = JSObject() ret.put("accessToken", oAuthToken.accessToken) ret.put("refreshToken", oAuthToken.refreshToken) call.resolve(ret) } else { call.reject("no_data") } } fun kakaoLogout(call: PluginCall) { UserApiClient.instance .logout { error: Throwable? -> if (error != null) { call.reject("logout failed") } else { call.resolve() } } } fun kakaoUnlink(call: PluginCall) { UserApiClient.instance .unlink { error: Throwable? -> if (error != null) { call.reject("unlink failed") } else { call.resolve() } } } fun shareDefault(call: PluginCall) { val imageLinkUrl = call.getString("imageLinkUrl") val imageUrl: String = if (call.getString("imageUrl") === null) "" else call.getString("imageUrl")!! val title: String = if (call.getString("title") === null) "" else call.getString("title")!! val description = call.getString("description") val buttonTitle: String = if (call.getString("buttonTitle") === null) "" else call.getString("buttonTitle")!! val imageWidth: Int? = call.getInt("imageWidth") val imageHeight: Int? = call.getInt("imageHeight") val link = Link(imageLinkUrl, imageLinkUrl, null, null) val content = Content(title, imageUrl, link, description, imageWidth, imageHeight) val buttons = ArrayList