mirror of
https://github.com/KokaKiwi/BarInsta
synced 2024-11-22 22:57:29 +00:00
Fix leak and add null checks
This commit is contained in:
parent
5a8c3bb201
commit
94b6e778bd
@ -282,6 +282,7 @@ public class MainActivity extends BaseLanguageActivity implements FragmentManage
|
|||||||
try {
|
try {
|
||||||
RetrofitFactory.getInstance().destroy();
|
RetrofitFactory.getInstance().destroy();
|
||||||
} catch (Exception ignored) {}
|
} catch (Exception ignored) {}
|
||||||
|
DownloadUtils.destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -56,11 +56,7 @@ public final class DownloadUtils {
|
|||||||
private static final String DIR_TEMP = "Temp";
|
private static final String DIR_TEMP = "Temp";
|
||||||
private static final String DIR_BACKUPS = "Backups";
|
private static final String DIR_BACKUPS = "Backups";
|
||||||
|
|
||||||
// public static final String WRITE_PERMISSION = Manifest.permission.WRITE_EXTERNAL_STORAGE;
|
|
||||||
// public static final String[] PERMS = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE};
|
|
||||||
|
|
||||||
private static DocumentFile root;
|
private static DocumentFile root;
|
||||||
// private static DocumentFile DOWNLOADS_DIR_FILE;
|
|
||||||
|
|
||||||
public static void init(@NonNull final Context context) throws ReselectDocumentTreeException {
|
public static void init(@NonNull final Context context) throws ReselectDocumentTreeException {
|
||||||
// if (DOWNLOADS_DIR_FILE == null) {
|
// if (DOWNLOADS_DIR_FILE == null) {
|
||||||
@ -102,6 +98,10 @@ public final class DownloadUtils {
|
|||||||
// Log.d(TAG, "init: " + documentFile);
|
// Log.d(TAG, "init: " + documentFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void destroy() {
|
||||||
|
root = null;
|
||||||
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
public static DocumentFile getDownloadDir(final String... dirs) {
|
public static DocumentFile getDownloadDir(final String... dirs) {
|
||||||
if (root == null) {
|
if (root == null) {
|
||||||
@ -110,6 +110,7 @@ public final class DownloadUtils {
|
|||||||
DocumentFile subDir = root;
|
DocumentFile subDir = root;
|
||||||
if (dirs != null) {
|
if (dirs != null) {
|
||||||
for (final String dir : dirs) {
|
for (final String dir : dirs) {
|
||||||
|
if (subDir == null || TextUtils.isEmpty(dir)) continue;
|
||||||
final DocumentFile subDirFile = subDir.findFile(dir);
|
final DocumentFile subDirFile = subDir.findFile(dir);
|
||||||
final boolean exists = subDirFile != null && subDirFile.exists();
|
final boolean exists = subDirFile != null && subDirFile.exists();
|
||||||
subDir = exists ? subDirFile : subDir.createDirectory(dir);
|
subDir = exists ? subDirFile : subDir.createDirectory(dir);
|
||||||
@ -230,14 +231,12 @@ public final class DownloadUtils {
|
|||||||
// Toast.makeText(context, R.string.error_creating_folders, Toast.LENGTH_SHORT).show();
|
// Toast.makeText(context, R.string.error_creating_folders, Toast.LENGTH_SHORT).show();
|
||||||
// }
|
// }
|
||||||
|
|
||||||
@NonNull
|
|
||||||
private static Pair<List<String>, String> getDownloadSavePaths(final List<String> paths,
|
private static Pair<List<String>, String> getDownloadSavePaths(final List<String> paths,
|
||||||
final String postId,
|
final String postId,
|
||||||
final String displayUrl) {
|
final String displayUrl) {
|
||||||
return getDownloadSavePaths(paths, postId, "", displayUrl, "");
|
return getDownloadSavePaths(paths, postId, "", displayUrl, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
|
||||||
private static Pair<List<String>, String> getDownloadSavePaths(final List<String> paths,
|
private static Pair<List<String>, String> getDownloadSavePaths(final List<String> paths,
|
||||||
final String postId,
|
final String postId,
|
||||||
final String displayUrl,
|
final String displayUrl,
|
||||||
@ -254,7 +253,6 @@ public final class DownloadUtils {
|
|||||||
return getDownloadSavePaths(paths, postId, sliderPostfix, url, username);
|
return getDownloadSavePaths(paths, postId, sliderPostfix, url, username);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
|
||||||
private static Pair<List<String>, String> getDownloadSavePaths(final List<String> paths,
|
private static Pair<List<String>, String> getDownloadSavePaths(final List<String> paths,
|
||||||
final String postId,
|
final String postId,
|
||||||
final String sliderPostfix,
|
final String sliderPostfix,
|
||||||
@ -287,7 +285,10 @@ public final class DownloadUtils {
|
|||||||
String mimeType = "application/octet-stream";
|
String mimeType = "application/octet-stream";
|
||||||
if (!TextUtils.isEmpty(extension)) {
|
if (!TextUtils.isEmpty(extension)) {
|
||||||
name += "." + extension;
|
name += "." + extension;
|
||||||
mimeType = Utils.mimeTypeMap.getMimeTypeFromExtension(extension);
|
final String mimeType1 = Utils.mimeTypeMap.getMimeTypeFromExtension(extension);
|
||||||
|
if (mimeType1 != null) {
|
||||||
|
mimeType = mimeType1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
DocumentFile file = dir.findFile(name);
|
DocumentFile file = dir.findFile(name);
|
||||||
if (file == null) {
|
if (file == null) {
|
||||||
@ -349,9 +350,14 @@ public final class DownloadUtils {
|
|||||||
case MEDIA_TYPE_VIDEO: {
|
case MEDIA_TYPE_VIDEO: {
|
||||||
final String url = ResponseBodyUtils.getImageUrl(media);
|
final String url = ResponseBodyUtils.getImageUrl(media);
|
||||||
final Pair<List<String>, String> file = getDownloadSavePaths(new ArrayList<>(userFolderPaths), media.getCode(), url, "");
|
final Pair<List<String>, String> file = getDownloadSavePaths(new ArrayList<>(userFolderPaths), media.getCode(), url, "");
|
||||||
final Pair<List<String>, String> usernameFile = getDownloadSavePaths(new ArrayList<>(userFolderPaths), media.getCode(), url,
|
final boolean fileExists = file.first != null && checkPathExists(file.first);
|
||||||
username);
|
boolean usernameFileExists = false;
|
||||||
checkList.add(checkPathExists(file.first) || checkPathExists(usernameFile.first));
|
if (!fileExists) {
|
||||||
|
final Pair<List<String>, String> usernameFile = getDownloadSavePaths(
|
||||||
|
new ArrayList<>(userFolderPaths), media.getCode(), url, username);
|
||||||
|
usernameFileExists = usernameFile.first != null && checkPathExists(usernameFile.first);
|
||||||
|
}
|
||||||
|
checkList.add(fileExists || usernameFileExists);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case MEDIA_TYPE_SLIDER:
|
case MEDIA_TYPE_SLIDER:
|
||||||
@ -360,11 +366,16 @@ public final class DownloadUtils {
|
|||||||
final Media child = sliderItems.get(i);
|
final Media child = sliderItems.get(i);
|
||||||
if (child == null) continue;
|
if (child == null) continue;
|
||||||
final String url = ResponseBodyUtils.getImageUrl(child);
|
final String url = ResponseBodyUtils.getImageUrl(child);
|
||||||
final Pair<List<String>, String> file = getDownloadChildSavePaths(new ArrayList<>(userFolderPaths), media.getCode(), i + 1, url,
|
final Pair<List<String>, String> file = getDownloadChildSavePaths(
|
||||||
"");
|
new ArrayList<>(userFolderPaths), media.getCode(), i + 1, url, "");
|
||||||
final Pair<List<String>, String> usernameFile = getDownloadChildSavePaths(new ArrayList<>(userFolderPaths), media.getCode(),
|
final boolean fileExists = file.first != null && checkPathExists(file.first);
|
||||||
i + 1, url, username);
|
boolean usernameFileExists = false;
|
||||||
checkList.add(checkPathExists(file.first) || checkPathExists(usernameFile.first));
|
if (!fileExists) {
|
||||||
|
final Pair<List<String>, String> usernameFile = getDownloadChildSavePaths(
|
||||||
|
new ArrayList<>(userFolderPaths), media.getCode(), i + 1, url, username);
|
||||||
|
usernameFileExists = usernameFile.first != null && checkPathExists(usernameFile.first);
|
||||||
|
}
|
||||||
|
checkList.add(fileExists || usernameFileExists);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -419,6 +430,7 @@ public final class DownloadUtils {
|
|||||||
public static void download(@NonNull final Context context,
|
public static void download(@NonNull final Context context,
|
||||||
@NonNull final StoryModel storyModel) {
|
@NonNull final StoryModel storyModel) {
|
||||||
final DocumentFile downloadDir = getDownloadDir(context, storyModel.getUsername());
|
final DocumentFile downloadDir = getDownloadDir(context, storyModel.getUsername());
|
||||||
|
if (downloadDir == null) return;
|
||||||
final String url = storyModel.getItemType() == MediaItemType.MEDIA_TYPE_VIDEO
|
final String url = storyModel.getItemType() == MediaItemType.MEDIA_TYPE_VIDEO
|
||||||
? storyModel.getVideoUrl()
|
? storyModel.getVideoUrl()
|
||||||
: storyModel.getStoryUrl();
|
: storyModel.getStoryUrl();
|
||||||
@ -430,9 +442,9 @@ public final class DownloadUtils {
|
|||||||
final String fileName = usernamePrepend + baseFileName;
|
final String fileName = usernamePrepend + baseFileName;
|
||||||
DocumentFile saveFile = downloadDir.findFile(fileName);
|
DocumentFile saveFile = downloadDir.findFile(fileName);
|
||||||
if (saveFile == null) {
|
if (saveFile == null) {
|
||||||
saveFile = downloadDir.createFile(
|
final String mimeType = Utils.mimeTypeMap.getMimeTypeFromExtension(extension.startsWith(".") ? extension.substring(1) : extension);
|
||||||
Utils.mimeTypeMap.getMimeTypeFromExtension(extension.startsWith(".") ? extension.substring(1) : extension),
|
if (mimeType == null) return;
|
||||||
fileName);
|
saveFile = downloadDir.createFile(mimeType, fileName);
|
||||||
}
|
}
|
||||||
// final File saveFile = new File(downloadDir, fileName);
|
// final File saveFile = new File(downloadDir, fileName);
|
||||||
download(context, url, saveFile);
|
download(context, url, saveFile);
|
||||||
@ -504,9 +516,8 @@ public final class DownloadUtils {
|
|||||||
final String usernamePrepend = Utils.settingsHelper.getBoolean(Constants.DOWNLOAD_PREPEND_USER_NAME) && mediaUser != null
|
final String usernamePrepend = Utils.settingsHelper.getBoolean(Constants.DOWNLOAD_PREPEND_USER_NAME) && mediaUser != null
|
||||||
? mediaUser.getUsername()
|
? mediaUser.getUsername()
|
||||||
: "";
|
: "";
|
||||||
final Pair<List<String>, String> pair = getDownloadChildSavePaths(new ArrayList<>(userFolderPaths), media.getCode(), i + 1,
|
final Pair<List<String>, String> pair = getDownloadChildSavePaths(
|
||||||
url,
|
new ArrayList<>(userFolderPaths), media.getCode(), i + 1, url, usernamePrepend);
|
||||||
usernamePrepend);
|
|
||||||
final DocumentFile file = createFile(pair);
|
final DocumentFile file = createFile(pair);
|
||||||
if (file == null) continue;
|
if (file == null) continue;
|
||||||
map.put(url, file);
|
map.put(url, file);
|
||||||
@ -611,7 +622,6 @@ public final class DownloadUtils {
|
|||||||
.enqueue(downloadWorkRequest);
|
.enqueue(downloadWorkRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static class ReselectDocumentTreeException extends Exception {
|
public static class ReselectDocumentTreeException extends Exception {
|
||||||
private final Uri initialUri;
|
private final Uri initialUri;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user