[Android] [PATCH] Add subtitle font preference
Abir Viqar
nitsrite at gmail.com
Mon Jan 20 19:45:48 CET 2014
---
vlc-android/jni/libvlcjni.c | 7 +++
vlc-android/res/values/strings.xml | 1 +
vlc-android/res/xml/preferences.xml | 3 ++
vlc-android/src/org/videolan/libvlc/LibVLC.java | 9 ++++
vlc-android/src/org/videolan/vlc/Util.java | 1 +
.../org/videolan/vlc/gui/PreferencesActivity.java | 61 ++++++++++++++++++++++
6 files changed, 82 insertions(+)
diff --git a/vlc-android/jni/libvlcjni.c b/vlc-android/jni/libvlcjni.c
index cba3bc0..b8b5253 100644
--- a/vlc-android/jni/libvlcjni.c
+++ b/vlc-android/jni/libvlcjni.c
@@ -240,6 +240,11 @@ void Java_org_videolan_libvlc_LibVLC_nativeInit(JNIEnv *env, jobject thiz)
const char *chromastr = (*env)->GetStringUTFChars(env, chroma, 0);
LOGD("Chroma set to \"%s\"", chromastr);
+ methodId = (*env)->GetMethodID(env, cls, "getSubtitleFont", "()Ljava/lang/String;");
+ jstring subfont = (*env)->CallObjectMethod(env, thiz, methodId);
+ const char *subfontstr = (*env)->GetStringUTFChars(env, subfont, 0);
+ LOGD("Subtitle font set to \"%s\"", subfontstr);
+
methodId = (*env)->GetMethodID(env, cls, "getSubtitlesEncoding", "()Ljava/lang/String;");
jstring subsencoding = (*env)->CallObjectMethod(env, thiz, methodId);
const char *subsencodingstr = (*env)->GetStringUTFChars(env, subsencoding, 0);
@@ -262,6 +267,7 @@ void Java_org_videolan_libvlc_LibVLC_nativeInit(JNIEnv *env, jobject thiz)
"--preferred-resolution", "360",
"--avcodec-fast",
"--avcodec-threads=0",
+ "--freetype-font", subfontstr,
"--subsdec-encoding", subsencodingstr,
enable_time_stretch ? "--audio-time-stretch" : "--no-audio-time-stretch",
"--avcodec-skiploopfilter", deblockstr,
@@ -277,6 +283,7 @@ void Java_org_videolan_libvlc_LibVLC_nativeInit(JNIEnv *env, jobject thiz)
setLong(env, thiz, "mLibVlcInstance", (jlong)(intptr_t) instance);
(*env)->ReleaseStringUTFChars(env, chroma, chromastr);
+ (*env)->ReleaseStringUTFChars(env, subfont, subfontstr);
(*env)->ReleaseStringUTFChars(env, subsencoding, subsencodingstr);
if (!instance)
diff --git a/vlc-android/res/values/strings.xml b/vlc-android/res/values/strings.xml
index e7182e2..2e976d0 100644
--- a/vlc-android/res/values/strings.xml
+++ b/vlc-android/res/values/strings.xml
@@ -210,6 +210,7 @@
<string name="clear_media_db">Clear media database</string>
<string name="media_db_cleared">Media database cleared!</string>
<string name="subtitles_text_encoding">Subtitle text encoding</string>
+ <string name="subtitle_font">Subtitle font</string>
<string name="debug_logs">Debug logs</string>
<string name="start_logging">Start logging</string>
diff --git a/vlc-android/res/xml/preferences.xml b/vlc-android/res/xml/preferences.xml
index 0c7b564..5479c30 100644
--- a/vlc-android/res/xml/preferences.xml
+++ b/vlc-android/res/xml/preferences.xml
@@ -69,6 +69,9 @@
</PreferenceCategory>
<PreferenceCategory android:title="@string/other_prefs_category" >
+ <PreferenceScreen
+ android:key="subtitle_font"
+ android:title="@string/subtitle_font" />
<ListPreference
android:defaultValue=""
android:entries="@array/subtitles_encoding_list"
diff --git a/vlc-android/src/org/videolan/libvlc/LibVLC.java b/vlc-android/src/org/videolan/libvlc/LibVLC.java
index bcde3a5..e9bf33b 100644
--- a/vlc-android/src/org/videolan/libvlc/LibVLC.java
+++ b/vlc-android/src/org/videolan/libvlc/LibVLC.java
@@ -59,6 +59,7 @@ public class LibVLC {
/** Settings */
private boolean iomx = false;
+ private String subtitleFont = "";
private String subtitlesEncoding = "";
private int aout = LibVlcUtil.isGingerbreadOrLater() ? AOUT_OPENSLES : AOUT_AUDIOTRACK_JAVA;
private int vout = VOUT_ANDROID_SURFACE;
@@ -224,6 +225,14 @@ public class LibVLC {
this.iomx = iomx;
}
+ public String getSubtitleFont() {
+ return subtitleFont;
+ }
+
+ public void setSubtitleFont(String subtitleFont) {
+ this.subtitleFont = subtitleFont;
+ }
+
public String getSubtitlesEncoding() {
return subtitlesEncoding;
}
diff --git a/vlc-android/src/org/videolan/vlc/Util.java b/vlc-android/src/org/videolan/vlc/Util.java
index db19fb8..b9c1a45 100644
--- a/vlc-android/src/org/videolan/vlc/Util.java
+++ b/vlc-android/src/org/videolan/vlc/Util.java
@@ -116,6 +116,7 @@ public class Util {
return;
instance.setIomx(pref.getBoolean("enable_iomx", false));
+ instance.setSubtitleFont(pref.getString("subtitle_font", ""));
instance.setSubtitlesEncoding(pref.getString("subtitles_text_encoding", ""));
instance.setTimeStretching(pref.getBoolean("enable_time_stretching_audio", false));
instance.setFrameSkip(pref.getBoolean("enable_frame_skip", false));
diff --git a/vlc-android/src/org/videolan/vlc/gui/PreferencesActivity.java b/vlc-android/src/org/videolan/vlc/gui/PreferencesActivity.java
index 20e6ae0..294a595 100644
--- a/vlc-android/src/org/videolan/vlc/gui/PreferencesActivity.java
+++ b/vlc-android/src/org/videolan/vlc/gui/PreferencesActivity.java
@@ -20,6 +20,8 @@
package org.videolan.vlc.gui;
+import java.io.File;
+
import org.videolan.libvlc.LibVLC;
import org.videolan.vlc.AudioService;
import org.videolan.vlc.AudioServiceController;
@@ -30,11 +32,14 @@ import org.videolan.vlc.Util;
import org.videolan.vlc.gui.audio.AudioUtil;
import android.app.AlertDialog;
+import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
+import android.content.pm.PackageManager;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
+import android.net.Uri;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.EditTextPreference;
@@ -44,6 +49,7 @@ import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;
+import android.util.Log;
import android.widget.Toast;
@SuppressWarnings("deprecation")
@@ -55,6 +61,7 @@ public class PreferencesActivity extends PreferenceActivity implements OnSharedP
public final static String VIDEO_RESUME_TIME = "VideoResumeTime";
public final static String VIDEO_SUBTITLE_FILES = "VideoSubtitleFiles";
public final static int RESULT_RESCAN = RESULT_FIRST_USER + 1;
+ public final static int PICK_FONT = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -111,6 +118,40 @@ public class PreferencesActivity extends PreferenceActivity implements OnSharedP
}
});
+ // Subtitle Font
+ Preference subtitleFontPref = findPreference("subtitle_font");
+ subtitleFontPref.setOnPreferenceClickListener(
+ new OnPreferenceClickListener() {
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ Intent intent = new Intent("org.openintents.action.PICK_FILE");
+
+ File file = new File(android.os.Environment.getExternalStorageDirectory().getPath());
+ intent.setData(Uri.fromFile(file));
+
+ if (PreferencesActivity.this.getPackageManager()
+ .queryIntentActivities(intent,
+ PackageManager.MATCH_DEFAULT_ONLY).size() > 0) {
+ PreferencesActivity.this.startActivityForResult(intent, PICK_FONT);
+ } else {
+ // OI intent not found, trying anything
+ Intent intent2 = new Intent(Intent.ACTION_GET_CONTENT);
+ intent2.setType("*/*");
+ intent2.addCategory(Intent.CATEGORY_OPENABLE);
+ try {
+ PreferencesActivity.this.startActivityForResult(intent2, PICK_FONT);
+ } catch(ActivityNotFoundException e) {
+ Log.i(TAG, "No file picker found on system");
+ Toast.makeText(PreferencesActivity.this,
+ R.string.no_file_picker_found,
+ Toast.LENGTH_SHORT).show();
+ }
+ }
+
+ return true;
+ }
+ });
+
// Clear search history
Preference clearHistoryPref = findPreference("clear_history");
clearHistoryPref.setOnPreferenceClickListener(
@@ -228,6 +269,7 @@ public class PreferencesActivity extends PreferenceActivity implements OnSharedP
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if(key.equalsIgnoreCase("enable_iomx")
+ || key.equalsIgnoreCase("subtitle_font")
|| key.equalsIgnoreCase("subtitles_text_encoding")
|| key.equalsIgnoreCase("aout")
|| key.equalsIgnoreCase("vout")
@@ -254,6 +296,25 @@ public class PreferencesActivity extends PreferenceActivity implements OnSharedP
AudioServiceController.getInstance().unbindAudioService(this);
}
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ if(requestCode == PICK_FONT) {
+ if(data == null) return;
+
+ if(data.getDataString() == null) {
+ Log.d(TAG, "Subtitle font selection was cancelled");
+ }
+ if(data.getData() == null) return;
+
+ String uri = data.getData().getPath();
+
+ final SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
+ SharedPreferences.Editor editor = sharedPrefs.edit();
+ editor.putString("subtitle_font", uri);
+ editor.commit();
+ }
+ }
+
private void restartService(Context context) {
Intent service = new Intent(context, AudioService.class);
--
1.8.4.rc3
More information about the Android
mailing list