Populate dropdown menu with options menu items

pull/14/head
Sam Bosley 13 years ago
parent e67a385a17
commit 2b930a7a0e

@ -159,9 +159,7 @@ public class TagViewFragment extends TaskListFragment {
@Override
protected void addSyncRefreshMenuItem(Menu menu) {
if(actFmPreferenceService.isLoggedIn()) {
MenuItem item = menu.add(Menu.NONE, MENU_REFRESH_ID, Menu.NONE,
R.string.actfm_TVA_menu_refresh);
item.setIcon(R.drawable.ic_menu_refresh);
addMenuItem(menu, R.string.actfm_TVA_menu_refresh, R.drawable.ic_menu_refresh, MENU_REFRESH_ID, false);
} else {
super.addSyncRefreshMenuItem(menu);
}

@ -83,9 +83,7 @@ public class GtasksListFragment extends SubtasksListFragment {
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
MenuItem item = menu.add(Menu.NONE, MENU_CLEAR_COMPLETED_ID, Menu.FIRST,
this.getString(R.string.gtasks_GTA_clear_completed));
item.setIcon(android.R.drawable.ic_input_delete); // Needs new icon
addMenuItem(menu, R.string.gtasks_GTA_clear_completed, android.R.drawable.ic_input_delete, MENU_CLEAR_COMPLETED_ID, false);
}
@Override
@ -148,9 +146,7 @@ public class GtasksListFragment extends SubtasksListFragment {
@Override
protected void addSyncRefreshMenuItem(Menu menu) {
if(gtasksPreferenceService.isLoggedIn()) {
MenuItem item = menu.add(Menu.NONE, MENU_REFRESH_ID, Menu.NONE,
R.string.actfm_TVA_menu_refresh);
item.setIcon(R.drawable.ic_menu_refresh);
addMenuItem(menu, R.string.actfm_TVA_menu_refresh, R.drawable.ic_menu_refresh, MENU_REFRESH_ID, false);
} else {
super.addSyncRefreshMenuItem(menu);
}

@ -7,28 +7,34 @@
<ScrollView
android:layout_width="280dip"
android:layout_height="wrap_content"
android:layout_below="@+id/gdi_arrow_up">
android:layout_height="340dip"
android:layout_below="@+id/gdi_arrow_up"
android:background="?attr/asListPopoverBg">
<LinearLayout
android:id="@+id/topFixedItems"
android:layout_width="280dip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="?attr/asListPopoverBg"
android:orientation="vertical"/>
<include layout="@layout/fla_separator"/>
<LinearLayout
android:id="@+id/content"
android:layout_width="280dip"
android:layout_height="wrap_content"
android:background="?attr/asListPopoverBg"
android:orientation="vertical"/>
<include layout="@layout/fla_separator"/>
<LinearLayout
android:id="@+id/bottomFixedItems"
android:layout_width="280dip"
android:layout_height="wrap_content"
android:background="?attr/asListPopoverBg"
android:orientation="vertical"/>
android:orientation="vertical">
<LinearLayout
android:id="@+id/topFixedItems"
android:layout_width="280dip"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:orientation="vertical"/>
<include layout="@layout/fla_separator"/>
<LinearLayout
android:id="@+id/content"
android:layout_width="280dip"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:orientation="vertical"/>
<include layout="@layout/fla_separator"/>
<LinearLayout
android:id="@+id/bottomFixedItems"
android:layout_width="280dip"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:orientation="vertical"/>
</LinearLayout>
</ScrollView>
<ImageView

@ -11,6 +11,7 @@ import android.support.v4.app.ActionBar;
import android.support.v4.app.Fragment;
import android.util.DisplayMetrics;
import android.util.TypedValue;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
@ -454,32 +455,48 @@ public class TaskListActivity extends AstridActivity implements MainMenuListener
@Override
public void mainMenuItemSelected(int item, Intent customIntent) {
TaskListFragment tla = getTaskListFragment();
TaskListFragment tlf = getTaskListFragment();
switch (item) {
case MainMenuPopover.MAIN_MENU_ITEM_LISTS:
listsNav.performClick();
break;
return;
case MainMenuPopover.MAIN_MENU_ITEM_FRIENDS:
// Doesn't exist yet
break;
return;
case MainMenuPopover.MAIN_MENU_ITEM_SUGGESTIONS:
// Doesn't exist yet
break;
return;
case MainMenuPopover.MAIN_MENU_ITEM_TUTORIAL:
Intent showWelcomeLogin = new Intent(this, WelcomeWalkthrough.class);
showWelcomeLogin.putExtra(ActFmLoginActivity.SHOW_TOAST, false);
showWelcomeLogin.putExtra(WelcomeWalkthrough.TOKEN_MANUAL_SHOW, true);
startActivity(showWelcomeLogin);
break;
return;
case MainMenuPopover.MAIN_MENU_ITEM_SETTINGS:
if (tla != null)
tla.showSettings();
break;
if (tlf != null)
tlf.showSettings();
return;
case MainMenuPopover.MAIN_MENU_ITEM_SUPPORT:
if (tla != null)
tla.showSupport();
break;
if (tlf != null)
tlf.showSupport();
return;
}
tlf.handleOptionsMenuItemSelected(item, customIntent);
}
public MainMenuPopover getMainMenuPopover() {
return mainMenuPopover;
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_MENU) {
if (mainMenuPopover.isShowing())
mainMenuPopover.dismiss();
else
mainMenu.performClick();
}
return super.onKeyDown(keyCode, event);
}
private class TagDeletedReceiver extends BroadcastReceiver {

@ -18,6 +18,7 @@ import android.content.SharedPreferences.Editor;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.database.Cursor;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.v4.app.ActionBar;
import android.support.v4.app.Fragment;
@ -362,11 +363,23 @@ public class TaskListFragment extends ListFragment implements OnScrollListener,
}
protected void addSyncRefreshMenuItem(Menu menu) {
MenuItem item = menu.add(Menu.NONE, MENU_SYNC_ID, Menu.NONE,
R.string.TLA_menu_sync);
item.setIcon(R.drawable.ic_menu_refresh);
if (((AstridActivity) getActivity()).getFragmentLayout() != AstridActivity.LAYOUT_SINGLE)
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
addMenuItem(menu, R.string.TLA_menu_sync, R.drawable.ic_menu_refresh, MENU_SYNC_ID, true);
}
protected void addMenuItem(Menu menu, int title, int imageRes, int id, boolean showAsAction) {
TaskListActivity activity = (TaskListActivity) getActivity();
if (activity.getFragmentLayout() != AstridActivity.LAYOUT_SINGLE && showAsAction) {
MenuItem item = menu.add(Menu.NONE, id, Menu.NONE, title);
item.setIcon(imageRes);
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
} else {
activity.getMainMenuPopover().addMenuItem(title, imageRes, id);
}
}
protected void addMenuItem(CharSequence title, Drawable image, Intent customIntent, int id) {
TaskListActivity activity = (TaskListActivity) getActivity();
activity.getMainMenuPopover().addMenuItem(title, image, customIntent, id);
}
/**
@ -376,47 +389,29 @@ public class TaskListFragment extends ListFragment implements OnScrollListener,
*/
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
if (getActivity() == null)
TaskListActivity activity = (TaskListActivity) getActivity();
if (activity == null)
return;
MenuItem item;
activity.getMainMenuPopover().clear();
// --- sort
if (allowResorting()) {
item = menu.add(Menu.NONE, MENU_SORT_ID, Menu.NONE,
R.string.TLA_menu_sort);
item.setIcon(android.R.drawable.ic_menu_sort_by_size);
if (((AstridActivity) getActivity()).getFragmentLayout() != AstridActivity.LAYOUT_SINGLE)
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
addMenuItem(menu, R.string.TLA_menu_sort, android.R.drawable.ic_menu_sort_by_size, MENU_SORT_ID, true);
}
// --- sync
addSyncRefreshMenuItem(menu);
// --- new filter
item = menu.add(Menu.NONE, MENU_NEW_FILTER_ID, Menu.NONE,
R.string.FLA_new_filter);
item.setIcon(android.R.drawable.ic_menu_add);
if (((AstridActivity) getActivity()).getFragmentLayout() != AstridActivity.LAYOUT_SINGLE)
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
addMenuItem(menu, R.string.FLA_new_filter, android.R.drawable.ic_menu_add, MENU_NEW_FILTER_ID, true);
// --- addons
if (!Constants.MARKET_DISABLED) {
item = menu.add(Menu.NONE, MENU_ADDONS_ID, Menu.NONE,
R.string.TLA_menu_addons);
item.setIcon(android.R.drawable.ic_menu_set_as);
addMenuItem(menu, R.string.TLA_menu_addons, android.R.drawable.ic_menu_set_as, MENU_ADDONS_ID, false);
}
// --- support
item = menu.add(Menu.NONE, MENU_SUPPORT_ID, Menu.NONE,
R.string.TLA_menu_support);
item.setIcon(android.R.drawable.ic_menu_help);
// --- settings
item = menu.add(Menu.NONE, MENU_SETTINGS_ID, Menu.NONE,
R.string.TLA_menu_settings);
item.setIcon(android.R.drawable.ic_menu_preferences);
// ask about plug-ins
Intent queryIntent = new Intent(
AstridApiConstants.ACTION_TASK_LIST_MENU);
@ -427,14 +422,10 @@ public class TaskListFragment extends ListFragment implements OnScrollListener,
int length = resolveInfoList.size();
for (int i = 0; i < length; i++) {
ResolveInfo resolveInfo = resolveInfoList.get(i);
item = menu.add(Menu.NONE, MENU_ADDON_INTENT_ID, Menu.NONE,
resolveInfo.loadLabel(pm));
item.setIcon(resolveInfo.loadIcon(pm));
Intent intent = new Intent(AstridApiConstants.ACTION_TASK_LIST_MENU);
intent.setClassName(resolveInfo.activityInfo.packageName,
resolveInfo.activityInfo.name);
item.setIntent(intent);
addMenuItem(resolveInfo.loadLabel(pm), resolveInfo.loadIcon(pm), intent, MENU_ADDON_INTENT_ID);
}
}
@ -1055,21 +1046,13 @@ public class TaskListFragment extends ListFragment implements OnScrollListener,
return onOptionsItemSelected(item);
}
@Override
public boolean onOptionsItemSelected(final MenuItem item) {
Intent intent;
long itemId;
// handle my own menus
switch (item.getItemId()) {
public boolean handleOptionsMenuItemSelected(int id, Intent intent) {
switch(id) {
case MENU_ADDONS_ID:
StatisticsService.reportEvent(StatisticsConstants.TLA_MENU_ADDONS);
intent = new Intent(getActivity(), AddOnActivity.class);
startActivityForResult(intent, ACTIVITY_ADDONS);
return true;
case MENU_SETTINGS_ID:
showSettings();
return true;
case MENU_SORT_ID:
StatisticsService.reportEvent(StatisticsConstants.TLA_MENU_SORT);
AlertDialog dialog = SortSelectionActivity.createDialog(
@ -1080,11 +1063,7 @@ public class TaskListFragment extends ListFragment implements OnScrollListener,
StatisticsService.reportEvent(StatisticsConstants.TLA_MENU_SYNC);
syncActionHelper.performSyncAction();
return true;
case MENU_SUPPORT_ID:
showSupport();
return true;
case MENU_ADDON_INTENT_ID:
intent = item.getIntent();
AndroidUtilities.startExternalIntent(getActivity(), intent,
ACTIVITY_MENU_EXTERNAL);
return true;
@ -1092,7 +1071,20 @@ public class TaskListFragment extends ListFragment implements OnScrollListener,
intent = new Intent(getActivity(), CustomFilterActivity.class);
getActivity().startActivityForResult(intent, ACTIVITY_REQUEST_NEW_FILTER);
return true;
}
return false;
}
@Override
public boolean onOptionsItemSelected(final MenuItem item) {
Intent intent;
long itemId;
// handle my own menus
if (handleOptionsMenuItemSelected(item.getItemId(), item.getIntent()))
return true;
switch (item.getItemId()) {
// --- context menu items
case CONTEXT_MENU_BROADCAST_INTENT_ID: {

@ -2,6 +2,7 @@ package com.todoroo.astrid.ui;
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
@ -63,18 +64,43 @@ public class MainMenuPopover extends FragmentPopover {
return mRect.centerX() - arrow.getMeasuredWidth() / 2 - (int) (12 * metrics.density);
}
public void addMenuItem(int title, int imageRes, int id, Intent customIntent) {
addMenuItem(title, imageRes, id, customIntent, content);
}
// --- Public interface ---
public void addMenuItem(int title, int imageRes, int id) {
addMenuItem(title, imageRes, id, null, content);
}
private void addMenuItem(int title, int imageRes, final int id, final Intent customIntent, ViewGroup container) {
public void addMenuItem(int title, int imageRes, Intent customIntent, int id) {
addMenuItem(title, imageRes, id, customIntent, content);
}
public void addMenuItem(CharSequence title, Drawable image, Intent customIntent, int id) {
addMenuItem(title, image, id, customIntent, content);
}
public void addSeparator() {
inflater.inflate(R.layout.fla_separator, content);
}
public void clear() {
content.removeAllViews();
}
// --- Private helpers ---
private void addMenuItem(int title, int imageRes, int id, Intent customIntent, ViewGroup container) {
View item = setupItemWithParams(title, imageRes);
container.addView(item);
item.setOnClickListener(new OnClickListener() {
addViewWithListener(item, container, id, customIntent);
}
private void addMenuItem(CharSequence title, Drawable image, int id, Intent customIntent, ViewGroup container) {
View item = setupItemWithParams(title, image);
addViewWithListener(item, container, id, customIntent);
}
private void addViewWithListener(View view, ViewGroup container, final int id, final Intent customIntent) {
container.addView(view);
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
@ -84,19 +110,23 @@ public class MainMenuPopover extends FragmentPopover {
});
}
public void addSeparator() {
inflater.inflate(R.layout.fla_separator, content);
}
private View setupItemWithParams(int title, int imageRes) {
View itemRow = inflater.inflate(R.layout.main_menu_row, null);
public void clear() {
content.removeAllViews();
ImageView image = (ImageView) itemRow.findViewById(R.id.icon);
image.setImageResource(imageRes);
TextView name = (TextView) itemRow.findViewById(R.id.name);
name.setText(title);
return itemRow;
}
private View setupItemWithParams(int title, int imageRes) {
private View setupItemWithParams(CharSequence title, Drawable imageDrawable) {
View itemRow = inflater.inflate(R.layout.main_menu_row, null);
ImageView image = (ImageView) itemRow.findViewById(R.id.icon);
image.setImageResource(imageRes);
image.setImageDrawable(imageDrawable);
TextView name = (TextView) itemRow.findViewById(R.id.name);
name.setText(title);

Loading…
Cancel
Save