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

Commit 6c9e8c0b authored by Fynn Godau's avatar Fynn Godau
Browse files

Remove auto parcel for LatLng for better performance

parent 8ee699a9
Loading
Loading
Loading
Loading
Loading
+56 −3
Original line number Diff line number Diff line
@@ -16,15 +16,20 @@

package com.google.android.gms.maps.model;

import android.os.Parcel;
import android.util.Log;
import androidx.annotation.NonNull;
import org.microg.gms.common.PublicApi;
import org.microg.safeparcel.AutoSafeParcelable;
import org.microg.safeparcel.SafeParcelReader;
import org.microg.safeparcel.SafeParcelWriter;
import org.microg.safeparcel.SafeParcelable;
import org.microg.safeparcel.SafeParceled;

/**
 * An immutable class representing a pair of latitude and longitude coordinates, stored as degrees.
 */
@PublicApi
public final class LatLng extends AutoSafeParcelable {
public final class LatLng implements SafeParcelable {
    @SafeParceled(1)
    private int versionCode = 1;
    /**
@@ -100,5 +105,53 @@ public final class LatLng extends AutoSafeParcelable {
        return "lat/lng: (" + latitude + "," + longitude + ")";
    }
    
    public static Creator<LatLng> CREATOR = new AutoCreator<LatLng>(LatLng.class);
    public static Creator<LatLng> CREATOR = new Creator<LatLng>() {
        @Override
        public LatLng createFromParcel(Parcel parcel) {
            int versionCode = 1;
            double latitude = 0.0;
            double longitude = 0.0;
            int end = SafeParcelReader.readObjectHeader(parcel);
            while (parcel.dataPosition() < end) {
                int header = SafeParcelReader.readHeader(parcel);
                int fieldId = SafeParcelReader.getFieldId(header);
                switch (fieldId) {
                    case 1:
                        versionCode = SafeParcelReader.readInt(parcel, header);
                        break;
                    case 2:
                        latitude = SafeParcelReader.readDouble(parcel, header);
                        break;
                    case 3:
                        longitude = SafeParcelReader.readDouble(parcel, header);
                }
            }
            LatLng latLng = new LatLng(latitude, longitude);
            latLng.versionCode = versionCode;
            return latLng;
        }

        @Override
        public LatLng[] newArray(int i) {
            return new LatLng[i];
        }
    };

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(@NonNull Parcel parcel, int i) {
        int start = SafeParcelWriter.writeObjectHeader(parcel);
        try {
            SafeParcelWriter.write(parcel, 1, versionCode);
            SafeParcelWriter.write(parcel, 2, latitude);
            SafeParcelWriter.write(parcel, 3, longitude);
        } catch (Exception e) {
            Log.w("GmsMapLatLngParcel", "Error writing field: " + e);
        }
        SafeParcelWriter.finishObjectHeader(parcel, start);
    }
}