Viewmodel + Asynctask en Android usando Jetpack

Ejemplo de Viewmodel en Android usando el framework Jetpack de Google Android

Dependencias

Insertar la siguiente linea en archivo app.gradle
implementation 'android.arch.lifecycle:extensions:1.1.1'

Implementación

Crear un AndroidVieMmodel por ejemplo PackageViewModel.java
public class PackageViewModel extends AndroidViewModel {

    private final String TAG = PackageViewModel.class.getSimpleName();

    private YouAsynctask mAsyncTask;

    private MutableLiveData<List<ApplicationInfo>> mPackagesAll;

    public PackageViewModel(@NonNull Application application) {
        super(application);
    }

    LiveData<List<ApplicationInfo>> getAllPackages() {
        if (mPackagesAll == null) {
            mPackagesAll = new MutableLiveData<>();
            loadData();
        }
        return mPackagesAll;
    }

    private void loadData() {
        mAsyncTask = new YouAsynctask();
        mAsyncTask.execute();
    }

    public class YouAsynctask extends AsyncTask<Void, Float, Boolean> {

        @Override
        protected Boolean doInBackground(Void... voids) {

            final PackageManager pm = getApplication().getPackageManager(); //get a list of installed apps.
            List<ApplicationInfo> packagesAll = pm.getInstalledApplications(PackageManager.GET_META_DATA);
            mPackagesAll.postValue(packagesAll);

            return null;
        }

        @Override
        protected void onPostExecute(Boolean aBoolean) {
            super.onPostExecute(aBoolean);
        }
    }
}

Su uso

En la actividad donde queremos usar el viewmodel
private PackageViewModel packageViewModel;
 ...
packageViewModel = ViewModelProviders.of(this).get(PackageViewModel.class);

packageViewModel.getAllPackages().observe(this, new Observer<List<ApplicationInfo>>() {
    @Override
    public void onChanged(List<ApplicationInfo> applicationInfos) {
        Log.d(TAG, "onChanged: " + applicationInfos.size());
    }
});
Ejemplo muy básico de usar un viewmodel

Hola Mundo en Kotlin

AndroidX temas MaterialComponents

Alerta Schema export directory is not provided to the annotation processor

Si se recibe el siguiente alerta al compilar:

Schema export directory is not provided to the annotation processor so we cannot export the schema. You can either provide `room.schemaLocation` annotation processor argument OR set exportSchema to false.

Solución:
Agregar en build.gradle añadir

javaCompileOptions {
    annotationProcessorOptions {
        arguments = ["room.schemaLocation": "$projectDir/schemas".toString()]
    }
}

Ejemplo para Java:

// ...

android {

    // ... (compileSdkVersion, buildToolsVersion, etc)

    defaultConfig {

        // ... (applicationId, miSdkVersion, etc)

        javaCompileOptions {
            annotationProcessorOptions {
                arguments = ["room.schemaLocation": "$projectDir/schemas".toString()]
            }
        }
    }

    // ... (buildTypes, compileOptions, etc)

}

// ...

Ejemplo para Kotlin

android {

    // ... (compileSdkVersion, buildToolsVersion, etc)

    defaultConfig {

     // ... (applicationId, miSdkVersion, etc)

        kapt {
            arguments {
                arg("room.schemaLocation", "$projectDir/schemas".toString())
            }
        }
    }

    buildTypes {
    // ... (buildTypes, compileOptions, etc)
    }
}


Parseador de QRcode

Si necesitas parsear el contenido de un QRCode

https://github.com/RurioLuca/QrCardParsing

Libreria Chrome Like Tab Switcher en Android

Con la librería Chrome Like Tab Switcher puedes tener el componente que usa chrome para seleccionar las pestañas mediante fichas




Descarga
https://github.com/michael-rapp/ChromeLikeTabSwitcher

Libreria RingProgressBar

compile 'com.github.HotBitmapGG:RingProgressBar:V1.2.2'