Remove swipte to refresh src, fix padding in key list

This commit is contained in:
Dominik Schürmann 2015-02-27 23:39:36 +01:00
parent b1c8fa3471
commit 200d4a6bb6
3 changed files with 27 additions and 208 deletions

View File

@ -36,8 +36,6 @@ import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader; import android.support.v4.content.Loader;
import android.support.v4.view.MenuItemCompat; import android.support.v4.view.MenuItemCompat;
import android.support.v4.widget.CursorAdapter; import android.support.v4.widget.CursorAdapter;
import android.support.v4.widget.NoScrollableSwipeRefreshLayout;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity; import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.SearchView; import android.support.v7.widget.SearchView;
import android.view.ActionMode; import android.view.ActionMode;
@ -45,7 +43,6 @@ import android.view.LayoutInflater;
import android.view.Menu; import android.view.Menu;
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.OnClickListener; import android.view.View.OnClickListener;
import android.view.ViewGroup; import android.view.ViewGroup;
@ -73,7 +70,6 @@ import org.sufficientlysecure.keychain.ui.dialog.DeleteKeyDialogFragment;
import org.sufficientlysecure.keychain.ui.util.Highlighter; import org.sufficientlysecure.keychain.ui.util.Highlighter;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.ui.util.Notify; import org.sufficientlysecure.keychain.ui.util.Notify;
import org.sufficientlysecure.keychain.ui.widget.ListAwareSwipeRefreshLayout;
import org.sufficientlysecure.keychain.util.ExportHelper; import org.sufficientlysecure.keychain.util.ExportHelper;
import org.sufficientlysecure.keychain.util.Log; import org.sufficientlysecure.keychain.util.Log;
import org.sufficientlysecure.keychain.util.Preferences; import org.sufficientlysecure.keychain.util.Preferences;
@ -97,7 +93,6 @@ public class KeyListFragment extends LoaderFragment
private KeyListAdapter mAdapter; private KeyListAdapter mAdapter;
private StickyListHeadersListView mStickyList; private StickyListHeadersListView mStickyList;
private ListAwareSwipeRefreshLayout mSwipeRefreshLayout;
// saves the mode object for multiselect, needed for reset at some point // saves the mode object for multiselect, needed for reset at some point
private ActionMode mActionMode = null; private ActionMode mActionMode = null;
@ -152,73 +147,10 @@ public class KeyListFragment extends LoaderFragment
} }
}); });
mSwipeRefreshLayout = (ListAwareSwipeRefreshLayout) view.findViewById(R.id.key_list_swipe_container);
mSwipeRefreshLayout.setOnRefreshListener(new NoScrollableSwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
KeychainIntentServiceHandler finishedHandler = new KeychainIntentServiceHandler(getActivity()) {
public void handleMessage(Message message) {
if (message.arg1 == KeychainIntentServiceHandler.MESSAGE_OKAY) {
mSwipeRefreshLayout.setRefreshing(false);
}
}
};
// new KeyUpdateHelper().updateAllKeys(getActivity(), finishedHandler);
updateActionbarForSwipe(false);
}
});
mSwipeRefreshLayout.setColorScheme(
R.color.android_purple_dark,
R.color.android_purple_light,
R.color.android_purple_dark,
R.color.android_purple_light);
mSwipeRefreshLayout.setStickyListHeadersListView(mStickyList);
mSwipeRefreshLayout.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_MOVE) {
updateActionbarForSwipe(true);
} else {
updateActionbarForSwipe(false);
}
return false;
}
});
// Just disable for now
mSwipeRefreshLayout.setIsLocked(true);
return root; return root;
} }
private void updateActionbarForSwipe(boolean show) {
ActionBarActivity activity = (ActionBarActivity) getActivity();
ActionBar bar = activity.getSupportActionBar();
if (show) {
bar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
bar.setDisplayUseLogoEnabled(false);
bar.setCustomView(R.layout.custom_actionbar);
TextView title = (TextView) getActivity().findViewById(R.id.custom_actionbar_text);
title.setText(R.string.swipe_to_update);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
// hideMenu = true;
// activity.invalidateOptionsMenu();
}
} else {
bar.setTitle(getActivity().getTitle());
bar.setDisplayHomeAsUpEnabled(true);
bar.setDisplayShowTitleEnabled(true);
bar.setDisplayUseLogoEnabled(true);
bar.setDisplayShowHomeEnabled(true);
bar.setDisplayShowCustomEnabled(false);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
// hideMenu = false;
// activity.invalidateOptionsMenu();
}
}
}
/** /**
* Define Adapter and Loader on create of Activity * Define Adapter and Loader on create of Activity
*/ */

