package com.mutu.mapapi.search.overlays;
import com.mutu.mapapi.search.utils.BonusPackHelper;
import com.mutu.mapapi.views.MapView;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
/**
* Default implementation of InfoWindow.
* It handles a text and a description.
* It also handles optionally a sub-description and an image.
* Clicking on the bubble will close it.
*
* @author M.Kergall
*/
public class DefaultInfoWindow extends InfoWindow {
static int mTitleId=0, mDescriptionId=0, mSubDescriptionId=0, mImageId=0; //resource ids
private static void setResIds(Context context){
String packageName = context.getPackageName(); //get application package name
mTitleId = context.getResources().getIdentifier("id/bubble_title", null, packageName);
mDescriptionId = context.getResources().getIdentifier("id/bubble_description", null, packageName);
mSubDescriptionId = context.getResources().getIdentifier("id/bubble_subdescription", null, packageName);
mImageId = context.getResources().getIdentifier("id/bubble_image", null, packageName);
if (mTitleId == 0 || mDescriptionId == 0 || mSubDescriptionId == 0 || mImageId == 0) {
Log.e(BonusPackHelper.LOG_TAG, "DefaultInfoWindow: unable to get res ids in "+packageName);
}
}
public DefaultInfoWindow(int layoutResId, MapView mapView) {
super(layoutResId, mapView);
if (mTitleId == 0)
setResIds(mapView.getContext());
//default behavior: close it when clicking on the bubble:
mView.setOnTouchListener(new View.OnTouchListener() {
@Override public boolean onTouch(View v, MotionEvent e) {
if (e.getAction() == MotionEvent.ACTION_UP)
close();
return true; //From Osmdroid 3.0.10, event is properly consumed.
}
});
}
@Override public void onOpen(ExtendedOverlayItem item) {
String title = item.getTitle();
if (title == null)
title = "";
((TextView)mView.findViewById(mTitleId /*R.id.title*/)).setText(title);
String snippet = item.getDescription();
if (snippet == null)
snippet = "";
((TextView)mView.findViewById(mDescriptionId /*R.id.description*/)).setText(snippet);
//handle sub-description, hidding or showing the text view:
TextView subDescText = (TextView)mView.findViewById(mSubDescriptionId);
String subDesc = item.getSubDescription();
if (subDesc != null && !("".equals(subDesc))){
subDescText.setText(subDesc);
subDescText.setVisibility(View.VISIBLE);
} else {
subDescText.setVisibility(View.GONE);
}
//handle image
ImageView imageView = (ImageView)mView.findViewById(mImageId /*R.id.image*/);
Drawable image = item.getImage();
if (image != null){
imageView.setImageDrawable(image); //or setBackgroundDrawable(image)?
imageView.setVisibility(View.VISIBLE);
} else
imageView.setVisibility(View.GONE);
}
@Override public void onClose() {
//by default, do nothing
}
}