From 656f1d4cc1596a7b6b5fc4b2aa28d8726956acc7 Mon Sep 17 00:00:00 2001 From: stefan-niedermann Date: Sat, 7 Mar 2020 18:11:14 +0100 Subject: Refactor attachment viewer to own activity with transition animation --- app/src/main/AndroidManifest.xml | 3 +- .../nextcloud/deck/ui/AttachmentsActivity.java | 343 +++------------------ .../nextcloud/deck/ui/card/AttachmentAdapter.java | 43 ++- .../deck/ui/card/AttachmentDialogFragment.java | 83 ----- .../deck/ui/card/CardAttachmentsFragment.java | 12 +- .../nextcloud/deck/util/AttachmentUtil.java | 15 + app/src/main/res/layout/activity_attachments.xml | 36 +++ app/src/main/res/layout/dialog_attachment.xml | 18 -- .../main/res/layout/item_attachment_default.xml | 1 + app/src/main/res/layout/item_attachment_image.xml | 2 + app/src/main/res/values/setup.xml | 3 + app/src/main/res/values/styles.xml | 23 +- 12 files changed, 158 insertions(+), 424 deletions(-) delete mode 100644 app/src/main/java/it/niedermann/nextcloud/deck/ui/card/AttachmentDialogFragment.java create mode 100644 app/src/main/java/it/niedermann/nextcloud/deck/util/AttachmentUtil.java create mode 100644 app/src/main/res/layout/activity_attachments.xml delete mode 100644 app/src/main/res/layout/dialog_attachment.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 727b1df58..1433653a4 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -48,8 +48,7 @@ { - accountId = account.getId(); - binding.selectBoardWrapper.setVisibility(View.VISIBLE); - syncManager.getBoards(account.getId()).observe(this, (List boardsList) -> { - for (Board board : boardsList) { - if (!board.isPermissionEdit()) { - boardsList.remove(board); - } - } - Board[] boardsArray = new Board[boardsList.size()]; - boardsArray = boardsList.toArray(boardsArray); - SpinnerAdapter adapter = new BoardAdapter(this, boardsArray); - binding.boardSelector.setAdapter(adapter); - - SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); - long lastBoardId = sharedPreferences.getLong(getString(R.string.shared_preference_last_board_for_account_) + accountId, 0L); - DeckLog.log("--- Read: shared_preference_last_board_for_account_" + account.getId() + " | " + lastBoardId); - if (lastBoardId != 0L) { - for (int i = 0; i < boardsArray.length; i++) { - if (boardsArray[i].getLocalId() == lastBoardId) { - binding.boardSelector.setSelection(i); + long accountId = extras.getLong(BUNDLE_KEY_ACCOUNT_ID); + long cardLocalId = extras.getLong(BUNDLE_KEY_LOCAL_ID); + long currentAttachment = extras.getLong(BUNDLE_KEY_CURRENT_ATTACHMENT_LOCAL_ID); + + SyncManager syncManager = new SyncManager(this); + + syncManager.readAccount(accountId).observe(this, account -> + syncManager.getCardByLocalId(accountId, cardLocalId).observe(this, fullCard -> { + binding.toolbar.setSubtitle(fullCard.getCard().getTitle()); + List attachments = fullCard.getAttachments(); + if (fullCard.getAttachments().size() == 0) { + DeckLog.logError(new IllegalStateException(AttachmentsActivity.class.getSimpleName() + " called, but card " + fullCard.getLocalId() + "has no attachments")); + finish(); + } else { + if (currentAttachment != 0L) { + for (Attachment a : attachments) { + if (a.getLocalId() == currentAttachment) { + Glide.with(this) + .load(AttachmentUtil.getUrl(account.getUrl(), fullCard.getId(), a.getId())) + .into(binding.image); + binding.toolbar.setTitle(a.getBasename()); + break; } } + } else { + DeckLog.logError(new IllegalStateException("No " + BUNDLE_KEY_CURRENT_ATTACHMENT_LOCAL_ID + " was provided. Falling back to displaying first image.")); + Glide.with(this) + .load(AttachmentUtil.getUrl(account.getUrl(), fullCard.getId(), attachments.get(0).getId())) + .into(binding.image); + binding.toolbar.setTitle(attachments.get(0).getBasename()); } - binding.boardSelector.setOnItemSelectedListener(this); - }); - }); - } catch (NextcloudFilesAppAccountNotFoundException | NoCurrentAccountSelectedException e) { - e.printStackTrace(); - } - } else { - if (accountId == 0L) { - throw new IllegalArgumentException("No accountId given"); - } - observeOnce(syncManager.getFullBoardById(accountId, boardId), AttachmentsActivity.this, (fullBoard -> { - canEdit = fullBoard.getBoard().isPermissionEdit(); - invalidateOptionsMenu(); - if (createMode) { - fullCard = new FullCard(); - originalCard = new FullCard(); - fullCard.setLabels(new ArrayList<>()); - fullCard.setAssignedUsers(new ArrayList<>()); - Card card = new Card(); - card.setStackId(stackId); - fullCard.setCard(card); - setupViewPager(); - setupTitle(createMode); - } else { - observeOnce(syncManager.getCardByLocalId(accountId, localId), AttachmentsActivity.this, (next) -> { - fullCard = next; - originalCard = new FullCard(fullCard); - setupViewPager(); - setupTitle(createMode); - }); - } - })); - } - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - if (canEdit) { - MenuInflater inflater = getMenuInflater(); - inflater.inflate(R.menu.card_edit_menu, menu); - } else { - menu.clear(); - } - return super.onCreateOptionsMenu(menu); - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - if (item.getItemId() == R.id.action_card_save) { - saveAndFinish(); - } - return super.onOptionsItemSelected(item); - } - - private void saveAndFinish() { - if (!pendingCreation) { - pendingCreation = true; - if (fullCard.getCard().getTitle() == null || fullCard.getCard().getTitle().isEmpty()) { - fullCard.getCard().setTitle(CardUtil.generateTitleFromDescription(fullCard.getCard().getDescription())); - } - if (fullCard.getCard().getTitle().isEmpty()) { - new AlertDialog.Builder(this) - .setTitle("Title is mandatory") - .setMessage("Provide at least a title or description") - .setPositiveButton(android.R.string.ok, null) - .setOnDismissListener(dialog -> { - pendingCreation = false; - }) - .show(); - } else { - if (createMode) { - observeOnce(syncManager.createFullCard(accountId, boardId, stackId, fullCard), AttachmentsActivity.this, (card) -> super.finish()); - } else { - observeOnce(syncManager.updateCard(fullCard), AttachmentsActivity.this, (card) -> super.finish()); - } - } - } - } - - private void setupViewPager() { - binding.tabLayout.removeAllTabs(); - binding.tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); - CardTabAdapter adapter = new CardTabAdapter(getSupportFragmentManager(), getLifecycle(), accountId, localId, boardId, canEdit); - binding.pager.setOffscreenPageLimit(2); - binding.pager.setAdapter(adapter); - new TabLayoutMediator(binding.tabLayout, binding.pager, (tab, position) -> tab.setText(tabTitles[position])).attach(); - } - - private void setupTitle(boolean createMode) { - binding.title.setText(fullCard.getCard().getTitle()); - if (canEdit) { - if (createMode) { - binding.title.requestFocus(); - getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); - if (fullCard.getCard().getTitle() != null) { - binding.title.setSelection(fullCard.getCard().getTitle().length()); - } - } - binding.titleTextInputLayout.setHint(getString(createMode ? R.string.simple_add : R.string.edit)); - binding.title.addTextChangedListener(new TextWatcher() { - @Override - public void onTextChanged(CharSequence s, int start, int before, int count) { - fullCard.getCard().setTitle(binding.title.getText().toString()); - } - - @Override - public void beforeTextChanged(CharSequence s, int start, int count, int after) { - } - - @Override - public void afterTextChanged(Editable s) { - } - }); - } else { - binding.titleTextInputLayout.setHintEnabled(false); - binding.title.setEnabled(false); - } - } - - @Override - public void onDescriptionChanged(String description) { - this.fullCard.getCard().setDescription(description); - } - - @Override - public void onUserAdded(User user) { - this.fullCard.getAssignedUsers().add(user); - } - - @Override - public void onUserRemoved(User user) { - this.fullCard.getAssignedUsers().remove(user); - } - - @Override - public void onLabelAdded(Label label) { - this.fullCard.getLabels().add(label); - } - - @Override - public void onLabelRemoved(Label label) { - this.fullCard.getLabels().remove(label); - } - - @Override - public void onDueDateChanged(Date dueDate) { - this.fullCard.getCard().setDueDate(dueDate); - } - - @Override - public boolean onSupportNavigateUp() { - finish(); // close this activity as oppose to navigating up - return true; - } - - @Override - public void onBackPressed() { - finish(); - } - - @Override - public void finish() { - if (!fullCard.equals(originalCard) && canEdit) { - new AlertDialog.Builder(this) - .setTitle(R.string.simple_save) - .setMessage(R.string.do_you_want_to_save_your_changes) - .setPositiveButton(R.string.simple_save, (dialog, whichButton) -> saveAndFinish()) - .setNegativeButton(R.string.simple_discard, (dialog, whichButton) -> super.finish()).show(); - } else { - super.finish(); - } - } - - @Override - public void onItemSelected(AdapterView parent, View view, int position, long id) { - boardId = ((Board) binding.boardSelector.getItemAtPosition(position)).getLocalId(); - observeOnce(syncManager.getFullBoardById(accountId, boardId), AttachmentsActivity.this, (fullBoard -> { - canEdit = fullBoard.getBoard().isPermissionEdit(); - - SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); - long savedStackId = sharedPreferences.getLong(getString(R.string.shared_preference_last_stack_for_account_and_board_) + accountId + "_" + boardId, 0L); - DeckLog.log("--- Read: shared_preference_last_stack_for_account_and_board" + accountId + "_" + boardId + " | " + savedStackId); - if (savedStackId == 0L) { - observeOnce(syncManager.getStacksForBoard(accountId, boardId), AttachmentsActivity.this, (stacks -> { - if (stacks != null && stacks.size() > 0) { - stackId = stacks.get(0).getLocalId(); } })); - } else { - stackId = savedStackId; - } - if (fullCard == null) { - invalidateOptionsMenu(); - fullCard = new FullCard(); - fullCard.setLabels(new ArrayList<>()); - fullCard.setAssignedUsers(new ArrayList<>()); - Card card = new Card(); - card.setStackId(stackId); - fullCard.setCard(card); - setupViewPager(); - setupTitle(createMode); - } - })); } @Override - public void onNothingSelected(AdapterView parent) { - + public boolean onTouchEvent(MotionEvent event) { + supportFinishAfterTransition(); + return true; } @Override - public void onCommentAdded(String comment) { - syncManager.addCommentToCard(accountId, boardId, localId, comment); + public boolean onSupportNavigateUp() { + supportFinishAfterTransition(); + return true; } } 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 1ea2c43e1..7cd953787 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 @@ -6,20 +6,22 @@ import android.content.ClipboardManager; import android.content.Context; import android.content.Intent; import android.net.Uri; +import android.os.Build; import android.text.format.Formatter; +import android.transition.Explode; import android.util.Log; import android.view.LayoutInflater; +import android.view.MenuInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.Toast; import androidx.annotation.NonNull; -import androidx.appcompat.app.AppCompatActivity; +import androidx.core.app.ActivityOptionsCompat; import androidx.recyclerview.widget.RecyclerView; import com.bumptech.glide.Glide; -import com.bumptech.glide.load.resource.bitmap.CenterCrop; import java.util.List; @@ -29,31 +31,40 @@ import it.niedermann.nextcloud.deck.databinding.ItemAttachmentImageBinding; import it.niedermann.nextcloud.deck.model.Account; import it.niedermann.nextcloud.deck.model.Attachment; import it.niedermann.nextcloud.deck.model.enums.DBStatus; +import it.niedermann.nextcloud.deck.ui.AttachmentsActivity; +import it.niedermann.nextcloud.deck.util.AttachmentUtil; import it.niedermann.nextcloud.deck.util.DateUtil; import it.niedermann.nextcloud.deck.util.DeleteDialogBuilder; import static android.content.Context.CLIPBOARD_SERVICE; import static androidx.constraintlayout.widget.Constraints.TAG; +import static it.niedermann.nextcloud.deck.ui.AttachmentsActivity.BUNDLE_KEY_CURRENT_ATTACHMENT_LOCAL_ID; +import static it.niedermann.nextcloud.deck.ui.card.CardAdapter.BUNDLE_KEY_ACCOUNT_ID; +import static it.niedermann.nextcloud.deck.ui.card.CardAdapter.BUNDLE_KEY_LOCAL_ID; public class AttachmentAdapter extends RecyclerView.Adapter { public static final int VIEW_TYPE_DEFAULT = 2; public static final int VIEW_TYPE_IMAGE = 1; + private final MenuInflater menuInflator; private final Account account; private final long cardRemoteId; + private final long cardLocalId; @NonNull private List attachments; @NonNull private AttachmentDeletedListener attachmentDeletedListener; private Context context; - AttachmentAdapter(@NonNull AttachmentDeletedListener attachmentDeletedListener, @NonNull Account account, long cardRemoteId, @NonNull List attachments) { + AttachmentAdapter(@NonNull MenuInflater menuInflator, @NonNull AttachmentDeletedListener attachmentDeletedListener, @NonNull Account account, long cardLocalId, long cardRemoteId, @NonNull List attachments) { super(); + this.menuInflator = menuInflator; this.attachmentDeletedListener = attachmentDeletedListener; this.attachments = attachments; this.account = account; this.cardRemoteId = cardRemoteId; + this.cardLocalId = cardLocalId; } @NonNull @@ -75,10 +86,10 @@ public class AttachmentAdapter extends RecyclerView.Adapter { - ((Activity) context).getMenuInflater().inflate(R.menu.attachment_menu, menu); + menuInflator.inflate(R.menu.attachment_menu, menu); menu.findItem(R.id.delete).setOnMenuItemClickListener(item -> { new DeleteDialogBuilder(context) .setTitle(context.getString(R.string.delete_something, attachment.getFilename())) @@ -89,7 +100,7 @@ public class AttachmentAdapter extends RecyclerView.Adapter { - final android.content.ClipboardManager clipboardManager = (ClipboardManager) context.getSystemService(CLIPBOARD_SERVICE); + final ClipboardManager clipboardManager = (ClipboardManager) context.getSystemService(CLIPBOARD_SERVICE); ClipData clipData = ClipData.newPlainText(attachment.getFilename(), uri); if (clipboardManager != null) { clipboardManager.setPrimaryClip(clipData); @@ -103,14 +114,24 @@ public class AttachmentAdapter extends RecyclerView.Adapter AttachmentDialogFragment.newInstance(uri, attachment.getBasename()).show(((AppCompatActivity) context).getSupportFragmentManager(), "preview")); + holder.getPreview().getRootView().setOnClickListener((v) -> { + Intent intent = new Intent(context, AttachmentsActivity.class); + intent.putExtra(BUNDLE_KEY_ACCOUNT_ID, account.getId()); + intent.putExtra(BUNDLE_KEY_LOCAL_ID, cardLocalId); + intent.putExtra(BUNDLE_KEY_CURRENT_ATTACHMENT_LOCAL_ID, attachment.getLocalId()); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && context instanceof Activity) { + ((Activity) context).getWindow().setSharedElementEnterTransition(new Explode()); + context.startActivity(intent, ActivityOptionsCompat.makeSceneTransitionAnimation((Activity) context, holder.getPreview(), context.getString(R.string.transition_attachment_preview)).toBundle()); + } else { + context.startActivity(intent); + } + }); } else if (attachment.getMimetype().startsWith("audio")) { holder.getPreview().setImageResource(R.drawable.ic_music_note_grey600_24dp); } else if (attachment.getMimetype().startsWith("video")) { @@ -127,8 +148,8 @@ public class AttachmentAdapter extends RecyclerView.Adapter { - Intent openURL = new Intent(android.content.Intent.ACTION_VIEW); - openURL.setData(Uri.parse(account.getUrl() + "/index.php/apps/deck/cards/" + cardRemoteId + "/attachment/" + attachment.getId())); + Intent openURL = new Intent(Intent.ACTION_VIEW); + openURL.setData(Uri.parse(AttachmentUtil.getUrl(account.getUrl(), cardRemoteId, attachment.getId()))); context.startActivity(openURL); }); defaultHolder.binding.filename.setText(attachment.getBasename()); 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 deleted file mode 100644 index da2086d4c..000000000 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/AttachmentDialogFragment.java +++ /dev/null @@ -1,83 +0,0 @@ -package it.niedermann.nextcloud.deck.ui.card; - -import android.app.Dialog; -import android.graphics.Color; -import android.graphics.drawable.ColorDrawable; -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.app.AlertDialog; -import androidx.fragment.app.DialogFragment; - -import com.bumptech.glide.Glide; - -import java.util.Objects; - -import it.niedermann.nextcloud.deck.Application; -import it.niedermann.nextcloud.deck.R; -import it.niedermann.nextcloud.deck.databinding.DialogAttachmentBinding; - -public class AttachmentDialogFragment extends DialogFragment { - - private static final String BUNDLE_KEY_URL = "url"; - private static final String BUNDLE_KEY_ALT = "alt"; - - /** - * Use newInstance()-Method - */ - public AttachmentDialogFragment() { - } - - @NonNull - @Override - public Dialog onCreateDialog(Bundle savedInstanceState) { - DialogAttachmentBinding binding = DialogAttachmentBinding.inflate(requireActivity().getLayoutInflater()); - - Glide.with(this) -// .addDefaultRequestListener(new RequestListener() { -// @Override -// public boolean onLoadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) { -// image.setVisibility(View.VISIBLE); -// progressBar.setVisibility(View.GONE); -// return false; -// } -// -// @Override -// public boolean onResourceReady(Object resource, Object model, Target target, DataSource dataSource, boolean isFirstResource) { -// progressBar.setVisibility(View.GONE); -// image.setVisibility(View.VISIBLE); -// return false; -// } -// }) - .load(requireArguments().getString(BUNDLE_KEY_URL)) - .into(binding.image); - binding.image.setContentDescription(requireArguments().getString(BUNDLE_KEY_ALT)); - binding.image.getRootView().setOnClickListener((v) -> dismiss()); - - return new AlertDialog.Builder(requireActivity(), Application.getAppTheme(getContext()) ? R.style.DialogDarkTheme : R.style.ThemeOverlay_AppCompat_Dialog_Alert) - .setView(binding.getRoot()) - .create(); - } - - @Nullable - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - Objects.requireNonNull(requireDialog().getWindow()).setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); - return super.onCreateView(inflater, container, savedInstanceState); - } - - 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/CardAttachmentsFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/CardAttachmentsFragment.java index a8a126b67..33e5a6306 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 @@ -66,7 +66,13 @@ public class CardAttachmentsFragment extends Fragment implements AttachmentAdapt this.binding.emptyContentView.setVisibility(View.GONE); this.binding.attachmentsList.setVisibility(View.VISIBLE); syncManager.readAccount(accountId).observe(getViewLifecycleOwner(), (Account account) -> { - RecyclerView.Adapter adapter = new AttachmentAdapter(this, account, fullCard.getCard().getId(), fullCard.getAttachments()); + RecyclerView.Adapter adapter = new AttachmentAdapter( + requireActivity().getMenuInflater(), + this, + account, + fullCard.getCard().getLocalId(), + fullCard.getCard().getId(), + fullCard.getAttachments()); binding.attachmentsList.setAdapter(adapter); GridLayoutManager glm = new GridLayoutManager(getActivity(), 3); @@ -130,15 +136,13 @@ public class CardAttachmentsFragment extends Fragment implements AttachmentAdapt public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_CODE_ADD_ATTACHMENT && resultCode == Activity.RESULT_OK) { - Uri uri = null; if (data != null) { - uri = data.getData(); + Uri uri = data.getData(); Log.i(TAG, "Uri: " + uri.toString()); String path = FileUtils.getPath(getContext(), uri); File uploadFile = new File(path); syncManager.addAttachmentToCard(accountId, cardId, Attachment.getMimetypeForUri(getContext(), uri), uploadFile); } - } } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/util/AttachmentUtil.java b/app/src/main/java/it/niedermann/nextcloud/deck/util/AttachmentUtil.java new file mode 100644 index 000000000..d123ee4c6 --- /dev/null +++ b/app/src/main/java/it/niedermann/nextcloud/deck/util/AttachmentUtil.java @@ -0,0 +1,15 @@ +package it.niedermann.nextcloud.deck.util; + +/** + * Created by stefan on 07.03.20. + */ + +public class AttachmentUtil { + + private AttachmentUtil() { + } + + public static String getUrl(String accountUrl, long cardRemoteId, long attachmentRemoteId) { + return accountUrl + "/index.php/apps/deck/cards/" + cardRemoteId + "/attachment/" + attachmentRemoteId; + } +} diff --git a/app/src/main/res/layout/activity_attachments.xml b/app/src/main/res/layout/activity_attachments.xml new file mode 100644 index 000000000..4d1fabe17 --- /dev/null +++ b/app/src/main/res/layout/activity_attachments.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_attachment.xml b/app/src/main/res/layout/dialog_attachment.xml deleted file mode 100644 index 4b3f96008..000000000 --- a/app/src/main/res/layout/dialog_attachment.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_attachment_default.xml b/app/src/main/res/layout/item_attachment_default.xml index f58783559..11d147d92 100644 --- a/app/src/main/res/layout/item_attachment_default.xml +++ b/app/src/main/res/layout/item_attachment_default.xml @@ -20,6 +20,7 @@ android:layout_height="wrap_content" android:layout_gravity="center" android:layout_margin="@dimen/standard_half_margin" + android:transitionName="@string/transition_attachment_preview" app:srcCompat="@drawable/ic_attach_file_grey600_24dp" /> 0 6 4 + + + transition_attachment_preview \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 300a9e22a..1e3be799f 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -1,4 +1,4 @@ - + @@ -38,7 +38,7 @@ + + -- cgit v1.2.3