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 @Override
protected void addSyncRefreshMenuItem(Menu menu) { protected void addSyncRefreshMenuItem(Menu menu) {
if(actFmPreferenceService.isLoggedIn()) { if(actFmPreferenceService.isLoggedIn()) {
MenuItem item = menu.add(Menu.NONE, MENU_REFRESH_ID, Menu.NONE, addMenuItem(menu, R.string.actfm_TVA_menu_refresh, R.drawable.ic_menu_refresh, MENU_REFRESH_ID, false);
R.string.actfm_TVA_menu_refresh);
item.setIcon(R.drawable.ic_menu_refresh);
} else { } else {
super.addSyncRefreshMenuItem(menu); super.addSyncRefreshMenuItem(menu);
} }

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

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

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

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

@ -2,6 +2,7 @@ package com.todoroo.astrid.ui;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.View.OnClickListener; import android.view.View.OnClickListener;
@ -63,25 +64,18 @@ public class MainMenuPopover extends FragmentPopover {
return mRect.centerX() - arrow.getMeasuredWidth() / 2 - (int) (12 * metrics.density); 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) { public void addMenuItem(int title, int imageRes, int id) {
addMenuItem(title, imageRes, id, null, content); 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) {
View item = setupItemWithParams(title, imageRes); addMenuItem(title, imageRes, id, customIntent, content);
container.addView(item);
item.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
if (mListener != null)
mListener.mainMenuItemSelected(id, customIntent);
} }
});
public void addMenuItem(CharSequence title, Drawable image, Intent customIntent, int id) {
addMenuItem(title, image, id, customIntent, content);
} }
public void addSeparator() { public void addSeparator() {
@ -92,6 +86,30 @@ public class MainMenuPopover extends FragmentPopover {
content.removeAllViews(); content.removeAllViews();
} }
// --- Private helpers ---
private void addMenuItem(int title, int imageRes, int id, Intent customIntent, ViewGroup container) {
View item = setupItemWithParams(title, imageRes);
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();
if (mListener != null)
mListener.mainMenuItemSelected(id, customIntent);
}
});
}
private View setupItemWithParams(int title, int imageRes) { private View setupItemWithParams(int title, int imageRes) {
View itemRow = inflater.inflate(R.layout.main_menu_row, null); View itemRow = inflater.inflate(R.layout.main_menu_row, null);
@ -103,4 +121,16 @@ public class MainMenuPopover extends FragmentPopover {
return itemRow; return itemRow;
} }
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.setImageDrawable(imageDrawable);
TextView name = (TextView) itemRow.findViewById(R.id.name);
name.setText(title);
return itemRow;
}
} }

Loading…
Cancel
Save