Loading app/src/main/java/app/fedilab/android/ui/drawer/StatusAdapter.java +31 −0 Original line number Diff line number Diff line Loading @@ -48,6 +48,7 @@ import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; import android.view.inputmethod.InputMethodManager; import android.widget.CheckBox; import android.widget.GridView; Loading @@ -62,6 +63,7 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.PopupMenu; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.core.app.ActivityOptionsCompat; import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; Loading Loading @@ -2113,6 +2115,35 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> StatusViewHolder holder = (StatusViewHolder) viewHolder; MastodonHelper.loadPPMastodon(holder.bindingArt.artPp, status.account); if (status.art_attachment != null) { holder.bindingArt.artMedia.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { holder.bindingArt.artMedia.getViewTreeObserver().removeOnGlobalLayoutListener(this); float viewWidth = holder.bindingArt.artMedia.getWidth(); ConstraintLayout.LayoutParams lp; float mediaH = status.art_attachment.meta.small.height; float mediaW = status.art_attachment.meta.small.width; float ratio = 1.0f; if (mediaW != 0) { ratio = viewWidth / mediaW; } lp = new ConstraintLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, (int) (mediaH * ratio)); holder.bindingArt.artMedia.setScaleType(ImageView.ScaleType.FIT_CENTER); holder.bindingArt.artMedia.setLayoutParams(lp); } }); float viewWidth = holder.bindingArt.artMedia.getWidth(); ConstraintLayout.LayoutParams lp; float mediaH = status.art_attachment.meta.small.height; float mediaW = status.art_attachment.meta.small.width; float ratio = 1.0f; if (mediaW != 0) { ratio = viewWidth / mediaW; } lp = new ConstraintLayout.LayoutParams(ConstraintLayout.LayoutParams.MATCH_PARENT, (int) (mediaH * ratio)); holder.bindingArt.artMedia.setScaleType(ImageView.ScaleType.FIT_CENTER); holder.bindingArt.artMedia.setLayoutParams(lp); Glide.with(holder.bindingArt.artMedia.getContext()) .load(status.art_attachment.preview_url) .apply(new RequestOptions().transform(new RoundedCorners((int) Helper.convertDpToPixel(3, context)))) Loading app/src/main/java/app/fedilab/android/ui/fragment/timeline/FragmentMastodonTimeline.java +15 −14 Original line number Diff line number Diff line Loading @@ -342,20 +342,29 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter. flagLoading = fetched_statuses.pagination.max_id == null; binding.noAction.setVisibility(View.GONE); if (timelineType == Timeline.TimeLineEnum.ART) { //We have to split media in different statuses List<Status> mediaStatuses = new ArrayList<>(); for (Status status : fetched_statuses.statuses) { if (status.media_attachments.size() > 1) { if (!tagTimeline.isNSFW && status.sensitive) { continue; } for (Attachment attachment : status.media_attachments) { status.media_attachments = new ArrayList<>(); status.media_attachments.add(0, attachment); mediaStatuses.add(status); try { Status statusTmp = (Status) status.clone(); statusTmp.art_attachment = attachment; mediaStatuses.add(statusTmp); } catch (CloneNotSupportedException e) { e.printStackTrace(); } } } if (mediaStatuses.size() > 0) { fetched_statuses.statuses = mediaStatuses; } } //Update the timeline with new statuses int insertedStatus = updateStatusListWith(fetched_statuses.statuses); //For these directions, the app will display counters for new messages Loading Loading @@ -622,14 +631,6 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter. } SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(requireActivity()); boolean useCache = sharedpreferences.getBoolean(getString(R.string.SET_USE_CACHE), true); /*Handler handler = new Handler(); handler.postDelayed(() -> { if (useCache && direction != DIRECTION.SCROLL_TOP && direction != DIRECTION.FETCH_NEW) { getCachedStatus(direction, fetchingMissing, timelineParams); } else { getLiveStatus(direction, fetchingMissing, timelineParams, status); } }, slug.compareTo(Helper.getSlugOfFirstFragment(requireActivity(), currentUserID, currentInstance)) == 0 ? 0 : 1000);*/ if (useCache && direction != DIRECTION.SCROLL_TOP && direction != DIRECTION.FETCH_NEW) { getCachedStatus(direction, fetchingMissing, timelineParams); } else { Loading app/src/main/res/layout/drawer_status_art.xml +18 −33 Original line number Diff line number Diff line Loading @@ -14,12 +14,11 @@ You should have received a copy of the GNU General Public License along with Fedilab; if not, see <http://www.gnu.org/licenses>. --> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content"> <RelativeLayout <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/art_container" android:layout_height="wrap_content"> <androidx.appcompat.widget.AppCompatImageView Loading @@ -27,34 +26,20 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:adjustViewBounds="true" android:scaleType="centerInside" /> <RelativeLayout android:id="@+id/status_show_more" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentTop="true" android:background="@color/mastodonC1" android:visibility="gone"> <androidx.appcompat.widget.AppCompatImageView android:id="@+id/show_more_button_art" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentStart="true" android:layout_alignParentTop="true" android:layout_marginStart="10dp" android:layout_marginTop="10dp" android:src="@drawable/ic_outline_remove_red_eye_24" /> </RelativeLayout> </RelativeLayout> android:scaleType="fitCenter" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" tools:src="@tools:sample/backgrounds/scenic" /> <androidx.appcompat.widget.LinearLayoutCompat android:id="@+id/bottom_banner" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" app:layout_constraintBottom_toBottomOf="@+id/art_media" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" android:background="#44000000" android:orientation="horizontal" android:padding="10dp"> Loading Loading @@ -88,4 +73,4 @@ android:textColor="@color/white" /> </androidx.appcompat.widget.LinearLayoutCompat> </androidx.appcompat.widget.LinearLayoutCompat> </RelativeLayout> No newline at end of file </androidx.constraintlayout.widget.ConstraintLayout> No newline at end of file Loading
app/src/main/java/app/fedilab/android/ui/drawer/StatusAdapter.java +31 −0 Original line number Diff line number Diff line Loading @@ -48,6 +48,7 @@ import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; import android.view.inputmethod.InputMethodManager; import android.widget.CheckBox; import android.widget.GridView; Loading @@ -62,6 +63,7 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.PopupMenu; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.core.app.ActivityOptionsCompat; import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; Loading Loading @@ -2113,6 +2115,35 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> StatusViewHolder holder = (StatusViewHolder) viewHolder; MastodonHelper.loadPPMastodon(holder.bindingArt.artPp, status.account); if (status.art_attachment != null) { holder.bindingArt.artMedia.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { holder.bindingArt.artMedia.getViewTreeObserver().removeOnGlobalLayoutListener(this); float viewWidth = holder.bindingArt.artMedia.getWidth(); ConstraintLayout.LayoutParams lp; float mediaH = status.art_attachment.meta.small.height; float mediaW = status.art_attachment.meta.small.width; float ratio = 1.0f; if (mediaW != 0) { ratio = viewWidth / mediaW; } lp = new ConstraintLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, (int) (mediaH * ratio)); holder.bindingArt.artMedia.setScaleType(ImageView.ScaleType.FIT_CENTER); holder.bindingArt.artMedia.setLayoutParams(lp); } }); float viewWidth = holder.bindingArt.artMedia.getWidth(); ConstraintLayout.LayoutParams lp; float mediaH = status.art_attachment.meta.small.height; float mediaW = status.art_attachment.meta.small.width; float ratio = 1.0f; if (mediaW != 0) { ratio = viewWidth / mediaW; } lp = new ConstraintLayout.LayoutParams(ConstraintLayout.LayoutParams.MATCH_PARENT, (int) (mediaH * ratio)); holder.bindingArt.artMedia.setScaleType(ImageView.ScaleType.FIT_CENTER); holder.bindingArt.artMedia.setLayoutParams(lp); Glide.with(holder.bindingArt.artMedia.getContext()) .load(status.art_attachment.preview_url) .apply(new RequestOptions().transform(new RoundedCorners((int) Helper.convertDpToPixel(3, context)))) Loading
app/src/main/java/app/fedilab/android/ui/fragment/timeline/FragmentMastodonTimeline.java +15 −14 Original line number Diff line number Diff line Loading @@ -342,20 +342,29 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter. flagLoading = fetched_statuses.pagination.max_id == null; binding.noAction.setVisibility(View.GONE); if (timelineType == Timeline.TimeLineEnum.ART) { //We have to split media in different statuses List<Status> mediaStatuses = new ArrayList<>(); for (Status status : fetched_statuses.statuses) { if (status.media_attachments.size() > 1) { if (!tagTimeline.isNSFW && status.sensitive) { continue; } for (Attachment attachment : status.media_attachments) { status.media_attachments = new ArrayList<>(); status.media_attachments.add(0, attachment); mediaStatuses.add(status); try { Status statusTmp = (Status) status.clone(); statusTmp.art_attachment = attachment; mediaStatuses.add(statusTmp); } catch (CloneNotSupportedException e) { e.printStackTrace(); } } } if (mediaStatuses.size() > 0) { fetched_statuses.statuses = mediaStatuses; } } //Update the timeline with new statuses int insertedStatus = updateStatusListWith(fetched_statuses.statuses); //For these directions, the app will display counters for new messages Loading Loading @@ -622,14 +631,6 @@ public class FragmentMastodonTimeline extends Fragment implements StatusAdapter. } SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(requireActivity()); boolean useCache = sharedpreferences.getBoolean(getString(R.string.SET_USE_CACHE), true); /*Handler handler = new Handler(); handler.postDelayed(() -> { if (useCache && direction != DIRECTION.SCROLL_TOP && direction != DIRECTION.FETCH_NEW) { getCachedStatus(direction, fetchingMissing, timelineParams); } else { getLiveStatus(direction, fetchingMissing, timelineParams, status); } }, slug.compareTo(Helper.getSlugOfFirstFragment(requireActivity(), currentUserID, currentInstance)) == 0 ? 0 : 1000);*/ if (useCache && direction != DIRECTION.SCROLL_TOP && direction != DIRECTION.FETCH_NEW) { getCachedStatus(direction, fetchingMissing, timelineParams); } else { Loading
app/src/main/res/layout/drawer_status_art.xml +18 −33 Original line number Diff line number Diff line Loading @@ -14,12 +14,11 @@ You should have received a copy of the GNU General Public License along with Fedilab; if not, see <http://www.gnu.org/licenses>. --> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content"> <RelativeLayout <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/art_container" android:layout_height="wrap_content"> <androidx.appcompat.widget.AppCompatImageView Loading @@ -27,34 +26,20 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:adjustViewBounds="true" android:scaleType="centerInside" /> <RelativeLayout android:id="@+id/status_show_more" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentTop="true" android:background="@color/mastodonC1" android:visibility="gone"> <androidx.appcompat.widget.AppCompatImageView android:id="@+id/show_more_button_art" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentStart="true" android:layout_alignParentTop="true" android:layout_marginStart="10dp" android:layout_marginTop="10dp" android:src="@drawable/ic_outline_remove_red_eye_24" /> </RelativeLayout> </RelativeLayout> android:scaleType="fitCenter" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" tools:src="@tools:sample/backgrounds/scenic" /> <androidx.appcompat.widget.LinearLayoutCompat android:id="@+id/bottom_banner" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" app:layout_constraintBottom_toBottomOf="@+id/art_media" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" android:background="#44000000" android:orientation="horizontal" android:padding="10dp"> Loading Loading @@ -88,4 +73,4 @@ android:textColor="@color/white" /> </androidx.appcompat.widget.LinearLayoutCompat> </androidx.appcompat.widget.LinearLayoutCompat> </RelativeLayout> No newline at end of file </androidx.constraintlayout.widget.ConstraintLayout> No newline at end of file