Skip to content

Instantly share code, notes, and snippets.

View rubenquadros's full-sized avatar

Ruben Quadros rubenquadros

  • Bangalore
View GitHub Profile
@rubenquadros
rubenquadros / activity_main.xml
Created July 9, 2021 06:41
MainActivity xml layout
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<androidx.appcompat.widget.AppCompatButton
@rubenquadros
rubenquadros / activity_other.xml
Created July 9, 2021 06:52
Another activity xml layout
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".OtherActivity">
<androidx.appcompat.widget.AppCompatButton
@rubenquadros
rubenquadros / ActivityMainBinding.java
Created July 11, 2021 06:10
Generated binding file for activity_main.xml layout
// Generated by view binder compiler. Do not edit!
package com.ruben.viewbindingexample.databinding;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatButton;
import androidx.constraintlayout.widget.ConstraintLayout;
@rubenquadros
rubenquadros / MainActivity.kt
Created July 11, 2021 07:03
Main Activity class
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.button.text = "Click Me too!"
//do other stuff
@rubenquadros
rubenquadros / AppBarInitial.kt
Created August 18, 2021 19:11
Home app bar without any styling
@Composable
fun HomeAppBar(title: String, openSearch: () -> Unit, openFilters: () -> Unit) {
TopAppBar(
title = { Text(text = title) },
actions = {
IconButton(onClick = openSearch) {
Icon(imageVector = Icons.Filled.Search, contentDescription = "Search")
}
IconButton(onClick = openFilters) {
@rubenquadros
rubenquadros / AppBarInitialPreview.kt
Created August 18, 2021 19:15
Initial preview of home app bar
@Preview(showBackground = true)
@Composable
fun HomeAppBarPreview() {
HomeAppBar(
title = "EpicWorld",
openSearch = {},
openFilters = {}
)
}
@rubenquadros
rubenquadros / AppBar.kt
Last active August 18, 2021 19:28
Complete home app bar
@Composable
fun HomeAppBar(title: String, openSearch: () -> Unit, openFilters: () -> Unit) {
TopAppBar(
title = { Text(text = title, color = Color.White) },
backgroundColor = Color(0xFFF50057),
actions = {
IconButton(onClick = openSearch) {
Icon(
imageVector = Icons.Filled.Search,
contentDescription = "Search",
@rubenquadros
rubenquadros / GamesSource.kt
Last active August 18, 2021 20:41
Paging source of our Paging 3 library
class GamesSource(
private val gamesRepository: GamesRepository
) : PagingSource<Int, GameResultsEntity>() {
override suspend fun load(
params: LoadParams<Int>
): LoadResult<Int, GameResultsEntity> {
val nextPage = params.key ?: 1
val gamesResponse =
gamesRepository.getAllGames(nextPage)
@rubenquadros
rubenquadros / HomeViewModel.kt
Last active August 18, 2021 20:58
Home view model with paging data stream
class HomeViewModel(private val gamesSource: GamesSource) :
ViewModel() {
fun getAllGames(): Flow<PagingData<GameResultsEntity>> {
return Pager(PagingConfig(50)) { gamesSource }.flow
}
}
@rubenquadros
rubenquadros / GameListing.kt
Created August 19, 2021 17:14
Displaying game data in infinite list
@Composable
fun GameListing(
games: Flow<PagingData<GameResultsEntity>>
) {
val lazyGameItems = games.collectAsLazyPagingItems()
LazyVerticalGrid(
cells = GridCells.Fixed(2),
content = {
items(lazyGameItems.itemCount) { index ->
lazyGameItems[index]?.let {