From bcc6d44ffa7c8eea23c838dade9ea4b011330a6c Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Fri, 27 Jan 2012 15:40:02 -0800 Subject: [PATCH] Main menu dropdown plus lots of dropdown polish --- astrid/res/drawable/icn_featured_lists.png | Bin 0 -> 2206 bytes astrid/res/drawable/icn_friends.png | Bin 0 -> 2362 bytes astrid/res/drawable/icn_menu_tasks.png | Bin 0 -> 862 bytes astrid/res/drawable/icn_support.png | Bin 0 -> 3095 bytes .../res/layout-land/filter_list_activity.xml | 6 +- .../filter_list_activity.xml | 6 +- .../res/layout-large/filter_list_activity.xml | 6 +- astrid/res/layout/filter_list_activity.xml | 6 +- astrid/res/layout/fla_separator.xml | 5 + astrid/res/layout/header_nav_views.xml | 1 - astrid/res/layout/list_dropdown_popover.xml | 5 +- astrid/res/layout/main_menu_popover.xml | 34 ++++++ astrid/res/layout/main_menu_row.xml | 32 ++++++ astrid/res/values/attrs.xml | 2 + astrid/res/values/strings-core.xml | 12 ++ astrid/res/values/styles.xml | 4 + .../astrid/activity/TaskListActivity.java | 20 +++- .../activity/TaskListWrapperActivity.java | 72 +++++++++++- .../todoroo/astrid/ui/FragmentPopover.java | 10 ++ .../todoroo/astrid/ui/MainMenuPopover.java | 108 ++++++++++++++++++ .../greendroid/widget/QuickActionWidget.java | 8 +- 21 files changed, 309 insertions(+), 28 deletions(-) create mode 100644 astrid/res/drawable/icn_featured_lists.png create mode 100644 astrid/res/drawable/icn_friends.png create mode 100644 astrid/res/drawable/icn_menu_tasks.png create mode 100644 astrid/res/drawable/icn_support.png create mode 100644 astrid/res/layout/fla_separator.xml create mode 100644 astrid/res/layout/main_menu_popover.xml create mode 100644 astrid/res/layout/main_menu_row.xml create mode 100644 astrid/src/com/todoroo/astrid/ui/MainMenuPopover.java diff --git a/astrid/res/drawable/icn_featured_lists.png b/astrid/res/drawable/icn_featured_lists.png new file mode 100644 index 0000000000000000000000000000000000000000..e2e8f5916438d4737f8aaef83560528c75ce626c GIT binary patch literal 2206 zcmaJ@X;f3^77Y{-G%|^RRN)e_SS*=QRZWRxO`8A9YqL`be72B{KBAv6rO$zLVq@{&OX5Dz8_#D0kJhARj_ z!1qJ2a7;8)N&%Aufod5Tq23zFQz!EXe1!jIV3Udn5r{wq7f^{(#B!p_5AlYV2(1mr zCb_VL7^i8vo3 z8Uwr=2q>G3pFj+!(%nY>cTLcRp;TNc3WG!&N?HtL zGXH<5Nc28ht_TPJ*84$Xd1Sg2M1_NL$!-}BYFxrvLnmB2GtJ%aUcZ(K9LrHCJ=nF7_=`1kHOF| zz7(1-4MV39D86{QZvcJ~OO^0;i$Jkr5zGG@i~T6pUdF_7PUe^V?SczDNJH;z)hifsBmeq_4#n0MF(l;-KK8 zck0&fG_M6L5y;q_du;{vNj}Xfm8rtVX)mEI7N^Lw}P!svyJ!-=J=VjrWCKYayGNN-{bbAdWWMaY>n$Jf(AYtN474a zBAP}!%btG?SYo9a$N8^NA5qDm+QbitG#we7!Nnrp_YKrv+}* z)RZ;UH7fhoyP@nyukaH`tO$%;j@ReMzK}2Z=H@43^Yin?H8oSm`}+D^?$6UM(ua48 zZqmBHJ8?oE#b!^xoSqg3;FsPJh%PoX%sDtezR}s4JJsFXcy3nt<(GHK9K4Uuf_F$# zLj0C3TONo0er?Q2m^tu=jL_cRzTip}rldTXnVy~=3Hj`>dFxCNg9K`Juvq?GLMPUS zZILmd+NEau+oi~|IT?-C`cNA<7Svf-SUBn6;E)QpE%m^~#Kxvr9%wn00J)g?U~q7- zryplM_`I^ZdNNs&XRIl6t8-y|`qP>kuWJd3iC0eXFPQ)~aO>9Sr8r>UYLf9Q_Jz}@ zTd_FYOA-6JuC1+21Id|HtJTj&&4GM#(+sDx*F$hG z;f;+f7VC#JrP99@?b>An#6(1_4TwLtef##k!t+tjl0}^E>{aI{CnxJKUcA^&p-^1H z&_=_sRtJ0g%@tKuuaPUPTf)6w6ep@wDu_IA3BV}j8D5jCBCbGK_9Lp1*P925Z-@UE4U~sHTQv$B&o$;PHAA1B{Q4UpLN8OH0E?$HZ({ZF!*T z+@amd#)u+wba+wyFjY-BO@a{uNJTa%X)%@zuoM87P52a0MD~xC%RJGo1fM5 zaPHHw(0!x65scvnT2d={-NHR7p`@~e};h;^< z8e?N(_kME8k?v*prjk4yUAK|$${X&qzkdBXO?apmIQlz-KPf3{I(3wjRM5!(YM{S= z=4w}09?BxeWq;N=#5Nr)D|xy?f%Co)i|ohnt4_NCFPf2OoY=Z1Qn_hwc8#;fyLY_g z%)SZ5Kni{ia`9=p^`CT^+3Kfy)&ri!4*kHP!jP)3I`kO{)}9(8u#(hTvAXAx38g$v zU7dU=$G*t7)+C`Ldh-xrUtXTN;(MEp-Du3p9A}-Tk$R@t@sdR#(b0BgcKXzXAWeH> z=k&4%K1PhA*8}+-r9NBTYk_iWt&h65zyk}vy-}^dHF3pZWl_v!Wura2&jb1p-Q88x aZw!Z#q}_YV_>*+Q9|ME7m3lUSllfoMA(S!z literal 0 HcmV?d00001 diff --git a/astrid/res/drawable/icn_friends.png b/astrid/res/drawable/icn_friends.png new file mode 100644 index 0000000000000000000000000000000000000000..031f0683926c546532b518af81ab489f7db07bb8 GIT binary patch literal 2362 zcmV-A3B~q_P){?rF6lE0Nx$ULxZt0e?^rDCg1%Z@^s0k`YA5av75gHX06N$c<@Jf78U-Zeu z_@EC26EzBn#zfIX<*HzUHxvazEvU#vOSjwY?sjK(W_D&gXZHNYpSC-MGo;oB{zpcp^Z;%-h2!EI0vL2M6R`Gh*RJVm>i$1^tt=)S@Qr~+CZ8> ze6`k9oZu$wLFSKh+nv?CdvRyyD!8%=iXq8SaCag zHo3I|R%@Ez@s8o^yJOX=Sx|W{%fn8qi0wn%WHJ?ge%rP@>`KUxs|X9c3ZRUb$z9G(T@e?P%u7-&77cMXYai?}qZ*M;{ z!l*cT*gyPq>@0_^RI=8z z_uuaWL-aGt7sEby=ujVzT}dxh4H5fu!7Dh0D9}QmJ@V~$L$rYrf$({)5`fh3aO}mG zUOq<8TOc}!0lDD-kWmyHLaFEMxpSF9?3xh)o7xY`ID#lT?o}9l#dk-K9^+F9iF2vH z|7{w+l(qIAIIy1!3xhgPJvJEIm%|nadz6l^j~qG1J!6s7jtDpkv7|jNNundmk}U!u z?6Y@v?&{$bF=-Rl;u}}QA*Oeii}BXG@A2M{q4L^Ty7J~raQ$79BnJerr4j5`Uw@;A z3nhka*XsDpJtQItvMtMsg$gmtaITqUR%Die^<_El9vFz7|LXAJ80QUXMg(pQJTZ;f z3J8zQc>|Aam)m<(L()g$Y~~S@H=&|#6Xyd<+3}gH z?lc)nTfeHNy;x7s5$j}hy(f`K?pfE}{V|dOMA+~Qw&MrOsUMcywDJ`q@zOinx3}GO z=jtU54Go?6ZicNwkC93xeNbJF!3LeaxPRkD48;s!mlYcF|2ojH9kD7RNPjD2t)hE!SBxna?w;HK{GuGP2QHov2zLkR=|My`a& z6;+69x!71>+|`ue!pL+s|(Bp5|G$=b#@0+@1)uMZ%)fRAOP<9D5sHxT2y3-@0#E@UKr{_g!bS%Ub%`m4 zb$&qw>Inqul;-B0+CN?To=@iQMP)X1!jo zrFaz!^!?=8B};d(qqQ((iV?Ak8W#`SyaAgxK>^&nNdkHb#lixt7y>J{f)yvye&;PH zq@t-*>LRqV)d;C4RPd}}ZmYyk^MwVsG0$&pCpx|Ws}E1gac z#$tngnx?Ak2rW%WZic~4#ItnFj#Qs=iDXIh2Hj1H$ZEl<5Jv0MTye@5l8)q~U~-K{ z2f#}baqI;Jq2wv(q1K$uRfh412Cs07F0sTztkrcxf&Z+jsi~#4wRPdYMMAM5Z+m;& z!Z~vy9XY+n9;pR6QDP$kK1Y^3*d6zU`EP{tydGWCGYwaBbGW^}zOFGht#ZbMagmBT zuT3u&8Yj>b)QlDwjK@PzHTqa`T;A2S+B1z8subuIZv8>UI z&r6BrYMTGaUCWj=9NP26hn{J^R^EQcGrecd#JPT>FiRh$=D7kEPP^%3kmzJ!b%RP>tVVrI-h{hU#m73oL3&u|Xm2095{R%JTO<;2lS!%@ zEY83Vk&@xN(=kM#o8XZ`ti@Sk>0Gd2=t>|0w#ky9MI;PRhaYFkYP&LgD)h2$EB~B+E`Uj#aU!8NI;1rON*L+p<{UCjXhTlbA1A?(Q zo5tqTZJFc=Cn+h8JC~5Fa=x5vv7xF}4XHH?j8P(tN(Q)cl_X$!+D~pLO+$}h`9Uj} zjEb#@|9?Q?5umUTrXdjyc}1G)1bebQfwig{ gSu^W@u>KKX0MMeI$|De`ng9R*07*qoM6N<$g6+_1XaE2J literal 0 HcmV?d00001 diff --git a/astrid/res/drawable/icn_menu_tasks.png b/astrid/res/drawable/icn_menu_tasks.png new file mode 100644 index 0000000000000000000000000000000000000000..6e5c25d1c265a1f8282850ab92896fa0ff92b666 GIT binary patch literal 862 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 l-+i#rmC}c|z`F*3;{f4#Nqr+sg~ - + + - + + - + + - + + + \ No newline at end of file diff --git a/astrid/res/layout/header_nav_views.xml b/astrid/res/layout/header_nav_views.xml index 1395ea4c7..d496af38d 100644 --- a/astrid/res/layout/header_nav_views.xml +++ b/astrid/res/layout/header_nav_views.xml @@ -9,7 +9,6 @@ android:layout_width="51dip" android:padding="10dip" android:layout_height="fill_parent" - android:layout_marginLeft="3dip" android:src="@drawable/menu" android:scaleType="fitCenter"/> diff --git a/astrid/res/layout/list_dropdown_popover.xml b/astrid/res/layout/list_dropdown_popover.xml index 429e66e78..3b595ee2b 100644 --- a/astrid/res/layout/list_dropdown_popover.xml +++ b/astrid/res/layout/list_dropdown_popover.xml @@ -2,11 +2,12 @@ + android:layout_height="wrap_content" + android:paddingLeft="10dip"> diff --git a/astrid/res/layout/main_menu_popover.xml b/astrid/res/layout/main_menu_popover.xml new file mode 100644 index 000000000..8fd5b62a2 --- /dev/null +++ b/astrid/res/layout/main_menu_popover.xml @@ -0,0 +1,34 @@ + + + + + + + + + + diff --git a/astrid/res/layout/main_menu_row.xml b/astrid/res/layout/main_menu_row.xml new file mode 100644 index 000000000..280639daa --- /dev/null +++ b/astrid/res/layout/main_menu_row.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + diff --git a/astrid/res/values/attrs.xml b/astrid/res/values/attrs.xml index cb5186cf8..7ddbbd62d 100644 --- a/astrid/res/values/attrs.xml +++ b/astrid/res/values/attrs.xml @@ -24,6 +24,8 @@ + + diff --git a/astrid/res/values/strings-core.xml b/astrid/res/values/strings-core.xml index d6e3c0975..368e2e072 100644 --- a/astrid/res/values/strings-core.xml +++ b/astrid/res/values/strings-core.xml @@ -102,6 +102,18 @@ Sync Now! + + Tasks + + + Friends + + + Suggestions + + + Tutorial + Settings diff --git a/astrid/res/values/styles.xml b/astrid/res/values/styles.xml index 7c7526f82..63362972a 100644 --- a/astrid/res/values/styles.xml +++ b/astrid/res/values/styles.xml @@ -26,6 +26,8 @@ #171317 @drawable/task_edit_background @drawable/custom_tab_indicator_dark + @drawable/menu + @drawable/menu @drawable/header_background useLogo|showHome|showTitle @@ -76,6 +78,8 @@ @drawable/lists_disclosure_red @drawable/task_edit_background_white @drawable/custom_tab_indicator + @drawable/menu + @drawable/menu @android:color/white useLogo|showHome|showTitle diff --git a/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java b/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java index 0f9437427..ac18cf0bf 100644 --- a/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java +++ b/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java @@ -1308,9 +1308,7 @@ public class TaskListActivity extends ListFragment implements OnScrollListener, startActivityForResult(intent, ACTIVITY_ADDONS); return true; case MENU_SETTINGS_ID: - StatisticsService.reportEvent(StatisticsConstants.TLA_MENU_SETTINGS); - intent = new Intent(getActivity(), EditPreferences.class); - startActivityForResult(intent, ACTIVITY_SETTINGS); + showSettings(); return true; case MENU_SORT_ID: StatisticsService.reportEvent(StatisticsConstants.TLA_MENU_SORT); @@ -1323,9 +1321,7 @@ public class TaskListActivity extends ListFragment implements OnScrollListener, performSyncAction(); return true; case MENU_SUPPORT_ID: - StatisticsService.reportEvent(StatisticsConstants.TLA_MENU_HELP); - intent = new Intent(getActivity(), FeedbackActivity.class); - startActivity(intent); + showSupport(); return true; case MENU_ADDON_INTENT_ID: intent = item.getIntent(); @@ -1412,6 +1408,18 @@ public class TaskListActivity extends ListFragment implements OnScrollListener, } } + public void showSupport() { + StatisticsService.reportEvent(StatisticsConstants.TLA_MENU_HELP); + Intent intent = new Intent(getActivity(), FeedbackActivity.class); + startActivity(intent); + } + + public void showSettings() { + StatisticsService.reportEvent(StatisticsConstants.TLA_MENU_SETTINGS); + Intent intent = new Intent(getActivity(), EditPreferences.class); + startActivityForResult(intent, ACTIVITY_SETTINGS); + } + public void onTaskListItemClicked(long taskId) { mListener.onTaskListItemClicked(taskId); } diff --git a/astrid/src/com/todoroo/astrid/activity/TaskListWrapperActivity.java b/astrid/src/com/todoroo/astrid/activity/TaskListWrapperActivity.java index 525f94b1f..c903da63c 100644 --- a/astrid/src/com/todoroo/astrid/activity/TaskListWrapperActivity.java +++ b/astrid/src/com/todoroo/astrid/activity/TaskListWrapperActivity.java @@ -19,22 +19,36 @@ import android.widget.TextView; import com.timsu.astrid.R; import com.todoroo.andlib.utility.AndroidUtilities; +import com.todoroo.astrid.actfm.ActFmLoginActivity; import com.todoroo.astrid.actfm.TagSettingsActivity; import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.FilterListItem; import com.todoroo.astrid.service.ThemeService; import com.todoroo.astrid.ui.FragmentPopover; +import com.todoroo.astrid.ui.MainMenuPopover; +import com.todoroo.astrid.ui.MainMenuPopover.MainMenuListener; import com.todoroo.astrid.utility.Flags; +import com.todoroo.astrid.welcome.tutorial.WelcomeWalkthrough; -public class TaskListWrapperActivity extends AstridWrapperActivity { +public class TaskListWrapperActivity extends AstridWrapperActivity implements MainMenuListener { public static final String TOKEN_SELECTED_FILTER = "selectedFilter"; private View listsNav; private ImageView listsNavDisclosure; private TextView lists; + private ImageView mainMenu; private FragmentPopover listsPopover; private FragmentPopover editPopover; + private MainMenuPopover mainMenuPopover; + + private final OnClickListener mainMenuClickListener = new OnClickListener() { + @Override + public void onClick(View v) { + setMainMenuSelected(true); + mainMenuPopover.show(v); + } + }; private final OnClickListener popupMenuClickListener = new OnClickListener() { @Override @@ -76,8 +90,11 @@ public class TaskListWrapperActivity extends AstridWrapperActivity { listsNav = actionBar.getCustomView().findViewById(R.id.lists_nav); listsNavDisclosure = (ImageView) actionBar.getCustomView().findViewById(R.id.list_disclosure_arrow); lists = (TextView) actionBar.getCustomView().findViewById(R.id.list_title); + mainMenu = (ImageView) actionBar.getCustomView().findViewById(R.id.main_menu); initializeFragments(actionBar); + createMainMenuPopover(); + mainMenu.setOnClickListener(mainMenuClickListener); } /** @@ -136,6 +153,17 @@ public class TaskListWrapperActivity extends AstridWrapperActivity { }); } + private void createMainMenuPopover() { + mainMenuPopover = new MainMenuPopover(this, R.layout.main_menu_popover); + mainMenuPopover.setMenuListener(this); + mainMenuPopover.setOnDismissListener(new OnDismissListener() { + @Override + public void onDismiss() { + setMainMenuSelected(false); + } + }); + } + private void setupPopoverWithFragment(FragmentPopover popover, Fragment frag, LayoutParams params) { if (popover != null) { View view = frag.getView(); @@ -183,6 +211,16 @@ public class TaskListWrapperActivity extends AstridWrapperActivity { listsNavDisclosure.setImageResource(selected ? R.drawable.lists_disclosure_white : tv.data); } + private void setMainMenuSelected(boolean selected) { + TypedValue onImage = new TypedValue(); + TypedValue offImage = new TypedValue(); + + getTheme().resolveAttribute(R.attr.asMainMenuOn, onImage, false); + getTheme().resolveAttribute(R.attr.asMainMenuOff, offImage, false); + + mainMenu.setImageResource(selected ? onImage.data : offImage.data); + } + @Override protected void onPostResume() { super.onPostResume(); @@ -207,6 +245,8 @@ public class TaskListWrapperActivity extends AstridWrapperActivity { listsPopover.dismiss(); if (editPopover != null) editPopover.dismiss(); + if (mainMenuPopover != null) + mainMenuPopover.dismiss(); } public void setSelectedItem(Filter item) { @@ -255,4 +295,34 @@ public class TaskListWrapperActivity extends AstridWrapperActivity { super.onActivityResult(requestCode, resultCode, data); } + + @Override + public void mainMenuItemSelected(int item) { + TaskListActivity tla = getTaskListFragment(); + switch (item) { + case MainMenuPopover.MAIN_MENU_ITEM_TASKS: + // Do nothing + break; + case MainMenuPopover.MAIN_MENU_ITEM_FRIENDS: + // Doesn't exist yet + break; + case MainMenuPopover.MAIN_MENU_ITEM_SUGGESTIONS: + // Doesn't exist yet + break; + 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; + case MainMenuPopover.MAIN_MENU_ITEM_SETTINGS: + if (tla != null) + tla.showSettings(); + break; + case MainMenuPopover.MAIN_MENU_ITEM_SUPPORT: + if (tla != null) + tla.showSupport(); + break; + } + } } diff --git a/astrid/src/com/todoroo/astrid/ui/FragmentPopover.java b/astrid/src/com/todoroo/astrid/ui/FragmentPopover.java index d9e072726..19eab97bd 100644 --- a/astrid/src/com/todoroo/astrid/ui/FragmentPopover.java +++ b/astrid/src/com/todoroo/astrid/ui/FragmentPopover.java @@ -7,6 +7,7 @@ import java.util.List; import android.content.Context; import android.graphics.Rect; +import android.util.DisplayMetrics; import android.view.View; import android.view.View.MeasureSpec; import android.view.ViewGroup; @@ -18,10 +19,14 @@ import com.timsu.astrid.R; public class FragmentPopover extends QuickActionWidget { + protected DisplayMetrics metrics; + public FragmentPopover(Context context, int layout) { super(context); setContentView(layout); + metrics = context.getResources().getDisplayMetrics(); + setFocusable(true); setTouchable(true); } @@ -58,4 +63,9 @@ public class FragmentPopover extends QuickActionWidget { setWidgetSpecs(popupY, onTop); } + + @Override + protected int getArrowLeftMargin(View arrow) { + return mRect.left + arrow.getMeasuredWidth() / 2 - (int) (10 * metrics.density); + } } diff --git a/astrid/src/com/todoroo/astrid/ui/MainMenuPopover.java b/astrid/src/com/todoroo/astrid/ui/MainMenuPopover.java new file mode 100644 index 000000000..a8a6c199f --- /dev/null +++ b/astrid/src/com/todoroo/astrid/ui/MainMenuPopover.java @@ -0,0 +1,108 @@ +package com.todoroo.astrid.ui; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.timsu.astrid.R; + +public class MainMenuPopover extends FragmentPopover { + + public static final int MAIN_MENU_ITEM_TASKS = 1; + public static final int MAIN_MENU_ITEM_FRIENDS = 2; + public static final int MAIN_MENU_ITEM_SUGGESTIONS = 3; + public static final int MAIN_MENU_ITEM_TUTORIAL = 4; + public static final int MAIN_MENU_ITEM_SETTINGS = 5; + public static final int MAIN_MENU_ITEM_SUPPORT = 6; + + public interface MainMenuListener { + public void mainMenuItemSelected(int item); + } + + private MainMenuListener mListener; + private final LayoutInflater inflater; + private final LinearLayout content; + + public void setMenuListener(MainMenuListener listener) { + this.mListener = listener; + } + + public MainMenuPopover(Context context, int layout) { + super(context, layout); + + inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + + content = (LinearLayout) getContentView().findViewById(R.id.content); + addTasksItem(); + addFriendsItem(); + addSuggestionsItem(); + addTutorialItem(); + + addSeparator(); + + addSettingsItem(); + addSupportItem(); + } + + @Override + protected int getArrowLeftMargin(View arrow) { + return mRect.centerX() - arrow.getMeasuredWidth() / 2 - (int) (12 * metrics.density); + } + + private void addMenuItem(int title, int imageRes, final int menuItemOption) { + View item = setupItemWithParams(title, imageRes); + content.addView(item); + item.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + dismiss(); + if (mListener != null) + mListener.mainMenuItemSelected(menuItemOption); + } + }); + } + + private void addSeparator() { + inflater.inflate(R.layout.fla_separator, content); + } + + private void addTasksItem() { + addMenuItem(R.string.TLA_menu_tasks, R.drawable.icn_menu_tasks, MAIN_MENU_ITEM_TASKS); + } + + private void addFriendsItem() { + //addMenuItem(R.string.TLA_menu_friends, R.drawable.icn_friends, MAIN_MENU_ITEM_FRIENDS); + } + + private void addSuggestionsItem() { + //addMenuItem(R.string.TLA_menu_suggestions, R.drawable.icn_featured_lists, MAIN_MENU_ITEM_SUGGESTIONS); + } + + private void addTutorialItem() { + addMenuItem(R.string.TLA_menu_tutorial, 0, MAIN_MENU_ITEM_TUTORIAL); + } + + private void addSettingsItem() { + addMenuItem(R.string.TLA_menu_settings, R.drawable.icn_settings, MAIN_MENU_ITEM_SETTINGS); + } + + private void addSupportItem() { + addMenuItem(R.string.TLA_menu_support, R.drawable.icn_support, MAIN_MENU_ITEM_SUPPORT); + } + + private View setupItemWithParams(int title, int imageRes) { + View itemRow = inflater.inflate(R.layout.main_menu_row, null); + + ImageView image = (ImageView) itemRow.findViewById(R.id.icon); + image.setImageResource(imageRes); + + TextView name = (TextView) itemRow.findViewById(R.id.name); + name.setText(title); + + return itemRow; + } +} diff --git a/greendroid/GreenDroid/src/greendroid/widget/QuickActionWidget.java b/greendroid/GreenDroid/src/greendroid/widget/QuickActionWidget.java index 9c190119f..338058384 100644 --- a/greendroid/GreenDroid/src/greendroid/widget/QuickActionWidget.java +++ b/greendroid/GreenDroid/src/greendroid/widget/QuickActionWidget.java @@ -46,7 +46,7 @@ public abstract class QuickActionWidget extends PopupWindow { private static final int MEASURE_AND_LAYOUT_DONE = 1 << 1; private final int[] mLocation = new int[2]; - private final Rect mRect = new Rect(); + protected final Rect mRect = new Rect(); private int mPrivateFlags; @@ -287,7 +287,11 @@ public abstract class QuickActionWidget extends PopupWindow { } ViewGroup.MarginLayoutParams param = (ViewGroup.MarginLayoutParams) arrow.getLayoutParams(); - param.leftMargin = mRect.centerX() - (arrow.getMeasuredWidth()) / 2; + param.leftMargin = getArrowLeftMargin(arrow); + } + + protected int getArrowLeftMargin(View arrow) { + return mRect.centerX() - (arrow.getMeasuredWidth()) / 2; } private void prepareAnimationStyle() {