From ff154a92d581cf7617a3f7912bb8b63667395918 Mon Sep 17 00:00:00 2001 From: Romman Sabbir Date: Sat, 20 Aug 2022 11:25:58 +0600 Subject: [PATCH 01/16] new smart config added to replace old config, new config define NetworkX lifecycle. --- .../main/java/com/rommansabbir/networkx/SmartConfig.kt | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 NetworkX/src/main/java/com/rommansabbir/networkx/SmartConfig.kt diff --git a/NetworkX/src/main/java/com/rommansabbir/networkx/SmartConfig.kt b/NetworkX/src/main/java/com/rommansabbir/networkx/SmartConfig.kt new file mode 100644 index 0000000..6dc17ae --- /dev/null +++ b/NetworkX/src/main/java/com/rommansabbir/networkx/SmartConfig.kt @@ -0,0 +1,9 @@ +package com.rommansabbir.networkx + +import android.app.Application + +data class SmartConfig( + val application: Application, + val enableSpeedMeter: Boolean, + val lifecycle: NetworkXLifecycle +) \ No newline at end of file From a45c17f88126fc1efb93fe1654596b1eebd48efa Mon Sep 17 00:00:00 2001 From: Romman Sabbir Date: Sat, 20 Aug 2022 11:26:25 +0600 Subject: [PATCH 02/16] removed unused class --- .../networkx/exceptions/NoInternetDialogException.kt | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 NetworkX/src/main/java/com/rommansabbir/networkx/exceptions/NoInternetDialogException.kt diff --git a/NetworkX/src/main/java/com/rommansabbir/networkx/exceptions/NoInternetDialogException.kt b/NetworkX/src/main/java/com/rommansabbir/networkx/exceptions/NoInternetDialogException.kt deleted file mode 100644 index d10e4c8..0000000 --- a/NetworkX/src/main/java/com/rommansabbir/networkx/exceptions/NoInternetDialogException.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.rommansabbir.networkx.exceptions - -class NoInternetDialogException : - Exception("Activity reference is required to build an instance of NoInternetDialog") { -} \ No newline at end of file From 6e61c82c100bacc5f5c3a89b8d940b5413679def Mon Sep 17 00:00:00 2001 From: Romman Sabbir Date: Sat, 20 Aug 2022 11:27:06 +0600 Subject: [PATCH 03/16] sealed class to define NetworkX lifecycle state, either application or activity scope --- .../java/com/rommansabbir/networkx/NetworkXLifecycle.kt | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 NetworkX/src/main/java/com/rommansabbir/networkx/NetworkXLifecycle.kt diff --git a/NetworkX/src/main/java/com/rommansabbir/networkx/NetworkXLifecycle.kt b/NetworkX/src/main/java/com/rommansabbir/networkx/NetworkXLifecycle.kt new file mode 100644 index 0000000..e484196 --- /dev/null +++ b/NetworkX/src/main/java/com/rommansabbir/networkx/NetworkXLifecycle.kt @@ -0,0 +1,9 @@ +package com.rommansabbir.networkx + +/** + * Define the lifecycle for NetworkX. Either activity or application. + */ +sealed class NetworkXLifecycle { + object Application : NetworkXLifecycle() + object Activity : NetworkXLifecycle() +} From b9a9513bdb28d38a24a08d92b446542eb211db1f Mon Sep 17 00:00:00 2001 From: Romman Sabbir Date: Sat, 20 Aug 2022 11:27:31 +0600 Subject: [PATCH 04/16] old config deprecated --- .../src/main/java/com/rommansabbir/networkx/NetworkXConfig.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/NetworkX/src/main/java/com/rommansabbir/networkx/NetworkXConfig.kt b/NetworkX/src/main/java/com/rommansabbir/networkx/NetworkXConfig.kt index c99d19c..aab562f 100644 --- a/NetworkX/src/main/java/com/rommansabbir/networkx/NetworkXConfig.kt +++ b/NetworkX/src/main/java/com/rommansabbir/networkx/NetworkXConfig.kt @@ -12,6 +12,7 @@ import com.rommansabbir.networkx.exceptions.NetworkXNotInitializedException * @param application, [Application] reference to initialize NetworkX properly * @param enableSpeedMeter, determine if to enable monitoring network speed */ +@Deprecated("Use new SmartConfig.") class NetworkXConfig private constructor( val application: Application, val enableSpeedMeter: Boolean From 9b34a26fec3b36f32e8ba791c92eda0515473bb6 Mon Sep 17 00:00:00 2001 From: Romman Sabbir Date: Sat, 20 Aug 2022 11:28:51 +0600 Subject: [PATCH 05/16] added support for lifecycle scope. NetworkX can work both on application or activity scope based on new smart config --- .../rommansabbir/networkx/NetworkXManager.kt | 84 +++++++++++++------ 1 file changed, 58 insertions(+), 26 deletions(-) diff --git a/NetworkX/src/main/java/com/rommansabbir/networkx/NetworkXManager.kt b/NetworkX/src/main/java/com/rommansabbir/networkx/NetworkXManager.kt index 35dc2cf..20a84ae 100644 --- a/NetworkX/src/main/java/com/rommansabbir/networkx/NetworkXManager.kt +++ b/NetworkX/src/main/java/com/rommansabbir/networkx/NetworkXManager.kt @@ -14,27 +14,20 @@ import android.util.Log import java.net.InetAddress internal class NetworkXManager constructor( - private val application: Application, - private val isSpeedMeterEnabled: Boolean + private val smartConfig: SmartConfig ) { // Callback for activity lifecycle for this specific application private val activityCallback = object : Application.ActivityLifecycleCallbacks { override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) { - try { - getConnectivityManager(application).apply { - registerNetworkCallback( - getNetworkRequest(), - getNetworkCallBack - ) - if (isSpeedMeterEnabled) { - enabledSpeedMeter() - logThis("onActivityCreated: speed meter enabled") + when (smartConfig.lifecycle) { + NetworkXLifecycle.Activity -> { + initObservation() + } + NetworkXLifecycle.Application -> { + if (!isObservationRunning) { + initObservation() } - logThis("onActivityCreated: listener registered") } - } catch (e: Exception) { - e.printStackTrace() - logThis(e.message) } } @@ -49,19 +42,58 @@ internal class NetworkXManager constructor( override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {} override fun onActivityDestroyed(activity: Activity) { - try { - getConnectivityManager(application).unregisterNetworkCallback(getNetworkCallBack) - logThis("onActivityDestroyed: listener unregistered") - if (isSpeedMeterEnabled) { - disableSpeedMeter() - logThis("onActivityDestroyed: speed meter disabled") + when (smartConfig.lifecycle) { + NetworkXLifecycle.Activity -> { + stopObservation() } - } catch (e: Exception) { - e.printStackTrace() - logThis(e.message) + NetworkXLifecycle.Application -> { + logThis("stopObservation(): can't stop observation since the lifecycle is set to Application") + } + } + } + + } + + private fun stopObservation() { + isObservationRunning = try { + getConnectivityManager(smartConfig.application).unregisterNetworkCallback( + getNetworkCallBack + ) + logThis("stopObservation(): listener unregistered") + if (smartConfig.enableSpeedMeter) { + disableSpeedMeter() + logThis("stopObservation(): speed meter disabled") } + false + } catch (e: Exception) { + e.printStackTrace() + logThis(e.message) + false } + } + + @Volatile + private var isObservationRunning: Boolean = false + private fun initObservation() { + try { + getConnectivityManager(smartConfig.application).apply { + registerNetworkCallback( + getNetworkRequest(), + getNetworkCallBack + ) + if (smartConfig.enableSpeedMeter) { + enabledSpeedMeter() + logThis("initObservation(): speed meter enabled") + } + logThis("initObservation(): listener registered") + isObservationRunning = true + } + } catch (e: Exception) { + e.printStackTrace() + logThis(e.message) + isObservationRunning = false + } } @Volatile @@ -70,8 +102,8 @@ internal class NetworkXManager constructor( // Initialize the Manager init { try { - getConnectivityManager(application) - application.registerActivityLifecycleCallbacks(activityCallback) + getConnectivityManager(smartConfig.application) + smartConfig.application.registerActivityLifecycleCallbacks(activityCallback) trafficUtils = TrafficUtils() } catch (e: Exception) { e.printStackTrace() From 7bcebd03e8db964ad8969341c11280aae505fc3e Mon Sep 17 00:00:00 2001 From: Romman Sabbir Date: Sat, 20 Aug 2022 11:29:50 +0600 Subject: [PATCH 06/16] deprecated old initializer with smart replace option, introduced new API to initialize NetworkX --- .../rommansabbir/networkx/NetworkXProvider.kt | 45 +++++++++++++++++-- 1 file changed, 42 insertions(+), 3 deletions(-) diff --git a/NetworkX/src/main/java/com/rommansabbir/networkx/NetworkXProvider.kt b/NetworkX/src/main/java/com/rommansabbir/networkx/NetworkXProvider.kt index fe83f0f..8f92c75 100644 --- a/NetworkX/src/main/java/com/rommansabbir/networkx/NetworkXProvider.kt +++ b/NetworkX/src/main/java/com/rommansabbir/networkx/NetworkXProvider.kt @@ -7,7 +7,6 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import com.rommansabbir.networkx.extension.getDefaultIOScope import com.rommansabbir.networkx.extension.getDefaultLastKnownSpeed -import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.launch @@ -106,7 +105,13 @@ object NetworkXProvider { if (manager != null) { return } - manager = NetworkXManager(application, enableSpeedMeter) + manager = NetworkXManager( + SmartConfig( + application, + enableSpeedMeter, + NetworkXLifecycle.Application + ) + ) } catch (e: Exception) { throw e } @@ -119,12 +124,46 @@ object NetworkXProvider { * * @param config [NetworkXConfig] reference. */ + @Deprecated( + "Use new SmartConfig.", + replaceWith = ReplaceWith( + "NetworkXProvider.enable(SmartConfig(application, true, NetworkXLifecycle.Application))", + imports = arrayOf( + "com.rommansabbir.networkx.SmartConfig", + "com.rommansabbir.networkx.NetworkXLifecycle" + ) + ) + ) fun enable(config: NetworkXConfig) { try { if (manager != null) { return } - manager = NetworkXManager(config.application, config.enableSpeedMeter) + manager = NetworkXManager( + SmartConfig( + config.application, + config.enableSpeedMeter, + NetworkXLifecycle.Application + ) + ) + } catch (e: Exception) { + throw e + } + } + + /** + * Main entry point for the client. + * First check for [NetworkXManager] instance, if the status is null then initialize it properly + * else ignore the initialization. + * + * @param config [SmartConfig] reference. + */ + fun enable(config: SmartConfig) { + try { + if (manager != null) { + return + } + manager = NetworkXManager(config) } catch (e: Exception) { throw e } From 4689c29e33ce7b292676448629c8d279fde2994a Mon Sep 17 00:00:00 2001 From: Romman Sabbir Date: Sat, 20 Aug 2022 11:30:24 +0600 Subject: [PATCH 07/16] deprecated old extension initializer with new one --- .../networkx/extension/NetworkXExtensions.kt | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/NetworkX/src/main/java/com/rommansabbir/networkx/extension/NetworkXExtensions.kt b/NetworkX/src/main/java/com/rommansabbir/networkx/extension/NetworkXExtensions.kt index 0bca019..f0cc5ab 100644 --- a/NetworkX/src/main/java/com/rommansabbir/networkx/extension/NetworkXExtensions.kt +++ b/NetworkX/src/main/java/com/rommansabbir/networkx/extension/NetworkXExtensions.kt @@ -1,10 +1,7 @@ package com.rommansabbir.networkx.extension import androidx.lifecycle.LiveData -import com.rommansabbir.networkx.LastKnownSpeed -import com.rommansabbir.networkx.NetworkSpeedType -import com.rommansabbir.networkx.NetworkXConfig -import com.rommansabbir.networkx.NetworkXProvider +import com.rommansabbir.networkx.* import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.MutableStateFlow @@ -56,4 +53,22 @@ internal val getDefaultIOScope by lazy { CoroutineScope(Dispatchers.IO) } * * @param config [NetworkXConfig]. */ + +@Deprecated( + "Use new extension API", replaceWith = ReplaceWith( + "smartEnableNetworkX(SmartConfig(application, true, NetworkXLifecycle.Application))", + imports = arrayOf( + "com.rommansabbir.networkx.extension.smartEnableNetworkX", + "com.rommansabbir.networkx.SmartConfig", + "com.rommansabbir.networkx.NetworkXLifecycle" + ) + ) +) fun enableNetworkX(config: NetworkXConfig) = NetworkXProvider.enable(config) + +/** + * Initialize [NetworkXProvider]. + * + * @param config [SmartConfig]. + */ +fun smartEnableNetworkX(config: SmartConfig) = NetworkXProvider.enable(config) From 416c242703b39cef5ed0a89c0991db83725ef725 Mon Sep 17 00:00:00 2001 From: Romman Sabbir Date: Sat, 20 Aug 2022 11:30:53 +0600 Subject: [PATCH 08/16] added support for custom drawable before showing no internet dialog --- .../networkx/dialog/NoInternetDialogV2.kt | 15 +++++++++++++-- .../res/layout/content_dialog_no_internet.xml | 3 +-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/NetworkX/src/main/java/com/rommansabbir/networkx/dialog/NoInternetDialogV2.kt b/NetworkX/src/main/java/com/rommansabbir/networkx/dialog/NoInternetDialogV2.kt index 43e6aae..80581b7 100644 --- a/NetworkX/src/main/java/com/rommansabbir/networkx/dialog/NoInternetDialogV2.kt +++ b/NetworkX/src/main/java/com/rommansabbir/networkx/dialog/NoInternetDialogV2.kt @@ -2,6 +2,8 @@ package com.rommansabbir.networkx.dialog import android.app.Activity import android.app.Dialog +import androidx.annotation.DrawableRes +import androidx.core.content.ContextCompat import com.rommansabbir.networkx.R import com.rommansabbir.networkx.databinding.ContentDialogNoInternetBinding import com.rommansabbir.networkx.extension.getDialogInstance @@ -13,12 +15,13 @@ class NoInternetDialogV2 constructor( private val message: String, private val buttonTitle: String, private val isCancelable: Boolean, + @DrawableRes private val drawable: Int? = null, private val callback: () -> Unit ) { init { - activity.get()?.let { + activity.get()?.let { activity -> getDialogInstance( - it, + activity, R.layout.content_dialog_no_internet, R.style.my_dialog, isCancelable @@ -27,6 +30,14 @@ class NoInternetDialogV2 constructor( binding.cdniBtnRetry.text = buttonTitle binding.cdniTvTitle.text = title binding.cdniTvMessage.text = message + drawable?.let { + binding.imageView.setImageDrawable( + ContextCompat.getDrawable( + activity, + drawable + ) + ) + } NoInternetDialogV2.dialog?.setOnDismissListener { NoInternetDialogV2.dialog = null } diff --git a/NetworkX/src/main/res/layout/content_dialog_no_internet.xml b/NetworkX/src/main/res/layout/content_dialog_no_internet.xml index ce3f6a5..cf63f59 100644 --- a/NetworkX/src/main/res/layout/content_dialog_no_internet.xml +++ b/NetworkX/src/main/res/layout/content_dialog_no_internet.xml @@ -9,8 +9,7 @@ + android:layout_height="wrap_content"> Date: Sat, 20 Aug 2022 11:31:05 +0600 Subject: [PATCH 09/16] application class updated --- .../networkobserverexample/MyApplication.kt | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/rommansabbir/networkobserverexample/MyApplication.kt b/app/src/main/java/com/rommansabbir/networkobserverexample/MyApplication.kt index b8c90f0..4237f5d 100644 --- a/app/src/main/java/com/rommansabbir/networkobserverexample/MyApplication.kt +++ b/app/src/main/java/com/rommansabbir/networkobserverexample/MyApplication.kt @@ -1,20 +1,25 @@ package com.rommansabbir.networkobserverexample import android.app.Application -import com.rommansabbir.networkx.NetworkXConfig +import com.rommansabbir.networkx.NetworkXLifecycle import com.rommansabbir.networkx.NetworkXProvider +import com.rommansabbir.networkx.SmartConfig class MyApplication : Application() { override fun onCreate() { super.onCreate() - /** - * Initialize NetworkX - */ - val builder = NetworkXConfig + /*Deprecated way*/ + /*val builder = NetworkXConfig .Builder() .withApplication(this) .withEnableSpeedMeter(true) .build() - NetworkXProvider.enable(builder) + NetworkXProvider.enable(builder)*/ + + /*New way*/ + NetworkXProvider.enable(SmartConfig(this, true, NetworkXLifecycle.Application)) + + /*Smart extension*/ + /*smartEnableNetworkX(SmartConfig(this, true, NetworkXLifecycle.Application))*/ } } \ No newline at end of file From 47b11405bef20105db558e435d6cb51fc11428aa Mon Sep 17 00:00:00 2001 From: Romman Sabbir Date: Sat, 20 Aug 2022 11:35:52 +0600 Subject: [PATCH 10/16] sample app updated --- .../networkobserverexample/MainActivity.kt | 35 +++++++++---------- 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/com/rommansabbir/networkobserverexample/MainActivity.kt b/app/src/main/java/com/rommansabbir/networkobserverexample/MainActivity.kt index 8a1f808..d4661de 100644 --- a/app/src/main/java/com/rommansabbir/networkobserverexample/MainActivity.kt +++ b/app/src/main/java/com/rommansabbir/networkobserverexample/MainActivity.kt @@ -53,6 +53,23 @@ class MainActivity : AppCompatActivity() { isInternetConnectedFlow.collect { lifecycleScope.launch { textView.text = "Internet connection status: $it" + if (!it){ + if (!NoInternetDialogV2.isVisible) { + NoInternetDialogV2( + activity = WeakReference(this@MainActivity), + title = "No Internet Bro", + message = "This is just a dummy message", + buttonTitle = "Okay", + isCancelable = false + ) { + Toast.makeText( + this@MainActivity, + "Is dialog cancelled? : ${!NoInternetDialogV2.isVisible}", + Toast.LENGTH_SHORT + ).show() + } + } + } } } } catch (e: Exception) { @@ -60,23 +77,5 @@ class MainActivity : AppCompatActivity() { } } - lifecycleScope.launch { - delay(5000) - if (!NoInternetDialogV2.isVisible) { - NoInternetDialogV2( - activity = WeakReference(this@MainActivity), - title = "No Internet Bro", - message = "This is just a dummy message", - buttonTitle = "Okay", - isCancelable = true - ) { - Toast.makeText( - this@MainActivity, - "Is dialog cancelled? : ${!NoInternetDialogV2.isVisible}", - Toast.LENGTH_SHORT - ).show() - } - } - } } } \ No newline at end of file From 7dda978cbad4d791005bc2a4ad790a439fe44d77 Mon Sep 17 00:00:00 2001 From: Romman Sabbir Date: Sat, 20 Aug 2022 11:52:26 +0600 Subject: [PATCH 11/16] Update README.md added logo --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index 1e947fb..20aa468 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,6 @@ [![Release](https://jitpack.io/v/jitpack/android-example.svg)](https://jitpack.io/#rommansabbir/NetworkX) -# NetworkX - -An easy & handy library to monitor device internet connection status. +![NetworkX](https://user-images.githubusercontent.com/25950083/185731068-480fd969-f18d-439c-938a-6285a50c2be2.png) --- From 156abc643a11673e8a5a0b190bbb757e36c61e15 Mon Sep 17 00:00:00 2001 From: Romman Sabbir Date: Sat, 20 Aug 2022 12:37:39 +0600 Subject: [PATCH 12/16] another activity added for sample app --- app/src/main/AndroidManifest.xml | 6 ++- .../networkobserverexample/DummyActivity.kt | 50 +++++++++++++++++++ app/src/main/res/layout/activity_dummy.xml | 16 ++++++ 3 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/com/rommansabbir/networkobserverexample/DummyActivity.kt create mode 100644 app/src/main/res/layout/activity_dummy.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 875966d..41f3d81 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -10,7 +10,11 @@ android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> - + diff --git a/app/src/main/java/com/rommansabbir/networkobserverexample/DummyActivity.kt b/app/src/main/java/com/rommansabbir/networkobserverexample/DummyActivity.kt new file mode 100644 index 0000000..c2771a0 --- /dev/null +++ b/app/src/main/java/com/rommansabbir/networkobserverexample/DummyActivity.kt @@ -0,0 +1,50 @@ +package com.rommansabbir.networkobserverexample + +import android.annotation.SuppressLint +import android.os.Bundle +import android.widget.Toast +import androidx.appcompat.app.AppCompatActivity +import androidx.lifecycle.lifecycleScope +import com.rommansabbir.networkx.NetworkXProvider +import com.rommansabbir.networkx.dialog.NoInternetDialogV2 +import kotlinx.coroutines.flow.collect +import kotlinx.coroutines.launch +import java.lang.ref.WeakReference + +class DummyActivity : AppCompatActivity() { + @SuppressLint("SetTextI18n") + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_dummy) + + lifecycleScope.launchWhenCreated { + try { + NetworkXProvider.isInternetConnectedFlow.collect { + lifecycleScope.launch { + if (!it) { + if (!NoInternetDialogV2.isVisible) { + NoInternetDialogV2( + activity = WeakReference(this@DummyActivity), + title = "No Internet Bro", + message = "This is just a dummy message", + buttonTitle = "Okay", + isCancelable = false + ) { + } + } + } else { + NoInternetDialogV2.forceClose() + Toast.makeText( + this@DummyActivity, + "Is connected? : $it", + Toast.LENGTH_SHORT + ).show() + } + } + } + } catch (e: Exception) { + e.printStackTrace() + } + } + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_dummy.xml b/app/src/main/res/layout/activity_dummy.xml new file mode 100644 index 0000000..7bf8ec8 --- /dev/null +++ b/app/src/main/res/layout/activity_dummy.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + \ No newline at end of file From f68939fe8ffab1665bd3106e101b49b2f556f598 Mon Sep 17 00:00:00 2001 From: Romman Sabbir Date: Sat, 20 Aug 2022 12:38:35 +0600 Subject: [PATCH 13/16] view extension updated to return dialog object --- .../com/rommansabbir/networkx/extension/ViewExtension.kt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/NetworkX/src/main/java/com/rommansabbir/networkx/extension/ViewExtension.kt b/NetworkX/src/main/java/com/rommansabbir/networkx/extension/ViewExtension.kt index 6a3fd4b..4402fec 100644 --- a/NetworkX/src/main/java/com/rommansabbir/networkx/extension/ViewExtension.kt +++ b/NetworkX/src/main/java/com/rommansabbir/networkx/extension/ViewExtension.kt @@ -23,13 +23,14 @@ inline fun getDialogInstance( layoutId: Int, @StyleRes customStyle: Int? = null, setCancelable: Boolean = false, - crossinline onSuccess: (Dialog, V) -> Unit -) { + crossinline onSuccess: (V) -> Unit +): Dialog { val layout = DataBindingUtil.inflate(LayoutInflater.from(activity), layoutId, null, false) val dialog = if (customStyle == null) Dialog(activity) else Dialog(activity, customStyle) dialog.setContentView(layout.root) dialog.window!!.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) dialog.setCanceledOnTouchOutside(setCancelable) dialog.setCancelable(setCancelable) - onSuccess.invoke(dialog, layout) + onSuccess.invoke(layout) + return dialog } \ No newline at end of file From 1a0d94fac688dce6c1fdaf16f96f8882ccb0b237 Mon Sep 17 00:00:00 2001 From: Romman Sabbir Date: Sat, 20 Aug 2022 12:39:20 +0600 Subject: [PATCH 14/16] main activity update from sample app --- .../networkobserverexample/MainActivity.kt | 36 +++++++++---------- app/src/main/res/layout/activity_main.xml | 11 ++++++ 2 files changed, 28 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/com/rommansabbir/networkobserverexample/MainActivity.kt b/app/src/main/java/com/rommansabbir/networkobserverexample/MainActivity.kt index d4661de..3659702 100644 --- a/app/src/main/java/com/rommansabbir/networkobserverexample/MainActivity.kt +++ b/app/src/main/java/com/rommansabbir/networkobserverexample/MainActivity.kt @@ -1,6 +1,7 @@ package com.rommansabbir.networkobserverexample import android.annotation.SuppressLint +import android.content.Intent import android.os.Bundle import android.widget.Toast import androidx.appcompat.app.AppCompatActivity @@ -10,7 +11,6 @@ import com.rommansabbir.networkx.NetworkXProvider.isInternetConnectedFlow import com.rommansabbir.networkx.NetworkXProvider.lastKnownSpeedFlow import com.rommansabbir.networkx.dialog.NoInternetDialogV2 import kotlinx.android.synthetic.main.activity_main.* -import kotlinx.coroutines.delay import kotlinx.coroutines.flow.collect import kotlinx.coroutines.launch import java.lang.ref.WeakReference @@ -27,7 +27,17 @@ class MainActivity : AppCompatActivity() { // NetworkXProvider.isInternetConnectedLiveData.observe(this) { it?.let { - textView.text = "Internet connection status: $it" + NoInternetDialogV2.forceClose() + if (!it) { + NoInternetDialogV2( + activity = WeakReference(this@MainActivity), + title = "No Internet Bro", + message = "This is just a dummy message", + buttonTitle = "Okay", + isCancelable = false + ) { + } + } } } @@ -53,23 +63,6 @@ class MainActivity : AppCompatActivity() { isInternetConnectedFlow.collect { lifecycleScope.launch { textView.text = "Internet connection status: $it" - if (!it){ - if (!NoInternetDialogV2.isVisible) { - NoInternetDialogV2( - activity = WeakReference(this@MainActivity), - title = "No Internet Bro", - message = "This is just a dummy message", - buttonTitle = "Okay", - isCancelable = false - ) { - Toast.makeText( - this@MainActivity, - "Is dialog cancelled? : ${!NoInternetDialogV2.isVisible}", - Toast.LENGTH_SHORT - ).show() - } - } - } } } } catch (e: Exception) { @@ -77,5 +70,10 @@ class MainActivity : AppCompatActivity() { } } + button.setOnClickListener { + NoInternetDialogV2.forceClose() + startActivity(Intent(this@MainActivity, DummyActivity::class.java)) + } } + } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index d747c34..cf9191a 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -35,5 +35,16 @@ app:layout_constraintEnd_toEndOf="@+id/textView" app:layout_constraintStart_toStartOf="@+id/textView" app:layout_constraintTop_toBottomOf="@+id/textView" /> + +