Release 3.19.1

inspect_home_cache
Thomas 2 years ago
parent a7c76e80a0
commit cea9abbc5b

@ -13,8 +13,8 @@ android {
defaultConfig { defaultConfig {
minSdk 21 minSdk 21
targetSdk 33 targetSdk 33
versionCode 481 versionCode 482
versionName "3.19.0" versionName "3.19.1"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
} }
flavorDimensions "default" flavorDimensions "default"

@ -1,4 +1,9 @@
[ [
{
"version": "3.19.1",
"code": "482",
"note": "Added:\n- Settings compose: display a dialog to warn if there are missing media description (default disabled)\n- Settings > Notification: disable battery optimization\n- Settings > Timelines: AutoPlay gif media (default: enabled)\n\nFixed:\n- Fix an issue with cache and fetch more\n- Cache view with large fonts\n- Bad behaviors with truncated messages"
},
{ {
"version": "3.19.0", "version": "3.19.0",
"code": "481", "code": "481",

@ -44,6 +44,7 @@ import android.graphics.PorterDuff;
import android.graphics.Typeface; import android.graphics.Typeface;
import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.CountDownTimer; import android.os.CountDownTimer;
@ -91,6 +92,12 @@ import com.bumptech.glide.ListPreloader;
import com.bumptech.glide.RequestBuilder; import com.bumptech.glide.RequestBuilder;
import com.bumptech.glide.request.RequestOptions; import com.bumptech.glide.request.RequestOptions;
import com.github.stom79.mytransl.MyTransL; import com.github.stom79.mytransl.MyTransL;
import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.MediaItem;
import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.source.ProgressiveMediaSource;
import com.google.android.exoplayer2.upstream.DataSource;
import com.google.android.exoplayer2.upstream.DefaultDataSource;
import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.smarteist.autoimageslider.SliderAnimations; import com.smarteist.autoimageslider.SliderAnimations;
import com.smarteist.autoimageslider.SliderView; import com.smarteist.autoimageslider.SliderView;
@ -141,6 +148,7 @@ import app.fedilab.android.mastodon.client.entities.app.StatusDraft;
import app.fedilab.android.mastodon.client.entities.app.Timeline; import app.fedilab.android.mastodon.client.entities.app.Timeline;
import app.fedilab.android.mastodon.exception.DBException; import app.fedilab.android.mastodon.exception.DBException;
import app.fedilab.android.mastodon.helper.BlurHashDecoder; import app.fedilab.android.mastodon.helper.BlurHashDecoder;
import app.fedilab.android.mastodon.helper.CacheDataSourceFactory;
import app.fedilab.android.mastodon.helper.CrossActionHelper; import app.fedilab.android.mastodon.helper.CrossActionHelper;
import app.fedilab.android.mastodon.helper.GlideApp; import app.fedilab.android.mastodon.helper.GlideApp;
import app.fedilab.android.mastodon.helper.GlideFocus; import app.fedilab.android.mastodon.helper.GlideFocus;
@ -1438,6 +1446,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
}); });
} else { } else {
int mediaPosition = 1; int mediaPosition = 1;
boolean autoplaygif = sharedpreferences.getBoolean(context.getString(R.string.SET_AUTO_PLAY_GIG_MEDIA), true);
if (!fullAttachement || statusToDeal.sensitive) { if (!fullAttachement || statusToDeal.sensitive) {
int defaultHeight = (int) Helper.convertDpToPixel(300, context); int defaultHeight = (int) Helper.convertDpToPixel(300, context);
if (measuredWidth > 0) { if (measuredWidth > 0) {
@ -1530,11 +1539,73 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
ratio = measuredWidth > 0 ? measuredWidth / mediaW : 1.0f; ratio = measuredWidth > 0 ? measuredWidth / mediaW : 1.0f;
} }
} }
if (autoplaygif && attachment.type.equalsIgnoreCase("gifv")) {
layoutMediaBinding.media.setVisibility(View.GONE);
layoutMediaBinding.mediaVideo.setVisibility(View.VISIBLE);
LinearLayout.LayoutParams lp;
if (fullAttachement && mediaH > 0 && (!statusToDeal.sensitive || expand_media)) {
lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, (int) (mediaH * ratio));
} else {
lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
}
layoutMediaBinding.mediaVideo.setLayoutParams(lp);
layoutMediaBinding.mediaVideo.onResume();
Uri uri = Uri.parse(attachment.url);
int video_cache = sharedpreferences.getInt(context.getString(R.string.SET_VIDEO_CACHE), Helper.DEFAULT_VIDEO_CACHE_MB);
ProgressiveMediaSource videoSource;
MediaItem mediaItem = new MediaItem.Builder().setUri(uri).build();
if (video_cache == 0) {
DataSource.Factory dataSourceFactory = new DefaultDataSource.Factory(context);
videoSource = new ProgressiveMediaSource.Factory(dataSourceFactory)
.createMediaSource(mediaItem);
} else {
CacheDataSourceFactory cacheDataSourceFactory = new CacheDataSourceFactory(context);
videoSource = new ProgressiveMediaSource.Factory(cacheDataSourceFactory)
.createMediaSource(mediaItem);
}
ExoPlayer player = new ExoPlayer.Builder(context).build();
player.setRepeatMode(Player.REPEAT_MODE_ONE);
layoutMediaBinding.mediaVideo.setPlayer(player);
player.setMediaSource(videoSource);
player.prepare();
player.setPlayWhenReady(true);
} else {
loadAndAddAttachment(context, layoutMediaBinding, holder, adapter, mediaPosition, mediaW, mediaH, ratio, statusToDeal, attachment); loadAndAddAttachment(context, layoutMediaBinding, holder, adapter, mediaPosition, mediaW, mediaH, ratio, statusToDeal, attachment);
}
} else if (layoutMediaBinding != null) { } else if (layoutMediaBinding != null) {
if (autoplaygif && attachment.type.equalsIgnoreCase("gifv")) {
layoutMediaBinding.media.setVisibility(View.GONE);
layoutMediaBinding.mediaVideo.setVisibility(View.VISIBLE);
layoutMediaBinding.mediaVideo.onResume();
Uri uri = Uri.parse(attachment.url);
int video_cache = sharedpreferences.getInt(context.getString(R.string.SET_VIDEO_CACHE), Helper.DEFAULT_VIDEO_CACHE_MB);
ProgressiveMediaSource videoSource;
MediaItem mediaItem = new MediaItem.Builder().setUri(uri).build();
if (video_cache == 0) {
DataSource.Factory dataSourceFactory = new DefaultDataSource.Factory(context);
videoSource = new ProgressiveMediaSource.Factory(dataSourceFactory)
.createMediaSource(mediaItem);
} else {
CacheDataSourceFactory cacheDataSourceFactory = new CacheDataSourceFactory(context);
videoSource = new ProgressiveMediaSource.Factory(cacheDataSourceFactory)
.createMediaSource(mediaItem);
}
ExoPlayer player = new ExoPlayer.Builder(context).build();
player.setRepeatMode(Player.REPEAT_MODE_ONE);
layoutMediaBinding.mediaVideo.setPlayer(player);
player.setMediaSource(videoSource);
player.prepare();
player.setPlayWhenReady(true);
} else {
loadAndAddAttachment(context, layoutMediaBinding, holder, adapter, mediaPosition, -1.f, -1.f, -1.f, statusToDeal, attachment); loadAndAddAttachment(context, layoutMediaBinding, holder, adapter, mediaPosition, -1.f, -1.f, -1.f, statusToDeal, attachment);
} }
}
mediaPosition++; mediaPosition++;
} }
if (!fullAttachement || (statusToDeal.sensitive && !expand_media)) { if (!fullAttachement || (statusToDeal.sensitive && !expand_media)) {
@ -2391,7 +2462,9 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
layoutMediaBinding.media.setScaleType(ImageView.ScaleType.CENTER_CROP); layoutMediaBinding.media.setScaleType(ImageView.ScaleType.CENTER_CROP);
} }
layoutMediaBinding.media.setVisibility(View.VISIBLE);
layoutMediaBinding.mediaVideo.setVisibility(View.GONE);
layoutMediaBinding.mediaVideo.onPause();
layoutMediaBinding.media.setLayoutParams(lp); layoutMediaBinding.media.setLayoutParams(lp);
float focusX = 0.f; float focusX = 0.f;

