package carbon.internal;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Rect;
import android.graphics.drawable.ColorDrawable;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.PopupWindow;
import carbon.R;
import carbon.widget.Button;
import carbon.widget.EditText;
import carbon.widget.LinearLayout;
public class EditTextMenu extends PopupWindow {
private EditText editText;
public EditTextMenu(Context context) {
super(LayoutInflater.from(context).inflate(R.layout.carbon_editormenu, null, false));
getContentView().setLayoutParams(new ViewGroup.MarginLayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
setBackgroundDrawable(new ColorDrawable(context.getResources().getColor(android.R.color.transparent)));
setTouchable(true);
setFocusable(true);
setOutsideTouchable(true);
setAnimationStyle(0);
setClippingEnabled(false);
}
public boolean show(EditText anchor) {
editText = anchor;
super.showAtLocation(anchor, Gravity.START | Gravity.TOP, 0, 0);
update();
View content = getContentView().findViewById(R.id.carbon_menuContainer);
content.setVisibility(View.VISIBLE);
return true;
}
public boolean showImmediate(EditText anchor) {
editText = anchor;
super.showAtLocation(anchor, Gravity.START | Gravity.TOP, 0, 0);
update();
LinearLayout content = (LinearLayout) getContentView().findViewById(R.id.carbon_menuContainer);
content.setVisibility(View.VISIBLE);
return true;
}
public void update() {
if (editText == null)
return;
final Resources res = getContentView().getContext().getResources();
int margin = (int) res.getDimension(R.dimen.carbon_padding);
int itemHeight = (int) res.getDimension(R.dimen.carbon_menuHeight);
Rect windowRect = new Rect();
editText.getWindowVisibleDisplayFrame(windowRect);
int[] location = new int[2];
editText.getLocationInWindow(location);
LinearLayout content = (LinearLayout) getContentView().findViewById(R.id.carbon_menuContent);
content.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(itemHeight, View.MeasureSpec.EXACTLY));
int popupX = location[0] - margin;
int popupY = location[1] - margin * 2 - content.getMeasuredHeight();
update(popupX, popupY, content.getMeasuredWidth() + margin * 2, content.getMeasuredHeight() + margin * 2);
super.update();
}
@Override
public void dismiss() {
LinearLayout content = (LinearLayout) getContentView().findViewById(R.id.carbon_menuContainer);
content.setVisibility(View.INVISIBLE);
content.getAnimator().addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
EditTextMenu.super.dismiss();
}
});
}
public void dismissImmediate() {
super.dismiss();
}
public boolean hasVisibleItems() {
View cut = getContentView().findViewById(R.id.carbon_cut);
View copy = getContentView().findViewById(R.id.carbon_copy);
View paste = getContentView().findViewById(R.id.carbon_paste);
View selectAll = getContentView().findViewById(R.id.carbon_selectAll);
return cut.getVisibility() == View.VISIBLE || copy.getVisibility() == View.VISIBLE || paste.getVisibility() == View.VISIBLE || selectAll.getVisibility() == View.VISIBLE;
}
public void initCopy(final MenuItem item) {
Button button = (Button) getContentView().findViewById(R.id.carbon_copy);
initMenuItem(item, button);
}
public void initCut(final MenuItem item) {
Button button = (Button) getContentView().findViewById(R.id.carbon_cut);
initMenuItem(item, button);
}
public void initPaste(final MenuItem item) {
Button button = (Button) getContentView().findViewById(R.id.carbon_paste);
initMenuItem(item, button);
}
public void initSelectAll(final MenuItem item) {
Button button = (Button) getContentView().findViewById(R.id.carbon_selectAll);
initMenuItem(item, button);
}
private void initMenuItem(final MenuItem item, Button button) {
if (item != null) {
button.setText(item.getTitle());
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
editText.onTextContextMenuItem(item.getItemId());
dismiss();
}
});
button.setVisibility(View.VISIBLE);
} else {
button.setVisibility(View.GONE);
}
}
}