package com.smartisanos.sidebar.view;
import android.content.Context;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.MeasureSpec;
import android.view.ViewGroup.LayoutParams;
import android.widget.PopupWindow;
import android.widget.TextView;
import com.smartisanos.sidebar.R;
import com.smartisanos.sidebar.SidebarController;
import com.smartisanos.sidebar.SidebarMode;
import com.smartisanos.sidebar.util.LOG;
public class FloatText {
private static final LOG log = LOG.getInstance(FloatText.class);
private volatile static FloatText sInstance;
public static FloatText getInstance(Context context) {
if (sInstance == null) {
synchronized (FloatText.class) {
if (sInstance == null) {
sInstance = new FloatText(context);
}
}
}
return sInstance;
}
private Context mContext;
private View mFloatView;
private TextView mText;
private PopupWindow mPopupWindow;
private int mPaddingWithSidebar;
private FloatText(Context context) {
mContext = context;
mFloatView = LayoutInflater.from(context).inflate(R.layout.float_text_layout, null);
mText = (TextView) mFloatView.findViewById(R.id.text_content);
mPopupWindow = new PopupWindow(mFloatView, LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
mPopupWindow.setTouchable(false);
mPopupWindow.setFocusable(false);
mPaddingWithSidebar = mContext.getResources().getDimensionPixelSize(R.dimen.float_text_padding_with_sidebar);
}
public void start() {
mFloatView.setVisibility(View.INVISIBLE);
mPopupWindow.showAtLocation(SidebarController.getInstance(mContext).getSideView(), Gravity.NO_GRAVITY, 0, 0);
}
public void end() {
mPopupWindow.dismiss();
}
public void show(View view, CharSequence text) {
mText.setText(text);
int spec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
mText.measure(spec, spec);
int textWidth = mText.getMeasuredWidth();
int textHeight = mText.getMeasuredHeight();
int viewWidth = view.getWidth();
int viewHeight = view.getHeight();
int[] loc = new int[2];
view.getLocationOnScreen(loc);
int xOffset = 0;
int yOffset = loc[1] + (viewHeight - textHeight) / 2;
if (SidebarController.getInstance(view.getContext()).getSidebarMode() == SidebarMode.MODE_LEFT) {
xOffset = loc[0] + viewWidth + mPaddingWithSidebar;
} else {
xOffset = loc[0] - textWidth - mPaddingWithSidebar;
}
mText.setX(xOffset);
mText.setY(yOffset);
mFloatView.setVisibility(View.VISIBLE);
}
public void hide() {
mFloatView.setVisibility(View.INVISIBLE);
}
}