@ -18,6 +18,18 @@
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription" /> tools:ignore="ContentDescription" />
<com.google.android.exoplayer2.ui.PlayerView
android:id="@+id/media_video"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:use_controller="false"
tools:visibility="visible" />
<androidx.appcompat.widget.AppCompatImageView <androidx.appcompat.widget.AppCompatImageView
android:id="@+id/play_video" android:id="@+id/play_video"
android:layout_width="wrap_content" android:layout_width="wrap_content"

@ -1065,7 +1065,7 @@
<string name="SET_DEFAULT_THEME" translatable="false">SYSTEM</string> <string name="SET_DEFAULT_THEME" translatable="false">SYSTEM</string>
<string name="SET_AUTO_PLAY_GIG_MEDIA" translatable="false">SET_AUTO_PLAY_GIG_MEDIA</string>
<string name="SET_FULL_PREVIEW" translatable="false">SET_FULL_PREVIEW</string> <string name="SET_FULL_PREVIEW" translatable="false">SET_FULL_PREVIEW</string>
<string name="SET_SHARE_DETAILS" translatable="false">SET_SHARE_DETAILS</string> <string name="SET_SHARE_DETAILS" translatable="false">SET_SHARE_DETAILS</string>
<string name="SET_CUSTOM_SHARING" translatable="false">SET_CUSTOM_SHARING</string> <string name="SET_CUSTOM_SHARING" translatable="false">SET_CUSTOM_SHARING</string>
@ -1926,4 +1926,5 @@
<string name="set_alt_text_mandatory_description_warn">If there are missing media a dialog will be displayed with the ability to send the message without media description</string> <string name="set_alt_text_mandatory_description_warn">If there are missing media a dialog will be displayed with the ability to send the message without media description</string>
<string name="send_anyway">Send anyway</string> <string name="send_anyway">Send anyway</string>
<string name="set_remove_battery">Ignore battery optimizations</string> <string name="set_remove_battery">Ignore battery optimizations</string>
<string name="set_autoplay_gif">Autoplay animated media</string>
</resources> </resources>

