Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6365dd68 authored by Fynn Godau's avatar Fynn Godau
Browse files

Batch bitmap registration

parent bb5c25b5
Loading
Loading
Loading
Loading
Loading
+20 −6
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ object BitmapDescriptorFactoryImpl : IBitmapDescriptorFactoryDelegate.Stub() {
    private var mapResources: Resources? = null
    private val maps = hashSetOf<MapboxMap>()
    private val bitmaps = hashMapOf<String, Bitmap>()
    private val missingBitmaps = hashMapOf<String, Bitmap>()
    private val refCount = hashMapOf<String, Int>()

    fun initialize(mapResources: Resources?, resources: Resources?) {
@@ -115,13 +116,11 @@ object BitmapDescriptorFactoryImpl : IBitmapDescriptorFactoryDelegate.Stub() {
        }

        if (bitmap != null) {
            for (map in maps) {
                map.getStyle {
                    runOnMainLooper {
                        it.addImage(id, bitmap)
                    }
                }
            synchronized(missingBitmaps) {
                missingBitmaps[id] = bitmap
                if (missingBitmaps.size == 1) runOnMainLooper(forceQueue = true) { postAddMissingBitmaps() }
            }

        }

        synchronized(refCount) {
@@ -131,6 +130,21 @@ object BitmapDescriptorFactoryImpl : IBitmapDescriptorFactoryDelegate.Stub() {
        return ObjectWrapper.wrap(descriptorCreator(id, bitmapSize(id)))
    }

    private fun postAddMissingBitmaps() {
        val missingPairs = synchronized(missingBitmaps) {
            HashMap(missingBitmaps).also { missingBitmaps.clear() }
        }

        for (map in maps) {
            map.getStyle {
                runOnMainLooper {
                    Log.v(TAG, "registering ${missingPairs.size} bitmaps")
                    it.addImages(missingPairs)
                }
            }
        }
    }

    override fun fromResource(resourceId: Int): IObjectWrapper = registerBitmap("resource-$resourceId") {
        val bitmap = BitmapFactory.decodeResource(resources, resourceId)
        if (bitmap == null) {