View File

@ -1,99 +0,0 @@
/*
* Copyright (C) 2014 Daniel Albert
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.sufficientlysecure.keychain.ui.widget;
import android.content.Context;
import android.support.v4.widget.NoScrollableSwipeRefreshLayout;
import android.util.AttributeSet;
import android.view.MotionEvent;
import se.emilsjolander.stickylistheaders.StickyListHeadersListView;
public class ListAwareSwipeRefreshLayout extends NoScrollableSwipeRefreshLayout {
private StickyListHeadersListView mStickyListHeadersListView = null;
private boolean mIsLocked = false;
/**
* Constructors
*/
public ListAwareSwipeRefreshLayout(Context context) {
super(context);
}
public ListAwareSwipeRefreshLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
/**
* Getters / Setters
*/
public void setStickyListHeadersListView(StickyListHeadersListView stickyListHeadersListView) {
mStickyListHeadersListView = stickyListHeadersListView;
}
public StickyListHeadersListView getStickyListHeadersListView() {
return mStickyListHeadersListView;
}
public void setIsLocked(boolean locked) {
mIsLocked = locked;
}
public boolean getIsLocked() {
return mIsLocked;
}
@Override
public boolean canChildScrollUp() {
if (mStickyListHeadersListView == null) {
return super.canChildScrollUp();
}
return (mIsLocked || (
mStickyListHeadersListView.getWrappedList().getChildCount() > 0
&& (mStickyListHeadersListView.getWrappedList().getChildAt(0).getTop() < 0
|| mStickyListHeadersListView.getFirstVisiblePosition() > 0)
)
);
}
/** Called on a touch event, this method exempts a small area in the upper right from pull to
* refresh handling.
*
* If the touch event happens somewhere in the upper right corner of the screen, we return false
* to indicate that the event was not handled. This ensures events in that area are always
* handed through to the list scrollbar handle. For all other cases, we pass the message through
* to the pull to refresh handler.
*/
@Override
public boolean onTouchEvent(MotionEvent event) {
// The device may be null. This actually happens
if (event.getDevice() != null) {
// MotionEvent.AXIS_X is api level 12, for some reason, so we use a constant 0 here
float ratioX = event.getX() / event.getDevice().getMotionRange(0).getMax();
float ratioY = event.getY() / event.getDevice().getMotionRange(1).getMax();
// if this is the upper right corner, don't handle as pull to refresh event
if (ratioX > 0.85f && ratioY < 0.15f) {
return false;
}
}
return super.onTouchEvent(event);
}
}

View File

@ -1,21 +1,9 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:fab="http://schemas.android.com/apk/res-auto" <RelativeLayout xmlns:fab="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
android:fitsSystemWindows="true"
android:layout_marginTop="-25dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_width="match_parent"> android:layout_width="match_parent">
<!--
fitsSystemWindows and layout_marginTop from
https://medium.com/@ngdelamo/using-drawerlayout-the-material-way-i-716bba2b5705
-->
<org.sufficientlysecure.keychain.ui.widget.ListAwareSwipeRefreshLayout
android:id="@+id/key_list_swipe_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<!--rebuild functionality of ListFragment --> <!--rebuild functionality of ListFragment -->
<FrameLayout <FrameLayout
android:layout_width="match_parent" android:layout_width="match_parent"
@ -25,7 +13,6 @@
android:id="@+id/key_list_list" android:id="@+id/key_list_list"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:clipToPadding="false"
android:drawSelectorOnTop="true" android:drawSelectorOnTop="true"
android:fastScrollEnabled="true" android:fastScrollEnabled="true"
android:paddingBottom="16dp" android:paddingBottom="16dp"
@ -50,7 +37,6 @@
</LinearLayout> </LinearLayout>
</FrameLayout> </FrameLayout>
</org.sufficientlysecure.keychain.ui.widget.ListAwareSwipeRefreshLayout>
<com.getbase.floatingactionbutton.FloatingActionsMenu <com.getbase.floatingactionbutton.FloatingActionsMenu
android:id="@+id/fab_main" android:id="@+id/fab_main"