Display media (always/wifi/ask)

This commit is contained in:
Thomas 2022-10-05 16:05:53 +02:00
parent dc8243fd19
commit 5e5257b01c
7 changed files with 240 additions and 153 deletions

View file

@ -104,6 +104,7 @@ public class Status implements Serializable, Cloneable {
public boolean isChecked = false; public boolean isChecked = false;
public String translationContent; public String translationContent;
public boolean translationShown; public boolean translationShown;
public boolean canLoadMedia = false;
public transient boolean isFocused = false; public transient boolean isFocused = false;
public transient boolean setCursorToEnd = false; public transient boolean setCursorToEnd = false;
public transient int cursorPosition = 0; public transient int cursorPosition = 0;

View file

@ -15,6 +15,8 @@ package app.fedilab.android.helper;
* see <http://www.gnu.org/licenses>. */ * see <http://www.gnu.org/licenses>. */
import android.content.Context; import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Build; import android.os.Build;
import android.text.Html; import android.text.Html;
@ -239,4 +241,19 @@ public class TimelineHelper {
return notifications; return notifications;
} }
/**
* Check if WIFI is opened
*
* @param context Context
* @return boolean
*/
public static boolean isOnWIFI(Context context) {
ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connManager != null) {
NetworkInfo activeNetwork = connManager.getActiveNetworkInfo();
return (activeNetwork != null && activeNetwork.getType() == ConnectivityManager.TYPE_WIFI);
}
return false;
}
} }

View file

