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 ec6d42b29a2..c2b8f33c50a 100644
--- a/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java
+++ b/app/src/main/java/org/schabi/newpipe/download/DownloadDialog.java
@@ -43,7 +43,9 @@
import org.schabi.newpipe.util.StreamItemAdapter.StreamSizeWrapper;
import org.schabi.newpipe.util.ThemeHelper;
+import java.text.SimpleDateFormat;
import java.util.ArrayList;
+import java.util.Date;
import java.util.List;
import java.util.Locale;
@@ -193,7 +195,8 @@ public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
nameEditText = view.findViewById(R.id.file_name);
- nameEditText.setText(FilenameUtils.createFilename(getContext(), currentInfo.getName()));
+
+ nameEditText.setText(createFilename());
selectedAudioIndex = ListHelper.getDefaultAudioFormat(getContext(), currentInfo.getAudioStreams());
selectedSubtitleIndex = getSubtitleIndexBy(subtitleStreamsAdapter.getAll());
@@ -268,10 +271,10 @@ public void onSaveInstanceState(Bundle outState) {
Icepick.saveInstanceState(this, outState);
}
+
/*//////////////////////////////////////////////////////////////////////////
// Inits
//////////////////////////////////////////////////////////////////////////*/
-
private void initToolbar(Toolbar toolbar) {
if (DEBUG) Log.d(TAG, "initToolbar() called with: toolbar = [" + toolbar + "]");
toolbar.setTitle(R.string.download_dialog_title);
@@ -312,10 +315,10 @@ private void setupSubtitleSpinner() {
setRadioButtonsState(true);
}
+
/*//////////////////////////////////////////////////////////////////////////
// Radio group Video&Audio options - Listener
//////////////////////////////////////////////////////////////////////////*/
-
@Override
public void onCheckedChanged(RadioGroup group, @IdRes int checkedId) {
if (DEBUG)
@@ -338,10 +341,10 @@ public void onCheckedChanged(RadioGroup group, @IdRes int checkedId) {
threadsSeekBar.setEnabled(flag);
}
+
/*//////////////////////////////////////////////////////////////////////////
// Streams Spinner Listener
//////////////////////////////////////////////////////////////////////////*/
-
@Override
public void onItemSelected(AdapterView> parent, View view, int position, long id) {
if (DEBUG)
@@ -363,10 +366,10 @@ public void onItemSelected(AdapterView> parent, View view, int position, long
public void onNothingSelected(AdapterView> parent) {
}
+
/*//////////////////////////////////////////////////////////////////////////
// Utils
//////////////////////////////////////////////////////////////////////////*/
-
protected void setupDownloadOptions() {
setRadioButtonsState(false);
@@ -538,4 +541,37 @@ private void downloadSelected(Context context, Stream selectedStream, String loc
getDialog().dismiss();
}
+
+ private String createFilename() {
+ String defaultDownloadFilenameFormat = requireContext().getString(
+ R.string.download_filename_format_default_value);
+
+ String currentDownloadFilenameFormat = PreferenceManager.getDefaultSharedPreferences(getContext())
+ .getString(
+ requireContext().getString(R.string.download_filename_format_key),
+ defaultDownloadFilenameFormat);
+
+ if (currentDownloadFilenameFormat == null) {
+ throw new NullPointerException("currentDownloadFilenameFormat is null");
+ }
+
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM", Locale.US);
+ String currentDate = sdf.format(new Date());
+
+ String secondParam = currentInfo.getName();
+ String thirdParam = currentDate;
+
+ if (!currentDownloadFilenameFormat.equals(defaultDownloadFilenameFormat)) {
+ secondParam = currentDate;
+ thirdParam = currentInfo.getName();
+ }
+
+ String filename = String.format(
+ "%s-%s-%s",
+ currentInfo.getUploaderName(),
+ secondParam,
+ thirdParam);
+
+ return FilenameUtils.createFilename(getContext(), filename);
+ }
}
diff --git a/app/src/main/res/values/settings_keys.xml b/app/src/main/res/values/settings_keys.xml
index 3861f53d59d..ba72ba2cc5c 100644
--- a/app/src/main/res/values/settings_keys.xml
+++ b/app/src/main/res/values/settings_keys.xml
@@ -919,4 +919,8 @@
- @string/grid
+
+ - @string/download_filename_format_cnvtcd
+ - @string/download_filename_format_cncdvt
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 90554a04f89..b13ab45f499 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -603,4 +603,10 @@
Downloads that can not be paused will be restarted
Close
+ download_filename_format
+ @string/download_filename_format_cnvtcd
+ ChannelName-VideoTitle-CurrentDate
+ ChannelName-CurrentDate-VideoTitle
+ Download filename format
+ Videos will have filename with this format
\ No newline at end of file
diff --git a/app/src/main/res/xml/download_settings.xml b/app/src/main/res/xml/download_settings.xml
index be015018a95..7cfc8b9b812 100644
--- a/app/src/main/res/xml/download_settings.xml
+++ b/app/src/main/res/xml/download_settings.xml
@@ -34,6 +34,15 @@
android:summary="@string/settings_file_replacement_character_summary"
android:title="@string/settings_file_replacement_character_title"/>
+
+