Skip to content

Commit fbb01e2

Browse files
author
GauthamAsir
committed
Show Edited Files
Signed-off-by: GauthamAsir <gauthamasir@gmail.com>
1 parent eaddbf4 commit fbb01e2

File tree

9 files changed

+447
-11
lines changed

9 files changed

+447
-11
lines changed

app/build.gradle

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ dependencies {
3030

3131
implementation 'androidx.appcompat:appcompat:1.1.0'
3232
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
33-
testImplementation 'junit:junit:4.12'
33+
testImplementation 'junit:junit:4.13'
3434
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
3535
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
3636

@@ -43,6 +43,10 @@ dependencies {
4343
//Picasso
4444
implementation 'com.squareup.picasso:picasso:2.71828'
4545

46+
//Image Cropper
4647
api 'com.theartofdev.edmodo:android-image-cropper:2.8.0'
4748

49+
//Apache Commons-Io to calculate file size
50+
implementation 'commons-io:commons-io:2.6'
51+
4852
}

app/src/main/AndroidManifest.xml

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3+
xmlns:tools="http://schemas.android.com/tools"
34
package="a.gautham.neweditor">
45

56
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
@@ -12,7 +13,9 @@
1213
android:requestLegacyExternalStorage="true"
1314
android:roundIcon="@mipmap/ic_launcher_round"
1415
android:supportsRtl="true"
15-
android:theme="@style/AppTheme">
16+
android:theme="@style/AppTheme"
17+
tools:targetApi="q">
18+
<activity android:name=".EditedFiles" />
1619

1720
<provider
1821
android:name="androidx.core.content.FileProvider"
@@ -21,22 +24,22 @@
2124
android:grantUriPermissions="true">
2225
<meta-data
2326
android:name="android.support.FILE_PROVIDER_PATHS"
24-
android:resource="@xml/file_paths"/>
27+
android:resource="@xml/file_paths" />
2528
</provider>
2629

27-
<activity android:name=".MainActivity" android:label="@string/app_name">
30+
<activity
31+
android:name=".MainActivity"
32+
android:label="@string/app_name">
2833
<intent-filter>
2934
<action android:name="android.intent.action.MAIN" />
3035

3136
<category android:name="android.intent.category.LAUNCHER" />
3237
</intent-filter>
3338
</activity>
34-
3539
<activity
3640
android:name=".EditorActivity"
3741
android:label="Editor"
38-
android:windowSoftInputMode="adjustResize"/>
39-
42+
android:windowSoftInputMode="adjustResize" />
4043
<activity
4144
android:name="com.theartofdev.edmodo.cropper.CropImageActivity"
4245
android:theme="@style/Base.Theme.AppCompat" />
Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
package a.gautham.neweditor;
2+
3+
import android.os.Bundle;
4+
import android.os.Environment;
5+
import android.view.View;
6+
import android.widget.ListView;
7+
import android.widget.ProgressBar;
8+
import android.widget.TextView;
9+
10+
import androidx.appcompat.app.AppCompatActivity;
11+
12+
import org.apache.commons.io.FileUtils;
13+
14+
import java.io.File;
15+
import java.util.ArrayList;
16+
import java.util.Arrays;
17+
import java.util.Comparator;
18+
import java.util.List;
19+
20+
import a.gautham.neweditor.helper.FileAdapter;
21+
import a.gautham.neweditor.helper.FileModel;
22+
23+
public class EditedFiles extends AppCompatActivity {
24+
25+
private ListView listView;
26+
private ProgressBar progressBar;
27+
private TextView no_files_tv;
28+
private List<FileModel> list = new ArrayList<>();
29+
private File file;
30+
31+
@Override
32+
protected void onCreate(Bundle savedInstanceState) {
33+
super.onCreate(savedInstanceState);
34+
setContentView(R.layout.activity_edited_files);
35+
36+
listView = findViewById(R.id.listView);
37+
progressBar = findViewById(R.id.progressBar);
38+
no_files_tv = findViewById(R.id.no_files_tv);
39+
40+
}
41+
42+
@Override
43+
protected void onResume() {
44+
super.onResume();
45+
46+
String path = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator +
47+
"Pictures" + File.separator + "GMemes Creator";
48+
49+
file = new File(path);
50+
if (file.exists())
51+
loadFiles();
52+
else
53+
noFiles();
54+
55+
}
56+
57+
private void loadFiles() {
58+
59+
progressBar.setVisibility(View.VISIBLE);
60+
no_files_tv.setVisibility(View.GONE);
61+
listView.setVisibility(View.VISIBLE);
62+
63+
new Thread(new Runnable() {
64+
@Override
65+
public void run() {
66+
67+
File[] values = file.listFiles();
68+
list.clear();
69+
70+
if (values != null && values.length > 0) {
71+
72+
Arrays.sort(values, new Comparator<File>() {
73+
@Override
74+
public int compare(File o1, File o2) {
75+
return Long.compare((o2).lastModified(), (o1).lastModified());
76+
}
77+
});
78+
for (File file1 : values) {
79+
if (!file1.isDirectory()) {
80+
FileModel fileModel = new FileModel(
81+
file1.getName(),
82+
FileUtils.byteCountToDisplaySize(file1.length()),
83+
file1);
84+
list.add(fileModel);
85+
}
86+
}
87+
88+
runOnUiThread(new Runnable() {
89+
@Override
90+
public void run() {
91+
if (list.size() > 0) {
92+
FileAdapter fileAdapter = new FileAdapter(EditedFiles.this, list);
93+
listView.setAdapter(fileAdapter);
94+
progressBar.setVisibility(View.GONE);
95+
} else {
96+
noFiles();
97+
}
98+
99+
}
100+
});
101+
102+
} else {
103+
runOnUiThread(new Runnable() {
104+
@Override
105+
public void run() {
106+
noFiles();
107+
}
108+
});
109+
}
110+
111+
}
112+
}).start();
113+
114+
}
115+
116+
private void noFiles() {
117+
progressBar.setVisibility(View.GONE);
118+
no_files_tv.setVisibility(View.VISIBLE);
119+
listView.setVisibility(View.GONE);
120+
}
121+
122+
}
Lines changed: 50 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,27 @@
11
package a.gautham.neweditor;
22

3-
import androidx.appcompat.app.AppCompatActivity;
4-
3+
import android.Manifest;
4+
import android.app.ActivityManager;
55
import android.content.Intent;
6+
import android.content.pm.PackageManager;
7+
import android.os.Build;
68
import android.os.Bundle;
79
import android.view.View;
8-
import android.widget.Toast;
10+
11+
import androidx.annotation.NonNull;
12+
import androidx.appcompat.app.AppCompatActivity;
13+
import androidx.core.app.ActivityCompat;
14+
15+
import java.util.Objects;
916

1017
public class MainActivity extends AppCompatActivity {
1118

19+
private static final int REQUEST_PERMISSIONS = 1234;
20+
private static final String[] PERMISSIONS = {
21+
Manifest.permission.READ_EXTERNAL_STORAGE,
22+
Manifest.permission.WRITE_EXTERNAL_STORAGE
23+
};
24+
1225
@Override
1326
protected void onCreate(Bundle savedInstanceState) {
1427
super.onCreate(savedInstanceState);
@@ -20,6 +33,39 @@ public void edit(View view) {
2033
}
2134

2235
public void edited_items(View view) {
23-
Toast.makeText(this, "W.I.P", Toast.LENGTH_SHORT).show();
36+
37+
if (!arePermissionDenied()) {
38+
startActivity(new Intent(getApplicationContext(), EditedFiles.class));
39+
return;
40+
}
41+
42+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && arePermissionDenied()) {
43+
requestPermissions(PERMISSIONS, REQUEST_PERMISSIONS);
44+
}
2445
}
46+
47+
@Override
48+
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
49+
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
50+
if (requestCode == REQUEST_PERMISSIONS && grantResults.length > 0) {
51+
if (arePermissionDenied()) {
52+
// Clear Data of Application, So that it can request for permissions again
53+
((ActivityManager) Objects.requireNonNull(this.getSystemService(ACTIVITY_SERVICE))).clearApplicationUserData();
54+
recreate();
55+
} else {
56+
startActivity(new Intent(getApplicationContext(), EditedFiles.class));
57+
}
58+
}
59+
}
60+
61+
private boolean arePermissionDenied() {
62+
63+
for (String permissions : PERMISSIONS) {
64+
if (ActivityCompat.checkSelfPermission(getApplicationContext(), permissions) != PackageManager.PERMISSION_GRANTED) {
65+
return true;
66+
}
67+
}
68+
return false;
69+
}
70+
2571
}
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
package a.gautham.neweditor.helper;
2+
3+
import android.content.Context;
4+
import android.content.Intent;
5+
import android.content.pm.PackageManager;
6+
import android.content.pm.ResolveInfo;
7+
import android.net.Uri;
8+
import android.view.LayoutInflater;
9+
import android.view.View;
10+
import android.view.ViewGroup;
11+
import android.widget.ArrayAdapter;
12+
import android.widget.ImageView;
13+
import android.widget.TextView;
14+
15+
import androidx.annotation.NonNull;
16+
import androidx.annotation.Nullable;
17+
import androidx.core.content.FileProvider;
18+
19+
import com.squareup.picasso.Picasso;
20+
21+
import java.util.List;
22+
23+
import a.gautham.neweditor.R;
24+
25+
public class FileAdapter extends ArrayAdapter<FileModel> {
26+
27+
public FileAdapter(@NonNull Context context, List<FileModel> arrayList) {
28+
super(context, 0, arrayList);
29+
}
30+
31+
@NonNull
32+
@Override
33+
public View getView(final int position, @Nullable View convertView, @NonNull final ViewGroup parent) {
34+
35+
final FileModel fileModel = getItem(position);
36+
37+
if (convertView == null) {
38+
convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.edited_items, parent, false);
39+
}
40+
41+
ImageView file_thumbnail = convertView.findViewById(R.id.file_thumbnail);
42+
ImageView delete_file = convertView.findViewById(R.id.delete_file);
43+
ImageView share_file = convertView.findViewById(R.id.share_file);
44+
TextView file_name = convertView.findViewById(R.id.file_name);
45+
TextView file_size = convertView.findViewById(R.id.file_size);
46+
47+
assert fileModel != null;
48+
Picasso.get().load(fileModel.getFile()).into(file_thumbnail);
49+
50+
file_name.setText(fileModel.getName());
51+
file_size.setText(fileModel.getSize());
52+
53+
delete_file.setOnClickListener(new View.OnClickListener() {
54+
@Override
55+
public void onClick(View v) {
56+
57+
if (fileModel.getFile().exists() && fileModel.getFile().delete())
58+
remove(fileModel);
59+
}
60+
});
61+
62+
share_file.setOnClickListener(new View.OnClickListener() {
63+
@Override
64+
public void onClick(View v) {
65+
66+
Uri uri = FileProvider.getUriForFile(
67+
parent.getContext(),
68+
"a.gautham.neweditor.provider",
69+
fileModel.getFile());
70+
71+
Intent shareIntent = new Intent(Intent.ACTION_SEND);
72+
if (fileModel.getName().endsWith(".jpeg")) {
73+
shareIntent.setType("image/jpg");
74+
} else {
75+
shareIntent.setType("image/png");
76+
}
77+
shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
78+
Intent chooser = Intent.createChooser(shareIntent, "Share image");
79+
80+
List<ResolveInfo> resInfoList = parent.getContext().getPackageManager()
81+
.queryIntentActivities(chooser, PackageManager.MATCH_DEFAULT_ONLY);
82+
83+
for (ResolveInfo resolveInfo : resInfoList) {
84+
String packageName = resolveInfo.activityInfo.packageName;
85+
parent.getContext().grantUriPermission(packageName, uri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
86+
}
87+
88+
parent.getContext().startActivity(chooser);
89+
90+
}
91+
});
92+
93+
return convertView;
94+
95+
}
96+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package a.gautham.neweditor.helper;
2+
3+
import java.io.File;
4+
5+
public class FileModel {
6+
7+
private String name;
8+
private String size;
9+
private File file;
10+
11+
public FileModel(String name, String size, File file) {
12+
this.name = name;
13+
this.size = size;
14+
this.file = file;
15+
}
16+
17+
public String getName() {
18+
return name;
19+
}
20+
21+
public void setName(String name) {
22+
this.name = name;
23+
}
24+
25+
public String getSize() {
26+
return size;
27+
}
28+
29+
public void setSize(String size) {
30+
this.size = size;
31+
}
32+
33+
public File getFile() {
34+
return file;
35+
}
36+
37+
public void setFile(File file) {
38+
this.file = file;
39+
}
40+
}

0 commit comments

Comments
 (0)