diff --git a/app/src/main/java/org/schabi/newpipe/player/VideoPlayer.java b/app/src/main/java/org/schabi/newpipe/player/VideoPlayer.java
index 360475ba2..a92ab410e 100644
--- a/app/src/main/java/org/schabi/newpipe/player/VideoPlayer.java
+++ b/app/src/main/java/org/schabi/newpipe/player/VideoPlayer.java
@@ -26,14 +26,13 @@ import android.animation.PropertyValuesHolder;
import android.animation.ValueAnimator;
import android.content.Context;
import android.content.Intent;
+import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.os.Build;
import android.os.Handler;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.core.content.ContextCompat;
+import android.preference.PreferenceManager;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
@@ -45,6 +44,10 @@ import android.widget.ProgressBar;
import android.widget.SeekBar;
import android.widget.TextView;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.core.content.ContextCompat;
+
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.PlaybackParameters;
import com.google.android.exoplayer2.Player;
@@ -285,6 +288,12 @@ public abstract class VideoPlayer extends BasePlayer
if (captionPopupMenu == null) return;
captionPopupMenu.getMenu().removeGroup(captionPopupMenuGroupId);
+ String userPreferredLanguage = PreferenceManager.getDefaultSharedPreferences(context)
+ .getString(context.getString(R.string.caption_user_set_key), null);
+ // english (auto-generated)
+ boolean searchForAutogenerated = userPreferredLanguage == null ||
+ !userPreferredLanguage.contains("(");
+
// Add option for turning off caption
MenuItem captionOffItem = captionPopupMenu.getMenu().add(captionPopupMenuGroupId,
0, Menu.NONE, R.string.caption_none);
@@ -294,6 +303,8 @@ public abstract class VideoPlayer extends BasePlayer
trackSelector.setParameters(trackSelector.buildUponParameters()
.setRendererDisabled(textRendererIndex, true));
}
+ final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
+ prefs.edit().remove(context.getString(R.string.caption_user_set_key)).commit();
return true;
});
@@ -308,9 +319,26 @@ public abstract class VideoPlayer extends BasePlayer
trackSelector.setPreferredTextLanguage(captionLanguage);
trackSelector.setParameters(trackSelector.buildUponParameters()
.setRendererDisabled(textRendererIndex, false));
+ final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
+ prefs.edit().putString(context.getString(R.string.caption_user_set_key),
+ captionLanguage).commit();
}
return true;
});
+ // apply caption language from previous user preference
+ if(userPreferredLanguage != null && (captionLanguage.equals(userPreferredLanguage) ||
+ searchForAutogenerated && captionLanguage.startsWith(userPreferredLanguage) ||
+ userPreferredLanguage.contains("(") &&
+ captionLanguage.startsWith(userPreferredLanguage.substring(0,
+ userPreferredLanguage.indexOf('('))))) {
+ final int textRendererIndex = getRendererIndex(C.TRACK_TYPE_TEXT);
+ if (textRendererIndex != RENDERER_UNAVAILABLE) {
+ trackSelector.setPreferredTextLanguage(captionLanguage);
+ trackSelector.setParameters(trackSelector.buildUponParameters()
+ .setRendererDisabled(textRendererIndex, false));
+ }
+ searchForAutogenerated = false;
+ }
}
captionPopupMenu.setOnDismissListener(this);
}
diff --git a/app/src/main/res/values/settings_keys.xml b/app/src/main/res/values/settings_keys.xml
index 80f2bb1f4..783ab7b5e 100644
--- a/app/src/main/res/values/settings_keys.xml
+++ b/app/src/main/res/values/settings_keys.xml
@@ -133,6 +133,7 @@
caption_settings_key
+ caption_user_set_key
show_search_suggestions