Nestable view pager is pretty cool

pull/14/head
Tim Su 13 years ago
parent 493ea204c9
commit 198dd3e8cf

@ -106,7 +106,7 @@
android:layout_weight="1" android:layout_weight="1"
android:visibility="gone" /> android:visibility="gone" />
<android.support.v4.view.ViewPager <com.todoroo.astrid.ui.NestableViewPager
android:id="@+id/pager" android:id="@+id/pager"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" /> android:layout_height="wrap_content" />

@ -95,6 +95,7 @@ import com.todoroo.astrid.ui.EditNotesControlSet;
import com.todoroo.astrid.ui.EditTitleControlSet; import com.todoroo.astrid.ui.EditTitleControlSet;
import com.todoroo.astrid.ui.HideUntilControlSet; import com.todoroo.astrid.ui.HideUntilControlSet;
import com.todoroo.astrid.ui.ImportanceControlSet; import com.todoroo.astrid.ui.ImportanceControlSet;
import com.todoroo.astrid.ui.NestableViewPager;
import com.todoroo.astrid.ui.ReminderControlSet; import com.todoroo.astrid.ui.ReminderControlSet;
import com.todoroo.astrid.ui.TaskEditMoreControls; import com.todoroo.astrid.ui.TaskEditMoreControls;
import com.todoroo.astrid.ui.WebServicesView; import com.todoroo.astrid.ui.WebServicesView;
@ -205,7 +206,7 @@ public final class TaskEditFragment extends Fragment implements
private EditText title; private EditText title;
private TaskEditMoreControls moreControls; private TaskEditMoreControls moreControls;
private EditNoteActivity editNotes; private EditNoteActivity editNotes;
private ViewPager mPager; private NestableViewPager mPager;
private TaskEditViewPager mAdapter; private TaskEditViewPager mAdapter;
private TabPageIndicator mIndicator; private TabPageIndicator mIndicator;
@ -425,8 +426,9 @@ public final class TaskEditFragment extends Fragment implements
mAdapter = new TaskEditViewPager(getActivity(), tabStyle); mAdapter = new TaskEditViewPager(getActivity(), tabStyle);
mAdapter.parent = this; mAdapter.parent = this;
mPager = (ViewPager) getView().findViewById(R.id.pager); mPager = (NestableViewPager) getView().findViewById(R.id.pager);
mPager.setAdapter(mAdapter); mPager.setAdapter(mAdapter);
mPager.setScrollabelViews(webServices.getScrollableViews());
mIndicator = (TabPageIndicator) getView().findViewById( mIndicator = (TabPageIndicator) getView().findViewById(
R.id.indicator); R.id.indicator);

@ -0,0 +1,29 @@
package com.todoroo.astrid.ui;
import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewParent;
public class NestableViewPager extends ViewPager {
private int[] scrollableViews = new int[0];
public NestableViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
for(int i = 0; i < scrollableViews.length; i++) {
View view = findViewById(scrollableViews[i]);
if (view instanceof ViewParent)
((ViewParent)view).requestDisallowInterceptTouchEvent(true);
}
return super.onInterceptTouchEvent(event);
}
public void setScrollabelViews(int[] views) {
this.scrollableViews = views;
}
}

@ -36,7 +36,6 @@ import com.timsu.astrid.R;
import com.todoroo.andlib.service.Autowired; import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.DependencyInjectionService; import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.andlib.service.ExceptionService; import com.todoroo.andlib.service.ExceptionService;
import com.todoroo.andlib.service.HttpErrorException;
import com.todoroo.andlib.service.RestClient; import com.todoroo.andlib.service.RestClient;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.helper.AmazonRequestsHelper; import com.todoroo.astrid.helper.AmazonRequestsHelper;
@ -50,6 +49,9 @@ public class WebServicesView extends LinearLayout {
private static final int ROW_HEIGHT = 100; private static final int ROW_HEIGHT = 100;
private static final int ID_AMAZON = 0x3423712;
private static final int ID_GOOGLE = 0x3487532;
private static final String GOOGLE_SEARCH_URL = "https://ajax.googleapis.com/ajax/services/search/web?v=1.0&q="; private static final String GOOGLE_SEARCH_URL = "https://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=";
private Task task; private Task task;
@ -77,6 +79,10 @@ public class WebServicesView extends LinearLayout {
initialize(); initialize();
} }
public int[] getScrollableViews() {
return new int[] { ID_AMAZON, ID_GOOGLE };
}
/** /**
* Initialize view * Initialize view
*/ */
@ -108,7 +114,7 @@ public class WebServicesView extends LinearLayout {
protected void initializeAmazon() { protected void initializeAmazon() {
addSectionHeader("Amazon.com"); addSectionHeader("Amazon.com");
final LinearLayout body = addHorizontalScroller(); final LinearLayout body = addHorizontalScroller(ID_AMAZON);
new Thread() { new Thread() {
@Override @Override
@ -181,7 +187,7 @@ public class WebServicesView extends LinearLayout {
} else if("Error".equals(xpp.getName())) { } else if("Error".equals(xpp.getName())) {
while(!"Message".equals(xpp.getName())) while(!"Message".equals(xpp.getName()))
xpp.next(); xpp.next();
throw new HttpErrorException(0, xpp.getText()); throw new AmazonException(xpp.nextText());
} }
} else if(eventType == XmlPullParser.END_TAG) { } else if(eventType == XmlPullParser.END_TAG) {
if("Item".equals(xpp.getName())) if("Item".equals(xpp.getName()))
@ -216,6 +222,15 @@ public class WebServicesView extends LinearLayout {
} }
} }
private class AmazonException extends Exception {
private static final long serialVersionUID = -3759207030258905605L;
public AmazonException(String arg0) {
super(arg0);
}
}
/** /**
* Initialize Google search results * Initialize Google search results
@ -223,7 +238,7 @@ public class WebServicesView extends LinearLayout {
protected void initializeGoogleSearch() { protected void initializeGoogleSearch() {
addSectionHeader("Google Search"); addSectionHeader("Google Search");
final LinearLayout body = addHorizontalScroller(); final LinearLayout body = addHorizontalScroller(ID_GOOGLE);
new Thread() { new Thread() {
@Override @Override
@ -326,10 +341,11 @@ public class WebServicesView extends LinearLayout {
}); });
} }
protected LinearLayout addHorizontalScroller() { protected LinearLayout addHorizontalScroller(int id) {
HorizontalScrollView scroll = new HorizontalScrollView(getContext()); HorizontalScrollView scroll = new HorizontalScrollView(getContext());
scroll.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, scroll.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT)); LayoutParams.WRAP_CONTENT));
scroll.setId(id);
addView(scroll); addView(scroll);
LinearLayout body = new LinearLayout(getContext()); LinearLayout body = new LinearLayout(getContext());

Loading…
Cancel
Save