diff --git a/app/build.gradle b/app/build.gradle index 2bd1f3900..b48b58973 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -130,6 +130,7 @@ dependencies { implementation('com.crashlytics.sdk.android:answers:1.3.13@aar') { transitive = true } + implementation 'com.googlecode.juniversalchardet:juniversalchardet:1.0.3' testImplementation 'junit:junit:4.12' annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1' } diff --git a/app/src/main/java/com/kabouzeid/gramophone/App.java b/app/src/main/java/com/kabouzeid/gramophone/App.java index 7e0b8e1e6..4a261acc4 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/App.java +++ b/app/src/main/java/com/kabouzeid/gramophone/App.java @@ -77,7 +77,8 @@ public void onBillingInitialized() { } public static boolean isProVersion() { - return BuildConfig.DEBUG || app.billingProcessor.isPurchased(PRO_VERSION_PRODUCT_ID); + + //return BuildConfig.DEBUG || app.billingProcessor.isPurchased(PRO_VERSION_PRODUCT_ID); } public static App getInstance() { diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/FileUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/FileUtil.java index 0648b629c..2f8223d59 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/FileUtil.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/FileUtil.java @@ -11,6 +11,8 @@ import com.kabouzeid.gramophone.loader.SortedCursor; import com.kabouzeid.gramophone.model.Song; +import org.mozilla.universalchardet.UniversalDetector; + import java.io.BufferedReader; import java.io.File; import java.io.FileFilter; @@ -18,6 +20,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -179,6 +182,18 @@ public static String readFromStream(InputStream is) throws Exception { return sb.toString(); } + public static String readFromStream(InputStream is, Charset charset) throws Exception { + BufferedReader reader = new BufferedReader(new InputStreamReader(is, charset)); + StringBuilder sb = new StringBuilder(); + String line; + while ((line = reader.readLine()) != null) { + if (sb.length() > 0) sb.append("\n"); + sb.append(line); + } + reader.close(); + return sb.toString(); + } + public static String read(File file) throws Exception { FileInputStream fin = new FileInputStream(file); String ret = readFromStream(fin); @@ -186,6 +201,32 @@ public static String read(File file) throws Exception { return ret; } + public static String readWithCharsetDet(File file) throws Exception { + //Detect the charset of the file + FileInputStream finForDet = new FileInputStream(file); + UniversalDetector detector = new UniversalDetector(null); + int nread; + byte[] buf = new byte[4096]; + while ((nread = finForDet.read(buf)) > 0 && !detector.isDone()) { + detector.handleData(buf, 0, nread); + } + detector.dataEnd(); + String encoding = detector.getDetectedCharset(); + detector.reset(); + + Charset charset; + if(encoding == null){ + charset = Charset.forName("UTF-8"); + }else { + charset = Charset.forName(encoding); + } + + FileInputStream fin = new FileInputStream(file); + String ret = readFromStream(fin, charset); + fin.close(); + return ret; + } + public static String safeGetCanonicalPath(File file) { try { return file.getCanonicalPath(); diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/MusicUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/MusicUtil.java index 869a33230..4340700ed 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/MusicUtil.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/MusicUtil.java @@ -328,7 +328,7 @@ public static String getLyrics(Song song) { if (files != null && files.length > 0) { for (File f : files) { try { - String newLyrics = FileUtil.read(f); + String newLyrics = FileUtil.readWithCharsetDet(f); if (newLyrics != null && !newLyrics.trim().isEmpty()) { if (AbsSynchronizedLyrics.isSynchronized(newLyrics)) { return newLyrics;