mirror of
https://github.com/moparisthebest/open-keychain
synced 2024-11-27 11:12:15 -05:00
Remove swipte to refresh src, fix padding in key list
This commit is contained in:
parent
b1c8fa3471
commit
200d4a6bb6
@ -36,8 +36,6 @@ import android.support.v4.content.CursorLoader;
|
||||
import android.support.v4.content.Loader;
|
||||
import android.support.v4.view.MenuItemCompat;
|
||||
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.widget.SearchView;
|
||||
import android.view.ActionMode;
|
||||
@ -45,7 +43,6 @@ import android.view.LayoutInflater;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
import android.view.MenuItem;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
import android.view.View.OnClickListener;
|
||||
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.KeyFormattingUtils;
|
||||
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.Log;
|
||||
import org.sufficientlysecure.keychain.util.Preferences;
|
||||
@ -97,7 +93,6 @@ public class KeyListFragment extends LoaderFragment
|
||||
|
||||
private KeyListAdapter mAdapter;
|
||||
private StickyListHeadersListView mStickyList;
|
||||
private ListAwareSwipeRefreshLayout mSwipeRefreshLayout;
|
||||
|
||||
// saves the mode object for multiselect, needed for reset at some point
|
||||
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;
|
||||
}
|
||||
|
||||
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
|
||||
*/
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
@ -1,21 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:fab="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:fitsSystemWindows="true"
|
||||
android:layout_marginTop="-25dp"
|
||||
android:layout_height="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 -->
|
||||
<FrameLayout
|
||||
android:layout_width="match_parent"
|
||||
@ -25,7 +13,6 @@
|
||||
android:id="@+id/key_list_list"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:clipToPadding="false"
|
||||
android:drawSelectorOnTop="true"
|
||||
android:fastScrollEnabled="true"
|
||||
android:paddingBottom="16dp"
|
||||
@ -50,7 +37,6 @@
|
||||
|
||||
</LinearLayout>
|
||||
</FrameLayout>
|
||||
</org.sufficientlysecure.keychain.ui.widget.ListAwareSwipeRefreshLayout>
|
||||
|
||||
<com.getbase.floatingactionbutton.FloatingActionsMenu
|
||||
android:id="@+id/fab_main"
|
||||
|
Loading…
Reference in New Issue
Block a user