Skip to content

Commit

Permalink
cache refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
pramodbharti committed Nov 3, 2023
1 parent 1d20cd7 commit 6e73217
Show file tree
Hide file tree
Showing 11 changed files with 87 additions and 59 deletions.
1 change: 1 addition & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET"/>

<application
Expand Down
1 change: 0 additions & 1 deletion app/src/main/java/com/pramodbharti/filmo/data/Constants.kt
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
package com.pramodbharti.filmo.data

const val BASE_URL = "https://api.themoviedb.org/3/"
const val DISCOVER_MOVIES = "discover/movie"
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package com.pramodbharti.filmo.data.di
import android.content.Context
import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory
import com.pramodbharti.filmo.data.BASE_URL
import com.pramodbharti.filmo.data.network.CacheInterceptor
import com.pramodbharti.filmo.data.network.ForceCacheInterceptor
import com.pramodbharti.filmo.data.network.HeaderInterceptor
import com.pramodbharti.filmo.data.network.MoviesApiService
import com.pramodbharti.filmo.data.network.TvShowsApiService
Expand All @@ -18,7 +20,6 @@ import okhttp3.Cache
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.OkHttpClient
import okhttp3.logging.HttpLoggingInterceptor
import retrofit2.Converter
import retrofit2.Retrofit

