diff --git a/NetworkX/build.gradle b/NetworkX/build.gradle index 64e142f..dd2651a 100644 --- a/NetworkX/build.gradle +++ b/NetworkX/build.gradle @@ -5,7 +5,7 @@ plugins { apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' group = 'rommansabbir' -version '3.1.0' +version '3.4.1' android { compileSdkVersion 31 @@ -62,7 +62,7 @@ afterEvaluate { from components.release groupId = 'com.github.rommansabbir' artifactId = 'NetworkX' - version = '3.1.0' + version = '3.4.1' } } } diff --git a/NetworkX/src/main/java/com/rommansabbir/networkx/NetworkXProvider.kt b/NetworkX/src/main/java/com/rommansabbir/networkx/NetworkXProvider.kt index 8332517..fe83f0f 100644 --- a/NetworkX/src/main/java/com/rommansabbir/networkx/NetworkXProvider.kt +++ b/NetworkX/src/main/java/com/rommansabbir/networkx/NetworkXProvider.kt @@ -30,7 +30,7 @@ object NetworkXProvider { * @param value, new connection status */ internal fun setConnection(value: Boolean) { - synchronized(value) { + synchronized(Any()) { Handler(Looper.getMainLooper()).post { connected = value isInternetConnectedMutableLiveData.value = value diff --git a/NetworkX/src/main/java/com/rommansabbir/networkx/dialog/NoInternetDialog.kt b/NetworkX/src/main/java/com/rommansabbir/networkx/dialog/NoInternetDialog.kt index 2eb6d83..561c63e 100644 --- a/NetworkX/src/main/java/com/rommansabbir/networkx/dialog/NoInternetDialog.kt +++ b/NetworkX/src/main/java/com/rommansabbir/networkx/dialog/NoInternetDialog.kt @@ -7,6 +7,7 @@ import com.rommansabbir.networkx.exceptions.NoInternetDialogException import com.rommansabbir.networkx.extension.getDialogInstance import java.lang.ref.WeakReference +@Deprecated("Use new API - NoInternetDialogV2") class NoInternetDialog private constructor(private var builder: Builder) { companion object { private var isDialogVisible: Boolean = false @@ -16,6 +17,13 @@ class NoInternetDialog private constructor(private var builder: Builder) { * * @return [Boolean] */ + @Deprecated( + "Use NoInternetDialogV2", + ReplaceWith( + "NoInternetDialogV2.isVisible", + imports = arrayOf("com.rommansabbir.networkx.dialog.NoInternetDialogV2") + ) + ) fun isDialogVisible(): Boolean = isDialogVisible class Builder { diff --git a/NetworkX/src/main/java/com/rommansabbir/networkx/dialog/NoInternetDialogV2.kt b/NetworkX/src/main/java/com/rommansabbir/networkx/dialog/NoInternetDialogV2.kt new file mode 100644 index 0000000..43e6aae --- /dev/null +++ b/NetworkX/src/main/java/com/rommansabbir/networkx/dialog/NoInternetDialogV2.kt @@ -0,0 +1,43 @@ +package com.rommansabbir.networkx.dialog + +import android.app.Activity +import android.app.Dialog +import com.rommansabbir.networkx.R +import com.rommansabbir.networkx.databinding.ContentDialogNoInternetBinding +import com.rommansabbir.networkx.extension.getDialogInstance +import java.lang.ref.WeakReference + +class NoInternetDialogV2 constructor( + private val activity: WeakReference, + private val title: String, + private val message: String, + private val buttonTitle: String, + private val isCancelable: Boolean, + private val callback: () -> Unit +) { + init { + activity.get()?.let { + getDialogInstance( + it, + R.layout.content_dialog_no_internet, + R.style.my_dialog, + isCancelable + ) { dialog, binding -> + NoInternetDialogV2.dialog = dialog + binding.cdniBtnRetry.text = buttonTitle + binding.cdniTvTitle.text = title + binding.cdniTvMessage.text = message + NoInternetDialogV2.dialog?.setOnDismissListener { + NoInternetDialogV2.dialog = null + } + binding.cdniBtnRetry.setOnClickListener { callback.invoke();NoInternetDialogV2.dialog?.cancel() } + NoInternetDialogV2.dialog?.show() + } + } ?: kotlin.run { dialog = null } + } + + companion object { + private var dialog: Dialog? = null + val isVisible: Boolean = dialog != null && dialog!!.isShowing + } +} \ No newline at end of file diff --git a/NetworkX/src/main/java/com/rommansabbir/networkx/exceptions/NoInternetDialogException.kt b/NetworkX/src/main/java/com/rommansabbir/networkx/exceptions/NoInternetDialogException.kt index cb865b2..d10e4c8 100644 --- a/NetworkX/src/main/java/com/rommansabbir/networkx/exceptions/NoInternetDialogException.kt +++ b/NetworkX/src/main/java/com/rommansabbir/networkx/exceptions/NoInternetDialogException.kt @@ -1,6 +1,5 @@ package com.rommansabbir.networkx.exceptions -@Deprecated("Deprecated. Use NetworkXProvider instead") class NoInternetDialogException : Exception("Activity reference is required to build an instance of NoInternetDialog") { } \ No newline at end of file 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 4f7ce8d..6a3fd4b 100644 --- a/NetworkX/src/main/java/com/rommansabbir/networkx/extension/ViewExtension.kt +++ b/NetworkX/src/main/java/com/rommansabbir/networkx/extension/ViewExtension.kt @@ -30,6 +30,6 @@ inline fun getDialogInstance( dialog.setContentView(layout.root) dialog.window!!.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) dialog.setCanceledOnTouchOutside(setCancelable) - dialog.setCancelable(false) + dialog.setCancelable(setCancelable) onSuccess.invoke(dialog, layout) } \ No newline at end of file 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 661faea..ce3f6a5 100644 --- a/NetworkX/src/main/res/layout/content_dialog_no_internet.xml +++ b/NetworkX/src/main/res/layout/content_dialog_no_internet.xml @@ -1,5 +1,6 @@ - @@ -101,15 +102,17 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="32dp" - android:layout_marginLeft="32dp" android:layout_marginTop="32dp" android:layout_marginEnd="32dp" - android:layout_marginRight="32dp" + android:gravity="center" + android:justificationMode="inter_word" android:text="@string/device_is_not_connected_to_the_internet" + android:textAlignment="center" android:textColor="@android:color/black" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/constraintLayout" /> + app:layout_constraintTop_toBottomOf="@+id/constraintLayout" + tools:targetApi="o" /> diff --git a/NetworkX/src/main/res/values/strings.xml b/NetworkX/src/main/res/values/strings.xml index 990fb7c..aeab384 100644 --- a/NetworkX/src/main/res/values/strings.xml +++ b/NetworkX/src/main/res/values/strings.xml @@ -1,6 +1,6 @@ - + Retry Device is not connected to the internet! No internet! diff --git a/README.md b/README.md index 46c72e2..53f90d4 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ Step 2. Add the dependency. | Releases | ------------- | -| 3.4.0 | +| 3.4.1 | # Usages @@ -78,27 +78,19 @@ lastKnownSpeed?.let { --- -### How to show the **`NoInternetDialog`**? +### How to show the **`NoInternetDialogV2`**? ```kotlin - NoInternetDialog - .Companion - .Builder() - // Provide activity reference - .withActivity(this) - // Provide custom title - .withTitle("No internet!") - // Provide custom mesage - .withMessage("Your device is not connected to the internet!") - // Register for callback - .withActionCallback { - // User clicked `Retry` button - } - .build() - .show() +NoInternetDialogV2( + activity = WeakReference(this@MainActivity), + title = "No Internet Bro", + message = "This is just a dummy message", + buttonTitle = "Okay", + isCancelable = true +) { /* Button Presses */ } ``` -* Also, you can determine if the `NoInternetDialog` is currently visible or not by calling this method `NoInternetDialog.isDialogVisible()` which return an `Boolean`. +* Also, you can determine if the `NoInternetDialogV2` is currently visible or not by calling this variable `NoInternetDialogV2.isVisible` which return an `Boolean`. --- diff --git a/app/src/main/java/com/rommansabbir/networkobserverexample/MainActivity.kt b/app/src/main/java/com/rommansabbir/networkobserverexample/MainActivity.kt index aef5054..8a1f808 100644 --- a/app/src/main/java/com/rommansabbir/networkobserverexample/MainActivity.kt +++ b/app/src/main/java/com/rommansabbir/networkobserverexample/MainActivity.kt @@ -2,14 +2,18 @@ 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.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 class MainActivity : AppCompatActivity() { @SuppressLint("SetTextI18n") @@ -20,12 +24,12 @@ class MainActivity : AppCompatActivity() { val status = NetworkXProvider.isInternetConnected textView.text = "Internet connection status: $status" -/* // - NetworkXProvider.isInternetConnectedLiveData.observe(this) { status -> - status?.let { + // + NetworkXProvider.isInternetConnectedLiveData.observe(this) { + it?.let { textView.text = "Internet connection status: $it" } - }*/ + } /* NetworkXProvider.lastKnownSpeed.let { textView2.text = @@ -51,27 +55,28 @@ class MainActivity : AppCompatActivity() { textView.text = "Internet connection status: $it" } } - } - catch (e : Exception){ + } catch (e: Exception) { e.printStackTrace() } } -/* - NetworkXProvider.lastKnownSpeedLiveData.observe(this) { - it?.let { - textView2.text = - "Last Known Speed: Speed - ${it.speed} | Type - ${it.networkTypeNetwork} | Simplified Speed - ${it.simplifiedSpeed}" - } - } -*/ -/* lifecycleScope.launchWhenCreated { - NetworkXProvider.isInternetConnectedFlow.collectLatest { - lifecycleScope.launch { - textView.text = "Internet connection status: $it" + 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