From e50cb8a403b6a4cdf04d8a5237fe855df17c3236 Mon Sep 17 00:00:00 2001 From: tom79 Date: Sat, 28 Sep 2019 10:16:47 +0200 Subject: [PATCH] New layouts --- app/build.gradle | 2 +- .../android/activities/MediaActivity.java | 1 + .../android/drawers/PixelfedListAdapter.java | 50 +++------- .../android/drawers/SliderAdapter.java | 98 +++++++++++++++++++ app/src/main/res/layout/drawer_pixelfed.xml | 27 +++-- .../res/layout/image_slider_layout_item.xml | 57 +++++++++++ 6 files changed, 191 insertions(+), 44 deletions(-) create mode 100644 app/src/main/java/app/fedilab/android/drawers/SliderAdapter.java create mode 100644 app/src/main/res/layout/image_slider_layout_item.xml diff --git a/app/build.gradle b/app/build.gradle index ff6f62703..b67064f51 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -124,7 +124,7 @@ dependencies { implementation 'com.github.penfeizhou.android.animation:gif:1.1.0' implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' implementation "me.leolin:ShortcutBadger:1.1.22@aar" - + implementation 'com.github.smarteist:autoimageslider:1.3.2' //debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.0-beta-2' } diff --git a/app/src/main/java/app/fedilab/android/activities/MediaActivity.java b/app/src/main/java/app/fedilab/android/activities/MediaActivity.java index 6f8f793f2..0835c2274 100644 --- a/app/src/main/java/app/fedilab/android/activities/MediaActivity.java +++ b/app/src/main/java/app/fedilab/android/activities/MediaActivity.java @@ -31,6 +31,7 @@ import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import android.os.Handler; +import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; diff --git a/app/src/main/java/app/fedilab/android/drawers/PixelfedListAdapter.java b/app/src/main/java/app/fedilab/android/drawers/PixelfedListAdapter.java index c5f8d5c44..858df34f4 100644 --- a/app/src/main/java/app/fedilab/android/drawers/PixelfedListAdapter.java +++ b/app/src/main/java/app/fedilab/android/drawers/PixelfedListAdapter.java @@ -56,8 +56,12 @@ import com.bumptech.glide.load.resource.bitmap.RoundedCorners; import com.bumptech.glide.request.RequestListener; import com.bumptech.glide.request.RequestOptions; import com.bumptech.glide.request.target.Target; +import com.smarteist.autoimageslider.IndicatorAnimations; +import com.smarteist.autoimageslider.SliderAnimations; +import com.smarteist.autoimageslider.SliderView; import com.varunest.sparkbutton.SparkButton; +import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.List; @@ -339,7 +343,8 @@ public class PixelfedListAdapter extends RecyclerView.Adapter implements OnPostA private class ViewHolderPixelfed extends RecyclerView.ViewHolder { - ImageView art_media, pf_pp, pf_comment; + SliderView imageSlider; + ImageView pf_pp, pf_comment; SparkButton pf_fav, pf_share; TextView pf_username, pf_likes, pf_description, pf_date; CardView pf_cardview; @@ -357,7 +362,7 @@ public class PixelfedListAdapter extends RecyclerView.Adapter implements OnPostA ViewHolderPixelfed(View itemView) { super(itemView); - art_media = itemView.findViewById(R.id.art_media); + imageSlider = itemView.findViewById(R.id.imageSlider); pf_pp = itemView.findViewById(R.id.pf_pp); pf_username = itemView.findViewById(R.id.pf_username); pf_likes = itemView.findViewById(R.id.pf_likes); @@ -441,25 +446,13 @@ public class PixelfedListAdapter extends RecyclerView.Adapter implements OnPostA }else{ holder.pixelfed_comments.setVisibility(View.GONE); } - boolean expand_media = sharedpreferences.getBoolean(Helper.SET_EXPAND_MEDIA, false); - if (status.getMedia_attachments() != null && status.getMedia_attachments().size() > 0) - GlideApp.with(context) - .asBitmap() - .load(status.getMedia_attachments().get(0).getPreview_url()) - .listener(new RequestListener() { - @Override - public boolean onResourceReady(Bitmap resource, Object model, Target target, DataSource dataSource, boolean isFirstResource) { - if (status.isSensitive()) - notifyStatusChanged(status); - return false; - } + if (status.getMedia_attachments() != null && status.getMedia_attachments().size() > 0){ + SliderAdapter sliderAdapter = new SliderAdapter(new WeakReference<>(context), status.getMedia_attachments()); + holder.imageSlider.setSliderAdapter(sliderAdapter); + holder.imageSlider.setIndicatorAnimation(IndicatorAnimations.WORM); + holder.imageSlider.setSliderTransformAnimation(SliderAnimations.SIMPLETRANSFORMATION); - @Override - public boolean onLoadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) { - return false; - } - }) - .into(holder.art_media); + } holder.pf_likes.setText(context.getResources().getQuantityString(R.plurals.likes, status.getFavourites_count(), status.getFavourites_count())); holder.pf_pp.setOnClickListener(new View.OnClickListener() { @@ -477,22 +470,6 @@ public class PixelfedListAdapter extends RecyclerView.Adapter implements OnPostA } }); - holder.art_media.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - Intent intent = new Intent(context, MediaActivity.class); - Bundle b = new Bundle(); - ArrayList attachments = new ArrayList<>(); - if (status.getArt_attachment() != null) - attachments.add(status.getArt_attachment()); - else if (status.getMedia_attachments() != null && status.getMedia_attachments().size() > 0) - attachments.add(status.getMedia_attachments().get(0)); - intent.putParcelableArrayListExtra("mediaArray", attachments); - b.putInt("position", 0); - intent.putExtras(b); - context.startActivity(intent); - } - }); holder.quick_reply_switch_to_full.setVisibility(View.GONE); @@ -504,6 +481,7 @@ public class PixelfedListAdapter extends RecyclerView.Adapter implements OnPostA sendToot(null); status.setShortReply(false); InputMethodManager imm = (InputMethodManager) context.getSystemService(Activity.INPUT_METHOD_SERVICE); + assert imm != null; imm.hideSoftInputFromWindow(holder.quick_reply_button.getWindowToken(), 0); }); theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_DARK); diff --git a/app/src/main/java/app/fedilab/android/drawers/SliderAdapter.java b/app/src/main/java/app/fedilab/android/drawers/SliderAdapter.java new file mode 100644 index 000000000..7158e3e0e --- /dev/null +++ b/app/src/main/java/app/fedilab/android/drawers/SliderAdapter.java @@ -0,0 +1,98 @@ +package app.fedilab.android.drawers; +/* Copyright 2019 Thomas Schneider + * + * This file is a part of Fedilab + * + * This program is free software; you can redistribute it and/or modify it under the terms of the + * GNU General Public License as published by the Free Software Foundation; either version 3 of the + * License, or (at your option) any later version. + * + * Fedilab is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even + * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General + * Public License for more details. + * + * You should have received a copy of the GNU General Public License along with Fedilab; if not, + * see . */ + + +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import com.bumptech.glide.Glide; +import com.smarteist.autoimageslider.SliderViewAdapter; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +import app.fedilab.android.R; +import app.fedilab.android.activities.MediaActivity; +import app.fedilab.android.client.Entities.Attachment; + + +public class SliderAdapter extends SliderViewAdapter { + + private ArrayList attachments; + private WeakReference contextWeakReference; + + SliderAdapter(WeakReference contextWeakReference, ArrayList attachments) { + this.attachments = attachments; + this.contextWeakReference = contextWeakReference; + } + + @Override + public SliderAdapterVH onCreateViewHolder(ViewGroup parent) { + View inflate = LayoutInflater.from(parent.getContext()).inflate(R.layout.image_slider_layout_item, parent, false); + return new SliderAdapterVH(inflate); + } + + @Override + public void onBindViewHolder(SliderAdapterVH viewHolder, int position) { + + if( attachments.size() > 1) { + viewHolder.textViewDescription.setText(String.format("%s/%s", (position + 1), attachments.size())); + } + + Glide.with(viewHolder.imageViewBackground.getContext()) + .load(attachments.get(position).getPreview_url()) + .into(viewHolder.imageViewBackground); + viewHolder.imageViewBackground.setContentDescription(attachments.get(position).getDescription()); + viewHolder.imageViewBackground.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(contextWeakReference.get(), MediaActivity.class); + Bundle b = new Bundle(); + + intent.putParcelableArrayListExtra("mediaArray", attachments); + b.putInt("position", (position+1)); + intent.putExtras(b); + contextWeakReference.get().startActivity(intent); + } + }); + + } + + @Override + public int getCount() { + //slider view count could be dynamic size + return attachments.size(); + } + + class SliderAdapterVH extends SliderViewAdapter.ViewHolder { + + ImageView imageViewBackground; + TextView textViewDescription; + + SliderAdapterVH(View itemView) { + super(itemView); + imageViewBackground = itemView.findViewById(R.id.iv_auto_image_slider); + textViewDescription = itemView.findViewById(R.id.tv_auto_image_slider); + } + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/drawer_pixelfed.xml b/app/src/main/res/layout/drawer_pixelfed.xml index 984c682cf..858d236bc 100644 --- a/app/src/main/res/layout/drawer_pixelfed.xml +++ b/app/src/main/res/layout/drawer_pixelfed.xml @@ -15,6 +15,7 @@ see . --> + android:layout_height="wrap_content" + tools:ignore="RtlHardcoded" /> - - + android:layout_height="300dp" + app:sliderAnimationDuration="1000" + app:sliderAutoCycleDirection="back_and_forth" + app:sliderAutoCycleEnabled="true" + app:sliderCircularHandlerEnabled="true" + app:sliderIndicatorAnimationDuration="600" + app:sliderIndicatorGravity="center_horizontal|bottom" + app:sliderIndicatorMargin="15dp" + app:sliderIndicatorOrientation="horizontal" + app:sliderIndicatorPadding="3dp" + app:sliderIndicatorRadius="2dp" + app:sliderIndicatorSelectedColor="#5A5A5A" + app:sliderIndicatorUnselectedColor="#FFF" + app:sliderScrollTimeInSec="1" + app:sliderStartAutoCycle="false" /> + + + + + + + + + + + + + + + + \ No newline at end of file