mirror of
https://github.com/samuelclay/NewsBlur.git
synced 2025-08-31 21:41:33 +00:00
'Back' bezel gesture to leave story list view. (#249)
This commit is contained in:
parent
952def6542
commit
cf8adff271
8 changed files with 49 additions and 4 deletions
|
@ -38,10 +38,9 @@ public abstract class ItemsList extends NbFragmentActivity implements ActionComp
|
||||||
protected ItemListFragment itemListFragment;
|
protected ItemListFragment itemListFragment;
|
||||||
protected FragmentManager fragmentManager;
|
protected FragmentManager fragmentManager;
|
||||||
protected int currentState;
|
protected int currentState;
|
||||||
private Menu menu;
|
|
||||||
|
|
||||||
protected boolean stopLoading = false;
|
protected boolean stopLoading = false;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle bundle) {
|
protected void onCreate(Bundle bundle) {
|
||||||
requestWindowFeature(Window.FEATURE_PROGRESS);
|
requestWindowFeature(Window.FEATURE_PROGRESS);
|
||||||
|
@ -54,7 +53,6 @@ public abstract class ItemsList extends NbFragmentActivity implements ActionComp
|
||||||
// our intel state is entirely determined by the state of the Main view
|
// our intel state is entirely determined by the state of the Main view
|
||||||
currentState = getIntent().getIntExtra(EXTRA_STATE, 0);
|
currentState = getIntent().getIntExtra(EXTRA_STATE, 0);
|
||||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void onResume() {
|
protected void onResume() {
|
||||||
|
|
|
@ -57,6 +57,7 @@ public class AllSharedStoriesItemListFragment extends ItemListFragment implement
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
View v = inflater.inflate(R.layout.fragment_itemlist, null);
|
View v = inflater.inflate(R.layout.fragment_itemlist, null);
|
||||||
ListView itemList = (ListView) v.findViewById(R.id.itemlistfragment_list);
|
ListView itemList = (ListView) v.findViewById(R.id.itemlistfragment_list);
|
||||||
|
setupBezelSwipeDetector(itemList);
|
||||||
itemList.setEmptyView(v.findViewById(R.id.empty_view));
|
itemList.setEmptyView(v.findViewById(R.id.empty_view));
|
||||||
|
|
||||||
contentResolver = getActivity().getContentResolver();
|
contentResolver = getActivity().getContentResolver();
|
||||||
|
@ -109,6 +110,7 @@ public class AllSharedStoriesItemListFragment extends ItemListFragment implement
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
||||||
|
if (getActivity().isFinishing()) return;
|
||||||
Intent i = new Intent(getActivity(), AllSharedStoriesReading.class);
|
Intent i = new Intent(getActivity(), AllSharedStoriesReading.class);
|
||||||
i.putExtra(FeedReading.EXTRA_FEED_IDS, feedIds);
|
i.putExtra(FeedReading.EXTRA_FEED_IDS, feedIds);
|
||||||
i.putExtra(FeedReading.EXTRA_POSITION, position);
|
i.putExtra(FeedReading.EXTRA_POSITION, position);
|
||||||
|
|
|
@ -54,6 +54,7 @@ public class AllStoriesItemListFragment extends ItemListFragment implements Load
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
View v = inflater.inflate(R.layout.fragment_itemlist, null);
|
View v = inflater.inflate(R.layout.fragment_itemlist, null);
|
||||||
ListView itemList = (ListView) v.findViewById(R.id.itemlistfragment_list);
|
ListView itemList = (ListView) v.findViewById(R.id.itemlistfragment_list);
|
||||||
|
setupBezelSwipeDetector(itemList);
|
||||||
|
|
||||||
itemList.setEmptyView(v.findViewById(R.id.empty_view));
|
itemList.setEmptyView(v.findViewById(R.id.empty_view));
|
||||||
|
|
||||||
|
@ -108,6 +109,7 @@ public class AllStoriesItemListFragment extends ItemListFragment implements Load
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
||||||
|
if (getActivity().isFinishing()) return;
|
||||||
Intent i = new Intent(getActivity(), AllStoriesReading.class);
|
Intent i = new Intent(getActivity(), AllStoriesReading.class);
|
||||||
i.putExtra(FeedReading.EXTRA_FEED_IDS, feedIds);
|
i.putExtra(FeedReading.EXTRA_FEED_IDS, feedIds);
|
||||||
i.putExtra(FeedReading.EXTRA_POSITION, position);
|
i.putExtra(FeedReading.EXTRA_POSITION, position);
|
||||||
|
|
|
@ -63,8 +63,9 @@ public class FeedItemListFragment extends ItemListFragment implements LoaderMana
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
View v = inflater.inflate(R.layout.fragment_itemlist, null);
|
View v = inflater.inflate(R.layout.fragment_itemlist, null);
|
||||||
ListView itemList = (ListView) v.findViewById(R.id.itemlistfragment_list);
|
|
||||||
|
|
||||||
|
ListView itemList = (ListView) v.findViewById(R.id.itemlistfragment_list);
|
||||||
|
setupBezelSwipeDetector(itemList);
|
||||||
itemList.setEmptyView(v.findViewById(R.id.empty_view));
|
itemList.setEmptyView(v.findViewById(R.id.empty_view));
|
||||||
|
|
||||||
ContentResolver contentResolver = getActivity().getContentResolver();
|
ContentResolver contentResolver = getActivity().getContentResolver();
|
||||||
|
@ -127,6 +128,7 @@ public class FeedItemListFragment extends ItemListFragment implements LoaderMana
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
||||||
|
if (getActivity().isFinishing()) return;
|
||||||
Intent i = new Intent(getActivity(), FeedReading.class);
|
Intent i = new Intent(getActivity(), FeedReading.class);
|
||||||
i.putExtra(Reading.EXTRA_FEED, feedId);
|
i.putExtra(Reading.EXTRA_FEED, feedId);
|
||||||
i.putExtra(FeedReading.EXTRA_POSITION, position);
|
i.putExtra(FeedReading.EXTRA_POSITION, position);
|
||||||
|
|
|
@ -75,6 +75,7 @@ public class FolderItemListFragment extends ItemListFragment implements LoaderMa
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
View v = inflater.inflate(R.layout.fragment_itemlist, null);
|
View v = inflater.inflate(R.layout.fragment_itemlist, null);
|
||||||
ListView itemList = (ListView) v.findViewById(R.id.itemlistfragment_list);
|
ListView itemList = (ListView) v.findViewById(R.id.itemlistfragment_list);
|
||||||
|
setupBezelSwipeDetector(itemList);
|
||||||
|
|
||||||
itemList.setEmptyView(v.findViewById(R.id.empty_view));
|
itemList.setEmptyView(v.findViewById(R.id.empty_view));
|
||||||
|
|
||||||
|
@ -119,6 +120,7 @@ public class FolderItemListFragment extends ItemListFragment implements LoaderMa
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
||||||
|
if (getActivity().isFinishing()) return;
|
||||||
Intent i = new Intent(getActivity(), FolderReading.class);
|
Intent i = new Intent(getActivity(), FolderReading.class);
|
||||||
i.putExtra(FeedReading.EXTRA_FEED_IDS, feedIds);
|
i.putExtra(FeedReading.EXTRA_FEED_IDS, feedIds);
|
||||||
i.putExtra(FeedReading.EXTRA_POSITION, position);
|
i.putExtra(FeedReading.EXTRA_POSITION, position);
|
||||||
|
|
|
@ -8,9 +8,13 @@ import android.support.v4.app.Fragment;
|
||||||
import android.support.v4.content.Loader;
|
import android.support.v4.content.Loader;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.ContextMenu;
|
import android.view.ContextMenu;
|
||||||
|
import android.view.GestureDetector;
|
||||||
|
import android.view.GestureDetector.SimpleOnGestureListener;
|
||||||
import android.view.MenuInflater;
|
import android.view.MenuInflater;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
|
import android.view.MotionEvent;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.view.View.OnTouchListener;
|
||||||
import android.view.ContextMenu.ContextMenuInfo;
|
import android.view.ContextMenu.ContextMenuInfo;
|
||||||
import android.view.View.OnCreateContextMenuListener;
|
import android.view.View.OnCreateContextMenuListener;
|
||||||
import android.widget.AbsListView;
|
import android.widget.AbsListView;
|
||||||
|
@ -145,4 +149,35 @@ public abstract class ItemListFragment extends Fragment implements OnScrollListe
|
||||||
return super.onContextItemSelected(item);
|
return super.onContextItemSelected(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void setupBezelSwipeDetector(View v) {
|
||||||
|
final GestureDetector gestureDetector = new GestureDetector(getActivity(), new BezelSwipeDetector());
|
||||||
|
v.setOnTouchListener(new OnTouchListener() {
|
||||||
|
public boolean onTouch(View v, MotionEvent event) {
|
||||||
|
return gestureDetector.onTouchEvent(event);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A gesture detector that captures bezel swipes and finishes the activity,
|
||||||
|
* to simulate a 'back' gesture.
|
||||||
|
*
|
||||||
|
* NB: pretty much all Views still try to process on-tap events despite
|
||||||
|
* returning true, so be sure to check isFinishing() on all other
|
||||||
|
* tap handlers.
|
||||||
|
*/
|
||||||
|
class BezelSwipeDetector extends GestureDetector.SimpleOnGestureListener {
|
||||||
|
@Override
|
||||||
|
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
|
||||||
|
if((e1.getX() < 75f) && // the gesture should start from the left bezel and
|
||||||
|
((e2.getX()-e1.getX()) > 90f) && // move horizontally to the right and
|
||||||
|
(Math.abs(e1.getY()-e2.getY()) < 40f) // have minimal vertical travel, so we don't capture scrolling gestures
|
||||||
|
) {
|
||||||
|
ItemListFragment.this.getActivity().finish();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,6 +46,7 @@ public class SavedStoriesItemListFragment extends ItemListFragment implements Lo
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
View v = inflater.inflate(R.layout.fragment_itemlist, null);
|
View v = inflater.inflate(R.layout.fragment_itemlist, null);
|
||||||
ListView itemList = (ListView) v.findViewById(R.id.itemlistfragment_list);
|
ListView itemList = (ListView) v.findViewById(R.id.itemlistfragment_list);
|
||||||
|
setupBezelSwipeDetector(itemList);
|
||||||
|
|
||||||
itemList.setEmptyView(v.findViewById(R.id.empty_view));
|
itemList.setEmptyView(v.findViewById(R.id.empty_view));
|
||||||
|
|
||||||
|
@ -95,6 +96,7 @@ public class SavedStoriesItemListFragment extends ItemListFragment implements Lo
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
||||||
|
if (getActivity().isFinishing()) return;
|
||||||
Intent i = new Intent(getActivity(), SavedStoriesReading.class);
|
Intent i = new Intent(getActivity(), SavedStoriesReading.class);
|
||||||
i.putExtra(FeedReading.EXTRA_POSITION, position);
|
i.putExtra(FeedReading.EXTRA_POSITION, position);
|
||||||
i.putExtra(Reading.EXTRA_DEFAULT_FEED_VIEW, defaultFeedView);
|
i.putExtra(Reading.EXTRA_DEFAULT_FEED_VIEW, defaultFeedView);
|
||||||
|
|
|
@ -91,6 +91,7 @@ public class SocialFeedItemListFragment extends ItemListFragment implements Load
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
View v = inflater.inflate(R.layout.fragment_itemlist, null);
|
View v = inflater.inflate(R.layout.fragment_itemlist, null);
|
||||||
itemList = (ListView) v.findViewById(R.id.itemlistfragment_list);
|
itemList = (ListView) v.findViewById(R.id.itemlistfragment_list);
|
||||||
|
setupBezelSwipeDetector(itemList);
|
||||||
itemList.setEmptyView(v.findViewById(R.id.empty_view));
|
itemList.setEmptyView(v.findViewById(R.id.empty_view));
|
||||||
|
|
||||||
itemList.setOnScrollListener(this);
|
itemList.setOnScrollListener(this);
|
||||||
|
@ -122,6 +123,7 @@ public class SocialFeedItemListFragment extends ItemListFragment implements Load
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
||||||
|
if (getActivity().isFinishing()) return;
|
||||||
Intent i = new Intent(getActivity(), SocialFeedReading.class);
|
Intent i = new Intent(getActivity(), SocialFeedReading.class);
|
||||||
i.putExtra(Reading.EXTRA_USERID, userId);
|
i.putExtra(Reading.EXTRA_USERID, userId);
|
||||||
i.putExtra(Reading.EXTRA_USERNAME, username);
|
i.putExtra(Reading.EXTRA_USERNAME, username);
|
||||||
|
|
Loading…
Add table
Reference in a new issue