diff options
author | Alex Ning <chineseperson5@gmail.com> | 2019-06-25 01:21:44 +0000 |
---|---|---|
committer | Alex Ning <chineseperson5@gmail.com> | 2019-06-25 01:21:44 +0000 |
commit | c4690a6e38004fa0442e6c15b9637ee209e9c2dd (patch) | |
tree | 4434cae708a07cb04eaa597a82312c45c410e780 /app/src/main/res/layout | |
parent | 34d49d884c5fc639204d0e464455e0d898a987e4 (diff) | |
download | infinity-for-reddit-c4690a6e38004fa0442e6c15b9637ee209e9c2dd.tar infinity-for-reddit-c4690a6e38004fa0442e6c15b9637ee209e9c2dd.tar.gz infinity-for-reddit-c4690a6e38004fa0442e6c15b9637ee209e9c2dd.tar.bz2 infinity-for-reddit-c4690a6e38004fa0442e6c15b9637ee209e9c2dd.tar.lz infinity-for-reddit-c4690a6e38004fa0442e6c15b9637ee209e9c2dd.tar.xz infinity-for-reddit-c4690a6e38004fa0442e6c15b9637ee209e9c2dd.tar.zst infinity-for-reddit-c4690a6e38004fa0442e6c15b9637ee209e9c2dd.zip |
Reimplement ViewPostActivity using one recyclerview to display a post and its comments instead of using a recyclerview inside NestedScrollView to prevent onBindViewHolder gets called for all the comments data at once and thus consumes more memory and freezes after the comments are loaded.
Diffstat (limited to 'app/src/main/res/layout')
5 files changed, 290 insertions, 332 deletions
diff --git a/app/src/main/res/layout/activity_view_post_detail.xml b/app/src/main/res/layout/activity_view_post_detail.xml index 0c9f6786..7416ed7a 100644 --- a/app/src/main/res/layout/activity_view_post_detail.xml +++ b/app/src/main/res/layout/activity_view_post_detail.xml @@ -21,339 +21,10 @@ </com.google.android.material.appbar.AppBarLayout> - <androidx.core.widget.NestedScrollView - android:id="@+id/nested_scroll_view_view_post_detail_activity" + <androidx.recyclerview.widget.RecyclerView + android:id="@+id/recycler_view_view_post_detail" android:layout_width="match_parent" android:layout_height="wrap_content" - app:layout_behavior="@string/appbar_scrolling_view_behavior"> - - <LinearLayout - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:orientation="vertical" - android:descendantFocusability="blocksDescendants"> - - <com.google.android.material.card.MaterialCardView - android:layout_width="match_parent" - android:layout_height="wrap_content"> - - <LinearLayout - android:layout_width="match_parent" - android:layout_height="match_parent" - android:orientation="vertical"> - - <androidx.constraintlayout.widget.ConstraintLayout - android:id="@+id/relative_layout_view_post_detail" - android:layout_width="match_parent" - android:layout_height="wrap_content"> - - <LinearLayout - android:id="@+id/subreddit_icon_name_linear_layout_view_post_detail" - android:layout_width="0dp" - android:layout_height="wrap_content" - android:padding="16dp" - app:layout_constrainedWidth="true" - app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintEnd_toStartOf="@id/post_time_text_view_view_post_detail" - app:layout_constraintTop_toTopOf="parent"> - - <CustomView.AspectRatioGifImageView - android:id="@+id/subreddit_icon_circle_image_view_view_post_detail" - android:layout_width="24dp" - android:layout_height="24dp" - android:layout_gravity="center"/> - - <TextView - android:id="@+id/subreddit_text_view_view_post_detail" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_marginStart="16dp" - android:layout_gravity="center" - android:textColor="#E91E63" /> - - </LinearLayout> - - <TextView - android:id="@+id/post_time_text_view_view_post_detail" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="center" - android:layout_marginEnd="16dp" - app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintStart_toEndOf="@id/subreddit_icon_name_linear_layout_view_post_detail" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintTop_toTopOf="parent"/> - - </androidx.constraintlayout.widget.ConstraintLayout> - - <TextView - android:id="@+id/title_text_view_view_post_detail" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:paddingStart="16dp" - android:paddingEnd="16dp" - android:textColor="@color/primaryTextColor" - android:textSize="18sp" /> - - <ru.noties.markwon.view.MarkwonView - android:id="@+id/content_markdown_view_view_post_detail" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:paddingStart="16dp" - android:paddingEnd="16dp" - android:layout_marginTop="16dp" - android:visibility="gone" /> - - <RelativeLayout - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:paddingStart="16dp" - android:paddingEnd="16dp" - android:paddingTop="16dp"> - - <com.google.android.material.chip.Chip - android:id="@+id/type_text_view_view_post_detail" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_marginEnd="16dp" - android:textColor="@android:color/white" - android:layout_centerVertical="true" - app:chipBackgroundColor="@color/backgroundColorPrimaryDark"/> - - <ImageView - android:id="@+id/gilded_image_view_view_post_detail" - android:layout_width="24dp" - android:layout_height="24dp" - android:layout_toEndOf="@id/type_text_view_view_post_detail" - android:layout_centerVertical="true" - android:visibility="gone"/> - - <TextView - android:id="@+id/gilded_number_text_view_view_post_detail" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_marginStart="4dp" - android:layout_marginEnd="8dp" - android:layout_toEndOf="@id/gilded_image_view_view_post_detail" - android:layout_centerVertical="true" - android:visibility="gone" - android:textSize="20sp" - android:textColor="@color/gold"/> - - <ImageView - android:id="@+id/crosspost_image_view_view_post_detail" - android:layout_width="24dp" - android:layout_height="24dp" - android:layout_marginStart="8dp" - android:layout_marginEnd="8dp" - android:layout_toEndOf="@id/gilded_number_text_view_view_post_detail" - android:layout_centerVertical="true" - android:src="@drawable/crosspost" - android:tint="@color/colorAccent" - android:visibility="gone"/> - - <com.google.android.material.chip.Chip - android:id="@+id/nsfw_text_view_view_post_detail" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="@string/nsfw" - android:layout_alignParentEnd="true" - android:layout_marginStart="8dp" - android:textColor="@android:color/white" - android:visibility="gone" - android:layout_centerVertical="true" - app:chipBackgroundColor="@color/colorAccent"/> - - </RelativeLayout> - - <TextView - android:id="@+id/link_text_view_view_post_detail" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:paddingStart="16dp" - android:paddingEnd="16dp" - android:textSize="12sp" - android:visibility="gone"/> - - <RelativeLayout - android:id="@+id/image_view_wrapper_view_post_detail" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_marginTop="16dp" - android:visibility="gone"> - - <com.santalu.aspectratioimageview.AspectRatioImageView - android:id="@+id/image_view_view_post_detail" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:adjustViewBounds="true" - android:scaleType="fitStart"/> - - <RelativeLayout - android:id="@+id/load_wrapper_view_post_detail" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_centerInParent="true"> - - <ProgressBar - android:id="@+id/progress_bar_view_post_detail" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_centerInParent="true" /> - - <TextView - android:id="@+id/load_image_error_text_view_view_post_detail" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:drawableTop="@drawable/ic_error_outline_black_24dp" - android:layout_centerInParent="true" - android:gravity="center" - android:text="@string/tap_to_retry" - android:visibility="gone" /> - - </RelativeLayout> - - </RelativeLayout> - - <ImageView - android:id="@+id/image_view_no_preview_link_view_post_detail" - android:layout_width="match_parent" - android:layout_height="150dp" - android:layout_marginTop="16dp" - android:background="@color/grey" - android:scaleType="center" - android:src="@drawable/ic_link" - android:tint="@android:color/tab_indicator_text" - android:visibility="gone" /> - - <RelativeLayout - android:layout_width="match_parent" - android:layout_height="wrap_content"> - - <ImageView - android:id="@+id/plus_button_view_post_detail" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_alignParentStart="true" - android:layout_centerVertical="true" - android:background="?actionBarItemBackground" - android:clickable="true" - android:focusable="true" - android:padding="16dp" - android:src="@drawable/ic_arrow_upward_black_24dp" - android:tint="@android:color/tab_indicator_text" /> - - <TextView - android:id="@+id/score_text_view_view_post_detail" - android:layout_width="64dp" - android:layout_height="wrap_content" - android:layout_centerVertical="true" - android:layout_toEndOf="@id/plus_button_view_post_detail" - android:gravity="center" /> - - <ImageView - android:id="@+id/minus_button_view_post_detail" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_centerVertical="true" - android:layout_toEndOf="@id/score_text_view_view_post_detail" - android:background="?actionBarItemBackground" - android:clickable="true" - android:focusable="true" - android:padding="16dp" - android:src="@drawable/ic_arrow_downward_black_24dp" - android:tint="@android:color/tab_indicator_text" /> - - <ImageView - android:id="@+id/share_button_view_post_detail" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_alignParentEnd="true" - android:layout_centerVertical="true" - android:background="?actionBarItemBackground" - android:clickable="true" - android:focusable="true" - android:padding="16dp" - android:src="@drawable/ic_outline_share_24px" - android:tint="@android:color/tab_indicator_text" /> - - </RelativeLayout> - - </LinearLayout> - - </com.google.android.material.card.MaterialCardView> - - <com.lsjwzh.widget.materialloadingprogressbar.CircleProgressBar - android:id="@+id/comment_progress_bar_view_post_detail" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_marginTop="16dp" - android:layout_marginBottom="16dp" - app:mlpb_progress_stoke_width="3dp" - app:mlpb_progress_color="@color/colorAccent" - app:mlpb_background_color="@color/circularProgressBarBackground" - android:layout_gravity="center_horizontal"/> - - <com.google.android.material.card.MaterialCardView - android:id="@+id/comment_card_view_view_post_detail" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_marginTop="16dp" - android:visibility="gone"> - - <LinearLayout - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:orientation="vertical"> - - <TextView - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:paddingEnd="16dp" - android:paddingLeft="16dp" - android:paddingRight="16dp" - android:paddingStart="16dp" - android:paddingTop="16dp" - android:text="@string/comments" - android:textColor="@color/primaryTextColor" - android:textSize="18sp" /> - - <androidx.recyclerview.widget.RecyclerView - android:id="@+id/recycler_view_view_post_detail" - android:layout_width="match_parent" - android:layout_height="wrap_content" /> - - </LinearLayout> - - </com.google.android.material.card.MaterialCardView> - - <LinearLayout - android:id="@+id/no_comment_wrapper_linear_layout_view_post_detail" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_marginTop="48dp" - android:layout_marginBottom="48dp" - android:orientation="vertical" - android:visibility="gone"> - - <ImageView - android:id="@+id/no_comment_image_view_view_post_detail" - android:layout_width="150dp" - android:layout_height="wrap_content" - android:layout_gravity="center_horizontal" /> - - <TextView - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_marginTop="16dp" - android:layout_gravity="center_horizontal" - android:text="@string/no_comments_yet"/> - - </LinearLayout> - - </LinearLayout> - - </androidx.core.widget.NestedScrollView> + app:layout_behavior="@string/appbar_scrolling_view_behavior" /> </androidx.coordinatorlayout.widget.CoordinatorLayout>
\ No newline at end of file diff --git a/app/src/main/res/layout/item_load_comments.xml b/app/src/main/res/layout/item_load_comments.xml new file mode 100644 index 00000000..06bc8c38 --- /dev/null +++ b/app/src/main/res/layout/item_load_comments.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:orientation="vertical" + android:layout_width="match_parent" + android:layout_height="wrap_content"> + + <com.lsjwzh.widget.materialloadingprogressbar.CircleProgressBar + android:id="@+id/comment_progress_bar_view_post_detail" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:layout_marginBottom="16dp" + app:mlpb_progress_stoke_width="3dp" + app:mlpb_progress_color="@color/colorAccent" + app:mlpb_background_color="@color/circularProgressBarBackground" + android:layout_gravity="center_horizontal"/> + +</LinearLayout>
\ No newline at end of file diff --git a/app/src/main/res/layout/item_load_comments_failed_placeholder.xml b/app/src/main/res/layout/item_load_comments_failed_placeholder.xml new file mode 100644 index 00000000..476d3d2d --- /dev/null +++ b/app/src/main/res/layout/item_load_comments_failed_placeholder.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8"?> +<TextView xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:gravity="center" + android:padding="36dp" + android:text="@string/post_load_comments_failed" + android:drawableTop="@drawable/load_post_error_indicator"/>
\ No newline at end of file diff --git a/app/src/main/res/layout/item_no_comment_placeholder.xml b/app/src/main/res/layout/item_no_comment_placeholder.xml new file mode 100644 index 00000000..becf93d4 --- /dev/null +++ b/app/src/main/res/layout/item_no_comment_placeholder.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8"?> +<TextView xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="@string/no_comments_yet" + android:gravity="center" + android:padding="36dp" + android:drawableTop="@drawable/no_comment_placeholder"/>
\ No newline at end of file diff --git a/app/src/main/res/layout/item_post_detail.xml b/app/src/main/res/layout/item_post_detail.xml new file mode 100644 index 00000000..870d21ef --- /dev/null +++ b/app/src/main/res/layout/item_post_detail.xml @@ -0,0 +1,252 @@ +<?xml version="1.0" encoding="utf-8"?> +<com.google.android.material.card.MaterialCardView xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="wrap_content" + xmlns:app="http://schemas.android.com/apk/res-auto"> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> + + <androidx.constraintlayout.widget.ConstraintLayout + android:id="@+id/relative_layout_item_post_detail" + android:layout_width="match_parent" + android:layout_height="wrap_content"> + + <LinearLayout + android:id="@+id/subreddit_icon_name_linear_layout_item_post_detail" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:padding="16dp" + app:layout_constrainedWidth="true" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toStartOf="@id/post_time_text_view_item_post_detail" + app:layout_constraintTop_toTopOf="parent"> + + <CustomView.AspectRatioGifImageView + android:id="@+id/subreddit_icon_circle_image_view_item_post_detail" + android:layout_width="24dp" + android:layout_height="24dp" + android:layout_gravity="center"/> + + <TextView + android:id="@+id/subreddit_text_view_item_post_detail" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginStart="16dp" + android:layout_gravity="center" + android:textColor="#E91E63" /> + + </LinearLayout> + + <TextView + android:id="@+id/post_time_text_view_item_post_detail" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:layout_marginEnd="16dp" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintStart_toEndOf="@id/subreddit_icon_name_linear_layout_item_post_detail" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toTopOf="parent"/> + + </androidx.constraintlayout.widget.ConstraintLayout> + + <TextView + android:id="@+id/title_text_view_item_post_detail" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:paddingStart="16dp" + android:paddingEnd="16dp" + android:textColor="@color/primaryTextColor" + android:textSize="18sp" /> + + <ru.noties.markwon.view.MarkwonView + android:id="@+id/content_markdown_view_item_post_detail" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:paddingStart="16dp" + android:paddingEnd="16dp" + android:layout_marginTop="16dp" + android:visibility="gone" /> + + <RelativeLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:paddingStart="16dp" + android:paddingEnd="16dp" + android:paddingTop="16dp"> + + <com.google.android.material.chip.Chip + android:id="@+id/type_text_view_item_post_detail" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginEnd="16dp" + android:textColor="@android:color/white" + android:layout_centerVertical="true" + app:chipBackgroundColor="@color/backgroundColorPrimaryDark"/> + + <ImageView + android:id="@+id/gilded_image_view_item_post_detail" + android:layout_width="24dp" + android:layout_height="24dp" + android:layout_toEndOf="@id/type_text_view_item_post_detail" + android:layout_centerVertical="true" + android:visibility="gone"/> + + <TextView + android:id="@+id/gilded_number_text_view_item_post_detail" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginStart="4dp" + android:layout_marginEnd="8dp" + android:layout_toEndOf="@id/gilded_image_view_item_post_detail" + android:layout_centerVertical="true" + android:visibility="gone" + android:textSize="20sp" + android:textColor="@color/gold"/> + + <ImageView + android:id="@+id/crosspost_image_view_item_post_detail" + android:layout_width="24dp" + android:layout_height="24dp" + android:layout_marginStart="8dp" + android:layout_marginEnd="8dp" + android:layout_toEndOf="@id/gilded_number_text_view_item_post_detail" + android:layout_centerVertical="true" + android:src="@drawable/crosspost" + android:tint="@color/colorAccent" + android:visibility="gone"/> + + <com.google.android.material.chip.Chip + android:id="@+id/nsfw_text_view_item_post_detail" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/nsfw" + android:layout_alignParentEnd="true" + android:layout_marginStart="8dp" + android:textColor="@android:color/white" + android:visibility="gone" + android:layout_centerVertical="true" + app:chipBackgroundColor="@color/colorAccent"/> + + </RelativeLayout> + + <TextView + android:id="@+id/link_text_view_item_post_detail" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:paddingStart="16dp" + android:paddingEnd="16dp" + android:textSize="12sp" + android:visibility="gone"/> + + <RelativeLayout + android:id="@+id/image_view_wrapper_item_post_detail" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:visibility="gone"> + + <com.santalu.aspectratioimageview.AspectRatioImageView + android:id="@+id/image_view_item_post_detail" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:adjustViewBounds="true" + android:scaleType="fitStart"/> + + <RelativeLayout + android:id="@+id/load_wrapper_item_post_detail" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_centerInParent="true"> + + <ProgressBar + android:id="@+id/progress_bar_item_post_detail" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_centerInParent="true" /> + + <TextView + android:id="@+id/load_image_error_text_view_item_post_detail" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:drawableTop="@drawable/ic_error_outline_black_24dp" + android:layout_centerInParent="true" + android:gravity="center" + android:text="@string/tap_to_retry" + android:visibility="gone" /> + + </RelativeLayout> + + </RelativeLayout> + + <ImageView + android:id="@+id/image_view_no_preview_link_item_post_detail" + android:layout_width="match_parent" + android:layout_height="150dp" + android:layout_marginTop="16dp" + android:background="@color/grey" + android:scaleType="center" + android:src="@drawable/ic_link" + android:tint="@android:color/tab_indicator_text" + android:visibility="gone" /> + + <RelativeLayout + android:layout_width="match_parent" + android:layout_height="wrap_content"> + + <ImageView + android:id="@+id/plus_button_item_post_detail" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentStart="true" + android:layout_centerVertical="true" + android:background="?actionBarItemBackground" + android:clickable="true" + android:focusable="true" + android:padding="16dp" + android:src="@drawable/ic_arrow_upward_black_24dp" + android:tint="@android:color/tab_indicator_text" /> + + <TextView + android:id="@+id/score_text_view_item_post_detail" + android:layout_width="64dp" + android:layout_height="wrap_content" + android:layout_centerVertical="true" + android:layout_toEndOf="@id/plus_button_item_post_detail" + android:gravity="center" /> + + <ImageView + android:id="@+id/minus_button_item_post_detail" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_centerVertical="true" + android:layout_toEndOf="@id/score_text_view_item_post_detail" + android:background="?actionBarItemBackground" + android:clickable="true" + android:focusable="true" + android:padding="16dp" + android:src="@drawable/ic_arrow_downward_black_24dp" + android:tint="@android:color/tab_indicator_text" /> + + <ImageView + android:id="@+id/share_button_item_post_detail" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentEnd="true" + android:layout_centerVertical="true" + android:background="?actionBarItemBackground" + android:clickable="true" + android:focusable="true" + android:padding="16dp" + android:src="@drawable/ic_outline_share_24px" + android:tint="@android:color/tab_indicator_text" /> + + </RelativeLayout> + + </LinearLayout> + +</com.google.android.material.card.MaterialCardView>
\ No newline at end of file |