/***
* 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;
}
}