mirror of
https://github.com/moparisthebest/open-keychain
synced 2024-11-23 17:22:16 -05:00
add failure state to DecryptListFragment
This commit is contained in:
parent
fe7d13c85f
commit
361ad99928
@ -577,74 +577,104 @@ public class DecryptListFragment
|
|||||||
// - replace the contents of the view with that element
|
// - replace the contents of the view with that element
|
||||||
final ViewModel model = mDataset.get(position);
|
final ViewModel model = mDataset.get(position);
|
||||||
|
|
||||||
if (model.hasResult()) {
|
if (!model.hasResult()) {
|
||||||
if (holder.vAnimator.getDisplayedChild() != 1) {
|
bindItemProgress(holder, model);
|
||||||
holder.vAnimator.setDisplayedChild(1);
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
KeyFormattingUtils.setStatus(mContext, holder, model.mResult);
|
|
||||||
|
|
||||||
final OpenPgpMetadata metadata = model.mResult.getDecryptMetadata();
|
|
||||||
|
|
||||||
String filename;
|
|
||||||
if (metadata == null) {
|
|
||||||
filename = mContext.getString(R.string.filename_unknown);
|
|
||||||
} else if (TextUtils.isEmpty(metadata.getFilename())) {
|
|
||||||
filename = mContext.getString("text/plain".equals(metadata.getMimeType())
|
|
||||||
? R.string.filename_unknown_text : R.string.filename_unknown);
|
|
||||||
} else {
|
|
||||||
filename = metadata.getFilename();
|
|
||||||
}
|
|
||||||
holder.vFilename.setText(filename);
|
|
||||||
|
|
||||||
long size = metadata == null ? 0 : metadata.getOriginalSize();
|
|
||||||
if (size == -1 || size == 0) {
|
|
||||||
holder.vFilesize.setText("");
|
|
||||||
} else {
|
|
||||||
holder.vFilesize.setText(FileHelper.readableFileSize(size));
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO thumbnail from OpenPgpMetadata?
|
|
||||||
if (model.mIcon != null) {
|
|
||||||
holder.vThumbnail.setImageDrawable(model.mIcon);
|
|
||||||
} else {
|
|
||||||
holder.vThumbnail.setImageResource(R.drawable.ic_doc_generic_am);
|
|
||||||
}
|
|
||||||
|
|
||||||
holder.vFile.setOnClickListener(model.mOnFileClickListener);
|
|
||||||
holder.vSignatureLayout.setOnClickListener(model.mOnKeyClickListener);
|
|
||||||
|
|
||||||
holder.vContextMenu.setTag(model);
|
|
||||||
holder.vContextMenu.setOnClickListener(new OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(View view) {
|
|
||||||
mMenuClickedModel = model;
|
|
||||||
PopupMenu menu = new PopupMenu(mContext, view);
|
|
||||||
menu.inflate(R.menu.decrypt_item_context_menu);
|
|
||||||
if (!"file".equals(model.mInputUri.getScheme())) {
|
|
||||||
menu.getMenu().findItem(R.id.decrypt_delete).setVisible(false);
|
|
||||||
}
|
|
||||||
menu.setOnMenuItemClickListener(mMenuItemClickListener);
|
|
||||||
menu.setOnDismissListener(new OnDismissListener() {
|
|
||||||
@Override
|
|
||||||
public void onDismiss(PopupMenu popupMenu) {
|
|
||||||
mMenuClickedModel = null;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
menu.show();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
} else {
|
|
||||||
if (holder.vAnimator.getDisplayedChild() != 0) {
|
|
||||||
holder.vAnimator.setDisplayedChild(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
holder.vProgress.setProgress(model.mProgress);
|
|
||||||
holder.vProgress.setMax(model.mMax);
|
|
||||||
holder.vProgressMsg.setText(model.mProgressMsg);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (model.mResult.success()) {
|
||||||
|
bindItemSuccess(holder, model);
|
||||||
|
} else {
|
||||||
|
bindItemFailure(holder, model);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void bindItemProgress(ViewHolder holder, ViewModel model) {
|
||||||
|
if (holder.vAnimator.getDisplayedChild() != 0) {
|
||||||
|
holder.vAnimator.setDisplayedChild(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
holder.vProgress.setProgress(model.mProgress);
|
||||||
|
holder.vProgress.setMax(model.mMax);
|
||||||
|
holder.vProgressMsg.setText(model.mProgressMsg);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void bindItemSuccess(ViewHolder holder, final ViewModel model) {
|
||||||
|
if (holder.vAnimator.getDisplayedChild() != 1) {
|
||||||
|
holder.vAnimator.setDisplayedChild(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
KeyFormattingUtils.setStatus(mContext, holder, model.mResult);
|
||||||
|
|
||||||
|
final OpenPgpMetadata metadata = model.mResult.getDecryptMetadata();
|
||||||
|
|
||||||
|
String filename;
|
||||||
|
if (metadata == null) {
|
||||||
|
filename = mContext.getString(R.string.filename_unknown);
|
||||||
|
} else if (TextUtils.isEmpty(metadata.getFilename())) {
|
||||||
|
filename = mContext.getString("text/plain".equals(metadata.getMimeType())
|
||||||
|
? R.string.filename_unknown_text : R.string.filename_unknown);
|
||||||
|
} else {
|
||||||
|
filename = metadata.getFilename();
|
||||||
|
}
|
||||||
|
holder.vFilename.setText(filename);
|
||||||
|
|
||||||
|
long size = metadata == null ? 0 : metadata.getOriginalSize();
|
||||||
|
if (size == -1 || size == 0) {
|
||||||
|
holder.vFilesize.setText("");
|
||||||
|
} else {
|
||||||
|
holder.vFilesize.setText(FileHelper.readableFileSize(size));
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO thumbnail from OpenPgpMetadata?
|
||||||
|
if (model.mIcon != null) {
|
||||||
|
holder.vThumbnail.setImageDrawable(model.mIcon);
|
||||||
|
} else {
|
||||||
|
holder.vThumbnail.setImageResource(R.drawable.ic_doc_generic_am);
|
||||||
|
}
|
||||||
|
|
||||||
|
holder.vFile.setOnClickListener(model.mOnFileClickListener);
|
||||||
|
holder.vSignatureLayout.setOnClickListener(model.mOnKeyClickListener);
|
||||||
|
|
||||||
|
holder.vContextMenu.setTag(model);
|
||||||
|
holder.vContextMenu.setOnClickListener(new OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View view) {
|
||||||
|
mMenuClickedModel = model;
|
||||||
|
PopupMenu menu = new PopupMenu(mContext, view);
|
||||||
|
menu.inflate(R.menu.decrypt_item_context_menu);
|
||||||
|
if (!"file".equals(model.mInputUri.getScheme())) {
|
||||||
|
menu.getMenu().findItem(R.id.decrypt_delete).setVisible(false);
|
||||||
|
}
|
||||||
|
menu.setOnMenuItemClickListener(mMenuItemClickListener);
|
||||||
|
menu.setOnDismissListener(new OnDismissListener() {
|
||||||
|
@Override
|
||||||
|
public void onDismiss(PopupMenu popupMenu) {
|
||||||
|
mMenuClickedModel = null;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
menu.show();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void bindItemFailure(ViewHolder holder, final ViewModel model) {
|
||||||
|
if (holder.vAnimator.getDisplayedChild() != 2) {
|
||||||
|
holder.vAnimator.setDisplayedChild(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
holder.vErrorMsg.setText(model.mResult.getLog().getLast().mType.getMsgId());
|
||||||
|
|
||||||
|
holder.vErrorViewLog.setOnClickListener(new OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
Intent intent = new Intent(mContext, LogDisplayActivity.class);
|
||||||
|
intent.putExtra(LogDisplayFragment.EXTRA_RESULT, model.mResult);
|
||||||
|
mContext.startActivity(intent);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return the size of your dataset (invoked by the layout manager)
|
// Return the size of your dataset (invoked by the layout manager)
|
||||||
@ -719,9 +749,11 @@ public class DecryptListFragment
|
|||||||
public TextView vSignatureName;
|
public TextView vSignatureName;
|
||||||
public TextView vSignatureMail;
|
public TextView vSignatureMail;
|
||||||
public TextView vSignatureAction;
|
public TextView vSignatureAction;
|
||||||
|
|
||||||
public View vContextMenu;
|
public View vContextMenu;
|
||||||
|
|
||||||
|
public TextView vErrorMsg;
|
||||||
|
public ImageView vErrorViewLog;
|
||||||
|
|
||||||
public ViewHolder(View itemView) {
|
public ViewHolder(View itemView) {
|
||||||
super(itemView);
|
super(itemView);
|
||||||
|
|
||||||
@ -747,6 +779,9 @@ public class DecryptListFragment
|
|||||||
|
|
||||||
vContextMenu = itemView.findViewById(R.id.context_menu);
|
vContextMenu = itemView.findViewById(R.id.context_menu);
|
||||||
|
|
||||||
|
vErrorMsg = (TextView) itemView.findViewById(R.id.result_error_msg);
|
||||||
|
vErrorViewLog = (ImageView) itemView.findViewById(R.id.result_error_log);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -23,7 +23,8 @@
|
|||||||
android:inAnimation="@anim/fade_in"
|
android:inAnimation="@anim/fade_in"
|
||||||
android:outAnimation="@anim/fade_out"
|
android:outAnimation="@anim/fade_out"
|
||||||
android:id="@+id/view_animator"
|
android:id="@+id/view_animator"
|
||||||
custom:initialView="1"
|
android:measureAllChildren="false"
|
||||||
|
custom:initialView="2"
|
||||||
>
|
>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
@ -243,6 +244,53 @@
|
|||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
tools:ignore="UseCompoundDrawables">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:padding="4dp"
|
||||||
|
android:src="@drawable/status_signature_invalid_cutout_24dp"
|
||||||
|
android:tint="@color/android_red_light"
|
||||||
|
android:layout_gravity="center_vertical" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/result_error_msg"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||||
|
android:layout_marginLeft="8dp"
|
||||||
|
android:layout_marginTop="8dp"
|
||||||
|
android:layout_marginBottom="8dp"
|
||||||
|
android:text=""
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
tools:text="Error processing data!" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/result_error_log"
|
||||||
|
android:scaleType="center"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:clickable="true"
|
||||||
|
android:padding="6dp"
|
||||||
|
android:background="?android:selectableItemBackground"
|
||||||
|
android:src="@drawable/ic_view_list_grey_24dp"
|
||||||
|
android:layout_gravity="center_vertical" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
</org.sufficientlysecure.keychain.ui.widget.ToolableViewAnimator>
|
</org.sufficientlysecure.keychain.ui.widget.ToolableViewAnimator>
|
||||||
|
|
||||||
</android.support.v7.widget.CardView>
|
</android.support.v7.widget.CardView>
|
Loading…
Reference in New Issue
Block a user