mirror of
https://github.com/moparisthebest/open-keychain
synced 2024-11-27 11:12:15 -05:00
Merge branch 'development' of github.com:open-keychain/open-keychain into development
This commit is contained in:
commit
c46fdef203
@ -28,7 +28,7 @@ dependencies {
|
||||
compile 'com.google.zxing:core:3.0.1'
|
||||
compile 'com.jpardogo.materialtabstrip:library:1.0.9'
|
||||
compile 'it.neokree:MaterialNavigationDrawer:1.3.1'
|
||||
compile 'com.nispok:snackbar:2.7.4'
|
||||
compile 'com.nispok:snackbar:2.9.1'
|
||||
compile 'com.getbase:floatingactionbutton:1.8.0'
|
||||
}
|
||||
|
||||
|
@ -95,7 +95,7 @@
|
||||
<activity
|
||||
android:name=".ui.CreateKeyActivity"
|
||||
android:configChanges="orientation|screenSize|keyboardHidden|keyboard"
|
||||
android:windowSoftInputMode="stateHidden"
|
||||
android:windowSoftInputMode="stateHidden|adjustResize"
|
||||
android:label="@string/title_create_key"
|
||||
android:parentActivityName=".ui.MainActivity">
|
||||
<meta-data
|
||||
|
@ -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
|
||||
*/
|
||||
|
@ -72,19 +72,19 @@ public class UserIdsAdapter extends CursorAdapter implements AdapterView.OnItemC
|
||||
|
||||
public UserIdsAdapter(Context context, Cursor c, int flags, boolean showCheckBoxes,
|
||||
SaveKeyringParcel saveKeyringParcel) {
|
||||
this(context, c, flags, showCheckBoxes, false, saveKeyringParcel);
|
||||
this(context, c, flags, showCheckBoxes, true, saveKeyringParcel);
|
||||
}
|
||||
|
||||
public UserIdsAdapter(Context context, Cursor c, int flags, boolean showCheckBoxes) {
|
||||
this(context, c, flags, showCheckBoxes, false, null);
|
||||
this(context, c, flags, showCheckBoxes, true, null);
|
||||
}
|
||||
|
||||
public UserIdsAdapter(Context context, Cursor c, int flags, SaveKeyringParcel saveKeyringParcel) {
|
||||
this(context, c, flags, false, false, saveKeyringParcel);
|
||||
this(context, c, flags, false, true, saveKeyringParcel);
|
||||
}
|
||||
|
||||
public UserIdsAdapter(Context context, Cursor c, int flags) {
|
||||
this(context, c, flags, false, false, null);
|
||||
this(context, c, flags, false, true, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -24,6 +24,7 @@ import android.graphics.Color;
|
||||
import com.nispok.snackbar.Snackbar;
|
||||
import com.nispok.snackbar.Snackbar.SnackbarDuration;
|
||||
import com.nispok.snackbar.SnackbarManager;
|
||||
import com.nispok.snackbar.enums.SnackbarType;
|
||||
import com.nispok.snackbar.listeners.ActionClickListener;
|
||||
|
||||
import org.sufficientlysecure.keychain.R;
|
||||
@ -48,6 +49,7 @@ public class Notify {
|
||||
|
||||
Snackbar bar = Snackbar.with(activity)
|
||||
.text(text)
|
||||
.type(SnackbarType.MULTI_LINE)
|
||||
.duration(SnackbarDuration.LENGTH_LONG);
|
||||
|
||||
switch (style) {
|
||||
@ -67,7 +69,8 @@ public class Notify {
|
||||
|
||||
public static Showable createNotify (Activity activity, int resId, int duration, Style style) {
|
||||
final Snackbar bar = Snackbar.with(activity)
|
||||
.text(resId);
|
||||
.text(resId)
|
||||
.type(SnackbarType.MULTI_LINE);
|
||||
if (duration == LENGTH_INDEFINITE) {
|
||||
bar.duration(SnackbarDuration.LENGTH_INDEFINITE);
|
||||
} else {
|
||||
@ -104,6 +107,7 @@ public class Notify {
|
||||
final Snackbar bar = Snackbar.with(activity)
|
||||
.text(msg)
|
||||
.actionLabel(resIdAction)
|
||||
.type(SnackbarType.MULTI_LINE)
|
||||
.actionListener(new ActionClickListener() {
|
||||
@Override
|
||||
public void onActionClicked(Snackbar snackbar) {
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
@ -7,8 +7,14 @@
|
||||
android:id="@+id/toolbar_include"
|
||||
layout="@layout/toolbar_standalone" />
|
||||
|
||||
<!--
|
||||
fitsSystemWindows and layout_marginTop from
|
||||
https://medium.com/@ngdelamo/using-drawerlayout-the-material-way-i-716bba2b5705
|
||||
-->
|
||||
<FrameLayout
|
||||
android:layout_below="@id/toolbar_include"
|
||||
android:fitsSystemWindows="true"
|
||||
android:layout_marginTop="-25dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
<ScrollView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:fillViewport="false"
|
||||
android:fillViewport="true"
|
||||
android:layout_above="@+id/create_key_button_divider">
|
||||
|
||||
<LinearLayout
|
||||
|
@ -7,8 +7,14 @@
|
||||
android:id="@+id/toolbar_include"
|
||||
layout="@layout/toolbar_standalone" />
|
||||
|
||||
<!--
|
||||
fitsSystemWindows and layout_marginTop from
|
||||
https://medium.com/@ngdelamo/using-drawerlayout-the-material-way-i-716bba2b5705
|
||||
-->
|
||||
<LinearLayout
|
||||
android:layout_below="@id/toolbar_include"
|
||||
android:fitsSystemWindows="true"
|
||||
android:layout_marginTop="-25dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
@ -6,9 +6,15 @@
|
||||
<include
|
||||
android:id="@+id/toolbar_include"
|
||||
layout="@layout/toolbar_standalone" />
|
||||
|
||||
|
||||
<!--
|
||||
fitsSystemWindows and layout_marginTop from
|
||||
https://medium.com/@ngdelamo/using-drawerlayout-the-material-way-i-716bba2b5705
|
||||
-->
|
||||
<LinearLayout
|
||||
android:layout_below="@id/toolbar_include"
|
||||
android:fitsSystemWindows="true"
|
||||
android:layout_marginTop="-25dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
@ -7,9 +7,15 @@
|
||||
android:id="@+id/toolbar_include"
|
||||
layout="@layout/toolbar_standalone" />
|
||||
|
||||
<!--
|
||||
fitsSystemWindows and layout_marginTop from
|
||||
https://medium.com/@ngdelamo/using-drawerlayout-the-material-way-i-716bba2b5705
|
||||
-->
|
||||
<LinearLayout
|
||||
android:layout_below="@id/toolbar_include"
|
||||
android:id="@+id/content_frame"
|
||||
android:fitsSystemWindows="true"
|
||||
android:layout_marginTop="-25dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
@ -7,9 +7,15 @@
|
||||
android:id="@+id/toolbar_include"
|
||||
layout="@layout/toolbar_standalone" />
|
||||
|
||||
<!--
|
||||
fitsSystemWindows and layout_marginTop from
|
||||
https://medium.com/@ngdelamo/using-drawerlayout-the-material-way-i-716bba2b5705
|
||||
-->
|
||||
<LinearLayout
|
||||
android:layout_below="@id/toolbar_include"
|
||||
android:id="@+id/content_frame"
|
||||
android:fitsSystemWindows="true"
|
||||
android:layout_marginTop="-25dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
@ -7,8 +7,14 @@
|
||||
android:id="@+id/toolbar_include"
|
||||
layout="@layout/toolbar_standalone" />
|
||||
|
||||
<!--
|
||||
fitsSystemWindows and layout_marginTop from
|
||||
https://medium.com/@ngdelamo/using-drawerlayout-the-material-way-i-716bba2b5705
|
||||
-->
|
||||
<LinearLayout
|
||||
android:layout_below="@id/toolbar_include"
|
||||
android:fitsSystemWindows="true"
|
||||
android:layout_marginTop="-25dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
@ -1,5 +1,4 @@
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:custom="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
|
@ -4,46 +4,39 @@
|
||||
android:layout_height="match_parent"
|
||||
android:layout_width="match_parent">
|
||||
|
||||
<org.sufficientlysecure.keychain.ui.widget.ListAwareSwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/key_list_swipe_container"
|
||||
<!--rebuild functionality of ListFragment -->
|
||||
<FrameLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
<!--rebuild functionality of ListFragment -->
|
||||
<FrameLayout
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<se.emilsjolander.stickylistheaders.StickyListHeadersListView
|
||||
android:id="@+id/key_list_list"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
android:layout_height="match_parent"
|
||||
android:drawSelectorOnTop="true"
|
||||
android:fastScrollEnabled="true"
|
||||
android:paddingBottom="16dp"
|
||||
android:paddingLeft="16dp"
|
||||
android:paddingRight="32dp"
|
||||
android:scrollbarStyle="outsideOverlay" />
|
||||
|
||||
<se.emilsjolander.stickylistheaders.StickyListHeadersListView
|
||||
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"
|
||||
android:paddingLeft="16dp"
|
||||
android:paddingRight="32dp"
|
||||
android:scrollbarStyle="outsideOverlay" />
|
||||
<LinearLayout
|
||||
android:id="@+id/key_list_empty"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:gravity="center"
|
||||
android:orientation="vertical"
|
||||
android:visibility="visible">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/key_list_empty"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center"
|
||||
android:orientation="vertical"
|
||||
android:visibility="visible">
|
||||
android:text="@string/key_list_empty_text1"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center"
|
||||
android:text="@string/key_list_empty_text1"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge" />
|
||||
|
||||
</LinearLayout>
|
||||
</FrameLayout>
|
||||
</org.sufficientlysecure.keychain.ui.widget.ListAwareSwipeRefreshLayout>
|
||||
</LinearLayout>
|
||||
</FrameLayout>
|
||||
|
||||
<com.getbase.floatingactionbutton.FloatingActionsMenu
|
||||
android:id="@+id/fab_main"
|
||||
|
Loading…
Reference in New Issue
Block a user