diff options
author | stefan-niedermann <info@niedermann.it> | 2020-02-24 12:54:19 +0300 |
---|---|---|
committer | stefan-niedermann <info@niedermann.it> | 2020-02-24 12:54:19 +0300 |
commit | 8dbc3d6e53175a672d05a11cdebe7db9c8ba48f7 (patch) | |
tree | 749a3104056c03a5bc43c74b862fb35dd17534c3 | |
parent | 01ac949fa62dde68d5491db475f1fae32c0e6358 (diff) |
Basic image viewer implementation
11 files changed, 114 insertions, 16 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/AccessControlDialogFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/AccessControlDialogFragment.java index fd302c323..34c289772 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/AccessControlDialogFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/AccessControlDialogFragment.java @@ -53,7 +53,7 @@ public class AccessControlDialogFragment extends DialogFragment implements @Override public Dialog onCreateDialog(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - Activity activity = Objects.requireNonNull(getActivity()); + Activity activity = requireActivity(); View view = activity.getLayoutInflater().inflate(R.layout.dialog_board_share, null); ButterKnife.bind(this, view); boardId = Objects.requireNonNull(getArguments()).getLong(KEY_BOARD_ID); diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/EditBoardDialogFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/EditBoardDialogFragment.java index 56754ee64..f529ced63 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/EditBoardDialogFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/EditBoardDialogFragment.java @@ -60,7 +60,7 @@ public class EditBoardDialogFragment extends DialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - Activity activity = Objects.requireNonNull(getActivity()); + Activity activity = requireActivity(); View view = activity.getLayoutInflater().inflate(R.layout.dialog_board_create, null); ButterKnife.bind(this, view); Long boardId = Objects.requireNonNull(getArguments()).getLong(KEY_BOARD_ID); diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/AttachmentAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/AttachmentAdapter.java index 279ecd5f9..74a00677e 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/AttachmentAdapter.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/AttachmentAdapter.java @@ -11,6 +11,7 @@ import android.widget.ImageButton; import android.widget.TextView; import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.AppCompatImageView; import androidx.recyclerview.widget.RecyclerView; @@ -57,6 +58,13 @@ public class AttachmentAdapter extends RecyclerView.Adapter<AttachmentAdapter.At public void onBindViewHolder(@NonNull AttachmentViewHolder holder, int position) { Attachment attachment = attachments.get(position); holder.notSyncedYet.setVisibility(attachment.getStatusEnum() == DBStatus.UP_TO_DATE ? View.GONE : View.VISIBLE); + + holder.filename.getRootView().setOnClickListener((event) -> { + Intent openURL = new Intent(android.content.Intent.ACTION_VIEW); + openURL.setData(Uri.parse(account.getUrl() + "/index.php/apps/deck/cards/" + cardRemoteId + "/attachment/" + attachment.getId())); + context.startActivity(openURL); + }); + if (attachment.getMimetype() != null) { if (attachment.getMimetype().startsWith("image")) { // TODO Glide is currently not yet able to use SSO and fails on authentication @@ -66,6 +74,7 @@ public class AttachmentAdapter extends RecyclerView.Adapter<AttachmentAdapter.At .error(R.drawable.ic_image_grey600_24dp) .into(holder.filetype); holder.filetype.setImageResource(R.drawable.ic_image_grey600_24dp); + holder.filename.getRootView().setOnClickListener((v) -> AttachmentDialogFragment.newInstance(uri, attachment.getBasename()).show(((AppCompatActivity) context).getSupportFragmentManager(), "asdf")); } else if (attachment.getMimetype().startsWith("audio")) { holder.filetype.setImageResource(R.drawable.ic_music_note_grey600_24dp); } else if (attachment.getMimetype().startsWith("video")) { @@ -83,11 +92,6 @@ public class AttachmentAdapter extends RecyclerView.Adapter<AttachmentAdapter.At } else { holder.modified.setVisibility(View.GONE); } - holder.filename.getRootView().setOnClickListener((event) -> { - Intent openURL = new Intent(android.content.Intent.ACTION_VIEW); - openURL.setData(Uri.parse(account.getUrl() + "/index.php/apps/deck/cards/" + cardRemoteId + "/attachment/" + attachment.getId())); - context.startActivity(openURL); - }); holder.deleteButton.setOnClickListener((v) -> { new DeleteDialogBuilder(context) .setTitle(context.getString(R.string.delete_something, attachment.getFilename())) diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/AttachmentDialogFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/AttachmentDialogFragment.java new file mode 100644 index 000000000..6aab64f9b --- /dev/null +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/AttachmentDialogFragment.java @@ -0,0 +1,78 @@ +package it.niedermann.nextcloud.deck.ui.card; + +import android.app.Dialog; +import android.os.Bundle; +import android.view.View; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AlertDialog; +import androidx.fragment.app.DialogFragment; + +import com.bumptech.glide.Glide; + +import butterknife.BindView; +import butterknife.ButterKnife; +import it.niedermann.nextcloud.deck.Application; +import it.niedermann.nextcloud.deck.R; + +public class AttachmentDialogFragment extends DialogFragment { + + private static final String BUNDLE_KEY_URL = "url"; + private static final String BUNDLE_KEY_ALT = "alt"; + + @BindView(R.id.image) + ImageView image; + +// @BindView(R.id.progressBar) +// ProgressBar progressBar; + + /** + * Use newInstance()-Method + */ + public AttachmentDialogFragment() { + } + + @NonNull + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + View view = requireActivity().getLayoutInflater().inflate(R.layout.dialog_attachment, null); + ButterKnife.bind(this, view); + + Glide.with(this) +// .addDefaultRequestListener(new RequestListener<Object>() { +// @Override +// public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Object> target, boolean isFirstResource) { +// image.setVisibility(View.VISIBLE); +// progressBar.setVisibility(View.GONE); +// return false; +// } +// +// @Override +// public boolean onResourceReady(Object resource, Object model, Target<Object> target, DataSource dataSource, boolean isFirstResource) { +// progressBar.setVisibility(View.GONE); +// image.setVisibility(View.VISIBLE); +// return false; +// } +// }) + .load(requireArguments().getString(BUNDLE_KEY_URL)) + .into(image); + image.setContentDescription(requireArguments().getString(BUNDLE_KEY_ALT)); + image.getRootView().setOnClickListener((v) -> dismiss()); + + return new AlertDialog.Builder(requireActivity(), Application.getAppTheme(getContext()) ? R.style.DialogDarkTheme : R.style.ThemeOverlay_AppCompat_Dialog_Alert) + .setView(view) + .create(); + } + + public static AttachmentDialogFragment newInstance(@NonNull String url, @NonNull String alt) { + Bundle bundle = new Bundle(); + bundle.putString(BUNDLE_KEY_URL, url); + bundle.putString(BUNDLE_KEY_ALT, alt); + + AttachmentDialogFragment fragment = new AttachmentDialogFragment(); + fragment.setArguments(bundle); + + return fragment; + } +} diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardActivityFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardActivityFragment.java index cadaa33f1..9b1412be9 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardActivityFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardActivityFragment.java @@ -81,7 +81,7 @@ public class CardActivityFragment extends Fragment { long localId = args.getLong(BUNDLE_KEY_LOCAL_ID); boolean canEdit = args.getBoolean(BUNDLE_KEY_CAN_EDIT); - SyncManager syncManager = new SyncManager(Objects.requireNonNull(getActivity())); + SyncManager syncManager = new SyncManager(requireActivity()); syncManager.getCardByLocalId(accountId, localId).observe(CardActivityFragment.this, (fullCard) -> { syncManager.syncActivitiesForCard(fullCard.getCard()).observe(CardActivityFragment.this, (activities -> { if (activities == null || activities.size() == 0) { diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardAttachmentsFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardAttachmentsFragment.java index e4b427709..a26bac420 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardAttachmentsFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardAttachmentsFragment.java @@ -21,7 +21,6 @@ import androidx.recyclerview.widget.RecyclerView; import com.google.android.material.floatingactionbutton.FloatingActionButton; import java.io.File; -import java.util.Objects; import butterknife.BindView; import butterknife.ButterKnife; @@ -73,15 +72,15 @@ public class CardAttachmentsFragment extends Fragment implements AttachmentAdapt cardId = args.getLong(BUNDLE_KEY_LOCAL_ID); boolean canEdit = args.getBoolean(BUNDLE_KEY_CAN_EDIT); - syncManager = new SyncManager(Objects.requireNonNull(getActivity())); - syncManager.getCardByLocalId(accountId, cardId).observe(CardAttachmentsFragment.this, (fullCard) -> { + syncManager = new SyncManager(requireActivity()); + syncManager.getCardByLocalId(accountId, cardId).observe(getViewLifecycleOwner(), (fullCard) -> { if (fullCard.getAttachments().size() == 0) { this.emptyContentView.setVisibility(View.VISIBLE); this.attachmentsList.setVisibility(View.GONE); } else { this.emptyContentView.setVisibility(View.GONE); this.attachmentsList.setVisibility(View.VISIBLE); - syncManager.readAccount(accountId).observe(CardAttachmentsFragment.this, (Account account) -> { + syncManager.readAccount(accountId).observe(getViewLifecycleOwner(), (Account account) -> { RecyclerView.Adapter adapter = new AttachmentAdapter(this, account, fullCard.getCard().getId(), fullCard.getAttachments()); attachmentsList.setAdapter(adapter); }); diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardDetailsFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardDetailsFragment.java index 6f9dd467f..5aa940e7c 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardDetailsFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardDetailsFragment.java @@ -166,7 +166,7 @@ public class CardDetailsFragment extends Fragment implements DatePickerDialog.On } } - avatarSize = DimensionUtil.getAvatarDimension(Objects.requireNonNull(getContext())); + avatarSize = DimensionUtil.getAvatarDimension(requireContext()); avatarLayoutParams = new LinearLayout.LayoutParams(avatarSize, avatarSize); avatarLayoutParams.setMargins(0, 0, getContext().getResources().getDimensionPixelSize(R.dimen.standard_half_padding), 0); diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CommentDialogFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CommentDialogFragment.java index af2239ab9..f67863a84 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CommentDialogFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CommentDialogFragment.java @@ -46,7 +46,7 @@ public class CommentDialogFragment extends DialogFragment { @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { - View view = Objects.requireNonNull(getActivity()).getLayoutInflater().inflate(R.layout.dialog_add_comment, null); + View view = requireActivity().getLayoutInflater().inflate(R.layout.dialog_add_comment, null); ButterKnife.bind(this, view); return new AlertDialog.Builder(getActivity(), Application.getAppTheme(getContext()) ? R.style.DialogDarkTheme : R.style.ThemeOverlay_AppCompat_Dialog_Alert) diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/EditStackDialogFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/EditStackDialogFragment.java index a8d4c5f17..908137005 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/EditStackDialogFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/EditStackDialogFragment.java @@ -50,7 +50,7 @@ public class EditStackDialogFragment extends DialogFragment { @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { - View view = Objects.requireNonNull(getActivity()).getLayoutInflater().inflate(R.layout.dialog_stack_create, null); + View view = requireActivity().getLayoutInflater().inflate(R.layout.dialog_stack_create, null); ButterKnife.bind(this, view); AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), Application.getAppTheme(getContext()) ? R.style.DialogDarkTheme : R.style.ThemeOverlay_AppCompat_Dialog_Alert) diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/StackFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/StackFragment.java index ba44e5b8d..69e716bfa 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/StackFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/StackFragment.java @@ -85,7 +85,7 @@ public class StackFragment extends Fragment { account = (Account) getArguments().getSerializable(KEY_ACCOUNT); canEdit = getArguments().getBoolean(KEY_HAS_EDIT_PERMISSION); - activity = Objects.requireNonNull(getActivity()); + activity = requireActivity(); syncManager = new SyncManager(activity); diff --git a/app/src/main/res/layout/dialog_attachment.xml b/app/src/main/res/layout/dialog_attachment.xml new file mode 100644 index 000000000..46ef65bed --- /dev/null +++ b/app/src/main/res/layout/dialog_attachment.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8"?> +<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="wrap_content" + android:layout_height="wrap_content"> + + <ImageView + android:id="@+id/image" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:contentDescription="@null" /> + +<!-- <ProgressBar--> +<!-- android:id="@+id/progressBar"--> +<!-- android:visibility="visible"--> +<!-- android:layout_width="wrap_content"--> +<!-- android:layout_height="wrap_content" />--> +</FrameLayout>
\ No newline at end of file |