import android.support.annotation.Nullable;
import android.support.v4.content.ContextCompat;
import android.support.v4.widget.SwipeRefreshLayout;
-import android.support.v7.widget.PopupMenu;
import android.support.v7.widget.Toolbar;
import android.text.SpannableString;
import android.text.TextUtils;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ListView;
+import android.widget.PopupMenu;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ViewSwitcher;
if (filterListPortraitButton != null) {
filterListPortraitButton.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
+
PopupMenu popup = new PopupMenu(getActivity(), filterListPortraitButton);
inflateFilterSubMenu(popup.getMenu());
+ ViewUtils.setForceShowIcon(popup);
+
+ popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
+ @Override public boolean onMenuItemClick(MenuItem item) {
+ return onFilterItemSelected(item);
+ }
+ });
popup.show();
}
});
}
@Override public boolean onOptionsItemSelected(MenuItem item) {
-
- // Handle presses on the action bar items
-
- switch (item.getItemId()) {
-
- case R.id.action_no_filter:
-
- MyFilters.INSTANCE.selectFilter(null);
- getActivity().invalidateOptionsMenu();
- executeAsyncTask(new DossiersLoadingTask());
- return true;
-
- case R.id.action_add_filter:
-
- Filter filter = MyFilters.INSTANCE.getSelectedFilter();
- if (filter == null)
- filter = new Filter();
-
- FilterDialogFragment filterDialog = FilterDialogFragment.newInstance(filter, mTypology);
- filterDialog.setTargetFragment(this, FilterDialogFragment.REQUEST_CODE_FILTER);
- filterDialog.show(getActivity().getFragmentManager(), FilterDialogFragment.FRAGMENT_TAG);
-
- return true;
-
- case R.id.action_filter:
-
- Filter currentFilter = mDisplayedFilters.get(item);
- if (currentFilter != null) {
- MyFilters.INSTANCE.selectFilter(currentFilter);
- getActivity().invalidateOptionsMenu();
- executeAsyncTask(new DossiersLoadingTask());
- }
-
- return true;
-
- default:
- return getActivity().onOptionsItemSelected(item);
- }
+ return onFilterItemSelected(item) || getActivity().onOptionsItemSelected(item);
}
// </editor-fold desc="ActionBar">
addMenuItem.setIcon(R.drawable.ic_add_circle_grey600_24dp);
}
+ private boolean onFilterItemSelected(@NonNull MenuItem item) {
+
+ switch (item.getItemId()) {
+
+ case R.id.action_no_filter:
+
+ MyFilters.INSTANCE.selectFilter(null);
+ getActivity().invalidateOptionsMenu();
+ executeAsyncTask(new DossiersLoadingTask());
+ return true;
+
+ case R.id.action_add_filter:
+
+ Filter filter = MyFilters.INSTANCE.getSelectedFilter();
+ if (filter == null)
+ filter = new Filter();
+
+ FilterDialogFragment filterDialog = FilterDialogFragment.newInstance(filter, mTypology);
+ filterDialog.setTargetFragment(this, FilterDialogFragment.REQUEST_CODE_FILTER);
+ filterDialog.show(getActivity().getFragmentManager(), FilterDialogFragment.FRAGMENT_TAG);
+
+ return true;
+
+ case R.id.action_filter:
+
+ Filter currentFilter = mDisplayedFilters.get(item);
+ if (currentFilter != null) {
+ MyFilters.INSTANCE.selectFilter(currentFilter);
+ getActivity().invalidateOptionsMenu();
+ executeAsyncTask(new DossiersLoadingTask());
+ }
+
+ return true;
+ }
+
+ return false;
+ }
+
public Bureau getSelectedBureau() {
return mSelectedBureau;
}
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.view.View;
+import android.widget.PopupMenu;
import org.adullact.iparapheur.R;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+
public class ViewUtils {
inAnim.addListener(animationListener);
}
+ /**
+ * Popup menu doesn't show any icons (in Lollipop),
+ * but an hidden method can be called reflectively to force it.
+ * Maybe some day, in a future Android version, it woudn't be necessary.
+ *
+ * That's not very pretty, but it is in a try/catch, so... Why not.
+ */
+ public static void setForceShowIcon(@NonNull PopupMenu popupMenu) {
+ try {
+ Field[] fields = popupMenu.getClass().getDeclaredFields();
+ for (Field field : fields) {
+ if ("mPopup".equals(field.getName())) {
+ field.setAccessible(true);
+ Object menuPopupHelper = field.get(popupMenu);
+ Class<?> classPopupHelper = Class.forName(menuPopupHelper.getClass().getName());
+ Method setForceIcons = classPopupHelper.getMethod("setForceShowIcon", boolean.class);
+ setForceIcons.invoke(menuPopupHelper, true);
+ break;
+ }
+ }
+ }
+ catch (Throwable e) {
+ e.printStackTrace();
+ }
+ }
}
\ No newline at end of file