/*
* Copyright (C) 2013 Maciej G�rski
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package pl.mg6.newmaps.demo;
import pl.mg6.newmaps.demo.util.GoogleMapHelper;
import android.os.Bundle;
import android.os.Handler;
import android.os.SystemClock;
import android.support.v4.app.FragmentActivity;
import android.view.View;
import android.widget.TextView;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.GoogleMap.InfoWindowAdapter;
import com.google.android.gms.maps.GoogleMap.OnInfoWindowClickListener;
import com.google.android.gms.maps.model.BitmapDescriptor;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.LatLngBounds;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
public class InfoWindowExampleActivity extends FragmentActivity {
private static final LatLng GNIEZNO_LOCATION = new LatLng(52.5349253, 17.5826575);
private static final LatLng CRACOW_LOCATION = new LatLng(50.06465, 19.9449799);
private static final LatLng WARSAW_LOCATION = new LatLng(52.2296756, 21.0122287);
private Marker gnieznoMarker;
private Marker cracowMarker;
private Marker warsawMarker;
private Handler handler = new Handler();
private long startTime = SystemClock.uptimeMillis() / 1000;
private Runnable refreshInfoWindow = new Runnable() {
@Override
public void run() {
if (cracowMarker.isInfoWindowShown()) {
cracowMarker.showInfoWindow();
}
if (warsawMarker.isInfoWindowShown()) {
warsawMarker.showInfoWindow();
}
handler.postDelayed(this, 2222);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.info_window_example);
GoogleMap map = GoogleMapHelper.getMap(this, R.id.info_window_map);
setInfoWindowAdapter(map);
setInfoWindowClickListener(map);
addGnieznoMarker(map);
addCracowMarker(map);
addWarsawMarker(map);
if (savedInstanceState == null) {
moveCameraToShowMarkers(map);
}
}
@Override
protected void onResume() {
super.onResume();
handler.post(refreshInfoWindow);
}
@Override
protected void onPause() {
super.onPause();
handler.removeCallbacks(refreshInfoWindow);
}
private void setInfoWindowAdapter(GoogleMap map) {
map.setInfoWindowAdapter(new InfoWindowAdapter() {
@Override
public View getInfoWindow(Marker marker) {
if (warsawMarker.equals(marker)) {
return createView(R.layout.warsaw_info_window, 1711324, 3309);
}
return null;
}
@Override
public View getInfoContents(Marker marker) {
if (cracowMarker.equals(marker)) {
return createView(R.layout.cracow_info_contents, 759137, 2232);
}
return null;
}
private View createView(int layoutId, int population, int density) {
View view = getLayoutInflater().inflate(layoutId, null);
TextView snippet = (TextView) view.findViewById(R.id.snippet);
long currentTime = SystemClock.uptimeMillis() / 1000;
int bornCount = (int) (currentTime - startTime);
snippet.setText("Populacja: " + (population + bornCount) + "\nG�sto��: " + density + " os./km^2");
return view;
}
});
}
private void setInfoWindowClickListener(GoogleMap map) {
map.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {
@Override
public void onInfoWindowClick(Marker marker) {
if (gnieznoMarker.equals(marker)) {
gnieznoMarker.setSnippet("Pierwsza stolica Polski\ndo ok. 1039r.");
gnieznoMarker.showInfoWindow();
}
if (warsawMarker.equals(marker)) {
cracowMarker.showInfoWindow();
}
if (cracowMarker.equals(marker)) {
cracowMarker.hideInfoWindow();
}
}
});
}
private void addGnieznoMarker(GoogleMap map) {
MarkerOptions options = new MarkerOptions().position(GNIEZNO_LOCATION).title("Gniezno").snippet("Pierwsza stolica Polski");
gnieznoMarker = map.addMarker(options);
}
private void addCracowMarker(GoogleMap map) {
BitmapDescriptor icon = BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN);
MarkerOptions options = new MarkerOptions().position(CRACOW_LOCATION).icon(icon);
cracowMarker = map.addMarker(options);
}
private void addWarsawMarker(GoogleMap map) {
BitmapDescriptor icon = BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE);
MarkerOptions options = new MarkerOptions().position(WARSAW_LOCATION).icon(icon);
warsawMarker = map.addMarker(options);
}
private void moveCameraToShowMarkers(GoogleMap map) {
LatLngBounds bounds = LatLngBounds.builder().include(GNIEZNO_LOCATION).include(CRACOW_LOCATION).include(WARSAW_LOCATION).build();
int width = getResources().getDisplayMetrics().widthPixels;
int height = getResources().getDisplayMetrics().heightPixels;
int padding = getResources().getDimensionPixelSize(R.dimen.padding);
map.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds, width, height, padding));
}
}