diff --git a/auth/src/main/java/com/zarinpal/ZarinPalAuth.java b/auth/src/main/java/com/zarinpal/ZarinPalAuth.java index 0ad45bb..1c4dec7 100644 --- a/auth/src/main/java/com/zarinpal/ZarinPalAuth.java +++ b/auth/src/main/java/com/zarinpal/ZarinPalAuth.java @@ -20,10 +20,4 @@ public static ContextBuilder with(Context context) { } } - - public interface Callback { - void onIssueAccessToken(String typeToken, String accessToken, String refreshToken, long expireIn); - - void onException(Throwable throwable); - } } diff --git a/auth/src/main/java/com/zarinpal/auth/Callback.java b/auth/src/main/java/com/zarinpal/auth/Callback.java new file mode 100644 index 0000000..8d39ce6 --- /dev/null +++ b/auth/src/main/java/com/zarinpal/auth/Callback.java @@ -0,0 +1,7 @@ +package com.zarinpal.auth; + +public interface Callback { + void onIssueAccessToken(String typeToken, String accessToken, String refreshToken, long expireIn); + + void onException(Throwable throwable); +} \ No newline at end of file diff --git a/auth/src/main/java/com/zarinpal/auth/Holder.kt b/auth/src/main/java/com/zarinpal/auth/Holder.kt index cca5c4d..74fb425 100644 --- a/auth/src/main/java/com/zarinpal/auth/Holder.kt +++ b/auth/src/main/java/com/zarinpal/auth/Holder.kt @@ -4,11 +4,11 @@ import android.graphics.drawable.Drawable import com.zarinpal.ZarinPalAuth object Holder { - internal var callback: ZarinPalAuth.Callback? = null + internal var callback: Callback? = null internal var drawable: Drawable? = null internal var authClient: String? = null - fun setCallback(callback: ZarinPalAuth.Callback) { + fun setCallback(callback: Callback) { this.callback = callback } diff --git a/auth/src/main/java/com/zarinpal/auth/tools/Extensions.kt b/auth/src/main/java/com/zarinpal/auth/tools/Extensions.kt index e990711..bc9a968 100644 --- a/auth/src/main/java/com/zarinpal/auth/tools/Extensions.kt +++ b/auth/src/main/java/com/zarinpal/auth/tools/Extensions.kt @@ -1,15 +1,22 @@ package com.zarinpal.auth.tools import android.content.Context +import android.os.Bundle import android.os.CountDownTimer import android.util.Patterns import android.widget.Toast +import androidx.core.os.bundleOf +import com.zarinpal.ZarinPalAuth +import com.zarinpal.auth.Callback import com.zarinpal.auth.exception.HttpException +import com.zarinpal.builder.ZarinPalAuthPresentation import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.suspendCancellableCoroutine import org.json.JSONArray import org.json.JSONObject import kotlin.coroutines.CoroutineContext +import kotlin.coroutines.resumeWithException internal fun runCountDownTimer( milliInFuture: Long, @@ -62,7 +69,8 @@ internal fun Throwable.toToast( } } -internal val HttpException.readableCode: String? get() = JSONObject(message) +internal val HttpException.readableCode: String? + get() = JSONObject(message) .getJSONArray("errors") .first() .getString("readable_code") @@ -73,3 +81,28 @@ internal fun mutableSingleLiveEvent(block: SingleLiveEvent.() -> Unit): S return SingleLiveEvent().apply { block(this) } } +suspend fun ZarinPalAuthPresentation.start(): Bundle { + return suspendCancellableCoroutine { + start(object : Callback { + override fun onIssueAccessToken( + typeToken: String?, + accessToken: String?, + refreshToken: String?, + expireIn: Long + ) { + bundleOf( + "typeToken" to typeToken, + "accessToken" to accessToken, + "refreshToken" to refreshToken, + "expireIn" to expireIn + ).apply { it.resumeWith(Result.success(this)) } + } + + override fun onException(throwable: Throwable?) { + it.resumeWithException(throwable ?: Exception()) + } + + }) + } +} + diff --git a/auth/src/main/java/com/zarinpal/builder/ZarinPalAuthPresentation.java b/auth/src/main/java/com/zarinpal/builder/ZarinPalAuthPresentation.java index a6f5722..4ac37a0 100644 --- a/auth/src/main/java/com/zarinpal/builder/ZarinPalAuthPresentation.java +++ b/auth/src/main/java/com/zarinpal/builder/ZarinPalAuthPresentation.java @@ -5,6 +5,7 @@ import androidx.annotation.NonNull; import com.zarinpal.ZarinPalAuth; +import com.zarinpal.auth.Callback; import com.zarinpal.auth.Holder; public class ZarinPalAuthPresentation { @@ -15,7 +16,7 @@ public ZarinPalAuthPresentation(RequestBuilder requestBuilder) { this.builder = requestBuilder; } - public void start(@NonNull ZarinPalAuth.Callback callback) { + public void start(@NonNull Callback callback) { Holder.INSTANCE.setCallback(callback); Holder.INSTANCE.setDrawable(builder.getIcon()); Holder.INSTANCE.setAuthClient(builder.getAuthType().toSerialiaze()); diff --git a/auth/src/main/res/layout/parent_auth_bottosheet.xml b/auth/src/main/res/layout/parent_auth_bottosheet.xml index 331d60d..4d17561 100644 --- a/auth/src/main/res/layout/parent_auth_bottosheet.xml +++ b/auth/src/main/res/layout/parent_auth_bottosheet.xml @@ -88,9 +88,9 @@ android:id="@+id/fragment" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginStart="32dp" + android:layout_marginStart="16dp" android:layout_marginTop="16dp" - android:layout_marginEnd="32dp" + android:layout_marginEnd="16dp" android:layout_marginBottom="16dp" /> diff --git a/sample/src/main/java/com/zarinpal/auth/sample/MainActivity.kt b/sample/src/main/java/com/zarinpal/auth/sample/MainActivity.kt index f2b5b28..e0eb457 100644 --- a/sample/src/main/java/com/zarinpal/auth/sample/MainActivity.kt +++ b/sample/src/main/java/com/zarinpal/auth/sample/MainActivity.kt @@ -5,6 +5,10 @@ import android.util.Log import androidx.appcompat.app.AppCompatActivity import com.zarinpal.Request import com.zarinpal.ZarinPalAuth +import com.zarinpal.auth.Callback +import com.zarinpal.auth.tools.start +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.launch class MainActivity : AppCompatActivity() { @@ -23,11 +27,11 @@ class MainActivity : AppCompatActivity() { .asBottomSheet() .setMessage("Message") .make() - .start(object : ZarinPalAuth.Callback { + .start(object : Callback { override fun onIssueAccessToken( typeToken: String?, accessToken: String?, refreshToken: String?, expireIn: Long ) { - Log.i("TAG", accessToken) + println(accessToken) } override fun onException(throwable: Throwable?) { @@ -36,24 +40,25 @@ class MainActivity : AppCompatActivity() { }) -// ZarinPalAuth.Builder(this,) -// .setMessage("آلودگی هوا و خشکی پوست دو عامل اصلی بیماری های پوستی می باشند.") -// .build() -// .start(object : ZarinPalAuth.Callback { -// override fun onIssueAccessToken( -// typeToken: String?, -// accessToken: String?, -// refreshToken: String?, -// expireIn: Long -// ) { -// Log.i("TAG token", accessToken) -// } -// -// override fun onException(throwable: Throwable?) { -// -// } -// -// }) + //Use by Coroutine + GlobalScope.launch { + runCatching { + ZarinPalAuth.with(this@MainActivity) + .byRequest(Request.asPasswordGrant(GRANT_TYPE, CLIENT_SECRET, CLIENT_ID, SCOPE)) + .asBottomSheet() + .setMessage("Message") + .make() + .start() + }.getOrElse { + println(it.message) + return@launch + }.let { + println(it["accessToken"]) + } + + } + + } } \ No newline at end of file diff --git a/version.gradle b/version.gradle index 388d3b3..56b17c3 100644 --- a/version.gradle +++ b/version.gradle @@ -1,6 +1,6 @@ ext { - artifactVersion = "0.0.3-alpha1" + artifactVersion = "0.0.4-alpha1" library = [ 'appcompat' : '1.2.0',