mirror of
https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy.git
synced 2024-12-24 18:08:23 +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"
|
||||
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
|
||||
android:name=".Infinity"
|
||||
android:allowBackup="true"
|
||||
@ -20,6 +11,10 @@
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/AppTheme"
|
||||
android:usesCleartextTraffic="true">
|
||||
<activity
|
||||
android:name=".Activity.ViewGIFActivity"
|
||||
android:parentActivityName=".Activity.MainActivity"
|
||||
android:theme="@style/AppTheme.ActionBar.Transparent" />
|
||||
<activity
|
||||
android:name=".Activity.AccountSavedThingActivity"
|
||||
android:label="@string/account_saved_thing_activity"
|
||||
@ -258,5 +253,13 @@
|
||||
android:enabled="true"
|
||||
android:exported="false" />
|
||||
</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>
|
@ -148,11 +148,15 @@ public class FilteredThingActivity extends BaseActivity implements SortTypeBotto
|
||||
isInLazyMode = savedInstanceState.getBoolean(IS_IN_LAZY_MODE_STATE);
|
||||
mNullAccessToken = savedInstanceState.getBoolean(NULL_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) {
|
||||
getCurrentAccountAndBindView(filter, sortType);
|
||||
} else {
|
||||
mFragment = getSupportFragmentManager().getFragment(savedInstanceState, FRAGMENT_OUT_STATE);
|
||||
getSupportFragmentManager().beginTransaction().replace(R.id.frame_layout_filtered_posts_activity, mFragment).commit();
|
||||
/*mFragment = getSupportFragmentManager().getFragment(savedInstanceState, FRAGMENT_OUT_STATE);
|
||||
getSupportFragmentManager().beginTransaction().replace(R.id.frame_layout_filtered_posts_activity, mFragment).commit();*/
|
||||
bindView(filter, sortType, false);
|
||||
}
|
||||
} else {
|
||||
@ -236,7 +240,7 @@ public class FilteredThingActivity extends BaseActivity implements SortTypeBotto
|
||||
case Post.VIDEO_TYPE:
|
||||
toolbar.setSubtitle(R.string.video);
|
||||
break;
|
||||
case Post.GIF_VIDEO_TYPE:
|
||||
case Post.GIF_TYPE:
|
||||
toolbar.setSubtitle(R.string.gif);
|
||||
}
|
||||
|
||||
@ -333,9 +337,7 @@ public class FilteredThingActivity extends BaseActivity implements SortTypeBotto
|
||||
@Override
|
||||
protected void onSaveInstanceState(@NonNull Bundle 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.putString(ACCESS_TOKEN_STATE, mAccessToken);
|
||||
outState.putBoolean(NULL_ACCESS_TOKEN_STATE, mNullAccessToken);
|
||||
|
@ -165,7 +165,6 @@ public class LinkResolverActivity extends AppCompatActivity {
|
||||
}
|
||||
|
||||
if (!packageNames.isEmpty()) {
|
||||
intent.setPackage(packageNames.get(0));
|
||||
try {
|
||||
startActivity(intent);
|
||||
} 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 static final String TITLE_KEY = "TK";
|
||||
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;
|
||||
@ -113,7 +112,7 @@ public class ViewImageActivity extends AppCompatActivity {
|
||||
|
||||
Intent intent = getIntent();
|
||||
mImageUrl = intent.getStringExtra(IMAGE_URL_KEY);
|
||||
mImageFileName = intent.getStringExtra(FILE_NAME_KEY) + ".jpg";
|
||||
mImageFileName = intent.getStringExtra(FILE_NAME_KEY);
|
||||
|
||||
mLoadErrorLinearLayout.setOnClickListener(view -> {
|
||||
if (!isSwiping) {
|
||||
@ -382,10 +381,10 @@ public class ViewImageActivity extends AppCompatActivity {
|
||||
PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE);
|
||||
} else {
|
||||
// Permission has already been granted
|
||||
saveImage();
|
||||
download();
|
||||
}
|
||||
} else {
|
||||
saveImage();
|
||||
download();
|
||||
}
|
||||
|
||||
return true;
|
||||
@ -408,13 +407,13 @@ public class ViewImageActivity extends AppCompatActivity {
|
||||
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) {
|
||||
saveImage();
|
||||
download();
|
||||
}
|
||||
isDownloading = false;
|
||||
}
|
||||
}
|
||||
|
||||
private void saveImage() {
|
||||
private void download() {
|
||||
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(mImageUrl));
|
||||
request.setTitle(mImageFileName);
|
||||
|
||||
|
@ -203,12 +203,15 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
||||
mMessageFullname = savedInstanceState.getString(MESSAGE_FULLNAME_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) {
|
||||
getCurrentAccountAndBindView();
|
||||
} else {
|
||||
bindView(false);
|
||||
mFragment = getSupportFragmentManager().getFragment(savedInstanceState, FRAGMENT_OUT_STATE_KEY);
|
||||
getSupportFragmentManager().beginTransaction().replace(R.id.frame_layout_view_subreddit_detail_activity, mFragment).commit();
|
||||
/*mFragment = getSupportFragmentManager().getFragment(savedInstanceState, FRAGMENT_OUT_STATE_KEY);
|
||||
getSupportFragmentManager().beginTransaction().replace(R.id.frame_layout_view_subreddit_detail_activity, mFragment).commit();*/
|
||||
}
|
||||
|
||||
if (mFetchSubredditInfoSuccess) {
|
||||
@ -258,9 +261,8 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
||||
glide.load(subredditData.getBannerUrl()).into(bannerImageView);
|
||||
bannerImageView.setOnClickListener(view -> {
|
||||
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.FILE_NAME_KEY, subredditName + "-banner");
|
||||
intent.putExtra(ViewImageActivity.FILE_NAME_KEY, subredditName + "-banner.jpg");
|
||||
startActivity(intent);
|
||||
});
|
||||
}
|
||||
@ -280,9 +282,8 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
||||
.into(iconGifImageView);
|
||||
iconGifImageView.setOnClickListener(view -> {
|
||||
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.FILE_NAME_KEY, subredditName + "-icon");
|
||||
intent.putExtra(ViewImageActivity.FILE_NAME_KEY, subredditName + "-icon.jpg");
|
||||
startActivity(intent);
|
||||
});
|
||||
}
|
||||
|
@ -279,9 +279,8 @@ public class ViewUserDetailActivity extends BaseActivity implements UserThingSor
|
||||
glide.load(userData.getBanner()).into(bannerImageView);
|
||||
bannerImageView.setOnClickListener(view -> {
|
||||
Intent intent = new Intent(this, ViewImageActivity.class);
|
||||
intent.putExtra(ViewImageActivity.TITLE_KEY, title);
|
||||
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);
|
||||
});
|
||||
}
|
||||
@ -302,9 +301,8 @@ public class ViewUserDetailActivity extends BaseActivity implements UserThingSor
|
||||
|
||||
iconGifImageView.setOnClickListener(view -> {
|
||||
Intent intent = new Intent(this, ViewImageActivity.class);
|
||||
intent.putExtra(ViewImageActivity.TITLE_KEY, title);
|
||||
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);
|
||||
});
|
||||
}
|
||||
|
@ -50,7 +50,6 @@ import ml.docilealligator.infinityforreddit.R;
|
||||
|
||||
public class ViewVideoActivity extends AppCompatActivity {
|
||||
|
||||
public static final String TITLE_KEY = "TK";
|
||||
public static final String SUBREDDIT_KEY = "SK";
|
||||
public static final String ID_KEY = "IK";
|
||||
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.FilteredThingActivity;
|
||||
import ml.docilealligator.infinityforreddit.Activity.LinkResolverActivity;
|
||||
import ml.docilealligator.infinityforreddit.Activity.ViewGIFActivity;
|
||||
import ml.docilealligator.infinityforreddit.Activity.ViewImageActivity;
|
||||
import ml.docilealligator.infinityforreddit.Activity.ViewPostDetailActivity;
|
||||
import ml.docilealligator.infinityforreddit.Activity.ViewSubredditDetailActivity;
|
||||
@ -419,9 +420,8 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy
|
||||
((PostDetailViewHolder) holder).mImageView.setOnClickListener(view -> {
|
||||
Intent intent = new Intent(mActivity, ViewImageActivity.class);
|
||||
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)
|
||||
+ "-" + mPost.getId().substring(3));
|
||||
+ "-" + mPost.getId().substring(3) + ".jpg");
|
||||
mActivity.startActivity(intent);
|
||||
});
|
||||
break;
|
||||
@ -443,16 +443,14 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy
|
||||
mActivity.startActivity(intent);
|
||||
});
|
||||
break;
|
||||
case Post.GIF_VIDEO_TYPE:
|
||||
case Post.GIF_TYPE:
|
||||
((PostDetailViewHolder) holder).mTypeTextView.setText("GIF");
|
||||
|
||||
final Uri gifVideoUri = Uri.parse(mPost.getVideoUrl());
|
||||
((PostDetailViewHolder) holder).mImageView.setOnClickListener(view -> {
|
||||
Intent intent = new Intent(mActivity, ViewVideoActivity.class);
|
||||
intent.setData(gifVideoUri);
|
||||
intent.putExtra(ViewVideoActivity.TITLE_KEY, mPost.getTitle());
|
||||
intent.putExtra(ViewVideoActivity.SUBREDDIT_KEY, mPost.getSubredditName());
|
||||
intent.putExtra(ViewVideoActivity.ID_KEY, mPost.getId());
|
||||
Intent intent = new Intent(mActivity, ViewGIFActivity.class);
|
||||
intent.putExtra(ViewGIFActivity.FILE_NAME_KEY, mPost.getSubredditName()
|
||||
+ "-" + mPost.getId() + ".gif");
|
||||
intent.putExtra(ViewGIFActivity.IMAGE_URL_KEY, mPost.getVideoUrl());
|
||||
mActivity.startActivity(intent);
|
||||
});
|
||||
break;
|
||||
@ -463,7 +461,6 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy
|
||||
((PostDetailViewHolder) holder).mImageView.setOnClickListener(view -> {
|
||||
Intent intent = new Intent(mActivity, ViewVideoActivity.class);
|
||||
intent.setData(videoUri);
|
||||
intent.putExtra(ViewVideoActivity.TITLE_KEY, mPost.getTitle());
|
||||
intent.putExtra(ViewVideoActivity.SUBREDDIT_KEY, mPost.getSubredditName());
|
||||
intent.putExtra(ViewVideoActivity.ID_KEY, mPost.getId());
|
||||
mActivity.startActivity(intent);
|
||||
@ -979,7 +976,7 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy
|
||||
}
|
||||
|
||||
private int getParentPosition(int position) {
|
||||
if (position < mVisibleComments.size()) {
|
||||
if (position >= 0 && position < mVisibleComments.size()) {
|
||||
int childDepth = mVisibleComments.get(position).getDepth();
|
||||
for (int i = position; i >= 0; i--) {
|
||||
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.FilteredThingActivity;
|
||||
import ml.docilealligator.infinityforreddit.Activity.LinkResolverActivity;
|
||||
import ml.docilealligator.infinityforreddit.Activity.ViewGIFActivity;
|
||||
import ml.docilealligator.infinityforreddit.Activity.ViewImageActivity;
|
||||
import ml.docilealligator.infinityforreddit.Activity.ViewPostDetailActivity;
|
||||
import ml.docilealligator.infinityforreddit.Activity.ViewSubredditDetailActivity;
|
||||
@ -146,7 +147,8 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
|
||||
if (holder instanceof DataViewHolder) {
|
||||
Post post = getItem(position);
|
||||
if (post != null) {
|
||||
final String id = post.getFullName();
|
||||
final String fullName = post.getFullName();
|
||||
final String id = post.getId();
|
||||
final String subredditNamePrefixed = post.getSubredditNamePrefixed();
|
||||
String subredditName = subredditNamePrefixed.substring(2);
|
||||
String authorPrefixed = "u/" + post.getAuthor();
|
||||
@ -399,9 +401,8 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
|
||||
((DataViewHolder) holder).imageView.setOnClickListener(view -> {
|
||||
Intent intent = new Intent(mContext, ViewImageActivity.class);
|
||||
intent.putExtra(ViewImageActivity.IMAGE_URL_KEY, imageUrl);
|
||||
intent.putExtra(ViewImageActivity.TITLE_KEY, title);
|
||||
intent.putExtra(ViewImageActivity.FILE_NAME_KEY, subredditNamePrefixed.substring(2)
|
||||
+ "-" + id.substring(3));
|
||||
intent.putExtra(ViewImageActivity.FILE_NAME_KEY, subredditName
|
||||
+ "-" + id + ".jpg");
|
||||
mContext.startActivity(intent);
|
||||
});
|
||||
break;
|
||||
@ -423,16 +424,16 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
|
||||
mContext.startActivity(intent);
|
||||
});
|
||||
break;
|
||||
case Post.GIF_VIDEO_TYPE:
|
||||
case Post.GIF_TYPE:
|
||||
((DataViewHolder) holder).typeTextView.setText(R.string.gif);
|
||||
|
||||
final Uri gifVideoUri = Uri.parse(post.getVideoUrl());
|
||||
((DataViewHolder) holder).imageView.setOnClickListener(view -> {
|
||||
Intent intent = new Intent(mContext, ViewVideoActivity.class);
|
||||
Intent intent = new Intent(mContext, ViewGIFActivity.class);
|
||||
intent.setData(gifVideoUri);
|
||||
intent.putExtra(ViewVideoActivity.TITLE_KEY, title);
|
||||
intent.putExtra(ViewVideoActivity.SUBREDDIT_KEY, subredditName);
|
||||
intent.putExtra(ViewVideoActivity.ID_KEY, id);
|
||||
intent.putExtra(ViewGIFActivity.FILE_NAME_KEY, subredditName
|
||||
+ "-" + id + ".gif");
|
||||
intent.putExtra(ViewGIFActivity.IMAGE_URL_KEY, post.getVideoUrl());
|
||||
mContext.startActivity(intent);
|
||||
});
|
||||
break;
|
||||
@ -443,9 +444,8 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
|
||||
((DataViewHolder) holder).imageView.setOnClickListener(view -> {
|
||||
Intent intent = new Intent(mContext, ViewVideoActivity.class);
|
||||
intent.setData(videoUri);
|
||||
intent.putExtra(ViewVideoActivity.TITLE_KEY, title);
|
||||
intent.putExtra(ViewVideoActivity.SUBREDDIT_KEY, subredditName);
|
||||
intent.putExtra(ViewVideoActivity.ID_KEY, id);
|
||||
intent.putExtra(ViewVideoActivity.ID_KEY, fullName);
|
||||
mContext.startActivity(intent);
|
||||
});
|
||||
break;
|
||||
@ -541,7 +541,7 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
|
||||
|
||||
EventBus.getDefault().post(new PostUpdateEventToDetailActivity(post));
|
||||
}
|
||||
}, id, newVoteType, holder.getAdapterPosition());
|
||||
}, fullName, newVoteType, holder.getAdapterPosition());
|
||||
});
|
||||
|
||||
((DataViewHolder) holder).downvoteButton.setOnClickListener(view -> {
|
||||
@ -612,7 +612,7 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
|
||||
|
||||
EventBus.getDefault().post(new PostUpdateEventToDetailActivity(post));
|
||||
}
|
||||
}, id, newVoteType, holder.getAdapterPosition());
|
||||
}, fullName, newVoteType, holder.getAdapterPosition());
|
||||
});
|
||||
|
||||
((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.SubredditSelectionActivity;
|
||||
import ml.docilealligator.infinityforreddit.Activity.SubscribedThingListingActivity;
|
||||
import ml.docilealligator.infinityforreddit.Activity.ViewGIFActivity;
|
||||
import ml.docilealligator.infinityforreddit.Activity.ViewImageActivity;
|
||||
import ml.docilealligator.infinityforreddit.Activity.ViewMessageActivity;
|
||||
import ml.docilealligator.infinityforreddit.Activity.ViewPostDetailActivity;
|
||||
@ -112,4 +113,6 @@ public interface AppComponent {
|
||||
void inject(AccountSavedThingActivity accountSavedThingActivity);
|
||||
|
||||
void inject(ViewImageActivity viewImageActivity);
|
||||
|
||||
void inject(ViewGIFActivity viewGIFActivity);
|
||||
}
|
||||
|
@ -151,7 +151,7 @@ public class ParsePost {
|
||||
} else if (data.has(JSONUtils.PREVIEW_KEY)) {
|
||||
if (data.getJSONObject(JSONUtils.PREVIEW_KEY).has(JSONUtils.REDDIT_VIDEO_PREVIEW_KEY)) {
|
||||
//Gif video post (HLS)
|
||||
int postType = Post.GIF_VIDEO_TYPE;
|
||||
int postType = Post.VIDEO_TYPE;
|
||||
String videoUrl = Html.fromHtml(data.getJSONObject(JSONUtils.PREVIEW_KEY)
|
||||
.getJSONObject(JSONUtils.REDDIT_VIDEO_PREVIEW_KEY).getString(JSONUtils.HLS_URL_KEY)).toString();
|
||||
|
||||
@ -174,6 +174,17 @@ public class ParsePost {
|
||||
|
||||
post.setPreviewWidth(previewWidth);
|
||||
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 {
|
||||
if (url.contains(permalink)) {
|
||||
//Text post but with a preview
|
||||
|
@ -20,6 +20,10 @@ public class ParseUserData {
|
||||
}
|
||||
|
||||
private static UserData parseUserDataBase(JSONObject userDataJson) throws JSONException {
|
||||
if(userDataJson == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
userDataJson = userDataJson.getJSONObject(JSONUtils.DATA_KEY);
|
||||
String userName = userDataJson.getString(JSONUtils.NAME_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 LINK_TYPE = 2;
|
||||
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 Creator<Post> CREATOR = new Creator<Post>() {
|
||||
@Override
|
||||
|
@ -164,7 +164,7 @@ public class PostDataSource extends PageKeyedDataSource<String, Post> {
|
||||
this.params = params;
|
||||
this.callback = callback;
|
||||
|
||||
if (params.key.equals("") || params.key.equals("null")) {
|
||||
if ("".equals(params.key) || "null".equals(params.key)) {
|
||||
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