From 3f0e33df89454a2804ece9d2ea736ed3a1b432e0 Mon Sep 17 00:00:00 2001
From: Yair Morgenstern <yairm210@hotmail.com>
Date: Fri, 20 Dec 2019 11:27:26 +0200
Subject: [PATCH] Added try/catch on reading the translation file (some phones
 don't support UTF-8???) You can always pass the language screen even if we
 don't read the percentage files We read the percentage files from the
 INTERNAL NOT THE LOCAL OBVIOUSLY

---
 android/build.gradle                                 |  4 ++--
 .../models/translations/TranslationFileReader.kt     |  5 ++---
 .../com/unciv/models/translations/Translations.kt    | 12 ++++++++++--
 .../optionstable/WorldScreenOptionsTable.kt          |  4 ++--
 4 files changed, 16 insertions(+), 9 deletions(-)

diff --git a/android/build.gradle b/android/build.gradle
index 366936c973..9e8fae6030 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -21,8 +21,8 @@ android {
         applicationId "com.unciv.app"
         minSdkVersion 14
         targetSdkVersion 29
-        versionCode 349
-        versionName "3.4.1"
+        versionCode 350
+        versionName "3.4.1-patch1"
 
         archivesBaseName = "Unciv"
     }
diff --git a/core/src/com/unciv/models/translations/TranslationFileReader.kt b/core/src/com/unciv/models/translations/TranslationFileReader.kt
index 22ecbca9e4..d2c9a25da1 100644
--- a/core/src/com/unciv/models/translations/TranslationFileReader.kt
+++ b/core/src/com/unciv/models/translations/TranslationFileReader.kt
@@ -66,11 +66,10 @@ class TranslationFileReader{
 
     fun readLanguagePercentages():HashMap<String,Int>{
 
-
         val hashmap = HashMap<String,Int>()
-        val percentageFile = Gdx.files.local(percentagesFileLocation)
+        val percentageFile = Gdx.files.internal(percentagesFileLocation)
         if(!percentageFile.exists()) return hashmap
-        for(line in Gdx.files.local(percentagesFileLocation).reader().readLines()){
+        for(line in percentageFile.reader().readLines()){
             val splitLine = line.split(" = ")
             hashmap[splitLine[0]]=splitLine[1].toInt()
         }
diff --git a/core/src/com/unciv/models/translations/Translations.kt b/core/src/com/unciv/models/translations/Translations.kt
index 27b16db700..52a2d4b769 100644
--- a/core/src/com/unciv/models/translations/Translations.kt
+++ b/core/src/com/unciv/models/translations/Translations.kt
@@ -9,6 +9,7 @@ import kotlin.collections.HashMap
 class Translations : LinkedHashMap<String, TranslationEntry>(){
 
     var percentCompleteOfLanguages = HashMap<String,Int>()
+            .apply { put("English",100) } // So even if we don't manage to load the percentages, we can still pass the language screen
 
     fun get(text:String,language:String): String {
         if(!hasTranslation(text,language)) return text
@@ -35,8 +36,15 @@ class Translations : LinkedHashMap<String, TranslationEntry>(){
 
         val translationFileName = "jsons/translationsByLanguage/$language.properties"
         if (!Gdx.files.internal(translationFileName).exists()) return
-        val languageTranslations = TranslationFileReader()
-                .read(translationFileName)
+
+        val languageTranslations:HashMap<String,String>
+        try { // On some devices we get a weird UnsupportedEncodingException
+            // which is super odd because everyone should support UTF-8
+             languageTranslations = TranslationFileReader()
+                    .read(translationFileName)
+        }catch (ex:Exception){
+            return
+        }
 
         for (translation in languageTranslations) {
             if (!containsKey(translation.key))
diff --git a/core/src/com/unciv/ui/worldscreen/optionstable/WorldScreenOptionsTable.kt b/core/src/com/unciv/ui/worldscreen/optionstable/WorldScreenOptionsTable.kt
index 3d3fd5703f..10b75cc6bf 100644
--- a/core/src/com/unciv/ui/worldscreen/optionstable/WorldScreenOptionsTable.kt
+++ b/core/src/com/unciv/ui/worldscreen/optionstable/WorldScreenOptionsTable.kt
@@ -264,14 +264,14 @@ class WorldScreenOptionsTable(val worldScreen:WorldScreen) : PopupTable(worldScr
     }
 
     private fun addLanguageSelectBox(innerTable: PopupTable) {
-        innerTable.add("Language".toLabel())
         val languageSelectBox = SelectBox<Language>(skin)
         val languageArray = Array<Language>()
-        val ruleSet = worldScreen.gameInfo.ruleSet
         UncivGame.Current.translations.percentCompleteOfLanguages
                 .map { Language(it.key, if(it.key=="English") 100 else it.value) }
                 .sortedByDescending { it.percentComplete }
                 .forEach { languageArray.add(it) }
+        if(languageArray.size==0) return
+        innerTable.add("Language".toLabel())
         languageSelectBox.items = languageArray
         val matchingLanguage = languageArray.firstOrNull { it.language == UncivGame.Current.settings.language }
         languageSelectBox.selected = if (matchingLanguage != null) matchingLanguage else languageArray.first()