interface AppContainer {
Expand All @@ -35,8 +36,10 @@ class DefaultAppContainer(context: Context) : AppContainer {
private val cache = Cache(context.cacheDir, CACHE_SIZE.toLong())
private val client = OkHttpClient
.Builder()
.addInterceptor(HeaderInterceptor())
.cache(cache)
.addNetworkInterceptor(CacheInterceptor())
.addInterceptor(ForceCacheInterceptor(context))
.addInterceptor(HeaderInterceptor())
.addInterceptor(HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY))
.build()

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.pramodbharti.filmo.data.network

import okhttp3.CacheControl
import okhttp3.Interceptor
import okhttp3.Response
import java.util.concurrent.TimeUnit

class CacheInterceptor : Interceptor {
override fun intercept(chain: Interceptor.Chain): Response {
val cacheControl = CacheControl.Builder().maxAge(1, TimeUnit.DAYS).build()
return chain.proceed(
chain.request().newBuilder().header("Cache-Control", cacheControl.toString()).build()
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.pramodbharti.filmo.data.network

import android.content.Context
import com.pramodbharti.filmo.ui.isInternetAvailable
import okhttp3.CacheControl
import okhttp3.Interceptor
import okhttp3.Response

class ForceCacheInterceptor(private val context: Context) : Interceptor {
override fun intercept(chain: Interceptor.Chain): Response {
val builder = chain.request().newBuilder()

if (!isInternetAvailable(context)) {
builder.cacheControl(CacheControl.FORCE_CACHE)
}

return chain.proceed(builder.build())
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,11 @@ import java.util.concurrent.TimeUnit

class HeaderInterceptor : Interceptor {
override fun intercept(chain: Interceptor.Chain): Response {
val cacheControl = CacheControl.Builder().maxAge(1, TimeUnit.DAYS).build()
return chain
.proceed(
chain
.request()
.newBuilder()
.cacheControl(cacheControl)
.addHeader("Authorization", "Bearer ${BuildConfig.ACCESS_TOKEN}")
.build()
)
Expand Down
23 changes: 23 additions & 0 deletions app/src/main/java/com/pramodbharti/filmo/ui/Utils.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,11 @@ import android.content.ActivityNotFoundException
import android.content.Context
import android.content.Intent
import android.icu.util.LocaleData
import android.net.ConnectivityManager
import android.net.NetworkCapabilities
import android.net.Uri
import android.os.Build
import android.util.Log
import java.text.SimpleDateFormat
import java.time.LocalDate
import java.time.format.DateTimeFormatter
Expand Down Expand Up @@ -47,6 +50,26 @@ fun Context.openYoutubeLink(url: String) {
}
}

fun isInternetAvailable(context: Context): Boolean {
val connectivityManager =
context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val capabilities =
connectivityManager.getNetworkCapabilities(connectivityManager.activeNetwork)
if (capabilities != null) {
if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
Log.i("Internet", "NetworkCapabilities.TRANSPORT_CELLULAR")
return true
} else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
Log.i("Internet", "NetworkCapabilities.TRANSPORT_WIFI")
return true
} else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET)) {
Log.i("Internet", "NetworkCapabilities.TRANSPORT_ETHERNET")
return true
}
}
return false
}

fun String.toYoutubeThumbUrl(): String = Constants.YOUTUBE_THUMB_URL + this + "/0.jpg"

fun Double.roundTo(decimalPlaces: Int): String = "%.${decimalPlaces}f".format(this)
21 changes: 19 additions & 2 deletions app/src/main/java/com/pramodbharti/filmo/ui/components/Utils.kt
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.util.lerp
import kotlin.math.absoluteValue
Expand All @@ -32,7 +34,22 @@ fun Modifier.carouselTransition(page: Int, pagerState: PagerState) =

@Composable
fun ErrorScreen(modifier: Modifier = Modifier, msg: String) {
Box(modifier = modifier.fillMaxSize(), contentAlignment = Alignment.Center) {
Text(text = msg, modifier = Modifier.padding(32.dp))
Box(
modifier = modifier
.fillMaxSize()
.padding(32.dp),
contentAlignment = Alignment.Center
) {
Text(
text = msg,
modifier = Modifier.padding(32.dp),
textAlign = TextAlign.Justify
)
}
}

@Preview
@Composable
fun ErrorScreenPreview() {
ErrorScreen(msg = "g b jehfjdf djfhdj adb shell am start -n \"com.pramodbharti.filmo/com.pramodbharti.filmo.MainActivity\" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER rjghdkg")
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.viewmodel.compose.viewModel
import com.pramodbharti.filmo.dummydata.dummyMovies
import com.pramodbharti.filmo.ui.components.CarouselItem
import com.pramodbharti.filmo.ui.components.ErrorScreen
import com.pramodbharti.filmo.ui.components.FilmoCarousel
import com.pramodbharti.filmo.ui.components.MediaItemsPosterRow
import com.pramodbharti.filmo.ui.components.MediaSlots
Expand Down Expand Up @@ -59,12 +60,7 @@ fun MoviesScreen(

when (uiState) {
is MoviesUiState.Error -> {
Box(
modifier = Modifier.fillMaxSize(),
contentAlignment = Alignment.Center
) {
Text(text = uiState.msg)
}
ErrorScreen(msg = uiState.msg)
}

is MoviesUiState.Loading -> {
Expand Down Expand Up @@ -173,7 +169,7 @@ fun MoviesScreenLoadingPreview() {
@Composable
fun MoviesScreenErrorPreview() {
FilmoTheme {
MoviesScreen(uiState = MoviesUiState.Error("Something went wrong!"))
MoviesScreen(uiState = MoviesUiState.Error("g b jehfjdf djfhdj adb shell am start -n \"com.pramodbharti.filmo/com.pramodbharti.filmo.MainActivity\" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER rjghdkg Something went wrong!"))
}
}

Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.viewmodel.compose.viewModel
import com.pramodbharti.filmo.dummydata.dummyMovies
import com.pramodbharti.filmo.ui.components.CarouselItem
import com.pramodbharti.filmo.ui.components.ErrorScreen
import com.pramodbharti.filmo.ui.components.FilmoCarousel
import com.pramodbharti.filmo.ui.components.MediaItemsPosterRow
import com.pramodbharti.filmo.ui.components.MediaSlots
Expand Down Expand Up @@ -57,12 +58,7 @@ fun TvShowsScreen(

when (uiState) {
is TvShowsUiState.Error -> {
Box(
modifier = Modifier.fillMaxSize(),
contentAlignment = Alignment.Center
) {
Text(text = uiState.msg)
}
ErrorScreen(msg = uiState.msg)
}

is TvShowsUiState.Loading -> {
Expand Down

0 comments on commit 6e73217

Please sign in to comment.