Skip to content

Commit 5a60d46

Browse files
authored
Merge pull request #279 from rainxchzed/android-external-install
2 parents b154c49 + f774d14 commit 5a60d46

File tree

23 files changed

+333
-29
lines changed

23 files changed

+333
-29
lines changed

core/data/src/androidMain/kotlin/zed/rainxch/core/data/services/AndroidInstaller.kt

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,29 @@ class AndroidInstaller(
212212
}
213213
}
214214

215+
override fun openWithExternalInstaller(filePath: String) {
216+
val file = File(filePath)
217+
if (!file.exists()) {
218+
throw IllegalStateException("APK file not found: $filePath")
219+
}
220+
221+
Logger.d { "Opening APK with external installer: $filePath" }
222+
223+
val authority = "${context.packageName}.fileprovider"
224+
val fileUri: Uri = FileProvider.getUriForFile(context, authority, file)
225+
226+
val intent = Intent(Intent.ACTION_VIEW).apply {
227+
setDataAndType(fileUri, "application/vnd.android.package-archive")
228+
addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
229+
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
230+
}
231+
232+
val chooser = Intent.createChooser(intent, null).apply {
233+
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
234+
}
235+
context.startActivity(chooser)
236+
}
237+
215238
override fun openInAppManager(
216239
filePath: String,
217240
onOpenInstaller: () -> Unit

core/data/src/jvmMain/kotlin/zed/rainxch/core/data/services/DesktopInstaller.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,10 @@ class DesktopInstaller(
6262
return false
6363
}
6464

65+
override fun openWithExternalInstaller(filePath: String) {
66+
// Not applicable on desktop
67+
}
68+
6569
override fun isAssetInstallable(assetName: String): Boolean {
6670
val name = assetName.lowercase()
6771

core/domain/src/commonMain/kotlin/zed/rainxch/core/domain/system/Installer.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,6 @@ interface Installer {
3030
fun getApkInfoExtractor(): InstallerInfoExtractor
3131

3232
fun openApp(packageName: String): Boolean
33+
34+
fun openWithExternalInstaller(filePath: String)
3335
}

core/presentation/src/commonMain/composeResources/values-bn/strings-bn.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,12 @@
209209
<!-- External tools -->
210210
<string name="log_prepare_appmanager">AppManager-এর জন্য প্রস্তুত করা হচ্ছে</string>
211211
<string name="log_opened_appmanager">AppManager-এ খোলা হয়েছে</string>
212+
<string name="log_permission_blocked">ডিভাইস নীতি দ্বারা ইনস্টল অনুমতি অবরুদ্ধ</string>
213+
<string name="log_opened_external_installer">বাহ্যিক ইনস্টলারে খোলা হয়েছে</string>
214+
<string name="install_permission_unavailable">ইনস্টল অনুমতি অনুপলব্ধ</string>
215+
<string name="install_permission_blocked_message">APK সফলভাবে ডাউনলোড হয়েছে কিন্তু এই ডিভাইসে সরাসরি ইনস্টল করার অনুমতি নেই। আপনি কি এটি বাহ্যিক ইনস্টলার দিয়ে খুলতে চান?</string>
216+
<string name="open_with_external_installer">বাহ্যিক ইনস্টলার দিয়ে খুলুন</string>
217+
<string name="external_installer_description">APK ইনস্টল করতে তৃতীয় পক্ষের অ্যাপ ব্যবহার করুন</string>
212218

213219
<!-- Errors -->
214220
<string name="error_generic">ত্রুটি: %1$s</string>

core/presentation/src/commonMain/composeResources/values-es/strings-es.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,12 @@
157157

158158
<string name="log_prepare_appmanager">Preparando para AppManager</string>
159159
<string name="log_opened_appmanager">Abierto en AppManager</string>
160+
<string name="log_permission_blocked">Permiso de instalación bloqueado por política del dispositivo</string>
161+
<string name="log_opened_external_installer">Abierto en instalador externo</string>
162+
<string name="install_permission_unavailable">Permiso de instalación no disponible</string>
163+
<string name="install_permission_blocked_message">El APK se descargó correctamente pero este dispositivo no permite la instalación directa. ¿Desea abrirlo con un instalador externo?</string>
164+
<string name="open_with_external_installer">Abrir con instalador externo</string>
165+
<string name="external_installer_description">Usar una aplicación de terceros para instalar el APK</string>
160166

161167
<string name="error_generic">Error: %1$s</string>
162168
<string name="error_asset_not_supported">Tipo de archivo .%1$s no compatible</string>

core/presentation/src/commonMain/composeResources/values-fr/strings-fr.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,12 @@
157157

158158
<string name="log_prepare_appmanager">Préparation pour AppManager</string>
159159
<string name="log_opened_appmanager">Ouvert dans AppManager</string>
160+
<string name="log_permission_blocked">Permission d\'installation bloquée par la politique de l\'appareil</string>
161+
<string name="log_opened_external_installer">Ouvert dans l\'installateur externe</string>
162+
<string name="install_permission_unavailable">Permission d\'installation indisponible</string>
163+
<string name="install_permission_blocked_message">L\'APK a été téléchargé avec succès mais cet appareil n\'autorise pas l\'installation directe. Voulez-vous l\'ouvrir avec un installateur externe ?</string>
164+
<string name="open_with_external_installer">Ouvrir avec un installateur externe</string>
165+
<string name="external_installer_description">Utiliser une application tierce pour installer l\'APK</string>
160166

161167
<string name="error_generic">Erreur : %1$s</string>
162168
<string name="error_asset_not_supported">Type de fichier .%1$s non pris en charge</string>

core/presentation/src/commonMain/composeResources/values-hi/strings-hi.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,12 @@
209209
<!-- External tools -->
210210
<string name="log_prepare_appmanager">ऐपमैनेजर के लिए तैयारी कर रहा है</string>
211211
<string name="log_opened_appmanager">ऐप मैनेजर में खोला गया</string>
212+
<string name="log_permission_blocked">डिवाइस नीति द्वारा इंस्टॉल अनुमति अवरुद्ध</string>
213+
<string name="log_opened_external_installer">बाहरी इंस्टॉलर में खोला गया</string>
214+
<string name="install_permission_unavailable">इंस्टॉल अनुमति उपलब्ध नहीं</string>
215+
<string name="install_permission_blocked_message">APK सफलतापूर्वक डाउनलोड हो गया लेकिन यह डिवाइस सीधे इंस्टॉल करने की अनुमति नहीं देता। क्या आप इसे बाहरी इंस्टॉलर से खोलना चाहेंगे?</string>
216+
<string name="open_with_external_installer">बाहरी इंस्टॉलर से खोलें</string>
217+
<string name="external_installer_description">APK इंस्टॉल करने के लिए तृतीय-पक्ष ऐप का उपयोग करें</string>
212218

213219
<!-- Errors -->
214220
<string name="error_generic">गलती: %1$s</string>

core/presentation/src/commonMain/composeResources/values-it/strings-it.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,12 @@
209209
<!-- External tools -->
210210
<string name="log_prepare_appmanager">Preparazione dell'AppManager</string>
211211
<string name="log_opened_appmanager">Aperto nell'AppManager</string>
212+
<string name="log_permission_blocked">Permesso di installazione bloccato dalla policy del dispositivo</string>
213+
<string name="log_opened_external_installer">Aperto nell\'installatore esterno</string>
214+
<string name="install_permission_unavailable">Permesso di installazione non disponibile</string>
215+
<string name="install_permission_blocked_message">L\'APK è stato scaricato con successo ma questo dispositivo non consente l\'installazione diretta. Vuoi aprirlo con un installatore esterno?</string>
216+
<string name="open_with_external_installer">Apri con installatore esterno</string>
217+
<string name="external_installer_description">Usa un\'app di terze parti per installare l\'APK</string>
212218

213219
<!-- Errors -->
214220
<string name="error_generic">Errore: %1$s</string>

core/presentation/src/commonMain/composeResources/values-ja/strings-ja.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,12 @@
157157

158158
<string name="log_prepare_appmanager">AppManager 用に準備中</string>
159159
<string name="log_opened_appmanager">AppManager で開きました</string>
160+
<string name="log_permission_blocked">デバイスポリシーによりインストール権限がブロックされました</string>
161+
<string name="log_opened_external_installer">外部インストーラーで開きました</string>
162+
<string name="install_permission_unavailable">インストール権限が利用できません</string>
163+
<string name="install_permission_blocked_message">APKは正常にダウンロードされましたが、このデバイスでは直接インストールが許可されていません。外部インストーラーで開きますか?</string>
164+
<string name="open_with_external_installer">外部インストーラーで開く</string>
165+
<string name="external_installer_description">サードパーティアプリを使用してAPKをインストール</string>
160166

161167
<string name="error_generic">エラー: %1$s</string>
162168
<string name="error_asset_not_supported">ファイル形式 .%1$s は未対応です</string>

core/presentation/src/commonMain/composeResources/values-kr/strings-kr.xml renamed to core/presentation/src/commonMain/composeResources/values-ko/strings-ko.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,12 @@
207207
<!-- External tools -->
208208
<string name="log_prepare_appmanager">AppManager 준비 중</string>
209209
<string name="log_opened_appmanager">AppManager에서 열림</string>
210+
<string name="log_permission_blocked">기기 정책에 의해 설치 권한이 차단됨</string>
211+
<string name="log_opened_external_installer">외부 설치 프로그램에서 열림</string>
212+
<string name="install_permission_unavailable">설치 권한을 사용할 수 없음</string>
213+
<string name="install_permission_blocked_message">APK가 성공적으로 다운로드되었지만 이 기기에서는 직접 설치가 허용되지 않습니다. 외부 설치 프로그램으로 열까요?</string>
214+
<string name="open_with_external_installer">외부 설치 프로그램으로 열기</string>
215+
<string name="external_installer_description">타사 앱을 사용하여 APK 설치</string>
210216

211217
<!-- Errors -->
212218
<string name="error_generic">오류: %1$s</string>

0 commit comments

Comments
 (0)