From ea83431cf11ed3f09caa50c110ac871eb66df41c Mon Sep 17 00:00:00 2001 From: vincent-paing Date: Wed, 31 Jan 2024 21:59:25 +0700 Subject: [PATCH 1/2] Add ActivityResultContract implementation for Login Fixes #150 --- dependencyVersion.gradle | 1 + line-sdk/build.gradle | 1 + .../com/linecorp/linesdk/auth/LineLogin.kt | 28 +++++++++++++++++++ 3 files changed, 30 insertions(+) create mode 100644 line-sdk/src/main/java/com/linecorp/linesdk/auth/LineLogin.kt diff --git a/dependencyVersion.gradle b/dependencyVersion.gradle index 0eb2904..e2e9f16 100644 --- a/dependencyVersion.gradle +++ b/dependencyVersion.gradle @@ -13,6 +13,7 @@ ext { // API and runtime implementations androidx : [ + activity : "1.8.2", annotation : "1.1.0", appcompat : "1.1.0", browser : "1.2.0", diff --git a/line-sdk/build.gradle b/line-sdk/build.gradle index 6a44bcd..58a8a48 100644 --- a/line-sdk/build.gradle +++ b/line-sdk/build.gradle @@ -62,6 +62,7 @@ dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:${ver.kotlin}" + implementation "androidx.activity:activity-ktx:${ver.androidx.activity}" implementation "androidx.annotation:annotation:${ver.androidx.annotation}" implementation "androidx.appcompat:appcompat:${ver.androidx.appcompat}" implementation "androidx.browser:browser:${ver.androidx.browser}" diff --git a/line-sdk/src/main/java/com/linecorp/linesdk/auth/LineLogin.kt b/line-sdk/src/main/java/com/linecorp/linesdk/auth/LineLogin.kt new file mode 100644 index 0000000..c61f5cc --- /dev/null +++ b/line-sdk/src/main/java/com/linecorp/linesdk/auth/LineLogin.kt @@ -0,0 +1,28 @@ +package com.linecorp.linesdk.auth + +import android.content.Context +import android.content.Intent +import androidx.activity.result.contract.ActivityResultContract + +class LineLogin : ActivityResultContract() { + + data class Input( + val channelId: String, + val params: LineAuthenticationParams, + val isBrowserLoginOnly: Boolean = false + ) + + override fun createIntent(context: Context, input: Input): Intent { + val (channelId, params, isBrowserLoginOnly) = input + return if (isBrowserLoginOnly) { + LineLoginApi.getLoginIntentWithoutLineAppAuth(context, channelId, params) + } else { + LineLoginApi.getLoginIntent(context, channelId, params) + } + } + + override fun parseResult(resultCode: Int, intent: Intent?): LineLoginResult { + return LineLoginApi.getLoginResultFromIntent(intent) + } + +} From ce2a7881053a5d7ecb32053948da1c0ba3e900b4 Mon Sep 17 00:00:00 2001 From: vincent-paing Date: Wed, 31 Jan 2024 22:08:50 +0700 Subject: [PATCH 2/2] Add comment for the api --- .../java/com/linecorp/linesdk/auth/LineLogin.kt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/line-sdk/src/main/java/com/linecorp/linesdk/auth/LineLogin.kt b/line-sdk/src/main/java/com/linecorp/linesdk/auth/LineLogin.kt index c61f5cc..c462a86 100644 --- a/line-sdk/src/main/java/com/linecorp/linesdk/auth/LineLogin.kt +++ b/line-sdk/src/main/java/com/linecorp/linesdk/auth/LineLogin.kt @@ -4,6 +4,21 @@ import android.content.Context import android.content.Intent import androidx.activity.result.contract.ActivityResultContract +/** + * ActivityResultContract of [LineLoginApi] that performs LINE Login. + * + * Usage + * First, register for activity result contract + * ```kotlin + * val lineLogin = registerForActivityResult(LineLogin()) { result: LineLoginResult -> + * // Handle the returned result + * } + * ``` + * Then launch the login + * ``` + * lineLogin.launch() + * ``` + */ class LineLogin : ActivityResultContract() { data class Input(