Yuito-app-android/app/src/main/res/layout/item_status_detailed.xml

592 lines
26 KiB
XML
Raw Normal View History

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:sparkbutton="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/status_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clipChildren="false"
android:clipToPadding="false"
2017-11-30 20:12:09 +01:00
android:paddingLeft="14dp"
android:paddingRight="14dp">
<ImageView
android:id="@+id/status_avatar"
android:layout_width="48dp"
android:layout_height="48dp"
2017-11-30 20:12:09 +01:00
android:layout_marginTop="14dp"
android:layout_marginEnd="14dp"
android:contentDescription="@string/action_view_profile"
android:importantForAccessibility="no"
android:scaleType="centerCrop"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:src="@drawable/avatar_default" />
<ImageView
android:id="@+id/status_avatar_inset"
android:layout_width="24dp"
android:layout_height="24dp"
android:contentDescription="@null"
android:importantForAccessibility="no"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@id/status_avatar"
app:layout_constraintEnd_toEndOf="@id/status_avatar"
tools:src="@color/accent"
tools:visibility="visible" />
<androidx.emoji.widget.EmojiTextView
android:id="@+id/status_display_name"
android:layout_width="wrap_content"
2017-11-30 20:12:09 +01:00
android:layout_height="wrap_content"
android:layout_marginStart="14dp"
android:layout_marginTop="10dp"
android:layout_marginEnd="14dp"
android:ellipsize="end"
android:importantForAccessibility="no"
android:maxLines="1"
android:textColor="?android:textColorPrimary"
android:textSize="?attr/status_text_medium"
android:textStyle="normal|bold"
app:layout_constrainedWidth="true"
app:layout_constraintBottom_toTopOf="@id/status_username"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintStart_toEndOf="@id/status_avatar"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_chainStyle="packed"
tools:text="Display Name" />
<TextView
android:id="@+id/status_username"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="14dp"
android:layout_marginTop="4dp"
android:layout_marginEnd="14dp"
android:ellipsize="end"
android:importantForAccessibility="no"
android:maxLines="1"
android:textColor="?android:textColorSecondary"
android:textSize="?attr/status_text_medium"
app:layout_constrainedWidth="true"
app:layout_constraintBottom_toBottomOf="@id/status_avatar"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintStart_toEndOf="@id/status_avatar"
app:layout_constraintTop_toBottomOf="@id/status_display_name"
tools:text="\@ConnyDuck\@mastodon.social" />
<androidx.emoji.widget.EmojiTextView
android:id="@+id/status_content_warning_description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:hyphenationFrequency="full"
android:importantForAccessibility="no"
android:lineSpacingMultiplier="1.1"
android:textColor="?android:textColorPrimary"
android:textSize="?attr/status_text_large"
2019-02-11 16:59:01 +01:00
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/status_avatar"
2018-04-01 15:44:53 +02:00
tools:text="CW this is a long long long long long long long long content warning" />
<ToggleButton
android:id="@+id/status_content_warning_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
2018-04-01 15:44:53 +02:00
android:layout_marginTop="4dp"
android:layout_marginBottom="4dp"
android:background="?attr/content_warning_button"
android:importantForAccessibility="no"
android:minWidth="160dp"
android:minHeight="0dp"
android:paddingLeft="16dp"
android:paddingTop="4dp"
android:paddingRight="16dp"
android:paddingBottom="4dp"
android:textAllCaps="true"
android:textOff="@string/status_content_warning_show_more"
android:textOn="@string/status_content_warning_show_less"
android:textSize="?attr/status_text_large"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/status_content_warning_description" />
<androidx.emoji.widget.EmojiTextView
android:id="@+id/status_content"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:layout_marginBottom="4dp"
android:focusable="true"
android:hyphenationFrequency="full"
android:importantForAccessibility="no"
2017-11-30 20:12:09 +01:00
android:lineSpacingMultiplier="1.1"
android:textColor="?android:textColorPrimary"
android:textSize="?attr/status_text_large"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/status_content_warning_button"
tools:text="Status content. Can be pretty long. " />
2019-09-03 16:08:13 +02:00
<include
android:id="@+id/status_quote_inline_container"
layout="@layout/view_quote_inline"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="4dp"
android:layout_marginStart="4dp"
android:layout_marginTop="16dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/status_content" />
<LinearLayout
android:id="@+id/card_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:background="@drawable/card_frame"
android:clipChildren="true"
android:foreground="?attr/selectableItemBackground"
android:minHeight="80dp"
android:orientation="vertical"
2019-09-03 16:08:13 +02:00
app:layout_constraintTop_toBottomOf="@+id/status_quote_inline_container"
tools:visibility="gone">
<ImageView
android:id="@+id/card_image"
android:layout_width="match_parent"
android:layout_height="300dp"
android:layout_margin="1dp"
android:background="?attr/card_background_color"
android:importantForAccessibility="no"
android:scaleType="center" />
<LinearLayout
android:id="@+id/card_info"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="6dp"
android:paddingTop="6dp"
android:paddingRight="6dp"
android:paddingBottom="6dp">
<androidx.emoji.widget.EmojiTextView
android:id="@+id/card_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="4dp"
android:ellipsize="end"
android:fontFamily="sans-serif-medium"
android:lines="1"
android:textColor="?android:textColorSecondary"
android:textSize="?attr/status_text_medium" />
<androidx.emoji.widget.EmojiTextView
android:id="@+id/card_description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="4dp"
android:ellipsize="end"
android:lineSpacingMultiplier="1.1"
android:maxLines="2"
android:textColor="?android:textColorSecondary"
android:textSize="?attr/status_text_medium" />
<TextView
android:id="@+id/card_link"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:lines="1"
android:textColor="?android:textColorTertiary"
android:textSize="?attr/status_text_medium" />
</LinearLayout>
</LinearLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/status_media_preview_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:layout_marginBottom="4dp"
android:importantForAccessibility="noHideDescendants"
app:layout_constraintTop_toBottomOf="@id/card_view">
Set image previews correctly according to their focal points (#899) * Add serialization of the meta-data and focus objects These objects are added in some attachments. This commit adds data classes which are able to serialize these (partially) in preparation for the ability to honour the focal point information in image previews. * Implement correctly honouring the focal point meta-data in previews This commit adds code which ensures that the image previews of media attachments to toots are correctly cropped to always show the focal point of the image (if it is specified). It should not in any way influence how previews of media without a focal point are shown. To achieve the correct crop on the image a few components were needed: First of all we needed a way to influence how the image is cropped into the ImageView. It turns out that the preferred way to do this is by setting the ScaleType to MATRIX and adjusting the matrix of the image as needed. This matrix allows us to scale and transform the image in the way we need to make sure that the focal point is visible within the view. For this purpose we have the FocalPointEnforcer which can calculate and set the appropriate matrix on an ImageView as soon as the image is loaded. However a second problem is that we need to make sure that this matrix is updated whenever the size of the ImageView changes. The size might change for example because the orientation of the device changed from portrait to landscape or vice versas, or for a number of other reasons such as the screen being split vertically or something like that. To be able to hook onto this event we need to create a new extended version of the ImageView class, which we call MediaPreviewImageView. This class behaves exactly the same as a normal ImageView, however if the focalPointEnforcer of this view is set, then it will call this enforcer to update the image matrix any time the size is changed. So this commit changes all media previews in the item_status.xml and item_status_detailled.xml layout files to the new MediaPreviewImageView class. Additionally in the code for loading the images into the previews a new case is added which tests if there is a focus attribute in the meta-data. If so it makes sure to create and set the FocalPointEnforcer. * Fix typos in documentation comment "to" -> "too" * Use static imports to remove clutter in FocalPointEnforcerTest Instead of duplication Assert. in front of every assertEquals, simply statically import it. * Move the MetaData and Focus classes into the Attachment class Since they are very strongly linked to the attachment class and are themselves very small. * Refactor the focal point handling code - All the code modifying the actual members of the MediaPreviewImageView is now in this class itself. This class still uses the FocalPointUtil to calculate the new Matrix, but it now handles setting this new Matrix itself. - The FocalPointEnforcer has been renamed to the FocalPointUtil to reflect that it only calculates the correct matrix, but doesn't set anything on the MediaPreviewImageView. - The Matrix used to control the cropping of the MediaPreviewImageViews is now only allocated a single time per view instead of each time the view is resized. This is done by caching the Matrix and passing it to the FocalPointUtil to update on each resize. * Only reallocate focalMatrix if it is not yet initialized This helps prevent unnecessary allocations in the case where setFocalPoint is called multiple times. * Change checking of availability of objects to use != null As pointed out, the 'is' keyword is meant for checking types, not for checking non-nullness. * Make updateFocalPointMatrix() return nothing This makes it clearer that it actually mutates the matrix it is given. * Fix bug with transitions crashing the PhotoView Due to the android transitions for some reason copying the scaletype from the MediaPreviewImageView to the PhotoView during the transition, the PhotoView would crash on pictures with a focal point, since PhotoView doesn't support ScaleType.MATRIX. This is solved by the workaround of overriding both the getScaleType and setScaleType methods to ensure that we use the MATRIX type in the preview and the center_crop type in the PhotoView. Additionally this commit also makes sure to remove the focal point when the MediaPreviewImageView is recycled. * Fix bug in overriden getScaleType Instead of simply returning the scaleType we need to return the super.getScaleType() method, to avoid crashing. * Merge changes from master Mainly the migration to androidx.
2018-12-28 16:32:07 +01:00
<com.keylesspalace.tusky.view.MediaPreviewImageView
2017-11-30 20:12:09 +01:00
android:id="@+id/status_media_preview_0"
android:layout_width="0dp"
android:layout_height="@dimen/status_media_preview_height"
android:scaleType="centerCrop"
app:layout_constraintEnd_toStartOf="@+id/status_media_preview_1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription" />
Set image previews correctly according to their focal points (#899) * Add serialization of the meta-data and focus objects These objects are added in some attachments. This commit adds data classes which are able to serialize these (partially) in preparation for the ability to honour the focal point information in image previews. * Implement correctly honouring the focal point meta-data in previews This commit adds code which ensures that the image previews of media attachments to toots are correctly cropped to always show the focal point of the image (if it is specified). It should not in any way influence how previews of media without a focal point are shown. To achieve the correct crop on the image a few components were needed: First of all we needed a way to influence how the image is cropped into the ImageView. It turns out that the preferred way to do this is by setting the ScaleType to MATRIX and adjusting the matrix of the image as needed. This matrix allows us to scale and transform the image in the way we need to make sure that the focal point is visible within the view. For this purpose we have the FocalPointEnforcer which can calculate and set the appropriate matrix on an ImageView as soon as the image is loaded. However a second problem is that we need to make sure that this matrix is updated whenever the size of the ImageView changes. The size might change for example because the orientation of the device changed from portrait to landscape or vice versas, or for a number of other reasons such as the screen being split vertically or something like that. To be able to hook onto this event we need to create a new extended version of the ImageView class, which we call MediaPreviewImageView. This class behaves exactly the same as a normal ImageView, however if the focalPointEnforcer of this view is set, then it will call this enforcer to update the image matrix any time the size is changed. So this commit changes all media previews in the item_status.xml and item_status_detailled.xml layout files to the new MediaPreviewImageView class. Additionally in the code for loading the images into the previews a new case is added which tests if there is a focus attribute in the meta-data. If so it makes sure to create and set the FocalPointEnforcer. * Fix typos in documentation comment "to" -> "too" * Use static imports to remove clutter in FocalPointEnforcerTest Instead of duplication Assert. in front of every assertEquals, simply statically import it. * Move the MetaData and Focus classes into the Attachment class Since they are very strongly linked to the attachment class and are themselves very small. * Refactor the focal point handling code - All the code modifying the actual members of the MediaPreviewImageView is now in this class itself. This class still uses the FocalPointUtil to calculate the new Matrix, but it now handles setting this new Matrix itself. - The FocalPointEnforcer has been renamed to the FocalPointUtil to reflect that it only calculates the correct matrix, but doesn't set anything on the MediaPreviewImageView. - The Matrix used to control the cropping of the MediaPreviewImageViews is now only allocated a single time per view instead of each time the view is resized. This is done by caching the Matrix and passing it to the FocalPointUtil to update on each resize. * Only reallocate focalMatrix if it is not yet initialized This helps prevent unnecessary allocations in the case where setFocalPoint is called multiple times. * Change checking of availability of objects to use != null As pointed out, the 'is' keyword is meant for checking types, not for checking non-nullness. * Make updateFocalPointMatrix() return nothing This makes it clearer that it actually mutates the matrix it is given. * Fix bug with transitions crashing the PhotoView Due to the android transitions for some reason copying the scaletype from the MediaPreviewImageView to the PhotoView during the transition, the PhotoView would crash on pictures with a focal point, since PhotoView doesn't support ScaleType.MATRIX. This is solved by the workaround of overriding both the getScaleType and setScaleType methods to ensure that we use the MATRIX type in the preview and the center_crop type in the PhotoView. Additionally this commit also makes sure to remove the focal point when the MediaPreviewImageView is recycled. * Fix bug in overriden getScaleType Instead of simply returning the scaleType we need to return the super.getScaleType() method, to avoid crashing. * Merge changes from master Mainly the migration to androidx.
2018-12-28 16:32:07 +01:00
<com.keylesspalace.tusky.view.MediaPreviewImageView
2017-11-30 20:12:09 +01:00
android:id="@+id/status_media_preview_1"
android:layout_width="0dp"
android:layout_height="@dimen/status_media_preview_height"
android:layout_marginStart="4dp"
android:scaleType="centerCrop"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/status_media_preview_0"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription" />
Set image previews correctly according to their focal points (#899) * Add serialization of the meta-data and focus objects These objects are added in some attachments. This commit adds data classes which are able to serialize these (partially) in preparation for the ability to honour the focal point information in image previews. * Implement correctly honouring the focal point meta-data in previews This commit adds code which ensures that the image previews of media attachments to toots are correctly cropped to always show the focal point of the image (if it is specified). It should not in any way influence how previews of media without a focal point are shown. To achieve the correct crop on the image a few components were needed: First of all we needed a way to influence how the image is cropped into the ImageView. It turns out that the preferred way to do this is by setting the ScaleType to MATRIX and adjusting the matrix of the image as needed. This matrix allows us to scale and transform the image in the way we need to make sure that the focal point is visible within the view. For this purpose we have the FocalPointEnforcer which can calculate and set the appropriate matrix on an ImageView as soon as the image is loaded. However a second problem is that we need to make sure that this matrix is updated whenever the size of the ImageView changes. The size might change for example because the orientation of the device changed from portrait to landscape or vice versas, or for a number of other reasons such as the screen being split vertically or something like that. To be able to hook onto this event we need to create a new extended version of the ImageView class, which we call MediaPreviewImageView. This class behaves exactly the same as a normal ImageView, however if the focalPointEnforcer of this view is set, then it will call this enforcer to update the image matrix any time the size is changed. So this commit changes all media previews in the item_status.xml and item_status_detailled.xml layout files to the new MediaPreviewImageView class. Additionally in the code for loading the images into the previews a new case is added which tests if there is a focus attribute in the meta-data. If so it makes sure to create and set the FocalPointEnforcer. * Fix typos in documentation comment "to" -> "too" * Use static imports to remove clutter in FocalPointEnforcerTest Instead of duplication Assert. in front of every assertEquals, simply statically import it. * Move the MetaData and Focus classes into the Attachment class Since they are very strongly linked to the attachment class and are themselves very small. * Refactor the focal point handling code - All the code modifying the actual members of the MediaPreviewImageView is now in this class itself. This class still uses the FocalPointUtil to calculate the new Matrix, but it now handles setting this new Matrix itself. - The FocalPointEnforcer has been renamed to the FocalPointUtil to reflect that it only calculates the correct matrix, but doesn't set anything on the MediaPreviewImageView. - The Matrix used to control the cropping of the MediaPreviewImageViews is now only allocated a single time per view instead of each time the view is resized. This is done by caching the Matrix and passing it to the FocalPointUtil to update on each resize. * Only reallocate focalMatrix if it is not yet initialized This helps prevent unnecessary allocations in the case where setFocalPoint is called multiple times. * Change checking of availability of objects to use != null As pointed out, the 'is' keyword is meant for checking types, not for checking non-nullness. * Make updateFocalPointMatrix() return nothing This makes it clearer that it actually mutates the matrix it is given. * Fix bug with transitions crashing the PhotoView Due to the android transitions for some reason copying the scaletype from the MediaPreviewImageView to the PhotoView during the transition, the PhotoView would crash on pictures with a focal point, since PhotoView doesn't support ScaleType.MATRIX. This is solved by the workaround of overriding both the getScaleType and setScaleType methods to ensure that we use the MATRIX type in the preview and the center_crop type in the PhotoView. Additionally this commit also makes sure to remove the focal point when the MediaPreviewImageView is recycled. * Fix bug in overriden getScaleType Instead of simply returning the scaleType we need to return the super.getScaleType() method, to avoid crashing. * Merge changes from master Mainly the migration to androidx.
2018-12-28 16:32:07 +01:00
<com.keylesspalace.tusky.view.MediaPreviewImageView
2017-11-30 20:12:09 +01:00
android:id="@+id/status_media_preview_2"
android:layout_width="0dp"
android:layout_height="@dimen/status_media_preview_height"
android:layout_marginTop="4dp"
android:scaleType="centerCrop"
app:layout_constraintEnd_toStartOf="@+id/status_media_preview_3"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/status_media_preview_0"
tools:ignore="ContentDescription" />
Set image previews correctly according to their focal points (#899) * Add serialization of the meta-data and focus objects These objects are added in some attachments. This commit adds data classes which are able to serialize these (partially) in preparation for the ability to honour the focal point information in image previews. * Implement correctly honouring the focal point meta-data in previews This commit adds code which ensures that the image previews of media attachments to toots are correctly cropped to always show the focal point of the image (if it is specified). It should not in any way influence how previews of media without a focal point are shown. To achieve the correct crop on the image a few components were needed: First of all we needed a way to influence how the image is cropped into the ImageView. It turns out that the preferred way to do this is by setting the ScaleType to MATRIX and adjusting the matrix of the image as needed. This matrix allows us to scale and transform the image in the way we need to make sure that the focal point is visible within the view. For this purpose we have the FocalPointEnforcer which can calculate and set the appropriate matrix on an ImageView as soon as the image is loaded. However a second problem is that we need to make sure that this matrix is updated whenever the size of the ImageView changes. The size might change for example because the orientation of the device changed from portrait to landscape or vice versas, or for a number of other reasons such as the screen being split vertically or something like that. To be able to hook onto this event we need to create a new extended version of the ImageView class, which we call MediaPreviewImageView. This class behaves exactly the same as a normal ImageView, however if the focalPointEnforcer of this view is set, then it will call this enforcer to update the image matrix any time the size is changed. So this commit changes all media previews in the item_status.xml and item_status_detailled.xml layout files to the new MediaPreviewImageView class. Additionally in the code for loading the images into the previews a new case is added which tests if there is a focus attribute in the meta-data. If so it makes sure to create and set the FocalPointEnforcer. * Fix typos in documentation comment "to" -> "too" * Use static imports to remove clutter in FocalPointEnforcerTest Instead of duplication Assert. in front of every assertEquals, simply statically import it. * Move the MetaData and Focus classes into the Attachment class Since they are very strongly linked to the attachment class and are themselves very small. * Refactor the focal point handling code - All the code modifying the actual members of the MediaPreviewImageView is now in this class itself. This class still uses the FocalPointUtil to calculate the new Matrix, but it now handles setting this new Matrix itself. - The FocalPointEnforcer has been renamed to the FocalPointUtil to reflect that it only calculates the correct matrix, but doesn't set anything on the MediaPreviewImageView. - The Matrix used to control the cropping of the MediaPreviewImageViews is now only allocated a single time per view instead of each time the view is resized. This is done by caching the Matrix and passing it to the FocalPointUtil to update on each resize. * Only reallocate focalMatrix if it is not yet initialized This helps prevent unnecessary allocations in the case where setFocalPoint is called multiple times. * Change checking of availability of objects to use != null As pointed out, the 'is' keyword is meant for checking types, not for checking non-nullness. * Make updateFocalPointMatrix() return nothing This makes it clearer that it actually mutates the matrix it is given. * Fix bug with transitions crashing the PhotoView Due to the android transitions for some reason copying the scaletype from the MediaPreviewImageView to the PhotoView during the transition, the PhotoView would crash on pictures with a focal point, since PhotoView doesn't support ScaleType.MATRIX. This is solved by the workaround of overriding both the getScaleType and setScaleType methods to ensure that we use the MATRIX type in the preview and the center_crop type in the PhotoView. Additionally this commit also makes sure to remove the focal point when the MediaPreviewImageView is recycled. * Fix bug in overriden getScaleType Instead of simply returning the scaleType we need to return the super.getScaleType() method, to avoid crashing. * Merge changes from master Mainly the migration to androidx.
2018-12-28 16:32:07 +01:00
<com.keylesspalace.tusky.view.MediaPreviewImageView
2017-11-30 20:12:09 +01:00
android:id="@+id/status_media_preview_3"
android:layout_width="0dp"
android:layout_height="@dimen/status_media_preview_height"
android:layout_marginStart="4dp"
android:layout_marginTop="4dp"
android:scaleType="centerCrop"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/status_media_preview_2"
app:layout_constraintTop_toBottomOf="@+id/status_media_preview_1"
tools:ignore="ContentDescription" />
2017-11-30 20:12:09 +01:00
<ImageView
android:id="@+id/status_media_overlay_0"
android:layout_width="0dp"
android:layout_height="0dp"
android:scaleType="center"
app:layout_constraintBottom_toBottomOf="@+id/status_media_preview_0"
app:layout_constraintEnd_toEndOf="@+id/status_media_preview_0"
app:layout_constraintStart_toStartOf="@+id/status_media_preview_0"
app:layout_constraintTop_toTopOf="@+id/status_media_preview_0"
app:srcCompat="?attr/play_indicator_drawable"
tools:ignore="ContentDescription" />
2017-11-30 20:12:09 +01:00
<ImageView
android:id="@+id/status_media_overlay_1"
android:layout_width="0dp"
android:layout_height="0dp"
android:scaleType="center"
app:layout_constraintBottom_toBottomOf="@+id/status_media_preview_1"
app:layout_constraintEnd_toEndOf="@+id/status_media_preview_1"
app:layout_constraintStart_toStartOf="@+id/status_media_preview_1"
app:layout_constraintTop_toTopOf="@+id/status_media_preview_1"
app:srcCompat="?attr/play_indicator_drawable"
tools:ignore="ContentDescription" />
<ImageView
android:id="@+id/status_media_overlay_2"
android:layout_width="0dp"
android:layout_height="0dp"
android:scaleType="center"
app:layout_constraintBottom_toBottomOf="@+id/status_media_preview_2"
app:layout_constraintEnd_toEndOf="@+id/status_media_preview_2"
app:layout_constraintStart_toStartOf="@+id/status_media_preview_2"
app:layout_constraintTop_toTopOf="@+id/status_media_preview_2"
app:srcCompat="?attr/play_indicator_drawable"
tools:ignore="ContentDescription" />
<ImageView
android:id="@+id/status_media_overlay_3"
android:layout_width="0dp"
android:layout_height="0dp"
android:scaleType="center"
app:layout_constraintBottom_toBottomOf="@+id/status_media_preview_3"
app:layout_constraintEnd_toEndOf="@+id/status_media_preview_3"
app:layout_constraintStart_toStartOf="@+id/status_media_preview_3"
app:layout_constraintTop_toTopOf="@+id/status_media_preview_3"
app:srcCompat="?attr/play_indicator_drawable"
tools:ignore="ContentDescription" />
<ImageView
android:id="@+id/status_sensitive_media_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:alpha="0.7"
android:contentDescription="@string/action_hide_media"
android:padding="@dimen/status_sensitive_media_button_padding"
android:tint="@color/white"
2017-11-30 20:12:09 +01:00
android:visibility="gone"
app:layout_constraintLeft_toLeftOf="@+id/status_media_preview_container"
app:layout_constraintTop_toTopOf="@+id/status_media_preview_container"
ComposeActivity improvements (#548) * do not add media urls to status text * add scrolling to content * add arrow icon and animation to replying-to toggle * remove unnecessary compose_button_colors.xml * improve toot button * improve bottom bar, add bottom sheet for compose options, dedicated cw button * fix crash on Android < API 21 * move media picking from dialog to bottom sheet * add small style tootbutton * fix colors/button background for light theme * add icons to media chose bottom sheet * improve hide media button, delete unused styles * fix crash on dev build when taking photo * consolidate drawables * consolidate strings and ids, add tooltips to buttons * allow media only toots * change error message to show max size of upload correctly * fix button color * add emoji * code cleanup * Merge branch 'master' into compose_activity_refactoring # Conflicts: # app/src/main/java/com/keylesspalace/tusky/ComposeActivity.java * fix hidden snackbar * improve hint text color * add SendTootService * fix timeline refreshing * toot saving and error handling for sendtootservice * restructure some code * convert EditTextTyped to Kotlin * fixed pick media button disabled color * force sensitive media when content warning is shown * add db cache for emojis & fix tests * reorder buttons to match mastodon web * add possibility to cancel sending of toot * correctly delete sent toots * refresh SavedTootActivity after toot was sent * remove unused resources * correct params for toot saving in SendTootService * consolidate strings * bugfix * remove unused resources * fix notifications on old android for SendTootService * fix crash
2018-04-13 22:37:21 +02:00
app:srcCompat="@drawable/ic_eye_24dp" />
2017-11-30 20:12:09 +01:00
<TextView
android:id="@+id/status_sensitive_media_warning"
2017-11-30 20:12:09 +01:00
android:layout_width="0dp"
android:layout_height="0dp"
android:background="?attr/sensitive_media_warning_background_color"
android:gravity="center"
2017-11-30 20:12:09 +01:00
android:lineSpacingMultiplier="1.2"
android:orientation="vertical"
android:padding="8dp"
2017-11-30 20:12:09 +01:00
android:textAlignment="center"
android:textColor="@android:color/white"
android:textSize="?attr/status_text_medium"
2017-11-30 20:12:09 +01:00
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/status_media_label_0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
2017-11-30 20:12:09 +01:00
android:background="?attr/selectableItemBackground"
android:drawablePadding="4dp"
android:gravity="center_vertical"
android:importantForAccessibility="no"
android:textSize="?attr/status_text_medium"
2019-02-11 16:59:01 +01:00
android:visibility="gone"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/status_media_label_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:drawablePadding="4dp"
android:gravity="center_vertical"
android:importantForAccessibility="no"
android:textSize="?attr/status_text_medium"
android:visibility="gone"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/status_media_label_0" />
<TextView
android:id="@+id/status_media_label_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:drawablePadding="4dp"
android:gravity="center_vertical"
android:importantForAccessibility="no"
android:textSize="?attr/status_text_medium"
android:visibility="gone"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/status_media_label_1" />
<TextView
android:id="@+id/status_media_label_3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:drawablePadding="4dp"
android:gravity="center_vertical"
android:importantForAccessibility="no"
android:textSize="?attr/status_text_medium"
android:visibility="gone"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/status_media_label_2" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/status_poll_options"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:layout_marginBottom="4dp"
android:nestedScrollingEnabled="false"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/status_media_preview_container" />
<!-- using AppCompatButton because we don't want the inflater to turn it into a MaterialButton -->
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/status_poll_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:background="?attr/content_warning_button"
android:gravity="center"
android:minWidth="150dp"
android:minHeight="0dp"
android:paddingLeft="16dp"
android:paddingTop="4dp"
android:paddingRight="16dp"
android:paddingBottom="4dp"
android:text="@string/poll_vote"
android:textSize="?attr/status_text_medium"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/status_poll_options" />
<TextView
android:id="@+id/status_poll_description"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:textSize="?attr/status_text_medium"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/status_poll_button"
tools:text="7 votes • 7 hours remaining" />
2017-11-30 20:12:09 +01:00
<TextView
android:id="@+id/status_timestamp_info"
android:layout_width="0dp"
android:layout_height="wrap_content"
2017-11-30 20:12:09 +01:00
android:layout_marginTop="10dp"
android:importantForAccessibility="no"
android:textColor="?android:textColorTertiary"
android:textSize="?attr/status_text_medium"
android:drawablePadding="4dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/status_poll_description"
tools:text="21 Dec 2018 18:45" />
<View
android:id="@+id/status_info_divider"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_below="@id/status_timestamp_info"
android:layout_marginTop="6dp"
android:background="?android:attr/listDivider"
android:importantForAccessibility="no"
android:paddingStart="16dp"
android:paddingEnd="16dp"
app:layout_constraintTop_toBottomOf="@id/status_timestamp_info" />
<TextView
android:id="@+id/status_reblogs"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:background="?attr/selectableItemBackground"
android:importantForAccessibility="no"
android:padding="4dp"
android:textSize="?attr/status_text_medium"
app:layout_constraintStart_toStartOf="@id/status_info_divider"
app:layout_constraintTop_toBottomOf="@id/status_info_divider"
tools:text="4 reblogs"
tools:visibility="visible" />
<TextView
android:id="@+id/status_favourites"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_marginTop="6dp"
android:background="?attr/selectableItemBackground"
android:importantForAccessibility="no"
android:padding="4dp"
android:textSize="?attr/status_text_medium"
app:layout_constraintStart_toEndOf="@id/status_reblogs"
app:layout_constraintTop_toBottomOf="@id/status_info_divider"
app:layout_goneMarginStart="0dp"
tools:text="8 favs"
tools:visibility="visible" />
<androidx.constraintlayout.widget.Barrier
android:id="@+id/status_counters_barrier"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:barrierDirection="bottom"
app:constraint_referenced_ids="status_reblogs,status_favourites" />
<View
android:id="@+id/status_buttons_divider"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginTop="6dp"
android:background="?android:attr/listDivider"
android:importantForAccessibility="no"
android:paddingStart="16dp"
android:paddingEnd="16dp"
app:layout_constraintTop_toBottomOf="@id/status_counters_barrier" />
<ImageButton
android:id="@+id/status_reply"
style="?attr/image_button_style"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_marginTop="4dp"
android:layout_marginBottom="4dp"
android:contentDescription="@string/action_reply"
android:importantForAccessibility="no"
android:padding="4dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/status_inset"
app:layout_constraintHorizontal_chainStyle="spread_inside"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/status_buttons_divider"
app:srcCompat="@drawable/ic_reply_24dp" />
<at.connyduck.sparkbutton.SparkButton
android:id="@+id/status_inset"
android:layout_width="40dp"
android:layout_height="40dp"
android:clipToPadding="false"
android:contentDescription="@string/action_reblog"
android:importantForAccessibility="no"
android:padding="4dp"
app:layout_constraintEnd_toStartOf="@id/status_favourite"
app:layout_constraintStart_toEndOf="@id/status_reply"
app:layout_constraintTop_toTopOf="@id/status_reply"
2019-10-03 18:55:32 +02:00
sparkbutton:activeImage="@drawable/ic_reblog_active_24dp"
sparkbutton:iconSize="28dp"
sparkbutton:inactiveImage="?attr/status_reblog_inactive_drawable"
sparkbutton:primaryColor="@color/tusky_blue"
sparkbutton:secondaryColor="@color/tusky_blue_light" />
<at.connyduck.sparkbutton.SparkButton
android:id="@+id/status_favourite"
android:layout_width="40dp"
android:layout_height="40dp"
android:clipToPadding="false"
android:contentDescription="@string/action_favourite"
android:importantForAccessibility="no"
android:padding="4dp"
2019-09-03 16:08:13 +02:00
app:layout_constraintEnd_toStartOf="@id/status_quote"
app:layout_constraintStart_toEndOf="@id/status_inset"
app:layout_constraintTop_toTopOf="@id/status_inset"
sparkbutton:activeImage="?attr/status_favourite_active_drawable"
sparkbutton:iconSize="28dp"
sparkbutton:inactiveImage="?attr/status_favourite_inactive_drawable"
sparkbutton:primaryColor="@color/tusky_orange"
sparkbutton:secondaryColor="@color/tusky_orange_light" />
2019-09-03 16:08:13 +02:00
<ImageButton
android:id="@+id/status_quote"
style="?attr/image_button_style"
android:layout_width="40dp"
android:layout_height="40dp"
android:contentDescription="@string/action_quote"
android:importantForAccessibility="no"
android:padding="4dp"
app:layout_constraintBottom_toBottomOf="@id/status_reply"
app:layout_constraintEnd_toStartOf="@id/status_more"
app:layout_constraintStart_toEndOf="@id/status_favourite"
app:layout_constraintTop_toTopOf="@id/status_reply"
app:srcCompat="@drawable/ic_quote_disabled_24dp" />
<ImageButton
android:id="@+id/status_more"
style="?attr/image_button_style"
android:layout_width="32dp"
android:layout_height="32dp"
android:contentDescription="@string/action_more"
android:importantForAccessibility="no"
android:padding="4dp"
app:layout_constraintBottom_toBottomOf="@id/status_reply"
app:layout_constraintEnd_toEndOf="parent"
2019-09-03 16:08:13 +02:00
app:layout_constraintStart_toEndOf="@id/status_quote"
app:layout_constraintTop_toTopOf="@id/status_reply"
app:srcCompat="@drawable/ic_more_horiz_24dp" />
</androidx.constraintlayout.widget.ConstraintLayout>