summaryrefslogtreecommitdiffstats
path: root/app/src/main/java/app/fedilab/android/fragments
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/app/fedilab/android/fragments')
-rw-r--r--app/src/main/java/app/fedilab/android/fragments/ColorSettingsFragment.java2
-rw-r--r--app/src/main/java/app/fedilab/android/fragments/ContentSettingsFragment.java2
-rw-r--r--app/src/main/java/app/fedilab/android/fragments/DisplayMediaFragment.java18
-rw-r--r--app/src/main/java/app/fedilab/android/fragments/DisplayScheduledTootsFragment.java5
-rw-r--r--app/src/main/java/app/fedilab/android/fragments/MediaSliderFragment.java206
-rw-r--r--app/src/main/java/app/fedilab/android/fragments/TabLayoutTootsFragment.java3
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) {