Main menu dropdown plus lots of dropdown polish

pull/14/head
Sam Bosley 13 years ago
parent 41248be823
commit bcc6d44ffa

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 862 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

@ -23,10 +23,8 @@
android:layout_height="50dip"
android:orientation="vertical"
android:layout_alignParentBottom="true">
<View
android:layout_width="fill_parent"
android:layout_height="1px"
style="@style/FLA_Separator"/>
<include layout="@layout/fla_separator"/>
<TextView
android:id="@+id/new_list_button"

@ -12,10 +12,8 @@
android:layout_height="50dip"
android:orientation="vertical"
android:layout_alignParentBottom="true">
<View
android:layout_width="fill_parent"
android:layout_height="1px"
style="@style/FLA_Separator"/>
<include layout="@layout/fla_separator"/>
<TextView
android:id="@+id/new_list_button"

@ -12,10 +12,8 @@
android:layout_height="50dip"
android:orientation="vertical"
android:layout_alignParentBottom="true">
<View
android:layout_width="fill_parent"
android:layout_height="1px"
style="@style/FLA_Separator"/>
<include layout="@layout/fla_separator"/>
<TextView
android:id="@+id/new_list_button"

@ -23,10 +23,8 @@
android:layout_height="50dip"
android:orientation="vertical"
android:layout_alignParentBottom="true">
<View
android:layout_width="fill_parent"
android:layout_height="1px"
style="@style/FLA_Separator"/>
<include layout="@layout/fla_separator"/>
<TextView
android:id="@+id/new_list_button"

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<View xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="1px"
style="@style/FLA_Separator"/>

@ -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"/>

@ -2,11 +2,12 @@
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
android:layout_height="wrap_content"
android:paddingLeft="10dip">
<FrameLayout
android:id="@+id/content"
android:layout_width="wrap_content"
android:layout_width="280dip"
android:layout_height="wrap_content"
android:layout_below="@+id/gdi_arrow_up"/>

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="10dip">
<LinearLayout
android:id="@+id/content"
android:layout_width="280dip"
android:layout_height="wrap_content"
android:background="@drawable/list_popover_bg"
android:orientation="vertical"
android:layout_below="@+id/gdi_arrow_up"/>
<ImageView
android:id="@+id/gdi_arrow_up"
android:layout_width="27dip"
android:layout_height="27dip"
android:layout_marginLeft="-10dip"
android:scaleType="fitCenter"
android:layout_marginBottom="-8dip"
android:src="@drawable/list_arrow_up" />
<ImageView
android:id="@+id/gdi_arrow_down"
android:layout_width="27dip"
android:layout_height="27dip"
android:scaleType="fitCenter"
android:layout_marginBottom="-8dip"
android:layout_below="@android:id/list"
android:src="@drawable/list_arrow_down" />
</RelativeLayout>

@ -0,0 +1,32 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- See the file "LICENSE" for the full license governing this code. -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="60dip"
android:minHeight="60dip"
android:background="@android:drawable/list_selector_background"
android:paddingTop="5dip"
android:paddingBottom="5dip"
android:paddingRight="6dip"
android:gravity="center_vertical"
android:orientation="horizontal">
<!-- filter icon -->
<ImageView android:id="@+id/icon"
android:layout_width="36dip"
android:layout_height="36dip"
android:layout_alignParentLeft="true"
android:layout_marginLeft="12dip"
android:scaleType="fitCenter"/>
<!-- filter name -->
<TextView android:id="@+id/name"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginLeft="12dp"
android:paddingRight="30dp"
android:checked="false"
android:gravity="center_vertical"
style="@style/TextAppearance.FLA_Filter"/>
</LinearLayout>

@ -24,6 +24,8 @@
<attr name="asMicButtonImg" format="reference" />
<attr name="asCameraButtonImg" format="reference" />
<attr name="asListsDisclosure" format="reference" />
<attr name="asMainMenuOn" format="reference" />
<attr name="asMainMenuOff" format="reference" />
<declare-styleable name="ContactsAutoComplete">
<attr name="allowMultiple" format="boolean"/>

@ -102,6 +102,18 @@
<!-- Menu: Sync Now -->
<string name="TLA_menu_sync">Sync Now!</string>
<!-- Menu: Tasks -->
<string name="TLA_menu_tasks">Tasks</string>
<!-- Menu: Friends -->
<string name="TLA_menu_friends">Friends</string>
<!-- Menu: Suggestions -->
<string name="TLA_menu_suggestions">Suggestions</string>
<!-- Menu: Tutorial -->
<string name="TLA_menu_tutorial">Tutorial</string>
<!-- Menu: Settings -->
<string name="TLA_menu_settings">Settings</string>

@ -26,6 +26,8 @@
<item name="asEditBackground">#171317</item>
<item name="asEditRowBackground">@drawable/task_edit_background</item>
<item name="asEditTabBackground">@drawable/custom_tab_indicator_dark</item>
<item name="asMainMenuOn">@drawable/menu</item>
<item name="asMainMenuOff">@drawable/menu</item>
<!-- actionbar-styling -->
<item name="abBackground">@drawable/header_background</item>
<item name="abDisplayOptions">useLogo|showHome|showTitle</item>
@ -76,6 +78,8 @@
<item name="asListsDisclosure">@drawable/lists_disclosure_red</item>
<item name="asEditRowBackground">@drawable/task_edit_background_white</item>
<item name="asEditTabBackground">@drawable/custom_tab_indicator</item>
<item name="asMainMenuOn">@drawable/menu</item>
<item name="asMainMenuOff">@drawable/menu</item>
<!-- actionbar-styling -->
<item name="abBackground">@android:color/white</item>
<item name="abDisplayOptions">useLogo|showHome|showTitle</item>

@ -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);
}

@ -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;
}
}
}

@ -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);
}
}

@ -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;
}
}

@ -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() {

Loading…
Cancel
Save