diff options
Diffstat (limited to 'app/src/main/java/app/fedilab/android/fragments')
6 files changed, 162 insertions, 74 deletions
diff --git a/app/src/main/java/app/fedilab/android/fragments/ColorSettingsFragment.java b/app/src/main/java/app/fedilab/android/fragments/ColorSettingsFragment.java index a94eadc63..2ada8d3df 100644 --- a/app/src/main/java/app/fedilab/android/fragments/ColorSettingsFragment.java +++ b/app/src/main/java/app/fedilab/android/fragments/ColorSettingsFragment.java @@ -266,7 +266,7 @@ public class ColorSettingsFragment extends PreferenceFragmentCompat implements S } List<String> array = Arrays.asList(getResources().getStringArray(R.array.settings_theme)); - CharSequence[] entries = array.toArray(new CharSequence[array.size()]); + CharSequence[] entries = array.toArray(new CharSequence[0]); CharSequence[] entryValues = new CharSequence[3]; final SharedPreferences sharedpref = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); int theme = sharedpref.getInt(Helper.SET_THEME, Helper.THEME_DARK); diff --git a/app/src/main/java/app/fedilab/android/fragments/ContentSettingsFragment.java b/app/src/main/java/app/fedilab/android/fragments/ContentSettingsFragment.java index 9bb0f09e9..ee630d4f8 100644 --- a/app/src/main/java/app/fedilab/android/fragments/ContentSettingsFragment.java +++ b/app/src/main/java/app/fedilab/android/fragments/ContentSettingsFragment.java @@ -1538,7 +1538,7 @@ public class ContentSettingsFragment extends Fragment implements OnRetrieveRemot if (featuredTagsSet != null) { tags = new ArrayList<>(featuredTagsSet); } - String[] tagsString = tags.toArray(new String[tags.size()]); + String[] tagsString = tags.toArray(new String[0]); set_featured_tags.setTags(tagsString); set_featured_tags.setTagsListener(new TagsEditText.TagsEditListener() { diff --git a/app/src/main/java/app/fedilab/android/fragments/DisplayMediaFragment.java b/app/src/main/java/app/fedilab/android/fragments/DisplayMediaFragment.java index 3895f6564..83b51f519 100644 --- a/app/src/main/java/app/fedilab/android/fragments/DisplayMediaFragment.java +++ b/app/src/main/java/app/fedilab/android/fragments/DisplayMediaFragment.java @@ -15,7 +15,6 @@ package app.fedilab.android.fragments; * see <http://www.gnu.org/licenses>. */ import android.content.Context; -import android.content.SharedPreferences; import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; @@ -31,6 +30,8 @@ import androidx.fragment.app.Fragment; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; +import org.jetbrains.annotations.NotNull; + import java.util.ArrayList; import java.util.List; @@ -61,7 +62,6 @@ public class DisplayMediaFragment extends Fragment implements OnRetrieveFeedsInt private boolean firstLoad; private String targetedId; private boolean showMediaOnly, showPinned, showReply; - private SharedPreferences sharedpreferences; private ArrayList<Status> statuses; private ImageAdapter gridAdaper; private RecyclerView gridview; @@ -84,7 +84,6 @@ public class DisplayMediaFragment extends Fragment implements OnRetrieveFeedsInt showReply = false; firstLoad = true; assert context != null; - sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE); mainLoader = rootView.findViewById(R.id.loader); nextElementLoader = rootView.findViewById(R.id.loading_next_status); textviewNoAction = rootView.findViewById(R.id.no_action); @@ -105,7 +104,7 @@ public class DisplayMediaFragment extends Fragment implements OnRetrieveFeedsInt gridview.addOnScrollListener(new RecyclerView.OnScrollListener() { - public void onScrolled(RecyclerView recyclerView, int dx, int dy) { + public void onScrolled(@NotNull RecyclerView recyclerView, int dx, int dy) { int firstVisibleItem = gvLayout.findFirstVisibleItemPosition(); if (dy > 0) { int visibleItemCount = gvLayout.getChildCount(); @@ -129,12 +128,9 @@ public class DisplayMediaFragment extends Fragment implements OnRetrieveFeedsInt if (context != null) { asyncTask = new RetrieveFeedsAsyncTask(context, RetrieveFeedsAsyncTask.Type.USER, targetedId, max_id, showMediaOnly, showPinned, showReply, DisplayMediaFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } else { - new Handler(Looper.getMainLooper()).postDelayed(new Runnable() { - @Override - public void run() { - if (context != null) { - asyncTask = new RetrieveFeedsAsyncTask(context, RetrieveFeedsAsyncTask.Type.USER, targetedId, max_id, showMediaOnly, showPinned, showReply, DisplayMediaFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); - } + new Handler(Looper.getMainLooper()).postDelayed(() -> { + if (context != null) { + asyncTask = new RetrieveFeedsAsyncTask(context, RetrieveFeedsAsyncTask.Type.USER, targetedId, max_id, showMediaOnly, showPinned, showReply, DisplayMediaFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } }, 500); } @@ -158,7 +154,7 @@ public class DisplayMediaFragment extends Fragment implements OnRetrieveFeedsInt } @Override - public void onAttach(Context context) { + public void onAttach(@NotNull Context context) { super.onAttach(context); this.context = context; } diff --git a/app/src/main/java/app/fedilab/android/fragments/DisplayScheduledTootsFragment.java b/app/src/main/java/app/fedilab/android/fragments/DisplayScheduledTootsFragment.java index 17f8fc8c5..81026d3f0 100644 --- a/app/src/main/java/app/fedilab/android/fragments/DisplayScheduledTootsFragment.java +++ b/app/src/main/java/app/fedilab/android/fragments/DisplayScheduledTootsFragment.java @@ -40,6 +40,8 @@ import android.widget.Toast; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; +import org.jetbrains.annotations.NotNull; + import java.util.ArrayList; import java.util.List; @@ -194,7 +196,7 @@ public class DisplayScheduledTootsFragment extends Fragment implements OnRetriev } @Override - public void onAttach(Context context) { + public void onAttach(@NotNull Context context) { super.onAttach(context); this.context = context; } @@ -224,7 +226,6 @@ public class DisplayScheduledTootsFragment extends Fragment implements OnRetriev if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) message = Html.fromHtml(context.getString(R.string.no_scheduled_boosts_indications), Html.FROM_HTML_MODE_LEGACY); else - //noinspection deprecation message = Html.fromHtml(context.getString(R.string.no_scheduled_boosts_indications)); no_action_text_subtitle.setText(message, TextView.BufferType.SPANNABLE); } diff --git a/app/src/main/java/app/fedilab/android/fragments/MediaSliderFragment.java b/app/src/main/java/app/fedilab/android/fragments/MediaSliderFragment.java index e54d28ee8..1ce603314 100644 --- a/app/src/main/java/app/fedilab/android/fragments/MediaSliderFragment.java +++ b/app/src/main/java/app/fedilab/android/fragments/MediaSliderFragment.java @@ -30,6 +30,7 @@ import android.os.Handler; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.view.ViewTreeObserver; import android.view.WindowManager; import android.widget.FrameLayout; import android.widget.ImageButton; @@ -40,6 +41,8 @@ import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; @@ -115,6 +118,12 @@ public class MediaSliderFragment extends Fragment implements MediaPlayer.OnCompl private SlidrInterface slidrInterface; private boolean swipeEnabled; private int bgColor; + private RelativeLayout media_fragment_container; + private RelativeLayout content_audio; + private PlayerView videoView; + private CustomWebview webview_video; + private FrameLayout webview_container; + private RelativeLayout videoLayout; public MediaSliderFragment() { } @@ -134,7 +143,7 @@ public class MediaSliderFragment extends Fragment implements MediaPlayer.OnCompl swipeEnabled = true; message_ready = rootView.findViewById(R.id.message_ready); - RelativeLayout content_audio = rootView.findViewById(R.id.content_audio); + content_audio = rootView.findViewById(R.id.content_audio); SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE); int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_DARK); @@ -144,7 +153,7 @@ public class MediaSliderFragment extends Fragment implements MediaPlayer.OnCompl ImageView next = rootView.findViewById(R.id.media_next); imageView = rootView.findViewById(R.id.media_picture); - PlayerView videoView = rootView.findViewById(R.id.media_video); + videoView = rootView.findViewById(R.id.media_video); if (theme == Helper.THEME_BLACK) { changeDrawableColor(context, prev, R.color.dark_icon); changeDrawableColor(context, next, R.color.dark_icon); @@ -182,68 +191,97 @@ public class MediaSliderFragment extends Fragment implements MediaPlayer.OnCompl url = attachment.getRemote_url(); attachment.setType(type); } - - if (bgColor != -1) { - RelativeLayout media_fragment_container = rootView.findViewById(R.id.media_fragment_container); - media_fragment_container.setBackgroundColor(bgColor); + media_fragment_container = rootView.findViewById(R.id.media_fragment_container); + imageView.setVisibility(View.VISIBLE); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + imageView.setTransitionName(attachment.getUrl()); } - - switch (type.toLowerCase()) { - case "image": - pbar_inf.setScaleY(1f); - imageView.setVisibility(View.VISIBLE); - pbar_inf.setIndeterminate(true); - loader.setVisibility(View.VISIBLE); - if (!url.endsWith(".gif")) { - Glide.with(context) - .asBitmap() - .load(preview_url).into( - new CustomTarget<Bitmap>() { - @Override - public void onResourceReady(@NonNull final Bitmap resource, Transition<? super Bitmap> transition) { - Bitmap imageCompressed = Helper.compressImageIfNeeded(resource); - imageView.setImageBitmap(imageCompressed); - Glide.with(context) - .asBitmap() - .load(url).into( - new CustomTarget<Bitmap>() { - @Override - public void onResourceReady(@NonNull final Bitmap resource, Transition<? super Bitmap> transition) { - loader.setVisibility(View.GONE); - Bitmap imageCompressed = Helper.compressImageIfNeeded(resource); - if (imageView.getScale() < 1.1) { - imageView.setImageBitmap(imageCompressed); - } else { - message_ready.setVisibility(View.VISIBLE); + if (Helper.isValidContextForGlide(context)) { + Glide.with(context) + .asBitmap() + .dontTransform() + .load(preview_url).into( + new CustomTarget<Bitmap>() { + @Override + public void onResourceReady(@NonNull final Bitmap resource, Transition<? super Bitmap> transition) { + //Bitmap imageCompressed = Helper.compressImageIfNeeded(resource); + imageView.setImageBitmap(resource); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + scheduleStartPostponedTransition(imageView); + } + if (bgColor != -1) { + media_fragment_container.setBackgroundColor(bgColor); + } + if (attachment.getType().toLowerCase().compareTo("image") == 0 && !attachment.getUrl().endsWith(".gif")) { + final Handler handler = new Handler(); + handler.postDelayed(() -> { + pbar_inf.setScaleY(1f); + imageView.setVisibility(View.VISIBLE); + pbar_inf.setIndeterminate(true); + loader.setVisibility(View.VISIBLE); + if (Helper.isValidContextForGlide(context)) { + Glide.with(context) + .asBitmap() + .dontTransform() + .load(url).into( + new CustomTarget<Bitmap>() { + @Override + public void onResourceReady(@NonNull final Bitmap resource, Transition<? super Bitmap> transition) { + loader.setVisibility(View.GONE); + Bitmap imageCompressed = Helper.compressImageIfNeeded(resource); + if (imageView.getScale() < 1.1) { + imageView.setImageBitmap(imageCompressed); + } else { + message_ready.setVisibility(View.VISIBLE); + } + message_ready.setOnClickListener(view -> { + imageView.setImageBitmap(imageCompressed); + message_ready.setVisibility(View.GONE); + }); } - message_ready.setOnClickListener(view -> { - imageView.setImageBitmap(imageCompressed); - message_ready.setVisibility(View.GONE); - }); - } - @Override - public void onLoadCleared(@Nullable Drawable placeholder) { + @Override + public void onLoadCleared(@Nullable Drawable placeholder) { + } } - } - ); - } + ); + } + }, 1000); - @Override - public void onLoadCleared(@Nullable Drawable placeholder) { + } else if (attachment.getType().toLowerCase().compareTo("image") == 0 && attachment.getUrl().endsWith(".gif")) { + loader.setVisibility(View.GONE); + if (Helper.isValidContextForGlide(context)) { + Glide.with(context) + .load(url).into(imageView); + } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + scheduleStartPostponedTransition(imageView); } } - ); - } else { - loader.setVisibility(View.GONE); - Glide.with(context) - .load(url).into(imageView); - } - break; + } + + @Override + public void onLoadFailed(@Nullable Drawable errorDrawable) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + scheduleStartPostponedTransition(imageView); + } + } + + @Override + public void onLoadCleared(@Nullable Drawable placeholder) { + + } + } + ); + } + switch (type.toLowerCase()) { case "video": case "gifv": + if (bgColor != -1) { + media_fragment_container.setBackgroundColor(bgColor); + } pbar_inf.setIndeterminate(false); pbar_inf.setScaleY(3f); try { @@ -272,19 +310,23 @@ public class MediaSliderFragment extends Fragment implements MediaPlayer.OnCompl player.setRepeatMode(Player.REPEAT_MODE_ONE); videoView.setPlayer(player); loader.setVisibility(View.GONE); + imageView.setVisibility(View.GONE); player.prepare(videoSource); player.setPlayWhenReady(true); break; case "web": + if (bgColor != -1) { + media_fragment_container.setBackgroundColor(bgColor); + } loader.setVisibility(View.GONE); - CustomWebview webview_video = Helper.initializeWebview((Activity) context, R.id.webview_video, null); + imageView.setVisibility(View.GONE); + webview_video = Helper.initializeWebview((Activity) context, R.id.webview_video, rootView); webview_video.setVisibility(View.VISIBLE); - FrameLayout webview_container = rootView.findViewById(R.id.main_media_frame); - final ViewGroup videoLayout = rootView.findViewById(R.id.videoLayout); + webview_container = rootView.findViewById(R.id.main_media_frame); + videoLayout = rootView.findViewById(R.id.videoLayout); MastalabWebChromeClient mastalabWebChromeClient = new MastalabWebChromeClient((Activity) context, webview_video, webview_container, videoLayout); mastalabWebChromeClient.setOnToggledFullscreen(fullscreen -> { - if (fullscreen) { videoLayout.setVisibility(View.VISIBLE); WindowManager.LayoutParams attrs = ((Activity) context).getWindow().getAttributes(); @@ -312,7 +354,11 @@ public class MediaSliderFragment extends Fragment implements MediaPlayer.OnCompl webview_video.loadUrl(attachment.getUrl()); break; case "audio": + if (bgColor != -1) { + media_fragment_container.setBackgroundColor(bgColor); + } loader.setVisibility(View.GONE); + imageView.setVisibility(View.GONE); content_audio.setVisibility(View.VISIBLE); int color = getResources().getColor(R.color.mastodonC1); visualizerView = new GLAudioVisualizationView.Builder(context) @@ -386,7 +432,6 @@ public class MediaSliderFragment extends Fragment implements MediaPlayer.OnCompl } catch (Exception ignored) { } } - stopTimer(); } @@ -458,6 +503,9 @@ public class MediaSliderFragment extends Fragment implements MediaPlayer.OnCompl if (playeraudio != null) { playeraudio.pause(); } + if (webview_video != null) { + webview_video.onPause(); + } try { visualizerView.onPause(); } catch (Exception ignored) { @@ -478,6 +526,9 @@ public class MediaSliderFragment extends Fragment implements MediaPlayer.OnCompl } } catch (Exception ignored) { } + if (webview_video != null) { + webview_video.destroy(); + } if (timer != null) { timer.cancel(); timer = null; @@ -504,6 +555,9 @@ public class MediaSliderFragment extends Fragment implements MediaPlayer.OnCompl visualizerView.onResume(); } catch (Exception ignored) { } + if (webview_video != null) { + webview_video.onResume(); + } if (slidrInterface == null && rootView != null) { slidrInterface = Slidr.replace(rootView.findViewById(R.id.media_fragment_container), new SlidrConfig.Builder().sensitivity(1f) .scrimColor(Color.BLACK) @@ -521,7 +575,30 @@ public class MediaSliderFragment extends Fragment implements MediaPlayer.OnCompl @Override public void onSlideChange(float percent) { - ((SlideMediaActivity) context).setFullscreen(true); + if (percent < 0.80 && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + + if (imageView != null) { + imageView.setVisibility(View.VISIBLE); + } + if (content_audio != null) { + content_audio.setVisibility(View.GONE); + } + if (videoView != null) { + videoView.setVisibility(View.GONE); + } + if (webview_video != null) { + webview_video.setVisibility(View.GONE); + webview_video.destroy(); + } + if (webview_container != null) { + webview_container.setVisibility(View.GONE); + } + if (videoLayout != null) { + videoLayout.setVisibility(View.GONE); + } + ActivityCompat.finishAfterTransition((AppCompatActivity) context); + } + } @Override @@ -538,6 +615,17 @@ public class MediaSliderFragment extends Fragment implements MediaPlayer.OnCompl } } + private void scheduleStartPostponedTransition(final ImageView imageView) { + imageView.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { + @Override + public boolean onPreDraw() { + imageView.getViewTreeObserver().removeOnPreDrawListener(this); + ActivityCompat.startPostponedEnterTransition((Activity) context); + return true; + } + }); + } + private void enableSliding(boolean enable) { if (enable && !swipeEnabled) { slidrInterface.unlock(); diff --git a/app/src/main/java/app/fedilab/android/fragments/TabLayoutTootsFragment.java b/app/src/main/java/app/fedilab/android/fragments/TabLayoutTootsFragment.java index cd6fe6a77..f036198e2 100644 --- a/app/src/main/java/app/fedilab/android/fragments/TabLayoutTootsFragment.java +++ b/app/src/main/java/app/fedilab/android/fragments/TabLayoutTootsFragment.java @@ -28,6 +28,8 @@ import androidx.viewpager.widget.ViewPager; import com.google.android.material.tabs.TabLayout; +import org.jetbrains.annotations.NotNull; + import java.util.Objects; import app.fedilab.android.R; @@ -105,6 +107,7 @@ public class TabLayoutTootsFragment extends Fragment { this.mNumOfTabs = NumOfTabs; } + @NotNull @Override public Fragment getItem(int position) { switch (position) { |