/*** * Copyright (c) 2010 readyState Software Ltd * * 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 org.ohmage.feedback.visualization; import org.ohmage.R; import android.content.Context; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import com.google.android.maps.OverlayItem; /** * A view representing a MapView marker information balloon. * <p> * This class has a number of Android resource dependencies: * <ul> * <li>drawable/balloon_overlay_bg_selector.xml</li> * <li>drawable/balloon_overlay_close.png</li> * <li>drawable/balloon_overlay_focused.9.png</li> * <li>drawable/balloon_overlay_unfocused.9.png</li> * <li>layout/balloon_map_overlay.xml</li> * </ul> * </p> * * @author Jeff Gilfelt * */ public class BalloonOverlayView extends FrameLayout { public interface OnBalloonClosedListener { public void onBalloonClosed(BalloonOverlayView view); } private final LinearLayout layout; private final TextView title; private final TextView snippet; private OnBalloonClosedListener mClosedListner; /** * Create a new BalloonOverlayView. * * @param context - The activity context. * @param balloonBottomOffset - The bottom padding (in pixels) to be applied * when rendering this view. */ public BalloonOverlayView(Context context, int balloonBottomOffset) { super(context); setPadding(10, 0, 10, balloonBottomOffset); layout = new LinearLayout(context); layout.setVisibility(VISIBLE); LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); View v = inflater.inflate(R.layout.balloon_overlay, layout); title = (TextView) v.findViewById(R.id.balloon_item_title); snippet = (TextView) v.findViewById(R.id.balloon_item_snippet); ImageView close = (ImageView) v.findViewById(R.id.close_img_button); close.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { layout.setVisibility(GONE); if(mClosedListner != null) mClosedListner.onBalloonClosed(BalloonOverlayView.this); } }); FrameLayout.LayoutParams params = new FrameLayout.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); params.gravity = Gravity.NO_GRAVITY; addView(layout, params); } /** * Sets the view data from a given overlay item. * * @param item - The overlay item containing the relevant view data * (title and snippet). */ public void setData(OverlayItem item) { layout.setVisibility(VISIBLE); if (item.getTitle() != null) { title.setVisibility(VISIBLE); title.setText(item.getTitle()); } else { title.setVisibility(GONE); } if (item.getSnippet() != null) { snippet.setVisibility(VISIBLE); snippet.setText(item.getSnippet()); } else { snippet.setVisibility(GONE); } } public void setOnBalloonClosedListener(OnBalloonClosedListener onBalloonClosedListener) { mClosedListner = onBalloonClosedListener; } }