From b14674749bc5d3e790edb1ae2fd603110bc81fc7 Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Tue, 30 May 2017 19:33:37 +0200 Subject: [PATCH] tls-psk: handle disconnect in ui --- .../ui/dialog/RemoteDeduplicateActivity.java | 3 ++- .../keychain/ui/SettingsCacheTTLFragment.java | 3 ++- .../ui/keyview/view/IdentitiesCardView.java | 2 +- .../transfer/presenter/TransferPresenter.java | 10 ++++--- .../transfer/view/ReceivedSecretKeyList.java | 2 +- .../ui/transfer/view/TransferFragment.java | 24 ++++++++++++----- .../transfer/view/TransferSecretKeyList.java | 19 +++++++++++--- .../recyclerview/DividerItemDecoration.java | 11 +++++--- .../src/main/res/layout/key_transfer_item.xml | 8 ++++-- .../src/main/res/layout/transfer_fragment.xml | 26 ++++++++++++++----- 10 files changed, 80 insertions(+), 28 deletions(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/dialog/RemoteDeduplicateActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/dialog/RemoteDeduplicateActivity.java index 6597e91e1..6aee2a219 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/dialog/RemoteDeduplicateActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/dialog/RemoteDeduplicateActivity.java @@ -122,7 +122,8 @@ public class RemoteDeduplicateActivity extends FragmentActivity { keyChoiceList = (RecyclerView) view.findViewById(R.id.duplicate_key_list); keyChoiceList.setLayoutManager(new LinearLayoutManager(activity)); - keyChoiceList.addItemDecoration(new DividerItemDecoration(activity, DividerItemDecoration.VERTICAL_LIST)); + keyChoiceList.addItemDecoration( + new DividerItemDecoration(activity, DividerItemDecoration.VERTICAL_LIST, true)); setupListenersForPresenter(); mvpView = createMvpView(view, layoutInflater); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SettingsCacheTTLFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SettingsCacheTTLFragment.java index b811d51b5..26f5dbee7 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SettingsCacheTTLFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SettingsCacheTTLFragment.java @@ -75,7 +75,8 @@ public class SettingsCacheTTLFragment extends Fragment { recyclerView.setHasFixedSize(true); recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); recyclerView.setAdapter(mAdapter); - recyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL_LIST)); + recyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL_LIST, + true)); } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/keyview/view/IdentitiesCardView.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/keyview/view/IdentitiesCardView.java index 0ddc6b160..b587eb9d3 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/keyview/view/IdentitiesCardView.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/keyview/view/IdentitiesCardView.java @@ -46,7 +46,7 @@ public class IdentitiesCardView extends CardView implements IdentitiesMvpView { vIdentities = (RecyclerView) view.findViewById(R.id.view_key_user_ids); vIdentities.setLayoutManager(new LinearLayoutManager(context)); - vIdentities.addItemDecoration(new DividerItemDecoration(context, DividerItemDecoration.VERTICAL_LIST)); + vIdentities.addItemDecoration(new DividerItemDecoration(context, DividerItemDecoration.VERTICAL_LIST, false)); Button userIdsEditButton = (Button) view.findViewById(R.id.view_key_card_user_ids_edit); userIdsEditButton.setOnClickListener(new OnClickListener() { diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/transfer/presenter/TransferPresenter.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/transfer/presenter/TransferPresenter.java index d1c319f78..a237099b6 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/transfer/presenter/TransferPresenter.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/transfer/presenter/TransferPresenter.java @@ -185,12 +185,14 @@ public class TransferPresenter implements KeyTransferCallback, LoaderCallbacks { diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/transfer/view/TransferFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/transfer/view/TransferFragment.java index 264125a34..9d1dc616d 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/transfer/view/TransferFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/transfer/view/TransferFragment.java @@ -42,12 +42,13 @@ import com.google.zxing.client.android.Intents; import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.operations.results.ImportKeyResult; import org.sufficientlysecure.keychain.operations.results.OperationResult; -import org.sufficientlysecure.keychain.service.ImportKeyringParcel; import org.sufficientlysecure.keychain.ui.QrCodeCaptureActivity; import org.sufficientlysecure.keychain.ui.base.CryptoOperationHelper; import org.sufficientlysecure.keychain.ui.base.CryptoOperationHelper.Callback; import org.sufficientlysecure.keychain.ui.transfer.presenter.TransferPresenter; import org.sufficientlysecure.keychain.ui.transfer.presenter.TransferPresenter.TransferMvpView; +import org.sufficientlysecure.keychain.ui.util.Notify; +import org.sufficientlysecure.keychain.ui.util.Notify.Style; @RequiresApi(api = VERSION_CODES.LOLLIPOP) @@ -63,7 +64,8 @@ public class TransferFragment extends Fragment implements TransferMvpView { private ImageView vQrCodeImage; private TransferPresenter presenter; private ViewAnimator vTransferAnimator; - private TextView vConnectionStatusText; + private TextView vConnectionStatusText1; + private TextView vConnectionStatusText2; private RecyclerView vTransferKeyList; private RecyclerView vReceivedKeyList; @@ -76,7 +78,8 @@ public class TransferFragment extends Fragment implements TransferMvpView { vTransferAnimator = (ViewAnimator) view.findViewById(R.id.transfer_animator); - vConnectionStatusText = (TextView) view.findViewById(R.id.connection_status); + vConnectionStatusText1 = (TextView) view.findViewById(R.id.connection_status_1); + vConnectionStatusText2 = (TextView) view.findViewById(R.id.connection_status_2); vTransferKeyList = (RecyclerView) view.findViewById(R.id.transfer_key_list); vReceivedKeyList = (RecyclerView) view.findViewById(R.id.received_key_list); @@ -117,7 +120,8 @@ public class TransferFragment extends Fragment implements TransferMvpView { @Override public void showConnectionEstablished(String hostname) { - vConnectionStatusText.setText("Connected to: " + hostname); + vConnectionStatusText1.setText("Connected to: " + hostname); + vConnectionStatusText2.setText("Connected to: " + hostname); vTransferAnimator.setDisplayedChild(VIEW_CONNECTED); } @@ -126,6 +130,12 @@ public class TransferFragment extends Fragment implements TransferMvpView { vTransferAnimator.setDisplayedChild(VIEW_RECEIVING); } + @Override + public void showViewDisconnected() { + vConnectionStatusText1.setText("Disconnected!"); + vConnectionStatusText2.setText("Disconnected!"); + } + @Override public void setQrImage(final Bitmap qrCode) { vQrCodeImage.getViewTreeObserver().addOnGlobalLayoutListener( @@ -171,17 +181,17 @@ public class TransferFragment extends Fragment implements TransferMvpView { @Override public void showErrorBadKey() { - + Notify.create(getActivity(), "Failed reading incoming key!", Style.ERROR).show(); } @Override public void showErrorConnectionFailed() { - + Notify.create(getActivity(), "Connection failed!", Style.ERROR).show(); } @Override public void showResultNotification(ImportKeyResult result) { - result.createNotify(getActivity()).show(this); + result.createNotify(getActivity()).show(); } @Override diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/transfer/view/TransferSecretKeyList.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/transfer/view/TransferSecretKeyList.java index 620385d67..f7398e7b7 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/transfer/view/TransferSecretKeyList.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/transfer/view/TransferSecretKeyList.java @@ -48,7 +48,7 @@ public class TransferSecretKeyList extends RecyclerView { private void init(Context context) { setLayoutManager(new LinearLayoutManager(context)); - addItemDecoration(new DividerItemDecoration(context, DividerItemDecoration.VERTICAL_LIST)); + addItemDecoration(new DividerItemDecoration(context, DividerItemDecoration.VERTICAL_LIST, true)); setItemAnimator(null); } @@ -60,6 +60,7 @@ public class TransferSecretKeyList extends RecyclerView { private Long focusedMasterKeyId; private List data; private ArrayList finishedItems = new ArrayList<>(); + private boolean disableAll; public TransferKeyAdapter(Context context, LayoutInflater layoutInflater, @@ -78,7 +79,7 @@ public class TransferSecretKeyList extends RecyclerView { public void onBindViewHolder(TransferKeyViewHolder holder, int position) { SecretKeyItem item = data.get(position); boolean isFinished = finishedItems.contains(item.masterKeyId); - holder.bind(context, item, onClickTransferKeyListener, focusedMasterKeyId, isFinished); + holder.bind(context, item, onClickTransferKeyListener, focusedMasterKeyId, isFinished, disableAll); } @Override @@ -114,6 +115,11 @@ public class TransferSecretKeyList extends RecyclerView { public Loader> createLoader(Context context) { return new SecretKeyLoader(context, context.getContentResolver()); } + + public void disableAll() { + disableAll = true; + notifyItemRangeChanged(0, getItemCount()); + } } static class TransferKeyViewHolder extends RecyclerView.ViewHolder { @@ -136,7 +142,7 @@ public class TransferSecretKeyList extends RecyclerView { private void bind(Context context, final SecretKeyItem item, final OnClickTransferKeyListener onClickTransferKeyListener, Long focusedMasterKeyId, - boolean isFinished) { + boolean isFinished, boolean disableAll) { if (item.name != null) { vName.setText(item.name); vName.setVisibility(View.VISIBLE); @@ -155,6 +161,13 @@ public class TransferSecretKeyList extends RecyclerView { DateUtils.FORMAT_SHOW_YEAR | DateUtils.FORMAT_ABBREV_MONTH); vCreation.setText(context.getString(R.string.label_key_created, dateTime)); + if (disableAll) { + itemView.setAlpha(0.2f); + vState.setDisplayedChild(STATE_INVISIBLE); + vSendButton.setOnClickListener(null); + return; + } + if (focusedMasterKeyId != null) { if (focusedMasterKeyId != item.masterKeyId) { itemView.animate().alpha(0.2f).start(); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/util/recyclerview/DividerItemDecoration.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/util/recyclerview/DividerItemDecoration.java index 2af4e062d..d31243c40 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/util/recyclerview/DividerItemDecoration.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/util/recyclerview/DividerItemDecoration.java @@ -34,12 +34,14 @@ public class DividerItemDecoration extends RecyclerView.ItemDecoration { public static final int HORIZONTAL_LIST = LinearLayoutManager.HORIZONTAL; public static final int VERTICAL_LIST = LinearLayoutManager.VERTICAL; + private final boolean showAfterLast; private Drawable mDivider; private int mOrientation; - public DividerItemDecoration(Context context, int orientation) { + public DividerItemDecoration(Context context, int orientation, boolean showAfterLast) { + this.showAfterLast = showAfterLast; final TypedArray a = context.obtainStyledAttributes(ATTRS); mDivider = a.getDrawable(0); a.recycle(); @@ -66,8 +68,11 @@ public class DividerItemDecoration extends RecyclerView.ItemDecoration { final int left = parent.getPaddingLeft(); final int right = parent.getWidth() - parent.getPaddingRight(); - final int childCount = parent.getChildCount(); - for (int i = 0; i < childCount -1; i++) { + int childCount = parent.getChildCount(); + if (!showAfterLast) { + childCount -= 1; + } + for (int i = 0; i < childCount; i++) { final View child = parent.getChildAt(i); final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child .getLayoutParams(); diff --git a/OpenKeychain/src/main/res/layout/key_transfer_item.xml b/OpenKeychain/src/main/res/layout/key_transfer_item.xml index e5939f51b..d008a8ed5 100644 --- a/OpenKeychain/src/main/res/layout/key_transfer_item.xml +++ b/OpenKeychain/src/main/res/layout/key_transfer_item.xml @@ -8,7 +8,9 @@ android:minHeight="?attr/listPreferredItemHeight" android:maxLines="1" android:gravity="center_vertical" - android:orientation="horizontal"> + android:orientation="horizontal" + android:paddingLeft="4dp" + android:paddingRight="4dp"> + custom:initialView="02"> + + @@ -97,9 +104,17 @@ android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="16dp" + android:text="Connection status:" + android:textAppearance="?android:attr/textAppearanceMedium" /> + +