Skip to content

Commit

Permalink
Merge pull request #16 from rommansabbir/dev
Browse files Browse the repository at this point in the history
Version 4.1.0
  • Loading branch information
rommansabbir authored Aug 20, 2022
2 parents d833b26 + 85ae5ee commit 1055811
Show file tree
Hide file tree
Showing 17 changed files with 362 additions and 129 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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()
}
84 changes: 58 additions & 26 deletions NetworkX/src/main/java/com/rommansabbir/networkx/NetworkXManager.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
}

Expand All @@ -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
Expand All @@ -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()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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
}
Expand All @@ -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
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.rommansabbir.networkx

import android.app.Application

data class SmartConfig(
val application: Application,
val enableSpeedMeter: Boolean,
val lifecycle: NetworkXLifecycle
)
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -13,31 +15,49 @@ 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 {
getDialogInstance<ContentDialogNoInternetBinding>(
it,
activity.get()?.let { activity ->
dialog = getDialogInstance<ContentDialogNoInternetBinding>(
activity,
R.layout.content_dialog_no_internet,
R.style.my_dialog,
isCancelable
) { dialog, binding ->
NoInternetDialogV2.dialog = dialog
) { binding ->
binding.cdniBtnRetry.text = buttonTitle
binding.cdniTvTitle.text = title
binding.cdniTvMessage.text = message
NoInternetDialogV2.dialog?.setOnDismissListener {
NoInternetDialogV2.dialog = null
drawable?.let {
binding.imageView.setImageDrawable(
ContextCompat.getDrawable(
activity,
drawable
)
)
}
binding.cdniBtnRetry.setOnClickListener { callback.invoke();NoInternetDialogV2.dialog?.cancel() }
NoInternetDialogV2.dialog?.show()

binding.cdniBtnRetry.setOnClickListener { callback.invoke(); forceClose() }
}
dialog?.setOnDismissListener {
dialog = null
}
dialog?.show()
} ?: kotlin.run { dialog = null }
}

companion object {
@Volatile
private var dialog: Dialog? = null

val isVisible: Boolean = dialog != null && dialog!!.isShowing
fun forceClose() {
try {
dialog?.cancel()
} catch (e: Exception) {
e.printStackTrace()
}
}
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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)
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,14 @@ inline fun <V : ViewDataBinding> getDialogInstance(
layoutId: Int,
@StyleRes customStyle: Int? = null,
setCancelable: Boolean = false,
crossinline onSuccess: (Dialog, V) -> Unit
) {
crossinline onSuccess: (V) -> Unit
): Dialog {
val layout = DataBindingUtil.inflate<V>(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
}
3 changes: 1 addition & 2 deletions NetworkX/src/main/res/layout/content_dialog_no_internet.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,7 @@

<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
android:layout_height="wrap_content">

<androidx.cardview.widget.CardView
android:layout_width="0dp"
Expand Down
Loading

0 comments on commit 1055811

Please sign in to comment.