Skip to content

Commit 08ccd04

Browse files
author
Donald Shtjefni
committed
Merge pull request #164 from DNLDsht/master
v3.0.1
2 parents fdf7b17 + a5444e2 commit 08ccd04

36 files changed

+3506
-188
lines changed

.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
/crowdin-cli.jar
2+
/crowdin.yaml
13
.gradle
24
# User-specific configurations
35
/.directory

app/build.gradle

+2-2
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ android {
2222
applicationId "com.horaapps.leafpic"
2323
minSdkVersion 19
2424
targetSdkVersion 23
25-
versionCode 4
26-
versionName "v0.3"
25+
versionCode 5
26+
versionName "v0.3.1"
2727
}
2828

2929
lintOptions {

app/src/main/java/com/horaapps/leafpic/Adapters/PhotosAdapter.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public PhotosAdapter(ArrayList<Media> ph , Context context) {
4040
SP = PreferenceManager.getDefaultSharedPreferences(context);
4141
switch (SP.getInt("basic_theme", 1)){
4242
case 2: drawable = ((BitmapDrawable) ContextCompat.getDrawable(context, R.drawable.ic_empty));break;
43-
case 3: drawable = ((BitmapDrawable) ContextCompat.getDrawable(context, R.drawable.ic_empty_amoled));break;
43+
case 3: drawable = null ;break;
4444
case 1: default: drawable = ((BitmapDrawable) ContextCompat.getDrawable(context, R.drawable.ic_empty_white));break;
4545
}
4646
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
package com.horaapps.leafpic.Base;
2+
3+
import android.os.Build;
4+
import android.os.Environment;
5+
import android.util.Log;
6+
7+
import java.io.File;
8+
import java.util.ArrayList;
9+
import java.util.HashMap;
10+
import java.util.List;
11+
import java.util.Map;
12+
import java.util.Scanner;
13+
14+
/**
15+
* Created by dnld on 09/05/16.
16+
*/
17+
public class ExternalStorage {
18+
public static final String SD_CARD = "sdCard";
19+
public static final String EXTERNAL_SD_CARD = "externalSdCard";
20+
21+
/**
22+
* @return True if the external storage is available. False otherwise.
23+
*/
24+
public static boolean isAvailable() {
25+
String state = Environment.getExternalStorageState();
26+
if (Environment.MEDIA_MOUNTED.equals(state) || Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
27+
return true;
28+
}
29+
return false;
30+
}
31+
32+
public static String getSdCardPath() {
33+
return Environment.getExternalStorageDirectory().getPath() + "/";
34+
}
35+
36+
/**
37+
* @return True if the external storage is writable. False otherwise.
38+
*/
39+
public static boolean isWritable() {
40+
String state = Environment.getExternalStorageState();
41+
if (Environment.MEDIA_MOUNTED.equals(state)) {
42+
return true;
43+
}
44+
return false;
45+
46+
}
47+
48+
/**
49+
* @return A map of all storage locations available
50+
*/
51+
public static ArrayList<File> getAllStorageLocations() {
52+
//Map<String, File> map = new HashMap<String, File>(10);
53+
ArrayList<File> roots = new ArrayList<File>();
54+
55+
List<String> mMounts = new ArrayList<String>(10);
56+
List<String> mVold = new ArrayList<String>(10);
57+
mMounts.add("/mnt/sdcard");
58+
mVold.add("/mnt/sdcard");
59+
60+
try {
61+
File mountFile = new File("/proc/mounts");
62+
if(mountFile.exists()){
63+
Scanner scanner = new Scanner(mountFile);
64+
while (scanner.hasNext()) {
65+
String line = scanner.nextLine();
66+
if (line.startsWith("/dev/block/vold/")) {
67+
String[] lineElements = line.split(" ");
68+
String element = lineElements[1];
69+
70+
// don't add the default mount path
71+
// it's already in the list.
72+
if (!element.equals("/mnt/sdcard"))
73+
mMounts.add(element);
74+
}
75+
}
76+
}
77+
} catch (Exception e) {
78+
e.printStackTrace();
79+
}
80+
81+
try {
82+
File voldFile = new File("/system/etc/vold.fstab");
83+
if(voldFile.exists()){
84+
Scanner scanner = new Scanner(voldFile);
85+
while (scanner.hasNext()) {
86+
String line = scanner.nextLine();
87+
if (line.startsWith("dev_mount")) {
88+
String[] lineElements = line.split(" ");
89+
String element = lineElements[2];
90+
91+
if (element.contains(":"))
92+
element = element.substring(0, element.indexOf(":"));
93+
if (!element.equals("/mnt/sdcard"))
94+
mVold.add(element);
95+
}
96+
}
97+
}
98+
} catch (Exception e) {
99+
e.printStackTrace();
100+
}
101+
102+
for (int i = 0; i < mMounts.size(); i++) {
103+
String mount = mMounts.get(i);
104+
if (!mVold.contains(mount))
105+
mMounts.remove(i--);
106+
}
107+
mVold.clear();
108+
109+
List<String> mountHash = new ArrayList<String>(10);
110+
111+
for(String mount : mMounts){
112+
File root = new File(mount);
113+
if (root.exists() && root.isDirectory() && root.canWrite()) {
114+
File[] list = root.listFiles();
115+
String hash = "[";
116+
if(list!=null){
117+
for(File f : list){
118+
hash += f.getName().hashCode()+":"+f.length()+", ";
119+
}
120+
}
121+
hash += "]";
122+
if(!mountHash.contains(hash)){
123+
/*String key = SD_CARD + "_" + map.size();
124+
if (map.size() == 0) {
125+
key = SD_CARD;
126+
} else if (map.size() == 1) {
127+
key = EXTERNAL_SD_CARD;
128+
}*/
129+
mountHash.add(hash);
130+
roots.add(root);
131+
//map.put(key, root);
132+
}
133+
}
134+
}
135+
136+
mMounts.clear();
137+
138+
/*if(map.isEmpty()){
139+
map.put(SD_CARD, Environment.getExternalStorageDirectory());
140+
}*/
141+
return roots;
142+
}
143+
}

app/src/main/java/com/horaapps/leafpic/Base/HandlingAlbums.java

+31-29
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,6 @@ public class HandlingAlbums {
3737
ArrayList<File> excludedfolders;
3838
AlbumsComparators albumsComparators;
3939

40-
public HandlingAlbums() {
41-
excludedfolders = new ArrayList<File>();
42-
dispAlbums = new ArrayList<Album>();
43-
selectedAlbums = new ArrayList<Album>();
44-
}
45-
4640
public HandlingAlbums(Context context) {
4741
SP = context.getSharedPreferences("albums-sort", Context.MODE_PRIVATE);
4842
customAlbumsHandler = new CustomAlbumsHandler(context);
@@ -88,17 +82,19 @@ public ArrayList<Album> getValidFolders(boolean hidden) {
8882
private void fetchRecursivelyFolder(File dir, ArrayList<Album> folders) {
8983
if (!excludedfolders.contains(dir)) {
9084
File[] listFiles = dir.listFiles(new ImageFileFilter());
91-
if (listFiles.length > 0)
85+
if (listFiles != null && listFiles.length > 0)
9286
folders.add(new Album(dir.getAbsolutePath(), dir.getName(), listFiles.length));
9387

9488
File[] children = dir.listFiles(new FoldersFileFilter());
95-
for (File temp : children) {
96-
File nomedia = new File(temp, ".nomedia");
97-
if (!excludedfolders.contains(temp) && !temp.isHidden() && !nomedia.exists()) {
89+
if (children != null) {
90+
for (File temp : children) {
91+
File nomedia = new File(temp, ".nomedia");
92+
if (!excludedfolders.contains(temp) && !temp.isHidden() && !nomedia.exists()) {
9893
/*File[] files = temp.listFiles(new ImageFileFilter());
9994
if (files.length > 0)
10095
folders.add(new Album(temp.getAbsolutePath(), temp.getName(), files.length));*/
101-
fetchRecursivelyFolder(temp, folders);
96+
fetchRecursivelyFolder(temp, folders);
97+
}
10298
}
10399
}
104100
}
@@ -107,26 +103,30 @@ private void fetchRecursivelyFolder(File dir, ArrayList<Album> folders) {
107103
private void fetchRecursivelyHiddenFolder(File dir, ArrayList<Album> folders) {
108104
if (!excludedfolders.contains(dir)) {
109105
File[] asdf = dir.listFiles(new FoldersFileFilter());
110-
for (File temp : asdf) {
111-
File nomedia = new File(temp, ".nomedia");
112-
if (!excludedfolders.contains(temp) && nomedia.exists()) {
113-
File[] files = temp.listFiles(new ImageFileFilter());
114-
if (files.length > 0)
115-
folders.add(new Album(temp.getAbsolutePath(), temp.getName(), files.length));
106+
if (asdf !=null) {
107+
for (File temp : asdf) {
108+
File nomedia = new File(temp, ".nomedia");
109+
if (!excludedfolders.contains(temp) && nomedia.exists()) {
110+
File[] files = temp.listFiles(new ImageFileFilter());
111+
if (files != null && files.length > 0)
112+
folders.add(new Album(temp.getAbsolutePath(), temp.getName(), files.length));
113+
}
114+
fetchRecursivelyHiddenFolder(temp, folders);
116115
}
117-
fetchRecursivelyHiddenFolder(temp, folders);
118116
}
119117
}
120118
}
121119
private void fetchRecursivelyFolder(File dir) {
122120
if (!excludedfolders.contains(dir)) {
123121
checkAndAddAlbum(dir);
124122
File[] children = dir.listFiles(new FoldersFileFilter());
125-
for (File temp : children) {
126-
File nomedia = new File(temp, ".nomedia");
127-
if (!excludedfolders.contains(temp) && !temp.isHidden() && !nomedia.exists()) {
128-
//not excluded/hidden folder
129-
fetchRecursivelyFolder(temp);
123+
if (children != null) {
124+
for (File temp : children) {
125+
File nomedia = new File(temp, ".nomedia");
126+
if (!excludedfolders.contains(temp) && !temp.isHidden() && !nomedia.exists()) {
127+
//not excluded/hidden folder
128+
fetchRecursivelyFolder(temp);
129+
}
130130
}
131131
}
132132
}
@@ -135,19 +135,21 @@ private void fetchRecursivelyFolder(File dir) {
135135
private void fetchRecursivelyHiddenFolder(File dir) {
136136
if (!excludedfolders.contains(dir)) {
137137
File[] folders = dir.listFiles(new FoldersFileFilter());
138-
for (File temp : folders) {
139-
File nomedia = new File(temp, ".nomedia");
140-
if (!excludedfolders.contains(temp) && nomedia.exists()) {
141-
checkAndAddAlbum(temp);
138+
if (folders != null) {
139+
for (File temp : folders) {
140+
File nomedia = new File(temp, ".nomedia");
141+
if (!excludedfolders.contains(temp) && nomedia.exists()) {
142+
checkAndAddAlbum(temp);
143+
}
144+
fetchRecursivelyHiddenFolder(temp);
142145
}
143-
fetchRecursivelyHiddenFolder(temp);
144146
}
145147
}
146148
}
147149

148150
public void checkAndAddAlbum(File temp) {
149151
File[] files = temp.listFiles(new ImageFileFilter());
150-
if (files.length > 0) {
152+
if (files != null && files.length > 0) {
151153
//valid folder
152154
Album asd = new Album(temp.getAbsolutePath(), temp.getName(), files.length);
153155
asd.setCoverPath(customAlbumsHandler.getPhotPrevieAlbum(asd.getPath()));

app/src/main/java/com/horaapps/leafpic/Base/Media.java

+54-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.horaapps.leafpic.Base;
22

3+
import android.graphics.Bitmap;
4+
import android.graphics.BitmapFactory;
35
import android.media.ExifInterface;
46
import android.net.Uri;
57
import android.os.Parcel;
@@ -84,8 +86,18 @@ public long getSize() {
8486
public int getOrientation() {
8587
ExifInterface exif;
8688
try { exif = new ExifInterface(getPath()); }
87-
catch (IOException e) { return 0; }
88-
return Integer.parseInt(exif.getAttribute(ExifInterface.TAG_ORIENTATION));
89+
catch (IOException ex) { return 0; }
90+
if (exif != null) {
91+
int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, -1);
92+
if (orientation != -1) {
93+
switch (orientation) {
94+
case ExifInterface.ORIENTATION_ROTATE_90: return 90;
95+
case ExifInterface.ORIENTATION_ROTATE_180: return 180;
96+
case ExifInterface.ORIENTATION_ROTATE_270: return 270;
97+
}
98+
}
99+
}
100+
return 0;
89101
}
90102

91103
public int getWidth() { //TODO improve
@@ -122,6 +134,46 @@ public boolean isSelected() {
122134
return selected;
123135
}
124136

137+
public Bitmap getBitmap(){
138+
/*
139+
Bitmap bm = null;
140+
InputStream is = null;
141+
BufferedInputStream bis = null;
142+
try {
143+
URLConnection conn = new URL(path).openConnection();
144+
conn.connect();
145+
is = conn.getInputStream();
146+
bis = new BufferedInputStream(is, 8192);
147+
bm = BitmapFactory.decodeStream(bis);
148+
}
149+
catch (Exception e) {
150+
e.printStackTrace();
151+
} finally {
152+
if (bis != null) {
153+
try {
154+
bis.close();
155+
} catch (IOException e) {
156+
e.printStackTrace();
157+
}
158+
}
159+
if (is != null) {
160+
try {
161+
is.close();
162+
} catch (IOException e) {
163+
e.printStackTrace();
164+
}
165+
}
166+
}
167+
return bm;
168+
*/
169+
//File sd = Environment.getExternalStorageDirectory();
170+
//File image = new File(sd+path, getName);
171+
BitmapFactory.Options bmOptions = new BitmapFactory.Options();
172+
Bitmap bitmap = BitmapFactory.decodeFile(path,bmOptions);
173+
bitmap = Bitmap.createScaledBitmap(bitmap,bitmap.getWidth(),bitmap.getHeight(),true);
174+
return bitmap;
175+
}
176+
125177
protected Media(Parcel in) {
126178
path = in.readString();
127179
dateModified = in.readLong();

app/src/main/java/com/horaapps/leafpic/Fragments/ImageFragment.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import android.os.Bundle;
55
import android.preference.PreferenceManager;
66
import android.support.v4.app.Fragment;
7+
import android.util.Log;
78
import android.view.LayoutInflater;
89
import android.view.View;
910
import android.view.ViewGroup;
@@ -89,7 +90,7 @@ public void onOutsidePhotoTap() {
8990
}
9091
});
9192
photoView.setZoomTransitionDuration(375);
92-
photoView.setScaleLevels(1.0F, 3.5F, 6.0F);
93+
photoView.setScaleLevels(1.0F, 3.5F, 6.0F);//TODO improve
9394
return photoView;
9495
}
9596

0 commit comments

Comments
 (0)