From 8ba2222ab8d6621916c3c5dd6998297acdb7ba8c Mon Sep 17 00:00:00 2001 From: "B. Petersen" Date: Sun, 26 Jan 2020 20:29:39 +0100 Subject: [PATCH] use Asset.open() to check if a local-help exists for a language; Asset.list() is slow and unreliable on several systems --- .../securesms/LocalHelpActivity.java | 30 +++++++++++++++---- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/src/org/thoughtcrime/securesms/LocalHelpActivity.java b/src/org/thoughtcrime/securesms/LocalHelpActivity.java index 7e41c5dbc..f7318b12a 100644 --- a/src/org/thoughtcrime/securesms/LocalHelpActivity.java +++ b/src/org/thoughtcrime/securesms/LocalHelpActivity.java @@ -18,6 +18,7 @@ import org.thoughtcrime.securesms.util.DynamicLanguage; import org.thoughtcrime.securesms.util.DynamicTheme; import java.io.File; +import java.io.InputStream; import java.util.Arrays; import java.util.Locale; @@ -33,21 +34,40 @@ public class LocalHelpActivity extends PassphraseRequiredActionBarActivity dynamicLanguage.onCreate(this); } + private boolean assetExists(String fileName) { + // test using AssetManager.open(); + // AssetManager.list() is unreliable eg. on my Android 7 Moto G + // and also reported to be pretty slow. + boolean exists = false; + try { + AssetManager assetManager = getResources().getAssets(); + InputStream is = assetManager.open(fileName); + exists = true; + is.close(); + } catch(Exception e) { + ; + } + return exists; + } + @Override protected void onCreate(Bundle state, boolean ready) { setContentView(R.layout.local_help_activity); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setTitle(getString(R.string.menu_help)); - String helpPath = "help/LANG/"; + String helpPath = "help/LANG/help.html"; String helpLang = "en"; - String helpFile = "help.html"; try { Locale locale = dynamicLanguage.getCurrentLocale(); String appLang = locale.getLanguage(); - AssetManager assetManager = getResources().getAssets(); - if (Arrays.asList(assetManager.list(helpPath.replace("LANG", appLang))).contains(helpFile)) { + if (assetExists(helpPath.replace("LANG", appLang))) { helpLang = appLang; + } else { + appLang = appLang.substring(0, 2); + if (assetExists(helpPath.replace("LANG", appLang))) { + helpLang = appLang; + } } } catch(Exception e) { e.printStackTrace(); @@ -63,7 +83,7 @@ public class LocalHelpActivity extends PassphraseRequiredActionBarActivity return false; } }); - webView.loadUrl("file:///android_asset/" + helpPath.replace("LANG", helpLang) + helpFile); + webView.loadUrl("file:///android_asset/" + helpPath.replace("LANG", helpLang)); } @Override