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