Android – Compartilhar código entre teste unit e instrumental ( Sharing code between unit tests and instrumentation tests on Android )

android_testing-1

Suponhamos que você tenha uma aplicação android com uma serie de testes. Alguns deles são testes unitários (unit tests), localizados em: src/test, e testes instrumentais (intrumentation tests), localizados em: src/androidTest.

O problema encontrado é que muitas vezes temos códigos que poderiam ser compartilhados entre esses testes, mas não temos como fazer isso pois estão em pastas diferentes, e não seria adequado inserir esses códigos auxiliares no src/main.

A solução encontrada é acrescentar um novo pacote de testes que seja compartilhado entre o src/test e o src/androidTest, para isso vamos criar um src/sharedTest e configurar o sourceSets do test e androidTest para visualizar o sheredTest.

Para isso primeiramente vamos criar o novo pacote de testes: src/sharedTest/java/{pakage_do_projeto}
Obs: Importante criar o package do projeto para assimilar com os outros testes.

Agora basta configurar o build.gradle da seguinte maneira: Continue reading

Android – Accessing hidden method Ljava/lang/Thread – Coroutines do not log uncaught exceptions in Android

kotlin_android_ktVerificar Issue: https://github.com/Kotlin/kotlinx.coroutines/issues/148#issuecomment-338101986

Solução que utilizei:

val handler = CoroutineExceptionHandler { _, ex ->
  ex.printStackTrace() //TODO
}
launch(CommonPool + handler) {
   //your code here
}

Android – Configurando o Dagger com Worker (Dagger 2 setup with WorkManager)

dagger-dependency-injection

No exemplo a seguir mostro como configurar o Dagger 2 para trabalhar com o WorkManager.
Atualmente é uma tarefa bem complicada e que possivelmente sofrerá alterações em sua implementação pois o WorkManager é uma nova API do Android e o Dagger2 ainda não tem recursos para facilitar a implementação de injeção de dependências nela.

Este artigo está utilizando as seguintes versões:

dagger2: “com.google.dagger:dagger-android:2.20″
workmanager: “android.arch.work:work-runtime-ktx:1.0.0-beta04″

Veja a implementação: Continue reading

Android – Como detectar se a aplicação está minimizada ou não (How to detect Android application in background or foreground events)

android-basic-lifecycleSe você estiver usando a biblioteca de componentes de arquitetura do Android, poderá usar o ProcessLifecycleOwner para configurar um ouvinte para todo o processo do aplicativo para eventos onStart e onStop. Para fazer isso, faça com que sua classe de aplicativo implemente a interface LifecycleObserver e inclua algumas anotações de onStop e onStart em seus métodos de primeiro e segundo plano:

  Continue reading

Android – AudioManager – Controle de volume com UI nativa do sistema

Android Audio

/**
FLAG_SHOW_UI
Show a toast containing the current volume.
See also:
    adjustStreamVolume(int, int, int)
    adjustVolume(int, int)
    setStreamVolume(int, int, int)
    setRingerMode(int)
*/

https://developer.android.com/reference/android/media/AudioManager.html#FLAG_SHOW_UI