diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b41dd5c10..ec38bb68a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -17,7 +17,8 @@ android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppDefaultTheme" > - + @@ -35,7 +36,8 @@ + android:parentActivityName=".MainActivity" + android:exported="true"> @@ -44,7 +46,8 @@ + android:parentActivityName=".MainActivity" + android:exported="true"> diff --git a/app/src/main/java/com/deniscerri/ytdlnis/App.java b/app/src/main/java/com/deniscerri/ytdlnis/App.java index 16a862c0d..0edffec8d 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/App.java +++ b/app/src/main/java/com/deniscerri/ytdlnis/App.java @@ -3,16 +3,13 @@ import android.app.Application; import android.util.Log; import android.widget.Toast; - import androidx.preference.PreferenceManager; - import com.deniscerri.ytdlnis.util.NotificationUtil; import com.google.android.material.color.DynamicColors; import com.yausername.aria2c.Aria2c; import com.yausername.ffmpeg.FFmpeg; import com.yausername.youtubedl_android.YoutubeDL; import com.yausername.youtubedl_android.YoutubeDLException; - import io.reactivex.Completable; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.exceptions.UndeliverableException; diff --git a/app/src/main/java/com/deniscerri/ytdlnis/MainActivity.java b/app/src/main/java/com/deniscerri/ytdlnis/MainActivity.java index b0b03f0bb..517d71781 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/MainActivity.java +++ b/app/src/main/java/com/deniscerri/ytdlnis/MainActivity.java @@ -1,5 +1,6 @@ package com.deniscerri.ytdlnis; +import android.Manifest; import android.app.Activity; import android.app.ActivityManager; import android.content.ComponentName; @@ -7,13 +8,15 @@ import android.content.Intent; import android.content.ServiceConnection; import android.content.SharedPreferences; +import android.content.pm.PackageManager; import android.net.Uri; import android.os.Bundle; import android.os.IBinder; +import android.provider.Settings; import android.util.Log; -import android.widget.Toast; - +import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.app.ActivityCompat; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; @@ -26,25 +29,18 @@ import com.deniscerri.ytdlnis.page.settings.SettingsActivity; import com.deniscerri.ytdlnis.service.IDownloaderListener; import com.deniscerri.ytdlnis.service.IDownloaderService; -import com.deniscerri.ytdlnis.util.NotificationUtil; import com.deniscerri.ytdlnis.util.UpdateUtil; - +import com.google.android.material.dialog.MaterialAlertDialogBuilder; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; -import java.text.DateFormat; -import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; -import java.util.Calendar; -import java.util.Date; import java.util.LinkedList; import java.util.List; -import java.util.Locale; - public class MainActivity extends AppCompatActivity{ @@ -65,7 +61,7 @@ public class MainActivity extends AppCompatActivity{ private ArrayList listeners = null; private IDownloaderService iDownloaderService; - private final ServiceConnection serviceConnection = new ServiceConnection() { + public final ServiceConnection serviceConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName className, IBinder service) { downloaderService = ((DownloaderService.LocalBinder) service).getService(); @@ -137,6 +133,9 @@ protected void onCreate(Bundle savedInstanceState) { } return true; }); + + askPermissions(); + Intent intent = getIntent(); handleIntents(intent); } @@ -303,4 +302,46 @@ private void checkUpdate(){ } } + + private void askPermissions(){ + if(!checkFilePermission()){ + ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); + } + } + + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + Log.e(TAG, String.valueOf(grantResults[0])); + for(int i = 0; i < permissions.length; i++){ + if(grantResults[i] == PackageManager.PERMISSION_DENIED){ + createPermissionRequestDialog(); + } + } + } + + private void exit(){ + this.finishAffinity(); + System.exit(0); + } + + private boolean checkFilePermission(){ + return ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) + == PackageManager.PERMISSION_GRANTED; + } + + private void createPermissionRequestDialog(){ + MaterialAlertDialogBuilder dialog = new MaterialAlertDialogBuilder(this); + dialog.setTitle(getString(R.string.warning)); + dialog.setMessage(getString(R.string.request_permission_desc)); + dialog.setOnCancelListener(dialogInterface -> exit()); + dialog.setNegativeButton(getString(R.string.exit_app), (dialogInterface, i) -> exit()); + dialog.setPositiveButton(getString(R.string.ok), (dialogInterface, i) -> { + Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.fromParts("package", getPackageName(), null)); + startActivity(intent); + System.exit(0); + }); + dialog.show(); + } + } diff --git a/app/src/main/java/com/deniscerri/ytdlnis/page/CustomCommandActivity.java b/app/src/main/java/com/deniscerri/ytdlnis/page/CustomCommandActivity.java index e3e476178..e505a2e37 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/page/CustomCommandActivity.java +++ b/app/src/main/java/com/deniscerri/ytdlnis/page/CustomCommandActivity.java @@ -11,6 +11,7 @@ import android.os.IBinder; import android.text.method.ScrollingMovementMethod; import android.util.Log; +import android.view.View; import android.widget.EditText; import android.widget.ScrollView; import android.widget.TextView; @@ -75,8 +76,9 @@ public void onDownloadStart(DownloadInfo info) { } public void onDownloadProgress(DownloadInfo info) { - output.append("\n" + info.getOutputLine()); - scrollView.scrollTo(0, scrollView.getMaxScrollAmount()); + output.append("\n" + info.getOutputLine() + "\n"); + output.scrollTo(0, output.getHeight()); + scrollView.fullScroll(View.FOCUS_DOWN); } public void onDownloadError(DownloadInfo info) { diff --git a/app/src/main/java/com/deniscerri/ytdlnis/receiver/NotificationReceiver.java b/app/src/main/java/com/deniscerri/ytdlnis/receiver/NotificationReceiver.java index 800aa1589..7f48b3c87 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/receiver/NotificationReceiver.java +++ b/app/src/main/java/com/deniscerri/ytdlnis/receiver/NotificationReceiver.java @@ -7,10 +7,8 @@ import android.content.ServiceConnection; import android.os.IBinder; import com.deniscerri.ytdlnis.DownloaderService; -import com.deniscerri.ytdlnis.MainActivity; import com.deniscerri.ytdlnis.service.IDownloaderListener; import com.deniscerri.ytdlnis.service.IDownloaderService; -import com.deniscerri.ytdlnis.util.NotificationUtil; import java.util.ArrayList; diff --git a/app/src/main/java/com/deniscerri/ytdlnis/util/NotificationUtil.java b/app/src/main/java/com/deniscerri/ytdlnis/util/NotificationUtil.java index 868e65205..bfee2cae6 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/util/NotificationUtil.java +++ b/app/src/main/java/com/deniscerri/ytdlnis/util/NotificationUtil.java @@ -78,7 +78,7 @@ public Notification createDownloadServiceNotification(PendingIntent pendingInten .setContentIntent(pendingIntent) .setForegroundServiceBehavior(NotificationCompat.FOREGROUND_SERVICE_IMMEDIATE) .clearActions() - .addAction(0, context.getString(R.string.cancel), cancelNotificationPendingIntent) + //.addAction(0, context.getString(R.string.cancel), cancelNotificationPendingIntent) .build(); return notification; diff --git a/app/src/main/res/layout/activity_custom_command.xml b/app/src/main/res/layout/activity_custom_command.xml index 2881f80e7..b33e759f3 100644 --- a/app/src/main/res/layout/activity_custom_command.xml +++ b/app/src/main/res/layout/activity_custom_command.xml @@ -35,7 +35,7 @@ diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a9c68985c..1294b68ed 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -136,4 +136,7 @@ Delete the file from the device Delete the files from the device Loaded. + This app needs File Permissions to save downloads on the device + Exit App + Warning \ No newline at end of file diff --git a/build.gradle b/build.gradle index 1072e66e3..4402be6e0 100644 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,7 @@ buildscript { def versionMajor = 1 def versionMinor = 4 -def versionPatch = 2 +def versionPatch = 3 def versionBuild = 0 // bump for dogfood builds, public betas, etc. ext {