Skip to content

Commit

Permalink
Revive Download Button
Browse files Browse the repository at this point in the history
Thanks to @Waleed055
Add Notification Permission for T+
Enabled Download button & Saved Files Tab for Android Q+

Signed-off-by: GauthamAsir <gauthamnadar12@gmail.com>
  • Loading branch information
GauthamAsir committed Apr 3, 2023
1 parent 3df4120 commit 3ddf740
Show file tree
Hide file tree
Showing 7 changed files with 118 additions and 42 deletions.
7 changes: 5 additions & 2 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,10 @@
package="a.gautham.statusdownloader">

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
tools:ignore="ScopedStorage" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

<application
Expand All @@ -15,7 +18,7 @@
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".PrivacyPolicy"></activity>
<activity android:name=".PrivacyPolicy" />
<activity android:name=".AboutUs" />
<activity
android:name=".SplashActivity"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,10 +50,10 @@ public void onBindViewHolder(@NonNull final ItemViewHolder holder, int position)

final Status status = imagesList.get(position);
if (status.isApi30()) {
holder.save.setVisibility(View.GONE);
// holder.save.setVisibility(View.GONE);
Glide.with(context).load(status.getDocumentFile().getUri()).into(holder.imageView);
} else {
holder.save.setVisibility(View.VISIBLE);
// holder.save.setVisibility(View.VISIBLE);
Glide.with(context).load(status.getFile()).into(holder.imageView);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,10 +53,10 @@ public void onBindViewHolder(@NonNull final ItemViewHolder holder, int position)
final Status status = videoList.get(position);

if (status.isApi30()) {
holder.save.setVisibility(View.GONE);
// holder.save.setVisibility(View.GONE);
Glide.with(context).load(status.getDocumentFile().getUri()).into(holder.imageView);
} else {
holder.save.setVisibility(View.VISIBLE);
// holder.save.setVisibility(View.VISIBLE);
Glide.with(context).load(status.getFile()).into(holder.imageView);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.Executors;

import a.gautham.statusdownloader.Adapter.ImageAdapter;
Expand Down Expand Up @@ -112,6 +113,10 @@ private void executeOld() {

Arrays.sort(statusFiles);
for (File file : statusFiles) {

if (file.getName().contains(".nomedia"))
continue;

Status status = new Status(file, file.getName(), file.getAbsolutePath());

if (!status.isVideo() && status.getTitle().endsWith(".jpg")) {
Expand Down Expand Up @@ -187,6 +192,10 @@ private void executeNew() {
}

for (DocumentFile documentFile : statusFiles) {

if (Objects.requireNonNull(documentFile.getName()).contains(".nomedia"))
continue;

Status status = new Status(documentFile);

if (!status.isVideo()) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package a.gautham.statusdownloader.Fragments;

import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.StrictMode;
import android.view.LayoutInflater;
Expand Down Expand Up @@ -73,13 +75,22 @@ private void getFiles() {

final File app_dir = new File(Common.APP_DIR);

if (app_dir.exists()) {
if (app_dir.exists() ||
Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {

no_files_found.setVisibility(View.GONE);

new Thread(() -> {
File[] savedFiles;
savedFiles = app_dir.listFiles();

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
File f = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_DCIM
) + File.separator + "status_saver");
savedFiles = f.listFiles();
} else {
savedFiles = app_dir.listFiles();
}
savedFilesList.clear();

if (savedFiles != null && savedFiles.length > 0) {
Expand Down
34 changes: 23 additions & 11 deletions app/src/main/java/a/gautham/statusdownloader/MainActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,13 @@ public class MainActivity extends AppCompatActivity {
Manifest.permission.WRITE_EXTERNAL_STORAGE
};

@SuppressLint("InlinedApi")
private static final String[] NOTIFICATION_PERMISSION = {
Manifest.permission.POST_NOTIFICATIONS
};

private static final int NOTIFICATION_REQUEST_PERMISSIONS = 4;

private Context context;

ActivityResultLauncher<Intent> activityResultLauncher = registerForActivityResult(
Expand Down Expand Up @@ -92,9 +99,11 @@ protected void onCreate(Bundle savedInstanceState) {
tabLayout.addTab(tabLayout.newTab().setText(getString(R.string.images)));
tabLayout.addTab(tabLayout.newTab().setText(getString(R.string.videos)));

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
tabLayout.addTab(tabLayout.newTab().setText(getString(R.string.saved_files)));
}
/// if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
///
/// }

tabLayout.addTab(tabLayout.newTab().setText(getString(R.string.saved_files)));

PagerAdapter adapter = new PageAdapter(getSupportFragmentManager(), tabLayout.getTabCount());
viewPager.setAdapter(adapter);
Expand Down Expand Up @@ -197,11 +206,6 @@ private boolean arePermissionDenied() {
protected void onResume() {
super.onResume();

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && arePermissionDenied()) {
requestPermissions(PERMISSIONS, REQUEST_PERMISSIONS);
return;
}

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && arePermissionDenied()) {

// If Android 10+
Expand All @@ -211,11 +215,19 @@ protected void onResume() {
}

requestPermissions(PERMISSIONS, REQUEST_PERMISSIONS);
return;
}

Common.APP_DIR = getExternalFilesDir("StatusDownloader").getPath();
Log.d("App Path", Common.APP_DIR);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU &&
ActivityCompat.checkSelfPermission(getApplicationContext(),
Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(NOTIFICATION_PERMISSION,
NOTIFICATION_REQUEST_PERMISSIONS);
}

if (Common.APP_DIR == null || Common.APP_DIR.isEmpty()) {
Common.APP_DIR = getExternalFilesDir("StatusDownloader").getPath();
Log.d("App Path", Common.APP_DIR);
}

}

Expand Down
87 changes: 64 additions & 23 deletions app/src/main/java/a/gautham/statusdownloader/Utils/Common.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,13 @@
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.provider.MediaStore;
import android.widget.RelativeLayout;

import androidx.annotation.RequiresApi;
Expand All @@ -18,8 +20,12 @@

import com.google.android.material.snackbar.Snackbar;

import org.apache.commons.io.IOUtils;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
Expand All @@ -29,10 +35,6 @@
import a.gautham.statusdownloader.R;

public class Common {

static final int MINI_KIND = 1;
static final int MICRO_KIND = 3;

public static final int GRID_COUNT = 2;

private static final String CHANNEL_NAME = "GAUTHAM";
Expand Down Expand Up @@ -66,36 +68,60 @@ public static void copyFile(Status status, Context context, RelativeLayout conta

try {

if (status.isApi30()) {
return;
// File fff = new File(status.getDocumentFile().getUri().getPath());
// System.out.println("LOL: " + fff.getPath());
// System.out.println("LOL 2: " + destFile.getPath());
// List<UriPermission> list = context.getContentResolver().getPersistedUriPermissions();
// copyFile(context, status.getDocumentFile().getUri().getPath(), Objects.requireNonNull(status.getDocumentFile().getName()),
// list.get(0).getUri());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {

ContentValues values = new ContentValues();

Uri destinationUri;

values.put(MediaStore.MediaColumns.DISPLAY_NAME, fileName);
values.put(MediaStore.MediaColumns.RELATIVE_PATH,
Environment.DIRECTORY_DCIM + "/status_saver");

Uri collectionUri;
if (status.isVideo()) {
values.put(MediaStore.MediaColumns.MIME_TYPE, "video/*");
collectionUri = MediaStore.Video.Media.getContentUri(
MediaStore.VOLUME_EXTERNAL_PRIMARY);
} else {
values.put(MediaStore.MediaColumns.MIME_TYPE, "image/*");
collectionUri = MediaStore.Images.Media.getContentUri(
MediaStore.VOLUME_EXTERNAL_PRIMARY);
}

destinationUri = context.getContentResolver().insert(collectionUri, values);

InputStream inputStream = context.getContentResolver().openInputStream(status.getDocumentFile().getUri());
OutputStream outputStream = context.getContentResolver().openOutputStream(destinationUri);
IOUtils.copy(inputStream, outputStream);

showNotification(context, container, status, fileName, destinationUri);

} else {
org.apache.commons.io.FileUtils.copyFile(status.getFile(), destFile);
}
//noinspection ResultOfMethodCallIgnored
destFile.setLastModified(System.currentTimeMillis());
new SingleMediaScanner(context, file);

destFile.setLastModified(System.currentTimeMillis());
new SingleMediaScanner(context, file);
Uri data = FileProvider.getUriForFile(context, "a.gautham.statusdownloader.provider",
new File(destFile.getAbsolutePath()));

// showNotification(context, container, destFile, status);
showNotification(context, container, status, fileName, data);
}

} catch (IOException e) {
e.printStackTrace();
}

}

private static void showNotification(Context context, RelativeLayout container, File destFile, Status status) {
private static void showNotification(Context context, RelativeLayout container, Status status,
String fileName, Uri data) {

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
makeNotificationChannel(context);
}

Uri data = FileProvider.getUriForFile(context, "a.gautham.statusdownloader" + ".provider", new File(destFile.getAbsolutePath()));
Intent intent = new Intent(Intent.ACTION_VIEW);

if (status.isVideo()) {
Expand All @@ -105,25 +131,40 @@ private static void showNotification(Context context, RelativeLayout container,
}
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

PendingIntent pendingIntent =
PendingIntent.getActivity(context, 0, intent, 0);
PendingIntent pendingIntent;

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
pendingIntent = PendingIntent.getActivity(context, 0, intent,
PendingIntent.FLAG_MUTABLE);
} else {
pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
}

NotificationCompat.Builder notification =
new NotificationCompat.Builder(context, CHANNEL_NAME);

notification.setSmallIcon(R.drawable.ic_file_download_black)
.setContentTitle(destFile.getName())
.setContentText("File Saved to" + APP_DIR)
.setContentTitle(fileName)
.setAutoCancel(true)
.setContentIntent(pendingIntent);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q)
notification.setContentText("File Saved to " +
Environment.DIRECTORY_DCIM + "/status_saver");
else
notification.setContentText("File Saved to" + APP_DIR);

NotificationManager notificationManager =
(NotificationManager) context.getSystemService(NOTIFICATION_SERVICE);

assert notificationManager != null;
notificationManager.notify(new Random().nextInt(), notification.build());

Snackbar.make(container, "Saved to " + Common.APP_DIR, Snackbar.LENGTH_LONG).show();
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q)
Snackbar.make(container, "Saved to " + Common.APP_DIR, Snackbar.LENGTH_LONG).show();
else
Snackbar.make(container, "Saved to " + Environment.DIRECTORY_DCIM + "/status_saver",
Snackbar.LENGTH_LONG).show();

}

Expand Down

0 comments on commit 3ddf740

Please sign in to comment.