Skip to content

Commit b343f37

Browse files
committed
Use ImageLoaderFactory to create the singleton ImageLoader.
1 parent 673ffa6 commit b343f37

File tree

11 files changed

+65
-79
lines changed

11 files changed

+65
-79
lines changed

Crane/app/src/main/java/androidx/compose/samples/crane/CraneApplication.kt

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,19 @@
1717
package androidx.compose.samples.crane
1818

1919
import android.app.Application
20+
import androidx.compose.samples.crane.util.UnsplashSizingInterceptor
21+
import coil.ImageLoader
22+
import coil.ImageLoaderFactory
2023
import dagger.hilt.android.HiltAndroidApp
2124

2225
@HiltAndroidApp
23-
class CraneApplication : Application()
26+
class CraneApplication : Application(), ImageLoaderFactory {
27+
28+
override fun newImageLoader(): ImageLoader {
29+
return ImageLoader.Builder(this)
30+
.componentRegistry {
31+
add(UnsplashSizingInterceptor)
32+
}
33+
.build()
34+
}
35+
}

Crane/app/src/main/java/androidx/compose/samples/crane/calendar/CalendarActivity.kt

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ import androidx.compose.samples.crane.calendar.model.CalendarMonth
3838
import androidx.compose.samples.crane.calendar.model.DaySelected
3939
import androidx.compose.samples.crane.data.CalendarYear
4040
import androidx.compose.samples.crane.ui.CraneTheme
41-
import androidx.compose.samples.crane.util.ProvideImageLoader
4241
import androidx.compose.ui.Modifier
4342
import androidx.compose.ui.res.painterResource
4443
import androidx.compose.ui.res.stringResource
@@ -64,10 +63,8 @@ class CalendarActivity : ComponentActivity() {
6463

6564
setContent {
6665
ProvideWindowInsets {
67-
ProvideImageLoader {
68-
CraneTheme {
69-
CalendarScreen(onBackPressed = { finish() })
70-
}
66+
CraneTheme {
67+
CalendarScreen(onBackPressed = { finish() })
7168
}
7269
}
7370
}

Crane/app/src/main/java/androidx/compose/samples/crane/details/DetailsActivity.kt

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ import androidx.compose.runtime.setValue
5050
import androidx.compose.samples.crane.base.Result
5151
import androidx.compose.samples.crane.data.ExploreModel
5252
import androidx.compose.samples.crane.ui.CraneTheme
53-
import androidx.compose.samples.crane.util.ProvideImageLoader
5453
import androidx.compose.ui.Alignment
5554
import androidx.compose.ui.Modifier
5655
import androidx.compose.ui.text.style.TextAlign
@@ -92,16 +91,14 @@ class DetailsActivity : ComponentActivity() {
9291

9392
setContent {
9493
ProvideWindowInsets {
95-
ProvideImageLoader {
96-
CraneTheme {
97-
Surface {
98-
DetailsScreen(
99-
onErrorLoading = { finish() },
100-
modifier = Modifier
101-
.statusBarsPadding()
102-
.navigationBarsPadding()
103-
)
104-
}
94+
CraneTheme {
95+
Surface {
96+
DetailsScreen(
97+
onErrorLoading = { finish() },
98+
modifier = Modifier
99+
.statusBarsPadding()
100+
.navigationBarsPadding()
101+
)
105102
}
106103
}
107104
}

Crane/app/src/main/java/androidx/compose/samples/crane/home/MainActivity.kt

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ import androidx.compose.runtime.remember
3939
import androidx.compose.samples.crane.calendar.launchCalendarActivity
4040
import androidx.compose.samples.crane.details.launchDetailsActivity
4141
import androidx.compose.samples.crane.ui.CraneTheme
42-
import androidx.compose.samples.crane.util.ProvideImageLoader
4342
import androidx.compose.ui.Modifier
4443
import androidx.compose.ui.draw.alpha
4544
import androidx.compose.ui.unit.Dp
@@ -58,13 +57,11 @@ class MainActivity : ComponentActivity() {
5857

5958
setContent {
6059
ProvideWindowInsets {
61-
ProvideImageLoader {
62-
CraneTheme {
63-
MainScreen(
64-
onExploreItemClicked = { launchDetailsActivity(context = this, item = it) },
65-
onDateSelectionClicked = { launchCalendarActivity(this) }
66-
)
67-
}
60+
CraneTheme {
61+
MainScreen(
62+
onExploreItemClicked = { launchDetailsActivity(context = this, item = it) },
63+
onDateSelectionClicked = { launchCalendarActivity(this) }
64+
)
6865
}
6966
}
7067
}

Crane/app/src/main/java/androidx/compose/samples/crane/util/NetworkUtil.kt renamed to Crane/app/src/main/java/androidx/compose/samples/crane/util/UnsplashSizingInterceptor.kt

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -28,18 +28,6 @@ import coil.request.ImageResult
2828
import coil.size.PixelSize
2929
import okhttp3.HttpUrl
3030

31-
@Composable
32-
fun ProvideImageLoader(content: @Composable () -> Unit) {
33-
val context = LocalContext.current
34-
val loader = remember(context) {
35-
ImageLoader.Builder(context)
36-
.componentRegistry {
37-
add(UnsplashSizingInterceptor)
38-
}.build()
39-
}
40-
CompositionLocalProvider(LocalImageLoader provides loader, content = content)
41-
}
42-
4331
/**
4432
* A Coil [Interceptor] which appends query params to Unsplash urls to request sized images.
4533
*/
@@ -50,11 +38,9 @@ object UnsplashSizingInterceptor : Interceptor {
5038
val size = chain.size
5139
if (data is String &&
5240
data.startsWith("https://images.unsplash.com/photo-") &&
53-
size is PixelSize &&
54-
size.width > 0 &&
55-
size.height > 0
41+
size is PixelSize
5642
) {
57-
val url = HttpUrl.parse(data)!!
43+
val url = HttpUrl.get(data)
5844
.newBuilder()
5945
.addQueryParameter("w", size.width.toString())
6046
.addQueryParameter("h", size.height.toString())

Crane/buildSrc/src/main/java/com/example/crane/buildsrc/Dependencies.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ object Versions {
2121
}
2222

2323
object Libs {
24-
const val androidGradlePlugin = "com.android.tools.build:gradle:7.0.0-beta05"
24+
const val androidGradlePlugin = "com.android.tools.build:gradle:7.0.0-rc01"
2525
const val ktLint = "com.pinterest:ktlint:${Versions.ktLint}"
2626

2727
object GoogleMaps {

Owl/app/src/main/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
android:allowBackup="true"
2525
android:icon="@mipmap/ic_launcher"
2626
android:label="@string/app_name"
27+
android:name=".OwlApplication"
2728
android:supportsRtl="true"
2829
android:theme="@style/Theme.Owl">
2930
<activity android:name=".ui.MainActivity">
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.example.owl
2+
3+
import android.app.Application
4+
import coil.ImageLoader
5+
import coil.ImageLoaderFactory
6+
import com.example.owl.ui.utils.UnsplashSizingInterceptor
7+
8+
@Suppress("unused")
9+
class OwlApplication : Application(), ImageLoaderFactory {
10+
11+
override fun newImageLoader(): ImageLoader {
12+
return ImageLoader.Builder(this)
13+
.componentRegistry {
14+
add(UnsplashSizingInterceptor)
15+
}
16+
.build()
17+
}
18+
}

Owl/app/src/main/java/com/example/owl/ui/OwlApp.kt

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ import androidx.navigation.compose.currentBackStackEntryAsState
3737
import androidx.navigation.compose.rememberNavController
3838
import com.example.owl.ui.courses.CourseTabs
3939
import com.example.owl.ui.theme.BlueTheme
40-
import com.example.owl.ui.utils.ProvideImageLoader
4140
import com.google.accompanist.insets.ProvideWindowInsets
4241
import com.google.accompanist.insets.navigationBarsHeight
4342
import com.google.accompanist.insets.navigationBarsPadding
@@ -46,20 +45,18 @@ import java.util.Locale
4645
@Composable
4746
fun OwlApp(finishActivity: () -> Unit) {
4847
ProvideWindowInsets {
49-
ProvideImageLoader {
50-
BlueTheme {
51-
val tabs = remember { CourseTabs.values() }
52-
val navController = rememberNavController()
53-
Scaffold(
54-
backgroundColor = MaterialTheme.colors.primarySurface,
55-
bottomBar = { OwlBottomBar(navController = navController, tabs) }
56-
) { innerPaddingModifier ->
57-
NavGraph(
58-
finishActivity = finishActivity,
59-
navController = navController,
60-
modifier = Modifier.padding(innerPaddingModifier)
61-
)
62-
}
48+
BlueTheme {
49+
val tabs = remember { CourseTabs.values() }
50+
val navController = rememberNavController()
51+
Scaffold(
52+
backgroundColor = MaterialTheme.colors.primarySurface,
53+
bottomBar = { OwlBottomBar(navController = navController, tabs) }
54+
) { innerPaddingModifier ->
55+
NavGraph(
56+
finishActivity = finishActivity,
57+
navController = navController,
58+
modifier = Modifier.padding(innerPaddingModifier)
59+
)
6360
}
6461
}
6562
}

Owl/app/src/main/java/com/example/owl/ui/utils/NetworkImage.kt

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,11 @@ import androidx.compose.foundation.layout.Spacer
2323
import androidx.compose.foundation.layout.fillMaxSize
2424
import androidx.compose.material.MaterialTheme
2525
import androidx.compose.runtime.Composable
26-
import androidx.compose.runtime.CompositionLocalProvider
27-
import androidx.compose.runtime.remember
2826
import androidx.compose.ui.Modifier
2927
import androidx.compose.ui.graphics.Color
3028
import androidx.compose.ui.layout.ContentScale
31-
import androidx.compose.ui.platform.LocalContext
32-
import coil.ImageLoader
3329
import coil.annotation.ExperimentalCoilApi
3430
import coil.compose.ImagePainter
35-
import coil.compose.LocalImageLoader
3631
import coil.compose.rememberImagePainter
3732
import coil.intercept.Interceptor
3833
import coil.request.ImageResult
@@ -79,18 +74,6 @@ fun NetworkImage(
7974
}
8075
}
8176

82-
@Composable
83-
fun ProvideImageLoader(content: @Composable () -> Unit) {
84-
val context = LocalContext.current
85-
val loader = remember(context) {
86-
ImageLoader.Builder(context)
87-
.componentRegistry {
88-
add(UnsplashSizingInterceptor)
89-
}.build()
90-
}
91-
CompositionLocalProvider(LocalImageLoader provides loader, content = content)
92-
}
93-
9477
/**
9578
* A Coil [Interceptor] which appends query params to Unsplash urls to request sized images.
9679
*/
@@ -101,11 +84,9 @@ object UnsplashSizingInterceptor : Interceptor {
10184
val size = chain.size
10285
if (data is String &&
10386
data.startsWith("https://images.unsplash.com/photo-") &&
104-
size is PixelSize &&
105-
size.width > 0 &&
106-
size.height > 0
87+
size is PixelSize
10788
) {
108-
val url = HttpUrl.parse(data)!!
89+
val url = HttpUrl.get(data)
10990
.newBuilder()
11091
.addQueryParameter("w", size.width.toString())
11192
.addQueryParameter("h", size.height.toString())

0 commit comments

Comments
 (0)