mirror of
https://codeberg.org/Bazsalanszky/Infinity-For-Lemmy.git
synced 2024-11-10 12:47:26 +01:00
Support different download locations in ViewImgurImageFragment, ViewImgurVideoFragment, ViewRedditGalleryImageOrGifFragment and ViewRedditGalleryVideoFragment.
This commit is contained in:
parent
cb0d662ed3
commit
1ee48844d2
@ -25,7 +25,7 @@
|
||||
android:usesCleartextTraffic="true"
|
||||
tools:replace="android:label">
|
||||
<service
|
||||
android:name=".Service.DownloadImageService"
|
||||
android:name=".Service.DownloadMediaService"
|
||||
android:enabled="true"
|
||||
android:exported="false"></service>
|
||||
|
||||
@ -42,7 +42,7 @@
|
||||
android:windowSoftInputMode="adjustResize" />
|
||||
|
||||
<service
|
||||
android:name=".Service.DownloadVideoService"
|
||||
android:name=".Service.DownloadRedditVideoService"
|
||||
android:enabled="true"
|
||||
android:exported="false" />
|
||||
|
||||
|
@ -63,10 +63,8 @@ import ml.docilealligator.infinityforreddit.Font.FontStyle;
|
||||
import ml.docilealligator.infinityforreddit.Font.TitleFontFamily;
|
||||
import ml.docilealligator.infinityforreddit.Font.TitleFontStyle;
|
||||
import ml.docilealligator.infinityforreddit.Infinity;
|
||||
import ml.docilealligator.infinityforreddit.MediaDownloader;
|
||||
import ml.docilealligator.infinityforreddit.MediaDownloaderImpl;
|
||||
import ml.docilealligator.infinityforreddit.R;
|
||||
import ml.docilealligator.infinityforreddit.Service.DownloadImageService;
|
||||
import ml.docilealligator.infinityforreddit.Service.DownloadMediaService;
|
||||
import ml.docilealligator.infinityforreddit.SetAsWallpaperCallback;
|
||||
import ml.docilealligator.infinityforreddit.Utils.SharedPreferencesUtils;
|
||||
import ml.docilealligator.infinityforreddit.WallpaperSetter;
|
||||
@ -87,7 +85,6 @@ public class ViewImageOrGifActivity extends AppCompatActivity implements SetAsWa
|
||||
@Inject
|
||||
@Named("default")
|
||||
SharedPreferences mSharedPreferences;
|
||||
private MediaDownloader mediaDownloader;
|
||||
private boolean isActionBarHidden = false;
|
||||
private boolean isDownloading = false;
|
||||
private RequestManager glide;
|
||||
@ -134,8 +131,6 @@ public class ViewImageOrGifActivity extends AppCompatActivity implements SetAsWa
|
||||
|
||||
Slidr.attach(this, new SlidrConfig.Builder().position(SlidrPosition.VERTICAL).distanceThreshold(0.125f).build());
|
||||
|
||||
mediaDownloader = new MediaDownloaderImpl();
|
||||
|
||||
glide = Glide.with(this);
|
||||
|
||||
Intent intent = getIntent();
|
||||
@ -339,10 +334,10 @@ public class ViewImageOrGifActivity extends AppCompatActivity implements SetAsWa
|
||||
private void download() {
|
||||
isDownloading = false;
|
||||
|
||||
Intent intent = new Intent(this, DownloadImageService.class);
|
||||
intent.putExtra(DownloadImageService.EXTRA_URL, mImageUrl);
|
||||
intent.putExtra(DownloadImageService.EXTRA_IS_GIF, isGif);
|
||||
intent.putExtra(DownloadImageService.EXTRA_FILE_NAME, mImageFileName);
|
||||
Intent intent = new Intent(this, DownloadMediaService.class);
|
||||
intent.putExtra(DownloadMediaService.EXTRA_URL, mImageUrl);
|
||||
intent.putExtra(DownloadMediaService.EXTRA_MEDIA_TYPE, isGif ? DownloadMediaService.EXTRA_MEDIA_TYPE_GIF : DownloadMediaService.EXTRA_MEDIA_TYPE_IMAGE);
|
||||
intent.putExtra(DownloadMediaService.EXTRA_FILE_NAME, mImageFileName);
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
startForegroundService(intent);
|
||||
} else {
|
||||
@ -437,7 +432,7 @@ public class ViewImageOrGifActivity extends AppCompatActivity implements SetAsWa
|
||||
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);
|
||||
download();
|
||||
}
|
||||
isDownloading = false;
|
||||
}
|
||||
|
@ -62,7 +62,7 @@ import ml.docilealligator.infinityforreddit.Infinity;
|
||||
import ml.docilealligator.infinityforreddit.MediaDownloader;
|
||||
import ml.docilealligator.infinityforreddit.MediaDownloaderImpl;
|
||||
import ml.docilealligator.infinityforreddit.R;
|
||||
import ml.docilealligator.infinityforreddit.Service.DownloadVideoService;
|
||||
import ml.docilealligator.infinityforreddit.Service.DownloadRedditVideoService;
|
||||
import ml.docilealligator.infinityforreddit.Utils.SharedPreferencesUtils;
|
||||
import retrofit2.Retrofit;
|
||||
|
||||
@ -440,11 +440,11 @@ public class ViewVideoActivity extends AppCompatActivity {
|
||||
if (videoType != VIDEO_TYPE_NORMAL) {
|
||||
mediaDownloader.download(videoDownloadUrl, videoFileName, this);
|
||||
} else {
|
||||
Intent intent = new Intent(this, DownloadVideoService.class);
|
||||
intent.putExtra(DownloadVideoService.EXTRA_VIDEO_URL, videoDownloadUrl);
|
||||
intent.putExtra(DownloadVideoService.EXTRA_POST_ID, id);
|
||||
intent.putExtra(DownloadVideoService.EXTRA_SUBREDDIT, subredditName);
|
||||
intent.putExtra(DownloadVideoService.EXTRA_IS_REDDIT_VIDEO, true);
|
||||
Intent intent = new Intent(this, DownloadRedditVideoService.class);
|
||||
intent.putExtra(DownloadRedditVideoService.EXTRA_VIDEO_URL, videoDownloadUrl);
|
||||
intent.putExtra(DownloadRedditVideoService.EXTRA_POST_ID, id);
|
||||
intent.putExtra(DownloadRedditVideoService.EXTRA_SUBREDDIT, subredditName);
|
||||
intent.putExtra(DownloadRedditVideoService.EXTRA_IS_REDDIT_VIDEO, true);
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
startForegroundService(intent);
|
||||
|
@ -54,8 +54,8 @@ import ml.docilealligator.infinityforreddit.Fragment.SubscribedSubredditsListing
|
||||
import ml.docilealligator.infinityforreddit.Fragment.UserListingFragment;
|
||||
import ml.docilealligator.infinityforreddit.Fragment.ViewImgurVideoFragment;
|
||||
import ml.docilealligator.infinityforreddit.Fragment.ViewRedditGalleryVideoFragment;
|
||||
import ml.docilealligator.infinityforreddit.Service.DownloadImageService;
|
||||
import ml.docilealligator.infinityforreddit.Service.DownloadVideoService;
|
||||
import ml.docilealligator.infinityforreddit.Service.DownloadMediaService;
|
||||
import ml.docilealligator.infinityforreddit.Service.DownloadRedditVideoService;
|
||||
import ml.docilealligator.infinityforreddit.Service.SubmitPostService;
|
||||
import ml.docilealligator.infinityforreddit.Settings.AdvancedPreferenceFragment;
|
||||
import ml.docilealligator.infinityforreddit.Settings.CustomizeMainPageTabsFragment;
|
||||
@ -173,7 +173,7 @@ public interface AppComponent {
|
||||
|
||||
void inject(ViewImgurVideoFragment viewImgurVideoFragment);
|
||||
|
||||
void inject(DownloadVideoService downloadVideoService);
|
||||
void inject(DownloadRedditVideoService downloadRedditVideoService);
|
||||
|
||||
void inject(MultiRedditListingFragment multiRedditListingFragment);
|
||||
|
||||
@ -191,7 +191,7 @@ public interface AppComponent {
|
||||
|
||||
void inject(CustomizeMainPageTabsFragment customizeMainPageTabsFragment);
|
||||
|
||||
void inject(DownloadImageService downloadImageService);
|
||||
void inject(DownloadMediaService downloadMediaService);
|
||||
|
||||
void inject(DownloadLocationPreferenceFragment downloadLocationPreferenceFragment);
|
||||
}
|
||||
|
@ -1,9 +1,9 @@
|
||||
package ml.docilealligator.infinityforreddit.Event;
|
||||
|
||||
public class DownloadImageOrGifEvent {
|
||||
public class DownloadMediaEvent {
|
||||
public boolean isSuccessful;
|
||||
|
||||
public DownloadImageOrGifEvent(boolean isSuccessful) {
|
||||
public DownloadMediaEvent(boolean isSuccessful) {
|
||||
this.isSuccessful = isSuccessful;
|
||||
}
|
||||
}
|
@ -45,10 +45,8 @@ import ml.docilealligator.infinityforreddit.AsyncTask.SaveBitmapImageToFileAsync
|
||||
import ml.docilealligator.infinityforreddit.BottomSheetFragment.SetAsWallpaperBottomSheetFragment;
|
||||
import ml.docilealligator.infinityforreddit.BuildConfig;
|
||||
import ml.docilealligator.infinityforreddit.ImgurMedia;
|
||||
import ml.docilealligator.infinityforreddit.MediaDownloader;
|
||||
import ml.docilealligator.infinityforreddit.MediaDownloaderImpl;
|
||||
import ml.docilealligator.infinityforreddit.R;
|
||||
import ml.docilealligator.infinityforreddit.Service.DownloadImageService;
|
||||
import ml.docilealligator.infinityforreddit.Service.DownloadMediaService;
|
||||
import ml.docilealligator.infinityforreddit.SetAsWallpaperCallback;
|
||||
|
||||
public class ViewImgurImageFragment extends Fragment {
|
||||
@ -65,7 +63,6 @@ public class ViewImgurImageFragment extends Fragment {
|
||||
|
||||
private ViewImgurMediaActivity activity;
|
||||
private RequestManager glide;
|
||||
private MediaDownloader mediaDownloader;
|
||||
private ImgurMedia imgurMedia;
|
||||
private boolean isDownloading = false;
|
||||
private boolean isActionBarHidden = false;
|
||||
@ -85,7 +82,6 @@ public class ViewImgurImageFragment extends Fragment {
|
||||
|
||||
imgurMedia = getArguments().getParcelable(EXTRA_IMGUR_IMAGES);
|
||||
glide = Glide.with(activity);
|
||||
mediaDownloader = new MediaDownloaderImpl();
|
||||
loadImage();
|
||||
|
||||
imageView.setOnClickListener(view -> {
|
||||
@ -236,10 +232,10 @@ public class ViewImgurImageFragment extends Fragment {
|
||||
private void download() {
|
||||
isDownloading = false;
|
||||
|
||||
Intent intent = new Intent(activity, DownloadImageService.class);
|
||||
intent.putExtra(DownloadImageService.EXTRA_URL, imgurMedia.getLink());
|
||||
intent.putExtra(DownloadImageService.EXTRA_IS_GIF, false);
|
||||
intent.putExtra(DownloadImageService.EXTRA_FILE_NAME, imgurMedia.getFileName());
|
||||
Intent intent = new Intent(activity, DownloadMediaService.class);
|
||||
intent.putExtra(DownloadMediaService.EXTRA_URL, imgurMedia.getLink());
|
||||
intent.putExtra(DownloadMediaService.EXTRA_MEDIA_TYPE, DownloadMediaService.EXTRA_MEDIA_TYPE_IMAGE);
|
||||
intent.putExtra(DownloadMediaService.EXTRA_FILE_NAME, imgurMedia.getFileName());
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
activity.startForegroundService(intent);
|
||||
} else {
|
||||
|
@ -3,6 +3,7 @@ package ml.docilealligator.infinityforreddit.Fragment;
|
||||
import android.Manifest;
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.res.Configuration;
|
||||
@ -46,9 +47,8 @@ import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
import ml.docilealligator.infinityforreddit.ImgurMedia;
|
||||
import ml.docilealligator.infinityforreddit.Infinity;
|
||||
import ml.docilealligator.infinityforreddit.MediaDownloader;
|
||||
import ml.docilealligator.infinityforreddit.MediaDownloaderImpl;
|
||||
import ml.docilealligator.infinityforreddit.R;
|
||||
import ml.docilealligator.infinityforreddit.Service.DownloadMediaService;
|
||||
import ml.docilealligator.infinityforreddit.Utils.SharedPreferencesUtils;
|
||||
|
||||
public class ViewImgurVideoFragment extends Fragment {
|
||||
@ -65,7 +65,6 @@ public class ViewImgurVideoFragment extends Fragment {
|
||||
private ImgurMedia imgurMedia;
|
||||
private SimpleExoPlayer player;
|
||||
private DataSource.Factory dataSourceFactory;
|
||||
private MediaDownloader mediaDownloader;
|
||||
private boolean wasPlaying = false;
|
||||
private boolean isMute = false;
|
||||
private boolean isDownloading = false;
|
||||
@ -128,8 +127,6 @@ public class ViewImgurVideoFragment extends Fragment {
|
||||
}
|
||||
});
|
||||
|
||||
mediaDownloader = new MediaDownloaderImpl();
|
||||
|
||||
TrackSelection.Factory videoTrackSelectionFactory = new AdaptiveTrackSelection.Factory();
|
||||
TrackSelector trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);
|
||||
player = ExoPlayerFactory.newSimpleInstance(activity, trackSelector);
|
||||
@ -188,7 +185,16 @@ public class ViewImgurVideoFragment extends Fragment {
|
||||
private void download() {
|
||||
isDownloading = false;
|
||||
|
||||
mediaDownloader.download(imgurMedia.getLink(), imgurMedia.getFileName(), getContext());
|
||||
Intent intent = new Intent(activity, DownloadMediaService.class);
|
||||
intent.putExtra(DownloadMediaService.EXTRA_URL, imgurMedia.getLink());
|
||||
intent.putExtra(DownloadMediaService.EXTRA_MEDIA_TYPE, DownloadMediaService.EXTRA_MEDIA_TYPE_VIDEO);
|
||||
intent.putExtra(DownloadMediaService.EXTRA_FILE_NAME, imgurMedia.getFileName());
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
activity.startForegroundService(intent);
|
||||
} else {
|
||||
activity.startService(intent);
|
||||
}
|
||||
Toast.makeText(activity, R.string.download_started, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
|
||||
private void preparePlayer(Bundle savedInstanceState) {
|
||||
|
@ -50,11 +50,9 @@ import ml.docilealligator.infinityforreddit.AsyncTask.SaveBitmapImageToFileAsync
|
||||
import ml.docilealligator.infinityforreddit.AsyncTask.SaveGIFToFileAsyncTask;
|
||||
import ml.docilealligator.infinityforreddit.BottomSheetFragment.SetAsWallpaperBottomSheetFragment;
|
||||
import ml.docilealligator.infinityforreddit.BuildConfig;
|
||||
import ml.docilealligator.infinityforreddit.MediaDownloader;
|
||||
import ml.docilealligator.infinityforreddit.MediaDownloaderImpl;
|
||||
import ml.docilealligator.infinityforreddit.Post.Post;
|
||||
import ml.docilealligator.infinityforreddit.R;
|
||||
import ml.docilealligator.infinityforreddit.Service.DownloadImageService;
|
||||
import ml.docilealligator.infinityforreddit.Service.DownloadMediaService;
|
||||
import ml.docilealligator.infinityforreddit.SetAsWallpaperCallback;
|
||||
|
||||
public class ViewRedditGalleryImageOrGifFragment extends Fragment {
|
||||
@ -71,7 +69,6 @@ public class ViewRedditGalleryImageOrGifFragment extends Fragment {
|
||||
|
||||
private ViewRedditGalleryActivity activity;
|
||||
private RequestManager glide;
|
||||
private MediaDownloader mediaDownloader;
|
||||
private Post.Gallery media;
|
||||
private boolean isDownloading = false;
|
||||
private boolean isActionBarHidden = false;
|
||||
@ -93,7 +90,6 @@ public class ViewRedditGalleryImageOrGifFragment extends Fragment {
|
||||
|
||||
media = getArguments().getParcelable(EXTRA_REDDIT_GALLERY_MEDIA);
|
||||
glide = Glide.with(activity);
|
||||
mediaDownloader = new MediaDownloaderImpl();
|
||||
|
||||
imageView.setImageViewFactory(new GlideImageViewFactory());
|
||||
|
||||
@ -269,10 +265,10 @@ public class ViewRedditGalleryImageOrGifFragment extends Fragment {
|
||||
private void download() {
|
||||
isDownloading = false;
|
||||
|
||||
Intent intent = new Intent(activity, DownloadImageService.class);
|
||||
intent.putExtra(DownloadImageService.EXTRA_URL, media.url);
|
||||
intent.putExtra(DownloadImageService.EXTRA_IS_GIF, media.mediaType == Post.Gallery.TYPE_GIF);
|
||||
intent.putExtra(DownloadImageService.EXTRA_FILE_NAME, media.fileName);
|
||||
Intent intent = new Intent(activity, DownloadMediaService.class);
|
||||
intent.putExtra(DownloadMediaService.EXTRA_URL, media.url);
|
||||
intent.putExtra(DownloadMediaService.EXTRA_MEDIA_TYPE, media.mediaType == Post.Gallery.TYPE_GIF ? DownloadMediaService.EXTRA_MEDIA_TYPE_GIF: DownloadMediaService.EXTRA_MEDIA_TYPE_IMAGE);
|
||||
intent.putExtra(DownloadMediaService.EXTRA_FILE_NAME, media.fileName);
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
activity.startForegroundService(intent);
|
||||
} else {
|
||||
|
@ -3,6 +3,7 @@ package ml.docilealligator.infinityforreddit.Fragment;
|
||||
import android.Manifest;
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.res.Configuration;
|
||||
@ -45,10 +46,9 @@ import javax.inject.Named;
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
import ml.docilealligator.infinityforreddit.Infinity;
|
||||
import ml.docilealligator.infinityforreddit.MediaDownloader;
|
||||
import ml.docilealligator.infinityforreddit.MediaDownloaderImpl;
|
||||
import ml.docilealligator.infinityforreddit.Post.Post;
|
||||
import ml.docilealligator.infinityforreddit.R;
|
||||
import ml.docilealligator.infinityforreddit.Service.DownloadMediaService;
|
||||
import ml.docilealligator.infinityforreddit.Utils.SharedPreferencesUtils;
|
||||
|
||||
public class ViewRedditGalleryVideoFragment extends Fragment {
|
||||
@ -65,7 +65,6 @@ public class ViewRedditGalleryVideoFragment extends Fragment {
|
||||
private Post.Gallery galleryVideo;
|
||||
private SimpleExoPlayer player;
|
||||
private DataSource.Factory dataSourceFactory;
|
||||
private MediaDownloader mediaDownloader;
|
||||
private boolean wasPlaying = false;
|
||||
private boolean isMute = false;
|
||||
private boolean isDownloading = false;
|
||||
@ -128,8 +127,6 @@ public class ViewRedditGalleryVideoFragment extends Fragment {
|
||||
}
|
||||
});
|
||||
|
||||
mediaDownloader = new MediaDownloaderImpl();
|
||||
|
||||
TrackSelection.Factory videoTrackSelectionFactory = new AdaptiveTrackSelection.Factory();
|
||||
TrackSelector trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);
|
||||
player = ExoPlayerFactory.newSimpleInstance(activity, trackSelector);
|
||||
@ -188,7 +185,16 @@ public class ViewRedditGalleryVideoFragment extends Fragment {
|
||||
private void download() {
|
||||
isDownloading = false;
|
||||
|
||||
mediaDownloader.download(galleryVideo.url, galleryVideo.fileName, getContext());
|
||||
Intent intent = new Intent(activity, DownloadMediaService.class);
|
||||
intent.putExtra(DownloadMediaService.EXTRA_URL, galleryVideo.url);
|
||||
intent.putExtra(DownloadMediaService.EXTRA_MEDIA_TYPE, DownloadMediaService.EXTRA_MEDIA_TYPE_VIDEO);
|
||||
intent.putExtra(DownloadMediaService.EXTRA_FILE_NAME, galleryVideo.fileName);
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
activity.startForegroundService(intent);
|
||||
} else {
|
||||
activity.startService(intent);
|
||||
}
|
||||
Toast.makeText(activity, R.string.download_started, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
|
||||
private void preparePlayer(Bundle savedInstanceState) {
|
||||
|
@ -36,7 +36,7 @@ import javax.inject.Named;
|
||||
|
||||
import ml.docilealligator.infinityforreddit.API.DownloadFile;
|
||||
import ml.docilealligator.infinityforreddit.CustomTheme.CustomThemeWrapper;
|
||||
import ml.docilealligator.infinityforreddit.Event.DownloadImageOrGifEvent;
|
||||
import ml.docilealligator.infinityforreddit.Event.DownloadMediaEvent;
|
||||
import ml.docilealligator.infinityforreddit.Infinity;
|
||||
import ml.docilealligator.infinityforreddit.NotificationUtils;
|
||||
import ml.docilealligator.infinityforreddit.R;
|
||||
@ -49,10 +49,13 @@ import retrofit2.Retrofit;
|
||||
|
||||
import static android.os.Environment.getExternalStoragePublicDirectory;
|
||||
|
||||
public class DownloadImageService extends Service {
|
||||
public class DownloadMediaService extends Service {
|
||||
public static final String EXTRA_URL = "EU";
|
||||
public static final String EXTRA_FILE_NAME = "EFN";
|
||||
public static final String EXTRA_IS_GIF = "EIG";
|
||||
public static final String EXTRA_MEDIA_TYPE = "EIG";
|
||||
public static final int EXTRA_MEDIA_TYPE_IMAGE = 0;
|
||||
public static final int EXTRA_MEDIA_TYPE_GIF = 1;
|
||||
public static final int EXTRA_MEDIA_TYPE_VIDEO = 2;
|
||||
|
||||
private static final int NO_ERROR = -1;
|
||||
private static final int ERROR_CANNOT_GET_DESTINATION_DIRECTORY = 0;
|
||||
@ -66,9 +69,9 @@ public class DownloadImageService extends Service {
|
||||
SharedPreferences mSharedPreferences;
|
||||
@Inject
|
||||
CustomThemeWrapper mCustomThemeWrapper;
|
||||
private boolean isGif;
|
||||
private int mediaType;
|
||||
|
||||
public DownloadImageService() {
|
||||
public DownloadMediaService() {
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -76,6 +79,50 @@ public class DownloadImageService extends Service {
|
||||
return null;
|
||||
}
|
||||
|
||||
private String getNotificationChannelId() {
|
||||
switch (mediaType) {
|
||||
case EXTRA_MEDIA_TYPE_GIF:
|
||||
return NotificationUtils.CHANNEL_ID_DOWNLOAD_GIF;
|
||||
case EXTRA_MEDIA_TYPE_VIDEO:
|
||||
return NotificationUtils.CHANNEL_ID_DOWNLOAD_VIDEO;
|
||||
default:
|
||||
return NotificationUtils.CHANNEL_ID_DOWNLOAD_IMAGE;
|
||||
}
|
||||
}
|
||||
|
||||
private String getNotificationChannel() {
|
||||
switch (mediaType) {
|
||||
case EXTRA_MEDIA_TYPE_GIF:
|
||||
return NotificationUtils.CHANNEL_DOWNLOAD_GIF;
|
||||
case EXTRA_MEDIA_TYPE_VIDEO:
|
||||
return NotificationUtils.CHANNEL_DOWNLOAD_VIDEO;
|
||||
default:
|
||||
return NotificationUtils.CHANNEL_DOWNLOAD_IMAGE;
|
||||
}
|
||||
}
|
||||
|
||||
private int getNotificationId() {
|
||||
switch (mediaType) {
|
||||
case EXTRA_MEDIA_TYPE_GIF:
|
||||
return NotificationUtils.DOWNLOAD_GIF_NOTIFICATION_ID;
|
||||
case EXTRA_MEDIA_TYPE_VIDEO:
|
||||
return NotificationUtils.DOWNLOAD_VIDEO_NOTIFICATION_ID;
|
||||
default:
|
||||
return NotificationUtils.DOWNLOAD_IMAGE_NOTIFICATION_ID;
|
||||
}
|
||||
}
|
||||
|
||||
private String getDownloadLocation() {
|
||||
switch (mediaType) {
|
||||
case EXTRA_MEDIA_TYPE_GIF:
|
||||
return mSharedPreferences.getString(SharedPreferencesUtils.GIF_DOWNLOAD_LOCATION, "");
|
||||
case EXTRA_MEDIA_TYPE_VIDEO:
|
||||
return mSharedPreferences.getString(SharedPreferencesUtils.VIDEO_DOWNLOAD_LOCATION, "");
|
||||
default:
|
||||
return mSharedPreferences.getString(SharedPreferencesUtils.IMAGE_DOWNLOAD_LOCATION, "");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int onStartCommand(Intent intent, int flags, int startId) {
|
||||
((Infinity) getApplication()).getAppComponent().inject(this);
|
||||
@ -83,13 +130,13 @@ public class DownloadImageService extends Service {
|
||||
String fileUrl = intent.getStringExtra(EXTRA_URL);
|
||||
String fileName;
|
||||
fileName = intent.getStringExtra(EXTRA_FILE_NAME);
|
||||
isGif = intent.getBooleanExtra(EXTRA_IS_GIF, false);
|
||||
mediaType = intent.getIntExtra(EXTRA_MEDIA_TYPE, EXTRA_MEDIA_TYPE_IMAGE);
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
NotificationChannel serviceChannel;
|
||||
serviceChannel = new NotificationChannel(
|
||||
isGif ? NotificationUtils.CHANNEL_ID_DOWNLOAD_GIF : NotificationUtils.CHANNEL_ID_DOWNLOAD_IMAGE,
|
||||
isGif ? NotificationUtils.CHANNEL_DOWNLOAD_GIF : NotificationUtils.CHANNEL_DOWNLOAD_IMAGE,
|
||||
getNotificationChannelId(),
|
||||
getNotificationChannel(),
|
||||
NotificationManager.IMPORTANCE_LOW
|
||||
);
|
||||
|
||||
@ -97,17 +144,31 @@ public class DownloadImageService extends Service {
|
||||
manager.createNotificationChannel(serviceChannel);
|
||||
}
|
||||
|
||||
switch (mediaType) {
|
||||
case EXTRA_MEDIA_TYPE_GIF:
|
||||
startForeground(
|
||||
isGif ? NotificationUtils.DOWNLOAD_GIF_NOTIFICATION_ID : NotificationUtils.DOWNLOAD_IMAGE_NOTIFICATION_ID,
|
||||
createNotification(isGif ? R.string.downloading_gif : R.string.downloading_image, fileName, null)
|
||||
NotificationUtils.DOWNLOAD_GIF_NOTIFICATION_ID,
|
||||
createNotification(R.string.downloading_gif, fileName, null)
|
||||
);
|
||||
break;
|
||||
case EXTRA_MEDIA_TYPE_VIDEO:
|
||||
startForeground(
|
||||
NotificationUtils.DOWNLOAD_VIDEO_NOTIFICATION_ID,
|
||||
createNotification(R.string.downloading_video, fileName, null)
|
||||
);
|
||||
break;
|
||||
default:
|
||||
startForeground(
|
||||
NotificationUtils.DOWNLOAD_IMAGE_NOTIFICATION_ID,
|
||||
createNotification(R.string.downloading_image, fileName, null)
|
||||
);
|
||||
}
|
||||
|
||||
retrofit.create(DownloadFile.class).downloadFile(fileUrl).enqueue(new Callback<ResponseBody>() {
|
||||
@Override
|
||||
public void onResponse(@NonNull Call<ResponseBody> call, @NonNull Response<ResponseBody> response) {
|
||||
if (response.isSuccessful() && response.body() != null) {
|
||||
String destinationFileDirectory = isGif ? mSharedPreferences.getString(SharedPreferencesUtils.GIF_DOWNLOAD_LOCATION, "") :
|
||||
mSharedPreferences.getString(SharedPreferencesUtils.IMAGE_DOWNLOAD_LOCATION, "");
|
||||
String destinationFileDirectory = getDownloadLocation();
|
||||
String destinationFileUriString;
|
||||
boolean isDefaultDestination;
|
||||
if (destinationFileDirectory.equals("")) {
|
||||
@ -131,7 +192,7 @@ public class DownloadImageService extends Service {
|
||||
isDefaultDestination = true;
|
||||
} else {
|
||||
isDefaultDestination = false;
|
||||
DocumentFile picFile = DocumentFile.fromTreeUri(DownloadImageService.this, Uri.parse(destinationFileDirectory)).createFile("image/*", fileName);
|
||||
DocumentFile picFile = DocumentFile.fromTreeUri(DownloadMediaService.this, Uri.parse(destinationFileDirectory)).createFile("image/*", fileName);
|
||||
if (picFile == null) {
|
||||
downloadFinished(null, fileName, ERROR_CANNOT_GET_DESTINATION_DIRECTORY);
|
||||
return;
|
||||
@ -139,7 +200,7 @@ public class DownloadImageService extends Service {
|
||||
destinationFileUriString = picFile.getUri().toString();
|
||||
}
|
||||
|
||||
new SaveImageOrGifAndCopyToExternalStorageAsyncTask(response.body(), isGif,
|
||||
new SaveImageOrGifAndCopyToExternalStorageAsyncTask(response.body(), mediaType,
|
||||
isDefaultDestination, fileName, destinationFileUriString, getContentResolver(),
|
||||
new SaveImageOrGifAndCopyToExternalStorageAsyncTask.SaveImageOrGifAndCopyToExternalStorageAsyncTaskListener() {
|
||||
@Override
|
||||
@ -165,7 +226,7 @@ public class DownloadImageService extends Service {
|
||||
|
||||
private Notification createNotification(int stringResId, String fileName, PendingIntent pendingIntent) {
|
||||
NotificationCompat.Builder builder;
|
||||
builder = new NotificationCompat.Builder(this, isGif ? NotificationUtils.CHANNEL_ID_DOWNLOAD_GIF : NotificationUtils.CHANNEL_ID_DOWNLOAD_IMAGE);
|
||||
builder = new NotificationCompat.Builder(this, getNotificationChannelId());
|
||||
builder.setContentTitle(fileName).setContentText(getString(stringResId));
|
||||
if (pendingIntent != null) {
|
||||
builder.setContentIntent(pendingIntent);
|
||||
@ -178,8 +239,7 @@ public class DownloadImageService extends Service {
|
||||
private void updateNotification(int stringResId, String fileName, PendingIntent pendingIntent) {
|
||||
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
if (notificationManager != null) {
|
||||
notificationManager.notify(isGif ? NotificationUtils.DOWNLOAD_GIF_NOTIFICATION_ID : NotificationUtils.DOWNLOAD_IMAGE_NOTIFICATION_ID,
|
||||
createNotification(stringResId, fileName, pendingIntent));
|
||||
notificationManager.notify(getNotificationId(), createNotification(stringResId, fileName, pendingIntent));
|
||||
}
|
||||
}
|
||||
|
||||
@ -190,13 +250,13 @@ public class DownloadImageService extends Service {
|
||||
updateNotification(R.string.downloading_image_or_gif_failed_cannot_get_destination_directory, fileName, null);
|
||||
break;
|
||||
case ERROR_FILE_CANNOT_DOWNLOAD:
|
||||
updateNotification(isGif ? R.string.downloading_gif_failed_cannot_download_gif : R.string.downloading_image_failed_cannot_download_image, fileName, null);
|
||||
updateNotification(R.string.downloading_media_failed_cannot_download_media, fileName, null);
|
||||
break;
|
||||
case ERROR_FILE_CANNOT_SAVE:
|
||||
updateNotification(isGif ? R.string.downloading_gif_failed_cannot_save_gif : R.string.downloading_image_failed_cannot_save_image, fileName, null);
|
||||
updateNotification(R.string.downloading_media_failed_cannot_save_to_destination_directory, fileName, null);
|
||||
break;
|
||||
}
|
||||
EventBus.getDefault().post(new DownloadImageOrGifEvent(false));
|
||||
EventBus.getDefault().post(new DownloadMediaEvent(false));
|
||||
} else {
|
||||
MediaScannerConnection.scanFile(
|
||||
this, new String[]{destinationFileUri.toString()}, null,
|
||||
@ -205,8 +265,8 @@ public class DownloadImageService extends Service {
|
||||
intent.setAction(android.content.Intent.ACTION_VIEW);
|
||||
intent.setDataAndType(destinationFileUri, "image/*");
|
||||
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
|
||||
updateNotification(isGif ? R.string.downloading_gif_finished : R.string.downloading_image_finished, fileName, pendingIntent);
|
||||
EventBus.getDefault().post(new DownloadImageOrGifEvent(true));
|
||||
updateNotification(R.string.downloading_media_finished, fileName, pendingIntent);
|
||||
EventBus.getDefault().post(new DownloadMediaEvent(true));
|
||||
}
|
||||
);
|
||||
}
|
||||
@ -216,7 +276,7 @@ public class DownloadImageService extends Service {
|
||||
private static class SaveImageOrGifAndCopyToExternalStorageAsyncTask extends AsyncTask<Void, Integer, Void> {
|
||||
|
||||
private ResponseBody response;
|
||||
private boolean isGif;
|
||||
private int mediaType;
|
||||
private boolean isDefaultDestination;
|
||||
private String destinationFileName;
|
||||
@NonNull
|
||||
@ -230,14 +290,14 @@ public class DownloadImageService extends Service {
|
||||
void updateProgressNotification(int stringResId);
|
||||
}
|
||||
|
||||
public SaveImageOrGifAndCopyToExternalStorageAsyncTask(ResponseBody response, boolean isGif,
|
||||
public SaveImageOrGifAndCopyToExternalStorageAsyncTask(ResponseBody response, int mediaType,
|
||||
boolean isDefaultDestination,
|
||||
String destinationFileName,
|
||||
@NonNull String destinationFileUriString,
|
||||
ContentResolver contentResolver,
|
||||
SaveImageOrGifAndCopyToExternalStorageAsyncTaskListener saveImageOrGifAndCopyToExternalStorageAsyncTaskListener) {
|
||||
this.response = response;
|
||||
this.isGif = isGif;
|
||||
this.mediaType = mediaType;
|
||||
this.isDefaultDestination = isDefaultDestination;
|
||||
this.destinationFileName = destinationFileName;
|
||||
this.destinationFileUriString = destinationFileUriString;
|
||||
@ -253,7 +313,17 @@ public class DownloadImageService extends Service {
|
||||
|
||||
@Override
|
||||
protected Void doInBackground(Void... voids) {
|
||||
publishProgress(isGif ? R.string.downloading_gif_save_gif : R.string.downloading_image_save_image);
|
||||
switch (mediaType) {
|
||||
case EXTRA_MEDIA_TYPE_IMAGE:
|
||||
publishProgress(R.string.downloading_image_save_image);
|
||||
break;
|
||||
case EXTRA_MEDIA_TYPE_GIF:
|
||||
publishProgress(R.string.downloading_gif_save_gif);
|
||||
break;
|
||||
case EXTRA_MEDIA_TYPE_VIDEO:
|
||||
publishProgress(R.string.downloading_video_save_video);
|
||||
}
|
||||
|
||||
try {
|
||||
writeResponseBodyToDisk(response);
|
||||
} catch (IOException e) {
|
@ -53,7 +53,7 @@ import retrofit2.Retrofit;
|
||||
|
||||
import static android.os.Environment.getExternalStoragePublicDirectory;
|
||||
|
||||
public class DownloadVideoService extends Service {
|
||||
public class DownloadRedditVideoService extends Service {
|
||||
|
||||
public static final String EXTRA_VIDEO_URL = "EVU";
|
||||
public static final String EXTRA_SUBREDDIT = "ES";
|
||||
@ -78,7 +78,7 @@ public class DownloadVideoService extends Service {
|
||||
CustomThemeWrapper mCustomThemeWrapper;
|
||||
String resultFile;
|
||||
|
||||
public DownloadVideoService() {
|
||||
public DownloadRedditVideoService() {
|
||||
}
|
||||
|
||||
@Override
|
@ -843,18 +843,16 @@
|
||||
<string name="downloading_reddit_video_failed_cannot_mux">Download failed: cannot mux video and audio</string>
|
||||
<string name="downloading_reddit_video_failed_cannot_save_mux_video">Download failed: cannot save the video to public directory</string>
|
||||
<string name="downloading_video">Downloading Video</string>
|
||||
<string name="downloading_video_save_video">Saving Video</string>
|
||||
|
||||
<string name="downloading_image">Downloading Image</string>
|
||||
<string name="downloading_gif">Downloading Gif</string>
|
||||
<string name="downloading_image_save_image">Saving Image</string>
|
||||
<string name="downloading_gif_save_gif">Saving Gif</string>
|
||||
<string name="downloading_image_finished">Downloaded</string>
|
||||
<string name="downloading_gif_finished">Downloaded</string>
|
||||
<string name="downloading_media_finished">Downloaded</string>
|
||||
<string name="downloading_image_or_gif_failed_cannot_get_destination_directory">Download failed: cannot access destination directory</string>
|
||||
<string name="downloading_image_failed_cannot_download_image">Download image failed</string>
|
||||
<string name="downloading_image_failed_cannot_save_image">Download failed: cannot save image to destination directory</string>
|
||||
<string name="downloading_gif_failed_cannot_download_gif">Download gif failed</string>
|
||||
<string name="downloading_gif_failed_cannot_save_gif">Download failed: cannot save gif to destination directory</string>
|
||||
<string name="downloading_media_failed_cannot_download_media">Download failed</string>
|
||||
<string name="downloading_media_failed_cannot_save_to_destination_directory">Download failed: cannot save the file to destination directory</string>
|
||||
|
||||
<string name="wallpaper_set">Wallpaper set</string>
|
||||
<string name="error_set_wallpaper">Cannot set wallpaper</string>
|
||||
|
Loading…
Reference in New Issue
Block a user