package org.openintents.filemanager.view;
import org.openintents.filemanager.R;
import android.content.Context;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageButton;
import android.widget.ImageView.ScaleType;
import android.widget.LinearLayout;
import android.widget.Toast;
public class LegacyActionContainer extends LinearLayout {
private Menu menu = null;
private OnActionSelectedListener mListener;
public LegacyActionContainer(Context context) {
super(context);
init();
}
public LegacyActionContainer(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
/**
* Init this view.
*/
private void init() {
setOrientation(HORIZONTAL);
setGravity(Gravity.CENTER_VERTICAL);
}
/**
* Set the menu resource which contains the actions this view will display.
*
* @param menuRes The menu resource id.
*/
public void setMenuResource(int menuRes) {
removeAllViews();
this.menu = new MenuBuilder(getContext());
MenuInflater inflater = new MenuInflater(getContext());
inflater.inflate(menuRes, menu);
loadChildViews();
}
/**
* Add the {@link #menu} members as children in the view. Each view will have the corresponding MenuItem as its tag.
*/
private void loadChildViews() {
ImageButton itemView;
LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT);
params.weight = 1;
for (int i = 0; i < menu.size(); i++) {
itemView = new ImageButton(getContext());
itemView.setLayoutParams(params);
itemView.setImageDrawable(menu.getItem(i).getIcon());
itemView.setBackgroundResource(R.drawable.bg_action_container_button);
itemView.setTag(menu.getItem(i));
itemView.setScaleType(ScaleType.CENTER_INSIDE);
itemView.setAdjustViewBounds(true);
itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Toast t = Toast.makeText(getContext(),
((MenuItem) v.getTag()).getTitle(),
Toast.LENGTH_SHORT);
// Position the toast near the item but not on it so that the user can see it appearing.
t.setGravity(Gravity.TOP | Gravity.LEFT, v.getLeft()-50,
v.getBottom() + 40);
t.show();
return true;
}
});
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(mListener != null)
mListener.actionSelected((MenuItem) v.getTag());
}
});
addView(itemView);
}
}
/**
* Set the activity member that contains the multiselect actions.
*/
public void setOnActionSelectedListener(OnActionSelectedListener listener) {
mListener = listener;
}
public interface OnActionSelectedListener {
public void actionSelected(MenuItem item);
}
}