mirror of
https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy.git
synced 2025-01-12 11:17:11 +01:00
Add ViewGifActivity to view gifs. Fixed some links cannot be opened by browsers. Maybe fixed IllegalStateException in ViewSubredditDetailActivity and FilteredThingActivity. Minor bugs fixed.
This commit is contained in:
parent
35f9a645d8
commit
c4fd313839
@ -2,15 +2,6 @@
|
|||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
package="ml.docilealligator.infinityforreddit">
|
package="ml.docilealligator.infinityforreddit">
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
|
||||||
<uses-permission android:name="android.permission.INTERNET" />
|
|
||||||
|
|
||||||
<uses-permission
|
|
||||||
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
|
|
||||||
android:maxSdkVersion="22" />
|
|
||||||
|
|
||||||
<uses-permission-sdk-23 android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
|
||||||
|
|
||||||
<application
|
<application
|
||||||
android:name=".Infinity"
|
android:name=".Infinity"
|
||||||
android:allowBackup="true"
|
android:allowBackup="true"
|
||||||
@ -20,6 +11,10 @@
|
|||||||
android:supportsRtl="true"
|
android:supportsRtl="true"
|
||||||
android:theme="@style/AppTheme"
|
android:theme="@style/AppTheme"
|
||||||
android:usesCleartextTraffic="true">
|
android:usesCleartextTraffic="true">
|
||||||
|
<activity
|
||||||
|
android:name=".Activity.ViewGIFActivity"
|
||||||
|
android:parentActivityName=".Activity.MainActivity"
|
||||||
|
android:theme="@style/AppTheme.ActionBar.Transparent" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".Activity.AccountSavedThingActivity"
|
android:name=".Activity.AccountSavedThingActivity"
|
||||||
android:label="@string/account_saved_thing_activity"
|
android:label="@string/account_saved_thing_activity"
|
||||||
@ -258,5 +253,13 @@
|
|||||||
android:enabled="true"
|
android:enabled="true"
|
||||||
android:exported="false" />
|
android:exported="false" />
|
||||||
</application>
|
</application>
|
||||||
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
|
<uses-permission
|
||||||
|
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
|
||||||
|
android:maxSdkVersion="22" />
|
||||||
|
|
||||||
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||||||
|
|
||||||
|
<uses-permission-sdk-23 android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||||
|
|
||||||
</manifest>
|
</manifest>
|
@ -148,11 +148,15 @@ public class FilteredThingActivity extends BaseActivity implements SortTypeBotto
|
|||||||
isInLazyMode = savedInstanceState.getBoolean(IS_IN_LAZY_MODE_STATE);
|
isInLazyMode = savedInstanceState.getBoolean(IS_IN_LAZY_MODE_STATE);
|
||||||
mNullAccessToken = savedInstanceState.getBoolean(NULL_ACCESS_TOKEN_STATE);
|
mNullAccessToken = savedInstanceState.getBoolean(NULL_ACCESS_TOKEN_STATE);
|
||||||
mAccessToken = savedInstanceState.getString(ACCESS_TOKEN_STATE);
|
mAccessToken = savedInstanceState.getString(ACCESS_TOKEN_STATE);
|
||||||
|
|
||||||
|
mFragment = getSupportFragmentManager().getFragment(savedInstanceState, FRAGMENT_OUT_STATE);
|
||||||
|
getSupportFragmentManager().beginTransaction().replace(R.id.frame_layout_filtered_posts_activity, mFragment).commit();
|
||||||
|
|
||||||
if (!mNullAccessToken && mAccessToken == null) {
|
if (!mNullAccessToken && mAccessToken == null) {
|
||||||
getCurrentAccountAndBindView(filter, sortType);
|
getCurrentAccountAndBindView(filter, sortType);
|
||||||
} else {
|
} else {
|
||||||
mFragment = getSupportFragmentManager().getFragment(savedInstanceState, FRAGMENT_OUT_STATE);
|
/*mFragment = getSupportFragmentManager().getFragment(savedInstanceState, FRAGMENT_OUT_STATE);
|
||||||
getSupportFragmentManager().beginTransaction().replace(R.id.frame_layout_filtered_posts_activity, mFragment).commit();
|
getSupportFragmentManager().beginTransaction().replace(R.id.frame_layout_filtered_posts_activity, mFragment).commit();*/
|
||||||
bindView(filter, sortType, false);
|
bindView(filter, sortType, false);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -236,7 +240,7 @@ public class FilteredThingActivity extends BaseActivity implements SortTypeBotto
|
|||||||
case Post.VIDEO_TYPE:
|
case Post.VIDEO_TYPE:
|
||||||
toolbar.setSubtitle(R.string.video);
|
toolbar.setSubtitle(R.string.video);
|
||||||
break;
|
break;
|
||||||
case Post.GIF_VIDEO_TYPE:
|
case Post.GIF_TYPE:
|
||||||
toolbar.setSubtitle(R.string.gif);
|
toolbar.setSubtitle(R.string.gif);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -333,9 +337,7 @@ public class FilteredThingActivity extends BaseActivity implements SortTypeBotto
|
|||||||
@Override
|
@Override
|
||||||
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
||||||
super.onSaveInstanceState(outState);
|
super.onSaveInstanceState(outState);
|
||||||
if (mFragment != null) {
|
|
||||||
getSupportFragmentManager().putFragment(outState, FRAGMENT_OUT_STATE, mFragment);
|
getSupportFragmentManager().putFragment(outState, FRAGMENT_OUT_STATE, mFragment);
|
||||||
}
|
|
||||||
outState.putBoolean(IS_IN_LAZY_MODE_STATE, isInLazyMode);
|
outState.putBoolean(IS_IN_LAZY_MODE_STATE, isInLazyMode);
|
||||||
outState.putString(ACCESS_TOKEN_STATE, mAccessToken);
|
outState.putString(ACCESS_TOKEN_STATE, mAccessToken);
|
||||||
outState.putBoolean(NULL_ACCESS_TOKEN_STATE, mNullAccessToken);
|
outState.putBoolean(NULL_ACCESS_TOKEN_STATE, mNullAccessToken);
|
||||||
|
@ -165,7 +165,6 @@ public class LinkResolverActivity extends AppCompatActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!packageNames.isEmpty()) {
|
if (!packageNames.isEmpty()) {
|
||||||
intent.setPackage(packageNames.get(0));
|
|
||||||
try {
|
try {
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
} catch (ActivityNotFoundException e) {
|
} catch (ActivityNotFoundException e) {
|
||||||
|
@ -0,0 +1,448 @@
|
|||||||
|
package ml.docilealligator.infinityforreddit.Activity;
|
||||||
|
|
||||||
|
import android.Manifest;
|
||||||
|
import android.animation.Animator;
|
||||||
|
import android.animation.ArgbEvaluator;
|
||||||
|
import android.animation.ValueAnimator;
|
||||||
|
import android.app.DownloadManager;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
|
import android.graphics.PorterDuff;
|
||||||
|
import android.graphics.drawable.ColorDrawable;
|
||||||
|
import android.graphics.drawable.Drawable;
|
||||||
|
import android.net.Uri;
|
||||||
|
import android.os.Build;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.os.Environment;
|
||||||
|
import android.view.Menu;
|
||||||
|
import android.view.MenuItem;
|
||||||
|
import android.view.MotionEvent;
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.LinearLayout;
|
||||||
|
import android.widget.ProgressBar;
|
||||||
|
import android.widget.RelativeLayout;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.appcompat.app.ActionBar;
|
||||||
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
|
import androidx.core.app.ActivityCompat;
|
||||||
|
import androidx.core.content.ContextCompat;
|
||||||
|
|
||||||
|
import com.bumptech.glide.Glide;
|
||||||
|
import com.bumptech.glide.load.DataSource;
|
||||||
|
import com.bumptech.glide.load.engine.GlideException;
|
||||||
|
import com.bumptech.glide.request.RequestListener;
|
||||||
|
import com.bumptech.glide.request.RequestOptions;
|
||||||
|
import com.bumptech.glide.request.target.Target;
|
||||||
|
import com.github.pwittchen.swipe.library.rx2.SimpleSwipeListener;
|
||||||
|
import com.github.pwittchen.swipe.library.rx2.Swipe;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
|
||||||
|
import butterknife.BindView;
|
||||||
|
import butterknife.ButterKnife;
|
||||||
|
import ml.docilealligator.infinityforreddit.ContentFontStyle;
|
||||||
|
import ml.docilealligator.infinityforreddit.FontStyle;
|
||||||
|
import ml.docilealligator.infinityforreddit.Infinity;
|
||||||
|
import ml.docilealligator.infinityforreddit.R;
|
||||||
|
import ml.docilealligator.infinityforreddit.SharedPreferencesUtils;
|
||||||
|
import ml.docilealligator.infinityforreddit.TitleFontStyle;
|
||||||
|
import pl.droidsonroids.gif.GifImageView;
|
||||||
|
|
||||||
|
public class ViewGIFActivity extends AppCompatActivity {
|
||||||
|
|
||||||
|
public static final String IMAGE_URL_KEY = "IUK";
|
||||||
|
public static final String FILE_NAME_KEY = "FNK";
|
||||||
|
private static final int PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE = 0;
|
||||||
|
@BindView(R.id.parent_relative_layout_view_gif_activity)
|
||||||
|
RelativeLayout mRelativeLayout;
|
||||||
|
@BindView(R.id.progress_bar_view_gif_activity)
|
||||||
|
ProgressBar mProgressBar;
|
||||||
|
@BindView(R.id.image_view_view_gif_activity)
|
||||||
|
GifImageView mImageView;
|
||||||
|
@BindView(R.id.load_image_error_linear_layout_view_gif_activity)
|
||||||
|
LinearLayout mLoadErrorLinearLayout;
|
||||||
|
@Inject
|
||||||
|
SharedPreferences mSharedPreferences;
|
||||||
|
private boolean isActionBarHidden = false;
|
||||||
|
private boolean isDownloading = false;
|
||||||
|
private Menu mMenu;
|
||||||
|
private Swipe swipe;
|
||||||
|
private String mImageUrl;
|
||||||
|
private String mImageFileName;
|
||||||
|
private float totalLengthY = 0.0f;
|
||||||
|
private float touchY = -1.0f;
|
||||||
|
private float zoom = 1.0f;
|
||||||
|
private boolean isSwiping = false;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
((Infinity) getApplication()).getAppComponent().inject(this);
|
||||||
|
|
||||||
|
getTheme().applyStyle(R.style.Theme_Default, true);
|
||||||
|
|
||||||
|
getTheme().applyStyle(FontStyle.valueOf(mSharedPreferences
|
||||||
|
.getString(SharedPreferencesUtils.FONT_SIZE_KEY, FontStyle.Normal.name())).getResId(), true);
|
||||||
|
|
||||||
|
getTheme().applyStyle(TitleFontStyle.valueOf(mSharedPreferences
|
||||||
|
.getString(SharedPreferencesUtils.TITLE_FONT_SIZE_KEY, TitleFontStyle.Normal.name())).getResId(), true);
|
||||||
|
|
||||||
|
getTheme().applyStyle(ContentFontStyle.valueOf(mSharedPreferences
|
||||||
|
.getString(SharedPreferencesUtils.CONTENT_FONT_SIZE_KEY, ContentFontStyle.Normal.name())).getResId(), true);
|
||||||
|
|
||||||
|
setContentView(R.layout.activity_view_gif);
|
||||||
|
|
||||||
|
ButterKnife.bind(this);
|
||||||
|
|
||||||
|
ActionBar actionBar = getSupportActionBar();
|
||||||
|
Drawable upArrow = getResources().getDrawable(R.drawable.ic_arrow_back_white_24dp);
|
||||||
|
actionBar.setHomeAsUpIndicator(upArrow);
|
||||||
|
actionBar.setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.transparentActionBarAndExoPlayerControllerColor)));
|
||||||
|
setTitle("");
|
||||||
|
|
||||||
|
Intent intent = getIntent();
|
||||||
|
mImageUrl = intent.getStringExtra(IMAGE_URL_KEY);
|
||||||
|
mImageFileName = intent.getStringExtra(FILE_NAME_KEY);
|
||||||
|
|
||||||
|
mLoadErrorLinearLayout.setOnClickListener(view -> {
|
||||||
|
if (!isSwiping) {
|
||||||
|
mProgressBar.setVisibility(View.VISIBLE);
|
||||||
|
mLoadErrorLinearLayout.setVisibility(View.GONE);
|
||||||
|
loadImage();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
float pxHeight = getResources().getDisplayMetrics().heightPixels;
|
||||||
|
|
||||||
|
int activityColorFrom = getResources().getColor(android.R.color.black);
|
||||||
|
int actionBarColorFrom = getResources().getColor(R.color.transparentActionBarAndExoPlayerControllerColor);
|
||||||
|
int actionBarElementColorFrom = getResources().getColor(android.R.color.white);
|
||||||
|
int colorTo = getResources().getColor(android.R.color.transparent);
|
||||||
|
|
||||||
|
final ValueAnimator activityColorAnimation = ValueAnimator.ofObject(new ArgbEvaluator(), activityColorFrom, colorTo);
|
||||||
|
final ValueAnimator actionBarColorAnimation = ValueAnimator.ofObject(new ArgbEvaluator(), actionBarColorFrom, colorTo);
|
||||||
|
final ValueAnimator actionBarElementColorAnimation = ValueAnimator.ofObject(new ArgbEvaluator(), actionBarElementColorFrom, colorTo);
|
||||||
|
|
||||||
|
activityColorAnimation.setDuration(300); // milliseconds
|
||||||
|
actionBarColorAnimation.setDuration(300);
|
||||||
|
actionBarElementColorAnimation.setDuration(300);
|
||||||
|
|
||||||
|
activityColorAnimation.addUpdateListener(valueAnimator -> mRelativeLayout.setBackgroundColor((int) valueAnimator.getAnimatedValue()));
|
||||||
|
|
||||||
|
actionBarColorAnimation.addUpdateListener(valueAnimator -> actionBar.setBackgroundDrawable(new ColorDrawable((int) valueAnimator.getAnimatedValue())));
|
||||||
|
|
||||||
|
actionBarElementColorAnimation.addUpdateListener(valueAnimator -> {
|
||||||
|
upArrow.setColorFilter((int) valueAnimator.getAnimatedValue(), PorterDuff.Mode.SRC_IN);
|
||||||
|
if (mMenu != null) {
|
||||||
|
Drawable drawable = mMenu.getItem(0).getIcon();
|
||||||
|
//drawable.mutate();
|
||||||
|
drawable.setColorFilter((int) valueAnimator.getAnimatedValue(), PorterDuff.Mode.SRC_IN);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
loadImage();
|
||||||
|
|
||||||
|
swipe = new Swipe();
|
||||||
|
swipe.setListener(new SimpleSwipeListener() {
|
||||||
|
@Override
|
||||||
|
public void onSwipingUp(final MotionEvent event) {
|
||||||
|
isSwiping = true;
|
||||||
|
float nowY = event.getY();
|
||||||
|
float offset;
|
||||||
|
if (touchY == -1.0f) {
|
||||||
|
offset = 0.0f;
|
||||||
|
} else {
|
||||||
|
offset = nowY - touchY;
|
||||||
|
}
|
||||||
|
totalLengthY += offset;
|
||||||
|
touchY = nowY;
|
||||||
|
mImageView.animate()
|
||||||
|
.y(totalLengthY)
|
||||||
|
.setDuration(0)
|
||||||
|
.start();
|
||||||
|
mLoadErrorLinearLayout.animate()
|
||||||
|
.y(totalLengthY)
|
||||||
|
.setDuration(0)
|
||||||
|
.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onSwipedUp(final MotionEvent event) {
|
||||||
|
if (totalLengthY < -pxHeight / 8) {
|
||||||
|
mImageView.animate()
|
||||||
|
.y(-pxHeight)
|
||||||
|
.setDuration(300)
|
||||||
|
.setListener(new Animator.AnimatorListener() {
|
||||||
|
@Override
|
||||||
|
public void onAnimationStart(Animator animator) {
|
||||||
|
activityColorAnimation.start();
|
||||||
|
actionBarColorAnimation.start();
|
||||||
|
actionBarElementColorAnimation.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onAnimationEnd(Animator animator) {
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onAnimationCancel(Animator animator) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onAnimationRepeat(Animator animator) {
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.start();
|
||||||
|
mLoadErrorLinearLayout.animate()
|
||||||
|
.y(-pxHeight)
|
||||||
|
.setDuration(300)
|
||||||
|
.start();
|
||||||
|
} else {
|
||||||
|
isSwiping = false;
|
||||||
|
mImageView.animate()
|
||||||
|
.y(0)
|
||||||
|
.setDuration(300)
|
||||||
|
.start();
|
||||||
|
mLoadErrorLinearLayout.animate()
|
||||||
|
.y(0)
|
||||||
|
.setDuration(300)
|
||||||
|
.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
totalLengthY = 0.0f;
|
||||||
|
touchY = -1.0f;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSwipingDown(final MotionEvent event) {
|
||||||
|
isSwiping = true;
|
||||||
|
float nowY = event.getY();
|
||||||
|
float offset;
|
||||||
|
if (touchY == -1.0f) {
|
||||||
|
offset = 0.0f;
|
||||||
|
} else {
|
||||||
|
offset = nowY - touchY;
|
||||||
|
}
|
||||||
|
totalLengthY += offset;
|
||||||
|
touchY = nowY;
|
||||||
|
mImageView.animate()
|
||||||
|
.y(totalLengthY)
|
||||||
|
.setDuration(0)
|
||||||
|
.start();
|
||||||
|
mLoadErrorLinearLayout.animate()
|
||||||
|
.y(totalLengthY)
|
||||||
|
.setDuration(0)
|
||||||
|
.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onSwipedDown(final MotionEvent event) {
|
||||||
|
if (totalLengthY > pxHeight / 8) {
|
||||||
|
mImageView.animate()
|
||||||
|
.y(pxHeight)
|
||||||
|
.setDuration(300)
|
||||||
|
.setListener(new Animator.AnimatorListener() {
|
||||||
|
@Override
|
||||||
|
public void onAnimationStart(Animator animator) {
|
||||||
|
activityColorAnimation.start();
|
||||||
|
actionBarColorAnimation.start();
|
||||||
|
actionBarElementColorAnimation.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onAnimationEnd(Animator animator) {
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onAnimationCancel(Animator animator) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onAnimationRepeat(Animator animator) {
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.start();
|
||||||
|
mLoadErrorLinearLayout.animate()
|
||||||
|
.y(pxHeight)
|
||||||
|
.setDuration(300)
|
||||||
|
.start();
|
||||||
|
} else {
|
||||||
|
isSwiping = false;
|
||||||
|
mImageView.animate()
|
||||||
|
.y(0)
|
||||||
|
.setDuration(300)
|
||||||
|
.start();
|
||||||
|
mLoadErrorLinearLayout.animate()
|
||||||
|
.y(0)
|
||||||
|
.setDuration(300)
|
||||||
|
.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
totalLengthY = 0.0f;
|
||||||
|
touchY = -1.0f;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
mImageView.setOnClickListener(view -> {
|
||||||
|
if (isActionBarHidden) {
|
||||||
|
getWindow().getDecorView().setSystemUiVisibility(
|
||||||
|
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
|
||||||
|
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
|
||||||
|
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
|
||||||
|
isActionBarHidden = false;
|
||||||
|
} else {
|
||||||
|
getWindow().getDecorView().setSystemUiVisibility(
|
||||||
|
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
|
||||||
|
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
|
||||||
|
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
|
||||||
|
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
|
||||||
|
| View.SYSTEM_UI_FLAG_FULLSCREEN
|
||||||
|
| View.SYSTEM_UI_FLAG_IMMERSIVE);
|
||||||
|
isActionBarHidden = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void loadImage() {
|
||||||
|
Glide.with(this).load(mImageUrl).listener(new RequestListener<Drawable>() {
|
||||||
|
@Override
|
||||||
|
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
|
||||||
|
mProgressBar.setVisibility(View.GONE);
|
||||||
|
mLoadErrorLinearLayout.setVisibility(View.VISIBLE);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
|
||||||
|
mProgressBar.setVisibility(View.GONE);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}).apply(new RequestOptions().fitCenter()).into(mImageView);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCreateOptionsMenu(Menu menu) {
|
||||||
|
mMenu = menu;
|
||||||
|
getMenuInflater().inflate(R.menu.view_gif_activity, menu);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
|
switch (item.getItemId()) {
|
||||||
|
case android.R.id.home:
|
||||||
|
finish();
|
||||||
|
return true;
|
||||||
|
case R.id.action_download_view_gif:
|
||||||
|
if (isDownloading) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
isDownloading = true;
|
||||||
|
|
||||||
|
if (Build.VERSION.SDK_INT >= 23) {
|
||||||
|
if (ContextCompat.checkSelfPermission(this,
|
||||||
|
Manifest.permission.WRITE_EXTERNAL_STORAGE)
|
||||||
|
!= PackageManager.PERMISSION_GRANTED) {
|
||||||
|
|
||||||
|
// Permission is not granted
|
||||||
|
// No explanation needed; request the permission
|
||||||
|
ActivityCompat.requestPermissions(this,
|
||||||
|
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
|
||||||
|
PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE);
|
||||||
|
} else {
|
||||||
|
// Permission has already been granted
|
||||||
|
download();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
download();
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean dispatchTouchEvent(MotionEvent ev) {
|
||||||
|
if (zoom == 1.0) {
|
||||||
|
swipe.dispatchTouchEvent(ev);
|
||||||
|
}
|
||||||
|
return super.dispatchTouchEvent(ev);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
|
||||||
|
if (requestCode == PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE && grantResults.length > 0) {
|
||||||
|
if (grantResults[0] == PackageManager.PERMISSION_DENIED) {
|
||||||
|
Toast.makeText(this, R.string.no_storage_permission, Toast.LENGTH_SHORT).show();
|
||||||
|
} else if (grantResults[0] == PackageManager.PERMISSION_GRANTED && isDownloading) {
|
||||||
|
download();
|
||||||
|
}
|
||||||
|
isDownloading = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void download() {
|
||||||
|
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(mImageUrl));
|
||||||
|
request.setTitle(mImageFileName);
|
||||||
|
|
||||||
|
request.allowScanningByMediaScanner();
|
||||||
|
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
|
||||||
|
|
||||||
|
//Android Q support
|
||||||
|
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
||||||
|
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_PICTURES, mImageFileName);
|
||||||
|
} else {
|
||||||
|
String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString();
|
||||||
|
File directory = new File(path + "/Infinity/");
|
||||||
|
boolean saveToInfinityFolder = true;
|
||||||
|
if (!directory.exists()) {
|
||||||
|
if (!directory.mkdir()) {
|
||||||
|
saveToInfinityFolder = false;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (directory.isFile()) {
|
||||||
|
if (!(directory.delete() && directory.mkdir())) {
|
||||||
|
saveToInfinityFolder = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (saveToInfinityFolder) {
|
||||||
|
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_PICTURES + "/Infinity/", mImageFileName);
|
||||||
|
} else {
|
||||||
|
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_PICTURES, mImageFileName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
|
||||||
|
|
||||||
|
if (manager == null) {
|
||||||
|
Toast.makeText(this, R.string.download_failed, Toast.LENGTH_SHORT).show();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
manager.enqueue(request);
|
||||||
|
Toast.makeText(this, R.string.download_started, Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPause() {
|
||||||
|
super.onPause();
|
||||||
|
overridePendingTransition(0, 0);
|
||||||
|
}
|
||||||
|
}
|
@ -59,7 +59,6 @@ import ml.docilealligator.infinityforreddit.TitleFontStyle;
|
|||||||
|
|
||||||
public class ViewImageActivity extends AppCompatActivity {
|
public class ViewImageActivity extends AppCompatActivity {
|
||||||
|
|
||||||
public static final String TITLE_KEY = "TK";
|
|
||||||
public static final String IMAGE_URL_KEY = "IUK";
|
public static final String IMAGE_URL_KEY = "IUK";
|
||||||
public static final String FILE_NAME_KEY = "FNK";
|
public static final String FILE_NAME_KEY = "FNK";
|
||||||
private static final int PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE = 0;
|
private static final int PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE = 0;
|
||||||
@ -113,7 +112,7 @@ public class ViewImageActivity extends AppCompatActivity {
|
|||||||
|
|
||||||
Intent intent = getIntent();
|
Intent intent = getIntent();
|
||||||
mImageUrl = intent.getStringExtra(IMAGE_URL_KEY);
|
mImageUrl = intent.getStringExtra(IMAGE_URL_KEY);
|
||||||
mImageFileName = intent.getStringExtra(FILE_NAME_KEY) + ".jpg";
|
mImageFileName = intent.getStringExtra(FILE_NAME_KEY);
|
||||||
|
|
||||||
mLoadErrorLinearLayout.setOnClickListener(view -> {
|
mLoadErrorLinearLayout.setOnClickListener(view -> {
|
||||||
if (!isSwiping) {
|
if (!isSwiping) {
|
||||||
@ -382,10 +381,10 @@ public class ViewImageActivity extends AppCompatActivity {
|
|||||||
PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE);
|
PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE);
|
||||||
} else {
|
} else {
|
||||||
// Permission has already been granted
|
// Permission has already been granted
|
||||||
saveImage();
|
download();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
saveImage();
|
download();
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -408,13 +407,13 @@ public class ViewImageActivity extends AppCompatActivity {
|
|||||||
if (grantResults[0] == PackageManager.PERMISSION_DENIED) {
|
if (grantResults[0] == PackageManager.PERMISSION_DENIED) {
|
||||||
Toast.makeText(this, R.string.no_storage_permission, Toast.LENGTH_SHORT).show();
|
Toast.makeText(this, R.string.no_storage_permission, Toast.LENGTH_SHORT).show();
|
||||||
} else if (grantResults[0] == PackageManager.PERMISSION_GRANTED && isDownloading) {
|
} else if (grantResults[0] == PackageManager.PERMISSION_GRANTED && isDownloading) {
|
||||||
saveImage();
|
download();
|
||||||
}
|
}
|
||||||
isDownloading = false;
|
isDownloading = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void saveImage() {
|
private void download() {
|
||||||
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(mImageUrl));
|
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(mImageUrl));
|
||||||
request.setTitle(mImageFileName);
|
request.setTitle(mImageFileName);
|
||||||
|
|
||||||
|
@ -203,12 +203,15 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
|||||||
mMessageFullname = savedInstanceState.getString(MESSAGE_FULLNAME_STATE);
|
mMessageFullname = savedInstanceState.getString(MESSAGE_FULLNAME_STATE);
|
||||||
mNewAccountName = savedInstanceState.getString(NEW_ACCOUNT_NAME_STATE);
|
mNewAccountName = savedInstanceState.getString(NEW_ACCOUNT_NAME_STATE);
|
||||||
|
|
||||||
|
mFragment = getSupportFragmentManager().getFragment(savedInstanceState, FRAGMENT_OUT_STATE_KEY);
|
||||||
|
getSupportFragmentManager().beginTransaction().replace(R.id.frame_layout_view_subreddit_detail_activity, mFragment).commit();
|
||||||
|
|
||||||
if (!mNullAccessToken && mAccessToken == null) {
|
if (!mNullAccessToken && mAccessToken == null) {
|
||||||
getCurrentAccountAndBindView();
|
getCurrentAccountAndBindView();
|
||||||
} else {
|
} else {
|
||||||
bindView(false);
|
bindView(false);
|
||||||
mFragment = getSupportFragmentManager().getFragment(savedInstanceState, FRAGMENT_OUT_STATE_KEY);
|
/*mFragment = getSupportFragmentManager().getFragment(savedInstanceState, FRAGMENT_OUT_STATE_KEY);
|
||||||
getSupportFragmentManager().beginTransaction().replace(R.id.frame_layout_view_subreddit_detail_activity, mFragment).commit();
|
getSupportFragmentManager().beginTransaction().replace(R.id.frame_layout_view_subreddit_detail_activity, mFragment).commit();*/
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mFetchSubredditInfoSuccess) {
|
if (mFetchSubredditInfoSuccess) {
|
||||||
@ -258,9 +261,8 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
|||||||
glide.load(subredditData.getBannerUrl()).into(bannerImageView);
|
glide.load(subredditData.getBannerUrl()).into(bannerImageView);
|
||||||
bannerImageView.setOnClickListener(view -> {
|
bannerImageView.setOnClickListener(view -> {
|
||||||
Intent intent = new Intent(ViewSubredditDetailActivity.this, ViewImageActivity.class);
|
Intent intent = new Intent(ViewSubredditDetailActivity.this, ViewImageActivity.class);
|
||||||
intent.putExtra(ViewImageActivity.TITLE_KEY, title);
|
|
||||||
intent.putExtra(ViewImageActivity.IMAGE_URL_KEY, subredditData.getBannerUrl());
|
intent.putExtra(ViewImageActivity.IMAGE_URL_KEY, subredditData.getBannerUrl());
|
||||||
intent.putExtra(ViewImageActivity.FILE_NAME_KEY, subredditName + "-banner");
|
intent.putExtra(ViewImageActivity.FILE_NAME_KEY, subredditName + "-banner.jpg");
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -280,9 +282,8 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
|||||||
.into(iconGifImageView);
|
.into(iconGifImageView);
|
||||||
iconGifImageView.setOnClickListener(view -> {
|
iconGifImageView.setOnClickListener(view -> {
|
||||||
Intent intent = new Intent(ViewSubredditDetailActivity.this, ViewImageActivity.class);
|
Intent intent = new Intent(ViewSubredditDetailActivity.this, ViewImageActivity.class);
|
||||||
intent.putExtra(ViewImageActivity.TITLE_KEY, title);
|
|
||||||
intent.putExtra(ViewImageActivity.IMAGE_URL_KEY, subredditData.getIconUrl());
|
intent.putExtra(ViewImageActivity.IMAGE_URL_KEY, subredditData.getIconUrl());
|
||||||
intent.putExtra(ViewImageActivity.FILE_NAME_KEY, subredditName + "-icon");
|
intent.putExtra(ViewImageActivity.FILE_NAME_KEY, subredditName + "-icon.jpg");
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -279,9 +279,8 @@ public class ViewUserDetailActivity extends BaseActivity implements UserThingSor
|
|||||||
glide.load(userData.getBanner()).into(bannerImageView);
|
glide.load(userData.getBanner()).into(bannerImageView);
|
||||||
bannerImageView.setOnClickListener(view -> {
|
bannerImageView.setOnClickListener(view -> {
|
||||||
Intent intent = new Intent(this, ViewImageActivity.class);
|
Intent intent = new Intent(this, ViewImageActivity.class);
|
||||||
intent.putExtra(ViewImageActivity.TITLE_KEY, title);
|
|
||||||
intent.putExtra(ViewImageActivity.IMAGE_URL_KEY, userData.getBanner());
|
intent.putExtra(ViewImageActivity.IMAGE_URL_KEY, userData.getBanner());
|
||||||
intent.putExtra(ViewImageActivity.FILE_NAME_KEY, username + "-banner");
|
intent.putExtra(ViewImageActivity.FILE_NAME_KEY, username + "-banner.jpg");
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -302,9 +301,8 @@ public class ViewUserDetailActivity extends BaseActivity implements UserThingSor
|
|||||||
|
|
||||||
iconGifImageView.setOnClickListener(view -> {
|
iconGifImageView.setOnClickListener(view -> {
|
||||||
Intent intent = new Intent(this, ViewImageActivity.class);
|
Intent intent = new Intent(this, ViewImageActivity.class);
|
||||||
intent.putExtra(ViewImageActivity.TITLE_KEY, title);
|
|
||||||
intent.putExtra(ViewImageActivity.IMAGE_URL_KEY, userData.getIconUrl());
|
intent.putExtra(ViewImageActivity.IMAGE_URL_KEY, userData.getIconUrl());
|
||||||
intent.putExtra(ViewImageActivity.FILE_NAME_KEY, username + "-icon");
|
intent.putExtra(ViewImageActivity.FILE_NAME_KEY, username + "-icon.jpg");
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -50,7 +50,6 @@ import ml.docilealligator.infinityforreddit.R;
|
|||||||
|
|
||||||
public class ViewVideoActivity extends AppCompatActivity {
|
public class ViewVideoActivity extends AppCompatActivity {
|
||||||
|
|
||||||
public static final String TITLE_KEY = "TK";
|
|
||||||
public static final String SUBREDDIT_KEY = "SK";
|
public static final String SUBREDDIT_KEY = "SK";
|
||||||
public static final String ID_KEY = "IK";
|
public static final String ID_KEY = "IK";
|
||||||
private static final int PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE = 0;
|
private static final int PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE = 0;
|
||||||
|
@ -53,6 +53,7 @@ import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
|
|||||||
import ml.docilealligator.infinityforreddit.Activity.CommentActivity;
|
import ml.docilealligator.infinityforreddit.Activity.CommentActivity;
|
||||||
import ml.docilealligator.infinityforreddit.Activity.FilteredThingActivity;
|
import ml.docilealligator.infinityforreddit.Activity.FilteredThingActivity;
|
||||||
import ml.docilealligator.infinityforreddit.Activity.LinkResolverActivity;
|
import ml.docilealligator.infinityforreddit.Activity.LinkResolverActivity;
|
||||||
|
import ml.docilealligator.infinityforreddit.Activity.ViewGIFActivity;
|
||||||
import ml.docilealligator.infinityforreddit.Activity.ViewImageActivity;
|
import ml.docilealligator.infinityforreddit.Activity.ViewImageActivity;
|
||||||
import ml.docilealligator.infinityforreddit.Activity.ViewPostDetailActivity;
|
import ml.docilealligator.infinityforreddit.Activity.ViewPostDetailActivity;
|
||||||
import ml.docilealligator.infinityforreddit.Activity.ViewSubredditDetailActivity;
|
import ml.docilealligator.infinityforreddit.Activity.ViewSubredditDetailActivity;
|
||||||
@ -419,9 +420,8 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy
|
|||||||
((PostDetailViewHolder) holder).mImageView.setOnClickListener(view -> {
|
((PostDetailViewHolder) holder).mImageView.setOnClickListener(view -> {
|
||||||
Intent intent = new Intent(mActivity, ViewImageActivity.class);
|
Intent intent = new Intent(mActivity, ViewImageActivity.class);
|
||||||
intent.putExtra(ViewImageActivity.IMAGE_URL_KEY, mPost.getUrl());
|
intent.putExtra(ViewImageActivity.IMAGE_URL_KEY, mPost.getUrl());
|
||||||
intent.putExtra(ViewImageActivity.TITLE_KEY, mPost.getTitle());
|
|
||||||
intent.putExtra(ViewImageActivity.FILE_NAME_KEY, mPost.getSubredditNamePrefixed().substring(2)
|
intent.putExtra(ViewImageActivity.FILE_NAME_KEY, mPost.getSubredditNamePrefixed().substring(2)
|
||||||
+ "-" + mPost.getId().substring(3));
|
+ "-" + mPost.getId().substring(3) + ".jpg");
|
||||||
mActivity.startActivity(intent);
|
mActivity.startActivity(intent);
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
@ -443,16 +443,14 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy
|
|||||||
mActivity.startActivity(intent);
|
mActivity.startActivity(intent);
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
case Post.GIF_VIDEO_TYPE:
|
case Post.GIF_TYPE:
|
||||||
((PostDetailViewHolder) holder).mTypeTextView.setText("GIF");
|
((PostDetailViewHolder) holder).mTypeTextView.setText("GIF");
|
||||||
|
|
||||||
final Uri gifVideoUri = Uri.parse(mPost.getVideoUrl());
|
|
||||||
((PostDetailViewHolder) holder).mImageView.setOnClickListener(view -> {
|
((PostDetailViewHolder) holder).mImageView.setOnClickListener(view -> {
|
||||||
Intent intent = new Intent(mActivity, ViewVideoActivity.class);
|
Intent intent = new Intent(mActivity, ViewGIFActivity.class);
|
||||||
intent.setData(gifVideoUri);
|
intent.putExtra(ViewGIFActivity.FILE_NAME_KEY, mPost.getSubredditName()
|
||||||
intent.putExtra(ViewVideoActivity.TITLE_KEY, mPost.getTitle());
|
+ "-" + mPost.getId() + ".gif");
|
||||||
intent.putExtra(ViewVideoActivity.SUBREDDIT_KEY, mPost.getSubredditName());
|
intent.putExtra(ViewGIFActivity.IMAGE_URL_KEY, mPost.getVideoUrl());
|
||||||
intent.putExtra(ViewVideoActivity.ID_KEY, mPost.getId());
|
|
||||||
mActivity.startActivity(intent);
|
mActivity.startActivity(intent);
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
@ -463,7 +461,6 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy
|
|||||||
((PostDetailViewHolder) holder).mImageView.setOnClickListener(view -> {
|
((PostDetailViewHolder) holder).mImageView.setOnClickListener(view -> {
|
||||||
Intent intent = new Intent(mActivity, ViewVideoActivity.class);
|
Intent intent = new Intent(mActivity, ViewVideoActivity.class);
|
||||||
intent.setData(videoUri);
|
intent.setData(videoUri);
|
||||||
intent.putExtra(ViewVideoActivity.TITLE_KEY, mPost.getTitle());
|
|
||||||
intent.putExtra(ViewVideoActivity.SUBREDDIT_KEY, mPost.getSubredditName());
|
intent.putExtra(ViewVideoActivity.SUBREDDIT_KEY, mPost.getSubredditName());
|
||||||
intent.putExtra(ViewVideoActivity.ID_KEY, mPost.getId());
|
intent.putExtra(ViewVideoActivity.ID_KEY, mPost.getId());
|
||||||
mActivity.startActivity(intent);
|
mActivity.startActivity(intent);
|
||||||
@ -979,7 +976,7 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy
|
|||||||
}
|
}
|
||||||
|
|
||||||
private int getParentPosition(int position) {
|
private int getParentPosition(int position) {
|
||||||
if (position < mVisibleComments.size()) {
|
if (position >= 0 && position < mVisibleComments.size()) {
|
||||||
int childDepth = mVisibleComments.get(position).getDepth();
|
int childDepth = mVisibleComments.get(position).getDepth();
|
||||||
for (int i = position; i >= 0; i--) {
|
for (int i = position; i >= 0; i--) {
|
||||||
if (mVisibleComments.get(i).getDepth() < childDepth) {
|
if (mVisibleComments.get(i).getDepth() < childDepth) {
|
||||||
|
@ -45,6 +45,7 @@ import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
|
|||||||
import ml.docilealligator.infinityforreddit.Activity.CommentActivity;
|
import ml.docilealligator.infinityforreddit.Activity.CommentActivity;
|
||||||
import ml.docilealligator.infinityforreddit.Activity.FilteredThingActivity;
|
import ml.docilealligator.infinityforreddit.Activity.FilteredThingActivity;
|
||||||
import ml.docilealligator.infinityforreddit.Activity.LinkResolverActivity;
|
import ml.docilealligator.infinityforreddit.Activity.LinkResolverActivity;
|
||||||
|
import ml.docilealligator.infinityforreddit.Activity.ViewGIFActivity;
|
||||||
import ml.docilealligator.infinityforreddit.Activity.ViewImageActivity;
|
import ml.docilealligator.infinityforreddit.Activity.ViewImageActivity;
|
||||||
import ml.docilealligator.infinityforreddit.Activity.ViewPostDetailActivity;
|
import ml.docilealligator.infinityforreddit.Activity.ViewPostDetailActivity;
|
||||||
import ml.docilealligator.infinityforreddit.Activity.ViewSubredditDetailActivity;
|
import ml.docilealligator.infinityforreddit.Activity.ViewSubredditDetailActivity;
|
||||||
@ -146,7 +147,8 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
|
|||||||
if (holder instanceof DataViewHolder) {
|
if (holder instanceof DataViewHolder) {
|
||||||
Post post = getItem(position);
|
Post post = getItem(position);
|
||||||
if (post != null) {
|
if (post != null) {
|
||||||
final String id = post.getFullName();
|
final String fullName = post.getFullName();
|
||||||
|
final String id = post.getId();
|
||||||
final String subredditNamePrefixed = post.getSubredditNamePrefixed();
|
final String subredditNamePrefixed = post.getSubredditNamePrefixed();
|
||||||
String subredditName = subredditNamePrefixed.substring(2);
|
String subredditName = subredditNamePrefixed.substring(2);
|
||||||
String authorPrefixed = "u/" + post.getAuthor();
|
String authorPrefixed = "u/" + post.getAuthor();
|
||||||
@ -399,9 +401,8 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
|
|||||||
((DataViewHolder) holder).imageView.setOnClickListener(view -> {
|
((DataViewHolder) holder).imageView.setOnClickListener(view -> {
|
||||||
Intent intent = new Intent(mContext, ViewImageActivity.class);
|
Intent intent = new Intent(mContext, ViewImageActivity.class);
|
||||||
intent.putExtra(ViewImageActivity.IMAGE_URL_KEY, imageUrl);
|
intent.putExtra(ViewImageActivity.IMAGE_URL_KEY, imageUrl);
|
||||||
intent.putExtra(ViewImageActivity.TITLE_KEY, title);
|
intent.putExtra(ViewImageActivity.FILE_NAME_KEY, subredditName
|
||||||
intent.putExtra(ViewImageActivity.FILE_NAME_KEY, subredditNamePrefixed.substring(2)
|
+ "-" + id + ".jpg");
|
||||||
+ "-" + id.substring(3));
|
|
||||||
mContext.startActivity(intent);
|
mContext.startActivity(intent);
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
@ -423,16 +424,16 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
|
|||||||
mContext.startActivity(intent);
|
mContext.startActivity(intent);
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
case Post.GIF_VIDEO_TYPE:
|
case Post.GIF_TYPE:
|
||||||
((DataViewHolder) holder).typeTextView.setText(R.string.gif);
|
((DataViewHolder) holder).typeTextView.setText(R.string.gif);
|
||||||
|
|
||||||
final Uri gifVideoUri = Uri.parse(post.getVideoUrl());
|
final Uri gifVideoUri = Uri.parse(post.getVideoUrl());
|
||||||
((DataViewHolder) holder).imageView.setOnClickListener(view -> {
|
((DataViewHolder) holder).imageView.setOnClickListener(view -> {
|
||||||
Intent intent = new Intent(mContext, ViewVideoActivity.class);
|
Intent intent = new Intent(mContext, ViewGIFActivity.class);
|
||||||
intent.setData(gifVideoUri);
|
intent.setData(gifVideoUri);
|
||||||
intent.putExtra(ViewVideoActivity.TITLE_KEY, title);
|
intent.putExtra(ViewGIFActivity.FILE_NAME_KEY, subredditName
|
||||||
intent.putExtra(ViewVideoActivity.SUBREDDIT_KEY, subredditName);
|
+ "-" + id + ".gif");
|
||||||
intent.putExtra(ViewVideoActivity.ID_KEY, id);
|
intent.putExtra(ViewGIFActivity.IMAGE_URL_KEY, post.getVideoUrl());
|
||||||
mContext.startActivity(intent);
|
mContext.startActivity(intent);
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
@ -443,9 +444,8 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
|
|||||||
((DataViewHolder) holder).imageView.setOnClickListener(view -> {
|
((DataViewHolder) holder).imageView.setOnClickListener(view -> {
|
||||||
Intent intent = new Intent(mContext, ViewVideoActivity.class);
|
Intent intent = new Intent(mContext, ViewVideoActivity.class);
|
||||||
intent.setData(videoUri);
|
intent.setData(videoUri);
|
||||||
intent.putExtra(ViewVideoActivity.TITLE_KEY, title);
|
|
||||||
intent.putExtra(ViewVideoActivity.SUBREDDIT_KEY, subredditName);
|
intent.putExtra(ViewVideoActivity.SUBREDDIT_KEY, subredditName);
|
||||||
intent.putExtra(ViewVideoActivity.ID_KEY, id);
|
intent.putExtra(ViewVideoActivity.ID_KEY, fullName);
|
||||||
mContext.startActivity(intent);
|
mContext.startActivity(intent);
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
@ -541,7 +541,7 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
|
|||||||
|
|
||||||
EventBus.getDefault().post(new PostUpdateEventToDetailActivity(post));
|
EventBus.getDefault().post(new PostUpdateEventToDetailActivity(post));
|
||||||
}
|
}
|
||||||
}, id, newVoteType, holder.getAdapterPosition());
|
}, fullName, newVoteType, holder.getAdapterPosition());
|
||||||
});
|
});
|
||||||
|
|
||||||
((DataViewHolder) holder).downvoteButton.setOnClickListener(view -> {
|
((DataViewHolder) holder).downvoteButton.setOnClickListener(view -> {
|
||||||
@ -612,7 +612,7 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
|
|||||||
|
|
||||||
EventBus.getDefault().post(new PostUpdateEventToDetailActivity(post));
|
EventBus.getDefault().post(new PostUpdateEventToDetailActivity(post));
|
||||||
}
|
}
|
||||||
}, id, newVoteType, holder.getAdapterPosition());
|
}, fullName, newVoteType, holder.getAdapterPosition());
|
||||||
});
|
});
|
||||||
|
|
||||||
((DataViewHolder) holder).commentButton.setOnClickListener(view -> {
|
((DataViewHolder) holder).commentButton.setOnClickListener(view -> {
|
||||||
|
@ -23,6 +23,7 @@ import ml.docilealligator.infinityforreddit.Activity.SearchSubredditsResultActiv
|
|||||||
import ml.docilealligator.infinityforreddit.Activity.SettingsActivity;
|
import ml.docilealligator.infinityforreddit.Activity.SettingsActivity;
|
||||||
import ml.docilealligator.infinityforreddit.Activity.SubredditSelectionActivity;
|
import ml.docilealligator.infinityforreddit.Activity.SubredditSelectionActivity;
|
||||||
import ml.docilealligator.infinityforreddit.Activity.SubscribedThingListingActivity;
|
import ml.docilealligator.infinityforreddit.Activity.SubscribedThingListingActivity;
|
||||||
|
import ml.docilealligator.infinityforreddit.Activity.ViewGIFActivity;
|
||||||
import ml.docilealligator.infinityforreddit.Activity.ViewImageActivity;
|
import ml.docilealligator.infinityforreddit.Activity.ViewImageActivity;
|
||||||
import ml.docilealligator.infinityforreddit.Activity.ViewMessageActivity;
|
import ml.docilealligator.infinityforreddit.Activity.ViewMessageActivity;
|
||||||
import ml.docilealligator.infinityforreddit.Activity.ViewPostDetailActivity;
|
import ml.docilealligator.infinityforreddit.Activity.ViewPostDetailActivity;
|
||||||
@ -112,4 +113,6 @@ public interface AppComponent {
|
|||||||
void inject(AccountSavedThingActivity accountSavedThingActivity);
|
void inject(AccountSavedThingActivity accountSavedThingActivity);
|
||||||
|
|
||||||
void inject(ViewImageActivity viewImageActivity);
|
void inject(ViewImageActivity viewImageActivity);
|
||||||
|
|
||||||
|
void inject(ViewGIFActivity viewGIFActivity);
|
||||||
}
|
}
|
||||||
|
@ -151,7 +151,7 @@ public class ParsePost {
|
|||||||
} else if (data.has(JSONUtils.PREVIEW_KEY)) {
|
} else if (data.has(JSONUtils.PREVIEW_KEY)) {
|
||||||
if (data.getJSONObject(JSONUtils.PREVIEW_KEY).has(JSONUtils.REDDIT_VIDEO_PREVIEW_KEY)) {
|
if (data.getJSONObject(JSONUtils.PREVIEW_KEY).has(JSONUtils.REDDIT_VIDEO_PREVIEW_KEY)) {
|
||||||
//Gif video post (HLS)
|
//Gif video post (HLS)
|
||||||
int postType = Post.GIF_VIDEO_TYPE;
|
int postType = Post.VIDEO_TYPE;
|
||||||
String videoUrl = Html.fromHtml(data.getJSONObject(JSONUtils.PREVIEW_KEY)
|
String videoUrl = Html.fromHtml(data.getJSONObject(JSONUtils.PREVIEW_KEY)
|
||||||
.getJSONObject(JSONUtils.REDDIT_VIDEO_PREVIEW_KEY).getString(JSONUtils.HLS_URL_KEY)).toString();
|
.getJSONObject(JSONUtils.REDDIT_VIDEO_PREVIEW_KEY).getString(JSONUtils.HLS_URL_KEY)).toString();
|
||||||
|
|
||||||
@ -174,6 +174,17 @@ public class ParsePost {
|
|||||||
|
|
||||||
post.setPreviewWidth(previewWidth);
|
post.setPreviewWidth(previewWidth);
|
||||||
post.setPreviewHeight(previewHeight);
|
post.setPreviewHeight(previewHeight);
|
||||||
|
} else if (url.endsWith("gif")){
|
||||||
|
//Gif post
|
||||||
|
int postType = Post.GIF_TYPE;
|
||||||
|
post = new Post(id, fullName, subredditName, subredditNamePrefixed, author,
|
||||||
|
formattedPostTime, title, previewUrl, url, permalink, score, postType,
|
||||||
|
voteType, gilded, nComments, flair, hidden, spoiler, nsfw, stickied,
|
||||||
|
archived, locked, saved, isCrosspost);
|
||||||
|
|
||||||
|
post.setPreviewWidth(previewWidth);
|
||||||
|
post.setPreviewHeight(previewHeight);
|
||||||
|
post.setVideoUrl(url);
|
||||||
} else {
|
} else {
|
||||||
if (url.contains(permalink)) {
|
if (url.contains(permalink)) {
|
||||||
//Text post but with a preview
|
//Text post but with a preview
|
||||||
|
@ -20,6 +20,10 @@ public class ParseUserData {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static UserData parseUserDataBase(JSONObject userDataJson) throws JSONException {
|
private static UserData parseUserDataBase(JSONObject userDataJson) throws JSONException {
|
||||||
|
if(userDataJson == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
userDataJson = userDataJson.getJSONObject(JSONUtils.DATA_KEY);
|
userDataJson = userDataJson.getJSONObject(JSONUtils.DATA_KEY);
|
||||||
String userName = userDataJson.getString(JSONUtils.NAME_KEY);
|
String userName = userDataJson.getString(JSONUtils.NAME_KEY);
|
||||||
String iconImageUrl = userDataJson.getString(JSONUtils.ICON_IMG_KEY);
|
String iconImageUrl = userDataJson.getString(JSONUtils.ICON_IMG_KEY);
|
||||||
|
@ -13,7 +13,7 @@ public class Post implements Parcelable {
|
|||||||
public static final int IMAGE_TYPE = 1;
|
public static final int IMAGE_TYPE = 1;
|
||||||
public static final int LINK_TYPE = 2;
|
public static final int LINK_TYPE = 2;
|
||||||
public static final int VIDEO_TYPE = 3;
|
public static final int VIDEO_TYPE = 3;
|
||||||
public static final int GIF_VIDEO_TYPE = 4;
|
public static final int GIF_TYPE = 4;
|
||||||
public static final int NO_PREVIEW_LINK_TYPE = 5;
|
public static final int NO_PREVIEW_LINK_TYPE = 5;
|
||||||
public static final Creator<Post> CREATOR = new Creator<Post>() {
|
public static final Creator<Post> CREATOR = new Creator<Post>() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -164,7 +164,7 @@ public class PostDataSource extends PageKeyedDataSource<String, Post> {
|
|||||||
this.params = params;
|
this.params = params;
|
||||||
this.callback = callback;
|
this.callback = callback;
|
||||||
|
|
||||||
if (params.key.equals("") || params.key.equals("null")) {
|
if ("".equals(params.key) || "null".equals(params.key)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
41
app/src/main/res/layout/activity_view_gif.xml
Normal file
41
app/src/main/res/layout/activity_view_gif.xml
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:id="@+id/parent_relative_layout_view_gif_activity"
|
||||||
|
android:background="@android:color/black"
|
||||||
|
tools:application="ml.docilealligator.infinityforreddit.Activity.ViewGIFActivity">
|
||||||
|
|
||||||
|
<ProgressBar
|
||||||
|
android:id="@+id/progress_bar_view_gif_activity"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_centerInParent="true" />
|
||||||
|
|
||||||
|
<pl.droidsonroids.gif.GifImageView
|
||||||
|
android:id="@+id/image_view_view_gif_activity"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
app:gest_fillViewport="true" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/load_image_error_linear_layout_view_gif_activity"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:visibility="gone">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:drawableTop="@drawable/ic_error_outline_white_24dp"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:gravity="center"
|
||||||
|
android:textColor="@android:color/white"
|
||||||
|
android:text="@string/tap_to_retry"
|
||||||
|
android:textSize="?attr/font_default" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</RelativeLayout>
|
10
app/src/main/res/menu/view_gif_activity.xml
Normal file
10
app/src/main/res/menu/view_gif_activity.xml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_download_view_gif"
|
||||||
|
android:orderInCategory="1"
|
||||||
|
android:title="@string/action_download"
|
||||||
|
android:icon="@drawable/ic_file_download_white_24dp"
|
||||||
|
app:showAsAction="always" />
|
||||||
|
</menu>
|
Loading…
Reference in New Issue
Block a user