mirror of
https://github.com/ArcaneChat/android.git
synced 2026-07-03 14:05:24 +02:00
133 lines
4.0 KiB
Java
133 lines
4.0 KiB
Java
package org.thoughtcrime.securesms;
|
|
|
|
import android.content.res.AssetManager;
|
|
import android.os.Bundle;
|
|
import android.view.Menu;
|
|
import android.view.MenuItem;
|
|
|
|
import androidx.activity.OnBackPressedCallback;
|
|
|
|
import org.thoughtcrime.securesms.util.TextUtil;
|
|
import org.thoughtcrime.securesms.util.Util;
|
|
|
|
import java.io.InputStream;
|
|
import java.util.Locale;
|
|
|
|
public class LocalHelpActivity extends WebViewActivity
|
|
{
|
|
public static final String SECTION_EXTRA = "section_extra";
|
|
|
|
@Override
|
|
protected boolean allowInLockedMode() { return true; }
|
|
|
|
@Override
|
|
protected void onCreate(Bundle state, boolean ready) {
|
|
super.onCreate(state, ready);
|
|
setForceDark();
|
|
getSupportActionBar().setTitle(getString(R.string.menu_help));
|
|
|
|
String section = getIntent().getStringExtra(SECTION_EXTRA);
|
|
String helpPath = "help/LANG/help.html";
|
|
String helpLang = "en";
|
|
try {
|
|
Locale locale = Util.getLocale();
|
|
String appLang = locale.getLanguage();
|
|
String appCountry = locale.getCountry();
|
|
if (assetExists(helpPath.replace("LANG", appLang))) {
|
|
helpLang = appLang;
|
|
} else if (assetExists(helpPath.replace("LANG", appLang+"_"+appCountry))) {
|
|
helpLang = appLang+"_"+appCountry;
|
|
} else {
|
|
appLang = appLang.substring(0, 2);
|
|
if (assetExists(helpPath.replace("LANG", appLang))) {
|
|
helpLang = appLang;
|
|
}
|
|
}
|
|
} catch(Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
|
|
getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) {
|
|
@Override
|
|
public void handleOnBackPressed() {
|
|
if (webView.canGoBack()) {
|
|
webView.goBack();
|
|
} else {
|
|
setEnabled(false);
|
|
getOnBackPressedDispatcher().onBackPressed();
|
|
}
|
|
}
|
|
});
|
|
|
|
webView.loadUrl("file:///android_asset/" + helpPath.replace("LANG", helpLang) + (section!=null? section : ""));
|
|
}
|
|
|
|
@Override
|
|
public boolean onPrepareOptionsMenu(Menu menu) {
|
|
super.onPrepareOptionsMenu(menu);
|
|
this.getMenuInflater().inflate(R.menu.local_help, menu);
|
|
|
|
// Append " ↗" to external link buttons
|
|
MenuItem item = menu.findItem(R.id.learn_more);
|
|
if (item != null) {
|
|
item.setTitle(TextUtil.markAsExternal(getString(R.string.delta_chat_homepage)));
|
|
}
|
|
|
|
item = menu.findItem(R.id.privacy_policy);
|
|
if (item != null) {
|
|
item.setTitle(TextUtil.markAsExternal(getString(R.string.privacy_policy)));
|
|
}
|
|
|
|
item = menu.findItem(R.id.contribute);
|
|
if (item != null) {
|
|
item.setTitle(TextUtil.markAsExternal(getString(R.string.contribute)));
|
|
}
|
|
|
|
item = menu.findItem(R.id.report_issue);
|
|
if (item != null) {
|
|
item.setTitle(TextUtil.markAsExternal(getString(R.string.global_menu_help_report_desktop)));
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public boolean onOptionsItemSelected(MenuItem item) {
|
|
super.onOptionsItemSelected(item);
|
|
int itemId = item.getItemId();
|
|
if (itemId == R.id.log_scroll_up) {
|
|
webView.scrollTo(0, 0);
|
|
return true;
|
|
} else if (itemId == R.id.learn_more) {
|
|
openOnlineUrl("https://arcanechat.me");
|
|
return true;
|
|
} else if (itemId == R.id.privacy_policy) {
|
|
openOnlineUrl("https://arcanechat.me/privacy.html");
|
|
return true;
|
|
} else if (itemId == R.id.contribute) {
|
|
openOnlineUrl("https://arcanechat.me/#contribute");
|
|
return true;
|
|
} else if (itemId == R.id.report_issue) {
|
|
openOnlineUrl("https://github.com/ArcaneChat/android/issues");
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
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) {
|
|
; // a non-existent asset is no error, the function's purpose is to check exactly that.
|
|
}
|
|
return exists;
|
|
}
|
|
}
|