@ -200,12 +200,21 @@
app:key="@string/SET_FULL_PREVIEW" app:key="@string/SET_FULL_PREVIEW"
app:singleLineTitle="false" app:singleLineTitle="false"
app:title="@string/set_fit_preview" /> app:title="@string/set_fit_preview" />
<SwitchPreferenceCompat
android:defaultValue="true"
app:iconSpaceReserved="false"
app:key="@string/SET_AUTO_PLAY_GIG_MEDIA"
app:singleLineTitle="false"
app:title="@string/set_autoplay_gif" />
<SwitchPreferenceCompat <SwitchPreferenceCompat
android:defaultValue="false" android:defaultValue="false"
app:iconSpaceReserved="false" app:iconSpaceReserved="false"
app:key="@string/SET_DISABLE_GIF" app:key="@string/SET_DISABLE_GIF"
app:singleLineTitle="false" app:singleLineTitle="false"
app:title="@string/set_disable_gif" /> app:title="@string/set_disable_gif" />
<SwitchPreferenceCompat <SwitchPreferenceCompat
android:defaultValue="false" android:defaultValue="false"
app:iconSpaceReserved="false" app:iconSpaceReserved="false"

@ -1,9 +1,7 @@
Added: Added:
- Settings compose: display a dialog to warn if there are missing media description (default disabled) - Settings compose: display a dialog to warn if there are missing media description (default disabled)
- Settings > Notification: disable battery optimization - Settings > Notification: disable battery optimization
- Settings > Timelines: AutoPlay gif media (default: enabled)
Changed:
-
Fixed: Fixed:
- Fix an issue with cache and fetch more - Fix an issue with cache and fetch more

Loading…
Cancel
Save