From 1a2b0169dcc53fd75b79a3ff017960fba8e684bf Mon Sep 17 00:00:00 2001 From: Arturo Iacobelli Date: Tue, 21 May 2024 17:17:17 -0400 Subject: [PATCH 1/4] Updated RateOrShareFragmenti elements to disappear on some config options. --- .../java/com/iiordanov/bVNC/CustomVnc.java | 7 +-- .../main/java/com/iiordanov/bVNC/Utils.java | 34 +++++++++++++ .../bVNC/dialogs/RateOrShareFragment.kt | 49 +++++++++++++++++-- bVNC/src/main/res/layout/rateorshare.xml | 1 + bVNC/src/main/res/values/strings.xml | 1 + 5 files changed, 82 insertions(+), 10 deletions(-) diff --git a/bVNC/src/main/java/com/iiordanov/bVNC/CustomVnc.java b/bVNC/src/main/java/com/iiordanov/bVNC/CustomVnc.java index 078068827..ed5f6175c 100644 --- a/bVNC/src/main/java/com/iiordanov/bVNC/CustomVnc.java +++ b/bVNC/src/main/java/com/iiordanov/bVNC/CustomVnc.java @@ -25,12 +25,7 @@ public void onCreate(Bundle icicle) { Map configData = configFileReader.getConfigData(); Map visibility = (Map) configData.get("mainConfiguration").get("visibility"); - for (String s : visibility.keySet()) { - Log.d(TAG, s); - int resID = getResources().getIdentifier(s, "id", packageName); - view = findViewById(resID); - view.setVisibility(visibility.get(s)); - } + Utils.setVisibilityForViewElementsViaConfig(this, "mainConfiguration", findViewById(android.R.id.content).getRootView()); Locale current = getResources().getConfiguration().locale; String currentLanguage = current.getLanguage(); diff --git a/bVNC/src/main/java/com/iiordanov/bVNC/Utils.java b/bVNC/src/main/java/com/iiordanov/bVNC/Utils.java index 158c3be12..11d3c499c 100644 --- a/bVNC/src/main/java/com/iiordanov/bVNC/Utils.java +++ b/bVNC/src/main/java/com/iiordanov/bVNC/Utils.java @@ -57,6 +57,7 @@ import com.google.android.play.core.review.ReviewInfo; import com.google.android.play.core.review.ReviewManager; import com.google.android.play.core.review.ReviewManagerFactory; +import com.iiordanov.util.CustomClientConfigFileReader; import com.undatech.opaque.AbstractDrawableData; import com.undatech.opaque.ConnectionSetupActivity; import com.undatech.remoteClientUi.R; @@ -76,6 +77,7 @@ import java.io.StringWriter; import java.io.Writer; import java.lang.reflect.Field; +import java.util.Map; import java.util.UUID; import java.util.concurrent.Executor; import java.util.concurrent.Executors; @@ -275,6 +277,38 @@ public static boolean isOpaque(Context context) { return packageName.toLowerCase().contains("opaque"); } + public static String getStringConfigAttribute(Context context, String configDataKey, String configDataKeyChild, String childAttribute) throws IOException { + try { + CustomClientConfigFileReader configFileReader = new CustomClientConfigFileReader( + context.getAssets().open(Utils.pName(context) + ".yaml")); + Map configData = configFileReader.getConfigData(); + String attr = (String) ((Map) configData.get(configDataKey).get(configDataKeyChild)).get(childAttribute); + return attr; + } + catch (IOException | NullPointerException e) { + throw e; + } + } + + public static void setVisibilityForViewElementsViaConfig(Context context, String configDataKey, View view) throws IOException { + try { + String packageName = Utils.pName(context); + CustomClientConfigFileReader configFileReader = new CustomClientConfigFileReader( + context.getAssets().open(packageName + ".yaml")); + Map configData = configFileReader.getConfigData(); + Map visibility = (Map) configData.get(configDataKey).get("visibility"); + + for (String s : visibility.keySet()) { + int resID = context.getResources().getIdentifier(s, "id", packageName); + View viewElement = view.findViewById(resID); + viewElement.setVisibility(visibility.get(s)); + } + } + catch (IOException | NullPointerException e) { + throw e; + } + } + public static Class getConnectionSetupClass(Context context) { String packageName = Utils.pName(context); boolean custom = isCustom(context); diff --git a/bVNC/src/main/java/com/iiordanov/bVNC/dialogs/RateOrShareFragment.kt b/bVNC/src/main/java/com/iiordanov/bVNC/dialogs/RateOrShareFragment.kt index 07c087ae0..2f7734f14 100644 --- a/bVNC/src/main/java/com/iiordanov/bVNC/dialogs/RateOrShareFragment.kt +++ b/bVNC/src/main/java/com/iiordanov/bVNC/dialogs/RateOrShareFragment.kt @@ -29,6 +29,9 @@ import android.widget.TextView import androidx.fragment.app.DialogFragment import com.iiordanov.bVNC.Utils import com.undatech.remoteClientUi.R +import java.io.IOException +import java.lang.Exception +import java.lang.NullPointerException class RateOrShareFragment : DialogFragment() { private var layout: TableLayout? = null @@ -47,11 +50,11 @@ class RateOrShareFragment : DialogFragment() { savedInstanceState: Bundle? ): View? { Log.d(TAG, "onCreateView called") - dialog?.setTitle(getString(R.string.action_rate_or_share_app)) + setTitle() val v = inflater.inflate(R.layout.rateorshare, container, false) layout = v.findViewById(R.id.layout) as TableLayout - donationButton = v.findViewById(R.id.buttonDonate); - previousVersionsButton = v.findViewById(R.id.buttonPreviousVersions); + donationButton = v.findViewById(R.id.buttonDonate) + previousVersionsButton = v.findViewById(R.id.buttonPreviousVersions) if (!Utils.isFree(activity)) { donationButton?.visibility = View.GONE } @@ -60,10 +63,48 @@ class RateOrShareFragment : DialogFragment() { } versionAndCode = v.findViewById(R.id.versionAndCode) as TextView versionAndCode?.text = Utils.getVersionAndCode(v.context) - + setVisibilityOfElements(v) return v } + fun setTitle() { + if (Utils.isCustom(context)){ + try { + dialog?.setTitle(getString(requireContext().resources.getIdentifier(Utils.getStringConfigAttribute(context, TAG.replaceFirstChar { it.lowercase() }, "title", "key"), "string", Utils.pName(context)))) + return + } + catch (e: Exception) { + isCustomException(e) + } + } + dialog?.setTitle(getString(R.string.action_rate_or_share_app)) + } + + fun setVisibilityOfElements(v: View) { + if (Utils.isCustom(context)){ + try { + Utils.setVisibilityForViewElementsViaConfig(context, TAG.replaceFirstChar { it.lowercase() }, v) + } + catch (e: Exception) { + isCustomException(e) + } + } + } + + fun isCustomException(e: Exception) { + when (e) { + is IOException -> { + Log.e(TAG, "Error opening config file from assets.") + } + is NullPointerException -> { + Log.e(TAG, "Error referencing attribute in config file.") + } + else -> throw e + } + Log.e(TAG, "Printing Stack Trace") + e.printStackTrace() + } + companion object { var TAG = "RateOrShareFragment" } diff --git a/bVNC/src/main/res/layout/rateorshare.xml b/bVNC/src/main/res/layout/rateorshare.xml index 79cccc1b6..ac3c49e67 100644 --- a/bVNC/src/main/res/layout/rateorshare.xml +++ b/bVNC/src/main/res/layout/rateorshare.xml @@ -81,6 +81,7 @@ diff --git a/bVNC/src/main/res/values/strings.xml b/bVNC/src/main/res/values/strings.xml index f6687cf8f..6f794c2c8 100644 --- a/bVNC/src/main/res/values/strings.xml +++ b/bVNC/src/main/res/values/strings.xml @@ -8,6 +8,7 @@ Export Settings Delete Connection Get Help, Rate, Share + Get Help Opaque Opaque Beta Advanced Settings From 9c4144cddf7492b03c9d18e9107d15a1a1a0f5f7 Mon Sep 17 00:00:00 2001 From: Arturo Iacobelli Date: Tue, 4 Jun 2024 10:32:46 -0400 Subject: [PATCH 2/4] Added translations. --- bVNC/src/main/res/values-ja/strings.xml | 25 ++++++++++++++++++--- bVNC/src/main/res/values-ko/strings.xml | 25 ++++++++++++++++++--- bVNC/src/main/res/values-zh-rCN/strings.xml | 25 ++++++++++++++++++--- bVNC/src/main/res/values-zh-rTW/strings.xml | 25 ++++++++++++++++++--- 4 files changed, 88 insertions(+), 12 deletions(-) diff --git a/bVNC/src/main/res/values-ja/strings.xml b/bVNC/src/main/res/values-ja/strings.xml index 6424cc3b3..1443f5c2c 100644 --- a/bVNC/src/main/res/values-ja/strings.xml +++ b/bVNC/src/main/res/values-ja/strings.xml @@ -7,6 +7,8 @@ 編集デフォルト設定 エクスポート設定 接続削除 + ヘルプ、評価、シェア + ヘルプ 不透明 不透明なベータ 高度な設定 @@ -218,7 +220,7 @@ 接続/認証ができません。サーバーアドレス、パスワード、認証局とサブジェクトを確認してください。 リモートコマンドを実行できませんでした。 sudoパスワードを送信できませんでした。 - エラー!サーバーホストキーが変更されました。意図的に変更された場合は、一度接続を削除してから再試行してください。そうでない場合、中間者攻撃の可能性があります。 + エラー!サーバーのホストキーが変更されました。意図的に変更した場合、続行してください。そうでない場合は、中間者攻撃の可能性があります。 SSHサーバーは、 \"password\"と\"keyboard-interactive\"両方の認証方式に非対応です。 或いは\"publickey\"方式を先に実行させる必要があります。少なくとも、どちらか1つを許可するよう設定してください。又は、bVNC側を再設定してください。有効な認証方式: 鍵ペアによるSSHサーバーへの認証に失敗しました。SSHユーザー名を確認してください。また、パブリックキーがリモート側の「認証済みキーファイル」に入っていることを確認してください。 鍵ペアの解読に失敗しました。メイン画面の\'SSH Passphrase\'フィールドに、パスフレーズが正しく入力されていることを確認してください。 @@ -843,6 +845,7 @@ aSPICEで対応済み機能は以下の通り: VNCクレデンシャルを入力してください VNCパスワードを入力してください RDPクレデンシャルを入力してください + ゲートウェイの認証情報を入力してください SPICEパスワードを入力してください キーパスフレーズを入力してください キーパスフレーズを入力してください @@ -865,7 +868,9 @@ aSPICEで対応済み機能は以下の通り: -詳細設定:このセクションでは、ローカルデバイス、プロトコル、およびパフォーマンスの微調整を確認できます。" ヘルプ + ヘルプが必要ですか? サポートフォーラム + Emailを送る 📧 バグを報告 サーバーからダウンロード ファイルからインポート @@ -874,6 +879,20 @@ aSPICEで対応済み機能は以下の通り: RDP Gfx H264 その他のデバッグログ Unicode入力(Windowsのみ) - サムネイル非表示 - ニックネーム表示 + 接続サムネイルを隠す + 接続ニックネームのみを表示 + このアプリを気に入りましたか? + 評価する ⭐⭐⭐⭐⭐ + シェアする 🔗 + このアプリをSNSで友達にシェア! + 寄付する ❤ + その他のアプリ 📱 + バージョン履歴 ⍼ + ソフトウェアキーボードのタイプ + デフォルト (TYPE_NULL) + テキスト/数字入力サポートなし(VISIBLE_PASSWORD) + テキスト入力サポートあり (TYPE_CLASS_TEXT) + この接続は、外部アプリ経由でVPNを起動するように設定されています。起動するにはMorpheuslyのようなアプリをインストールする必要があります。 + VNCビューワーが開始しました + ゲートウェイを有効にする diff --git a/bVNC/src/main/res/values-ko/strings.xml b/bVNC/src/main/res/values-ko/strings.xml index 9baeb0e27..a9899f9e2 100644 --- a/bVNC/src/main/res/values-ko/strings.xml +++ b/bVNC/src/main/res/values-ko/strings.xml @@ -7,6 +7,8 @@ 기본 설정 편집 내보내기 설정 연결 삭제 + 도움말, 평가, 공유 + 도움말 불투명 불투명한 베타 고급 설정 @@ -220,7 +222,7 @@ 연결/인증 수 없습니다. 서버 주소, Password, 인증 기관 과 서브젝트를 확인하십시오. 리모트 명령을 실행할 수 없습니다. sudo Password를 전송할 수 없습니다. - 에러! 서버 호스트 키가 변경되었습니다.의도적으로 변경된 경우는 한번 연결을 제거하고 재시행하십시오.그렇지 않은 경우 중간자 공격의 가능성이 있습니다. + 오류! 서버 호스트 키가 변경되었습니다. 의도적으로 변경한 경우 계속하십시오. 그렇지 않으면 중간자 공격의 가능성이 있습니다. SSH 서버는 \"password\" 과 \"keyboard-interactive\" 양쪽의 인증 방식으로 대응하지 않습니다. 혹은 \"publickey \" 방식을 먼저 실행해야합니다. 적어도 어느 하나를 허용하도록 설정하십시오. 또는 본 애플리케이션측을 재 설정하십시오. 유효한 인증 방식: key-pair(공개 키와 비밀 키)에 의한 SSH서버에 인증에 실패했습니다.SSH 사용자 이름을 확인하십시오.또한 공개 키가 리모트의 "인증 된 키 파일"에 들어 있는지 확인하십시오. key-pair(공개 키와 비밀 키)의 해독에 실패했습니다.메인 화면의 \'SSH Passphrase\' 필드에 passphrase(암호 문구)를 올바르게 입력되어 있는지 확인하십시오. @@ -824,6 +826,7 @@ aSPICEで의 대응 기능는 이하와 같다 : VNC credentials(자격 증명)을 입력하세요. VNC 비밀번호를 입력하세요. RDP credentials(자격 증명)을 입력하세요. + 게이트웨이 인증 정보를 입력하세요. SPICE 비밀번호를 입력하세요. 키 패스프레이즈를 입력하세요. 키 패스프레이즈를 입력하세요. @@ -846,7 +849,9 @@ aSPICEで의 대응 기능는 이하와 같다 : - 고급 설정: 이 섹션에서는 로컬 장치, 프로토콜 및 성능의 미세 조정을 확인할 수 있습니다." 도움 + 도움이 필요하십니까? 지원 포럼 + 이메일 보내기 📧 버그보고 서버에서 다운로드 파일에서 가져오기 @@ -855,6 +860,20 @@ aSPICEで의 대응 기능는 이하와 같다 : RDP Gfx H264 기타 디버그 로그 유니코드 입력(Windows만 해당) - 썸네일 비표시 - 닉네임 표시 + 연결 썸네일 숨기기 + 연결 닉네임만 표시 + 이 앱이 마음에 드셨습니까? + 평가 ⭐⭐⭐⭐⭐ + 공유 🔗 + 앱 링크를 SNS로 친구에게 공유 + 기부하다 ❤ + 기타 앱 📱 + 버전 기록 ⍼ + 소프트웨어 키보드 타입 + 디폴트(TYPE_NULL) + 텍스트/숫자 입력 지원 없음(VISIBLE_PASSWORD) + 텍스트 입력 지원 있음(TYPE_CLASS_TEXT) + 이 연결은 외부 앱을 통해 VPN을 시작하도록 구성되어 있습니다. 시작하려면 Morpheusly와 같은 앱을 설치가 필요합니다. + VNC 뷰어가 시작되었습니다. + 게이트웨이를 활성화 diff --git a/bVNC/src/main/res/values-zh-rCN/strings.xml b/bVNC/src/main/res/values-zh-rCN/strings.xml index a883e2529..a52c89c0c 100644 --- a/bVNC/src/main/res/values-zh-rCN/strings.xml +++ b/bVNC/src/main/res/values-zh-rCN/strings.xml @@ -7,6 +7,8 @@ 编辑默认设定 导出设定 删除连接设定 + 帮助、评价、分享 + 帮助 Opaque Opaque Beta 进阶设定 @@ -217,7 +219,7 @@ 无法连接或认证。请确认服务器地址、密码以及CA与主题。 没能执行远程命令。 没能发送sudo密码。 - ERROR!服务器主机密钥已更改。如果有意这样做,请删除并重试连接。否则,这可能是中间人的攻击,不能继续。 + 错误!服务器主机密钥已更改。如果这不是您故意变更的,就有可能是中间人攻击。 SSH服务器都不支持\"password\"与\"keyboard-interactive\"这两种认证方式,或者先要执行\"publickey\"方式。请设定为允许这两种方式中的至少一种。或者重新设定本App。有效的认证方式: 通过密钥对来向SSH服务器认证失败了。请确认SSH用户名,并确认您的公钥在远程端的authorized_keys文件中。 解密密钥对失败了。请确认您在主画面的\'SSH Passphrase\'字段中正确输入了密码。 @@ -825,6 +827,7 @@ aSPICE对应的功能如下: 请输入VNC凭证 请输入VNC密码 请输入RDP凭证 + 请输入网关的验证信息。 请输入SPICE密码 输入密钥密码 请输入密钥密码 @@ -845,7 +848,9 @@ aSPICE对应的功能如下: - 高级设置:在此有本地设备、协议和性能的调整。" 帮助 + 需要帮助吗? 支持论坛 + 给我们发邮件 📧 报告错误 从服务器下载 从文件导入 @@ -854,6 +859,20 @@ aSPICE对应的功能如下: RDP Gfx H264 更多调试记录 Unicode输入(仅限Windows) - 隐藏缩略图 - 只显示昵称 + 隐藏连接缩略图 + 只显示连接绰号 + 你喜欢我们的工作吗? + 评价 ⭐⭐⭐⭐⭐ + 分享 🔗 + 在社交媒体上与朋友们分享该应用程序! + 捐赠 ❤ + 其他应用程序 📱 + 版本历史 ⍼ + 软件键盘的类型 + 默认(TYPE_NULL) + 没有文字/数字的提示功能 (VISIBLE_PASSWORD) + 有字符提示功能 (TYPE_CLASS_TEXT) + 此连接设置为通过外部应用程序启动VPN。 您需要安装像Morpheusly这样的应用程序才能启动它。 + VNC查看器已启动 + 启用网关 diff --git a/bVNC/src/main/res/values-zh-rTW/strings.xml b/bVNC/src/main/res/values-zh-rTW/strings.xml index 7052d07b5..a45aac7d0 100644 --- a/bVNC/src/main/res/values-zh-rTW/strings.xml +++ b/bVNC/src/main/res/values-zh-rTW/strings.xml @@ -7,6 +7,8 @@ 編輯默認設定 匯出設定 刪除連接設定 + 說明、評價、分享 + 說明 Opaque Opaque Beta 進階設定 @@ -218,7 +220,7 @@ 沒能執行遠端命令。 沒能執行遠端命令。 沒能發送sudo密碼。 - ERROR!伺服器主機密鑰已更改。如果有意這樣做,請刪除並重試連接。否則,這可能是中間人的攻擊,不能繼續。 + ERROR!伺服器主機密鑰已更改。如果這不是您故意變更的,就有可能是中間人攻擊。 SSH伺服器都不支持\"password\"與\"keyboard-interactive\"這兩種認證方式,或者先要執行\"publickey\"方式。請設定為允許這兩種方式中的至少一種。或者重新設定本App。有效的認證方式: 透過密鑰對來向SSH伺服器認證失敗了。請確認SSH用戶名,並確認您的公開金鑰在遠端端的authorized_keys文件中。 解密密鑰對失敗了。請確認您在主畫面的\'SSH Passphrase\'欄位中正確輸入了密碼。 @@ -827,6 +829,7 @@ aSPICE對應的功能如下: 請輸入VNC憑據 請輸入VNC密碼 請輸入RDP憑據 + 請輸入閘道的驗證資訊。 請輸入SPICE密碼 輸入密鑰密碼 請輸入密鑰密碼 @@ -846,7 +849,9 @@ aSPICE對應的功能如下: - 高級設置:在此有本地設備、協議和性能的調整。" 說明 + 需要說明嗎? 支援論壇 + 給我們發Email 📧 報告BUG 從伺服器下載 從檔案匯入 @@ -855,6 +860,20 @@ aSPICE對應的功能如下: RDP Gfx H264 更多調試記錄 Unicode輸入(僅限Windows) - 隱藏縮圖 - 只顯示暱稱 + 隱藏連接縮略圖 + 只顯示連接綽號 + 你喜歡我們的工作嗎? + 評價 ⭐⭐⭐⭐⭐ + 分享 🔗 + 在社交媒體上與朋友們分享該App! + 捐贈 ❤ + 其他App 📱 + 版本履歷 ⍼ + 軟體鍵盤的類型 + 默認(TYPE_NULL) + 沒有文字/數字的提示功能 (VISIBLE_PASSWORD) + 有文字提示功能 (TYPE_CLASS_TEXT) + 此連線設定為透過外部應用程式啟動VPN。 您需要安裝像Morpheusly這樣的應用程式才能啟動它。 + VNC檢視器已啟動 + 啟用網關 \ No newline at end of file From 03d81c4ba75b3a8b5b63ec447cdf2ad4772e55de Mon Sep 17 00:00:00 2001 From: Arturo Iacobelli Date: Tue, 4 Jun 2024 14:39:51 -0400 Subject: [PATCH 3/4] Updated throwables for Util functions. --- bVNC/src/main/java/com/iiordanov/bVNC/Utils.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bVNC/src/main/java/com/iiordanov/bVNC/Utils.java b/bVNC/src/main/java/com/iiordanov/bVNC/Utils.java index 11d3c499c..72abb4068 100644 --- a/bVNC/src/main/java/com/iiordanov/bVNC/Utils.java +++ b/bVNC/src/main/java/com/iiordanov/bVNC/Utils.java @@ -277,7 +277,7 @@ public static boolean isOpaque(Context context) { return packageName.toLowerCase().contains("opaque"); } - public static String getStringConfigAttribute(Context context, String configDataKey, String configDataKeyChild, String childAttribute) throws IOException { + public static String getStringConfigAttribute(Context context, String configDataKey, String configDataKeyChild, String childAttribute) throws IOException, NullPointerException { try { CustomClientConfigFileReader configFileReader = new CustomClientConfigFileReader( context.getAssets().open(Utils.pName(context) + ".yaml")); @@ -290,7 +290,7 @@ public static String getStringConfigAttribute(Context context, String configData } } - public static void setVisibilityForViewElementsViaConfig(Context context, String configDataKey, View view) throws IOException { + public static void setVisibilityForViewElementsViaConfig(Context context, String configDataKey, View view) throws IOException, NullPointerException { try { String packageName = Utils.pName(context); CustomClientConfigFileReader configFileReader = new CustomClientConfigFileReader( From 3a79070591fc4874afc6806869c0f7d9498122df Mon Sep 17 00:00:00 2001 From: Arturo Iacobelli Date: Mon, 21 Oct 2024 10:49:07 -0400 Subject: [PATCH 4/4] Modified for central CustomConfigFileReader. --- bVNC/src/main/java/com/iiordanov/bVNC/App.java | 17 +++++++++++++++++ .../java/com/iiordanov/bVNC/CustomVnc.java | 2 +- .../main/java/com/iiordanov/bVNC/Utils.java | 14 ++++---------- .../bVNC/dialogs/RateOrShareFragment.kt | 18 +++++++++++------- 4 files changed, 33 insertions(+), 18 deletions(-) diff --git a/bVNC/src/main/java/com/iiordanov/bVNC/App.java b/bVNC/src/main/java/com/iiordanov/bVNC/App.java index 7a7270d59..48d694a48 100644 --- a/bVNC/src/main/java/com/iiordanov/bVNC/App.java +++ b/bVNC/src/main/java/com/iiordanov/bVNC/App.java @@ -1,19 +1,26 @@ package com.iiordanov.bVNC; import android.content.Context; +import android.util.Log; import androidx.appcompat.app.AppCompatDelegate; import androidx.multidex.MultiDex; import androidx.multidex.MultiDexApplication; +import java.io.IOException; import java.lang.ref.WeakReference; +import com.iiordanov.util.CustomClientConfigFileReader; + public class App extends MultiDexApplication { + private final static String TAG = "App"; public static boolean debugLog = false; private static WeakReference context; private Database database; + public static CustomClientConfigFileReader configFileReader; + public static Context getContext() { return context.get(); } @@ -31,10 +38,20 @@ public void onCreate() { Constants.DEFAULT_PROTOCOL_PORT = Utils.getDefaultPort(this); database = new Database(this); context = new WeakReference(this); + if(Utils.isCustom(getApplicationContext())){ + try { + configFileReader = new CustomClientConfigFileReader( + getApplicationContext().getAssets().open(Utils.pName(getApplicationContext()) + ".yaml")); + } catch (IOException e) { + Log.e(TAG, "Error opening config file from assets."); + } + } debugLog = Utils.querySharedPreferenceBoolean(getApplicationContext(), "moreDebugLoggingTag"); } public Database getDatabase() { return database; } + + public static CustomClientConfigFileReader getConfigFileReader(){ return configFileReader;} } diff --git a/bVNC/src/main/java/com/iiordanov/bVNC/CustomVnc.java b/bVNC/src/main/java/com/iiordanov/bVNC/CustomVnc.java index ed5f6175c..e27153d9b 100644 --- a/bVNC/src/main/java/com/iiordanov/bVNC/CustomVnc.java +++ b/bVNC/src/main/java/com/iiordanov/bVNC/CustomVnc.java @@ -25,7 +25,7 @@ public void onCreate(Bundle icicle) { Map configData = configFileReader.getConfigData(); Map visibility = (Map) configData.get("mainConfiguration").get("visibility"); - Utils.setVisibilityForViewElementsViaConfig(this, "mainConfiguration", findViewById(android.R.id.content).getRootView()); + Utils.setVisibilityForViewElementsViaConfig(this, App.getConfigFileReader().getConfigData(),"mainConfiguration", findViewById(android.R.id.content).getRootView()); Locale current = getResources().getConfiguration().locale; String currentLanguage = current.getLanguage(); diff --git a/bVNC/src/main/java/com/iiordanov/bVNC/Utils.java b/bVNC/src/main/java/com/iiordanov/bVNC/Utils.java index 72abb4068..bf306cf76 100644 --- a/bVNC/src/main/java/com/iiordanov/bVNC/Utils.java +++ b/bVNC/src/main/java/com/iiordanov/bVNC/Utils.java @@ -277,25 +277,19 @@ public static boolean isOpaque(Context context) { return packageName.toLowerCase().contains("opaque"); } - public static String getStringConfigAttribute(Context context, String configDataKey, String configDataKeyChild, String childAttribute) throws IOException, NullPointerException { + public static String getStringConfigAttribute(Map configData, String configDataKey, String configDataKeyChild, String childAttribute) throws NullPointerException { try { - CustomClientConfigFileReader configFileReader = new CustomClientConfigFileReader( - context.getAssets().open(Utils.pName(context) + ".yaml")); - Map configData = configFileReader.getConfigData(); String attr = (String) ((Map) configData.get(configDataKey).get(configDataKeyChild)).get(childAttribute); return attr; } - catch (IOException | NullPointerException e) { + catch (NullPointerException e) { throw e; } } - public static void setVisibilityForViewElementsViaConfig(Context context, String configDataKey, View view) throws IOException, NullPointerException { + public static void setVisibilityForViewElementsViaConfig(Context context, Map configData, String configDataKey, View view) throws NullPointerException { try { String packageName = Utils.pName(context); - CustomClientConfigFileReader configFileReader = new CustomClientConfigFileReader( - context.getAssets().open(packageName + ".yaml")); - Map configData = configFileReader.getConfigData(); Map visibility = (Map) configData.get(configDataKey).get("visibility"); for (String s : visibility.keySet()) { @@ -304,7 +298,7 @@ public static void setVisibilityForViewElementsViaConfig(Context context, String viewElement.setVisibility(visibility.get(s)); } } - catch (IOException | NullPointerException e) { + catch (NullPointerException e) { throw e; } } diff --git a/bVNC/src/main/java/com/iiordanov/bVNC/dialogs/RateOrShareFragment.kt b/bVNC/src/main/java/com/iiordanov/bVNC/dialogs/RateOrShareFragment.kt index 2f7734f14..d064a20d7 100644 --- a/bVNC/src/main/java/com/iiordanov/bVNC/dialogs/RateOrShareFragment.kt +++ b/bVNC/src/main/java/com/iiordanov/bVNC/dialogs/RateOrShareFragment.kt @@ -27,11 +27,10 @@ import android.widget.Button import android.widget.TableLayout import android.widget.TextView import androidx.fragment.app.DialogFragment +import com.iiordanov.bVNC.App import com.iiordanov.bVNC.Utils import com.undatech.remoteClientUi.R import java.io.IOException -import java.lang.Exception -import java.lang.NullPointerException class RateOrShareFragment : DialogFragment() { private var layout: TableLayout? = null @@ -70,7 +69,15 @@ class RateOrShareFragment : DialogFragment() { fun setTitle() { if (Utils.isCustom(context)){ try { - dialog?.setTitle(getString(requireContext().resources.getIdentifier(Utils.getStringConfigAttribute(context, TAG.replaceFirstChar { it.lowercase() }, "title", "key"), "string", Utils.pName(context)))) + dialog?.setTitle( + getString( + requireContext().resources.getIdentifier( + Utils.getStringConfigAttribute(App.configFileReader.configData, TAG.replaceFirstChar { it.lowercase() }, "title", "key"), + "string", + Utils.pName(context) + ) + ) + ) return } catch (e: Exception) { @@ -83,7 +90,7 @@ class RateOrShareFragment : DialogFragment() { fun setVisibilityOfElements(v: View) { if (Utils.isCustom(context)){ try { - Utils.setVisibilityForViewElementsViaConfig(context, TAG.replaceFirstChar { it.lowercase() }, v) + Utils.setVisibilityForViewElementsViaConfig(context, App.configFileReader.configData, TAG.replaceFirstChar { it.lowercase() }, v) } catch (e: Exception) { isCustomException(e) @@ -93,9 +100,6 @@ class RateOrShareFragment : DialogFragment() { fun isCustomException(e: Exception) { when (e) { - is IOException -> { - Log.e(TAG, "Error opening config file from assets.") - } is NullPointerException -> { Log.e(TAG, "Error referencing attribute in config file.") }