@ -129,6 +129,7 @@ import app.fedilab.android.helper.MastodonHelper;
import app.fedilab.android.helper.MediaHelper; import app.fedilab.android.helper.MediaHelper;
import app.fedilab.android.helper.SpannableHelper; import app.fedilab.android.helper.SpannableHelper;
import app.fedilab.android.helper.ThemeHelper; import app.fedilab.android.helper.ThemeHelper;
import app.fedilab.android.helper.TimelineHelper;
import app.fedilab.android.ui.fragment.timeline.FragmentMastodonContext; import app.fedilab.android.ui.fragment.timeline.FragmentMastodonContext;
import app.fedilab.android.viewmodel.mastodon.AccountsVM; import app.fedilab.android.viewmodel.mastodon.AccountsVM;
import app.fedilab.android.viewmodel.mastodon.SearchVM; import app.fedilab.android.viewmodel.mastodon.SearchVM;
@ -342,6 +343,7 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
boolean displayBookmark = sharedpreferences.getBoolean(context.getString(R.string.SET_DISPLAY_BOOKMARK), false); boolean displayBookmark = sharedpreferences.getBoolean(context.getString(R.string.SET_DISPLAY_BOOKMARK), false);
boolean long_press_media = sharedpreferences.getBoolean(context.getString(R.string.SET_LONG_PRESS_STORE_MEDIA), false); boolean long_press_media = sharedpreferences.getBoolean(context.getString(R.string.SET_LONG_PRESS_STORE_MEDIA), false);
boolean displayCounters = sharedpreferences.getBoolean(context.getString(R.string.SET_DISPLAY_COUNTER_FAV_BOOST), false); boolean displayCounters = sharedpreferences.getBoolean(context.getString(R.string.SET_DISPLAY_COUNTER_FAV_BOOST), false);
String loadMediaType = sharedpreferences.getString(context.getString(R.string.SET_LOAD_MEDIA_TYPE), "ALWAYS");
if (MainActivity.currentAccount != null && MainActivity.currentAccount.api == Account.API.PLEROMA) { if (MainActivity.currentAccount != null && MainActivity.currentAccount.api == Account.API.PLEROMA) {
if (status.pleroma != null && status.pleroma.emoji_reactions != null && status.pleroma.emoji_reactions.size() > 0) { if (status.pleroma != null && status.pleroma.emoji_reactions != null && status.pleroma.emoji_reactions.size() > 0) {
@ -1112,6 +1114,16 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
holder.binding.mediaContainer.removeAllViews(); holder.binding.mediaContainer.removeAllViews();
//If only one attachment //If only one attachment
if (statusToDeal.media_attachments.size() == 1) { if (statusToDeal.media_attachments.size() == 1) {
if ((loadMediaType.equals("ASK") || (loadMediaType.equals("WIFI") && !TimelineHelper.isOnWIFI(context))) && !statusToDeal.canLoadMedia) {
holder.binding.mediaContainer.setVisibility(View.GONE);
holder.binding.displayMedia.setVisibility(View.VISIBLE);
holder.binding.displayMedia.setOnClickListener(v -> {
statusToDeal.canLoadMedia = true;
adapter.notifyItemChanged(holder.getBindingAdapterPosition());
});
} else {
holder.binding.mediaContainer.setVisibility(View.VISIBLE);
holder.binding.displayMedia.setVisibility(View.GONE);
LayoutMediaBinding layoutMediaBinding = LayoutMediaBinding.inflate(LayoutInflater.from(context), holder.binding.attachmentsList, false); LayoutMediaBinding layoutMediaBinding = LayoutMediaBinding.inflate(LayoutInflater.from(context), holder.binding.attachmentsList, false);
RelativeLayout.LayoutParams lp; RelativeLayout.LayoutParams lp;
if (fullAttachement) { if (fullAttachement) {
@ -1208,7 +1220,16 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
holder.binding.mediaContainer.addView(layoutMediaBinding.getRoot()); holder.binding.mediaContainer.addView(layoutMediaBinding.getRoot());
holder.binding.mediaContainer.setVisibility(View.VISIBLE); holder.binding.mediaContainer.setVisibility(View.VISIBLE);
holder.binding.attachmentsListContainer.setVisibility(View.GONE); holder.binding.attachmentsListContainer.setVisibility(View.GONE);
}
} else { //Several media } else { //Several media
if ((loadMediaType.equals("ASK") || (loadMediaType.equals("WIFI") && !TimelineHelper.isOnWIFI(context))) && !statusToDeal.canLoadMedia) {
holder.binding.mediaContainer.setVisibility(View.GONE);
holder.binding.displayMedia.setVisibility(View.VISIBLE);
holder.binding.displayMedia.setOnClickListener(v -> {
statusToDeal.canLoadMedia = true;
adapter.notifyItemChanged(holder.getBindingAdapterPosition());
});
} else {
int mediaPosition = 1; int mediaPosition = 1;
for (Attachment attachment : statusToDeal.media_attachments) { for (Attachment attachment : statusToDeal.media_attachments) {
LayoutMediaBinding layoutMediaBinding = LayoutMediaBinding.inflate(LayoutInflater.from(context), holder.binding.attachmentsList, false); LayoutMediaBinding layoutMediaBinding = LayoutMediaBinding.inflate(LayoutInflater.from(context), holder.binding.attachmentsList, false);
@ -1294,7 +1315,9 @@ public class StatusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
holder.binding.mediaContainer.setVisibility(View.GONE); holder.binding.mediaContainer.setVisibility(View.GONE);
holder.binding.attachmentsListContainer.setVisibility(View.VISIBLE); holder.binding.attachmentsListContainer.setVisibility(View.VISIBLE);
} }
}
} else { } else {
holder.binding.displayMedia.setVisibility(View.GONE);
holder.binding.mediaContainer.setVisibility(View.GONE); holder.binding.mediaContainer.setVisibility(View.GONE);
holder.binding.attachmentsListContainer.setVisibility(View.GONE); holder.binding.attachmentsListContainer.setVisibility(View.GONE);
} }

View file

@ -17,10 +17,12 @@ package app.fedilab.android.ui.fragment.settings;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.os.Bundle; import android.os.Bundle;
import androidx.preference.ListPreference;
import androidx.preference.PreferenceFragmentCompat; import androidx.preference.PreferenceFragmentCompat;
import androidx.preference.PreferenceManager; import androidx.preference.PreferenceManager;
import app.fedilab.android.R; import app.fedilab.android.R;
import app.fedilab.android.helper.Helper;
public class FragmentTimelinesSettings extends PreferenceFragmentCompat implements SharedPreferences.OnSharedPreferenceChangeListener { public class FragmentTimelinesSettings extends PreferenceFragmentCompat implements SharedPreferences.OnSharedPreferenceChangeListener {
@ -31,7 +33,10 @@ public class FragmentTimelinesSettings extends PreferenceFragmentCompat implemen
} }
private void createPref() { private void createPref() {
ListPreference SET_LOAD_MEDIA_TYPE = findPreference(getString(R.string.SET_LOAD_MEDIA_TYPE));
if (SET_LOAD_MEDIA_TYPE != null) {
SET_LOAD_MEDIA_TYPE.getContext().setTheme(Helper.dialogStyle());
}
} }
@Override @Override

View file

@ -382,6 +382,21 @@
</com.google.android.material.card.MaterialCardView> </com.google.android.material.card.MaterialCardView>
<com.google.android.material.button.MaterialButton
android:id="@+id/display_media"
style="@style/Widget.MaterialComponents.Button.TextButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="10dp"
android:gravity="center_vertical"
android:singleLine="true"
android:text="@string/display_media"
android:textAllCaps="false"
android:visibility="gone"
app:iconTint="@color/cyanea_accent_reference"
app:strokeColor="@color/cyanea_accent_dark_reference" />
<androidx.appcompat.widget.LinearLayoutCompat <androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/media_container" android:id="@+id/media_container"
android:layout_width="match_parent" android:layout_width="match_parent"

View file

@ -747,6 +747,12 @@
<item>No notifications</item> <item>No notifications</item>
</string-array> </string-array>
<string-array name="set_load_media_type_value">
<item>Always</item>
<item>Wifi only</item>
<item>Ask</item>
</string-array>
<string-array name="set_notification_delay_values"> <string-array name="set_notification_delay_values">
<item>15 minutes</item> <item>15 minutes</item>
<item>30 minutes</item> <item>30 minutes</item>
@ -769,6 +775,8 @@
<string name="SET_CUSTOM_USER_AGENT" translatable="false">SET_CUSTOM_USER_AGENT</string> <string name="SET_CUSTOM_USER_AGENT" translatable="false">SET_CUSTOM_USER_AGENT</string>
<string name="SET_NSFW_TIMEOUT" translatable="false">SET_NSFW_TIMEOUT</string> <string name="SET_NSFW_TIMEOUT" translatable="false">SET_NSFW_TIMEOUT</string>
<string name="SET_NOTIFICATION_TYPE" translatable="false">SET_NOTIFICATION_TYPE</string> <string name="SET_NOTIFICATION_TYPE" translatable="false">SET_NOTIFICATION_TYPE</string>
<string name="SET_LOAD_MEDIA_TYPE" translatable="false">SET_LOAD_MEDIA_TYPE</string>
<string name="SET_NOTIFICATION_DELAY_VALUE" translatable="false">SET_NOTIFICATION_DELAY_VALUE</string> <string name="SET_NOTIFICATION_DELAY_VALUE" translatable="false">SET_NOTIFICATION_DELAY_VALUE</string>
<string name="SET_PUSH_DISTRIBUTOR" translatable="false">SET_PUSH_DISTRIBUTOR</string> <string name="SET_PUSH_DISTRIBUTOR" translatable="false">SET_PUSH_DISTRIBUTOR</string>
@ -777,6 +785,13 @@
<item>REPEAT_NOTIFICATIONS</item> <item>REPEAT_NOTIFICATIONS</item>
<item>NO_NOTIFICATIONS</item> <item>NO_NOTIFICATIONS</item>
</string-array> </string-array>
<string-array name="SET_LOAD_MEDIA_TYPE_VALUE" translatable="false">
<item>ALWAYS</item>
<item>WIFI</item>
<item>ASK</item>
</string-array>
<string-array name="SET_NOTIFICATION_DELAYS_VALUES" translatable="false"> <string-array name="SET_NOTIFICATION_DELAYS_VALUES" translatable="false">
<item>15</item> <item>15</item>
<item>30</item> <item>30</item>
@ -1453,4 +1468,6 @@
<string name="set_display_counter">Display counters for messages</string> <string name="set_display_counter">Display counters for messages</string>
<string name="set_use_cache">Use cache</string> <string name="set_use_cache">Use cache</string>
<string name="set_use_cache_indication">Timelines will be cached so the application will be faster.</string> <string name="set_use_cache_indication">Timelines will be cached so the application will be faster.</string>
<string name="load_media_type_title">Load thumbnails for media</string>
<string name="display_media">Display media</string>
</resources> </resources>

View file

@ -25,6 +25,15 @@
app:key="@string/SET_DISPLAY_BOOKMARK" app:key="@string/SET_DISPLAY_BOOKMARK"
app:singleLineTitle="false" app:singleLineTitle="false"
app:title="@string/set_display_bookmark_indication" /> app:title="@string/set_display_bookmark_indication" />
<ListPreference
app:defaultValue="ALWAYS"
app:dialogTitle="@string/load_media_type_title"
app:entries="@array/set_load_media_type_value"
app:entryValues="@array/SET_LOAD_MEDIA_TYPE_VALUE"
app:iconSpaceReserved="false"
app:key="@string/SET_LOAD_MEDIA_TYPE"
app:title="@string/load_media_type_title"
app:useSimpleSummaryProvider="true" />
<SwitchPreferenceCompat <SwitchPreferenceCompat
android:defaultValue="false" android:defaultValue="false"
app:iconSpaceReserved="false" app:iconSpaceReserved="false"