Skip to content

Commit cf1089a

Browse files
author
krishna
committed
support for downloading files with extensions
1 parent 8f8ae8f commit cf1089a

File tree

7 files changed

+56
-21
lines changed

7 files changed

+56
-21
lines changed

app/build.gradle

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,8 @@ dependencies {
2323
compile fileTree(include: ['*.jar'], dir: 'libs')
2424
compile 'com.github.bumptech.glide:glide:4.1.1'
2525
annotationProcessor 'com.github.bumptech.glide:compiler:4.1.1'
26-
27-
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
28-
exclude group: 'com.android.support', module: 'support-annotations'
29-
})
3026
compile 'com.android.support:appcompat-v7:26.1.0'
31-
compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha9'
3227
testCompile 'junit:junit:4.12'
33-
compile project(':fileloader')
28+
// compile 'com.github.kk121:File-Loader:1.1'
29+
implementation project(':fileloader')
3430
}

app/src/main/java/com/krishna/fileloadersample/MainActivity.java

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import android.graphics.Bitmap;
44
import android.graphics.BitmapFactory;
55
import android.os.Bundle;
6+
import android.os.Environment;
67
import android.support.v7.app.AppCompatActivity;
78
import android.util.Log;
89
import android.widget.ImageView;
@@ -49,45 +50,51 @@ public void onError(FileLoadRequest request, Throwable t) {
4950
}
5051
});
5152

53+
/*try {
54+
FileLoader.deleteWith(this).fromDirectory("test4", FileLoader.DIR_EXTERNAL_PUBLIC).deleteAllFiles();
55+
} catch (Exception e) {
56+
e.printStackTrace();
57+
}*/
5258

5359
//Synchronous json file loading
5460
try {
5561
FileResponse response = FileLoader.with(this)
5662
.load("http://echo.jsontest.com/key1/value1/key2/value2")
57-
.fromDirectory("test3", FileLoader.DIR_INTERNAL)
63+
.fromDirectory("test4", FileLoader.DIR_EXTERNAL_PUBLIC)
5864
.asObject(JsonTest.class);
5965
JsonTest test = (JsonTest) response.getBody();
6066
Log.d(TAG, "" + test);
6167
} catch (Exception e) {
6268
e.printStackTrace();
6369
}
6470

