Publicado en Android

Añadir SearchView debajo de la ActionBar en Android


Código de implementación del componente SearchView que se muestre por debajo de la barra de herramientas inicial y si hay contenido al realizar desplazamiento se oculte la barra de herramientas, dejando el cuadro de búsqueda en posición estática

Definición del layout

<com.google.android.material.appbar.AppBarLayout
        android:id="@+id/app_bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="?actionBarTheme">

    <androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:layout_scrollFlags="scroll|snap|enterAlways"
            app:popupTheme="?actionBarPopupTheme" />

    <androidx.appcompat.widget.SearchView
            android:id="@+id/search_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="4dp"
            android:background="@drawable/bg_rounded_search"
            android:imeOptions="actionSearch|flagNoExtractUi"
            android:theme="@style/ThemeOverlay.MaterialComponents.Light"
            app:iconifiedByDefault="false"
            app:queryHint="@string/search"
            app:searchIcon="@null" />

</com.google.android.material.appbar.AppBarLayout>

Implementación Kotlin

Implmentación del SearchView usando Kotlin y AndroidX(Jetpack) El evento onQueryTextSubmit se recibe al finalizar la entrada del texto

search_view.setOnQueryTextListener(object :
    androidx.appcompat.widget.SearchView.OnQueryTextListener {

    override fun onQueryTextChange(newText: String): Boolean {
        Log.d("SimpleSearchView", "Text changed:$newText")
        return false
    }

    override fun onQueryTextSubmit(query: String): Boolean {
        Log.d("SimpleSearchView", "Submit:$query")
        Toast.makeText(this@MainActivity, "Submit:$query", Toast.LENGTH_SHORT).show()
        return false
    }

})

Recursos

Ver plantila en Github

Publicado en Android

Calcular la fluctuación (Jitter) de la conexión en Kotlin


La fluctuación es la cantidad de variación en el tiempo de latencia / respuesta, en milisegundos. Las conexiones confiables constantemente reportan la misma latencia una y otra vez. Mucha variación (o ‘jitter’) es una indicación de problemas.

Para más información What is Jitter

Cómo calcularla fluctuación (Jitter)

Para medir el Jitter, tomamos la diferencia entre las muestras, luego dividimos por el número de muestras (menos 1).

Ejemplo: Hemos recolectado 5 muestras con las siguientes latencias: 136, 184, 115, 148, 125 (en ese orden).

El ‘Jitter’ se calcula tomando la diferencia entre las muestras.
136 a 184, diferencia de 48
184 a 115, diferencia de 69
115 a 148, diferencia de 33
148 a 125, diferencia de 23

La diferencia total es de 173 que es la suma de las diferencias (48+69+33+23).
Para obtener el Jitter, se coge el valor de diferencia total(173) dividido por número de muestras(5) menos 1 (4 muestras), es decir 173 dividido 4, el resultado de la fluctuación(Jitter) es 43.25

Función calculateJitter()

Para obtener la fluctuación de las muestras solo debemos pasar un array con los valores, el mínima de número de muestras son 2 sino se obtendrá 0.0

fun calculateJitter(numArray: DoubleArray): Double {
    if (numArray.size < 2) return 0.0
    var sum: Double = 0.0
    for (i in numArray.indices) {
       if (i>0) sum += Math.abs(numArray[i-1] - numArray[i])
    }
    return sum.div(numArray.size-1)
}

Su uso

fun main(args: Array<String>) {
    val numArray = doubleArrayOf(136.0, 184.0, 115.0, 148.0,125.0)

    val jitter = calculateJitter(numArray)
    System.out.format("Jitter = %.2f mms", jitter)
}
//Obtendremos
Jitter = 43.25 mms