diff --git a/astrid/res/drawable/icn_featured_lists.png b/astrid/res/drawable/icn_featured_lists.png
new file mode 100644
index 000000000..e2e8f5916
Binary files /dev/null and b/astrid/res/drawable/icn_featured_lists.png differ
diff --git a/astrid/res/drawable/icn_friends.png b/astrid/res/drawable/icn_friends.png
new file mode 100644
index 000000000..031f06839
Binary files /dev/null and b/astrid/res/drawable/icn_friends.png differ
diff --git a/astrid/res/drawable/icn_menu_tasks.png b/astrid/res/drawable/icn_menu_tasks.png
new file mode 100644
index 000000000..6e5c25d1c
Binary files /dev/null and b/astrid/res/drawable/icn_menu_tasks.png differ
diff --git a/astrid/res/drawable/icn_support.png b/astrid/res/drawable/icn_support.png
new file mode 100644
index 000000000..88597543c
Binary files /dev/null and b/astrid/res/drawable/icn_support.png differ
diff --git a/astrid/res/layout-land/filter_list_activity.xml b/astrid/res/layout-land/filter_list_activity.xml
index 31c791355..e06640db0 100644
--- a/astrid/res/layout-land/filter_list_activity.xml
+++ b/astrid/res/layout-land/filter_list_activity.xml
@@ -23,10 +23,8 @@
android:layout_height="50dip"
android:orientation="vertical"
android:layout_alignParentBottom="true">
-
+
+
-
+
+
-
+
+
-
+
+
+
\ 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() {