Files
iTartanas/itranvias_code/com/google/maps.android/data/kml/KmlRenderer.java
T

393 lines
17 KiB
Java

package com.google.maps.android.data.kml;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.util.Log;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.model.BitmapDescriptor;
import com.google.android.gms.maps.model.GroundOverlay;
import com.google.android.gms.maps.model.Marker;
import com.google.maps.android.collections.GroundOverlayManager;
import com.google.maps.android.collections.MarkerManager;
import com.google.maps.android.collections.PolygonManager;
import com.google.maps.android.collections.PolylineManager;
import com.google.maps.android.data.Feature;
import com.google.maps.android.data.Geometry;
import com.google.maps.android.data.MultiGeometry;
import com.google.maps.android.data.Renderer;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
/* JADX INFO: loaded from: classes2.dex */
public class KmlRenderer extends Renderer {
private static final String LOG_TAG = "KmlRenderer";
private ArrayList<KmlContainer> mContainers;
private boolean mGroundOverlayImagesDownloaded;
private final Set<String> mGroundOverlayUrls;
private boolean mMarkerIconsDownloaded;
KmlRenderer(GoogleMap googleMap, Context context, MarkerManager markerManager, PolygonManager polygonManager, PolylineManager polylineManager, GroundOverlayManager groundOverlayManager, Renderer.ImagesCache imagesCache) {
super(googleMap, context, markerManager, polygonManager, polylineManager, groundOverlayManager, imagesCache);
this.mGroundOverlayUrls = new HashSet();
this.mMarkerIconsDownloaded = false;
this.mGroundOverlayImagesDownloaded = false;
}
private void removePlacemarks(HashMap<? extends Feature, Object> map) {
removeFeatures(map);
}
static boolean getContainerVisibility(KmlContainer kmlContainer, boolean z) {
return z && (!kmlContainer.hasProperty("visibility") || Integer.parseInt(kmlContainer.getProperty("visibility")) != 0);
}
private void removeContainers(Iterable<KmlContainer> iterable) {
for (KmlContainer kmlContainer : iterable) {
removePlacemarks(kmlContainer.getPlacemarksHashMap());
removeGroundOverlays(kmlContainer.getGroundOverlayHashMap());
removeContainers(kmlContainer.getContainers());
}
}
public void addLayerToMap() {
setLayerVisibility(true);
this.mContainers = getContainerList();
putStyles();
assignStyleMap(getStyleMaps(), getStylesRenderer());
addGroundOverlays(getGroundOverlayMap(), this.mContainers);
addContainerGroupToMap(this.mContainers, true);
addPlacemarksToMap(getAllFeatures());
if (!this.mGroundOverlayImagesDownloaded) {
downloadGroundOverlays();
}
if (!this.mMarkerIconsDownloaded) {
downloadMarkerIcons();
}
checkClearBitmapCache();
}
void storeKmlData(HashMap<String, KmlStyle> map, HashMap<String, String> map2, HashMap<KmlPlacemark, Object> map3, ArrayList<KmlContainer> arrayList, HashMap<KmlGroundOverlay, GroundOverlay> map4) {
storeData(map, map2, map3, arrayList, map4);
}
void storeKmzData(HashMap<String, KmlStyle> map, HashMap<String, String> map2, HashMap<KmlPlacemark, Object> map3, ArrayList<KmlContainer> arrayList, HashMap<KmlGroundOverlay, GroundOverlay> map4, HashMap<String, Bitmap> map5) {
storeData(map, map2, map3, arrayList, map4);
for (Map.Entry<String, Bitmap> entry : map5.entrySet()) {
cacheBitmap(entry.getKey(), entry.getValue());
}
}
@Override // com.google.maps.android.data.Renderer
public void setMap(GoogleMap googleMap) {
removeLayerFromMap();
super.setMap(googleMap);
addLayerToMap();
}
boolean hasKmlPlacemarks() {
return hasFeatures();
}
Iterable<? extends Feature> getKmlPlacemarks() {
return getFeatures();
}
public boolean hasNestedContainers() {
return this.mContainers.size() > 0;
}
public Iterable<KmlContainer> getNestedContainers() {
return this.mContainers;
}
public Iterable<KmlGroundOverlay> getGroundOverlays() {
return getGroundOverlayMap().keySet();
}
public void removeLayerFromMap() {
removePlacemarks(getAllFeatures());
removeGroundOverlays(getGroundOverlayMap());
if (hasNestedContainers()) {
removeContainers(getNestedContainers());
}
setLayerVisibility(false);
clearStylesRenderer();
}
private void addPlacemarksToMap(HashMap<? extends Feature, Object> map) {
Iterator<? extends Feature> it = map.keySet().iterator();
while (it.hasNext()) {
addFeature(it.next());
}
}
private void addContainerGroupToMap(Iterable<KmlContainer> iterable, boolean z) {
for (KmlContainer kmlContainer : iterable) {
boolean containerVisibility = getContainerVisibility(kmlContainer, z);
if (kmlContainer.getStyles() != null) {
putStyles(kmlContainer.getStyles());
}
if (kmlContainer.getStyleMap() != null) {
super.assignStyleMap(kmlContainer.getStyleMap(), getStylesRenderer());
}
addContainerObjectToMap(kmlContainer, containerVisibility);
if (kmlContainer.hasContainers()) {
addContainerGroupToMap(kmlContainer.getContainers(), containerVisibility);
}
}
}
private void addContainerObjectToMap(KmlContainer kmlContainer, boolean z) {
for (KmlPlacemark kmlPlacemark : kmlContainer.getPlacemarks()) {
boolean z2 = z && getPlacemarkVisibility(kmlPlacemark);
if (kmlPlacemark.getGeometry() != null) {
String id = kmlPlacemark.getId();
Geometry geometry = kmlPlacemark.getGeometry();
KmlStyle placemarkStyle = getPlacemarkStyle(id);
KmlPlacemark kmlPlacemark2 = kmlPlacemark;
Object objAddKmlPlacemarkToMap = addKmlPlacemarkToMap(kmlPlacemark2, geometry, placemarkStyle, kmlPlacemark2.getInlineStyle(), z2);
kmlContainer.setPlacemark(kmlPlacemark2, objAddKmlPlacemarkToMap);
putContainerFeature(objAddKmlPlacemarkToMap, kmlPlacemark);
}
}
}
private void downloadMarkerIcons() {
this.mMarkerIconsDownloaded = true;
Iterator<String> it = getMarkerIconUrls().iterator();
while (it.hasNext()) {
new MarkerIconImageDownload(it.next()).execute(new String[0]);
it.remove();
}
}
/* JADX INFO: Access modifiers changed from: private */
public void addIconToMarkers(String str, HashMap<KmlPlacemark, Object> map) {
for (KmlPlacemark kmlPlacemark : map.keySet()) {
addIconToGeometry(str, getStylesRenderer().get(kmlPlacemark.getId()), kmlPlacemark.getInlineStyle(), kmlPlacemark.getGeometry(), map.get(kmlPlacemark));
}
}
private void addIconToGeometry(String str, KmlStyle kmlStyle, KmlStyle kmlStyle2, Geometry geometry, Object obj) {
if (geometry == null) {
return;
}
if ("Point".equals(geometry.getGeometryType())) {
addIconToMarker(str, kmlStyle, kmlStyle2, (Marker) obj);
} else if ("MultiGeometry".equals(geometry.getGeometryType())) {
addIconToMultiGeometry(str, kmlStyle, kmlStyle2, (MultiGeometry) geometry, (List) obj);
}
}
private void addIconToMultiGeometry(String str, KmlStyle kmlStyle, KmlStyle kmlStyle2, MultiGeometry multiGeometry, List<Object> list) {
Iterator<Geometry> it = multiGeometry.getGeometryObject().iterator();
Iterator<Object> it2 = list.iterator();
while (it.hasNext() && it2.hasNext()) {
addIconToGeometry(str, kmlStyle, kmlStyle2, it.next(), it2.next());
}
}
private void addIconToMarker(String str, KmlStyle kmlStyle, KmlStyle kmlStyle2, Marker marker) {
boolean z = kmlStyle2 != null && str.equals(kmlStyle2.getIconUrl());
boolean z2 = kmlStyle != null && str.equals(kmlStyle.getIconUrl());
if (z) {
scaleBitmap(kmlStyle2, marker);
} else if (z2) {
scaleBitmap(kmlStyle, marker);
}
}
private void scaleBitmap(KmlStyle kmlStyle, Marker marker) {
marker.setIcon(getCachedMarkerImage(kmlStyle.getIconUrl(), kmlStyle.getIconScale()));
}
/* JADX INFO: Access modifiers changed from: private */
public void addContainerGroupIconsToMarkers(String str, Iterable<KmlContainer> iterable) {
for (KmlContainer kmlContainer : iterable) {
addIconToMarkers(str, kmlContainer.getPlacemarksHashMap());
if (kmlContainer.hasContainers()) {
addContainerGroupIconsToMarkers(str, kmlContainer.getContainers());
}
}
}
private void addGroundOverlays(HashMap<KmlGroundOverlay, GroundOverlay> map, Iterable<KmlContainer> iterable) {
addGroundOverlays(map);
for (KmlContainer kmlContainer : iterable) {
addGroundOverlays(kmlContainer.getGroundOverlayHashMap(), kmlContainer.getContainers());
}
}
private void addGroundOverlays(HashMap<KmlGroundOverlay, GroundOverlay> map) {
for (KmlGroundOverlay kmlGroundOverlay : map.keySet()) {
String imageUrl = kmlGroundOverlay.getImageUrl();
if (imageUrl != null && kmlGroundOverlay.getLatLngBox() != null) {
if (getCachedGroundOverlayImage(imageUrl) != null) {
addGroundOverlayToMap(imageUrl, map, true);
} else {
this.mGroundOverlayUrls.add(imageUrl);
}
}
}
}
private void downloadGroundOverlays() {
this.mGroundOverlayImagesDownloaded = true;
Iterator<String> it = this.mGroundOverlayUrls.iterator();
while (it.hasNext()) {
new GroundOverlayImageDownload(it.next()).execute(new String[0]);
it.remove();
}
}
/* JADX INFO: Access modifiers changed from: private */
public void addGroundOverlayToMap(String str, HashMap<KmlGroundOverlay, GroundOverlay> map, boolean z) {
BitmapDescriptor cachedGroundOverlayImage = getCachedGroundOverlayImage(str);
for (KmlGroundOverlay kmlGroundOverlay : map.keySet()) {
if (kmlGroundOverlay.getImageUrl().equals(str)) {
GroundOverlay groundOverlayAttachGroundOverlay = attachGroundOverlay(kmlGroundOverlay.getGroundOverlayOptions().image(cachedGroundOverlayImage));
if (!z) {
groundOverlayAttachGroundOverlay.setVisible(false);
}
map.put(kmlGroundOverlay, groundOverlayAttachGroundOverlay);
}
}
}
/* JADX INFO: Access modifiers changed from: private */
public void addGroundOverlayInContainerGroups(String str, Iterable<KmlContainer> iterable, boolean z) {
for (KmlContainer kmlContainer : iterable) {
boolean containerVisibility = getContainerVisibility(kmlContainer, z);
addGroundOverlayToMap(str, kmlContainer.getGroundOverlayHashMap(), containerVisibility);
if (kmlContainer.hasContainers()) {
addGroundOverlayInContainerGroups(str, kmlContainer.getContainers(), containerVisibility);
}
}
}
private class MarkerIconImageDownload extends AsyncTask<String, Void, Bitmap> {
private final String mIconUrl;
public MarkerIconImageDownload(String str) {
this.mIconUrl = str;
KmlRenderer.this.downloadStarted();
}
/* JADX INFO: Access modifiers changed from: protected */
@Override // android.os.AsyncTask
public Bitmap doInBackground(String... strArr) {
try {
return KmlRenderer.this.getBitmapFromUrl(this.mIconUrl);
} catch (MalformedURLException unused) {
return BitmapFactory.decodeFile(this.mIconUrl);
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
/* JADX INFO: Access modifiers changed from: protected */
@Override // android.os.AsyncTask
public void onPostExecute(Bitmap bitmap) {
if (bitmap != null) {
KmlRenderer.this.cacheBitmap(this.mIconUrl, bitmap);
if (KmlRenderer.this.isLayerOnMap()) {
KmlRenderer kmlRenderer = KmlRenderer.this;
kmlRenderer.addIconToMarkers(this.mIconUrl, kmlRenderer.getAllFeatures());
KmlRenderer kmlRenderer2 = KmlRenderer.this;
kmlRenderer2.addContainerGroupIconsToMarkers(this.mIconUrl, kmlRenderer2.mContainers);
}
} else {
Log.e(KmlRenderer.LOG_TAG, "Image at this URL could not be found " + this.mIconUrl);
}
KmlRenderer.this.downloadFinished();
}
}
private class GroundOverlayImageDownload extends AsyncTask<String, Void, Bitmap> {
private final String mGroundOverlayUrl;
public GroundOverlayImageDownload(String str) {
this.mGroundOverlayUrl = str;
KmlRenderer.this.downloadStarted();
}
/* JADX INFO: Access modifiers changed from: protected */
@Override // android.os.AsyncTask
public Bitmap doInBackground(String... strArr) {
try {
return KmlRenderer.this.getBitmapFromUrl(this.mGroundOverlayUrl);
} catch (MalformedURLException unused) {
return BitmapFactory.decodeFile(this.mGroundOverlayUrl);
} catch (IOException e) {
Log.e(KmlRenderer.LOG_TAG, "Image [" + this.mGroundOverlayUrl + "] download issue", e);
return null;
}
}
/* JADX INFO: Access modifiers changed from: protected */
@Override // android.os.AsyncTask
public void onPostExecute(Bitmap bitmap) {
if (bitmap != null) {
KmlRenderer.this.cacheBitmap(this.mGroundOverlayUrl, bitmap);
if (KmlRenderer.this.isLayerOnMap()) {
KmlRenderer kmlRenderer = KmlRenderer.this;
kmlRenderer.addGroundOverlayToMap(this.mGroundOverlayUrl, kmlRenderer.getGroundOverlayMap(), true);
KmlRenderer kmlRenderer2 = KmlRenderer.this;
kmlRenderer2.addGroundOverlayInContainerGroups(this.mGroundOverlayUrl, kmlRenderer2.mContainers, true);
}
} else {
Log.e(KmlRenderer.LOG_TAG, "Image at this URL could not be found " + this.mGroundOverlayUrl);
}
KmlRenderer.this.downloadFinished();
}
}
/* JADX INFO: Access modifiers changed from: private */
public Bitmap getBitmapFromUrl(String str) throws IOException {
return BitmapFactory.decodeStream(openConnectionCheckRedirects(new URL(str).openConnection()));
}
private InputStream openConnectionCheckRedirects(URLConnection uRLConnection) throws IOException {
InputStream inputStream;
boolean z;
HttpURLConnection httpURLConnection;
int responseCode;
int i = 0;
do {
boolean z2 = uRLConnection instanceof HttpURLConnection;
if (z2) {
((HttpURLConnection) uRLConnection).setInstanceFollowRedirects(false);
}
inputStream = uRLConnection.getInputStream();
if (!z2 || (responseCode = (httpURLConnection = (HttpURLConnection) uRLConnection).getResponseCode()) < 300 || responseCode > 307 || responseCode == 306 || responseCode == 304) {
z = false;
} else {
URL url = httpURLConnection.getURL();
String headerField = httpURLConnection.getHeaderField("Location");
URL url2 = headerField != null ? new URL(url, headerField) : null;
httpURLConnection.disconnect();
if (url2 == null || ((!url2.getProtocol().equals("http") && !url2.getProtocol().equals("https")) || i >= 5)) {
throw new SecurityException("illegal URL redirect");
}
uRLConnection = url2.openConnection();
i++;
z = true;
}
} while (z);
return inputStream;
}
}