diff --git a/app/src/main/java/org/schabi/newpipe/MainActivity.java b/app/src/main/java/org/schabi/newpipe/MainActivity.java index a9f2e962239..bf538cc6506 100644 --- a/app/src/main/java/org/schabi/newpipe/MainActivity.java +++ b/app/src/main/java/org/schabi/newpipe/MainActivity.java @@ -60,7 +60,6 @@ import org.schabi.newpipe.util.Constants; import org.schabi.newpipe.util.KioskTranslator; import org.schabi.newpipe.util.NavigationHelper; -import org.schabi.newpipe.util.PermissionHelper; import org.schabi.newpipe.util.ServiceHelper; import org.schabi.newpipe.util.StateSaver; import org.schabi.newpipe.util.ThemeHelper; @@ -422,17 +421,6 @@ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permis return; } } - switch (requestCode) { - case PermissionHelper.DOWNLOADS_REQUEST_CODE: - NavigationHelper.openDownloads(this); - break; - case PermissionHelper.DOWNLOAD_DIALOG_REQUEST_CODE: - Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_holder); - if (fragment instanceof VideoDetailFragment) { - ((VideoDetailFragment) fragment).openDownloadDialog(); - } - break; - } } /** diff --git a/app/src/main/java/org/schabi/newpipe/RouterActivity.java b/app/src/main/java/org/schabi/newpipe/RouterActivity.java index c7bf4c88109..88f6bdb2b54 100644 --- a/app/src/main/java/org/schabi/newpipe/RouterActivity.java +++ b/app/src/main/java/org/schabi/newpipe/RouterActivity.java @@ -382,10 +382,8 @@ private void handleChoice(final String selectedChoiceKey) { } if (selectedChoiceKey.equals(getString(R.string.download_key))) { - if (PermissionHelper.checkStoragePermissions(this, PermissionHelper.DOWNLOAD_DIALOG_REQUEST_CODE)) { - selectionIsDownload = true; - openDownloadDialog(); - } + selectionIsDownload = true; + openDownloadDialog(); return; } @@ -453,9 +451,6 @@ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permis return; } } - if (requestCode == PermissionHelper.DOWNLOAD_DIALOG_REQUEST_CODE) { - openDownloadDialog(); - } } private static class AdapterChoiceItem { diff --git a/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java b/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java index 56ea9366d37..ea212e1e857 100644 --- a/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java +++ b/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java @@ -47,7 +47,6 @@ import org.schabi.newpipe.report.UserAction; import org.schabi.newpipe.util.FilenameUtils; import org.schabi.newpipe.util.ListHelper; -import org.schabi.newpipe.util.PermissionHelper; import org.schabi.newpipe.util.SecondaryStreamHelper; import org.schabi.newpipe.util.StreamItemAdapter; import org.schabi.newpipe.util.StreamItemAdapter.StreamSizeWrapper; @@ -173,10 +172,6 @@ public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (DEBUG) Log.d(TAG, "onCreate() called with: savedInstanceState = [" + savedInstanceState + "]"); - if (!PermissionHelper.checkStoragePermissions(getActivity(), PermissionHelper.DOWNLOAD_DIALOG_REQUEST_CODE)) { - getDialog().dismiss(); - return; - } context = getContext(); @@ -217,32 +212,6 @@ public void onServiceConnected(ComponentName cname, IBinder service) { okButton.setEnabled(true); context.unbindService(this); - - // check of download paths are defined - if (!askForSavePath) { - String msg = ""; - if (mainStorageVideo == null) msg += getString(R.string.download_path_title); - if (mainStorageAudio == null) - msg += getString(R.string.download_path_audio_title); - - if (!msg.isEmpty()) { - String title; - if (mainStorageVideo == null && mainStorageAudio == null) { - title = getString(R.string.general_error); - msg = getString(R.string.no_available_dir) + ":\n" + msg; - } else { - title = msg; - msg = getString(R.string.no_available_dir); - } - - new AlertDialog.Builder(context) - .setPositiveButton(android.R.string.ok, null) - .setTitle(title) - .setMessage(msg) - .create() - .show(); - } - } } @Override @@ -602,6 +571,9 @@ private void prepareSelectedDownload() { // * save path not defined (via download settings) // * the user as checked the "ask where to download" option + if (!askForSavePath) + Toast.makeText(context, getString(R.string.no_available_dir), Toast.LENGTH_LONG).show(); + StoredFileHelper.requestSafWithFileCreation(this, REQUEST_DOWNLOAD_PATH_SAF, filename, mime); return; } @@ -773,7 +745,6 @@ private void continueSelectedDownload(@NonNull StoredFileHelper storage) { // more download logic: select muxer, subtitle converter, etc. switch (radioStreamsGroup.getCheckedRadioButtonId()) { case R.id.audio_button: - threads = 1;// use unique thread for subtitles due small file size kind = 'a'; selectedStream = audioStreamsAdapter.getItem(selectedAudioIndex); @@ -808,6 +779,7 @@ private void continueSelectedDownload(@NonNull StoredFileHelper storage) { } break; case R.id.subtitle_button: + threads = 1;// use unique thread for subtitles due small file size kind = 's'; selectedStream = subtitleStreamsAdapter.getItem(selectedSubtitleIndex); diff --git a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java index f62cda2ddcd..5202c4b2a0c 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java @@ -385,10 +385,7 @@ public void onClick(View v) { } break; case R.id.detail_controls_download: - if (PermissionHelper.checkStoragePermissions(activity, - PermissionHelper.DOWNLOAD_DIALOG_REQUEST_CODE)) { - this.openDownloadDialog(); - } + this.openDownloadDialog(); break; case R.id.detail_uploader_root_layout: if (TextUtils.isEmpty(currentInfo.getUploaderUrl())) { diff --git a/app/src/main/java/org/schabi/newpipe/settings/DownloadSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/DownloadSettingsFragment.java index e671e4d3a93..4212f4cb80f 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/DownloadSettingsFragment.java +++ b/app/src/main/java/org/schabi/newpipe/settings/DownloadSettingsFragment.java @@ -12,7 +12,6 @@ import android.support.annotation.StringRes; import android.support.v7.preference.Preference; import android.util.Log; -import android.widget.Toast; import com.nononsenseapps.filepicker.Utils; @@ -64,7 +63,6 @@ public void onCreate(@Nullable Bundle savedInstanceState) { } if (hasInvalidPath(DOWNLOAD_PATH_VIDEO_PREFERENCE) || hasInvalidPath(DOWNLOAD_PATH_AUDIO_PREFERENCE)) { - Toast.makeText(ctx, R.string.download_pick_path, Toast.LENGTH_SHORT).show(); updatePreferencesSummary(); } diff --git a/app/src/main/java/org/schabi/newpipe/settings/NewPipeSettings.java b/app/src/main/java/org/schabi/newpipe/settings/NewPipeSettings.java index f18d90a9553..a0f3b606315 100644 --- a/app/src/main/java/org/schabi/newpipe/settings/NewPipeSettings.java +++ b/app/src/main/java/org/schabi/newpipe/settings/NewPipeSettings.java @@ -22,6 +22,7 @@ import android.content.Context; import android.content.SharedPreferences; +import android.os.Build; import android.os.Environment; import android.preference.PreferenceManager; import android.support.annotation.NonNull; @@ -66,8 +67,10 @@ public static void initSettings(Context context) { PreferenceManager.setDefaultValues(context, R.xml.video_audio_settings, true); PreferenceManager.setDefaultValues(context, R.xml.debug_settings, true); - getVideoDownloadFolder(context); - getAudioDownloadFolder(context); + if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { + getVideoDownloadFolder(context); + getAudioDownloadFolder(context); + } } private static void getVideoDownloadFolder(Context context) { diff --git a/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java b/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java index 89c4b33fe28..bb176166b94 100644 --- a/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java +++ b/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java @@ -446,9 +446,6 @@ public static void openSettings(Context context) { } public static boolean openDownloads(Activity activity) { - if (!PermissionHelper.checkStoragePermissions(activity, PermissionHelper.DOWNLOADS_REQUEST_CODE)) { - return false; - } Intent intent = new Intent(activity, DownloadActivity.class); activity.startActivity(intent); return true; diff --git a/app/src/main/java/org/schabi/newpipe/util/PermissionHelper.java b/app/src/main/java/org/schabi/newpipe/util/PermissionHelper.java index 7574a93045b..1367b895c58 100644 --- a/app/src/main/java/org/schabi/newpipe/util/PermissionHelper.java +++ b/app/src/main/java/org/schabi/newpipe/util/PermissionHelper.java @@ -18,9 +18,6 @@ import org.schabi.newpipe.R; public class PermissionHelper { - public static final int DOWNLOAD_DIALOG_REQUEST_CODE = 778; - public static final int DOWNLOADS_REQUEST_CODE = 777; - public static boolean checkStoragePermissions(Activity activity, int requestCode) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { diff --git a/app/src/main/java/us/shandian/giga/get/DownloadInitializer.java b/app/src/main/java/us/shandian/giga/get/DownloadInitializer.java index 8f1b9ba4ebb..901f2b54c87 100644 --- a/app/src/main/java/us/shandian/giga/get/DownloadInitializer.java +++ b/app/src/main/java/us/shandian/giga/get/DownloadInitializer.java @@ -28,11 +28,21 @@ public class DownloadInitializer extends Thread { mConn = null; } + private static void safeClose(HttpURLConnection con) { + try { + con.getInputStream().close(); + } catch (Exception e) { + // nothing to do + } + } + @Override public void run() { if (mMission.current > 0) mMission.resetState(false, true, DownloadMission.ERROR_NOTHING); int retryCount = 0; + int httpCode = 204; + while (true) { try { if (mMission.blocks == null && mMission.current == 0) { @@ -43,11 +53,16 @@ public void run() { for (int i = 0; i < mMission.urls.length && mMission.running; i++) { mConn = mMission.openConnection(mMission.urls[i], mId, -1, -1); mMission.establishConnection(mId, mConn); + safeClose(mConn); if (Thread.interrupted()) return; long length = Utility.getContentLength(mConn); - if (i == 0) mMission.length = length; + if (i == 0) { + httpCode = mConn.getResponseCode(); + mMission.length = length; + } + if (length > 0) finalLength += length; if (length < lowestSize) lowestSize = length; } @@ -68,13 +83,15 @@ public void run() { // ask for the current resource length mConn = mMission.openConnection(mId, -1, -1); mMission.establishConnection(mId, mConn); + safeClose(mConn); if (!mMission.running || Thread.interrupted()) return; + httpCode = mConn.getResponseCode(); mMission.length = Utility.getContentLength(mConn); } - if (mMission.length == 0 || mConn.getResponseCode() == 204) { + if (mMission.length == 0 || httpCode == 204) { mMission.notifyError(DownloadMission.ERROR_HTTP_NO_CONTENT, null); return; } @@ -92,6 +109,7 @@ public void run() { // Open again mConn = mMission.openConnection(mId, mMission.length - 10, mMission.length); mMission.establishConnection(mId, mConn); + safeClose(mConn); if (!mMission.running || Thread.interrupted()) return; diff --git a/app/src/main/java/us/shandian/giga/get/DownloadRunnable.java b/app/src/main/java/us/shandian/giga/get/DownloadRunnable.java index 6d1d2bfbce8..8126cc7e89d 100644 --- a/app/src/main/java/us/shandian/giga/get/DownloadRunnable.java +++ b/app/src/main/java/us/shandian/giga/get/DownloadRunnable.java @@ -49,7 +49,6 @@ public void run() { } SharpStream f; - InputStream is = null; try { f = mMission.storage.getStream(); @@ -114,16 +113,16 @@ public void run() { f.seek(mMission.offsets[mMission.current] + start); - is = mConn.getInputStream(); + try (InputStream is = mConn.getInputStream()) { + byte[] buf = new byte[DownloadMission.BUFFER_SIZE]; + int len; - byte[] buf = new byte[DownloadMission.BUFFER_SIZE]; - int len; - - while (start < end && mMission.running && (len = is.read(buf, 0, buf.length)) != -1) { - f.write(buf, 0, len); - start += len; - block.done += len; - mMission.notifyProgress(len); + while (start < end && mMission.running && (len = is.read(buf, 0, buf.length)) != -1) { + f.write(buf, 0, len); + start += len; + block.done += len; + mMission.notifyProgress(len); + } } if (DEBUG && mMission.running) { @@ -143,12 +142,6 @@ public void run() { } } - try { - if (is != null) is.close(); - } catch (Exception err) { - // nothing to do - } - try { f.close(); } catch (Exception err) { diff --git a/app/src/main/java/us/shandian/giga/get/DownloadRunnableFallback.java b/app/src/main/java/us/shandian/giga/get/DownloadRunnableFallback.java index d93053881ad..3ed57778ecf 100644 --- a/app/src/main/java/us/shandian/giga/get/DownloadRunnableFallback.java +++ b/app/src/main/java/us/shandian/giga/get/DownloadRunnableFallback.java @@ -94,7 +94,7 @@ public void run() { mMission.notifyProgress(len); } - // if thread goes interrupted check if the last part mIs written. This avoid re-download the whole file + // if thread goes interrupted check if the last part is written. This avoid re-download the whole file done = len == -1; } catch (Exception e) { dispose(); diff --git a/app/src/main/java/us/shandian/giga/service/DownloadManagerService.java b/app/src/main/java/us/shandian/giga/service/DownloadManagerService.java index 7f3a4bde1c7..065e21b9dd1 100755 --- a/app/src/main/java/us/shandian/giga/service/DownloadManagerService.java +++ b/app/src/main/java/us/shandian/giga/service/DownloadManagerService.java @@ -1,7 +1,5 @@ package us.shandian.giga.service; -import android.Manifest; -import android.app.AlertDialog; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; @@ -30,7 +28,6 @@ import android.support.annotation.StringRes; import android.support.v4.app.NotificationCompat; import android.support.v4.app.NotificationCompat.Builder; -import android.support.v4.content.PermissionChecker; import android.util.Log; import android.util.SparseArray; import android.widget.Toast; @@ -257,18 +254,20 @@ public void onDestroy() { @Override public IBinder onBind(Intent intent) { + /* int permissionCheck; -// if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) { -// permissionCheck = PermissionChecker.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE); -// if (permissionCheck == PermissionChecker.PERMISSION_DENIED) { -// Toast.makeText(this, "Permission denied (read)", Toast.LENGTH_SHORT).show(); -// } -// } + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) { + permissionCheck = PermissionChecker.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE); + if (permissionCheck == PermissionChecker.PERMISSION_DENIED) { + Toast.makeText(this, "Permission denied (read)", Toast.LENGTH_SHORT).show(); + } + } permissionCheck = PermissionChecker.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE); if (permissionCheck == PermissionChecker.PERMISSION_DENIED) { Toast.makeText(this, "Permission denied (write)", Toast.LENGTH_SHORT).show(); } + */ return mBinder; } diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 4eef9983560..f61584639c1 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -103,7 +103,7 @@ Toque para ver detalles Por favor espere… Copiado al portapapeles - Por favor, seleccione un directorio de descarga disponible + Por favor, defina un directorio de descarga mas tarde en ajustes No se pudo cargar la imagen La interfaz de la app dejó de funcionar Lo sucedido:\\nPetición:\\nIdioma del contenido:\\nServicio:\\nHora GMT:\\nPaquete:\\nVersión:\\nVersión del SO: @@ -458,7 +458,6 @@ abrir en modo popup Se perdió el progreso porque el archivo fue eliminado Tiempo de espera excedido - Seleccione los directorios de descarga Preguntar dónde descargar Se preguntará dónde guardar cada descarga Se preguntará dónde guardar cada descarga.\nHabilita esta opción si quieres descargar en la tarjeta SD externa diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 847f5fc49ea..916a3123059 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -294,7 +294,7 @@ Tap for details Please wait… Copied to clipboard - Please select an available download folder + Please define an download folder later in settings This permission is needed to\nopen in popup mode 1 item deleted. @@ -553,8 +553,6 @@ Start downloads Pause downloads - Select the downloads save path - Ask where to download You will be asked where to save each download You will be asked where to save each download.\nEnable this option if you want download to the external SD Card