@@ -4,23 +4,29 @@ import android.annotation.SuppressLint
44import android.content.Intent
55import android.os.Build
66import android.os.Bundle
7+ import android.webkit.WebResourceError
8+ import android.webkit.WebResourceRequest
79import android.webkit.WebView
810import android.webkit.WebViewClient
11+ import android.widget.Toast
912import androidx.activity.OnBackPressedCallback
1013import androidx.appcompat.app.AppCompatActivity
1114import androidx.core.view.isVisible
15+ import co.thepeer.sdk.R
1216import co.thepeer.sdk.databinding.SdkActivityBinding
1317import co.thepeer.sdk.model.ThepeerParam
1418import co.thepeer.sdk.model.ThepeerResult
1519import co.thepeer.sdk.ui.fragments.ThepeerFragment
20+ import co.thepeer.sdk.utils.*
1621import co.thepeer.sdk.utils.Logger
17- import co.thepeer.sdk.utils.ThepeerConstants
1822import co.thepeer.sdk.utils.Urls
1923import co.thepeer.sdk.utils.WebInterface
2024
2125class ThepeerSDKActivity : AppCompatActivity () {
2226 private var params: ThepeerParam ? = null
27+ private var url: String = " "
2328 private lateinit var binding: SdkActivityBinding
29+ private var isLoaded = false
2430 override fun onCreate (savedInstanceState : Bundle ? ) {
2531 super .onCreate(savedInstanceState)
2632 binding = SdkActivityBinding .inflate(layoutInflater)
@@ -36,19 +42,17 @@ class ThepeerSDKActivity : AppCompatActivity() {
3642 intent.getParcelableExtra<ThepeerParam >(ThepeerConstants .THE_PEER_PARAMS )
3743 }
3844
39-
4045 if (params == null ) {
4146 throw IllegalStateException (" Params should not be null. Initialize thePeer using this function Thepeer.Builder(...)" )
4247 }
4348
49+
4450 params?.let {
45- val url = Urls .createTransactionUrl(it)
46- setupWebView(url )
51+ url = Urls .createTransactionUrl(it)
52+ showWebView( )
4753 Logger .log(this , url)
4854 }
4955
50-
51-
5256 }
5357
5458 @SuppressLint(" SetJavaScriptEnabled" )
@@ -63,8 +67,20 @@ class ThepeerSDKActivity : AppCompatActivity() {
6367 binding.webViewPeer.webViewClient = object : WebViewClient () {
6468 override fun onPageFinished (view : WebView , url : String ) {
6569 super .onPageFinished(view, url)
70+ isLoaded = true
6671 binding.webViewPeer.isVisible = true
6772 }
73+
74+ override fun onReceivedError (
75+ view : WebView ? ,
76+ request : WebResourceRequest ? ,
77+ error : WebResourceError ?
78+ ) {
79+ if (error != null ) {
80+ showNetworkErrorRetryView()
81+ }
82+ }
83+
6884 }
6985
7086
@@ -80,10 +96,56 @@ class ThepeerSDKActivity : AppCompatActivity() {
8096
8197 override fun onDestroy () {
8298 super .onDestroy()
99+ clearWebViewValues()
100+ redirectWithResult(ThepeerResult .Cancelled )
101+ }
102+
103+ private fun clearWebViewValues () {
83104 params = null
84105 binding.webViewPeer.loadUrl(" about:blank" )
85106 binding.webViewPeer.clearHistory()
86- redirectWithResult(ThepeerResult .Cancelled )
107+ }
108+
109+ private fun showNetworkErrorRetryView () {
110+ if (! isNetworkConnectionAvailable) {
111+ if (! isLoaded) {
112+ hideWebView()
113+ binding.includeRetryView.retryView.isVisible = true
114+ } else {
115+ Toast .makeText(this , getString(R .string.retry_text), Toast .LENGTH_LONG )
116+ .show()
117+ }
118+
119+ } else {
120+ Toast .makeText(this , " Something went wrong. Contact thePeer support" , Toast .LENGTH_LONG )
121+ .show()
122+ }
123+
124+ binding.includeRetryView.retryButton.setOnClickListener {
125+ if (isNetworkConnectionAvailable && url.isNotBlank()) {
126+ hideRetryView()
127+ setupWebView(url)
128+ }
129+ }
130+ }
131+
132+ private fun hideRetryView (){
133+ binding.includeRetryView.retryView.isVisible = false
134+ binding.loading.isVisible = true
135+ }
136+
137+ private fun showWebView () {
138+ binding.loading.isVisible = true
139+ if (isNetworkConnectionAvailable) {
140+ setupWebView(url)
141+ } else {
142+ showNetworkErrorRetryView()
143+ }
144+ }
145+
146+ private fun hideWebView () {
147+ binding.webViewPeer.isVisible = false
148+ binding.loading.isVisible = false
87149 }
88150
89151 private fun redirectWithResult (result : ThepeerResult ) {
@@ -97,6 +159,9 @@ class ThepeerSDKActivity : AppCompatActivity() {
97159 object : OnBackPressedCallback (true ) {
98160 override fun handleOnBackPressed () {
99161 params = null
162+ if (! isNetworkConnectionAvailable){
163+ finish()
164+ }
100165 }
101166 }
102167
0 commit comments