package com.jdroid.android.refresh; import android.content.Context; import android.graphics.Rect; import android.support.v4.view.ActionProvider; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnLongClickListener; import android.widget.ImageButton; import android.widget.Toast; import android.widget.ViewSwitcher; import com.jdroid.android.R; public class RefreshActionProvider extends ActionProvider { public interface OnRefreshListener { public void onRefresh(); } private static final int BUTTON_VIEW = 0; private static final int PROGRESS_VIEW = 1; private OnRefreshListener onRefreshClickListener; private ViewSwitcher viewSwitcher; private CharSequence title; public RefreshActionProvider(final Context context) { super(context); viewSwitcher = (ViewSwitcher)LayoutInflater.from(context).inflate(R.layout.jdroid_refresh_action_item, null); ImageButton refreshButton = (ImageButton)viewSwitcher.findViewById(R.id.refresh_button); refreshButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { viewSwitcher.setDisplayedChild(PROGRESS_VIEW); if (onRefreshClickListener != null) { onRefreshClickListener.onRefresh(); } } }); refreshButton.setOnLongClickListener(new OnLongClickListener() { @Override public boolean onLongClick(View view) { showCheatsheet(context, view); return true; } }); } @Override public View onCreateActionView() { return viewSwitcher; } public void setOnRefreshListener(OnRefreshListener onRefreshListener) { onRefreshClickListener = onRefreshListener; } public void stopLoading() { viewSwitcher.setDisplayedChild(BUTTON_VIEW); } public void startLoading() { viewSwitcher.setDisplayedChild(PROGRESS_VIEW); } /** * Slightly modified code, from Jake Wharton's ABS */ private void showCheatsheet(Context context, View view) { final int[] screenPos = new int[2]; final Rect displayFrame = new Rect(); view.getLocationOnScreen(screenPos); view.getWindowVisibleDisplayFrame(displayFrame); final int width = view.getWidth(); final int height = view.getHeight(); final int midy = screenPos[1] + (height / 2); final int screenWidth = context.getResources().getDisplayMetrics().widthPixels; Toast cheatSheet = Toast.makeText(context, title, Toast.LENGTH_SHORT); if (midy < displayFrame.height()) { // Show along the top; follow action buttons cheatSheet.setGravity(Gravity.TOP | Gravity.RIGHT, screenWidth - screenPos[0] - (width / 2), height); } else { // Show along the bottom center cheatSheet.setGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, height); } cheatSheet.show(); } public void setTitle(CharSequence title) { this.title = title; } }