mirror of
https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy.git
synced 2024-11-10 12:47:26 +01:00
Merge pull request #126 from Docile-Alligator/OHermesJunior-refactor-view-image
Resolve conflicts: Some refactors on media activities.
This commit is contained in:
commit
fea972727c
@ -40,7 +40,7 @@ dependencies {
|
||||
implementation "androidx.room:room-runtime:$roomVersion"
|
||||
annotationProcessor "androidx.room:room-compiler:$roomVersion"
|
||||
implementation 'androidx.work:work-runtime:2.3.4'
|
||||
implementation 'com.google.android.material:material:1.2.0-alpha05'
|
||||
implementation 'com.google.android.material:material:1.3.0-alpha01'
|
||||
|
||||
implementation 'com.google.android.exoplayer:exoplayer-core:2.10.4'
|
||||
implementation 'com.google.android.exoplayer:exoplayer-hls:2.10.4'
|
||||
|
@ -83,10 +83,6 @@
|
||||
android:label="@string/multi_reddit_listing_activity_label"
|
||||
android:parentActivityName=".Activity.MainActivity"
|
||||
android:theme="@style/AppTheme.NoActionBar" />
|
||||
<activity
|
||||
android:name=".Activity.ViewGIFActivity"
|
||||
android:parentActivityName=".Activity.MainActivity"
|
||||
android:theme="@style/AppTheme.Draggable" />
|
||||
<activity
|
||||
android:name=".Activity.AccountSavedThingActivity"
|
||||
android:label="@string/account_saved_thing_activity_label"
|
||||
@ -290,7 +286,7 @@
|
||||
android:parentActivityName=".Activity.MainActivity"
|
||||
android:theme="@style/AppTheme.NoActionBar" />
|
||||
<activity
|
||||
android:name=".Activity.ViewImageActivity"
|
||||
android:name=".Activity.ViewImageOrGifActivity"
|
||||
android:parentActivityName=".Activity.MainActivity"
|
||||
android:theme="@style/AppTheme.Draggable" />
|
||||
<activity
|
||||
|
@ -79,20 +79,20 @@ public class LinkResolverActivity extends AppCompatActivity {
|
||||
}
|
||||
|
||||
if (path.endsWith("jpg") || path.endsWith("png")) {
|
||||
Intent intent = new Intent(this, ViewImageActivity.class);
|
||||
Intent intent = new Intent(this, ViewImageOrGifActivity.class);
|
||||
String url = uri.toString();
|
||||
String fileName = url.substring(url.lastIndexOf('/') + 1);
|
||||
intent.putExtra(ViewImageActivity.IMAGE_URL_KEY, url);
|
||||
intent.putExtra(ViewImageActivity.FILE_NAME_KEY, fileName);
|
||||
intent.putExtra(ViewImageActivity.POST_TITLE_KEY, fileName);
|
||||
intent.putExtra(ViewImageOrGifActivity.IMAGE_URL_KEY, url);
|
||||
intent.putExtra(ViewImageOrGifActivity.FILE_NAME_KEY, fileName);
|
||||
intent.putExtra(ViewImageOrGifActivity.POST_TITLE_KEY, fileName);
|
||||
startActivity(intent);
|
||||
} else if (path.endsWith("gif")) {
|
||||
Intent intent = new Intent(this, ViewGIFActivity.class);
|
||||
Intent intent = new Intent(this, ViewImageOrGifActivity.class);
|
||||
String url = uri.toString();
|
||||
String fileName = url.substring(url.lastIndexOf('/') + 1);
|
||||
intent.putExtra(ViewGIFActivity.GIF_URL_KEY, url);
|
||||
intent.putExtra(ViewGIFActivity.FILE_NAME_KEY, fileName);
|
||||
intent.putExtra(ViewGIFActivity.POST_TITLE_KEY, fileName);
|
||||
intent.putExtra(ViewImageOrGifActivity.GIF_URL_KEY, url);
|
||||
intent.putExtra(ViewImageOrGifActivity.FILE_NAME_KEY, fileName);
|
||||
intent.putExtra(ViewImageOrGifActivity.POST_TITLE_KEY, fileName);
|
||||
startActivity(intent);
|
||||
} else if (path.endsWith("mp4")) {
|
||||
Intent intent = new Intent(this, ViewVideoActivity.class);
|
||||
|
@ -1,324 +0,0 @@
|
||||
package ml.docilealligator.infinityforreddit.Activity;
|
||||
|
||||
import android.Manifest;
|
||||
import android.app.DownloadManager;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.pm.PackageManager;
|
||||
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.text.Html;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.ProgressBar;
|
||||
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 androidx.core.content.FileProvider;
|
||||
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.bumptech.glide.RequestManager;
|
||||
import com.bumptech.glide.load.DataSource;
|
||||
import com.bumptech.glide.load.engine.GlideException;
|
||||
import com.bumptech.glide.load.resource.gif.GifDrawable;
|
||||
import com.bumptech.glide.request.RequestListener;
|
||||
import com.bumptech.glide.request.RequestOptions;
|
||||
import com.bumptech.glide.request.target.Target;
|
||||
import com.thefuntasty.hauler.DragDirection;
|
||||
import com.thefuntasty.hauler.HaulerView;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
import ml.docilealligator.infinityforreddit.AsyncTask.SaveGIFToFileAsyncTask;
|
||||
import ml.docilealligator.infinityforreddit.BuildConfig;
|
||||
import ml.docilealligator.infinityforreddit.Font.ContentFontFamily;
|
||||
import ml.docilealligator.infinityforreddit.Font.ContentFontStyle;
|
||||
import ml.docilealligator.infinityforreddit.Font.FontFamily;
|
||||
import ml.docilealligator.infinityforreddit.Font.FontStyle;
|
||||
import ml.docilealligator.infinityforreddit.Font.TitleFontFamily;
|
||||
import ml.docilealligator.infinityforreddit.Font.TitleFontStyle;
|
||||
import ml.docilealligator.infinityforreddit.Infinity;
|
||||
import ml.docilealligator.infinityforreddit.R;
|
||||
import ml.docilealligator.infinityforreddit.Utils.SharedPreferencesUtils;
|
||||
import pl.droidsonroids.gif.GifImageView;
|
||||
|
||||
public class ViewGIFActivity extends AppCompatActivity {
|
||||
|
||||
public static final String GIF_URL_KEY = "GUK";
|
||||
public static final String FILE_NAME_KEY = "FNK";
|
||||
public static final String POST_TITLE_KEY = "PTK";
|
||||
private static final int PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE = 0;
|
||||
@BindView(R.id.hauler_view_view_gif_activity)
|
||||
HaulerView mHaulerView;
|
||||
@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
|
||||
@Named("default")
|
||||
SharedPreferences mSharedPreferences;
|
||||
private boolean isActionBarHidden = false;
|
||||
private boolean isDownloading = false;
|
||||
private RequestManager glide;
|
||||
private String mImageUrl;
|
||||
private String mImageFileName;
|
||||
private boolean isSwiping = false;
|
||||
private String postTitle;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
((Infinity) getApplication()).getAppComponent().inject(this);
|
||||
|
||||
getTheme().applyStyle(R.style.Theme_Normal, 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);
|
||||
|
||||
getTheme().applyStyle(FontFamily.valueOf(mSharedPreferences
|
||||
.getString(SharedPreferencesUtils.FONT_FAMILY_KEY, FontFamily.Default.name())).getResId(), true);
|
||||
|
||||
getTheme().applyStyle(TitleFontFamily.valueOf(mSharedPreferences
|
||||
.getString(SharedPreferencesUtils.TITLE_FONT_FAMILY_KEY, TitleFontFamily.Default.name())).getResId(), true);
|
||||
|
||||
getTheme().applyStyle(ContentFontFamily.valueOf(mSharedPreferences
|
||||
.getString(SharedPreferencesUtils.CONTENT_FONT_FAMILY_KEY, ContentFontFamily.Default.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)));
|
||||
|
||||
mHaulerView.setOnDragDismissedListener(dragDirection -> {
|
||||
int slide = dragDirection == DragDirection.UP ? R.anim.slide_out_up : R.anim.slide_out_down;
|
||||
finish();
|
||||
overridePendingTransition(0, slide);
|
||||
});
|
||||
|
||||
glide = Glide.with(this);
|
||||
|
||||
Intent intent = getIntent();
|
||||
mImageUrl = intent.getStringExtra(GIF_URL_KEY);
|
||||
mImageFileName = intent.getStringExtra(FILE_NAME_KEY);
|
||||
postTitle = intent.getStringExtra(POST_TITLE_KEY);
|
||||
|
||||
if (postTitle != null) {
|
||||
setTitle(Html.fromHtml(String.format("<small>%s</small>", postTitle)));
|
||||
} else {
|
||||
setTitle("");
|
||||
}
|
||||
|
||||
mLoadErrorLinearLayout.setOnClickListener(view -> {
|
||||
if (!isSwiping) {
|
||||
mProgressBar.setVisibility(View.VISIBLE);
|
||||
mLoadErrorLinearLayout.setVisibility(View.GONE);
|
||||
loadImage();
|
||||
}
|
||||
});
|
||||
|
||||
loadImage();
|
||||
|
||||
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.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) {
|
||||
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_activity:
|
||||
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;
|
||||
case R.id.action_share_view_gif_activity:
|
||||
Toast.makeText(ViewGIFActivity.this, R.string.save_gif_first, Toast.LENGTH_SHORT).show();
|
||||
glide.asGif().load(mImageUrl).listener(new RequestListener<GifDrawable>() {
|
||||
@Override
|
||||
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<GifDrawable> target, boolean isFirstResource) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onResourceReady(GifDrawable resource, Object model, Target<GifDrawable> target, DataSource dataSource, boolean isFirstResource) {
|
||||
if (getExternalCacheDir() != null) {
|
||||
new SaveGIFToFileAsyncTask(resource, getExternalCacheDir().getPath(), mImageFileName,
|
||||
new SaveGIFToFileAsyncTask.SaveGIFToFileAsyncTaskListener() {
|
||||
@Override
|
||||
public void saveSuccess(File imageFile) {
|
||||
Uri uri = FileProvider.getUriForFile(ViewGIFActivity.this,
|
||||
BuildConfig.APPLICATION_ID + ".provider", imageFile);
|
||||
Intent shareIntent = new Intent();
|
||||
shareIntent.setAction(Intent.ACTION_SEND);
|
||||
shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
|
||||
shareIntent.setType("image/*");
|
||||
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
|
||||
startActivity(Intent.createChooser(shareIntent, getString(R.string.share)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveFailed() {
|
||||
Toast.makeText(ViewGIFActivity.this,
|
||||
R.string.cannot_save_gif, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
}).execute();
|
||||
} else {
|
||||
Toast.makeText(ViewGIFActivity.this,
|
||||
R.string.cannot_get_storage, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}).submit();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@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();
|
||||
}
|
||||
}
|
@ -1,27 +1,19 @@
|
||||
package ml.docilealligator.infinityforreddit.Activity;
|
||||
|
||||
import android.Manifest;
|
||||
import android.app.DownloadManager;
|
||||
import android.app.WallpaperManager;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Rect;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.media.ThumbnailUtils;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Environment;
|
||||
import android.text.Html;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.ProgressBar;
|
||||
import android.widget.Toast;
|
||||
@ -34,11 +26,12 @@ import androidx.core.app.ActivityCompat;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.core.content.FileProvider;
|
||||
|
||||
import com.alexvasilkov.gestures.views.GestureImageView;
|
||||
import com.alexvasilkov.gestures.views.GestureFrameLayout;
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.bumptech.glide.RequestManager;
|
||||
import com.bumptech.glide.load.DataSource;
|
||||
import com.bumptech.glide.load.engine.GlideException;
|
||||
import com.bumptech.glide.load.resource.gif.GifDrawable;
|
||||
import com.bumptech.glide.request.RequestListener;
|
||||
import com.bumptech.glide.request.target.CustomTarget;
|
||||
import com.bumptech.glide.request.target.Target;
|
||||
@ -47,13 +40,13 @@ import com.thefuntasty.hauler.DragDirection;
|
||||
import com.thefuntasty.hauler.HaulerView;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
import ml.docilealligator.infinityforreddit.AsyncTask.SaveGIFToFileAsyncTask;
|
||||
import ml.docilealligator.infinityforreddit.AsyncTask.SaveImageToFileAsyncTask;
|
||||
import ml.docilealligator.infinityforreddit.BottomSheetFragment.SetAsWallpaperBottomSheetFragment;
|
||||
import ml.docilealligator.infinityforreddit.BuildConfig;
|
||||
@ -64,32 +57,42 @@ import ml.docilealligator.infinityforreddit.Font.FontStyle;
|
||||
import ml.docilealligator.infinityforreddit.Font.TitleFontFamily;
|
||||
import ml.docilealligator.infinityforreddit.Font.TitleFontStyle;
|
||||
import ml.docilealligator.infinityforreddit.Infinity;
|
||||
import ml.docilealligator.infinityforreddit.MediaDownloader;
|
||||
import ml.docilealligator.infinityforreddit.MediaDownloaderImpl;
|
||||
import ml.docilealligator.infinityforreddit.R;
|
||||
import ml.docilealligator.infinityforreddit.SetAsWallpaperCallback;
|
||||
import ml.docilealligator.infinityforreddit.Utils.SharedPreferencesUtils;
|
||||
import ml.docilealligator.infinityforreddit.WallpaperSetter;
|
||||
import pl.droidsonroids.gif.GifImageView;
|
||||
|
||||
public class ViewImageActivity extends AppCompatActivity implements SetAsWallpaperCallback {
|
||||
public class ViewImageOrGifActivity extends AppCompatActivity implements SetAsWallpaperCallback {
|
||||
|
||||
public static final String IMAGE_URL_KEY = "IUK";
|
||||
public static final String GIF_URL_KEY = "GUK";
|
||||
public static final String FILE_NAME_KEY = "FNK";
|
||||
public static final String POST_TITLE_KEY = "PTK";
|
||||
private static final int PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE = 0;
|
||||
@BindView(R.id.hauler_view_view_image_activity)
|
||||
@BindView(R.id.hauler_view_view_image_or_gif_activity)
|
||||
HaulerView mHaulerView;
|
||||
@BindView(R.id.progress_bar_view_image_activity)
|
||||
@BindView(R.id.progress_bar_view_image_or_gif_activity)
|
||||
ProgressBar mProgressBar;
|
||||
@BindView(R.id.image_view_view_image_activity)
|
||||
GestureImageView mImageView;
|
||||
@BindView(R.id.load_image_error_linear_layout_view_image_activity)
|
||||
@BindView(R.id.image_view_view_image_or_gif_activity)
|
||||
GifImageView mImageView;
|
||||
@BindView(R.id.gesture_layout_view_image_or_gif_activity)
|
||||
GestureFrameLayout gestureLayout;
|
||||
@BindView(R.id.load_image_error_linear_layout_view_image_or_gif_activity)
|
||||
LinearLayout mLoadErrorLinearLayout;
|
||||
@Inject
|
||||
@Named("default")
|
||||
SharedPreferences mSharedPreferences;
|
||||
private MediaDownloader mediaDownloader;
|
||||
private WallpaperSetter wallpaperSetter;
|
||||
private boolean isActionBarHidden = false;
|
||||
private boolean isDownloading = false;
|
||||
private RequestManager glide;
|
||||
private String mImageUrl;
|
||||
private String mImageFileName;
|
||||
private RequestManager glide;
|
||||
private boolean isGif = true;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
@ -117,7 +120,7 @@ public class ViewImageActivity extends AppCompatActivity implements SetAsWallpap
|
||||
getTheme().applyStyle(ContentFontFamily.valueOf(mSharedPreferences
|
||||
.getString(SharedPreferencesUtils.CONTENT_FONT_FAMILY_KEY, ContentFontFamily.Default.name())).getResId(), true);
|
||||
|
||||
setContentView(R.layout.activity_view_image);
|
||||
setContentView(R.layout.activity_view_image_or_gif);
|
||||
|
||||
ButterKnife.bind(this);
|
||||
|
||||
@ -126,10 +129,19 @@ public class ViewImageActivity extends AppCompatActivity implements SetAsWallpap
|
||||
actionBar.setHomeAsUpIndicator(upArrow);
|
||||
actionBar.setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.transparentActionBarAndExoPlayerControllerColor)));
|
||||
|
||||
mHaulerView.setOnDragDismissedListener(dragDirection -> finish());
|
||||
|
||||
mediaDownloader = new MediaDownloaderImpl();
|
||||
wallpaperSetter = new WallpaperSetter();
|
||||
|
||||
glide = Glide.with(this);
|
||||
|
||||
Intent intent = getIntent();
|
||||
mImageUrl = intent.getStringExtra(IMAGE_URL_KEY);
|
||||
mImageUrl = intent.getStringExtra(GIF_URL_KEY);
|
||||
if (mImageUrl == null) {
|
||||
isGif = false;
|
||||
mImageUrl = intent.getStringExtra(IMAGE_URL_KEY);
|
||||
}
|
||||
mImageFileName = intent.getStringExtra(FILE_NAME_KEY);
|
||||
String postTitle = intent.getStringExtra(POST_TITLE_KEY);
|
||||
|
||||
@ -153,7 +165,7 @@ public class ViewImageActivity extends AppCompatActivity implements SetAsWallpap
|
||||
|
||||
loadImage();
|
||||
|
||||
mImageView.getController().getSettings().setMaxZoom(10f).setDoubleTapZoom(2f).setPanEnabled(true);
|
||||
gestureLayout.getController().getSettings().setMaxZoom(10f).setDoubleTapZoom(2f).setPanEnabled(true);
|
||||
|
||||
mImageView.setOnClickListener(view -> {
|
||||
if (isActionBarHidden) {
|
||||
@ -194,7 +206,9 @@ public class ViewImageActivity extends AppCompatActivity implements SetAsWallpap
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
getMenuInflater().inflate(R.menu.view_image_activity, menu);
|
||||
getMenuInflater().inflate(R.menu.view_image_or_gif_activity, menu);
|
||||
if (!isGif)
|
||||
menu.findItem(R.id.action_set_wallpaper_view_image_or_gif_activity).setVisible(true);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -204,7 +218,7 @@ public class ViewImageActivity extends AppCompatActivity implements SetAsWallpap
|
||||
case android.R.id.home:
|
||||
finish();
|
||||
return true;
|
||||
case R.id.action_download_view_image_activity:
|
||||
case R.id.action_download_view_image_or_gif_activity:
|
||||
if (isDownloading) {
|
||||
return false;
|
||||
}
|
||||
@ -223,59 +237,27 @@ public class ViewImageActivity extends AppCompatActivity implements SetAsWallpap
|
||||
PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE);
|
||||
} else {
|
||||
// Permission has already been granted
|
||||
download();
|
||||
mediaDownloader.download(mImageUrl, mImageFileName, this);
|
||||
}
|
||||
} else {
|
||||
download();
|
||||
mediaDownloader.download(mImageUrl, mImageFileName, this);
|
||||
}
|
||||
|
||||
return true;
|
||||
case R.id.action_share_view_image_activity:
|
||||
glide.asBitmap().load(mImageUrl).into(new CustomTarget<Bitmap>() {
|
||||
|
||||
@Override
|
||||
public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
|
||||
if (getExternalCacheDir() != null) {
|
||||
Toast.makeText(ViewImageActivity.this, R.string.save_image_first, Toast.LENGTH_SHORT).show();
|
||||
new SaveImageToFileAsyncTask(resource, getExternalCacheDir().getPath(), mImageFileName,
|
||||
new SaveImageToFileAsyncTask.SaveImageToFileAsyncTaskListener() {
|
||||
@Override
|
||||
public void saveSuccess(File imageFile) {
|
||||
Uri uri = FileProvider.getUriForFile(ViewImageActivity.this,
|
||||
BuildConfig.APPLICATION_ID + ".provider", imageFile);
|
||||
Intent shareIntent = new Intent();
|
||||
shareIntent.setAction(Intent.ACTION_SEND);
|
||||
shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
|
||||
shareIntent.setType("image/*");
|
||||
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
|
||||
startActivity(Intent.createChooser(shareIntent, getString(R.string.share)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveFailed() {
|
||||
Toast.makeText(ViewImageActivity.this,
|
||||
R.string.cannot_save_image, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
}).execute();
|
||||
} else {
|
||||
Toast.makeText(ViewImageActivity.this,
|
||||
R.string.cannot_get_storage, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoadCleared(@Nullable Drawable placeholder) {
|
||||
|
||||
}
|
||||
});
|
||||
case R.id.action_share_view_image_or_gif_activity:
|
||||
if (isGif)
|
||||
shareGif();
|
||||
else
|
||||
shareImage();
|
||||
return true;
|
||||
|
||||
case R.id.action_set_wallpaper_view_image_activity:
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||
SetAsWallpaperBottomSheetFragment setAsWallpaperBottomSheetFragment = new SetAsWallpaperBottomSheetFragment();
|
||||
setAsWallpaperBottomSheetFragment.show(getSupportFragmentManager(), setAsWallpaperBottomSheetFragment.getTag());
|
||||
} else {
|
||||
setAsWallpaper(2);
|
||||
case R.id.action_set_wallpaper_view_image_or_gif_activity:
|
||||
if (!isGif) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||
SetAsWallpaperBottomSheetFragment setAsWallpaperBottomSheetFragment = new SetAsWallpaperBottomSheetFragment();
|
||||
setAsWallpaperBottomSheetFragment.show(getSupportFragmentManager(), setAsWallpaperBottomSheetFragment.getTag());
|
||||
} else {
|
||||
wallpaperSetter.set(mImageUrl, WallpaperSetter.BOTH_SCREENS, this);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@ -283,117 +265,36 @@ public class ViewImageActivity extends AppCompatActivity implements SetAsWallpap
|
||||
return false;
|
||||
}
|
||||
|
||||
@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();
|
||||
}
|
||||
|
||||
private void setAsWallpaper(int setTo) {
|
||||
Toast.makeText(ViewImageActivity.this, R.string.save_image_first, Toast.LENGTH_SHORT).show();
|
||||
private void shareImage() {
|
||||
glide.asBitmap().load(mImageUrl).into(new CustomTarget<Bitmap>() {
|
||||
|
||||
@Override
|
||||
public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
|
||||
WallpaperManager manager = WallpaperManager.getInstance(ViewImageActivity.this);
|
||||
if (getExternalCacheDir() != null) {
|
||||
Toast.makeText(ViewImageOrGifActivity.this, R.string.save_image_first, Toast.LENGTH_SHORT).show();
|
||||
new SaveImageToFileAsyncTask(resource, getExternalCacheDir().getPath(), mImageFileName,
|
||||
new SaveImageToFileAsyncTask.SaveImageToFileAsyncTaskListener() {
|
||||
@Override
|
||||
public void saveSuccess(File imageFile) {
|
||||
Uri uri = FileProvider.getUriForFile(ViewImageOrGifActivity.this,
|
||||
BuildConfig.APPLICATION_ID + ".provider", imageFile);
|
||||
Intent shareIntent = new Intent();
|
||||
shareIntent.setAction(Intent.ACTION_SEND);
|
||||
shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
|
||||
shareIntent.setType("image/*");
|
||||
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
|
||||
startActivity(Intent.createChooser(shareIntent, getString(R.string.share)));
|
||||
}
|
||||
|
||||
DisplayMetrics metrics = new DisplayMetrics();
|
||||
WindowManager windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
|
||||
|
||||
Rect rect = null;
|
||||
|
||||
if (windowManager != null) {
|
||||
windowManager.getDefaultDisplay().getMetrics(metrics);
|
||||
int height = metrics.heightPixels;
|
||||
int width = metrics.widthPixels;
|
||||
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
|
||||
resource = ThumbnailUtils.extractThumbnail(resource, width, height);
|
||||
}
|
||||
|
||||
float imageAR = (float) resource.getWidth() / (float) resource.getHeight();
|
||||
float screenAR = (float) width / (float) height;
|
||||
|
||||
if (imageAR > screenAR) {
|
||||
int desiredWidth = (int) (resource.getHeight() * screenAR);
|
||||
rect = new Rect((resource.getWidth() - desiredWidth) / 2, 0, resource.getWidth(), resource.getHeight());
|
||||
} else {
|
||||
int desiredHeight = (int) (resource.getWidth() / screenAR);
|
||||
rect = new Rect(0, (resource.getHeight() - desiredHeight) / 2, resource.getWidth(), (resource.getHeight() + desiredHeight) / 2);
|
||||
}
|
||||
}
|
||||
try {
|
||||
switch (setTo) {
|
||||
case 0:
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||
manager.setBitmap(resource, rect, true, WallpaperManager.FLAG_SYSTEM);
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||
manager.setBitmap(resource, rect, true, WallpaperManager.FLAG_LOCK);
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||
manager.setBitmap(resource, rect, true, WallpaperManager.FLAG_SYSTEM | WallpaperManager.FLAG_LOCK);
|
||||
} else {
|
||||
manager.setBitmap(resource);
|
||||
}
|
||||
break;
|
||||
}
|
||||
Toast.makeText(ViewImageActivity.this, R.string.wallpaper_set, Toast.LENGTH_SHORT).show();
|
||||
} catch (IOException e) {
|
||||
Toast.makeText(ViewImageActivity.this, R.string.error_set_wallpaper, Toast.LENGTH_SHORT).show();
|
||||
@Override
|
||||
public void saveFailed() {
|
||||
Toast.makeText(ViewImageOrGifActivity.this,
|
||||
R.string.cannot_save_image, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
}).execute();
|
||||
} else {
|
||||
Toast.makeText(ViewImageOrGifActivity.this,
|
||||
R.string.cannot_get_storage, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
}
|
||||
|
||||
@ -404,18 +305,70 @@ public class ViewImageActivity extends AppCompatActivity implements SetAsWallpap
|
||||
});
|
||||
}
|
||||
|
||||
private void shareGif() {
|
||||
Toast.makeText(ViewImageOrGifActivity.this, R.string.save_gif_first, Toast.LENGTH_SHORT).show();
|
||||
glide.asGif().load(mImageUrl).listener(new RequestListener<GifDrawable>() {
|
||||
@Override
|
||||
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<GifDrawable> target, boolean isFirstResource) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onResourceReady(GifDrawable resource, Object model, Target<GifDrawable> target, DataSource dataSource, boolean isFirstResource) {
|
||||
if (getExternalCacheDir() != null) {
|
||||
new SaveGIFToFileAsyncTask(resource, getExternalCacheDir().getPath(), mImageFileName,
|
||||
new SaveGIFToFileAsyncTask.SaveGIFToFileAsyncTaskListener() {
|
||||
@Override
|
||||
public void saveSuccess(File imageFile) {
|
||||
Uri uri = FileProvider.getUriForFile(ViewImageOrGifActivity.this,
|
||||
BuildConfig.APPLICATION_ID + ".provider", imageFile);
|
||||
Intent shareIntent = new Intent();
|
||||
shareIntent.setAction(Intent.ACTION_SEND);
|
||||
shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
|
||||
shareIntent.setType("image/*");
|
||||
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
|
||||
startActivity(Intent.createChooser(shareIntent, getString(R.string.share)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveFailed() {
|
||||
Toast.makeText(ViewImageOrGifActivity.this,
|
||||
R.string.cannot_save_gif, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
}).execute();
|
||||
} else {
|
||||
Toast.makeText(ViewImageOrGifActivity.this,
|
||||
R.string.cannot_get_storage, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}).submit();
|
||||
}
|
||||
|
||||
@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) {
|
||||
mediaDownloader.download(mImageUrl, mImageFileName, this);
|
||||
}
|
||||
isDownloading = false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setToHomeScreen(int viewPagerPosition) {
|
||||
setAsWallpaper(0);
|
||||
wallpaperSetter.set(mImageUrl, WallpaperSetter.HOME_SCREEN, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setToLockScreen(int viewPagerPosition) {
|
||||
setAsWallpaper(1);
|
||||
wallpaperSetter.set(mImageUrl, WallpaperSetter.LOCK_SCREEN, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setToBoth(int viewPagerPosition) {
|
||||
setAsWallpaper(2);
|
||||
wallpaperSetter.set(mImageUrl, WallpaperSetter.BOTH_SCREENS, this);
|
||||
}
|
||||
}
|
@ -1,27 +1,17 @@
|
||||
package ml.docilealligator.infinityforreddit.Activity;
|
||||
|
||||
import android.app.WallpaperManager;
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Rect;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.media.ThumbnailUtils;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.ProgressBar;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.app.ActionBar;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.fragment.app.Fragment;
|
||||
@ -29,9 +19,6 @@ import androidx.fragment.app.FragmentManager;
|
||||
import androidx.fragment.app.FragmentStatePagerAdapter;
|
||||
import androidx.viewpager.widget.ViewPager;
|
||||
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.bumptech.glide.request.target.CustomTarget;
|
||||
import com.bumptech.glide.request.transition.Transition;
|
||||
import com.thefuntasty.hauler.DragDirection;
|
||||
import com.thefuntasty.hauler.HaulerView;
|
||||
|
||||
@ -39,7 +26,6 @@ import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import javax.inject.Inject;
|
||||
@ -63,6 +49,7 @@ import ml.docilealligator.infinityforreddit.SetAsWallpaperCallback;
|
||||
import ml.docilealligator.infinityforreddit.Utils.APIUtils;
|
||||
import ml.docilealligator.infinityforreddit.Utils.JSONUtils;
|
||||
import ml.docilealligator.infinityforreddit.Utils.SharedPreferencesUtils;
|
||||
import ml.docilealligator.infinityforreddit.WallpaperSetter;
|
||||
import retrofit2.Call;
|
||||
import retrofit2.Callback;
|
||||
import retrofit2.Response;
|
||||
@ -93,6 +80,7 @@ public class ViewImgurMediaActivity extends AppCompatActivity implements SetAsWa
|
||||
@Inject
|
||||
@Named("default")
|
||||
SharedPreferences sharedPreferences;
|
||||
private WallpaperSetter wallpaperSetter;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
@ -129,6 +117,8 @@ public class ViewImgurMediaActivity extends AppCompatActivity implements SetAsWa
|
||||
actionBar.setHomeAsUpIndicator(upArrow);
|
||||
actionBar.setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.transparentActionBarAndExoPlayerControllerColor)));
|
||||
|
||||
wallpaperSetter = new WallpaperSetter();
|
||||
|
||||
setTitle(" ");
|
||||
|
||||
String imgurId = getIntent().getStringExtra(EXTRA_IMGUR_ID);
|
||||
@ -154,9 +144,7 @@ public class ViewImgurMediaActivity extends AppCompatActivity implements SetAsWa
|
||||
setupViewPager();
|
||||
}
|
||||
|
||||
errorLinearLayout.setOnClickListener(view -> {
|
||||
fetchImgurMedia(imgurId);
|
||||
});
|
||||
errorLinearLayout.setOnClickListener(view -> fetchImgurMedia(imgurId));
|
||||
}
|
||||
|
||||
private void fetchImgurMedia(String imgurId) {
|
||||
@ -322,89 +310,24 @@ public class ViewImgurMediaActivity extends AppCompatActivity implements SetAsWa
|
||||
outState.putParcelableArrayList(IMGUR_IMAGES_STATE, images);
|
||||
}
|
||||
|
||||
public void setAsWallpaper(String link, int setTo) {
|
||||
Toast.makeText(ViewImgurMediaActivity.this, R.string.save_image_first, Toast.LENGTH_SHORT).show();
|
||||
Glide.with(this).asBitmap().load(link).into(new CustomTarget<Bitmap>() {
|
||||
@Override
|
||||
public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
|
||||
WallpaperManager manager = WallpaperManager.getInstance(ViewImgurMediaActivity.this);
|
||||
|
||||
DisplayMetrics metrics = new DisplayMetrics();
|
||||
WindowManager windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
|
||||
|
||||
Rect rect = null;
|
||||
|
||||
if (windowManager != null) {
|
||||
windowManager.getDefaultDisplay().getMetrics(metrics);
|
||||
int height = metrics.heightPixels;
|
||||
int width = metrics.widthPixels;
|
||||
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
|
||||
resource = ThumbnailUtils.extractThumbnail(resource, width, height);
|
||||
}
|
||||
|
||||
float imageAR = (float) resource.getWidth() / (float) resource.getHeight();
|
||||
float screenAR = (float) width / (float) height;
|
||||
|
||||
if (imageAR > screenAR) {
|
||||
int desiredWidth = (int) (resource.getHeight() * screenAR);
|
||||
rect = new Rect((resource.getWidth() - desiredWidth) / 2, 0, resource.getWidth(), resource.getHeight());
|
||||
} else {
|
||||
int desiredHeight = (int) (resource.getWidth() / screenAR);
|
||||
rect = new Rect(0, (resource.getHeight() - desiredHeight) / 2, resource.getWidth(), (resource.getHeight() + desiredHeight) / 2);
|
||||
}
|
||||
}
|
||||
try {
|
||||
switch (setTo) {
|
||||
case 0:
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||
manager.setBitmap(resource, rect, true, WallpaperManager.FLAG_SYSTEM);
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||
manager.setBitmap(resource, rect, true, WallpaperManager.FLAG_LOCK);
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||
manager.setBitmap(resource, rect, true, WallpaperManager.FLAG_SYSTEM | WallpaperManager.FLAG_LOCK);
|
||||
} else {
|
||||
manager.setBitmap(resource);
|
||||
}
|
||||
break;
|
||||
}
|
||||
Toast.makeText(ViewImgurMediaActivity.this, R.string.wallpaper_set, Toast.LENGTH_SHORT).show();
|
||||
} catch (IOException e) {
|
||||
Toast.makeText(ViewImgurMediaActivity.this, R.string.error_set_wallpaper, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoadCleared(@Nullable Drawable placeholder) {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setToHomeScreen(int viewPagerPosition) {
|
||||
if (images != null && viewPagerPosition >= 0 && viewPagerPosition < images.size()) {
|
||||
setAsWallpaper(images.get(viewPagerPosition).getLink(), 0);
|
||||
wallpaperSetter.set(images.get(viewPagerPosition).getLink(), WallpaperSetter.HOME_SCREEN, this);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setToLockScreen(int viewPagerPosition) {
|
||||
if (images != null && viewPagerPosition >= 0 && viewPagerPosition < images.size()) {
|
||||
setAsWallpaper(images.get(viewPagerPosition).getLink(), 1);
|
||||
wallpaperSetter.set(images.get(viewPagerPosition).getLink(), WallpaperSetter.LOCK_SCREEN, this);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setToBoth(int viewPagerPosition) {
|
||||
if (images != null && viewPagerPosition >= 0 && viewPagerPosition < images.size()) {
|
||||
setAsWallpaper(images.get(viewPagerPosition).getLink(), 2);
|
||||
wallpaperSetter.set(images.get(viewPagerPosition).getLink(), WallpaperSetter.BOTH_SCREENS, this);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -349,9 +349,9 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
||||
} else {
|
||||
glide.load(subredditData.getBannerUrl()).into(bannerImageView);
|
||||
bannerImageView.setOnClickListener(view -> {
|
||||
Intent intent = new Intent(ViewSubredditDetailActivity.this, ViewImageActivity.class);
|
||||
intent.putExtra(ViewImageActivity.IMAGE_URL_KEY, subredditData.getBannerUrl());
|
||||
intent.putExtra(ViewImageActivity.FILE_NAME_KEY, subredditName + "-banner.jpg");
|
||||
Intent intent = new Intent(ViewSubredditDetailActivity.this, ViewImageOrGifActivity.class);
|
||||
intent.putExtra(ViewImageOrGifActivity.IMAGE_URL_KEY, subredditData.getBannerUrl());
|
||||
intent.putExtra(ViewImageOrGifActivity.FILE_NAME_KEY, subredditName + "-banner.jpg");
|
||||
startActivity(intent);
|
||||
});
|
||||
}
|
||||
@ -370,9 +370,9 @@ public class ViewSubredditDetailActivity extends BaseActivity implements SortTyp
|
||||
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(216, 0))))
|
||||
.into(iconGifImageView);
|
||||
iconGifImageView.setOnClickListener(view -> {
|
||||
Intent intent = new Intent(ViewSubredditDetailActivity.this, ViewImageActivity.class);
|
||||
intent.putExtra(ViewImageActivity.IMAGE_URL_KEY, subredditData.getIconUrl());
|
||||
intent.putExtra(ViewImageActivity.FILE_NAME_KEY, subredditName + "-icon.jpg");
|
||||
Intent intent = new Intent(ViewSubredditDetailActivity.this, ViewImageOrGifActivity.class);
|
||||
intent.putExtra(ViewImageOrGifActivity.IMAGE_URL_KEY, subredditData.getIconUrl());
|
||||
intent.putExtra(ViewImageOrGifActivity.FILE_NAME_KEY, subredditName + "-icon.jpg");
|
||||
startActivity(intent);
|
||||
});
|
||||
}
|
||||
|
@ -295,9 +295,9 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
||||
} else {
|
||||
glide.load(userData.getBanner()).into(bannerImageView);
|
||||
bannerImageView.setOnClickListener(view -> {
|
||||
Intent intent = new Intent(this, ViewImageActivity.class);
|
||||
intent.putExtra(ViewImageActivity.IMAGE_URL_KEY, userData.getBanner());
|
||||
intent.putExtra(ViewImageActivity.FILE_NAME_KEY, username + "-banner.jpg");
|
||||
Intent intent = new Intent(this, ViewImageOrGifActivity.class);
|
||||
intent.putExtra(ViewImageOrGifActivity.IMAGE_URL_KEY, userData.getBanner());
|
||||
intent.putExtra(ViewImageOrGifActivity.FILE_NAME_KEY, username + "-banner.jpg");
|
||||
startActivity(intent);
|
||||
});
|
||||
}
|
||||
@ -315,9 +315,9 @@ public class ViewUserDetailActivity extends BaseActivity implements SortTypeSele
|
||||
.into(iconGifImageView);
|
||||
|
||||
iconGifImageView.setOnClickListener(view -> {
|
||||
Intent intent = new Intent(this, ViewImageActivity.class);
|
||||
intent.putExtra(ViewImageActivity.IMAGE_URL_KEY, userData.getIconUrl());
|
||||
intent.putExtra(ViewImageActivity.FILE_NAME_KEY, username + "-icon.jpg");
|
||||
Intent intent = new Intent(this, ViewImageOrGifActivity.class);
|
||||
intent.putExtra(ViewImageOrGifActivity.IMAGE_URL_KEY, userData.getIconUrl());
|
||||
intent.putExtra(ViewImageOrGifActivity.FILE_NAME_KEY, username + "-icon.jpg");
|
||||
startActivity(intent);
|
||||
});
|
||||
}
|
||||
|
@ -1,8 +1,6 @@
|
||||
package ml.docilealligator.infinityforreddit.Activity;
|
||||
|
||||
import android.Manifest;
|
||||
import android.app.DownloadManager;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.pm.PackageManager;
|
||||
@ -13,7 +11,6 @@ import android.media.AudioManager;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Environment;
|
||||
import android.text.Html;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
@ -50,8 +47,6 @@ import com.google.android.exoplayer2.util.Util;
|
||||
import com.thefuntasty.hauler.DragDirection;
|
||||
import com.thefuntasty.hauler.HaulerView;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
|
||||
@ -62,6 +57,8 @@ import ml.docilealligator.infinityforreddit.Font.ContentFontFamily;
|
||||
import ml.docilealligator.infinityforreddit.Font.FontFamily;
|
||||
import ml.docilealligator.infinityforreddit.Font.TitleFontFamily;
|
||||
import ml.docilealligator.infinityforreddit.Infinity;
|
||||
import ml.docilealligator.infinityforreddit.MediaDownloader;
|
||||
import ml.docilealligator.infinityforreddit.MediaDownloaderImpl;
|
||||
import ml.docilealligator.infinityforreddit.R;
|
||||
import ml.docilealligator.infinityforreddit.Service.DownloadRedditVideoService;
|
||||
import ml.docilealligator.infinityforreddit.Utils.SharedPreferencesUtils;
|
||||
@ -96,6 +93,7 @@ public class ViewVideoActivity extends AppCompatActivity {
|
||||
private Uri mVideoUri;
|
||||
private SimpleExoPlayer player;
|
||||
private DataSource.Factory dataSourceFactory;
|
||||
private MediaDownloader mediaDownloader;
|
||||
|
||||
private String videoDownloadUrl;
|
||||
private String videoFileName;
|
||||
@ -167,6 +165,8 @@ public class ViewVideoActivity extends AppCompatActivity {
|
||||
overridePendingTransition(0, slide);
|
||||
});
|
||||
|
||||
mediaDownloader = new MediaDownloaderImpl();
|
||||
|
||||
Intent intent = getIntent();
|
||||
mVideoUri = intent.getData();
|
||||
postTitle = intent.getStringExtra(EXTRA_POST_TITLE);
|
||||
@ -412,46 +412,7 @@ public class ViewVideoActivity extends AppCompatActivity {
|
||||
isDownloading = false;
|
||||
|
||||
if (videoType != VIDEO_TYPE_NORMAL) {
|
||||
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(videoDownloadUrl));
|
||||
request.setTitle(videoFileName);
|
||||
|
||||
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, videoFileName);
|
||||
} 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/", videoFileName);
|
||||
} else {
|
||||
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_PICTURES, videoFileName);
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
mediaDownloader.download(videoDownloadUrl, videoFileName, this);
|
||||
} else {
|
||||
Intent intent = new Intent(this, DownloadRedditVideoService.class);
|
||||
intent.putExtra(DownloadRedditVideoService.EXTRA_VIDEO_URL, videoDownloadUrl);
|
||||
@ -463,8 +424,8 @@ public class ViewVideoActivity extends AppCompatActivity {
|
||||
} else {
|
||||
startService(intent);
|
||||
}
|
||||
Toast.makeText(this, R.string.download_started, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
Toast.makeText(this, R.string.download_started, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -81,8 +81,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.ViewImageOrGifActivity;
|
||||
import ml.docilealligator.infinityforreddit.Activity.ViewPostDetailActivity;
|
||||
import ml.docilealligator.infinityforreddit.Activity.ViewSubredditDetailActivity;
|
||||
import ml.docilealligator.infinityforreddit.Activity.ViewUserDetailActivity;
|
||||
@ -307,7 +306,7 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy
|
||||
mShowElapsedTime = mSharedPreferences.getBoolean(SharedPreferencesUtils.SHOW_ELAPSED_TIME_KEY, false);
|
||||
mExpandChildren = !mSharedPreferences.getBoolean(SharedPreferencesUtils.SHOW_TOP_LEVEL_COMMENTS_FIRST, false);
|
||||
mCommentToolbarHidden = mSharedPreferences.getBoolean(SharedPreferencesUtils.COMMENT_TOOLBAR_HIDDEN, false);
|
||||
mCommentToolbarHideOnClick= mSharedPreferences.getBoolean(SharedPreferencesUtils.COMMENT_TOOLBAR_HIDE_ON_CLICK, true);
|
||||
mCommentToolbarHideOnClick = mSharedPreferences.getBoolean(SharedPreferencesUtils.COMMENT_TOOLBAR_HIDE_ON_CLICK, true);
|
||||
mSwapTapAndLong = mSharedPreferences.getBoolean(SharedPreferencesUtils.SWAP_TAP_AND_LONG_COMMENTS, false);
|
||||
mShowCommentDivider = mSharedPreferences.getBoolean(SharedPreferencesUtils.SHOW_COMMENT_DIVIDER, false);
|
||||
mShowAbsoluteNumberOfVotes = mSharedPreferences.getBoolean(SharedPreferencesUtils.SHOW_ABSOLUTE_NUMBER_OF_VOTES, true);
|
||||
@ -934,7 +933,7 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy
|
||||
((LoadMoreChildCommentsViewHolder) holder).placeholderTextView.setOnClickListener(view -> {
|
||||
int commentPosition = mIsSingleCommentThreadMode ? holder.getAdapterPosition() - 2 : holder.getAdapterPosition() - 1;
|
||||
int parentPosition = getParentPosition(commentPosition);
|
||||
if(parentPosition >= 0) {
|
||||
if (parentPosition >= 0) {
|
||||
CommentData parentComment = mVisibleComments.get(parentPosition);
|
||||
|
||||
mVisibleComments.get(commentPosition).setLoadingMoreChildren(true);
|
||||
@ -1172,7 +1171,7 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy
|
||||
} else {
|
||||
imageRequestBuilder.override(Target.SIZE_ORIGINAL).into(((PostDetailVideoAndGifPreviewHolder) holder).mImageView);
|
||||
}
|
||||
} else if(holder instanceof PostDetailLinkViewHolder) {
|
||||
} else if (holder instanceof PostDetailLinkViewHolder) {
|
||||
RequestBuilder<Drawable> imageRequestBuilder = mGlide.load(mPost.getPreviewUrl())
|
||||
.listener(new RequestListener<Drawable>() {
|
||||
@Override
|
||||
@ -2255,11 +2254,11 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy
|
||||
intent.putExtra(ViewVideoActivity.EXTRA_POST_TITLE, mPost.getTitle());
|
||||
mActivity.startActivity(intent);
|
||||
} else if (mPost.getPostType() == Post.GIF_TYPE) {
|
||||
Intent intent = new Intent(mActivity, ViewGIFActivity.class);
|
||||
intent.putExtra(ViewGIFActivity.FILE_NAME_KEY, mPost.getSubredditName()
|
||||
Intent intent = new Intent(mActivity, ViewImageOrGifActivity.class);
|
||||
intent.putExtra(ViewImageOrGifActivity.FILE_NAME_KEY, mPost.getSubredditName()
|
||||
+ "-" + mPost.getId() + ".gif");
|
||||
intent.putExtra(ViewGIFActivity.GIF_URL_KEY, mPost.getVideoUrl());
|
||||
intent.putExtra(ViewImageActivity.POST_TITLE_KEY, mPost.getTitle());
|
||||
intent.putExtra(ViewImageOrGifActivity.GIF_URL_KEY, mPost.getVideoUrl());
|
||||
intent.putExtra(ViewImageOrGifActivity.POST_TITLE_KEY, mPost.getTitle());
|
||||
mActivity.startActivity(intent);
|
||||
}
|
||||
});
|
||||
@ -2350,18 +2349,18 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy
|
||||
|
||||
mImageView.setOnClickListener(view -> {
|
||||
if (mPost.getPostType() == Post.IMAGE_TYPE) {
|
||||
Intent intent = new Intent(mActivity, ViewImageActivity.class);
|
||||
intent.putExtra(ViewImageActivity.IMAGE_URL_KEY, mPost.getUrl());
|
||||
intent.putExtra(ViewImageActivity.FILE_NAME_KEY, mPost.getSubredditNamePrefixed().substring(2)
|
||||
Intent intent = new Intent(mActivity, ViewImageOrGifActivity.class);
|
||||
intent.putExtra(ViewImageOrGifActivity.IMAGE_URL_KEY, mPost.getUrl());
|
||||
intent.putExtra(ViewImageOrGifActivity.FILE_NAME_KEY, mPost.getSubredditNamePrefixed().substring(2)
|
||||
+ "-" + mPost.getId().substring(3) + ".jpg");
|
||||
intent.putExtra(ViewImageActivity.POST_TITLE_KEY, mPost.getTitle());
|
||||
intent.putExtra(ViewImageOrGifActivity.POST_TITLE_KEY, mPost.getTitle());
|
||||
mActivity.startActivity(intent);
|
||||
} else if (mPost.getPostType() == Post.GIF_TYPE) {
|
||||
Intent intent = new Intent(mActivity, ViewGIFActivity.class);
|
||||
intent.putExtra(ViewGIFActivity.FILE_NAME_KEY, mPost.getSubredditName()
|
||||
Intent intent = new Intent(mActivity, ViewImageOrGifActivity.class);
|
||||
intent.putExtra(ViewImageOrGifActivity.FILE_NAME_KEY, mPost.getSubredditName()
|
||||
+ "-" + mPost.getId() + ".gif");
|
||||
intent.putExtra(ViewGIFActivity.GIF_URL_KEY, mPost.getVideoUrl());
|
||||
intent.putExtra(ViewImageActivity.POST_TITLE_KEY, mPost.getTitle());
|
||||
intent.putExtra(ViewImageOrGifActivity.GIF_URL_KEY, mPost.getVideoUrl());
|
||||
intent.putExtra(ViewImageOrGifActivity.POST_TITLE_KEY, mPost.getTitle());
|
||||
mActivity.startActivity(intent);
|
||||
}
|
||||
});
|
||||
@ -2934,7 +2933,7 @@ public class CommentAndPostRecyclerViewAdapter extends RecyclerView.Adapter<Recy
|
||||
expandButton.setOnClickListener(view -> {
|
||||
if (expandButton.getVisibility() == View.VISIBLE) {
|
||||
int commentPosition = mIsSingleCommentThreadMode ? getAdapterPosition() - 2 : getAdapterPosition() - 1;
|
||||
if(commentPosition >= 0 && commentPosition < mVisibleComments.size()) {
|
||||
if (commentPosition >= 0 && commentPosition < mVisibleComments.size()) {
|
||||
CommentData comment = getCurrentComment();
|
||||
if (mVisibleComments.get(commentPosition).isExpanded()) {
|
||||
collapseChildren(commentPosition);
|
||||
|
@ -65,8 +65,7 @@ import jp.wasabeef.glide.transformations.BlurTransformation;
|
||||
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
|
||||
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.ViewImageOrGifActivity;
|
||||
import ml.docilealligator.infinityforreddit.Activity.ViewPostDetailActivity;
|
||||
import ml.docilealligator.infinityforreddit.Activity.ViewSubredditDetailActivity;
|
||||
import ml.docilealligator.infinityforreddit.Activity.ViewUserDetailActivity;
|
||||
@ -836,9 +835,9 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
|
||||
|
||||
final String imageUrl = post.getUrl();
|
||||
((PostCompactViewHolder) holder).imageView.setOnClickListener(view -> {
|
||||
Intent intent = new Intent(mActivity, ViewImageActivity.class);
|
||||
intent.putExtra(ViewImageActivity.IMAGE_URL_KEY, imageUrl);
|
||||
intent.putExtra(ViewImageActivity.FILE_NAME_KEY, subredditName
|
||||
Intent intent = new Intent(mActivity, ViewImageOrGifActivity.class);
|
||||
intent.putExtra(ViewImageOrGifActivity.IMAGE_URL_KEY, imageUrl);
|
||||
intent.putExtra(ViewImageOrGifActivity.FILE_NAME_KEY, subredditName
|
||||
+ "-" + id + ".jpg");
|
||||
mActivity.startActivity(intent);
|
||||
});
|
||||
@ -866,11 +865,11 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
|
||||
|
||||
final Uri gifVideoUri = Uri.parse(post.getVideoUrl());
|
||||
((PostCompactViewHolder) holder).imageView.setOnClickListener(view -> {
|
||||
Intent intent = new Intent(mActivity, ViewGIFActivity.class);
|
||||
Intent intent = new Intent(mActivity, ViewImageOrGifActivity.class);
|
||||
intent.setData(gifVideoUri);
|
||||
intent.putExtra(ViewGIFActivity.FILE_NAME_KEY, subredditName
|
||||
intent.putExtra(ViewImageOrGifActivity.FILE_NAME_KEY, subredditName
|
||||
+ "-" + id + ".gif");
|
||||
intent.putExtra(ViewGIFActivity.GIF_URL_KEY, post.getVideoUrl());
|
||||
intent.putExtra(ViewImageOrGifActivity.GIF_URL_KEY, post.getVideoUrl());
|
||||
mActivity.startActivity(intent);
|
||||
});
|
||||
|
||||
@ -1209,18 +1208,18 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
|
||||
String previewUrl = post.getThumbnailPreviewUrl().equals("") ? post.getPreviewUrl() : post.getThumbnailPreviewUrl();
|
||||
RequestBuilder<Drawable> imageRequestBuilder = mGlide.load(previewUrl)
|
||||
.error(R.drawable.ic_error_outline_black_24dp).listener(new RequestListener<Drawable>() {
|
||||
@Override
|
||||
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
|
||||
((PostCompactViewHolder) holder).progressBar.setVisibility(View.GONE);
|
||||
return false;
|
||||
}
|
||||
@Override
|
||||
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
|
||||
((PostCompactViewHolder) holder).progressBar.setVisibility(View.GONE);
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
|
||||
((PostCompactViewHolder) holder).progressBar.setVisibility(View.GONE);
|
||||
return false;
|
||||
}
|
||||
});
|
||||
@Override
|
||||
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
|
||||
((PostCompactViewHolder) holder).progressBar.setVisibility(View.GONE);
|
||||
return false;
|
||||
}
|
||||
});
|
||||
if ((post.isNSFW() && mNeedBlurNSFW) || post.isSpoiler() && mNeedBlurSpoiler) {
|
||||
imageRequestBuilder
|
||||
.transform(new BlurTransformation(50, 2))
|
||||
@ -1310,7 +1309,7 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
|
||||
|
||||
public void removeFooter() {
|
||||
if (hasExtraRow()) {
|
||||
notifyItemRemoved(getItemCount() - 1);
|
||||
notifyItemRemoved(getItemCount() - 1);
|
||||
}
|
||||
|
||||
networkState = null;
|
||||
@ -2144,11 +2143,11 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
|
||||
intent.putExtra(ViewVideoActivity.EXTRA_POST_TITLE, post.getTitle());
|
||||
mActivity.startActivity(intent);
|
||||
} else if (post.getPostType() == Post.GIF_TYPE) {
|
||||
Intent intent = new Intent(mActivity, ViewGIFActivity.class);
|
||||
intent.putExtra(ViewGIFActivity.FILE_NAME_KEY, post.getSubredditName()
|
||||
Intent intent = new Intent(mActivity, ViewImageOrGifActivity.class);
|
||||
intent.putExtra(ViewImageOrGifActivity.FILE_NAME_KEY, post.getSubredditName()
|
||||
+ "-" + post.getId() + ".gif");
|
||||
intent.putExtra(ViewGIFActivity.GIF_URL_KEY, post.getVideoUrl());
|
||||
intent.putExtra(ViewGIFActivity.POST_TITLE_KEY, post.getTitle());
|
||||
intent.putExtra(ViewImageOrGifActivity.GIF_URL_KEY, post.getVideoUrl());
|
||||
intent.putExtra(ViewImageOrGifActivity.POST_TITLE_KEY, post.getTitle());
|
||||
mActivity.startActivity(intent);
|
||||
}
|
||||
}
|
||||
@ -2243,18 +2242,18 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
|
||||
Post post = getItem(getAdapterPosition());
|
||||
if (post != null) {
|
||||
if (post.getPostType() == Post.IMAGE_TYPE) {
|
||||
Intent intent = new Intent(mActivity, ViewImageActivity.class);
|
||||
intent.putExtra(ViewImageActivity.IMAGE_URL_KEY, post.getUrl());
|
||||
intent.putExtra(ViewImageActivity.FILE_NAME_KEY, post.getSubredditName()
|
||||
Intent intent = new Intent(mActivity, ViewImageOrGifActivity.class);
|
||||
intent.putExtra(ViewImageOrGifActivity.IMAGE_URL_KEY, post.getUrl());
|
||||
intent.putExtra(ViewImageOrGifActivity.FILE_NAME_KEY, post.getSubredditName()
|
||||
+ "-" + post.getId() + ".jpg");
|
||||
intent.putExtra(ViewImageActivity.POST_TITLE_KEY, post.getTitle());
|
||||
intent.putExtra(ViewImageOrGifActivity.POST_TITLE_KEY, post.getTitle());
|
||||
mActivity.startActivity(intent);
|
||||
} else if (post.getPostType() == Post.GIF_TYPE) {
|
||||
Intent intent = new Intent(mActivity, ViewGIFActivity.class);
|
||||
intent.putExtra(ViewGIFActivity.FILE_NAME_KEY, post.getSubredditName()
|
||||
Intent intent = new Intent(mActivity, ViewImageOrGifActivity.class);
|
||||
intent.putExtra(ViewImageOrGifActivity.FILE_NAME_KEY, post.getSubredditName()
|
||||
+ "-" + post.getId() + ".gif");
|
||||
intent.putExtra(ViewGIFActivity.GIF_URL_KEY, post.getVideoUrl());
|
||||
intent.putExtra(ViewGIFActivity.POST_TITLE_KEY, post.getTitle());
|
||||
intent.putExtra(ViewImageOrGifActivity.GIF_URL_KEY, post.getVideoUrl());
|
||||
intent.putExtra(ViewImageOrGifActivity.POST_TITLE_KEY, post.getTitle());
|
||||
mActivity.startActivity(intent);
|
||||
}
|
||||
}
|
||||
@ -2507,7 +2506,7 @@ public class PostRecyclerViewAdapter extends PagedListAdapter<Post, RecyclerView
|
||||
@BindView(R.id.share_button_item_post_text_type)
|
||||
ImageView shareButton;
|
||||
|
||||
PostTextTypeViewHolder (View itemView) {
|
||||
PostTextTypeViewHolder(View itemView) {
|
||||
super(itemView);
|
||||
ButterKnife.bind(this, itemView);
|
||||
setBaseView(cardView,
|
||||
|
@ -32,8 +32,7 @@ import ml.docilealligator.infinityforreddit.Activity.SubredditMultiselectionActi
|
||||
import ml.docilealligator.infinityforreddit.Activity.SubredditSelectionActivity;
|
||||
import ml.docilealligator.infinityforreddit.Activity.SubscribedThingListingActivity;
|
||||
import ml.docilealligator.infinityforreddit.Activity.ThemePreviewActivity;
|
||||
import ml.docilealligator.infinityforreddit.Activity.ViewGIFActivity;
|
||||
import ml.docilealligator.infinityforreddit.Activity.ViewImageActivity;
|
||||
import ml.docilealligator.infinityforreddit.Activity.ViewImageOrGifActivity;
|
||||
import ml.docilealligator.infinityforreddit.Activity.ViewImgurMediaActivity;
|
||||
import ml.docilealligator.infinityforreddit.Activity.ViewMessageActivity;
|
||||
import ml.docilealligator.infinityforreddit.Activity.ViewMultiRedditDetailActivity;
|
||||
@ -133,9 +132,7 @@ public interface AppComponent {
|
||||
|
||||
void inject(AccountSavedThingActivity accountSavedThingActivity);
|
||||
|
||||
void inject(ViewImageActivity viewImageActivity);
|
||||
|
||||
void inject(ViewGIFActivity viewGIFActivity);
|
||||
void inject(ViewImageOrGifActivity viewGIFActivity);
|
||||
|
||||
void inject(MultiRedditListingActivity multiRedditListingActivity);
|
||||
|
||||
|
@ -0,0 +1,98 @@
|
||||
package ml.docilealligator.infinityforreddit.AsyncTask;
|
||||
|
||||
import android.app.WallpaperManager;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Rect;
|
||||
import android.media.ThumbnailUtils;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Build;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.view.WindowManager;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public class SetAsWallpaperAsyncTask extends AsyncTask<Void, Void, Void> {
|
||||
|
||||
private Bitmap bitmap;
|
||||
private int setTo;
|
||||
private WallpaperManager manager;
|
||||
private WindowManager windowManager;
|
||||
private SetAsWallpaperAsyncTaskListener setAsWallpaperAsyncTaskListener;
|
||||
private boolean success = true;
|
||||
|
||||
public SetAsWallpaperAsyncTask(Bitmap bitmap, int setTo, WallpaperManager manager, WindowManager windowManager,
|
||||
SetAsWallpaperAsyncTaskListener setAsWallpaperAsyncTaskListener) {
|
||||
this.bitmap = bitmap;
|
||||
this.setTo = setTo;
|
||||
this.manager = manager;
|
||||
this.windowManager = windowManager;
|
||||
this.setAsWallpaperAsyncTaskListener = setAsWallpaperAsyncTaskListener;
|
||||
}
|
||||
|
||||
public interface SetAsWallpaperAsyncTaskListener {
|
||||
void success();
|
||||
void failed();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Void doInBackground(Void... voids) {
|
||||
DisplayMetrics metrics = new DisplayMetrics();
|
||||
Rect rect = null;
|
||||
|
||||
if (windowManager != null) {
|
||||
windowManager.getDefaultDisplay().getMetrics(metrics);
|
||||
int height = metrics.heightPixels;
|
||||
int width = metrics.widthPixels;
|
||||
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
|
||||
bitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height);
|
||||
}
|
||||
|
||||
float imageAR = (float) bitmap.getWidth() / (float) bitmap.getHeight();
|
||||
float screenAR = (float) width / (float) height;
|
||||
|
||||
if (imageAR > screenAR) {
|
||||
int desiredWidth = (int) (bitmap.getHeight() * screenAR);
|
||||
rect = new Rect((bitmap.getWidth() - desiredWidth) / 2, 0, bitmap.getWidth(), bitmap.getHeight());
|
||||
} else {
|
||||
int desiredHeight = (int) (bitmap.getWidth() / screenAR);
|
||||
rect = new Rect(0, (bitmap.getHeight() - desiredHeight) / 2, bitmap.getWidth(), (bitmap.getHeight() + desiredHeight) / 2);
|
||||
}
|
||||
}
|
||||
try {
|
||||
switch (setTo) {
|
||||
case 0:
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||
manager.setBitmap(bitmap, rect, true, WallpaperManager.FLAG_SYSTEM);
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||
manager.setBitmap(bitmap, rect, true, WallpaperManager.FLAG_LOCK);
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||
manager.setBitmap(bitmap, rect, true, WallpaperManager.FLAG_SYSTEM | WallpaperManager.FLAG_LOCK);
|
||||
} else {
|
||||
manager.setBitmap(bitmap);
|
||||
}
|
||||
break;
|
||||
}
|
||||
} catch (IOException e) {
|
||||
success = false;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(Void aVoid) {
|
||||
super.onPostExecute(aVoid);
|
||||
if (success) {
|
||||
setAsWallpaperAsyncTaskListener.success();
|
||||
} else {
|
||||
setAsWallpaperAsyncTaskListener.failed();
|
||||
}
|
||||
}
|
||||
}
|
@ -1,7 +1,6 @@
|
||||
package ml.docilealligator.infinityforreddit.Fragment;
|
||||
|
||||
import android.Manifest;
|
||||
import android.app.DownloadManager;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
@ -10,7 +9,6 @@ import android.graphics.drawable.Drawable;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Environment;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
@ -47,7 +45,10 @@ import ml.docilealligator.infinityforreddit.AsyncTask.SaveImageToFileAsyncTask;
|
||||
import ml.docilealligator.infinityforreddit.BottomSheetFragment.SetAsWallpaperBottomSheetFragment;
|
||||
import ml.docilealligator.infinityforreddit.BuildConfig;
|
||||
import ml.docilealligator.infinityforreddit.ImgurMedia;
|
||||
import ml.docilealligator.infinityforreddit.MediaDownloader;
|
||||
import ml.docilealligator.infinityforreddit.MediaDownloaderImpl;
|
||||
import ml.docilealligator.infinityforreddit.R;
|
||||
import ml.docilealligator.infinityforreddit.SetAsWallpaperCallback;
|
||||
|
||||
public class ViewImgurImageFragment extends Fragment {
|
||||
|
||||
@ -63,6 +64,7 @@ public class ViewImgurImageFragment extends Fragment {
|
||||
|
||||
private ViewImgurMediaActivity activity;
|
||||
private RequestManager glide;
|
||||
private MediaDownloader mediaDownloader;
|
||||
private ImgurMedia imgurMedia;
|
||||
private boolean isDownloading = false;
|
||||
|
||||
@ -81,6 +83,7 @@ public class ViewImgurImageFragment extends Fragment {
|
||||
|
||||
imgurMedia = getArguments().getParcelable(EXTRA_IMGUR_IMAGES);
|
||||
glide = Glide.with(activity);
|
||||
mediaDownloader = new MediaDownloaderImpl();
|
||||
loadImage();
|
||||
|
||||
return rootView;
|
||||
@ -131,10 +134,10 @@ public class ViewImgurImageFragment extends Fragment {
|
||||
PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE);
|
||||
} else {
|
||||
// Permission has already been granted
|
||||
download();
|
||||
mediaDownloader.download(imgurMedia.getLink(), imgurMedia.getFileName(), getContext());
|
||||
}
|
||||
} else {
|
||||
download();
|
||||
mediaDownloader.download(imgurMedia.getLink(), imgurMedia.getFileName(), getContext());
|
||||
}
|
||||
|
||||
return true;
|
||||
@ -151,7 +154,7 @@ public class ViewImgurImageFragment extends Fragment {
|
||||
@Override
|
||||
public void saveSuccess(File imageFile) {
|
||||
Uri uri = FileProvider.getUriForFile(activity,
|
||||
BuildConfig.APPLICATION_ID + ".provider",imageFile);
|
||||
BuildConfig.APPLICATION_ID + ".provider", imageFile);
|
||||
Intent shareIntent = new Intent();
|
||||
shareIntent.setAction(Intent.ACTION_SEND);
|
||||
shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
|
||||
@ -186,7 +189,7 @@ public class ViewImgurImageFragment extends Fragment {
|
||||
setAsWallpaperBottomSheetFragment.setArguments(bundle);
|
||||
setAsWallpaperBottomSheetFragment.show(activity.getSupportFragmentManager(), setAsWallpaperBottomSheetFragment.getTag());
|
||||
} else {
|
||||
activity.setAsWallpaper(imgurMedia.getLink(), 2);
|
||||
((SetAsWallpaperCallback) activity).setToBoth(activity.getCurrentPagePosition());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@ -200,56 +203,12 @@ public class ViewImgurImageFragment extends Fragment {
|
||||
if (grantResults[0] == PackageManager.PERMISSION_DENIED) {
|
||||
Toast.makeText(activity, R.string.no_storage_permission, Toast.LENGTH_SHORT).show();
|
||||
} else if (grantResults[0] == PackageManager.PERMISSION_GRANTED && isDownloading) {
|
||||
download();
|
||||
mediaDownloader.download(imgurMedia.getLink(), imgurMedia.getFileName(), getContext());
|
||||
}
|
||||
isDownloading = false;
|
||||
}
|
||||
}
|
||||
|
||||
private void download() {
|
||||
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(imgurMedia.getLink()));
|
||||
request.setTitle(imgurMedia.getFileName());
|
||||
|
||||
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, imgurMedia.getFileName());
|
||||
} 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/", imgurMedia.getFileName());
|
||||
} else {
|
||||
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_PICTURES, imgurMedia.getFileName());
|
||||
}
|
||||
}
|
||||
|
||||
DownloadManager manager = (DownloadManager) activity.getSystemService(Context.DOWNLOAD_SERVICE);
|
||||
|
||||
if (manager == null) {
|
||||
Toast.makeText(activity, R.string.download_failed, Toast.LENGTH_SHORT).show();
|
||||
return;
|
||||
}
|
||||
|
||||
manager.enqueue(request);
|
||||
Toast.makeText(activity, R.string.download_started, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAttach(@NonNull Context context) {
|
||||
super.onAttach(context);
|
||||
|
@ -2,7 +2,6 @@ package ml.docilealligator.infinityforreddit.Fragment;
|
||||
|
||||
import android.Manifest;
|
||||
import android.app.Activity;
|
||||
import android.app.DownloadManager;
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.pm.PackageManager;
|
||||
@ -11,7 +10,6 @@ import android.media.AudioManager;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Environment;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
@ -42,8 +40,6 @@ import com.google.android.exoplayer2.upstream.DataSource;
|
||||
import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory;
|
||||
import com.google.android.exoplayer2.util.Util;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
|
||||
@ -51,6 +47,8 @@ import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
import ml.docilealligator.infinityforreddit.ImgurMedia;
|
||||
import ml.docilealligator.infinityforreddit.Infinity;
|
||||
import ml.docilealligator.infinityforreddit.MediaDownloader;
|
||||
import ml.docilealligator.infinityforreddit.MediaDownloaderImpl;
|
||||
import ml.docilealligator.infinityforreddit.R;
|
||||
import ml.docilealligator.infinityforreddit.Utils.SharedPreferencesUtils;
|
||||
|
||||
@ -71,6 +69,7 @@ public class ViewImgurVideoFragment extends Fragment {
|
||||
private ImgurMedia imgurMedia;
|
||||
private SimpleExoPlayer player;
|
||||
private DataSource.Factory dataSourceFactory;
|
||||
private MediaDownloader mediaDownloader;
|
||||
private boolean wasPlaying = false;
|
||||
private boolean isMute = false;
|
||||
private boolean isDownloading = false;
|
||||
@ -131,6 +130,8 @@ public class ViewImgurVideoFragment extends Fragment {
|
||||
}
|
||||
});
|
||||
|
||||
mediaDownloader = new MediaDownloaderImpl();
|
||||
|
||||
TrackSelection.Factory videoTrackSelectionFactory = new AdaptiveTrackSelection.Factory();
|
||||
TrackSelector trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);
|
||||
player = ExoPlayerFactory.newSimpleInstance(activity, trackSelector);
|
||||
@ -190,47 +191,7 @@ public class ViewImgurVideoFragment extends Fragment {
|
||||
private void download() {
|
||||
isDownloading = false;
|
||||
|
||||
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(imgurMedia.getLink()));
|
||||
request.setTitle(imgurMedia.getFileName());
|
||||
|
||||
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, imgurMedia.getFileName());
|
||||
} 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/", imgurMedia.getFileName());
|
||||
} else {
|
||||
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_PICTURES, imgurMedia.getFileName());
|
||||
}
|
||||
}
|
||||
|
||||
DownloadManager manager = (DownloadManager) activity.getSystemService(Context.DOWNLOAD_SERVICE);
|
||||
|
||||
if (manager == null) {
|
||||
Toast.makeText(activity, R.string.download_failed, Toast.LENGTH_SHORT).show();
|
||||
return;
|
||||
}
|
||||
|
||||
manager.enqueue(request);
|
||||
Toast.makeText(activity, R.string.download_started, Toast.LENGTH_SHORT).show();
|
||||
mediaDownloader.download(imgurMedia.getLink(), imgurMedia.getFileName(), getContext());
|
||||
}
|
||||
|
||||
private void preparePlayer(Bundle savedInstanceState) {
|
||||
|
@ -0,0 +1,7 @@
|
||||
package ml.docilealligator.infinityforreddit;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
public interface MediaDownloader {
|
||||
void download(String url, String fileName, Context ctx);
|
||||
}
|
@ -0,0 +1,58 @@
|
||||
package ml.docilealligator.infinityforreddit;
|
||||
|
||||
import android.app.DownloadManager;
|
||||
import android.content.Context;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Environment;
|
||||
import android.widget.Toast;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
public class MediaDownloaderImpl implements MediaDownloader {
|
||||
|
||||
@Override
|
||||
public void download(String url, String fileName, Context ctx) {
|
||||
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
|
||||
request.setTitle(fileName);
|
||||
|
||||
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, fileName);
|
||||
} 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/", fileName);
|
||||
} else {
|
||||
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_PICTURES, fileName);
|
||||
}
|
||||
}
|
||||
|
||||
DownloadManager manager = (DownloadManager) ctx.getSystemService(Context.DOWNLOAD_SERVICE);
|
||||
|
||||
if (manager == null) {
|
||||
Toast.makeText(ctx, R.string.download_failed, Toast.LENGTH_SHORT).show();
|
||||
return;
|
||||
}
|
||||
|
||||
manager.enqueue(request);
|
||||
Toast.makeText(ctx, R.string.download_started, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
}
|
@ -0,0 +1,92 @@
|
||||
package ml.docilealligator.infinityforreddit;
|
||||
|
||||
import android.app.WallpaperManager;
|
||||
import android.content.Context;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Rect;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.media.ThumbnailUtils;
|
||||
import android.os.Build;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.bumptech.glide.request.target.CustomTarget;
|
||||
import com.bumptech.glide.request.transition.Transition;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public class WallpaperSetter {
|
||||
public static final int HOME_SCREEN = 0;
|
||||
public static final int LOCK_SCREEN = 1;
|
||||
public static final int BOTH_SCREENS = 2;
|
||||
|
||||
public void set(String url, int setTo, Context ctx) {
|
||||
Toast.makeText(ctx, R.string.save_image_first, Toast.LENGTH_SHORT).show();
|
||||
Glide.with(ctx).asBitmap().load(url).into(new CustomTarget<Bitmap>() {
|
||||
@Override
|
||||
public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
|
||||
WallpaperManager manager = WallpaperManager.getInstance(ctx);
|
||||
|
||||
DisplayMetrics metrics = new DisplayMetrics();
|
||||
WindowManager windowManager = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE);
|
||||
|
||||
Rect rect = null;
|
||||
|
||||
if (windowManager != null) {
|
||||
windowManager.getDefaultDisplay().getMetrics(metrics);
|
||||
int height = metrics.heightPixels;
|
||||
int width = metrics.widthPixels;
|
||||
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
|
||||
resource = ThumbnailUtils.extractThumbnail(resource, width, height);
|
||||
}
|
||||
|
||||
float imageAR = (float) resource.getWidth() / (float) resource.getHeight();
|
||||
float screenAR = (float) width / (float) height;
|
||||
|
||||
if (imageAR > screenAR) {
|
||||
int desiredWidth = (int) (resource.getHeight() * screenAR);
|
||||
rect = new Rect((resource.getWidth() - desiredWidth) / 2, 0, resource.getWidth(), resource.getHeight());
|
||||
} else {
|
||||
int desiredHeight = (int) (resource.getWidth() / screenAR);
|
||||
rect = new Rect(0, (resource.getHeight() - desiredHeight) / 2, resource.getWidth(), (resource.getHeight() + desiredHeight) / 2);
|
||||
}
|
||||
}
|
||||
try {
|
||||
switch (setTo) {
|
||||
case HOME_SCREEN:
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||
manager.setBitmap(resource, rect, true, WallpaperManager.FLAG_SYSTEM);
|
||||
}
|
||||
break;
|
||||
case LOCK_SCREEN:
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||
manager.setBitmap(resource, rect, true, WallpaperManager.FLAG_LOCK);
|
||||
}
|
||||
break;
|
||||
case BOTH_SCREENS:
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||
manager.setBitmap(resource, rect, true, WallpaperManager.FLAG_SYSTEM | WallpaperManager.FLAG_LOCK);
|
||||
} else {
|
||||
manager.setBitmap(resource);
|
||||
}
|
||||
break;
|
||||
}
|
||||
Toast.makeText(ctx, R.string.wallpaper_set, Toast.LENGTH_SHORT).show();
|
||||
} catch (IOException e) {
|
||||
Toast.makeText(ctx, R.string.error_set_wallpaper, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoadCleared(@Nullable Drawable placeholder) {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
@ -1,57 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<com.thefuntasty.hauler.HaulerView
|
||||
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:id="@+id/hauler_view_view_gif_activity"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:keepScreenOn="true"
|
||||
app:dragUpEnabled="true"
|
||||
tools:application="ml.docilealligator.infinityforreddit.Activity.ViewGIFActivity">
|
||||
|
||||
<androidx.core.widget.NestedScrollView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:fillViewport="true">
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<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/error_loading_gif_tap_to_retry"
|
||||
android:textSize="?attr/font_default"
|
||||
android:fontFamily="?attr/font_family" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
</androidx.core.widget.NestedScrollView>
|
||||
|
||||
</com.thefuntasty.hauler.HaulerView>
|
@ -1,9 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<com.thefuntasty.hauler.HaulerView
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<com.thefuntasty.hauler.HaulerView 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:id="@+id/hauler_view_view_image_activity"
|
||||
android:id="@+id/hauler_view_view_image_or_gif_activity"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
app:dragUpEnabled="true"
|
||||
@ -19,21 +18,27 @@
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<ProgressBar
|
||||
android:id="@+id/progress_bar_view_image_activity"
|
||||
android:id="@+id/progress_bar_view_image_or_gif_activity"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerInParent="true" />
|
||||
|
||||
<com.alexvasilkov.gestures.views.GestureImageView
|
||||
android:id="@+id/image_view_view_image_activity"
|
||||
<com.alexvasilkov.gestures.views.GestureFrameLayout
|
||||
android:id="@+id/gesture_layout_view_image_or_gif_activity"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:adjustViewBounds="true"
|
||||
android:scaleType="fitCenter"
|
||||
app:gest_fillViewport="true" />
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<pl.droidsonroids.gif.GifImageView
|
||||
android:id="@+id/image_view_view_image_or_gif_activity"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:adjustViewBounds="true"
|
||||
android:scaleType="fitCenter"
|
||||
app:gest_fillViewport="true" />
|
||||
</com.alexvasilkov.gestures.views.GestureFrameLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/load_image_error_linear_layout_view_image_activity"
|
||||
android:id="@+id/load_image_error_linear_layout_view_image_or_gif_activity"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:visibility="gone">
|
||||
@ -41,13 +46,13 @@
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:drawableTop="@drawable/ic_error_outline_white_24dp"
|
||||
android:layout_gravity="center"
|
||||
android:drawableTop="@drawable/ic_error_outline_white_24dp"
|
||||
android:fontFamily="?attr/font_family"
|
||||
android:gravity="center"
|
||||
android:textColor="@android:color/white"
|
||||
android:text="@string/error_loading_image_tap_to_retry"
|
||||
android:textSize="?attr/font_default"
|
||||
android:fontFamily="?attr/font_family" />
|
||||
android:textColor="@android:color/white"
|
||||
android:textSize="?attr/font_default" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
@ -55,4 +60,4 @@
|
||||
|
||||
</androidx.core.widget.NestedScrollView>
|
||||
|
||||
</com.thefuntasty.hauler.HaulerView>
|
||||
</com.thefuntasty.hauler.HaulerView>
|
@ -1,17 +0,0 @@
|
||||
<?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_activity"
|
||||
android:orderInCategory="1"
|
||||
android:title="@string/action_download"
|
||||
android:icon="@drawable/ic_file_download_toolbar_white_24dp"
|
||||
app:showAsAction="ifRoom" />
|
||||
|
||||
<item
|
||||
android:id="@+id/action_share_view_gif_activity"
|
||||
android:orderInCategory="2"
|
||||
android:title="@string/action_share"
|
||||
android:icon="@drawable/ic_share_toolbar_white_24dp"
|
||||
app:showAsAction="ifRoom" />
|
||||
</menu>
|
@ -2,22 +2,23 @@
|
||||
<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_image_activity"
|
||||
android:id="@+id/action_download_view_image_or_gif_activity"
|
||||
android:icon="@drawable/ic_file_download_toolbar_white_24dp"
|
||||
android:orderInCategory="1"
|
||||
android:title="@string/action_download"
|
||||
android:icon="@drawable/ic_file_download_toolbar_white_24dp"
|
||||
app:showAsAction="ifRoom" />
|
||||
|
||||
<item
|
||||
android:id="@+id/action_share_view_image_activity"
|
||||
android:id="@+id/action_share_view_image_or_gif_activity"
|
||||
android:icon="@drawable/ic_share_toolbar_white_24dp"
|
||||
android:orderInCategory="2"
|
||||
android:title="@string/action_share"
|
||||
android:icon="@drawable/ic_share_toolbar_white_24dp"
|
||||
app:showAsAction="ifRoom" />
|
||||
|
||||
<item
|
||||
android:id="@+id/action_set_wallpaper_view_image_activity"
|
||||
android:id="@+id/action_set_wallpaper_view_image_or_gif_activity"
|
||||
android:orderInCategory="3"
|
||||
android:title="@string/action_set_wallpaper"
|
||||
android:visible="false"
|
||||
app:showAsAction="never" />
|
||||
</menu>
|
||||
</menu>
|
Loading…
Reference in New Issue
Block a user