71+
6572
final String[] uris = {"https://images.pexels.com/photos/45170/kittens-cat-cat-puppy-rush-45170.jpeg",
6673
"https://upload.wikimedia.org/wikipedia/commons/3/3c/Enrique_Simonet_-_Marina_veneciana_6MB.jpg"};
6774
//delete files
68-
try {
69-
FileLoader.deleteWith(this).fromDirectory("test2", FileLoader.DIR_INTERNAL).deleteFiles(uris);
75+
/* try {
76+
FileLoader.deleteWith(this).fromDirectory("test4", FileLoader.DIR_EXTERNAL_PUBLIC).deleteFiles(uris);
7077
} catch (Exception e) {
7178
e.printStackTrace();
7279
}
7380
7481
//delete all files from the directory
7582
try {
76-
FileLoader.deleteWith(this).fromDirectory("test2", FileLoader.DIR_INTERNAL).deleteAllFiles();
83+
FileLoader.deleteWith(this).fromDirectory("test4", FileLoader.DIR_EXTERNAL_PUBLIC).deleteAllFiles();
7784
} catch (Exception e) {
7885
e.printStackTrace();
7986
}
8087
8188
//delete all files from directory except files passed in argument
8289
try {
83-
FileLoader.deleteWith(this).fromDirectory("test3", FileLoader.DIR_INTERNAL).deleteAllFilesExcept(uris);
90+
FileLoader.deleteWith(this).fromDirectory("test4", FileLoader.DIR_INTERNAL).deleteAllFilesExcept(uris);
8491
} catch (Exception e) {
8592
e.printStackTrace();
86-
}
93+
}*/
8794

8895
List<MultiFileLoadRequest> multiFileLoadRequests = new ArrayList<>();
89-
multiFileLoadRequests.add(new MultiFileLoadRequest(uris[0], "test2", FileLoader.DIR_EXTERNAL_PUBLIC, true));
90-
multiFileLoadRequests.add(new MultiFileLoadRequest(uris[1], "test4", FileLoader.DIR_EXTERNAL_PUBLIC, true));
96+
multiFileLoadRequests.add(new MultiFileLoadRequest(uris[0], Environment.DIRECTORY_PICTURES, FileLoader.DIR_EXTERNAL_PUBLIC, true));
97+
multiFileLoadRequests.add(new MultiFileLoadRequest(uris[1], Environment.DIRECTORY_PICTURES, FileLoader.DIR_EXTERNAL_PUBLIC, true));
9198

9299
final MultiFileDownloader multiFileDownloader = FileLoader.multiFileDownload(this);
93100
multiFileDownloader.progressListener(new MultiFileDownloadListener() {

build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ allprojects {
1616
repositories {
1717
jcenter()
1818
google()
19+
maven { url 'https://jitpack.io' }
1920
}
2021
}
2122

fileloader/src/main/java/com/krishna/fileloader/FileLoader.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,13 @@
3636
public class FileLoader {
3737
private static final String TAG = "FileLoader";
3838
// Directory type
39-
public static final int DIR_INTERNAL = 1;
40-
public static final int DIR_CACHE = 2;
41-
public static final int DIR_EXTERNAL_PRIVATE = 3;
42-
public static final int DIR_EXTERNAL_PUBLIC = 4;
39+
public static final int DIR_INTERNAL = 1; //Only your app can access. { android FilesDir() }
40+
public static final int DIR_CACHE = 2; // Only your app can access, can be deleted by system. { android CacheDir() }
41+
public static final int DIR_EXTERNAL_PRIVATE = 3; //Accessible by all apps but not by users. { android ExternalFilesDir() }
42+
public static final int DIR_EXTERNAL_PUBLIC = 4; //Accessible by all apps and users. { android ExternalStorageDirectory() }
4343

4444
//Defaults
45-
public static final int DEFAULT_DIR_TYPE = DIR_INTERNAL;
45+
public static final int DEFAULT_DIR_TYPE = DIR_CACHE;
4646
public static final String DEFAULT_DIR_NAME = "file_loader";
4747

4848
@IntDef({DIR_INTERNAL, DIR_CACHE, DIR_EXTERNAL_PRIVATE, DIR_EXTERNAL_PUBLIC})

fileloader/src/main/java/com/krishna/fileloader/request/MultiFileLoadRequest.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,13 @@ public class MultiFileLoadRequest {
1010
private int directoryType;
1111
private boolean forceLoadFromNetwork;
1212

13+
/**
14+
*
15+
* @param uri Url of the image to download (ex. https://images.pexels.com/photos/45170/kittens-cat-cat-puppy-rush-45170.jpeg)
16+
* @param directoryName Name of the directory where you want to download (like. Environment.DIRECTORY_PICTURES , Environment.DIRECTORY_DOCUMENTS, Environment.DIRECTORY_DOWNLOADS or custom directory "My Directory"
17+
* @param directoryType Type of directory {@link com.krishna.fileloader.FileLoader.DirectoryType}
18+
* @param forceLoadFromNetwork if true, it will ignore the local file if exists and re-download else returns the existing file
19+
*/
1320
public MultiFileLoadRequest(String uri, String directoryName, int directoryType, boolean forceLoadFromNetwork) {
1421
this.uri = uri;
1522
this.directoryName = directoryName;

fileloader/src/main/java/com/krishna/fileloader/utility/AndroidFileManager.java

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,11 @@ public static String getFileName(String uri) throws Exception {
3232
String fileName;
3333
try {
3434
//passed uri is valid url, create file name as hashcode of url
35-
new URL(uri);
36-
fileName = String.valueOf(uri.hashCode());
35+
URL url = new URL(uri);
36+
fileName = getFileNameFromUrl(url);
37+
if (fileName == null) {
38+
fileName = String.valueOf(uri.hashCode());
39+
}
3740
} catch (MalformedURLException e) {
3841
if (uri.contains("/"))
3942
throw new Exception("File name should not contain path separator \"/\"");
@@ -43,6 +46,21 @@ public static String getFileName(String uri) throws Exception {
4346
return fileName;
4447
}
4548

49+
private static String getFileNameFromUrl(URL url) {
50+
String fileName = null;
51+
String path = url.getPath();
52+
if (path != null) {
53+
String pathArr[] = path.split("/");
54+
if (pathArr.length > 0) {
55+
String lastPath = pathArr[pathArr.length - 1];
56+
if (Utils.isValidFileName(lastPath)) {
57+
fileName = lastPath;
58+
}
59+
}
60+
}
61+
return fileName;
62+
}
63+
4664
public static File getAppropriateDirectory(Context context, String directoryName, int directoryType) throws Exception {
4765
File file = null;
4866
switch (directoryType) {

fileloader/src/main/java/com/krishna/fileloader/utility/Utils.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import java.util.concurrent.LinkedBlockingQueue;
1111
import java.util.concurrent.ThreadPoolExecutor;
1212
import java.util.concurrent.TimeUnit;
13+
import java.util.regex.Pattern;
1314

1415
/**
1516
* Created by krishna on 15/10/17.
@@ -47,4 +48,9 @@ public static ThreadPoolExecutor getThreadPoolExecutor() {
4748
BlockingQueue<Runnable> workQueue = new LinkedBlockingQueue<Runnable>(mMaximumPoolSize);
4849
return new ThreadPoolExecutor(mCorePoolSize, mMaximumPoolSize, mKeepAliveTime, TimeUnit.SECONDS, workQueue);
4950
}
51+
52+
public static boolean isValidFileName(String fileName) {
53+
Pattern pattern = Pattern.compile(".*\\..*");
54+
return pattern.matcher(fileName).matches();
55+
}
5056
}

0 commit comments

Comments
 (0)