Skip to content

Commit

Permalink
fix: add image cache for Android
Browse files Browse the repository at this point in the history
  • Loading branch information
gtokman committed May 13, 2024
1 parent 9971991 commit c199b51
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import com.facebook.react.uimanager.ViewManager

class FasterImagePackage : ReactPackage {
override fun createNativeModules(reactContext: ReactApplicationContext): List<NativeModule> {
return emptyList()
return listOf(FasterImageModule(reactContext))
}

override fun createViewManagers(reactContext: ReactApplicationContext): List<ViewManager<*, *>> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,21 +12,36 @@ import android.view.View
import android.view.ViewOutlineProvider
import android.widget.ImageView.ScaleType
import androidx.appcompat.widget.AppCompatImageView
import coil.annotation.ExperimentalCoilApi
import coil.imageLoader
import coil.annotation.ExperimentalCoilApi
import coil.imageLoader
import coil.request.CachePolicy
import coil.request.ImageRequest
import coil.size.Scale
import com.facebook.react.bridge.Arguments
import com.facebook.react.bridge.Promise
import com.facebook.react.bridge.ReactApplicationContext
import com.facebook.react.bridge.ReactContext
import com.facebook.react.bridge.ReactContextBaseJavaModule
import com.facebook.react.bridge.ReactMethod
import com.facebook.react.bridge.ReadableMap
import com.facebook.react.uimanager.SimpleViewManager
import com.facebook.react.uimanager.ThemedReactContext
import com.facebook.react.uimanager.annotations.ReactProp
import com.facebook.react.uimanager.events.RCTEventEmitter

@Suppress("unused")
class FasterImageModule(reactContext: ReactApplicationContext) : ReactContextBaseJavaModule(reactContext) {
override fun getName(): String = "FasterImageModule"

@OptIn(ExperimentalCoilApi::class)
@ReactMethod
fun clearCache(promise: Promise) {
val imageLoader = reactApplicationContext.imageLoader
imageLoader.memoryCache?.clear()
imageLoader.diskCache?.clear()
promise.resolve(true)
}
}

class FasterImageViewManager : SimpleViewManager<AppCompatImageView>() {
override fun getName() = "FasterImageView"
Expand Down Expand Up @@ -175,15 +190,6 @@ import com.facebook.react.uimanager.events.RCTEventEmitter
return intArray
}

@OptIn(ExperimentalCoilApi::class)
@ReactMethod
fun clearCache(view: AppCompatImageView, promise: Promise) {
val imageLoader = view.context.imageLoader
imageLoader.memoryCache?.clear()
imageLoader.diskCache?.clear()
promise.resolve(null)
}

companion object {
private val RESIZE_MODE = mapOf(
"contain" to ScaleType.FIT_CENTER,
Expand Down
4 changes: 2 additions & 2 deletions example/src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@ import * as React from 'react';

import { FasterImageView, clearCache } from '@candlefinance/faster-image';
import {
DevSettings,
Dimensions,
FlatList,
Platform,
SafeAreaView,
StyleSheet,
DevSettings,
} from 'react-native';

const size = Dimensions.get('window').width / 3;
Expand All @@ -19,7 +19,7 @@ const imageURLs = Array.from(
if (__DEV__ && Platform.OS === 'ios') {
DevSettings.addMenuItem('Clear Cache', async () => {
const result = await clearCache();
console.log(result);
console.log('cache cleared', result);
});
}

Expand Down
9 changes: 7 additions & 2 deletions src/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,11 @@ export const FasterImageView =
requireNativeComponent<FasterImageProps>(ComponentName);

export const clearCache = async () => {
const { FasterImageViewManager } = NativeModules;
return FasterImageViewManager.clearCache();
if (Platform.OS === 'ios') {
const { FasterImageViewManager } = NativeModules;
return FasterImageViewManager.clearCache();
} else {
const { FasterImageModule } = NativeModules;
return FasterImageModule.clearCache();
}
};

0 comments on commit c199b51

Please sign in to comment.