mirror of
				https://codeberg.org/tom79/Fedilab.git
				synced 2025-10-20 11:20:16 +03:00 
			
		
		
		
	Display media (always/wifi/ask)
This commit is contained in:
		
							parent
							
								
									dc8243fd19
								
							
						
					
					
						commit
						5e5257b01c
					
				
					 7 changed files with 240 additions and 153 deletions
				
			
		| 
						 | 
					@ -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;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue